24
24
PACKAGE_FORMAT_VERSION = 'packageFormatVersion'
25
25
LABELS = 'labels'
26
26
PROVENANCE = 'provenance'
27
+ PKG_ID_PROVENANCE = 'pkgIdProvenance'
27
28
NUMBER_OF_BYTES = 4
28
29
29
30
# Declaring deps manager as global variable
@@ -44,7 +45,8 @@ def create_tree_of_packages_dependencies(
44
45
optional_dependencies ,
45
46
req_file_path ,
46
47
allow_missing = False ,
47
- only_provenance = False
48
+ only_provenance = False ,
49
+ top_level_provenance_map = {},
48
50
):
49
51
"""Creates the dependency tree for the project.
50
52
@@ -67,6 +69,11 @@ def create_tree_of_packages_dependencies(
67
69
key_tree = dict (
68
70
(canonicalize_package_name (k .key ), v ) for k , v in tree .items ()
69
71
)
72
+
73
+ tree_provenance_map = dict (
74
+ (canonicalize_package_name (k .key ), k .key ) for k , _ in tree .items ()
75
+ )
76
+ tree_provenance_map .update (top_level_provenance_map )
70
77
71
78
lowercase_pkgs_names = [p .name .lower () for p in top_level_requirements ]
72
79
tlr_by_key = dict ((tlr .name .lower (), tlr ) for tlr in top_level_requirements )
@@ -84,7 +91,8 @@ def create_children_recursive(
84
91
root_package ,
85
92
key_tree ,
86
93
ancestors ,
87
- all_packages_map
94
+ all_packages_map ,
95
+ provenance_map ,
88
96
):
89
97
root_name = canonicalize_package_name (root_package [NAME ])
90
98
@@ -101,6 +109,14 @@ def create_children_recursive(
101
109
else :
102
110
sys .exit (msg )
103
111
112
+ if provenance_map [root_name ] != root_package [NAME ]:
113
+ if LABELS in root_package :
114
+ root_package [LABELS ][PKG_ID_PROVENANCE ] = "{}@{}" .format (provenance_map [root_name ],root_package [VERSION ])
115
+ else :
116
+ root_package [LABELS ] = {
117
+ PKG_ID_PROVENANCE : "{}@{}" .format (provenance_map [root_name ],root_package [VERSION ])
118
+ }
119
+
104
120
ancestors = ancestors .copy ()
105
121
ancestors .add (root_name )
106
122
children_packages_as_dist = key_tree [root_name ]
@@ -123,10 +139,10 @@ def create_children_recursive(
123
139
124
140
child_package = {
125
141
NAME : child_project_name ,
126
- VERSION : child_dist .installed_version ,
142
+ VERSION : child_dist .installed_version
127
143
}
128
144
129
- create_children_recursive (child_package , key_tree , ancestors , all_packages_map )
145
+ create_children_recursive (child_package , key_tree , ancestors , all_packages_map , provenance_map )
130
146
root_package [DEPENDENCIES ][child_project_name ] = child_package
131
147
all_packages_map [child_project_name ] = 'true'
132
148
return root_package
@@ -165,7 +181,7 @@ def create_package_as_root(package):
165
181
dir_as_root [DEPENDENCIES ][package_as_root [NAME ]] = package_as_root
166
182
else :
167
183
package_tree = create_children_recursive (package_as_root , key_tree ,
168
- set ([]), all_packages_map )
184
+ set ([]), all_packages_map , tree_provenance_map )
169
185
dir_as_root [DEPENDENCIES ][package_as_root [NAME ]] = package_tree
170
186
171
187
return dir_as_root
@@ -457,6 +473,8 @@ def create_dependencies_tree_by_req_file_path(
457
473
deps_manager
458
474
)
459
475
476
+ top_level_provenance_map = {}
477
+
460
478
if not required and not allow_empty :
461
479
msg = 'No dependencies detected in manifest.'
462
480
sys .exit (msg )
@@ -469,6 +487,7 @@ def create_dependencies_tree_by_req_file_path(
469
487
missing_package_names .append (r .name )
470
488
else :
471
489
top_level_requirements .append (r )
490
+ top_level_provenance_map [canonicalize_package_name (r .name )] = r .original_name
472
491
if missing_package_names :
473
492
msg = 'Required packages missing: ' + (', ' .join (missing_package_names ))
474
493
if allow_missing :
@@ -483,7 +502,8 @@ def create_dependencies_tree_by_req_file_path(
483
502
optional_dependencies ,
484
503
requirements_file_path ,
485
504
allow_missing ,
486
- only_provenance
505
+ only_provenance ,
506
+ top_level_provenance_map ,
487
507
)
488
508
489
509
print (json .dumps (package_tree ))
0 commit comments