מה קורה
initial_import ב-services/repo_sync_service.py מנסה לזהות את הענף הראשי של ריפו חדש בכמה דרכים, וכולן משתמשות בפקודות git ש-GitMirrorService._run_git_command דוחה:
git symbolic-ref --short HEAD, ו-git symbolic-ref --short refs/remotes/origin/HEAD
git for-each-ref --format=%(refname) refs/remotes/origin, ואותו דבר על refs/heads
- ובדיקת הקיום
_branch_exists, שמריצה git show-ref --verify --quiet
רשימת ההיתר (self._allowed_git_subcommands ב-GitMirrorService.__init__) היא clone, fetch, rev-parse, diff-tree, show, ls-tree, grep, log, rev-list. פקודה שאינה ברשימה חוזרת כ-GitCommandResult(success=False, stderr="Unsupported git subcommand"), בלי חריגה. כלומר כל ניסיון "נכשל בשקט", והזיהוי נופל תמיד לברירת המחדל: logger.warning("Could not detect any branch, falling back to 'main'").
מה זה עושה בפועל (מקריאת הקוד)
- ריפו שהענף הראשי שלו
main — עובד, במקרה.
- ריפו שהענף הראשי שלו אחר (למשל
master) ואין בו main — כל המועמדים ל-list_all_files נכשלים, והייבוא נגמר ב-"Failed to list repository files".
- ריפו שיש בו גם
main וגם ענף ראשי אחר — הייבוא מאנדקס את main, ו-repo_metadata.default_branch נשמר כ-main.
מה אומת ומה לא
- אומת בהרצה: קריאה ל-
_run_git_command עם symbolic-ref, show-ref ו-for-each-ref מחזירה success=False עם "Unsupported git subcommand".
- לא אומת: האם יש היום בפרודקשן ריפו שהענף הראשי שלו אינו
main. שאילתה על repo_metadata מול ה-default_branch האמיתי ב-GitHub תענה על זה.
למה זה עולה עכשיו
זה התגלה בעבודה על ref_not_mirrored (ענף claude/focused-ritchie-ju95we). מאז השינוי הזה, כלי ה-MCP עונים ref_not_mirrored כשהענף הראשי שבמטא-דאטה חסר במראה, במקום not_found כללי. לכן default_branch שגוי ייראה מעכשיו כ"הענף הראשי לא במראה" בכל קריאה בלי ref — גלוי יותר, אבל עדיין שגוי.
כיוון לתיקון (לא הוחלט)
- להוסיף את שלוש הפקודות לרשימת ההיתר. שלושתן פקודות קריאה בלבד, אבל ההוספה משנה את התנהגות הייבוא, ולכן צריך טסט על מראה אמיתית שהענף הראשי שלה
master (ובלי main).
- או לזהות את הענף בפקודה שכבר ברשימה (
rev-parse) — לא נבדק אם זה אפשרי במראה bare בכל המקרים.
- בשתי הדרכים: הזיהוי לא צריך ליפול בשקט ל-
main. כשאף ניסיון לא הצליח, זה כשל שצריך לומר את שמו.
מה קורה
initial_importב-services/repo_sync_service.pyמנסה לזהות את הענף הראשי של ריפו חדש בכמה דרכים, וכולן משתמשות בפקודות git ש-GitMirrorService._run_git_commandדוחה:git symbolic-ref --short HEAD, ו-git symbolic-ref --short refs/remotes/origin/HEADgit for-each-ref --format=%(refname) refs/remotes/origin, ואותו דבר עלrefs/heads_branch_exists, שמריצהgit show-ref --verify --quietרשימת ההיתר (
self._allowed_git_subcommandsב-GitMirrorService.__init__) היאclone,fetch,rev-parse,diff-tree,show,ls-tree,grep,log,rev-list. פקודה שאינה ברשימה חוזרת כ-GitCommandResult(success=False, stderr="Unsupported git subcommand"), בלי חריגה. כלומר כל ניסיון "נכשל בשקט", והזיהוי נופל תמיד לברירת המחדל:logger.warning("Could not detect any branch, falling back to 'main'").מה זה עושה בפועל (מקריאת הקוד)
main— עובד, במקרה.master) ואין בוmain— כל המועמדים ל-list_all_filesנכשלים, והייבוא נגמר ב-"Failed to list repository files".mainוגם ענף ראשי אחר — הייבוא מאנדקס אתmain, ו-repo_metadata.default_branchנשמר כ-main.מה אומת ומה לא
_run_git_commandעםsymbolic-ref,show-refו-for-each-refמחזירהsuccess=Falseעם"Unsupported git subcommand".main. שאילתה עלrepo_metadataמול ה-default_branchהאמיתי ב-GitHub תענה על זה.למה זה עולה עכשיו
זה התגלה בעבודה על
ref_not_mirrored(ענףclaude/focused-ritchie-ju95we). מאז השינוי הזה, כלי ה-MCP עוניםref_not_mirroredכשהענף הראשי שבמטא-דאטה חסר במראה, במקוםnot_foundכללי. לכןdefault_branchשגוי ייראה מעכשיו כ"הענף הראשי לא במראה" בכל קריאה בליref— גלוי יותר, אבל עדיין שגוי.כיוון לתיקון (לא הוחלט)
master(ובליmain).rev-parse) — לא נבדק אם זה אפשרי במראה bare בכל המקרים.main. כשאף ניסיון לא הצליח, זה כשל שצריך לומר את שמו.