summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
Diffstat (limited to 'project.py')
-rwxr-xr-xproject.py64
1 files changed, 34 insertions, 30 deletions
diff --git a/project.py b/project.py
index 51160a94..a2a3adc8 100755
--- a/project.py
+++ b/project.py
@@ -2706,41 +2706,45 @@ class Project(object):
2706 raise 2706 raise
2707 2707
2708 def _InitWorkTree(self, force_sync=False, submodules=False): 2708 def _InitWorkTree(self, force_sync=False, submodules=False):
2709 dotgit = os.path.join(self.worktree, '.git') 2709 realdotgit = os.path.join(self.worktree, '.git')
2710 init_dotgit = not os.path.exists(dotgit) 2710 tmpdotgit = realdotgit + '.tmp'
2711 init_dotgit = not os.path.exists(realdotgit)
2712 if init_dotgit:
2713 dotgit = tmpdotgit
2714 platform_utils.rmtree(tmpdotgit, ignore_errors=True)
2715 os.makedirs(tmpdotgit)
2716 self._ReferenceGitDir(self.gitdir, tmpdotgit, share_refs=True,
2717 copy_all=False)
2718 else:
2719 dotgit = realdotgit
2720
2711 try: 2721 try:
2712 if init_dotgit: 2722 self._CheckDirReference(self.gitdir, dotgit, share_refs=True)
2713 os.makedirs(dotgit) 2723 except GitError as e:
2714 self._ReferenceGitDir(self.gitdir, dotgit, share_refs=True, 2724 if force_sync and not init_dotgit:
2715 copy_all=False) 2725 try:
2726 platform_utils.rmtree(dotgit)
2727 return self._InitWorkTree(force_sync=False, submodules=submodules)
2728 except:
2729 raise e
2730 raise e
2716 2731
2717 try: 2732 if init_dotgit:
2718 self._CheckDirReference(self.gitdir, dotgit, share_refs=True) 2733 _lwrite(os.path.join(tmpdotgit, HEAD), '%s\n' % self.GetRevisionId())
2719 except GitError as e:
2720 if force_sync:
2721 try:
2722 platform_utils.rmtree(dotgit)
2723 return self._InitWorkTree(force_sync=False, submodules=submodules)
2724 except:
2725 raise e
2726 raise e
2727 2734
2728 if init_dotgit: 2735 # Now that the .git dir is fully set up, move it to its final home.
2729 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId()) 2736 platform_utils.rename(tmpdotgit, realdotgit)
2730 2737
2731 cmd = ['read-tree', '--reset', '-u'] 2738 # Finish checking out the worktree.
2732 cmd.append('-v') 2739 cmd = ['read-tree', '--reset', '-u']
2733 cmd.append(HEAD) 2740 cmd.append('-v')
2734 if GitCommand(self, cmd).Wait() != 0: 2741 cmd.append(HEAD)
2735 raise GitError("cannot initialize work tree for " + self.name) 2742 if GitCommand(self, cmd).Wait() != 0:
2743 raise GitError('Cannot initialize work tree for ' + self.name)
2736 2744
2737 if submodules: 2745 if submodules:
2738 self._SyncSubmodules(quiet=True) 2746 self._SyncSubmodules(quiet=True)
2739 self._CopyAndLinkFiles() 2747 self._CopyAndLinkFiles()
2740 except Exception:
2741 if init_dotgit:
2742 platform_utils.rmtree(dotgit)
2743 raise
2744 2748
2745 def _get_symlink_error_message(self): 2749 def _get_symlink_error_message(self):
2746 if platform_utils.isWindows(): 2750 if platform_utils.isWindows():