Chromium Code Reviews| Index: git_common.py |
| diff --git a/git_common.py b/git_common.py |
| index b7626e8a3ed4d81434443ef15e427c2cae2bf89a..6abb5bad0b7f20a50baa4f84012155b965cc3b70 100644 |
| --- a/git_common.py |
| +++ b/git_common.py |
| @@ -281,6 +281,10 @@ def once(function): |
| ## Git functions |
| +def die(message, *args): |
| + print >> sys.stderr, textwrap.dedent(message % args) |
| + sys.exit(1) |
| + |
| def blame(filename, revision=None, porcelain=False, *_args): |
| command = ['blame'] |
| @@ -293,23 +297,14 @@ def blame(filename, revision=None, porcelain=False, *_args): |
| def branch_config(branch, option, default=None): |
| - return config('branch.%s.%s' % (branch, option), default=default) |
| - |
| - |
| -def config_regexp(pattern): |
| - if IS_WIN: # pragma: no cover |
| - # this madness is because we call git.bat which calls git.exe which calls |
| - # bash.exe (or something to that effect). Each layer divides the number of |
| - # ^'s by 2. |
| - pattern = pattern.replace('^', '^' * 8) |
| - return run('config', '--get-regexp', pattern).splitlines() |
| + return get_config('branch.%s.%s' % (branch, option), default=default) |
| def branch_config_map(option): |
| """Return {branch: <|option| value>} for all branches.""" |
| try: |
| reg = re.compile(r'^branch\.(.*)\.%s$' % option) |
| - lines = config_regexp(reg.pattern) |
| + lines = get_config_regexp(reg.pattern) |
| return {reg.match(k).group(1): v for k, v in (l.split() for l in lines)} |
| except subprocess2.CalledProcessError: |
| return {} |
| @@ -319,23 +314,19 @@ def branches(*args): |
| NO_BRANCH = ('* (no branch', '* (detached', '* (HEAD detached') |
| key = 'depot-tools.branch-limit' |
| - limit = 20 |
| - try: |
| - limit = int(config(key, limit)) |
| - except ValueError: |
| - pass |
| + limit = get_config_int(key, 20) |
| raw_branches = run('branch', *args).splitlines() |
| num = len(raw_branches) |
| + |
| if num > limit: |
| - print >> sys.stderr, textwrap.dedent("""\ |
| - Your git repo has too many branches (%d/%d) for this tool to work well. |
| + die("""\ |
| + Your git repo has too many branches (%d/%d) for this tool to work well. |
|
tandrii(chromium)
2016/06/21 14:22:49
how about adding a plug for git cl archive. Say,
agable
2016/06/21 14:31:39
Good idea, done.
|
| - You may adjust this limit by running: |
| + You may adjust this limit by running: |
| git config %s <new_limit> |
| - """ % (num, limit, key)) |
| - sys.exit(1) |
| + """, num, limit, key) |
| for line in raw_branches: |
| if line.startswith(NO_BRANCH): |
| @@ -343,20 +334,37 @@ def branches(*args): |
| yield line.split()[-1] |
| -def config(option, default=None): |
| +def get_config(option, default=None): |
| try: |
| return run('config', '--get', option) or default |
| except subprocess2.CalledProcessError: |
| return default |
| -def config_list(option): |
| +def get_config_int(option, default=0): |
| + assert isinstance(default, int) |
| + try: |
| + return int(get_config(option, default)) |
| + except ValueError: |
| + return default |
| + |
| + |
| +def get_config_list(option): |
| try: |
| return run('config', '--get-all', option).split() |
| except subprocess2.CalledProcessError: |
| return [] |
| +def get_config_regexp(pattern): |
| + if IS_WIN: # pragma: no cover |
| + # this madness is because we call git.bat which calls git.exe which calls |
| + # bash.exe (or something to that effect). Each layer divides the number of |
| + # ^'s by 2. |
| + pattern = pattern.replace('^', '^' * 8) |
| + return run('config', '--get-regexp', pattern).splitlines() |
| + |
| + |
| def current_branch(): |
| try: |
| return run('rev-parse', '--abbrev-ref', 'HEAD') |
| @@ -567,7 +575,7 @@ def repo_root(): |
| def root(): |
| - return config('depot-tools.upstream', 'origin/master') |
| + return get_config('depot-tools.upstream', 'origin/master') |
| @contextlib.contextmanager |