Make repository.has_initial_commit pass through environment to git.

This commit is contained in:
Tommi Virtanen 2007-11-15 17:20:39 +02:00
parent aa529dcd65
commit 8e488ad02f
2 changed files with 44 additions and 2 deletions

View file

@ -143,11 +143,15 @@ class GitRevParseError(GitError):
def has_initial_commit(git_dir): def has_initial_commit(git_dir):
child = subprocess.Popen( child = subprocess.Popen(
args=['git', 'rev-parse', 'HEAD'], args=[
'git',
'--git-dir=.',
'rev-parse',
'HEAD',
],
cwd=git_dir, cwd=git_dir,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
close_fds=True, close_fds=True,
env=dict(GIT_DIR='.'),
) )
got = child.stdout.read() got = child.stdout.read()
returncode = child.wait() returncode = child.wait()

View file

@ -269,3 +269,41 @@ def test_has_initial_commit_yes():
got = repository.has_initial_commit(git_dir=tmp) got = repository.has_initial_commit(git_dir=tmp)
eq(got, True) eq(got, True)
def test_has_initial_commit_environment():
tmp = maketemp()
git_dir = os.path.join(tmp, 'repo.git')
mockbindir = os.path.join(tmp, 'mockbin')
os.mkdir(mockbindir)
mockgit = os.path.join(mockbindir, 'git')
writeFile(mockgit, '''\
#!/bin/sh
set -e
# git wrapper for gitosis unit tests
printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie"
# strip away my special PATH insert so system git will be found
PATH="${PATH#*:}"
exec git "$@"
''')
os.chmod(mockgit, 0755)
repository.init(path=tmp)
repository.fast_import(
git_dir=tmp,
commit_msg='fakecommit',
committer='John Doe <jdoe@example.com>',
files=[],
)
magic_cookie = '%d' % random.randint(1, 100000)
good_path = os.environ['PATH']
try:
os.environ['PATH'] = '%s:%s' % (mockbindir, good_path)
os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie
got = repository.has_initial_commit(git_dir=tmp)
finally:
os.environ['PATH'] = good_path
os.environ.pop('GITOSIS_UNITTEST_COOKIE', None)
eq(got, True)
got = readFile(os.path.join(tmp, 'cookie'))
eq(got, magic_cookie)