Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: deps2git/deps2git.py

Issue 11085027: Add --workspace option, so deps2git.py may be run in a (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | deps2git/git_tools.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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 """Convert SVN based DEPS into .DEPS.git for use with NewGit.""" 6 """Convert SVN based DEPS into .DEPS.git for use with NewGit."""
7 7
8 import optparse 8 import optparse
9 import os 9 import os
10 import sys 10 import sys
11 11
12 import deps_utils 12 import deps_utils
13 import git_tools 13 import git_tools
14 14
15 15
16 def SplitScmUrl(url): 16 def SplitScmUrl(url):
17 """Given a repository, return a set containing the URL and the revision.""" 17 """Given a repository, return a set containing the URL and the revision."""
18 url_split = url.split('@') 18 url_split = url.split('@')
19 scm_url = url_split[0] 19 scm_url = url_split[0]
20 scm_rev = 'HEAD' 20 scm_rev = 'HEAD'
21 if len(url_split) == 2: 21 if len(url_split) == 2:
22 scm_rev = url_split[1] 22 scm_rev = url_split[1]
23 return (scm_url, scm_rev) 23 return (scm_url, scm_rev)
24 24
25 25
26 def SvnRevToGitHash(svn_rev, git_url, repos_path, git_host): 26 def SvnRevToGitHash(svn_rev, git_url, repos_path, workspace, dep_path,
27 git_host):
27 """Convert a SVN revision to a Git commit id.""" 28 """Convert a SVN revision to a Git commit id."""
28 git_repo = None 29 git_repo = None
29 if git_url.startswith(git_host): 30 if git_url.startswith(git_host):
30 git_repo = git_url.replace(git_host, '') 31 git_repo = git_url.replace(git_host, '')
31 else: 32 else:
32 raise Exception('Unknown git server') 33 raise Exception('Unknown git server')
33 if repos_path is None: 34 if repos_path is None and workspace is None:
34 # We're running without a repository directory (i.e. no -r option). 35 # We're running without a repository directory (i.e. no -r option).
35 # We cannot actually find the commit id, but this mode is useful 36 # We cannot actually find the commit id, but this mode is useful
36 # just for testing the URL mappings. Produce an output file that 37 # just for testing the URL mappings. Produce an output file that
37 # can't actually be used, but can be eyeballed for correct URLs. 38 # can't actually be used, but can be eyeballed for correct URLs.
38 return 'xxx-r%s' % svn_rev 39 return 'xxx-r%s' % svn_rev
39 git_repo_path = os.path.join(repos_path, git_repo) 40 if repos_path:
41 git_repo_path = os.path.join(repos_path, git_repo)
42 mirror = True
43 else:
44 git_repo_path = os.path.join(workspace, dep_path)
45 mirror = False
40 if not os.path.exists(git_repo_path): 46 if not os.path.exists(git_repo_path):
41 git_tools.Clone(git_url, git_repo_path) 47 git_tools.Clone(git_url, git_repo_path, mirror)
42 else: 48 else:
43 git_tools.Fetch(git_repo_path) 49 git_tools.Fetch(git_repo_path, mirror)
44 return git_tools.Search(git_repo_path, svn_rev) 50 return git_tools.Search(git_repo_path, svn_rev, mirror)
45 51
46 52
47 def ConvertDepsToGit(deps, repos, deps_type, deps_vars, svn_deps_vars, verify): 53 def ConvertDepsToGit(deps, repos, workspace, deps_type, deps_vars,
54 svn_deps_vars, verify):
48 """Convert a 'deps' section in a DEPS file from SVN to Git.""" 55 """Convert a 'deps' section in a DEPS file from SVN to Git."""
49 new_deps = {} 56 new_deps = {}
50 bad_git_urls = set([]) 57 bad_git_urls = set([])
51 58
52 try: 59 try:
53 sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) 60 sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
54 svn_to_git = __import__('svn_to_git_%s' % deps_type) 61 svn_to_git = __import__('svn_to_git_%s' % deps_type)
55 except ImportError: 62 except ImportError:
56 raise Exception('invalid DEPS type') 63 raise Exception('invalid DEPS type')
57 64
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 '@' + svn_deps_vars[deps_overrides[dep]].lstrip('@')) 105 '@' + svn_deps_vars[deps_overrides[dep]].lstrip('@'))
99 # Tag this variable as needing a transform by Varify() later. 106 # Tag this variable as needing a transform by Varify() later.
100 git_hash = '%s_%s' % (deps_utils.VARIFY_MARKER_TAG_PREFIX, 107 git_hash = '%s_%s' % (deps_utils.VARIFY_MARKER_TAG_PREFIX,
101 deps_overrides[dep]) 108 deps_overrides[dep])
102 else: 109 else:
103 # Pass-through the hash for Git repositories. Resolve the hash for 110 # Pass-through the hash for Git repositories. Resolve the hash for
104 # subversion repositories. 111 # subversion repositories.
105 if dep_url.endswith('.git'): 112 if dep_url.endswith('.git'):
106 git_hash = '@%s' % dep_rev 113 git_hash = '@%s' % dep_rev
107 else: 114 else:
108 git_hash = '@%s' % SvnRevToGitHash(dep_rev, git_url, repos, 115 git_hash = '@%s' % SvnRevToGitHash(dep_rev, git_url, repos, workspace,
109 svn_to_git.GIT_HOST) 116 path, svn_to_git.GIT_HOST)
110 117
111 # If this is webkit, we need to add the var for the hash. 118 # If this is webkit, we need to add the var for the hash.
112 if dep == 'src/third_party/WebKit/Source': 119 if dep == 'src/third_party/WebKit/Source':
113 deps_vars['webkit_rev'] = git_hash 120 deps_vars['webkit_rev'] = git_hash
114 git_hash = 'VAR_WEBKIT_REV' 121 git_hash = 'VAR_WEBKIT_REV'
115 122
116 # Add this Git dep to the new deps. 123 # Add this Git dep to the new deps.
117 new_deps[path] = '%s%s' % (git_url, git_hash) 124 new_deps[path] = '%s%s' % (git_url, git_hash)
118 125
119 return new_deps, bad_git_urls 126 return new_deps, bad_git_urls
120 127
121 128
122 def main(): 129 def main():
123 parser = optparse.OptionParser() 130 parser = optparse.OptionParser()
124 parser.add_option('-d', '--deps', default='DEPS', 131 parser.add_option('-d', '--deps', default='DEPS',
125 help='path to the DEPS file to convert') 132 help='path to the DEPS file to convert')
126 parser.add_option('-o', '--out', 133 parser.add_option('-o', '--out',
127 help='path to the converted DEPS file (default: stdout)') 134 help='path to the converted DEPS file (default: stdout)')
128 parser.add_option('-t', '--type', default='public', 135 parser.add_option('-t', '--type', default='public',
129 help='type of DEPS file (public, etc)') 136 help='type of DEPS file (public, etc)')
130 parser.add_option('-r', '--repos', 137 parser.add_option('-r', '--repos',
131 help='path to the directory holding all the Git repos') 138 help='path to the directory holding all the Git repos')
139 parser.add_option('-w', '--workspace', metavar='PATH',
140 help='top level of a git-based gclient checkout')
132 parser.add_option('--verify', action='store_true', 141 parser.add_option('--verify', action='store_true',
133 help='ping each Git repo to make sure it exists') 142 help='ping each Git repo to make sure it exists')
134 options = parser.parse_args()[0] 143 options = parser.parse_args()[0]
135 144
136 # Get the content of the DEPS file. 145 # Get the content of the DEPS file.
137 deps_content = deps_utils.GetDepsContent(options.deps) 146 deps_content = deps_utils.GetDepsContent(options.deps)
138 (deps, deps_os, include_rules, skip_child_includes, hooks, 147 (deps, deps_os, include_rules, skip_child_includes, hooks,
139 svn_deps_vars) = deps_content 148 svn_deps_vars) = deps_content
140 149
141 # Create a var containing the Git and Webkit URL, this will make it easy for 150 # Create a var containing the Git and Webkit URL, this will make it easy for
142 # people to use a mirror instead. 151 # people to use a mirror instead.
143 git_url = 'http://git.chromium.org' 152 git_url = 'http://git.chromium.org'
144 deps_vars = { 153 deps_vars = {
145 'git_url': git_url, 154 'git_url': git_url,
146 'webkit_url': git_url + '/external/WebKit_trimmed.git' 155 'webkit_url': git_url + '/external/WebKit_trimmed.git'
147 } 156 }
148 157
149 # Convert the DEPS file to Git. 158 # Convert the DEPS file to Git.
150 deps, baddeps = ConvertDepsToGit(deps, options.repos, options.type, deps_vars, 159 deps, baddeps = ConvertDepsToGit(deps, options.repos, options.workspace,
151 svn_deps_vars, options.verify) 160 options.type, deps_vars, svn_deps_vars,
161 options.verify)
152 for os_dep in deps_os: 162 for os_dep in deps_os:
153 deps_os[os_dep], os_bad_deps = ConvertDepsToGit(deps_os[os_dep], 163 deps_os[os_dep], os_bad_deps = ConvertDepsToGit(deps_os[os_dep],
154 options.repos, options.type, deps_vars, 164 options.repos, options.workspace,
155 svn_deps_vars, options.verify) 165 options.type, deps_vars, svn_deps_vars,
166 options.verify)
156 baddeps = baddeps.union(os_bad_deps) 167 baddeps = baddeps.union(os_bad_deps)
157 168
158 if baddeps: 169 if baddeps:
159 print >>sys.stderr, ('\nUnable to resolve the following repositories. ' 170 print >>sys.stderr, ('\nUnable to resolve the following repositories. '
160 'Please make sure\nthat any svn URLs have a git mirror associated with ' 171 'Please make sure\nthat any svn URLs have a git mirror associated with '
161 'them.\nTo see the exact error, run `git ls-remote [repository]` where' 172 'them.\nTo see the exact error, run `git ls-remote [repository]` where'
162 '\n[repository] is the URL ending in .git (strip off the @revision\n' 173 '\n[repository] is the URL ending in .git (strip off the @revision\n'
163 'number.) For more information, visit http://code.google.com\n' 174 'number.) For more information, visit http://code.google.com\n'
164 '/p/chromium/wiki/UsingNewGit#Adding_new_repositories_to_DEPS.\n') 175 '/p/chromium/wiki/UsingNewGit#Adding_new_repositories_to_DEPS.\n')
165 for dep in baddeps: 176 for dep in baddeps:
166 print >>sys.stderr, ' ' + dep 177 print >>sys.stderr, ' ' + dep
167 return 2 178 return 2
168 else: 179 else:
169 if options.verify: 180 if options.verify:
170 print >>sys.stderr, ('\nAll referenced repositories were successfully ' 181 print >>sys.stderr, ('\nAll referenced repositories were successfully '
171 'resolved.') 182 'resolved.')
172 return 0 183 return 0
173 184
174 # Write the DEPS file to disk. 185 # Write the DEPS file to disk.
175 deps_utils.WriteDeps(options.out, deps_vars, deps, deps_os, include_rules, 186 deps_utils.WriteDeps(options.out, deps_vars, deps, deps_os, include_rules,
176 skip_child_includes, hooks) 187 skip_child_includes, hooks)
177 return 0 188 return 0
178 189
179 190
180 if '__main__' == __name__: 191 if '__main__' == __name__:
181 sys.exit(main()) 192 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | deps2git/git_tools.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698