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

Unified Diff: git_cl.py

Issue 1893563002: Use CLs more consistently instead of branch names (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: last changes Created 4 years, 7 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_branches.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl.py
diff --git a/git_cl.py b/git_cl.py
index 35bd37e5e43d475a17ae5aee01e824c7564ba47d..e19d38c046483746415333540187685d83807384 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -18,11 +18,9 @@ import logging
import multiprocessing
import optparse
import os
-import Queue
import re
import stat
import sys
-import tempfile
import textwrap
import time
import traceback
@@ -132,7 +130,7 @@ def RunGitWithCode(args, suppress_stderr=False):
def RunGitSilent(args):
- """Returns stdout, suppresses stderr and ingores the return code."""
+ """Returns stdout, suppresses stderr and ignores the return code."""
return RunGitWithCode(args, suppress_stderr=True)[1]
@@ -929,6 +927,7 @@ class Changelist(object):
self.branchref = branchref
if self.branchref:
+ assert branchref.startswith('refs/heads/')
self.branch = ShortBranchName(self.branchref)
else:
self.branch = None
@@ -1449,7 +1448,7 @@ class Changelist(object):
def __getattr__(self, attr):
# This is because lots of untested code accesses Rietveld-specific stuff
# directly, and it's hard to fix for sure. So, just let it work, and fix
- # on a cases by case basis.
+ # on a case by case basis.
return getattr(self._codereview_impl, attr)
@@ -1935,7 +1934,7 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
upstream_branch = ShortBranchName(upstream_branch)
if remote is '.':
# A local branch is being tracked.
- local_branch = ShortBranchName(upstream_branch)
+ local_branch = upstream_branch
if settings.GetIsSkipDependencyUpload(local_branch):
print
print ('Skipping dependency patchset upload because git config '
@@ -1943,7 +1942,7 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase):
print
else:
auth_config = auth.extract_auth_config_from_options(options)
- branch_cl = Changelist(branchref=local_branch,
+ branch_cl = Changelist(branchref='refs/heads/'+local_branch,
auth_config=auth_config)
branch_cl_issue_url = branch_cl.GetIssueURL()
branch_cl_issue = branch_cl.GetIssue()
@@ -2925,21 +2924,9 @@ def color_for_status(status):
'error': Fore.WHITE,
}.get(status, Fore.WHITE)
-def fetch_cl_status(branch, auth_config=None):
- """Fetches information for an issue and returns (branch, issue, status)."""
- cl = Changelist(branchref=branch, auth_config=auth_config)
- url = cl.GetIssueURL()
- status = cl.GetStatus()
- if url and (not status or status == 'error'):
- # The issue probably doesn't exist anymore.
- url += ' (broken)'
-
- return (branch, url, status)
-
-def get_cl_statuses(
- branches, fine_grained, max_processes=None, auth_config=None):
- """Returns a blocking iterable of (branch, issue, status) for given branches.
+def get_cl_statuses(changes, fine_grained, max_processes=None):
+ """Returns a blocking iterable of (cl, status) for given branches.
If fine_grained is true, this will fetch CL statuses from the server.
Otherwise, simply indicate if there's a matching url for the given branches.
@@ -2950,50 +2937,41 @@ def get_cl_statuses(
See GetStatus() for a list of possible statuses.
"""
- def fetch(branch):
- if not branch:
- return None
-
- return fetch_cl_status(branch, auth_config=auth_config)
-
# Silence upload.py otherwise it becomes unwieldly.
upload.verbosity = 0
if fine_grained:
# Process one branch synchronously to work through authentication, then
# spawn processes to process all the other branches in parallel.
- if branches:
-
- yield fetch(branches[0])
+ if changes:
+ fetch = lambda cl: (cl, cl.GetStatus())
+ yield fetch(changes[0])
- branches_to_fetch = branches[1:]
+ changes_to_fetch = changes[1:]
pool = ThreadPool(
- min(max_processes, len(branches_to_fetch))
+ min(max_processes, len(changes_to_fetch))
if max_processes is not None
- else len(branches_to_fetch))
+ else len(changes_to_fetch))
- fetched_branches = set()
- it = pool.imap_unordered(fetch, branches_to_fetch).__iter__()
+ fetched_cls = set()
+ it = pool.imap_unordered(fetch, changes_to_fetch).__iter__()
while True:
try:
row = it.next(timeout=5)
except multiprocessing.TimeoutError:
break
- fetched_branches.add(row[0])
+ fetched_cls.add(row[0])
yield row
# Add any branches that failed to fetch.
- for b in set(branches_to_fetch) - fetched_branches:
- cl = Changelist(branchref=b, auth_config=auth_config)
- yield (b, cl.GetIssueURL() if b else None, 'error')
+ for cl in set(changes_to_fetch) - fetched_cls:
+ yield (cl, 'error')
else:
# Do not use GetApprovingReviewers(), since it requires an HTTP request.
- for b in branches:
- cl = Changelist(branchref=b, auth_config=auth_config)
- url = cl.GetIssueURL() if b else None
- yield (b, url, 'waiting' if url else 'error')
+ for cl in changes:
+ yield (cl, 'waiting' if cl.GetIssueURL() else 'error')
def upload_branch_deps(cl, args):
@@ -3146,25 +3124,27 @@ def CMDstatus(parser, args):
print('No local branch found.')
return 0
- changes = (
+ changes = [
Changelist(branchref=b, auth_config=auth_config)
- for b in branches.splitlines())
- # TODO(tandrii): refactor to use CLs list instead of branches list.
- branches = [c.GetBranch() for c in changes]
- alignment = max(5, max(len(b) for b in branches))
+ for b in branches.splitlines()]
print 'Branches associated with reviews:'
- output = get_cl_statuses(branches,
+ output = get_cl_statuses(changes,
fine_grained=not options.fast,
- max_processes=options.maxjobs,
- auth_config=auth_config)
+ max_processes=options.maxjobs)
branch_statuses = {}
- alignment = max(5, max(len(ShortBranchName(b)) for b in branches))
- for branch in sorted(branches):
+ alignment = max(5, max(len(ShortBranchName(c.GetBranch())) for c in changes))
+ for cl in sorted(changes, key=lambda c: c.GetBranch()):
+ branch = cl.GetBranch()
while branch not in branch_statuses:
- b, i, status = output.next()
- branch_statuses[b] = (i, status)
- issue_url, status = branch_statuses.pop(branch)
+ c, status = output.next()
+ branch_statuses[c.GetBranch()] = status
+ status = branch_statuses.pop(branch)
+ url = cl.GetIssueURL()
+ if url and (not status or status == 'error'):
+ # The issue probably doesn't exist anymore.
+ url += ' (broken)'
+
color = color_for_status(status)
reset = Fore.RESET
if not setup_color.IS_TTY:
@@ -3172,8 +3152,8 @@ def CMDstatus(parser, args):
reset = ''
status_str = '(%s)' % status if status else ''
print ' %*s : %s%s %s%s' % (
- alignment, ShortBranchName(branch), color, issue_url, status_str,
- reset)
+ alignment, ShortBranchName(branch), color, url,
+ status_str, reset)
cl = Changelist(auth_config=auth_config)
print
« no previous file with comments | « no previous file | git_map_branches.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698