From: Gui Chen Date: Thu, 13 Feb 2014 05:12:12 +0000 (-0500) Subject: implement '--repo' option and '--ignore-ksrepo' X-Git-Tag: 0.24~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba4bf72e002499939a86a00be2acf49628f9f595;p=tools%2Fmic.git implement '--repo' option and '--ignore-ksrepo' option '--repo' is to append a new repo to repo pool, like --repo "name=main;baseurl=http://repo" option '--ignoe-ksrepo' is to ignore repos in ks file, only valid when '--repo' used Change-Id: I38586f2e587904e0f4fe2d901597f7231a248b97 Signed-off-by: Gui Chen --- diff --git a/mic/conf.py b/mic/conf.py index 99b9696..e52317e 100644 --- a/mic/conf.py +++ b/mic/conf.py @@ -64,7 +64,7 @@ class ConfigMgr(object): "repourl": {}, "localrepos": [], # save localrepos "runtime": "bootstrap", - "repo": {}, + "extrarepos": {}, "ignore_ksrepo": False, }, 'chroot': { @@ -202,7 +202,9 @@ class ConfigMgr(object): self.create['name_suffix']) msger.info("Retrieving repo metadata:") - ksrepos = misc.get_repostrs_from_ks(ks) + ksrepos = kickstart.get_repos(ks, + self.create['extrarepos'], + self.create['ignore_ksrepo']) if not ksrepos: raise errors.KsError('no valid repos found in ks file') diff --git a/mic/creator.py b/mic/creator.py index 01e9844..9650309 100644 --- a/mic/creator.py +++ b/mic/creator.py @@ -281,7 +281,17 @@ class Creator(cmdln.Cmdln): configmgr.create['repourl'][key] = val if self.options.repo: - configmgr.create['repo'] = self.options.repo + for optvalue in self.options.repo: + repo = {} + for item in optvalue.split(';'): + try: + key, val = item.split('=') + except: + continue + repo[key.strip()] = val.strip() + if 'name' in repo: + configmgr.create['extrarepos'][repo['name']] = repo + if self.options.ignore_ksrepo: configmgr.create['ignore_ksrepo'] = self.options.ignore_ksrepo diff --git a/mic/imager/baseimager.py b/mic/imager/baseimager.py index 21410b0..2e00384 100644 --- a/mic/imager/baseimager.py +++ b/mic/imager/baseimager.py @@ -981,7 +981,7 @@ class BaseImageCreator(object): into the install root. By default, the packages are installed from the repository URLs specified in the kickstart. - repo_urls -- a dict which maps a repository name to a repository URL; + repo_urls -- a dict which maps a repository name to a repository; if supplied, this causes any repository URLs specified in the kickstart to be overridden. @@ -1001,6 +1001,9 @@ class BaseImageCreator(object): self._excluded_pkgs = None self._required_groups = None + if not repo_urls: + repo_urls = self.extrarepos + pkg_manager = self.get_pkg_manager() pkg_manager.setup() @@ -1008,7 +1011,7 @@ class BaseImageCreator(object): if 'debuginfo' in self.install_pkgs: pkg_manager.install_debuginfo = True - for repo in kickstart.get_repos(self.ks, repo_urls): + for repo in kickstart.get_repos(self.ks, repo_urls, self.ignore_ksrepo): (name, baseurl, mirrorlist, inc, exc, proxy, proxy_username, proxy_password, debuginfo, source, gpgkey, disable, ssl_verify, nocache, diff --git a/mic/kickstart/__init__.py b/mic/kickstart/__init__.py index 7334af6..8ee5f1d 100644 --- a/mic/kickstart/__init__.py +++ b/mic/kickstart/__init__.py @@ -746,6 +746,16 @@ def get_repos(ks, repo_urls=None, ignore_ksrepo=False): if 'name' in repo: repos[repo['name']] = Repo(**repo) + if repo_urls: + if ignore_ksrepo: + repos = {} + for name, repo in repo_urls.items(): + if 'baseurl' in repo: + repo['baseurl'] = SafeURL(repo.get('baseurl'), + repo.get('user', None), + repo.get('passwd', None)) + repos[name] = Repo(**repo) + return repos.values() def convert_method_to_repo(ks): diff --git a/mic/utils/misc.py b/mic/utils/misc.py index d90041d..243051e 100644 --- a/mic/utils/misc.py +++ b/mic/utils/misc.py @@ -612,11 +612,11 @@ def _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filename, def get_metadata_from_repos(repos, cachedir): my_repo_metadata = [] for repo in repos: - reponame = repo['name'] - baseurl = repo['baseurl'] + reponame = repo.name + baseurl = repo.baseurl - if 'proxy' in repo: - proxy = repo['proxy'] + if hasattr(repo, 'proxy'): + proxy = repo.proxy else: proxy = get_proxy_for(baseurl)