Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: git_common.py

Issue 2075603002: Refactor git_common config and die (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix unintended change Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | git_map.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_common.py
diff --git a/git_common.py b/git_common.py
index b7626e8a3ed4d81434443ef15e427c2cae2bf89a..e7244790aceaad29e04f9a8ff43349c7fe5aaab0 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,22 @@ 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.
- 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)
+
+ You may also try cleaning up your old branches by running:
+ git cl archive
+ """, num, limit, key)
for line in raw_branches:
if line.startswith(NO_BRANCH):
@@ -343,20 +337,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 +578,7 @@ def repo_root():
def root():
- return config('depot-tools.upstream', 'origin/master')
+ return get_config('depot-tools.upstream', 'origin/master')
@contextlib.contextmanager
« no previous file with comments | « no previous file | git_map.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698