Chromium Code Reviews| 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()) |