Skip to content

Commit d14a64a

Browse files
dhermeslandrito
authored andcommitted
Reverse direction of dependencies when determining target packages. (googleapis#3469)
Fixes googleapis#3466.
1 parent 9b7249c commit d14a64a

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

test_utils/scripts/get_target_packages.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,37 @@ def get_changed_files():
109109
return None
110110

111111

112+
def reverse_map(dict_of_sets):
113+
"""Reverse a map of one-to-many.
114+
115+
So the map::
116+
117+
{
118+
'A': {'B', 'C'},
119+
'B': {'C'},
120+
}
121+
122+
becomes
123+
124+
{
125+
'B': {'A'},
126+
'C': {'A', 'B'},
127+
}
128+
129+
Args:
130+
dict_of_sets (dict[set]): A dictionary of sets, mapping
131+
one value to many.
132+
133+
Returns:
134+
dict[set]: The reversed map.
135+
"""
136+
result = {}
137+
for key, values in dict_of_sets.items():
138+
for value in values:
139+
result.setdefault(value, set()).add(key)
140+
141+
return result
142+
112143
def get_changed_packages(file_list):
113144
"""Return a list of changed packages based on the provided file list.
114145
@@ -129,6 +160,7 @@ def get_changed_packages(file_list):
129160

130161
# Create a set based on the list of changed files.
131162
answer = set()
163+
reverse_deps = reverse_map(PKG_DEPENDENCIES)
132164
for file_ in file_list:
133165
# Ignore root directory changes (setup.py, .gitignore, etc.).
134166
if os.path.sep not in file_:
@@ -147,7 +179,7 @@ def get_changed_packages(file_list):
147179
# Add the package, as well as any dependencies this package has.
148180
# NOTE: For now, dependencies only go down one level.
149181
answer.add(package)
150-
answer = answer.union(PKG_DEPENDENCIES.get(package, set()))
182+
answer = answer.union(reverse_deps.get(package, set()))
151183

152184
# We got this far without being short-circuited; return the final answer.
153185
return answer

0 commit comments

Comments
 (0)