Chromium Code Reviews| Index: gclient-new-workdir.py |
| diff --git a/gclient-new-workdir.py b/gclient-new-workdir.py |
| index 91ba35b9efbd224ee6995770e1ccc06be0b7cd5f..a9117712286c91e456713e01c3c4b38fdec77ee5 100755 |
| --- a/gclient-new-workdir.py |
| +++ b/gclient-new-workdir.py |
| @@ -11,24 +11,41 @@ import os |
| import shutil |
| import subprocess |
| import sys |
| +import textwrap |
| + |
| + |
| +def print_err(msg): |
| + print >> sys.stderr, msg |
| def parse_options(argv): |
| - assert not sys.platform.startswith("win") |
| + if sys.platform == 'win32': |
| + print_err( |
| + 'This script cannot run on Windows because it uses symlinks.') |
| + sys.exit(1) |
| if len(argv) != 3: |
| - print("usage: gclient-new-workdir.py <repository> <new_workdir>") |
| + 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> must be a absolute path |
| + <new_workdir> must not exist |
| + ''' % os.path.basename(argv[0]) |
| + print(textwrap.dedent(usage_msg)) |
| sys.exit(1) |
|
iannucci
2013/11/13 20:29:10
move this whole if statement body into a usage() f
pgervais
2013/11/13 23:27:54
It depends if execution of usage() is triggered by
|
| - repository = argv[1] |
| + repository = os.path.abspath(argv[1]) |
| new_workdir = argv[2] |
| if not os.path.exists(repository): |
| - print("Repository does not exist: " + repository) |
| + print_err('Repository does not exist: ' + repository) |
| sys.exit(1) |
|
iannucci
2013/11/13 20:29:10
then these can become usage(...) calls
|
| if os.path.exists(new_workdir): |
| - print("New workdir already exists: " + new_workdir) |
| + print_err('New workdir already exists: ' + new_workdir) |
| sys.exit(1) |
| return repository, new_workdir |
| @@ -37,49 +54,44 @@ def parse_options(argv): |
| def main(argv): |
| repository, new_workdir = parse_options(argv) |
| - gclient = os.path.join(repository, ".gclient") |
| + gclient = os.path.join(repository, '.gclient') |
| if not os.path.exists(gclient): |
| - print("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) |
| + print_err('No .gclient file: ' + gclient) |
| - 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')) |
|
iannucci
2013/11/13 20:29:10
I'm assuming you tried it out and this does, in fa
pgervais
2013/11/13 23:27:54
Yes it does (on gclient sync at least)
|
| 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): |