@@ -95,25 +95,30 @@ def _locate(bazel_runfiles, file):
95
95
requirements_windows = parse_str_none (sys .argv .pop (1 ))
96
96
update_target_label = sys .argv .pop (1 )
97
97
98
+ requirements_file = _select_golden_requirements_file (
99
+ requirements_txt = requirements_txt , requirements_linux = requirements_linux ,
100
+ requirements_darwin = requirements_darwin , requirements_windows = requirements_windows
101
+ )
102
+
98
103
resolved_requirements_in = _locate (bazel_runfiles , requirements_in )
99
- resolved_requirements_txt = _locate (bazel_runfiles , requirements_txt )
104
+ resolved_requirements_file = _locate (bazel_runfiles , requirements_file )
100
105
101
106
# Files in the runfiles directory has the following naming schema:
102
107
# Main repo: __main__/<path_to_file>
103
108
# External repo: <workspace name>/<path_to_file>
104
109
# We want to strip both __main__ and <workspace name> from the absolute prefix
105
110
# to keep the requirements lock file agnostic.
106
- repository_prefix = requirements_txt [: requirements_txt .index ("/" ) + 1 ]
107
- absolute_path_prefix = resolved_requirements_txt [
108
- : - (len (requirements_txt ) - len (repository_prefix ))
111
+ repository_prefix = requirements_file [: requirements_file .index ("/" ) + 1 ]
112
+ absolute_path_prefix = resolved_requirements_file [
113
+ : - (len (requirements_file ) - len (repository_prefix ))
109
114
]
110
115
111
116
# As requirements_in might contain references to generated files we want to
112
117
# use the runfiles file first. Thus, we need to compute the relative path
113
118
# from the execution root.
114
119
# Note: Windows cannot reference generated files without runfiles support enabled.
115
- requirements_in_relative = requirements_in [len (repository_prefix ) :]
116
- requirements_txt_relative = requirements_txt [len (repository_prefix ) :]
120
+ requirements_in_relative = requirements_in [len (repository_prefix ):]
121
+ requirements_file_relative = requirements_file [len (repository_prefix ):]
117
122
118
123
# Before loading click, set the locale for its parser.
119
124
# If it leaks through to the system setting, it may fail:
@@ -135,11 +140,11 @@ def _locate(bazel_runfiles, file):
135
140
sys .argv .append (os .environ ["TEST_TMPDIR" ])
136
141
# Make a copy for pip-compile to read and mutate.
137
142
requirements_out = os .path .join (
138
- os .environ ["TEST_TMPDIR" ], os .path .basename (requirements_txt ) + ".out"
143
+ os .environ ["TEST_TMPDIR" ], os .path .basename (requirements_file ) + ".out"
139
144
)
140
145
# Those two files won't necessarily be on the same filesystem, so we can't use os.replace
141
146
# or shutil.copyfile, as they will fail with OSError: [Errno 18] Invalid cross-device link.
142
- shutil .copy (resolved_requirements_txt , requirements_out )
147
+ shutil .copy (resolved_requirements_file , requirements_out )
143
148
144
149
update_command = os .getenv ("CUSTOM_COMPILE_COMMAND" ) or "bazel run %s" % (
145
150
update_target_label ,
@@ -150,7 +155,7 @@ def _locate(bazel_runfiles, file):
150
155
151
156
sys .argv .append ("--generate-hashes" )
152
157
sys .argv .append ("--output-file" )
153
- sys .argv .append (requirements_txt_relative if UPDATE else requirements_out )
158
+ sys .argv .append (requirements_file_relative if UPDATE else requirements_out )
154
159
sys .argv .append (
155
160
requirements_in_relative
156
161
if Path (requirements_in_relative ).exists ()
@@ -159,28 +164,28 @@ def _locate(bazel_runfiles, file):
159
164
print (sys .argv )
160
165
161
166
if UPDATE :
162
- print ("Updating " + requirements_txt_relative )
167
+ print ("Updating " + requirements_file_relative )
163
168
if "BUILD_WORKSPACE_DIRECTORY" in os .environ :
164
169
workspace = os .environ ["BUILD_WORKSPACE_DIRECTORY" ]
165
- requirements_txt_tree = os .path .join (workspace , requirements_txt_relative )
166
- # In most cases, requirements_txt will be a symlink to the real file in the source tree.
167
- # If symlinks are not enabled (e.g. on Windows), then requirements_txt will be a copy,
170
+ requirements_file_tree = os .path .join (workspace , requirements_file_relative )
171
+ # In most cases, requirements_file will be a symlink to the real file in the source tree.
172
+ # If symlinks are not enabled (e.g. on Windows), then requirements_file will be a copy,
168
173
# and we should copy the updated requirements back to the source tree.
169
- if not os .path .samefile (resolved_requirements_txt , requirements_txt_tree ):
174
+ if not os .path .samefile (resolved_requirements_file , requirements_file_tree ):
170
175
atexit .register (
171
176
lambda : shutil .copy (
172
- resolved_requirements_txt , requirements_txt_tree
177
+ resolved_requirements_file , requirements_file_tree
173
178
)
174
179
)
175
180
cli ()
176
- requirements_txt_relative_path = Path (requirements_txt_relative )
177
- content = requirements_txt_relative_path .read_text ()
181
+ requirements_file_relative_path = Path (requirements_file_relative )
182
+ content = requirements_file_relative_path .read_text ()
178
183
content = content .replace (absolute_path_prefix , "" )
179
- requirements_txt_relative_path .write_text (content )
184
+ requirements_file_relative_path .write_text (content )
180
185
else :
181
186
# cli will exit(0) on success
182
187
try :
183
- print ("Checking " + requirements_txt )
188
+ print ("Checking " + requirements_file )
184
189
cli ()
185
190
print ("cli() should exit" , file = sys .stderr )
186
191
sys .exit (1 )
@@ -194,13 +199,7 @@ def _locate(bazel_runfiles, file):
194
199
)
195
200
sys .exit (1 )
196
201
elif e .code == 0 :
197
- golden_filename = _select_golden_requirements_file (
198
- requirements_txt ,
199
- requirements_linux ,
200
- requirements_darwin ,
201
- requirements_windows ,
202
- )
203
- golden = open (_locate (bazel_runfiles , golden_filename )).readlines ()
202
+ golden = open (_locate (bazel_runfiles , requirements_file )).readlines ()
204
203
out = open (requirements_out ).readlines ()
205
204
out = [line .replace (absolute_path_prefix , "" ) for line in out ]
206
205
if golden != out :
0 commit comments