1616
1717import atexit
1818import os
19+ import re
1920import shutil
2021import sys
2122from pathlib import Path
@@ -117,7 +118,6 @@ def main(
117118 absolute_path_prefix = resolved_requirements_file [
118119 : - (len (requirements_file ) - len (repository_prefix ))
119120 ]
120-
121121 # As srcs might contain references to generated files we want to
122122 # use the runfiles file first. Thus, we need to compute the relative path
123123 # from the execution root.
@@ -162,12 +162,19 @@ def main(
162162 argv .append (
163163 f"--output-file={ requirements_file_relative if UPDATE else requirements_out } "
164164 )
165- argv . extend (
165+ src_files = [
166166 (src_relative if Path (src_relative ).exists () else resolved_src )
167167 for src_relative , resolved_src in zip (srcs_relative , resolved_srcs )
168- )
168+ ]
169+ argv .extend (src_files )
169170 argv .extend (extra_args )
170171
172+ # Replace in the output lock file
173+ # the lines like: # via -r /absolute/path/to/<requirements_file>
174+ # with: # via -r <requirements_file>
175+ # For Windows, we should explicitly call .as_posix() to convert \\ -> /
176+ absolute_src_prefixes = [Path (src ).absolute ().parent .as_posix () + "/" for src in src_files ]
177+
171178 if UPDATE :
172179 print ("Updating " + requirements_file_relative )
173180
@@ -185,14 +192,14 @@ def main(
185192 # and we should copy the updated requirements back to the source tree.
186193 if not absolute_output_file .samefile (requirements_file_tree ):
187194 atexit .register (
188- lambda : shutil .copy (
189- absolute_output_file , requirements_file_tree
190- )
195+ lambda : shutil .copy (absolute_output_file , requirements_file_tree )
191196 )
192- cli (argv , standalone_mode = False )
197+ cli (argv , standalone_mode = False )
193198 requirements_file_relative_path = Path (requirements_file_relative )
194199 content = requirements_file_relative_path .read_text ()
195200 content = content .replace (absolute_path_prefix , "" )
201+ for absolute_src_prefix in absolute_src_prefixes :
202+ content = content .replace (absolute_src_prefix , "" )
196203 requirements_file_relative_path .write_text (content )
197204 else :
198205 # cli will exit(0) on success
@@ -214,6 +221,16 @@ def main(
214221 golden = open (_locate (bazel_runfiles , requirements_file )).readlines ()
215222 out = open (requirements_out ).readlines ()
216223 out = [line .replace (absolute_path_prefix , "" ) for line in out ]
224+
225+ def replace_via_minus_r (line ):
226+ if "# via -r " in line :
227+ for absolute_src_prefix in absolute_src_prefixes :
228+ print (f"DEBUG: { absolute_src_prefix = } , { line = } " )
229+ line = line .replace (absolute_src_prefix , "" )
230+ return line
231+ return line
232+
233+ out = [replace_via_minus_r (line ) for line in out ]
217234 if golden != out :
218235 import difflib
219236
0 commit comments