diff --git a/manifest_xml.py b/manifest_xml.py index 45896be9..d888653d 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -189,7 +189,10 @@ class XmlManifest(Manifest): def _Load(self): if not self._loaded: m = self.manifestProject - b = m.GetBranch(m.CurrentBranch).merge + b = m.GetBranch(m.CurrentBranch) + if b.remote and b.remote.name: + m.remote.name = b.remote.name + b = b.merge if b is not None and b.startswith(R_HEADS): b = b[len(R_HEADS):] self.branch = b diff --git a/project.py b/project.py index 6188ca72..c79e8fb9 100644 --- a/project.py +++ b/project.py @@ -1442,10 +1442,12 @@ class MetaProject(Project): if self.Exists: cb = self.CurrentBranch if cb: - base = self.GetBranch(cb).merge - if base: - self.revisionExpr = base + cb = self.GetBranch(cb) + if cb.merge: + self.revisionExpr = cb.merge self.revisionId = None + if cb.remote and cb.remote.name: + self.remote.name = cb.remote.name @property def LastFetch(self): diff --git a/repo b/repo index f73fa58b..ff7c4188 100755 --- a/repo +++ b/repo @@ -28,7 +28,7 @@ if __name__ == '__main__': del magic # increment this whenever we make important changes to this script -VERSION = (1, 8) +VERSION = (1, 9) # increment this if the MAINTAINER_KEYS block is modified KEYRING_VERSION = (1,0) @@ -109,6 +109,10 @@ group = init_optparse.add_option_group('Manifest options') group.add_option('-u', '--manifest-url', dest='manifest_url', help='manifest repository location', metavar='URL') +group.add_option('-o', '--origin', + dest='manifest_origin', + help="use REMOTE instead of 'origin' to track upstream", + metavar='REMOTE') group.add_option('-b', '--manifest-branch', dest='manifest_branch', help='manifest branch or revision', metavar='REVISION') diff --git a/subcmds/init.py b/subcmds/init.py index 0586721f..53c3a010 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -62,6 +62,10 @@ to update the working directory files. g.add_option('-b', '--manifest-branch', dest='manifest_branch', help='manifest branch or revision', metavar='REVISION') + g.add_option('-o', '--origin', + dest='manifest_origin', + help="use REMOTE instead of 'origin' to track upstream", + metavar='REMOTE') if isinstance(self.manifest, XmlManifest) \ or not self.manifest.manifestProject.Exists: g.add_option('-m', '--manifest-name', @@ -84,6 +88,27 @@ to update the working directory files. dest='no_repo_verify', action='store_true', help='do not verify repo source code') + def _ApplyOptions(self, opt, is_new): + m = self.manifest.manifestProject + + if is_new: + if opt.manifest_origin: + m.remote.name = opt.manifest_origin + + if opt.manifest_branch: + m.revisionExpr = opt.manifest_branch + else: + m.revisionExpr = 'refs/heads/master' + else: + if opt.manifest_origin: + print >>sys.stderr, 'fatal: cannot change origin name' + sys.exit(1) + + if opt.manifest_branch: + m.revisionExpr = opt.manifest_branch + else: + m.PreSync() + def _SyncManifest(self, opt): m = self.manifest.manifestProject is_new = not m.Exists @@ -98,16 +123,7 @@ to update the working directory files. print >>sys.stderr, ' from %s' % opt.manifest_url m._InitGitDir() - if opt.manifest_branch: - m.revisionExpr = opt.manifest_branch - else: - m.revisionExpr = 'refs/heads/master' - else: - if opt.manifest_branch: - m.revisionExpr = opt.manifest_branch - else: - m.PreSync() - + self._ApplyOptions(opt, is_new) if opt.manifest_url: r = m.GetRemote(m.remote.name) r.url = opt.manifest_url