diff options
Diffstat (limited to 'project.py')
-rw-r--r-- | project.py | 71 |
1 files changed, 39 insertions, 32 deletions
@@ -27,7 +27,7 @@ from git_config import GitConfig, IsId | |||
27 | from error import GitError, ImportError, UploadError | 27 | from error import GitError, ImportError, UploadError |
28 | from error import ManifestInvalidRevisionError | 28 | from error import ManifestInvalidRevisionError |
29 | 29 | ||
30 | from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB, R_M | 30 | from git_refs import GitRefs, HEAD, R_HEADS, R_TAGS, R_PUB |
31 | 31 | ||
32 | def _lwrite(path, content): | 32 | def _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): | |||
1423 | class MetaProject(Project): | 1426 | class 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): |