summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConley Owens <cco3@android.com>2015-07-29 18:49:12 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-07-29 18:49:12 +0000
commit7cccfb2cf0ed1ed14f6b8a5bdb36459ebcb4db5a (patch)
tree1ec849c8a652c980dee800a877d9362e633a2d57
parent57f43f49448a9eb255eb2452e902d3f26e77aca3 (diff)
parentb1a07b8276c02894ae1901d186d916bde2693f05 (diff)
downloadgit-repo-7cccfb2cf0ed1ed14f6b8a5bdb36459ebcb4db5a.tar.gz
Merge "InitGitDir: Clean up created directories"
-rw-r--r--project.py114
1 files changed, 63 insertions, 51 deletions
diff --git a/project.py b/project.py
index 00f6b904..9e8ee868 100644
--- a/project.py
+++ b/project.py
@@ -2167,54 +2167,61 @@ class Project(object):
2167 def _InitGitDir(self, mirror_git=None): 2167 def _InitGitDir(self, mirror_git=None):
2168 init_git_dir = not os.path.exists(self.gitdir) 2168 init_git_dir = not os.path.exists(self.gitdir)
2169 init_obj_dir = not os.path.exists(self.objdir) 2169 init_obj_dir = not os.path.exists(self.objdir)
2170 # Initialize the bare repository, which contains all of the objects. 2170 try:
2171 if init_obj_dir: 2171 # Initialize the bare repository, which contains all of the objects.
2172 os.makedirs(self.objdir) 2172 if init_obj_dir:
2173 self.bare_objdir.init() 2173 os.makedirs(self.objdir)
2174 self.bare_objdir.init()
2174 2175
2175 # If we have a separate directory to hold refs, initialize it as well. 2176 # If we have a separate directory to hold refs, initialize it as well.
2176 if self.objdir != self.gitdir: 2177 if self.objdir != self.gitdir:
2177 if init_git_dir: 2178 if init_git_dir:
2178 os.makedirs(self.gitdir) 2179 os.makedirs(self.gitdir)
2179 2180
2180 if init_obj_dir or init_git_dir: 2181 if init_obj_dir or init_git_dir:
2181 self._ReferenceGitDir(self.objdir, self.gitdir, share_refs=False, 2182 self._ReferenceGitDir(self.objdir, self.gitdir, share_refs=False,
2182 copy_all=True) 2183 copy_all=True)
2183 self._CheckDirReference(self.objdir, self.gitdir, share_refs=False) 2184 self._CheckDirReference(self.objdir, self.gitdir, share_refs=False)
2184 2185
2185 if init_git_dir: 2186 if init_git_dir:
2186 mp = self.manifest.manifestProject 2187 mp = self.manifest.manifestProject
2187 ref_dir = mp.config.GetString('repo.reference') or '' 2188 ref_dir = mp.config.GetString('repo.reference') or ''
2188 2189
2189 if ref_dir or mirror_git: 2190 if ref_dir or mirror_git:
2190 if not mirror_git: 2191 if not mirror_git:
2191 mirror_git = os.path.join(ref_dir, self.name + '.git') 2192 mirror_git = os.path.join(ref_dir, self.name + '.git')
2192 repo_git = os.path.join(ref_dir, '.repo', 'projects', 2193 repo_git = os.path.join(ref_dir, '.repo', 'projects',
2193 self.relpath + '.git') 2194 self.relpath + '.git')
2194 2195
2195 if os.path.exists(mirror_git): 2196 if os.path.exists(mirror_git):
2196 ref_dir = mirror_git 2197 ref_dir = mirror_git
2197 2198
2198 elif os.path.exists(repo_git): 2199 elif os.path.exists(repo_git):
2199 ref_dir = repo_git 2200 ref_dir = repo_git
2200 2201
2201 else: 2202 else:
2202 ref_dir = None 2203 ref_dir = None
2203 2204
2204 if ref_dir: 2205 if ref_dir:
2205 _lwrite(os.path.join(self.gitdir, 'objects/info/alternates'), 2206 _lwrite(os.path.join(self.gitdir, 'objects/info/alternates'),
2206 os.path.join(ref_dir, 'objects') + '\n') 2207 os.path.join(ref_dir, 'objects') + '\n')
2207 2208
2208 self._UpdateHooks() 2209 self._UpdateHooks()
2209 2210
2210 m = self.manifest.manifestProject.config 2211 m = self.manifest.manifestProject.config
2211 for key in ['user.name', 'user.email']: 2212 for key in ['user.name', 'user.email']:
2212 if m.Has(key, include_defaults=False): 2213 if m.Has(key, include_defaults=False):
2213 self.config.SetString(key, m.GetString(key)) 2214 self.config.SetString(key, m.GetString(key))
2214 if self.manifest.IsMirror: 2215 if self.manifest.IsMirror:
2215 self.config.SetString('core.bare', 'true') 2216 self.config.SetString('core.bare', 'true')
2216 else: 2217 else:
2217 self.config.SetString('core.bare', None) 2218 self.config.SetString('core.bare', None)
2219 except Exception:
2220 if init_obj_dir and os.path.exists(self.objdir):
2221 shutil.rmtree(self.objdir)
2222 if init_git_dir and os.path.exists(self.gitdir):
2223 shutil.rmtree(self.gitdir)
2224 raise
2218 2225
2219 def _UpdateHooks(self): 2226 def _UpdateHooks(self):
2220 if os.path.exists(self.gitdir): 2227 if os.path.exists(self.gitdir):
@@ -2361,23 +2368,28 @@ class Project(object):
2361 def _InitWorkTree(self): 2368 def _InitWorkTree(self):
2362 dotgit = os.path.join(self.worktree, '.git') 2369 dotgit = os.path.join(self.worktree, '.git')
2363 init_dotgit = not os.path.exists(dotgit) 2370 init_dotgit = not os.path.exists(dotgit)
2364 if init_dotgit: 2371 try:
2365 os.makedirs(dotgit) 2372 if init_dotgit:
2366 self._ReferenceGitDir(self.gitdir, dotgit, share_refs=True, 2373 os.makedirs(dotgit)
2367 copy_all=False) 2374 self._ReferenceGitDir(self.gitdir, dotgit, share_refs=True,
2375 copy_all=False)
2368 2376
2369 self._CheckDirReference(self.gitdir, dotgit, share_refs=True) 2377 self._CheckDirReference(self.gitdir, dotgit, share_refs=True)
2370 2378
2371 if init_dotgit: 2379 if init_dotgit:
2372 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId()) 2380 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId())
2373 2381
2374 cmd = ['read-tree', '--reset', '-u'] 2382 cmd = ['read-tree', '--reset', '-u']
2375 cmd.append('-v') 2383 cmd.append('-v')
2376 cmd.append(HEAD) 2384 cmd.append(HEAD)
2377 if GitCommand(self, cmd).Wait() != 0: 2385 if GitCommand(self, cmd).Wait() != 0:
2378 raise GitError("cannot initialize work tree") 2386 raise GitError("cannot initialize work tree")
2379 2387
2380 self._CopyAndLinkFiles() 2388 self._CopyAndLinkFiles()
2389 except Exception:
2390 if init_dotgit:
2391 shutil.rmtree(dotgit)
2392 raise
2381 2393
2382 def _gitdir_path(self, path): 2394 def _gitdir_path(self, path):
2383 return os.path.realpath(os.path.join(self.gitdir, path)) 2395 return os.path.realpath(os.path.join(self.gitdir, path))