@@ -158,7 +158,8 @@ def update_pre_commit_repo_versions(self, new_versions: dict[PreCommitRepo, PreC
158158 original_lines = self .original_file_lines
159159 updated_lines = original_lines [:]
160160
161- for repo_rev in self .yaml ["repos" ]:
161+ repos_list = self .yaml ["repos" ]
162+ for repo_idx , repo_rev in enumerate (repos_list ):
162163 if "rev" not in repo_rev :
163164 continue
164165
@@ -179,6 +180,12 @@ def update_pre_commit_repo_versions(self, new_versions: dict[PreCommitRepo, PreC
179180 original_rev_line : str = updated_lines [rev_line_idx ]
180181 updated_lines [rev_line_idx ] = original_rev_line .replace (str (rev ), updated_repo .rev )
181182
183+ if repo_idx + 1 < len (repos_list ):
184+ next_repo_start_line = repos_list [repo_idx + 1 ]["repo" ].start_line + self .document_start_offset
185+ repo_end_idx = next_repo_start_line - 2
186+ else :
187+ repo_end_idx = len (updated_lines ) - 1
188+
182189 for src_hook , old_hook , new_hook in zip (hooks , normalized_repo .hooks , updated_repo .hooks ):
183190 if new_hook == old_hook :
184191 continue
@@ -191,6 +198,15 @@ def update_pre_commit_repo_versions(self, new_versions: dict[PreCommitRepo, PreC
191198 continue
192199 dep_line_number : int = src_dep .end_line + self .document_start_offset
193200 dep_line_idx : int = dep_line_number - 1
201+ old_dep_str = str (old_dep )
202+ if dep_line_idx >= len (updated_lines ) or old_dep_str not in updated_lines [dep_line_idx ]:
203+ search_start = rev_line_idx
204+ search_end = min (repo_end_idx + 1 , len (updated_lines ))
205+ candidates = [
206+ idx for idx in range (search_start , search_end ) if old_dep_str in updated_lines [idx ]
207+ ]
208+ if candidates :
209+ dep_line_idx = min (candidates , key = lambda idx : abs (idx - dep_line_idx ))
194210 original_dep_line : str = updated_lines [dep_line_idx ]
195211 updated_lines [dep_line_idx ] = original_dep_line .replace (str (src_dep ), new_dep )
196212
0 commit comments