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

Side by Side Diff: fetch.py

Issue 13910005: Add the --nosvn property to the chromium solution. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: updates Created 7 years, 8 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
« no previous file with comments | « no previous file | recipes/chromium.py » ('j') | recipes/chromium.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2013 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 """ 6 """
7 Tool to perform checkouts in one easy command line! 7 Tool to perform checkouts in one easy command line!
8 8
9 Usage: 9 Usage:
10 fetch <recipe> [--property=value [--property2=value2 ...]] 10 fetch <recipe> [--property=value [--property2=value2 ...]]
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 76
77 77
78 class SvnCheckout(Checkout): 78 class SvnCheckout(Checkout):
79 79
80 def run_svn(self, *cmd, **kwargs): 80 def run_svn(self, *cmd, **kwargs):
81 print 'Running: svn %s' % ' '.join(pipes.quote(x) for x in cmd) 81 print 'Running: svn %s' % ' '.join(pipes.quote(x) for x in cmd)
82 if not self.dryrun: 82 if not self.dryrun:
83 return subprocess.check_call(('svn',) + cmd, **kwargs) 83 return subprocess.check_call(('svn',) + cmd, **kwargs)
84 84
85 85
86 class GclientGitSvnCheckout(GclientCheckout, GitCheckout, SvnCheckout): 86 class GclientGitCheckout(GclientCheckout, GitCheckout):
87 87
88 def __init__(self, dryrun, spec, root): 88 def __init__(self, dryrun, spec, root):
89 super(GclientGitSvnCheckout, self).__init__(dryrun, spec, root) 89 super(GclientGitCheckout, self).__init__(dryrun, spec, root)
90 assert 'solutions' in self.spec 90 assert 'solutions' in self.spec
91 keys = ['solutions', 'target_os', 'target_os_only'] 91 keys = ['solutions', 'target_os', 'target_os_only']
92 gclient_spec = '\n'.join('%s = %s' % (key, self.spec[key]) 92 gclient_spec = '\n'.join('%s = %s' % (key, self.spec[key])
93 for key in self.spec if key in keys) 93 for key in self.spec if key in keys)
94 self.spec['gclient_spec'] = gclient_spec 94 self.spec['gclient_spec'] = gclient_spec
95 assert 'svn_url' in self.spec
96 assert 'svn_branch' in self.spec
97 assert 'svn_ref' in self.spec
98 95
99 def exists(self): 96 def exists(self):
100 return os.path.exists(os.path.join(os.getcwd(), self.root)) 97 return os.path.exists(os.path.join(os.getcwd(), self.root))
101 98
102 def init(self): 99 def init(self):
103 # Ensure we are authenticated with subversion for all submodules.
104 git_svn_dirs = json.loads(self.spec.get('submodule_git_svn_spec', '{}'))
105 git_svn_dirs.update({self.root: self.spec})
106 for _, svn_spec in git_svn_dirs.iteritems():
107 try:
108 self.run_svn('ls', '--non-interactive', svn_spec['svn_url'])
109 except subprocess.CalledProcessError:
110 print 'Please run `svn ls %s`' % svn_spec['svn_url']
111 return 1
112
113 # TODO(dpranke): Work around issues w/ delta compression on big repos. 100 # TODO(dpranke): Work around issues w/ delta compression on big repos.
114 self.run_git('config', '--global', 'core.deltaBaseCacheLimit', '1G') 101 self.run_git('config', '--global', 'core.deltaBaseCacheLimit', '1G')
115 102
116 # Configure and do the gclient checkout. 103 # Configure and do the gclient checkout.
117 self.run_gclient('config', '--spec', self.spec['gclient_spec']) 104 self.run_gclient('config', '--spec', self.spec['gclient_spec'])
118 self.run_gclient('sync') 105 self.run_gclient('sync')
119 106
120 # Configure git. 107 # Configure git.
121 wd = os.path.join(self.base, self.root) 108 wd = os.path.join(self.base, self.root)
122 if self.dryrun: 109 if self.dryrun:
123 print 'cd %s' % wd 110 print 'cd %s' % wd
124 self.run_git( 111 self.run_git(
125 'submodule', 'foreach', 112 'submodule', 'foreach',
126 'git config -f $toplevel/.git/config submodule.$name.ignore all', 113 'git config -f $toplevel/.git/config submodule.$name.ignore all',
127 cwd=wd) 114 cwd=wd)
128 self.run_git('config', 'diff.ignoreSubmodules', 'all', cwd=wd) 115 self.run_git('config', 'diff.ignoreSubmodules', 'all', cwd=wd)
129 116
117
118 class GclientGitSvnCheckout(GclientGitCheckout, SvnCheckout):
119
120 def __init__(self, dryrun, spec, root):
121 super(GclientGitSvnCheckout, self).__init__(dryrun, spec, root)
122 assert 'svn_url' in self.spec
123 assert 'svn_branch' in self.spec
124 assert 'svn_ref' in self.spec
125
126 def init(self):
127 # Ensure we are authenticated with subversion for all submodules.
128 git_svn_dirs = json.loads(self.spec.get('submodule_git_svn_spec', '{}'))
129 git_svn_dirs.update({self.root: self.spec})
130 for _, svn_spec in git_svn_dirs.iteritems():
131 try:
132 self.run_svn('ls', '--non-interactive', svn_spec['svn_url'])
133 except subprocess.CalledProcessError:
134 print 'Please run `svn ls %s`' % svn_spec['svn_url']
135 return 1
136
137 super(GclientGitSvnCheckout, self).init()
138
130 # Configure git-svn. 139 # Configure git-svn.
131 for path, svn_spec in git_svn_dirs.iteritems(): 140 for path, svn_spec in git_svn_dirs.iteritems():
132 real_path = os.path.join(*path.split('/')) 141 real_path = os.path.join(*path.split('/'))
133 if real_path != self.root: 142 if real_path != self.root:
134 real_path = os.path.join(self.root, real_path) 143 real_path = os.path.join(self.root, real_path)
135 wd = os.path.join(self.base, real_path) 144 wd = os.path.join(self.base, real_path)
136 if self.dryrun: 145 if self.dryrun:
137 print 'cd %s' % wd 146 print 'cd %s' % wd
138 self.run_git('svn', 'init', '--prefix=origin/', '-T', 147 self.run_git('svn', 'init', '--prefix=origin/', '-T',
139 svn_spec['svn_branch'], svn_spec['svn_url'], cwd=wd) 148 svn_spec['svn_branch'], svn_spec['svn_url'], cwd=wd)
140 self.run_git('config', '--replace', 'svn-remote.svn.fetch', 149 self.run_git('config', '--replace', 'svn-remote.svn.fetch',
141 svn_spec['svn_branch'] + ':refs/remotes/origin/' + 150 svn_spec['svn_branch'] + ':refs/remotes/origin/' +
142 svn_spec['svn_ref'], cwd=wd) 151 svn_spec['svn_ref'], cwd=wd)
143 self.run_git('svn', 'fetch', cwd=wd) 152 self.run_git('svn', 'fetch', cwd=wd)
144 153
145 154
146 155
147 CHECKOUT_TYPE_MAP = { 156 CHECKOUT_TYPE_MAP = {
148 'gclient': GclientCheckout, 157 'gclient': GclientCheckout,
158 'gclient_git': GclientGitCheckout,
149 'gclient_git_svn': GclientGitSvnCheckout, 159 'gclient_git_svn': GclientGitSvnCheckout,
150 'git': GitCheckout, 160 'git': GitCheckout,
151 } 161 }
152 162
153 163
154 def CheckoutFactory(type_name, dryrun, spec, root): 164 def CheckoutFactory(type_name, dryrun, spec, root):
155 """Factory to build Checkout class instances.""" 165 """Factory to build Checkout class instances."""
156 class_ = CHECKOUT_TYPE_MAP.get(type_name) 166 class_ = CHECKOUT_TYPE_MAP.get(type_name)
157 if not class_: 167 if not class_:
158 raise KeyError('unrecognized checkout type: %s' % type_name) 168 raise KeyError('unrecognized checkout type: %s' % type_name)
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 254
245 255
246 def main(): 256 def main():
247 dryrun, recipe, props = handle_args(sys.argv) 257 dryrun, recipe, props = handle_args(sys.argv)
248 spec, root = run_recipe_fetch(recipe, props) 258 spec, root = run_recipe_fetch(recipe, props)
249 return run(dryrun, spec, root) 259 return run(dryrun, spec, root)
250 260
251 261
252 if __name__ == '__main__': 262 if __name__ == '__main__':
253 sys.exit(main()) 263 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | recipes/chromium.py » ('j') | recipes/chromium.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698