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])