aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommi Virtanen <tv@eagain.net>2007-11-15 17:17:20 +0200
committerTommi Virtanen <tv@eagain.net>2007-11-15 17:17:20 +0200
commitaa529dcd65c50d5512a3370c33195e556a247753 (patch)
treecff39fdcd102ca0d97c3e66fd89d1364dc940775
parentMake repository.fast_import pass through environment to git. (diff)
downloadgitosis-dakkar-aa529dcd65c50d5512a3370c33195e556a247753.tar.gz
gitosis-dakkar-aa529dcd65c50d5512a3370c33195e556a247753.tar.bz2
gitosis-dakkar-aa529dcd65c50d5512a3370c33195e556a247753.zip
Make repository.export pass through environment to git.
-rw-r--r--gitosis/repository.py10
-rw-r--r--gitosis/test/test_repository.py49
2 files changed, 56 insertions, 3 deletions
diff --git a/gitosis/repository.py b/gitosis/repository.py
index 6647408..a97c1aa 100644
--- a/gitosis/repository.py
+++ b/gitosis/repository.py
@@ -111,22 +111,26 @@ def export(git_dir, path):
# extract to the subdirectory
path = os.path.join(path, '')
returncode = subprocess.call(
- args=['git', 'read-tree', 'HEAD'],
+ args=[
+ 'git',
+ '--git-dir=%s' % git_dir,
+ 'read-tree',
+ 'HEAD',
+ ],
close_fds=True,
- env=dict(GIT_DIR=git_dir),
)
if returncode != 0:
raise GitReadTreeError('exit status %d' % returncode)
returncode = subprocess.call(
args=[
'git',
+ '--git-dir=%s' % git_dir,
'checkout-index',
'-a',
'-f',
'--prefix=%s' % path,
],
close_fds=True,
- env=dict(GIT_DIR=git_dir),
)
if returncode != 0:
raise GitCheckoutIndexError('exit status %d' % returncode)
diff --git a/gitosis/test/test_repository.py b/gitosis/test/test_repository.py
index abe1b0c..3dbd3f7 100644
--- a/gitosis/test/test_repository.py
+++ b/gitosis/test/test_repository.py
@@ -194,6 +194,55 @@ Frobitz the quux and eschew obfuscation.
eq(got[6], 'Frobitz the quux and eschew obfuscation.')
eq(got[7:], [])
+def test_export_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\n' "$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=git_dir)
+ repository.fast_import(
+ git_dir=git_dir,
+ committer='John Doe <jdoe@example.com>',
+ commit_msg="""\
+Reverse the polarity of the neutron flow.
+
+Frobitz the quux and eschew obfuscation.
+""",
+ files=[
+ ('foo', 'content'),
+ ('bar/quux', 'another'),
+ ],
+ )
+ export = os.path.join(tmp, 'export')
+ 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
+ repository.export(git_dir=git_dir, path=export)
+ finally:
+ os.environ['PATH'] = good_path
+ os.environ.pop('GITOSIS_UNITTEST_COOKIE', None)
+ got = readFile(os.path.join(tmp, 'cookie'))
+ eq(
+ got,
+ # export runs git twice
+ '%s\n%s\n' % (magic_cookie, magic_cookie),
+ )
+
def test_has_initial_commit_fail_notAGitDir():
tmp = maketemp()
e = assert_raises(