Index: gclient-new-workdir.py |
diff --git a/gclient-new-workdir.py b/gclient-new-workdir.py |
index 91ba35b9efbd224ee6995770e1ccc06be0b7cd5f..6c241c50b204480a10c1ed14bee441a1e41b774b 100755 |
--- a/gclient-new-workdir.py |
+++ b/gclient-new-workdir.py |
@@ -11,75 +11,93 @@ import os |
import shutil |
import subprocess |
import sys |
+import textwrap |
-def parse_options(argv): |
- assert not sys.platform.startswith("win") |
+def print_err(msg): |
+ print >> sys.stderr, msg |
- if len(argv) != 3: |
- print("usage: gclient-new-workdir.py <repository> <new_workdir>") |
- sys.exit(1) |
- repository = argv[1] |
- new_workdir = argv[2] |
+def usage(msg=None): |
+ |
+ if msg is not None: |
+ print_err('\n' + textwrap.dedent(msg) + '\n') |
+ usage_msg = 'Run without arguments to get usage help.' |
iannucci
2013/11/14 01:45:30
oh, hm... I would just remove this line and the el
pgervais
2013/11/15 19:38:00
I did that because when you screw up, what you see
|
+ else: |
+ usage_msg = '''\ |
+ usage: %s <repository> <new_workdir> |
+ |
+ Clone an existing gclient directory, taking care of all sub-repositories |
+ Works similarly to 'git new-workdir'. |
+ |
+ <repository> should contain a .gclient file |
+ <new_workdir> must not exist |
+ ''' % os.path.basename(sys.argv[0]) |
+ |
+ print_err(textwrap.dedent(usage_msg)) |
+ sys.exit(1) |
+ |
+ |
+def parse_options(): |
+ if sys.platform == 'win32': |
+ usage('This script cannot run on Windows because it uses symlinks.') |
+ |
+ if len(sys.argv) != 3: |
+ usage() |
+ |
+ repository = os.path.abspath(sys.argv[1]) |
+ new_workdir = sys.argv[2] |
if not os.path.exists(repository): |
- print("Repository does not exist: " + repository) |
- sys.exit(1) |
+ usage('Repository does not exist: ' + repository) |
if os.path.exists(new_workdir): |
- print("New workdir already exists: " + new_workdir) |
- sys.exit(1) |
+ usage('New workdir already exists: ' + new_workdir) |
return repository, new_workdir |
-def main(argv): |
- repository, new_workdir = parse_options(argv) |
+def main(): |
+ repository, new_workdir = parse_options() |
- gclient = os.path.join(repository, ".gclient") |
+ gclient = os.path.join(repository, '.gclient') |
if not os.path.exists(gclient): |
- print("No .gclient file: " + gclient) |
+ print_err('No .gclient file: ' + gclient) |
- gclient_entries = os.path.join(repository, ".gclient_entries") |
- if not os.path.exists(gclient_entries): |
- print("No .gclient_entries file: " + gclient_entries) |
- |
- os.mkdir(new_workdir) |
- os.symlink(gclient, os.path.join(new_workdir, ".gclient")) |
- os.symlink(gclient_entries, os.path.join(new_workdir, ".gclient_entries")) |
+ os.makedirs(new_workdir) |
+ os.symlink(gclient, os.path.join(new_workdir, '.gclient')) |
for root, dirs, _ in os.walk(repository): |
- if ".git" in dirs: |
+ if '.git' in dirs: |
workdir = root.replace(repository, new_workdir, 1) |
- make_workdir(os.path.join(root, ".git"), |
- os.path.join(workdir, ".git")) |
+ make_workdir(os.path.join(root, '.git'), |
+ os.path.join(workdir, '.git')) |
def make_workdir(repository, new_workdir): |
- print("Creating: " + new_workdir) |
+ print('Creating: ' + new_workdir) |
os.makedirs(new_workdir) |
GIT_DIRECTORY_WHITELIST = [ |
- "config", |
- "info", |
- "hooks", |
- "logs/refs", |
- "objects", |
- "packed-refs", |
- "refs", |
- "remotes", |
- "rr-cache", |
- "svn" |
+ 'config', |
+ 'info', |
+ 'hooks', |
+ 'logs/refs', |
+ 'objects', |
+ 'packed-refs', |
+ 'refs', |
+ 'remotes', |
+ 'rr-cache', |
+ 'svn' |
] |
for entry in GIT_DIRECTORY_WHITELIST: |
make_symlink(repository, new_workdir, entry) |
- shutil.copy2(os.path.join(repository, "HEAD"), |
- os.path.join(new_workdir, "HEAD")) |
- subprocess.check_call(["git", "checkout", "-f"], |
- cwd=new_workdir.rstrip(".git")) |
+ shutil.copy2(os.path.join(repository, 'HEAD'), |
+ os.path.join(new_workdir, 'HEAD')) |
+ subprocess.check_call(['git', 'checkout', '-f'], |
+ cwd=new_workdir.rstrip('.git')) |
def make_symlink(repository, new_workdir, link): |
@@ -92,4 +110,4 @@ def make_symlink(repository, new_workdir, link): |
if __name__ == '__main__': |
- sys.exit(main(sys.argv)) |
+ sys.exit(main()) |