OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # | 2 # |
3 # Copyright 2008 Google Inc. All Rights Reserved. | 3 # Copyright 2008 Google Inc. All Rights Reserved. |
4 # | 4 # |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
8 # | 8 # |
9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
10 # | 10 # |
(...skipping 21 matching lines...) Expand all Loading... |
32 Python script defining 'entries', a list of the names | 32 Python script defining 'entries', a list of the names |
33 of all modules in the client | 33 of all modules in the client |
34 <module>/DEPS : Python script defining var 'deps' as a map from each requisite | 34 <module>/DEPS : Python script defining var 'deps' as a map from each requisite |
35 submodule name to a URL where it can be found (via one SCM) | 35 submodule name to a URL where it can be found (via one SCM) |
36 | 36 |
37 Hooks | 37 Hooks |
38 .gclient and DEPS files may optionally contain a list named "hooks" to | 38 .gclient and DEPS files may optionally contain a list named "hooks" to |
39 allow custom actions to be performed based on files that have changed in the | 39 allow custom actions to be performed based on files that have changed in the |
40 working copy as a result of a "sync"/"update" or "revert" operation. This | 40 working copy as a result of a "sync"/"update" or "revert" operation. This |
41 could be prevented by using --nohooks (hooks run by default). Hooks can also | 41 could be prevented by using --nohooks (hooks run by default). Hooks can also |
42 be run based on what files have been modified in the working copy | 42 be forced to run with the "runhooks" operation. If "sync" is run with |
43 with the "runhooks" operation. If any of these operation are run with | |
44 --force, all known hooks will run regardless of the state of the working | 43 --force, all known hooks will run regardless of the state of the working |
45 copy. | 44 copy. |
46 | 45 |
47 Each item in a "hooks" list is a dict, containing these two keys: | 46 Each item in a "hooks" list is a dict, containing these two keys: |
48 "pattern" The associated value is a string containing a regular | 47 "pattern" The associated value is a string containing a regular |
49 expression. When a file whose pathname matches the expression | 48 expression. When a file whose pathname matches the expression |
50 is checked out, updated, or reverted, the hook's "action" will | 49 is checked out, updated, or reverted, the hook's "action" will |
51 run. | 50 run. |
52 "action" A list describing a command to run along with its arguments, if | 51 "action" A list describing a command to run along with its arguments, if |
53 any. An action command will run at most one time per gclient | 52 any. An action command will run at most one time per gclient |
54 invocation, regardless of how many files matched the pattern. | 53 invocation, regardless of how many files matched the pattern. |
55 The action is executed in the same directory as the .gclient | 54 The action is executed in the same directory as the .gclient |
56 file. If the first item in the list is the string "python", | 55 file. If the first item in the list is the string "python", |
57 the current Python interpreter (sys.executable) will be used | 56 the current Python interpreter (sys.executable) will be used |
58 to run the command. If the list contains string "$matching_files" | 57 to run the command. If the list contains string "$matching_files" |
59 it will be removed from the list and the list will be extended | 58 it will be removed from the list and the list will be extended |
60 by the list of matching files. | 59 by the list of matching files. |
61 | 60 |
62 Example: | 61 Example: |
63 hooks = [ | 62 hooks = [ |
64 { "pattern": "\\.(gif|jpe?g|pr0n|png)$", | 63 { "pattern": "\\.(gif|jpe?g|pr0n|png)$", |
65 "action": ["python", "image_indexer.py", "--all"]}, | 64 "action": ["python", "image_indexer.py", "--all"]}, |
66 ] | 65 ] |
67 """ | 66 """ |
68 | 67 |
69 __author__ = "darinf@gmail.com (Darin Fisher)" | 68 __author__ = "darinf@gmail.com (Darin Fisher)" |
70 __version__ = "0.3.2" | 69 __version__ = "0.3.3" |
71 | 70 |
72 import errno | 71 import errno |
73 import optparse | 72 import optparse |
74 import os | 73 import os |
75 import re | 74 import re |
76 import stat | 75 import stat |
77 import subprocess | 76 import subprocess |
78 import sys | 77 import sys |
79 import time | 78 import time |
80 import urlparse | 79 import urlparse |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 "update": GENERIC_UPDATE_USAGE_TEXT % {"cmd": "update", "alias": "sync"}, | 215 "update": GENERIC_UPDATE_USAGE_TEXT % {"cmd": "update", "alias": "sync"}, |
217 "help": """Describe the usage of this program or its subcommands. | 216 "help": """Describe the usage of this program or its subcommands. |
218 | 217 |
219 usage: help [options] [subcommand] | 218 usage: help [options] [subcommand] |
220 | 219 |
221 Valid options: | 220 Valid options: |
222 --verbose : output additional diagnostics | 221 --verbose : output additional diagnostics |
223 """, | 222 """, |
224 "runhooks": | 223 "runhooks": |
225 """Runs hooks for files that have been modified in the local working copy, | 224 """Runs hooks for files that have been modified in the local working copy, |
226 according to 'svn status'. | 225 according to 'svn status'. Implies --force. |
227 | 226 |
228 usage: runhooks [options] | 227 usage: runhooks [options] |
229 | 228 |
230 Valid options: | 229 Valid options: |
231 --force : runs all known hooks, regardless of the working | |
232 copy status | |
233 --verbose : output additional diagnostics | 230 --verbose : output additional diagnostics |
234 """, | 231 """, |
235 "revinfo": | 232 "revinfo": |
236 """Outputs source path, server URL and revision information for every | 233 """Outputs source path, server URL and revision information for every |
237 dependency in all solutions (no local checkout required). | 234 dependency in all solutions (no local checkout required). |
238 | 235 |
239 usage: revinfo [options] | 236 usage: revinfo [options] |
240 """, | 237 """, |
241 } | 238 } |
242 | 239 |
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1692 Raises: | 1689 Raises: |
1693 Error: if client isn't configured properly. | 1690 Error: if client isn't configured properly. |
1694 """ | 1691 """ |
1695 client = GClient.LoadCurrentConfig(options) | 1692 client = GClient.LoadCurrentConfig(options) |
1696 if not client: | 1693 if not client: |
1697 raise Error("client not configured; see 'gclient config'") | 1694 raise Error("client not configured; see 'gclient config'") |
1698 if options.verbose: | 1695 if options.verbose: |
1699 # Print out the .gclient file. This is longer than if we just printed the | 1696 # Print out the .gclient file. This is longer than if we just printed the |
1700 # client dict, but more legible, and it might contain helpful comments. | 1697 # client dict, but more legible, and it might contain helpful comments. |
1701 print(client.ConfigContent()) | 1698 print(client.ConfigContent()) |
| 1699 options.force = True |
1702 return client.RunOnDeps('runhooks', args) | 1700 return client.RunOnDeps('runhooks', args) |
1703 | 1701 |
1704 | 1702 |
1705 def DoRevInfo(options, args): | 1703 def DoRevInfo(options, args): |
1706 """Handle the revinfo subcommand. | 1704 """Handle the revinfo subcommand. |
1707 | 1705 |
1708 Raises: | 1706 Raises: |
1709 Error: if client isn't configured properly. | 1707 Error: if client isn't configured properly. |
1710 """ | 1708 """ |
1711 client = GClient.LoadCurrentConfig(options) | 1709 client = GClient.LoadCurrentConfig(options) |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1811 | 1809 |
1812 if "__main__" == __name__: | 1810 if "__main__" == __name__: |
1813 try: | 1811 try: |
1814 result = Main(sys.argv) | 1812 result = Main(sys.argv) |
1815 except Error, e: | 1813 except Error, e: |
1816 print >> sys.stderr, "Error: %s" % str(e) | 1814 print >> sys.stderr, "Error: %s" % str(e) |
1817 result = 1 | 1815 result = 1 |
1818 sys.exit(result) | 1816 sys.exit(result) |
1819 | 1817 |
1820 # vim: ts=2:sw=2:tw=80:et: | 1818 # vim: ts=2:sw=2:tw=80:et: |
OLD | NEW |