in sync/bugcomponents.py [0:0]
def compute_moves(moves: Dict[str, str], unmatched_patterns: Set[str]) -> Dict[str, str]:
updated_patterns = {}
dest_paths = defaultdict(list)
for pattern in unmatched_patterns:
# Make things simpler by only considering patterns matching subtrees
# or single-file patterns
if "*" in pattern and not pattern.endswith("/**"):
continue
for from_path, to_path in moves.items():
if match(from_path, pattern):
dest_paths[pattern].append(to_path)
for pattern, paths in dest_paths.items():
if "*" not in pattern:
assert len(paths) == 1
updated_patterns[pattern] = paths[0]
elif pattern.endswith("/**"):
prefix = os.path.commonprefix(paths)
if not prefix:
continue
if not prefix.endswith("/"):
prefix = os.path.dirname(prefix)
if not prefix:
continue
prefix += "/"
updated_patterns[pattern] = prefix + "**"
return updated_patterns