From ca3d8ff4fc7bac11a747e4f32a81b42a01f4f297 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 4 Jun 2009 19:49:36 -0700 Subject: Teach Project how to relink a .git/ in the work tree The _LinkWorkTree method can now be used to relink the work tree, such as if the real repository was moved to a different location on disk. Signed-off-by: Shawn O. Pearce --- project.py | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'project.py') diff --git a/project.py b/project.py index 1beee2a6..bedc91ee 100644 --- a/project.py +++ b/project.py @@ -1102,30 +1102,37 @@ class Project(object): msg = 'manifest set to %s' % self.revisionExpr self.bare_git.symbolic_ref('-m', msg, ref, dst) - def _InitWorkTree(self): + def _LinkWorkTree(self, relink=False): dotgit = os.path.join(self.worktree, '.git') - if not os.path.exists(dotgit): + if not relink: os.makedirs(dotgit) - for name in ['config', - 'description', - 'hooks', - 'info', - 'logs', - 'objects', - 'packed-refs', - 'refs', - 'rr-cache', - 'svn']: - try: - src = os.path.join(self.gitdir, name) - dst = os.path.join(dotgit, name) - os.symlink(relpath(src, dst), dst) - except OSError, e: - if e.errno == errno.EPERM: - raise GitError('filesystem must support symlinks') - else: - raise + for name in ['config', + 'description', + 'hooks', + 'info', + 'logs', + 'objects', + 'packed-refs', + 'refs', + 'rr-cache', + 'svn']: + try: + src = os.path.join(self.gitdir, name) + dst = os.path.join(dotgit, name) + if relink: + os.remove(dst) + os.symlink(relpath(src, dst), dst) + except OSError, e: + if e.errno == errno.EPERM: + raise GitError('filesystem must support symlinks') + else: + raise + + def _InitWorkTree(self): + dotgit = os.path.join(self.worktree, '.git') + if not os.path.exists(dotgit): + self._LinkWorkTree() _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId()) -- cgit v1.2.3-54-g00ecf