| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 # Copyright (c) 2014 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2014 The Chromium Authors. All rights reserved. | 
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be | 
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. | 
| 5 | 5 | 
| 6 """This scripts takes the path to a dep and an svn revision, and updates the | 6 """This scripts takes the path to a dep and an svn revision, and updates the | 
| 7 parent repo's DEPS file with the corresponding git revision.  Sample invocation: | 7 parent repo's DEPS file with the corresponding git revision.  Sample invocation: | 
| 8 | 8 | 
| 9 [chromium/src]$ roll-dep third_party/WebKit 12345 | 9 [chromium/src]$ roll-dep third_party/WebKit 12345 | 
| 10 | 10 | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 100     m = GIT_SVN_ID_RE.match(line.strip()) | 100     m = GIT_SVN_ID_RE.match(line.strip()) | 
| 101     if m: | 101     if m: | 
| 102       return m.group(1) | 102       return m.group(1) | 
| 103   return None | 103   return None | 
| 104 | 104 | 
| 105 | 105 | 
| 106 def convert_svn_revision(dep_path, revision): | 106 def convert_svn_revision(dep_path, revision): | 
| 107   """Find the git revision corresponding to an svn revision.""" | 107   """Find the git revision corresponding to an svn revision.""" | 
| 108   err_msg = 'Unknown error' | 108   err_msg = 'Unknown error' | 
| 109   revision = int(revision) | 109   revision = int(revision) | 
|  | 110   latest_svn_rev = None | 
| 110   with open(os.devnull, 'w') as devnull: | 111   with open(os.devnull, 'w') as devnull: | 
| 111     for ref in ('HEAD', 'origin/master'): | 112     for ref in ('HEAD', 'origin/master'): | 
| 112       try: | 113       try: | 
| 113         log_p = Popen(['git', 'log', ref], | 114         log_p = Popen(['git', 'log', ref], | 
| 114                       cwd=dep_path, stdout=PIPE, stderr=devnull) | 115                       cwd=dep_path, stdout=PIPE, stderr=devnull) | 
| 115         grep_p = Popen(['grep', '-e', '^commit ', '-e', '^ *git-svn-id: '], | 116         grep_p = Popen(['grep', '-e', '^commit ', '-e', '^ *git-svn-id: '], | 
| 116                        stdin=log_p.stdout, stdout=PIPE, stderr=devnull) | 117                        stdin=log_p.stdout, stdout=PIPE, stderr=devnull) | 
| 117         git_rev = None | 118         git_rev = None | 
| 118         prev_svn_rev = None | 119         prev_svn_rev = None | 
| 119         for line in grep_p.stdout: | 120         for line in grep_p.stdout: | 
| 120           if line.startswith('commit '): | 121           if line.startswith('commit '): | 
| 121             git_rev = line.split()[1] | 122             git_rev = line.split()[1] | 
| 122             continue | 123             continue | 
| 123           try: | 124           try: | 
| 124             svn_rev = int(line.split()[1].partition('@')[2]) | 125             svn_rev = int(line.split()[1].partition('@')[2]) | 
| 125           except (IndexError, ValueError): | 126           except (IndexError, ValueError): | 
| 126             print >> sys.stderr, ( | 127             print >> sys.stderr, ( | 
| 127                 'WARNING: Could not parse svn revision out of "%s"' % line) | 128                 'WARNING: Could not parse svn revision out of "%s"' % line) | 
| 128             continue | 129             continue | 
|  | 130           if not latest_svn_rev or int(svn_rev) > int(latest_svn_rev): | 
|  | 131             latest_svn_rev = svn_rev | 
| 129           if svn_rev == revision: | 132           if svn_rev == revision: | 
| 130             return git_rev | 133             return git_rev | 
| 131           if svn_rev > revision: | 134           if svn_rev > revision: | 
| 132             prev_svn_rev = svn_rev | 135             prev_svn_rev = svn_rev | 
| 133             continue | 136             continue | 
| 134           if prev_svn_rev: | 137           if prev_svn_rev: | 
| 135             err_msg = 'git history skips from revision %d to revision %d.' % ( | 138             err_msg = 'git history skips from revision %d to revision %d.' % ( | 
| 136                 svn_rev, prev_svn_rev) | 139                 svn_rev, prev_svn_rev) | 
| 137           else: | 140           else: | 
| 138             err_msg = ( | 141             err_msg = ( | 
| 139                 'latest available revision is %d; you may need to ' | 142                 'latest available revision is %d; you may need to ' | 
| 140                 '"git fetch origin" to get the latest commits.' % svn_rev) | 143                 '"git fetch origin" to get the latest commits.' % | 
|  | 144                 latest_svn_rev) | 
| 141       finally: | 145       finally: | 
| 142         log_p.terminate() | 146         log_p.terminate() | 
| 143         grep_p.terminate() | 147         grep_p.terminate() | 
| 144   raise RuntimeError('No match for revision %d; %s' % (revision, err_msg)) | 148   raise RuntimeError('No match for revision %d; %s' % (revision, err_msg)) | 
| 145 | 149 | 
| 146 | 150 | 
| 147 def get_git_revision(dep_path, revision): | 151 def get_git_revision(dep_path, revision): | 
| 148   """Convert the revision argument passed to the script to a git revision.""" | 152   """Convert the revision argument passed to the script to a git revision.""" | 
| 149   svn_revision = None | 153   svn_revision = None | 
| 150   if revision.startswith('r'): | 154   if revision.startswith('r'): | 
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 347   soln = get_solution(gclient_root, dep_path) | 351   soln = get_solution(gclient_root, dep_path) | 
| 348   soln_path = os.path.relpath(os.path.join(gclient_root, soln['name'])) | 352   soln_path = os.path.relpath(os.path.join(gclient_root, soln['name'])) | 
| 349   dep_name = posix_path(os.path.relpath(dep_path, gclient_root)) | 353   dep_name = posix_path(os.path.relpath(dep_path, gclient_root)) | 
| 350   (git_rev, svn_rev) = get_git_revision(dep_path, revision) | 354   (git_rev, svn_rev) = get_git_revision(dep_path, revision) | 
| 351   comment = ('from svn revision %s' % svn_rev) if svn_rev else None | 355   comment = ('from svn revision %s' % svn_rev) if svn_rev else None | 
| 352   assert git_rev, 'Could not find git revision matching %s.' % revision | 356   assert git_rev, 'Could not find git revision matching %s.' % revision | 
| 353   return update_deps(soln_path, dep_path, dep_name, git_rev, comment) | 357   return update_deps(soln_path, dep_path, dep_name, git_rev, comment) | 
| 354 | 358 | 
| 355 if __name__ == '__main__': | 359 if __name__ == '__main__': | 
| 356   sys.exit(main(sys.argv[1:])) | 360   sys.exit(main(sys.argv[1:])) | 
| OLD | NEW | 
|---|