@@ -1258,25 +1258,43 @@ def _clone_or_update_repo_sync(self, repo_name: str, repo_config: "GitRepository
12581258
12591259 try :
12601260 if repo_path .exists ():
1261- logger .info (f"Updating { repo_name } repository at { repo_path } ..." )
12621261 repo = git .Repo (repo_path )
1263- repo .remotes .origin .pull ()
1264- else :
1265- logger .info (f"Cloning { repo_name } repository to { repo_path } ..." )
1266- clone_kwargs : dict [str , Any ] = {"depth" : 1 }
1267-
1268- if repo_config .branch :
1269- clone_kwargs ["branch" ] = repo_config .branch
1270- elif repo_config .tag :
1271- clone_kwargs ["branch" ] = repo_config .tag
1272- elif repo_config .commit :
1273- git .Repo .clone_from (str (repo_config .url ), repo_path , ** clone_kwargs )
1274- repo = git .Repo (repo_path )
1275- repo .git .checkout (repo_config .commit )
1262+ expected_ref = repo_config .branch or repo_config .tag
1263+
1264+ if expected_ref :
1265+ try :
1266+ current_ref = repo .active_branch .name
1267+ except TypeError :
1268+ current_ref = None # Detached HEAD (e.g. tag/commit checkout)
1269+
1270+ if current_ref != expected_ref :
1271+ logger .info (f"Stale checkout for { repo_name } : on '{ current_ref } ', expected '{ expected_ref } '. " "Deleting and re-cloning..." )
1272+ shutil .rmtree (repo_path )
1273+ # Fall through to clone below
1274+ else :
1275+ logger .info (f"Updating { repo_name } repository at { repo_path } ..." )
1276+ repo .remotes .origin .pull ()
1277+ return repo_path
1278+ else :
1279+ logger .info (f"Updating { repo_name } repository at { repo_path } ..." )
1280+ repo .remotes .origin .pull ()
12761281 return repo_path
12771282
1283+ # Repo does not exist (fresh or was just deleted above)
1284+ logger .info (f"Cloning { repo_name } repository to { repo_path } ..." )
1285+ clone_kwargs : dict [str , Any ] = {"depth" : 1 }
1286+
1287+ if repo_config .branch :
1288+ clone_kwargs ["branch" ] = repo_config .branch
1289+ elif repo_config .tag :
1290+ clone_kwargs ["branch" ] = repo_config .tag
1291+ elif repo_config .commit :
12781292 git .Repo .clone_from (str (repo_config .url ), repo_path , ** clone_kwargs )
1293+ repo = git .Repo (repo_path )
1294+ repo .git .checkout (repo_config .commit )
1295+ return repo_path
12791296
1297+ git .Repo .clone_from (str (repo_config .url ), repo_path , ** clone_kwargs )
12801298 return repo_path
12811299 except Exception as e :
12821300 logger .warning (f"Failed to clone/update { repo_name } : { e } " )
@@ -1343,7 +1361,7 @@ def _extract_docs_from_repo_sync(self, repo_path: Path, project: str, old_hashes
13431361 reference_count = sum (1 for doc in docs if doc ["is_reference" ])
13441362 regular_count = len (docs ) - reference_count
13451363 if skipped_count :
1346- logger .info (f" { project } : { len (docs )} changed + { skipped_count } unchanged " f" ({ regular_count } regular, { reference_count } reference guides)" )
1364+ logger .info (f" { project } : { len (docs )} changed + { skipped_count } unchanged ({ regular_count } regular, { reference_count } reference guides)" )
13471365 else :
13481366 logger .info (f" { project } : { len (docs )} total documents ({ regular_count } regular, { reference_count } reference guides)" )
13491367 return {"docs" : docs , "skipped_hashes" : skipped_hashes }
@@ -1676,7 +1694,7 @@ async def index_documentation(
16761694
16771695 clone_extract_elapsed = time .monotonic () - overall_t0
16781696 await log_info (
1679- f"Clone + extract completed in { clone_extract_elapsed :.1f} s " f" ({ len (all_docs )} to index, { len (all_skipped_hashes )} unchanged)" ,
1697+ f"Clone + extract completed in { clone_extract_elapsed :.1f} s ({ len (all_docs )} to index, { len (all_skipped_hashes )} unchanged)" ,
16801698 ctx ,
16811699 )
16821700
@@ -1702,7 +1720,7 @@ async def index_documentation(
17021720
17031721 docs_to_index = all_docs # all are new or changed (unchanged were skipped by workers)
17041722 await log_info (
1705- f"Incremental: { len (new_docs )} new, { len (changed_docs )} changed, " f" { len (all_skipped_hashes )} unchanged, { len (deleted_doc_ids )} deleted" ,
1723+ f"Incremental: { len (new_docs )} new, { len (changed_docs )} changed, { len (all_skipped_hashes )} unchanged, { len (deleted_doc_ids )} deleted" ,
17061724 ctx ,
17071725 )
17081726
0 commit comments