summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--git_command.py25
-rw-r--r--project.py9
2 files changed, 27 insertions, 7 deletions
diff --git a/git_command.py b/git_command.py
index 95db91f2..5d73c281 100644
--- a/git_command.py
+++ b/git_command.py
@@ -169,7 +169,8 @@ class GitCommand(object):
169 disable_editor=False, 169 disable_editor=False,
170 ssh_proxy=None, 170 ssh_proxy=None,
171 cwd=None, 171 cwd=None,
172 gitdir=None): 172 gitdir=None,
173 objdir=None):
173 env = self._GetBasicEnv() 174 env = self._GetBasicEnv()
174 175
175 if disable_editor: 176 if disable_editor:
@@ -194,13 +195,24 @@ class GitCommand(object):
194 cwd = project.worktree 195 cwd = project.worktree
195 if not gitdir: 196 if not gitdir:
196 gitdir = project.gitdir 197 gitdir = project.gitdir
198 # Git on Windows wants its paths only using / for reliability.
199 if platform_utils.isWindows():
200 if objdir:
201 objdir = objdir.replace('\\', '/')
202 if gitdir:
203 gitdir = gitdir.replace('\\', '/')
204
205 if objdir:
206 # Set to the place we want to save the objects.
207 env['GIT_OBJECT_DIRECTORY'] = objdir
208 if gitdir:
209 # Allow git to search the original place in case of local or unique refs
210 # that git will attempt to resolve even if we aren't fetching them.
211 env['GIT_ALTERNATE_OBJECT_DIRECTORIES'] = gitdir + '/objects'
197 212
198 command = [GIT] 213 command = [GIT]
199 if bare: 214 if bare:
200 if gitdir: 215 if gitdir:
201 # Git on Windows wants its paths only using / for reliability.
202 if platform_utils.isWindows():
203 gitdir = gitdir.replace('\\', '/')
204 env[GIT_DIR] = gitdir 216 env[GIT_DIR] = gitdir
205 cwd = None 217 cwd = None
206 command.append(cmdv[0]) 218 command.append(cmdv[0])
@@ -234,6 +246,11 @@ class GitCommand(object):
234 dbg += ': export GIT_DIR=%s\n' % env[GIT_DIR] 246 dbg += ': export GIT_DIR=%s\n' % env[GIT_DIR]
235 LAST_GITDIR = env[GIT_DIR] 247 LAST_GITDIR = env[GIT_DIR]
236 248
249 if 'GIT_OBJECT_DIRECTORY' in env:
250 dbg += ': export GIT_OBJECT_DIRECTORY=%s\n' % env['GIT_OBJECT_DIRECTORY']
251 if 'GIT_ALTERNATE_OBJECT_DIRECTORIES' in env:
252 dbg += ': export GIT_ALTERNATE_OBJECT_DIRECTORIES=%s\n' % env['GIT_ALTERNATE_OBJECT_DIRECTORIES']
253
237 dbg += ': ' 254 dbg += ': '
238 dbg += ' '.join(command) 255 dbg += ' '.join(command)
239 if stdin == subprocess.PIPE: 256 if stdin == subprocess.PIPE:
diff --git a/project.py b/project.py
index 8598de36..b70f6d41 100644
--- a/project.py
+++ b/project.py
@@ -2192,8 +2192,10 @@ class Project(object):
2192 retry_cur_sleep = retry_sleep_initial_sec 2192 retry_cur_sleep = retry_sleep_initial_sec
2193 ok = prune_tried = False 2193 ok = prune_tried = False
2194 for try_n in range(retry_fetches): 2194 for try_n in range(retry_fetches):
2195 gitcmd = GitCommand(self, cmd, bare=True, ssh_proxy=ssh_proxy, 2195 gitcmd = GitCommand(
2196 merge_output=True, capture_stdout=quiet or bool(output_redir)) 2196 self, cmd, bare=True, objdir=os.path.join(self.objdir, 'objects'),
2197 ssh_proxy=ssh_proxy,
2198 merge_output=True, capture_stdout=quiet or bool(output_redir))
2197 if gitcmd.stdout and not quiet and output_redir: 2199 if gitcmd.stdout and not quiet and output_redir:
2198 output_redir.write(gitcmd.stdout) 2200 output_redir.write(gitcmd.stdout)
2199 ret = gitcmd.Wait() 2201 ret = gitcmd.Wait()
@@ -2309,7 +2311,8 @@ class Project(object):
2309 cmd.append(str(f)) 2311 cmd.append(str(f))
2310 cmd.append('+refs/tags/*:refs/tags/*') 2312 cmd.append('+refs/tags/*:refs/tags/*')
2311 2313
2312 ok = GitCommand(self, cmd, bare=True).Wait() == 0 2314 ok = GitCommand(
2315 self, cmd, bare=True, objdir=os.path.join(self.objdir, 'objects')).Wait() == 0
2313 platform_utils.remove(bundle_dst, missing_ok=True) 2316 platform_utils.remove(bundle_dst, missing_ok=True)
2314 platform_utils.remove(bundle_tmp, missing_ok=True) 2317 platform_utils.remove(bundle_tmp, missing_ok=True)
2315 return ok 2318 return ok