Use reference also for manifest git

When running 'repo init --reference=<mirror>', the mirror will be
used for all projects except the manifest project. This is because
the _InitGitDir function uses the 'repo.reference' git config
value specified in the manifest git, which has no effect when
creating the manifest git as that value will be set after the git
has been successfully cloned.

Information about where the manifest git is located on the server
is only known when performing the 'repo init', so that information
has to be provided when cloning the git in order for it to set up
a proper mapping.

Change-Id: I47a2c8b3267a4065965058718ce1def4ecb34d5a
Signed-off-by: Chirayu Desai <cdesai@cyanogenmod.org>
This commit is contained in:
Victor Boivie 2012-10-05 12:37:58 +02:00 committed by Chirayu Desai
parent 793f90cdc0
commit 2b30e3aaba
2 changed files with 27 additions and 5 deletions

View File

@ -1854,16 +1854,17 @@ class Project(object):
if GitCommand(self, cmd).Wait() != 0: if GitCommand(self, cmd).Wait() != 0:
raise GitError('%s merge %s ' % (self.name, head)) raise GitError('%s merge %s ' % (self.name, head))
def _InitGitDir(self): def _InitGitDir(self, mirror_git=None):
if not os.path.exists(self.gitdir): if not os.path.exists(self.gitdir):
os.makedirs(self.gitdir) os.makedirs(self.gitdir)
self.bare_git.init() self.bare_git.init()
mp = self.manifest.manifestProject mp = self.manifest.manifestProject
ref_dir = mp.config.GetString('repo.reference') ref_dir = mp.config.GetString('repo.reference') or ''
if ref_dir: if ref_dir or mirror_git:
mirror_git = os.path.join(ref_dir, self.name + '.git') if not mirror_git:
mirror_git = os.path.join(ref_dir, self.name + '.git')
repo_git = os.path.join(ref_dir, '.repo', 'projects', repo_git = os.path.join(ref_dir, '.repo', 'projects',
self.relpath + '.git') self.relpath + '.git')

View File

@ -19,6 +19,15 @@ import platform
import re import re
import shutil import shutil
import sys 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 color import Coloring
from command import InteractiveCommand, MirrorSafeCommand from command import InteractiveCommand, MirrorSafeCommand
@ -135,7 +144,19 @@ to update the working directory files.
if not opt.quiet: if not opt.quiet:
print('Get %s' % GitConfig.ForUser().UrlInsteadOf(opt.manifest_url), print('Get %s' % GitConfig.ForUser().UrlInsteadOf(opt.manifest_url),
file=sys.stderr) 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: if opt.manifest_branch:
m.revisionExpr = opt.manifest_branch m.revisionExpr = opt.manifest_branch