summaryrefslogtreecommitdiffstats
path: root/project.py
diff options
context:
space:
mode:
Diffstat (limited to 'project.py')
-rw-r--r--project.py71
1 files changed, 39 insertions, 32 deletions
diff --git a/project.py b/project.py
index 1beee2a6..beacc92f 100644
--- a/project.py
+++ b/project.py
@@ -27,7 +27,7 @@ from git_config import GitConfig, IsId
27from error import GitError, ImportError, UploadError 27from error import GitError, ImportError, UploadError
28from error import ManifestInvalidRevisionError 28from error import ManifestInvalidRevisionError
29 29
30from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M 30from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB
31 31
32def _lwrite(path, content): 32def _lwrite(path, content):
33 lock = '%s.lock' % path 33 lock = '%s.lock' % path
@@ -598,7 +598,7 @@ class Project(object):
598 return False 598 return False
599 599
600 if self.worktree: 600 if self.worktree:
601 self._InitMRef() 601 self.manifest.SetMRefs(self)
602 else: 602 else:
603 self._InitMirrorHead() 603 self._InitMirrorHead()
604 try: 604 try:
@@ -1080,10 +1080,6 @@ class Project(object):
1080 remote.ResetFetch(mirror=True) 1080 remote.ResetFetch(mirror=True)
1081 remote.Save() 1081 remote.Save()
1082 1082
1083 def _InitMRef(self):
1084 if self.manifest.branch:
1085 self._InitAnyMRef(R_M + self.manifest.branch)
1086
1087 def _InitMirrorHead(self): 1083 def _InitMirrorHead(self):
1088 self._InitAnyMRef(HEAD) 1084 self._InitAnyMRef(HEAD)
1089 1085
@@ -1102,30 +1098,37 @@ class Project(object):
1102 msg = 'manifest set to %s' % self.revisionExpr 1098 msg = 'manifest set to %s' % self.revisionExpr
1103 self.bare_git.symbolic_ref('-m', msg, ref, dst) 1099 self.bare_git.symbolic_ref('-m', msg, ref, dst)
1104 1100
1105 def _InitWorkTree(self): 1101 def _LinkWorkTree(self, relink=False):
1106 dotgit = os.path.join(self.worktree, '.git') 1102 dotgit = os.path.join(self.worktree, '.git')
1107 if not os.path.exists(dotgit): 1103 if not relink:
1108 os.makedirs(dotgit) 1104 os.makedirs(dotgit)
1109 1105
1110 for name in ['config', 1106 for name in ['config',
1111 'description', 1107 'description',
1112 'hooks', 1108 'hooks',
1113 'info', 1109 'info',
1114 'logs', 1110 'logs',
1115 'objects', 1111 'objects',
1116 'packed-refs', 1112 'packed-refs',
1117 'refs', 1113 'refs',
1118 'rr-cache', 1114 'rr-cache',
1119 'svn']: 1115 'svn']:
1120 try: 1116 try:
1121 src = os.path.join(self.gitdir, name) 1117 src = os.path.join(self.gitdir, name)
1122 dst = os.path.join(dotgit, name) 1118 dst = os.path.join(dotgit, name)
1123 os.symlink(relpath(src, dst), dst) 1119 if relink:
1124 except OSError, e: 1120 os.remove(dst)
1125 if e.errno == errno.EPERM: 1121 os.symlink(relpath(src, dst), dst)
1126 raise GitError('filesystem must support symlinks') 1122 except OSError, e:
1127 else: 1123 if e.errno == errno.EPERM:
1128 raise 1124 raise GitError('filesystem must support symlinks')
1125 else:
1126 raise
1127
1128 def _InitWorkTree(self):
1129 dotgit = os.path.join(self.worktree, '.git')
1130 if not os.path.exists(dotgit):
1131 self._LinkWorkTree()
1129 1132
1130 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId()) 1133 _lwrite(os.path.join(dotgit, HEAD), '%s\n' % self.GetRevisionId())
1131 1134
@@ -1423,15 +1426,17 @@ class SyncBuffer(object):
1423class MetaProject(Project): 1426class MetaProject(Project):
1424 """A special project housed under .repo. 1427 """A special project housed under .repo.
1425 """ 1428 """
1426 def __init__(self, manifest, name, gitdir, worktree): 1429 def __init__(self, manifest, name, gitdir, worktree, relpath=None):
1427 repodir = manifest.repodir 1430 repodir = manifest.repodir
1431 if relpath is None:
1432 relpath = '.repo/%s' % name
1428 Project.__init__(self, 1433 Project.__init__(self,
1429 manifest = manifest, 1434 manifest = manifest,
1430 name = name, 1435 name = name,
1431 gitdir = gitdir, 1436 gitdir = gitdir,
1432 worktree = worktree, 1437 worktree = worktree,
1433 remote = RemoteSpec('origin'), 1438 remote = RemoteSpec('origin'),
1434 relpath = '.repo/%s' % name, 1439 relpath = relpath,
1435 revisionExpr = 'refs/heads/master', 1440 revisionExpr = 'refs/heads/master',
1436 revisionId = None) 1441 revisionId = None)
1437 1442
@@ -1439,10 +1444,12 @@ class MetaProject(Project):
1439 if self.Exists: 1444 if self.Exists:
1440 cb = self.CurrentBranch 1445 cb = self.CurrentBranch
1441 if cb: 1446 if cb:
1442 base = self.GetBranch(cb).merge 1447 cb = self.GetBranch(cb)
1443 if base: 1448 if cb.merge:
1444 self.revisionExpr = base 1449 self.revisionExpr = cb.merge
1445 self.revisionId = None 1450 self.revisionId = None
1451 if cb.remote and cb.remote.name:
1452 self.remote.name = cb.remote.name
1446 1453
1447 @property 1454 @property
1448 def LastFetch(self): 1455 def LastFetch(self):