From aa529dcd65c50d5512a3370c33195e556a247753 Mon Sep 17 00:00:00 2001 From: Tommi Virtanen Date: Thu, 15 Nov 2007 17:17:20 +0200 Subject: Make repository.export pass through environment to git. --- gitosis/repository.py | 10 ++++++--- gitosis/test/test_repository.py | 49 +++++++++++++++++++++++++++++++++++++++++ 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 ', + 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( -- cgit v1.2.3