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
diff --git a/tools/autoroller/roll_webrtc_in_chromium.py b/tools/autoroller/roll_webrtc_in_chromium.py
index 61c148e..d312a03 100755
--- a/tools/autoroller/roll_webrtc_in_chromium.py
+++ b/tools/autoroller/roll_webrtc_in_chromium.py
@@ -29,6 +29,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
# 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 @@
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 @@
# 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])