16
16
17
17
import atexit
18
18
import os
19
+ import re
19
20
import shutil
20
21
import sys
21
22
from pathlib import Path
@@ -117,7 +118,6 @@ def main(
117
118
absolute_path_prefix = resolved_requirements_file [
118
119
: - (len (requirements_file ) - len (repository_prefix ))
119
120
]
120
-
121
121
# As srcs might contain references to generated files we want to
122
122
# use the runfiles file first. Thus, we need to compute the relative path
123
123
# from the execution root.
@@ -162,12 +162,19 @@ def main(
162
162
argv .append (
163
163
f"--output-file={ requirements_file_relative if UPDATE else requirements_out } "
164
164
)
165
- argv . extend (
165
+ src_files = [
166
166
(src_relative if Path (src_relative ).exists () else resolved_src )
167
167
for src_relative , resolved_src in zip (srcs_relative , resolved_srcs )
168
- )
168
+ ]
169
+ argv .extend (src_files )
169
170
argv .extend (extra_args )
170
171
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
+
171
178
if UPDATE :
172
179
print ("Updating " + requirements_file_relative )
173
180
@@ -185,14 +192,14 @@ def main(
185
192
# and we should copy the updated requirements back to the source tree.
186
193
if not absolute_output_file .samefile (requirements_file_tree ):
187
194
atexit .register (
188
- lambda : shutil .copy (
189
- absolute_output_file , requirements_file_tree
190
- )
195
+ lambda : shutil .copy (absolute_output_file , requirements_file_tree )
191
196
)
192
- cli (argv , standalone_mode = False )
197
+ cli (argv , standalone_mode = False )
193
198
requirements_file_relative_path = Path (requirements_file_relative )
194
199
content = requirements_file_relative_path .read_text ()
195
200
content = content .replace (absolute_path_prefix , "" )
201
+ for absolute_src_prefix in absolute_src_prefixes :
202
+ content = content .replace (absolute_src_prefix , "" )
196
203
requirements_file_relative_path .write_text (content )
197
204
else :
198
205
# cli will exit(0) on success
@@ -214,6 +221,15 @@ def main(
214
221
golden = open (_locate (bazel_runfiles , requirements_file )).readlines ()
215
222
out = open (requirements_out ).readlines ()
216
223
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 ]
217
233
if golden != out :
218
234
import difflib
219
235
0 commit comments