diff --git a/git_rebase_update.py b/git_rebase_update.py index 09eaffa0f..e5b6d4247 100755 --- a/git_rebase_update.py +++ b/git_rebase_update.py @@ -13,6 +13,7 @@ import logging import sys import textwrap +from fnmatch import fnmatch from pprint import pformat import git_common as git @@ -41,15 +42,23 @@ def fetch_remotes(branch_tree): fetch_tags = False remotes = set() tag_set = git.tags() + fetchspec_map = {} + all_fetchspec_configs = git.run( + 'config', '--get-regexp', r'remote\..*\.fetch').strip() + for fetchspec_config in all_fetchspec_configs.splitlines(): + key, _, fetchspec = fetchspec_config.partition(' ') + dest_spec = fetchspec.partition(':')[2] + remote_name = key.split('.')[1] + fetchspec_map[dest_spec] = remote_name for parent in branch_tree.itervalues(): if parent in tag_set: fetch_tags = True else: full_ref = git.run('rev-parse', '--symbolic-full-name', parent) - if full_ref.startswith('refs/remotes'): - parts = full_ref.split('/') - remote_name = parts[2] - remotes.add(remote_name) + for dest_spec, remote_name in fetchspec_map.iteritems(): + if fnmatch(full_ref, dest_spec): + remotes.add(remote_name) + break fetch_args = [] if fetch_tags: