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

Side by Side Diff: git_common.py

Issue 509843002: Give git map-branches extra information behind -v and -vv flags. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: handle deleted upstreams more informatively Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | git_map_branches.py » ('j') | git_map_branches.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Monkeypatch IMapIterator so that Ctrl-C can kill everything properly. 5 # Monkeypatch IMapIterator so that Ctrl-C can kill everything properly.
6 # Derived from https://gist.github.com/aljungberg/626518 6 # Derived from https://gist.github.com/aljungberg/626518
7 import multiprocessing.pool 7 import multiprocessing.pool
8 from multiprocessing.pool import IMapIterator 8 from multiprocessing.pool import IMapIterator
9 def wrapper(func): 9 def wrapper(func):
10 def wrap(self, timeout=None): 10 def wrap(self, timeout=None):
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 # crbug.com/315421 84 # crbug.com/315421
85 r'The requested URL returned error: 500 while accessing', 85 r'The requested URL returned error: 500 while accessing',
86 86
87 # crbug.com/388876 87 # crbug.com/388876
88 r'Connection timed out', 88 r'Connection timed out',
89 ) 89 )
90 90
91 GIT_TRANSIENT_ERRORS_RE = re.compile('|'.join(GIT_TRANSIENT_ERRORS), 91 GIT_TRANSIENT_ERRORS_RE = re.compile('|'.join(GIT_TRANSIENT_ERRORS),
92 re.IGNORECASE) 92 re.IGNORECASE)
93 93
94 # Version which for-each-ref format string first supported upstream:track.
Matt Giuca 2014/09/01 05:12:50 This is hard to read and I don't know what it's sa
calamity 2014/09/01 06:53:41 Done.
95 MIN_UPSTREAM_TRACK_GIT_VERSION = (1, 9)
94 96
95 class BadCommitRefException(Exception): 97 class BadCommitRefException(Exception):
96 def __init__(self, refs): 98 def __init__(self, refs):
97 msg = ('one of %s does not seem to be a valid commitref.' % 99 msg = ('one of %s does not seem to be a valid commitref.' %
98 str(refs)) 100 str(refs))
99 super(BadCommitRefException, self).__init__(msg) 101 super(BadCommitRefException, self).__init__(msg)
100 102
101 103
102 def memoize_one(**kwargs): 104 def memoize_one(**kwargs):
103 """Memoizes a single-argument pure function. 105 """Memoizes a single-argument pure function.
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 base = actual_merge_base 431 base = actual_merge_base
430 manual_merge_base(branch, base, parent) 432 manual_merge_base(branch, base, parent)
431 433
432 return base 434 return base
433 435
434 436
435 def hash_multi(*reflike): 437 def hash_multi(*reflike):
436 return run('rev-parse', *reflike).splitlines() 438 return run('rev-parse', *reflike).splitlines()
437 439
438 440
439 def hash_one(reflike): 441 def hash_one(reflike, short=False):
440 return run('rev-parse', reflike) 442 args = ['rev-parse', reflike]
443 if short:
444 args.insert(1, '--short')
445 return run(*args)
441 446
442 447
443 def in_rebase(): 448 def in_rebase():
444 git_dir = run('rev-parse', '--git-dir') 449 git_dir = run('rev-parse', '--git-dir')
445 return ( 450 return (
446 os.path.exists(os.path.join(git_dir, 'rebase-merge')) or 451 os.path.exists(os.path.join(git_dir, 'rebase-merge')) or
447 os.path.exists(os.path.join(git_dir, 'rebase-apply'))) 452 os.path.exists(os.path.join(git_dir, 'rebase-apply')))
448 453
449 454
450 def intern_f(f, kind='blob'): 455 def intern_f(f, kind='blob'):
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 return None 714 return None
710 return ret 715 return ret
711 716
712 717
713 def upstream(branch): 718 def upstream(branch):
714 try: 719 try:
715 return run('rev-parse', '--abbrev-ref', '--symbolic-full-name', 720 return run('rev-parse', '--abbrev-ref', '--symbolic-full-name',
716 branch+'@{upstream}') 721 branch+'@{upstream}')
717 except subprocess2.CalledProcessError: 722 except subprocess2.CalledProcessError:
718 return None 723 return None
724
725 def normalized_version():
iannucci 2014/08/29 18:41:47 add a docstring, it's not obvious that this is get
Matt Giuca 2014/09/01 05:12:50 Can you rename it to "get_git_version". Maybe then
calamity 2014/09/01 06:53:41 Done.
calamity 2014/09/01 06:53:42 Done. Left the docstring in anyway.
726 version_string = run('--version')
727 version_match = re.search(r'(\d+.)+(\d+)', version_string)
728 version = version_match.group() if version_match else ''
729
730 return tuple(int(x) for x in version.split('.'))
731
732
733 def get_all_tracking_info():
734 format_string = (
735 '--format=%(refname:short):%(objectname:short):%(upstream:short):')
736 if normalized_version() >= MIN_UPSTREAM_TRACK_GIT_VERSION:
737 format_string += '%(upstream:track)'
738
739 info_map = {}
740 data = run('for-each-ref', format_string, 'refs/heads')
741 for line in data.splitlines():
742 (branch, branch_hash, upstream_branch, tracking_status) = line.split(':')
iannucci 2014/08/29 18:41:47 won't this be wrong if your git version is < 1.9?
calamity 2014/09/01 06:53:42 It makes tracking_status an empty string which the
iannucci 2014/09/02 22:31:27 I think the .split(':') will explode on the assign
743
744 ahead_match = re.search(r'ahead \d+', tracking_status)
745 ahead = ahead_match.group() if ahead_match else ''
iannucci 2014/08/29 18:41:47 let's cast these to int() or None for this functio
calamity 2014/09/01 06:53:42 Done.
746
747 behind_match = re.search(r'behind \d+', tracking_status)
748 behind = behind_match.group() if behind_match else ''
749
750 info_map[branch] = {
751 'hash': branch_hash,
752 'upstream': upstream_branch,
753 'ahead': ahead,
754 'behind': behind
755 }
iannucci 2014/08/29 18:41:47 let's use a namedtuple for this, instead of a free
calamity 2014/09/01 06:53:42 Oh, cool!
756 return info_map
OLDNEW
« no previous file with comments | « no previous file | git_map_branches.py » ('j') | git_map_branches.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698