Index: tools/git-sync-deps |
diff --git a/tools/git-sync-deps b/tools/git-sync-deps |
index 7a305f493bd8894be0a9a329ac1d9bd2db6949e0..8edc0c36c71ea9dfb85a90f11d1ad374235e2ec7 100755 |
--- a/tools/git-sync-deps |
+++ b/tools/git-sync-deps |
@@ -64,6 +64,23 @@ def git_repository_sync_is_disabled(git, directory): |
return False |
+def is_git_toplevel(git, directory): |
+ """Return true iff the directory is the top level of a Git repository. |
+ |
+ Args: |
+ git (string) the git executable |
+ |
+ directory (string) the path into which the repository |
+ is expected to be checked out. |
+ """ |
+ try: |
+ toplevel = subprocess.check_output( |
+ [git, 'rev-parse', '--show-toplevel'], cwd=directory).strip() |
+ return os.path.abspath(directory) == os.path.abspath(toplevel) |
+ except subprocess.CalledProcessError: |
+ return False |
+ |
+ |
def git_checkout_to_directory(git, repo, checkoutable, directory, verbose): |
"""Checkout (and clone if needed) a Git repository. |
@@ -87,6 +104,12 @@ def git_checkout_to_directory(git, repo, checkoutable, directory, verbose): |
subprocess.check_call( |
[git, 'clone', '--quiet', repo, directory]) |
+ if not is_git_toplevel(git, directory): |
+ # if the directory exists, but isn't a git repo, you will modify |
+ # the parent repostory, which isn't what you want. |
+ sys.stdout.write('%s\n IS NOT TOP-LEVEL GIT DIRECTORY.\n' % directory) |
+ return |
+ |
# Check to see if this repo is disabled. Quick return. |
if git_repository_sync_is_disabled(git, directory): |
sys.stdout.write('%s\n SYNC IS DISABLED.\n' % directory) |