| Index: roll_dep.py
|
| diff --git a/roll_dep.py b/roll_dep.py
|
| index 2f78983b270b9c717f750ab6b7099e29d68e4170..2e38b04d1aa64c530a7b4c944c31ae80d8dfaaf2 100755
|
| --- a/roll_dep.py
|
| +++ b/roll_dep.py
|
| @@ -3,8 +3,9 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| -"""This scripts takes the path to a dep and an svn revision, and updates the
|
| -parent repo's DEPS file with the corresponding git revision. Sample invocation:
|
| +"""This scripts takes the path to a dep and a git or svn revision, and updates
|
| +the parent repo's DEPS file with the corresponding git revision. Sample
|
| +invocation:
|
|
|
| [chromium/src]$ roll-dep third_party/WebKit 12345
|
|
|
| @@ -297,6 +298,7 @@ def generate_commit_message(deps_section, dep_path, dep_name, new_rev):
|
| 'revlog_url': url,
|
| })
|
|
|
| +
|
| def update_deps_entry(deps_lines, deps_ast, value_node, new_rev, comment):
|
| line_idx = update_node(deps_lines, deps_ast, value_node, new_rev)
|
| (content, _, _) = deps_lines[line_idx].partition('#')
|
| @@ -305,6 +307,7 @@ def update_deps_entry(deps_lines, deps_ast, value_node, new_rev, comment):
|
| else:
|
| deps_lines[line_idx] = content.rstrip()
|
|
|
| +
|
| def update_deps(deps_file, dep_path, dep_name, new_rev, comment):
|
| """Update the DEPS file with the new git revision."""
|
| commit_msg = ''
|
| @@ -337,39 +340,38 @@ def update_deps(deps_file, dep_path, dep_name, new_rev, comment):
|
| update_deps_entry(deps_lines, deps_ast, value_node, new_rev, comment)
|
| commit_msg = generate_commit_message(
|
| deps_locals['deps_os'][os_name.s], dep_path, dep_name, new_rev)
|
| - if commit_msg:
|
| - print 'Pinning %s' % dep_name
|
| - print 'to revision %s' % new_rev
|
| - print 'in %s' % deps_file
|
| - with open(deps_file, 'w') as fh:
|
| - for line in deps_lines:
|
| - print >> fh, line
|
| - deps_file_dir = os.path.normpath(os.path.dirname(deps_file))
|
| - deps_file_root = Popen(
|
| - ['git', 'rev-parse', '--show-toplevel'],
|
| - cwd=deps_file_dir, stdout=PIPE).communicate()[0].strip()
|
| - with open(os.path.join(deps_file_root, '.git', 'MERGE_MSG'), 'w') as fh:
|
| - fh.write(commit_msg)
|
| - else:
|
| + if not commit_msg:
|
| print 'Could not find an entry in %s to update.' % deps_file
|
| - return 0 if commit_msg else 1
|
| + return 1
|
| +
|
| + print 'Pinning %s' % dep_name
|
| + print 'to revision %s' % new_rev
|
| + print 'in %s' % deps_file
|
| + with open(deps_file, 'w') as fh:
|
| + for line in deps_lines:
|
| + print >> fh, line
|
| + deps_file_dir = os.path.normpath(os.path.dirname(deps_file))
|
| + deps_file_root = Popen(
|
| + ['git', 'rev-parse', '--show-toplevel'],
|
| + cwd=deps_file_dir, stdout=PIPE).communicate()[0].strip()
|
| + with open(os.path.join(deps_file_root, '.git', 'MERGE_MSG'), 'w') as fh:
|
| + fh.write(commit_msg)
|
| + return 0
|
|
|
|
|
| def main(argv):
|
| - parser = optparse.OptionParser()
|
| + usage = 'Usage: roll_dep.py [options] <dep path> <rev> [ <DEPS file> ]'
|
| + parser = optparse.OptionParser(usage=usage, description=__doc__)
|
| parser.add_option('--no-verify-revision',
|
| help='Don\'t verify the revision passed in. This '
|
| 'also skips adding an svn revision comment '
|
| 'for git dependencies and requires the passed '
|
| 'revision to be a git hash.',
|
| default=False, action='store_true')
|
| - (options, argv) = parser.parse_args(argv)
|
| - if len(argv) not in (2, 3):
|
| - print >> sys.stderr, (
|
| - 'Usage: roll_dep.py [options] <dep path> <svn revision> '
|
| - '[ <DEPS file> ]')
|
| - return 1
|
| - (arg_dep_path, revision) = argv[0:2]
|
| + options, args = parser.parse_args(argv)
|
| + if len(args) not in (2, 3):
|
| + parser.error('Expected either 2 or 3 positional parameters.')
|
| + arg_dep_path, revision = args[:2]
|
| gclient_root = find_gclient_root()
|
| dep_path = platform_path(arg_dep_path)
|
| if not os.path.exists(dep_path):
|
| @@ -377,26 +379,33 @@ def main(argv):
|
| if not options.no_verify_revision:
|
| # Only require the path to exist if the revision should be verified. A path
|
| # to e.g. os deps might not be checked out.
|
| - assert os.path.isdir(dep_path), 'No such directory: %s' % arg_dep_path
|
| - if len(argv) > 2:
|
| - deps_file = argv[2]
|
| + if not os.path.isdir(dep_path):
|
| + print >> sys.stderr, 'No such directory: %s' % arg_dep_path
|
| + return 1
|
| + if len(args) > 2:
|
| + deps_file = args[2]
|
| else:
|
| soln = get_solution(gclient_root, dep_path)
|
| soln_path = os.path.relpath(os.path.join(gclient_root, soln['name']))
|
| deps_file = os.path.join(soln_path, 'DEPS')
|
| dep_name = posix_path(os.path.relpath(dep_path, gclient_root))
|
| if options.no_verify_revision:
|
| - assert is_git_hash(revision), (
|
| - 'The passed revision %s must be a git hash when skipping revision '
|
| - 'verification.' % revision)
|
| + if not is_git_hash(revision):
|
| + print >> sys.stderr, (
|
| + 'The passed revision %s must be a git hash when skipping revision '
|
| + 'verification.' % revision)
|
| + return 1
|
| git_rev = revision
|
| comment = None
|
| else:
|
| - (git_rev, svn_rev) = get_git_revision(dep_path, revision)
|
| + git_rev, svn_rev = get_git_revision(dep_path, revision)
|
| comment = ('from svn revision %s' % svn_rev) if svn_rev else None
|
| - assert git_rev, 'Could not find git revision matching %s.' % revision
|
| + if not git_rev:
|
| + print >> sys.stderr, 'Could not find git revision matching %s.' % revision
|
| + return 1
|
| return update_deps(deps_file, dep_path, dep_name, git_rev, comment)
|
|
|
| +
|
| if __name__ == '__main__':
|
| try:
|
| sys.exit(main(sys.argv[1:]))
|
|
|