Write commit position as a comment in Chromium DEPS.

This will make it easier to track which revision is
in a certain Chrome release, since you don't have to
look up the Git hash every time.

Also rename svn_revision to commit_position to make
it more clear what the number is in the post-SVN era.

TESTED=tools/autoroller/roll_webrtc_in_chromium.py --chromium-checkout /ssd/chrome/src --verbose --ignore-checks --dry-run --close-previous-roll
and verified in the modified DEPS file that the comment was set.

R=tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/49439004

Cr-Commit-Position: refs/heads/master@{#8756}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8756 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
kjellander@webrtc.org 2015-03-17 14:30:08 +00:00
parent 7c64ed2e0c
commit 1e6925274a

View File

@ -29,6 +29,7 @@ sys.path.insert(1, os.path.join(ROOT_DIR, 'tools'))
import find_depot_tools
find_depot_tools.add_depot_tools_to_path()
import rietveld
import roll_dep
from gclient import GClientKeywords
from third_party import upload
@ -36,7 +37,7 @@ from third_party import upload
upload.verbosity = 0 # Errors only.
CHROMIUM_GIT_URL = 'https://chromium.googlesource.com/chromium/src.git'
GIT_SVN_ID_RE = re.compile('^Cr-Original-Commit-Position: .*#([0-9]+).*$')
COMMIT_POSITION_RE = re.compile('^Cr-Original-Commit-Position: .*#([0-9]+).*$')
CL_ISSUE_RE = re.compile('^Issue number: ([0-9]+) \((.*)\)$')
RIETVELD_URL_RE = re.compile('^https?://(.*)/(.*)')
ROLL_BRANCH_NAME = 'special_webrtc_roll_branch'
@ -62,24 +63,22 @@ TRYJOB_STATUS = {
SUCCESS_STATUS = (0, 1, 3)
FAILURE_STATUS = (2, 4, 5)
CommitInfo = collections.namedtuple('CommitInfo', ['svn_revision',
CommitInfo = collections.namedtuple('CommitInfo', ['commit_position',
'git_commit',
'git_repo_url'])
CLInfo = collections.namedtuple('CLInfo', ['issue', 'url', 'rietveld_server'])
def _ParseSvnRevisionFromGitDescription(description):
def _ParseGitCommitPosition(description):
for line in reversed(description.splitlines()):
m = GIT_SVN_ID_RE.match(line.strip())
m = COMMIT_POSITION_RE.match(line.strip())
if m:
return m.group(1)
logging.error('Failed to parse svn revision id from:\n%s\n', description)
sys.exit(-1)
def _ParseGitCommitFromDescription(description):
# TODO(kjellander): Consider passing --format=%b to the git log command so we
# don't need to have error-prone parsing like this.
def _ParseGitCommitHash(description):
for line in description.splitlines():
if line.startswith('commit '):
return line.split()[1]
@ -165,8 +164,8 @@ def _GenerateCLDescription(webrtc_current, libjingle_current,
return '%s/+log/%s..%s' % (git_repo_url, current_hash[0:7], new_hash[0:7])
if webrtc_current.git_commit != webrtc_new.git_commit:
webrtc_str = 'WebRTC %s:%s' % (webrtc_current.svn_revision,
webrtc_new.svn_revision)
webrtc_str = 'WebRTC %s:%s' % (webrtc_current.commit_position,
webrtc_new.commit_position)
webrtc_changelog_url = GetChangeLogURL(webrtc_current.git_repo_url,
webrtc_current.git_commit,
webrtc_new.git_commit)
@ -175,8 +174,8 @@ def _GenerateCLDescription(webrtc_current, libjingle_current,
if libjingle_current.git_commit != libjingle_new.git_commit:
if webrtc_str:
delim += ', '
libjingle_str = 'Libjingle %s:%s' % (libjingle_current.svn_revision,
libjingle_new.svn_revision)
libjingle_str = 'Libjingle %s:%s' % (libjingle_current.commit_position,
libjingle_new.commit_position)
libjingle_changelog_url = GetChangeLogURL(libjingle_current.git_repo_url,
libjingle_current.git_commit,
libjingle_new.git_commit)
@ -235,8 +234,8 @@ class AutoRoller(object):
ret = self._RunCommand(
['git', '--no-pager', 'log', revision_range, '--pretty=full', '-1'],
working_dir=working_dir)
return CommitInfo(_ParseSvnRevisionFromGitDescription(ret),
_ParseGitCommitFromDescription(ret), git_repo_url)
return CommitInfo(_ParseGitCommitPosition(ret), _ParseGitCommitHash(ret),
git_repo_url)
def _GetDepsCommitInfo(self, deps_dict, path_below_src):
entry = deps_dict['deps']['src/%s' % path_below_src]
@ -308,7 +307,8 @@ class AutoRoller(object):
# Modify Chromium's DEPS file.
# Parse current hashes.
deps = _ParseDepsFile(os.path.join(self._chromium_src, 'DEPS'))
deps_filename = os.path.join(self._chromium_src, 'DEPS')
deps = _ParseDepsFile(deps_filename)
webrtc_current = self._GetDepsCommitInfo(deps, WEBRTC_PATH)
libjingle_current = self._GetDepsCommitInfo(deps, LIBJINGLE_PATH)
@ -316,14 +316,14 @@ class AutoRoller(object):
webrtc_latest = self._GetCommitInfo(WEBRTC_PATH)
libjingle_latest = self._GetCommitInfo(LIBJINGLE_PATH)
self._RunCommand(['roll-dep', WEBRTC_PATH, webrtc_latest.git_commit])
self._RunCommand(['roll-dep', LIBJINGLE_PATH, libjingle_latest.git_commit])
self._UpdateDep(deps_filename, WEBRTC_PATH, webrtc_latest)
self._UpdateDep(deps_filename, LIBJINGLE_PATH, libjingle_latest)
if self._IsTreeClean():
logging.debug('Tree is clean - no changes detected.')
self._DeleteRollBranch()
else:
self._UpdateReadmeFile(LIBJINGLE_README, libjingle_latest.svn_revision)
self._UpdateReadmeFile(LIBJINGLE_README, libjingle_latest.commit_position)
description = _GenerateCLDescription(webrtc_current, libjingle_current,
webrtc_latest, libjingle_latest)
logging.debug('Committing changes locally.')
@ -343,6 +343,18 @@ class AutoRoller(object):
# TODO(kjellander): Checkout masters/previous branches again.
return 0
def _UpdateDep(self, deps_filename, dep_relative_to_src, commit_info):
dep_name = os.path.join('src', dep_relative_to_src)
comment = 'commit position %s' % commit_info.commit_position
# roll_dep.py relies on cwd being the Chromium checkout, so let's
# temporarily change the working directory and then change back.
cwd = os.getcwd()
os.chdir(os.path.dirname(deps_filename))
roll_dep.update_deps(deps_filename, dep_relative_to_src, dep_name,
commit_info.git_commit, comment)
os.chdir(cwd)
def _DeleteRollBranch(self):
self._RunCommand(['git', 'checkout', 'master'])
self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME])