diff --git a/project.py b/project.py index 516d3b6c..effe75c4 100644 --- a/project.py +++ b/project.py @@ -1854,16 +1854,17 @@ class Project(object): if GitCommand(self, cmd).Wait() != 0: raise GitError('%s merge %s ' % (self.name, head)) - def _InitGitDir(self): + def _InitGitDir(self, mirror_git=None): if not os.path.exists(self.gitdir): os.makedirs(self.gitdir) self.bare_git.init() mp = self.manifest.manifestProject - ref_dir = mp.config.GetString('repo.reference') + ref_dir = mp.config.GetString('repo.reference') or '' - if ref_dir: - mirror_git = os.path.join(ref_dir, self.name + '.git') + if ref_dir or mirror_git: + if not mirror_git: + mirror_git = os.path.join(ref_dir, self.name + '.git') repo_git = os.path.join(ref_dir, '.repo', 'projects', self.relpath + '.git') diff --git a/subcmds/init.py b/subcmds/init.py index 29730cc4..1f915268 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -19,6 +19,15 @@ import platform import re import shutil import sys +try: + # For python3 + import urllib.parse +except ImportError: + # For python2 + import imp + import urlparse + urllib = imp.new_module('urllib') + urllib.parse = urlparse.urlparse from color import Coloring from command import InteractiveCommand, MirrorSafeCommand @@ -135,7 +144,19 @@ to update the working directory files. if not opt.quiet: print('Get %s' % GitConfig.ForUser().UrlInsteadOf(opt.manifest_url), file=sys.stderr) - m._InitGitDir() + + # The manifest project object doesn't keep track of the path on the + # server where this git is located, so let's save that here. + mirrored_manifest_git = None + if opt.reference: + manifest_git_path = urllib.parse(opt.manifest_url).path[1:] + mirrored_manifest_git = os.path.join(opt.reference, manifest_git_path) + if not mirrored_manifest_git.endswith(".git"): + mirrored_manifest_git += ".git" + if not os.path.exists(mirrored_manifest_git): + mirrored_manifest_git = os.path.join(opt.reference + '/.repo/manifests.git') + + m._InitGitDir(mirror_git=mirrored_manifest_git) if opt.manifest_branch: m.revisionExpr = opt.manifest_branch