| | import os |
| | import configparser |
| |
|
| |
|
| | GITHUB_ENDPOINT = os.getenv('GITHUB_ENDPOINT') |
| |
|
| |
|
| | def is_git_repo(path: str) -> bool: |
| | """ Check if the path is a git repository. """ |
| | |
| | |
| | return os.path.exists(os.path.join(path, '.git')) |
| |
|
| |
|
| | def get_commit_hash(fullpath): |
| | git_head = os.path.join(fullpath, '.git', 'HEAD') |
| | if os.path.exists(git_head): |
| | with open(git_head) as f: |
| | line = f.readline() |
| |
|
| | if line.startswith("ref: "): |
| | ref = os.path.join(fullpath, '.git', line[5:].strip()) |
| | if os.path.exists(ref): |
| | with open(ref) as f2: |
| | return f2.readline().strip() |
| | else: |
| | return "unknown" |
| | else: |
| | return line |
| |
|
| | return "unknown" |
| |
|
| |
|
| | def git_url(fullpath): |
| | """ |
| | resolve version of unclassified custom node based on remote url in .git/config |
| | """ |
| | git_config_path = os.path.join(fullpath, '.git', 'config') |
| |
|
| | if not os.path.exists(git_config_path): |
| | return None |
| |
|
| | |
| | config = configparser.ConfigParser(strict=False) |
| | config.read(git_config_path) |
| |
|
| | for k, v in config.items(): |
| | if k.startswith('remote ') and 'url' in v: |
| | if 'Comfy-Org/ComfyUI-Manager' in v['url']: |
| | return "https://github.com/ltdrdata/ComfyUI-Manager" |
| | return v['url'] |
| |
|
| | return None |
| |
|
| |
|
| | def normalize_url(url) -> str: |
| | github_id = normalize_to_github_id(url) |
| | if github_id is not None: |
| | url = f"https://github.com/{github_id}" |
| |
|
| | return url |
| |
|
| |
|
| | def normalize_to_github_id(url) -> str: |
| | if 'github' in url or (GITHUB_ENDPOINT is not None and GITHUB_ENDPOINT in url): |
| | author = os.path.basename(os.path.dirname(url)) |
| |
|
| | if author.startswith('git@github.com:'): |
| | author = author.split(':')[1] |
| |
|
| | repo_name = os.path.basename(url) |
| | if repo_name.endswith('.git'): |
| | repo_name = repo_name[:-4] |
| |
|
| | return f"{author}/{repo_name}" |
| |
|
| | return None |
| |
|
| |
|
| | def get_url_for_clone(url): |
| | url = normalize_url(url) |
| |
|
| | if GITHUB_ENDPOINT is not None and url.startswith('https://github.com/'): |
| | url = GITHUB_ENDPOINT + url[18:] |
| |
|
| | return url |
| | |