git-sync-deps verifies that directory is a top-level git directory.

NOTRY=true
R=mtklein@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/245503003

git-svn-id: http://skia.googlecode.com/svn/trunk@14285 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/git-sync-deps b/tools/git-sync-deps
index 7a305f4..8edc0c3 100755
--- a/tools/git-sync-deps
+++ b/tools/git-sync-deps
@@ -64,6 +64,23 @@
     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 @@
     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)