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,15 @@ 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+                             line  =  line .replace (absolute_src_prefix , "" )
229+                         return  line 
230+                     return  line 
231+ 
232+                 out  =  [replace_via_minus_r (line ) for  line  in  out ]
217233                if  golden  !=  out :
218234                    import  difflib 
219235
0 commit comments