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

Side by Side Diff: support/chromite_wrapper

Issue 12094111: chromite_wrapper: Add support for gclient checkouts. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 7 years, 10 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 | no next file » | 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/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium OS 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 """Wrapper for chromite tools. 6 """Wrapper for chromite tools.
7 7
8 The script is intend to be symlinked to any number of chromite tools, attempts 8 The script is intend to be symlinked to any number of chromite tools, attempts
9 to find the path for chromite, and hands off to the right tool via exec if 9 to find the path for chromite, and hands off to the right tool via exec if
10 possible. 10 possible.
(...skipping 11 matching lines...) Expand all
22 import errno 22 import errno
23 import os 23 import os
24 import sys 24 import sys
25 25
26 # Due to historical reasons, and the fact depot_tools ToT is used by older 26 # Due to historical reasons, and the fact depot_tools ToT is used by older
27 # factory branches (lacking chromite script cleanups), note we have to 27 # factory branches (lacking chromite script cleanups), note we have to
28 # fallback to some odd import locations. This is the only reason for the 28 # fallback to some odd import locations. This is the only reason for the
29 # fallback code- any/all new scripts symlinked to this script *must* exist 29 # fallback code- any/all new scripts symlinked to this script *must* exist
30 # in chromite/bin/ . 30 # in chromite/bin/ .
31 31
32 def _FindRoot(path): 32 def _FindChromite(path):
33 """Find the root of a repo checkout""" 33 """Find the chromite dir in a repo or gclient checkout."""
34 path = os.path.abspath(path) 34 path = os.path.abspath(path)
35 # Depending on the checkout type (whether repo chromeos or gclient chrome)
36 # Chromite lives in a different location.
37 roots = (
38 ('.repo', 'chromite/.git'),
39 ('.gclient', 'src/third_party/chromite/.git'),
40 )
41
35 while path != '/': 42 while path != '/':
36 # Look for the chromite repository itself- it's always been at the root 43 for root, chromite_git_dir in roots:
37 # of a repo checkout. 44 if all(os.path.exists(os.path.join(path, x))
38 if all(os.path.exists(os.path.join(path, x)) 45 for x in [root, chromite_git_dir]):
39 for x in ['.repo', 'chromite/.git']): 46 return os.path.dirname(os.path.join(path, chromite_git_dir))
40 return path
41 path = os.path.dirname(path) 47 path = os.path.dirname(path)
42 return None 48 return None
43 49
44 50
45 def _MissingErrorOut(target): 51 def _MissingErrorOut(target):
46 sys.stderr.write( 52 sys.stderr.write(
47 """ERROR: Couldn't find the chromite tool %s. 53 """ERROR: Couldn't find the chromite tool %s.
48 54
49 Please change to a directory inside your Chromium OS source tree 55 Please change to a directory inside your Chromium OS source tree
50 and retry. If you need to setup a Chromium OS source tree, see 56 and retry. If you need to setup a Chromium OS source tree, see
51 http://www.chromium.org/chromium-os/developer-guide 57 http://www.chromium.org/chromium-os/developer-guide
52 """ % target) 58 """ % target)
53 return 127 59 return 127
54 60
55 61
56 def main(): 62 def main():
57 root = _FindRoot(os.getcwd()) 63 chromite_dir = _FindChromite(os.getcwd())
58 target = os.path.basename(sys.argv[0]) 64 target = os.path.basename(sys.argv[0])
59 if root is None: 65 if chromite_dir is None:
60 return _MissingErrorOut(target) 66 return _MissingErrorOut(target)
61 67
62 path = os.path.join(root, 'chromite/bin', target) 68 path = os.path.join(chromite_dir, 'bin', target)
63 try: 69 try:
64 os.execv(path, [path] + sys.argv[1:]) 70 os.execv(path, [path] + sys.argv[1:])
65 except EnvironmentError, e: 71 except EnvironmentError, e:
66 if e.errno not in (errno.ENOENT, errno.EPERM): 72 if e.errno not in (errno.ENOENT, errno.EPERM):
67 raise 73 raise
68 74
69 # Reaching here means it's either a bad target, or we're working against 75 # Reaching here means it's either a bad target, or we're working against
70 # an old (pre 6be2efcf5bb575b03862113eec097c44d8d7f93e) revision of 76 # an old (pre 6be2efcf5bb575b03862113eec097c44d8d7f93e) revision of
71 # chromite. Fallback to trying to import it; this code works at least as 77 # chromite. Fallback to trying to import it; this code works at least as
72 # far back as branch 0.11.241.B; likely further. 78 # far back as branch 0.11.241.B; likely further.
73 79
74 if target == 'cbuildbot': 80 if target == 'cbuildbot':
75 target = 'chromite.buildbot.cbuildbot' 81 target = 'chromite.buildbot.cbuildbot'
76 else: 82 else:
77 target = 'chromite.bin.%s' % (target,) 83 target = 'chromite.bin.%s' % (target,)
78 84
79 # Adjust the path importation so we can import our our target. 85 # Adjust the path importation so we can import our our target.
80 sys.path.insert(0, root) 86 sys.path.insert(0, os.path.dirname(chromite_dir))
81 87
82 try: 88 try:
83 module = __import__(target, fromlist=['main']) 89 module = __import__(target, fromlist=['main'])
84 except ImportError: 90 except ImportError:
85 return _MissingErrorOut(target) 91 return _MissingErrorOut(target)
86 return module.main() 92 return module.main()
87 93
88 if __name__ == '__main__': 94 if __name__ == '__main__':
89 sys.exit(main()) 95 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698