aboutsummaryrefslogtreecommitdiff
path: root/gitosis/repository.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitosis/repository.py')
-rw-r--r--gitosis/repository.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/gitosis/repository.py b/gitosis/repository.py
index 764c980..9558494 100644
--- a/gitosis/repository.py
+++ b/gitosis/repository.py
@@ -1,4 +1,5 @@
import os
+import re
import subprocess
from gitosis import util
@@ -119,3 +120,28 @@ def export(git_dir, path):
)
if returncode != 0:
raise GitCheckoutIndexError('exit status %d' % returncode)
+
+class GitHasInitialCommitError(GitError):
+ """Check for initial commit failed"""
+
+class GitRevParseError(GitError):
+ """rev-parse failed"""
+
+def has_initial_commit(git_dir):
+ child = subprocess.Popen(
+ args=['git', 'rev-parse', 'HEAD'],
+ cwd=git_dir,
+ stdout=subprocess.PIPE,
+ close_fds=True,
+ env=dict(GIT_DIR='.'),
+ )
+ got = child.stdout.read()
+ returncode = child.wait()
+ if returncode != 0:
+ raise GitRevParseError('exit status %d' % returncode)
+ if got == 'HEAD\n':
+ return False
+ elif re.match('^[0-9a-f]{40}\n$', got):
+ return True
+ else:
+ raise GitHasInitialCommitError('Unknown git HEAD: %r' % got)