77import os
88from git import Repo
99from unittest import TestCase
10+ import tempfile
11+ import shutil
1012
1113GIT_REPO = os .path .dirname (os .path .dirname (os .path .dirname (__file__ )))
1214
@@ -75,35 +77,41 @@ def case(self, rw_repo)
7577 heads, generally operations that do not need a working tree.
7678 """
7779 def bare_repo_creator (self ):
78- rw_repo = None
80+ repo_dir = tempfile .mktemp ("bare_repo" )
81+ rw_repo = self .rorepo .clone (repo_dir , shared = True , bare = True )
7982 try :
8083 return func (self , rw_repo )
8184 finally :
82- pass
85+ shutil . rmtree ( repo_dir )
8386 # END cleanup
8487 # END bare repo creator
8588 bare_repo_creator .__name__ = func .__name__
8689 return bare_repo_creator
8790
88- def with_rw_repo (func , working_tree_ref = '0.1.6' ):
91+ def with_rw_repo (working_tree_ref = '0.1.6' ):
8992 """
9093 Same as with_bare_repo, but clones the rorepo as non-bare repository, checking
9194 out the working tree at the given working_tree_ref.
9295
9396 This repository type is more costly due to the working copy checkout.
9497 """
95- def repo_creator (self ):
96- rw_repo = None
97- try :
98- return func (self , rw_repo )
99- finally :
100- pass
101- # END cleanup
102- # END bare repo creator
103- repo_creator .__name__ = func .__name__
104- return repo_creator
105-
106- def with_rw_and_rw_remote_repo (func ):
98+ def argument_passer (func ):
99+ def repo_creator (self ):
100+ repo_dir = tempfile .mktemp ("non_bare_repo" )
101+ rw_repo = self .rorepo .clone (repo_dir , shared = True , bare = False , n = True )
102+ rw_repo .git .checkout (working_tree_ref )
103+ try :
104+ return func (self , rw_repo )
105+ finally :
106+ shutil .rmtree (repo_dir )
107+ # END cleanup
108+ # END rw repo creator
109+ repo_creator .__name__ = func .__name__
110+ return repo_creator
111+ # END argument passer
112+ return argument_passer
113+
114+ def with_rw_and_rw_remote_repo (working_tree_ref = '0.1.6' ):
107115 """
108116 Same as with_rw_repo, but also provides a writable remote repository from which the
109117 rw_repo has been forked. The remote repository was cloned as bare repository from
@@ -117,17 +125,27 @@ def case(self, rw_repo, rw_remote_repo)
117125
118126 This setup allows you to test push and pull scenarios and hooks nicely.
119127 """
120- def remote_repo_creator (self ):
121- rw_repo = None
122- rw_remote_repo = None
123- try :
124- return func (self , rw_repo , rw_remote_repo )
125- finally :
126- pass
127- # END cleanup
128- # END bare repo creator
129- remote_repo_creator .__name__ = func .__name__
130- return remote_repo_creator
128+ def argument_passer (func ):
129+ def remote_repo_creator (self ):
130+ remote_repo_dir = tempfile .mktemp ("remote_repo" )
131+ repo_dir = tempfile .mktemp ("remote_clone_non_bare_repo" )
132+
133+ rw_remote_repo = self .rorepo .clone (remote_repo_dir , shared = True , bare = True )
134+ rw_repo = rw_remote_repo .clone (repo_dir , shared = True , bare = False , n = True ) # recursive alternates info ?
135+ rw_repo .git .checkout (working_tree_ref )
136+ try :
137+ return func (self , rw_repo , rw_remote_repo )
138+ finally :
139+ shutil .rmtree (repo_dir )
140+ shutil .rmtree (remote_repo_dir )
141+ # END cleanup
142+ # END bare repo creator
143+ remote_repo_creator .__name__ = func .__name__
144+ return remote_repo_creator
145+ # END remote repo creator
146+ # END argument parsser
147+
148+ return argument_passer
131149
132150
133151class TestBase (TestCase ):
0 commit comments