【小软件】创建临时代码仓

python写了个小软件,用于创建临时代码仓,并用pycharm打开

 


import os
import ctypes
import logging
import tempfile
from functools import lru_cache
from tkinter import *
from glob import glob
import subprocess as sp
from threading import Thread
from datetime import datetime


ctypes.windll.shcore.SetProcessDpiAwareness(True)
logging.basicConfig(level=logging.DEBUG)


def download_repo(repo_link, temp_folder=None, branch='master'):
temp_folder = temp_folder or tempfile.TemporaryDirectory()
tf_name = temp_folder if type(temp_folder) is str else temp_folder.name
project_name = repo_link.split('/')[-1].rstrip('.git') # 提取项目名称
logging.debug(f'项目名称提取:{project_name}')
# 本地项目顶层目录路径
repo_folder = os.path.join(tf_name, f'{project_name}_{branch}_{datetime.now().strftime("%m_%d_%H_%M")}')
logging.info(f'临时项目储存目录:{repo_folder}')
logging.info(f'分支:{branch}')
p = sp.Popen(
[
'git', 'clone', repo_link, repo_folder.replace('\\', '/'), '-b', branch,
],
)
p.wait()

return repo_folder


@lru_cache(maxsize=8)
def get_pycharm_cmd():
possibles = [
r"C:\Program Files\JetBrains\PyCharm*\bin\pycharm.bat",
r'C:\**\JetBrains\PyCharm*\bin\pycharm.bat',
r'C:\**\pycharm.bat',
r'D:\**\pycharm.bat',
]
for path in possibles:
result = glob(path, recursive=True)
logging.debug(f'搜索pycharm.bat路径:{path}\n结果:{result}')
if result:
return result[0]


def open_in_pycharm(project_folder):
p = sp.Popen(
[get_pycharm_cmd(), project_folder],
)
p.wait()


def main():
r = Tk()
default_title = '[工具集]创建临时仓库'
r.title(default_title)
r.geometry('600x100+1000+500')

info_frame = Frame(r)
info_frame.pack(side=TOP, fill=BOTH, expand=True)

info_frame.columnconfigure(1, weight=1)
for i in range(3):
info_frame.rowconfigure(i, weight=1)

Label(info_frame, text='仓库链接').grid(row=0, column=0, sticky='swen')
Label(info_frame, text='分支').grid(row=1, column=0, sticky='swen')
Label(info_frame, text='存放目录').grid(row=2, column=0, sticky='swen')

es = []
for i in range(3):
es.append(Entry(info_frame, ))

for index, e in enumerate(es):
e.grid(row=index, column=1, sticky='swen')

# 填写默认分支
es[1].insert(0, 'master')

# 填写临时目录
temp_folder = tempfile.TemporaryDirectory()
es[2].insert(0, temp_folder.name)

def clone_and_open():
r.title('克隆仓库中')
repo_folder = download_repo(es[0].get().strip(), branch=es[1].get(), temp_folder=es[2].get())
r.title('打开仓库中')
open_in_pycharm(repo_folder)
r.title(default_title)

def start():
t = Thread(target=clone_and_open, daemon=True)
t.start()

b = Button(r, text='开始', command=start)
b.pack(side=BOTTOM, fill=X)

r.mainloop()


if __name__ == '__main__':
main()

 

posted @ 2025-08-23 12:56  小鱼圆又圆  阅读(6)  评论(0)    收藏  举报