summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-06-04 19:49:36 -0700
committerShawn O. Pearce <sop@google.com>2009-07-03 11:00:16 -0700
commitca3d8ff4fc7bac11a747e4f32a81b42a01f4f297 (patch)
treebbec403fcb9a01044b32149ad18de426660af3c2
parent98ea26b8d842d11afe6326f026ba15644dc40770 (diff)
downloadgit-repo-ca3d8ff4fc7bac11a747e4f32a81b42a01f4f297.tar.gz
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 <sop@google.com>
-rw-r--r--project.py49
1 files changed, 28 insertions, 21 deletions
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):
1102 msg = 'manifest set to %s' % self.revisionExpr 1102 msg = 'manifest set to %s' % self.revisionExpr
1103 self.bare_git.symbolic_ref('-m', msg, ref, dst) 1103 self.bare_git.symbolic_ref('-m', msg, ref, dst)
1104 1104
1105 def _InitWorkTree(self): 1105 def _LinkWorkTree(self, relink=False):
1106 dotgit = os.path.join(self.worktree, '.git') 1106 dotgit = os.path.join(self.worktree, '.git')
1107 if not os.path.exists(dotgit): 1107 if not relink:
1108 os.makedirs(dotgit) 1108 os.makedirs(dotgit)
1109 1109
1110 for name in ['config', 1110 for name in ['config',
1111 'description', 1111 'description',
1112 'hooks', 1112 'hooks',
1113 'info', 1113 'info',
1114 'logs', 1114 'logs',
1115 'objects', 1115 'objects',
1116 'packed-refs', 1116 'packed-refs',
1117 'refs', 1117 'refs',
1118 'rr-cache', 1118 'rr-cache',
1119 'svn']: 1119 'svn']:
1120 try: 1120 try:
1121 src = os.path.join(self.gitdir, name) 1121 src = os.path.join(self.gitdir, name)
1122 dst = os.path.join(dotgit, name) 1122 dst = os.path.join(dotgit, name)
1123 os.symlink(relpath(src, dst), dst) 1123 if relink:
1124 except OSError, e: 1124 os.remove(dst)
1125 if e.errno == errno.EPERM: 1125 os.symlink(relpath(src, dst), dst)
1126 raise GitError('filesystem must support symlinks') 1126 except OSError, e:
1127 else: 1127 if e.errno == errno.EPERM:
1128 raise 1128 raise GitError('filesystem must support symlinks')
1129 else:
1130 raise
1131
1132 def _InitWorkTree(self):
1133 dotgit = os.path.join(self.worktree, '.git')
1134 if not os.path.exists(dotgit):
1135 self._LinkWorkTree()
1129 1136
1130 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId()) 1137 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId())
1131 1138