1
1
"Set defaults for the pip-compile command to run it under Bazel"
2
2
3
3
import os
4
+ import re
4
5
import sys
5
6
from pathlib import Path
6
7
from shutil import copyfile
@@ -26,19 +27,17 @@ def _select_golden_requirements_file(
26
27
return requirements_txt
27
28
28
29
29
- def _fix_up_requirements_in_path (
30
- resolved_requirements_in , requirements_in , output_file
31
- ):
30
+ def _fix_up_requirements_in_path (absolute_prefix , output_file ):
32
31
"""Fix up references to the input file inside of the generated requirements file.
33
32
34
33
We don't want fully resolved, absolute paths in the generated requirements file.
35
34
The paths could differ for every invocation. Replace them with a predictable path.
36
35
"""
37
36
output_file = Path (output_file )
38
- fixed_requirements_text = output_file .read_text (). replace (
39
- resolved_requirements_in , requirements_in
40
- )
41
- output_file .write_text (fixed_requirements_text )
37
+ contents = output_file .read_text ()
38
+ contents = contents . replace ( absolute_prefix , "" )
39
+ contents = re . sub ( r"\\(?!(\n|\r\n))" , "/" , contents )
40
+ output_file .write_text (contents )
42
41
43
42
44
43
if __name__ == "__main__" :
@@ -58,9 +57,11 @@ def _fix_up_requirements_in_path(
58
57
requirements_windows = parse_str_none (sys .argv .pop (1 ))
59
58
update_target_label = sys .argv .pop (1 )
60
59
61
- # The requirements_in file could be generated. We need to get the path to it before we change
62
- # directory into the workspace directory.
63
- resolved_requirements_in = str (Path (requirements_in ).resolve ())
60
+ # The requirements_in file could be generated, so we will need to remove the
61
+ # absolute prefixes in the locked requirements output file.
62
+ requirements_in_path = Path (requirements_in )
63
+ resolved_requirements_in = str (requirements_in_path .resolve ())
64
+ absolute_prefix = resolved_requirements_in [: - len (str (requirements_in_path ))]
64
65
65
66
# Before loading click, set the locale for its parser.
66
67
# If it leaks through to the system setting, it may fail:
@@ -116,17 +117,17 @@ def _fix_up_requirements_in_path(
116
117
sys .argv .append ("--generate-hashes" )
117
118
sys .argv .append ("--output-file" )
118
119
sys .argv .append (requirements_txt if UPDATE else requirements_out )
119
- sys .argv .append (resolved_requirements_in )
120
+ sys .argv .append (
121
+ requirements_in if requirements_in_path .exists () else resolved_requirements_in
122
+ )
120
123
121
124
if UPDATE :
122
125
print ("Updating " + requirements_txt )
123
126
try :
124
127
cli ()
125
128
except SystemExit as e :
126
129
if e .code == 0 :
127
- _fix_up_requirements_in_path (
128
- resolved_requirements_in , requirements_in , requirements_txt
129
- )
130
+ _fix_up_requirements_in_path (absolute_prefix , requirements_txt )
130
131
raise
131
132
else :
132
133
# cli will exit(0) on success
@@ -145,9 +146,7 @@ def _fix_up_requirements_in_path(
145
146
)
146
147
sys .exit (1 )
147
148
elif e .code == 0 :
148
- _fix_up_requirements_in_path (
149
- resolved_requirements_in , requirements_in , requirements_out
150
- )
149
+ _fix_up_requirements_in_path (absolute_prefix , requirements_out )
151
150
golden_filename = _select_golden_requirements_file (
152
151
requirements_txt ,
153
152
requirements_linux ,
0 commit comments