diff options
author | Otavio Pontes <otaviobp@gmail.com> | 2010-08-02 23:58:55 +0000 |
---|---|---|
committer | Otavio Pontes <otaviobp@gmail.com> | 2010-08-02 23:58:55 +0000 |
commit | da1ae19864ce14fbe11286e10b1e136fe816c83f (patch) | |
tree | a0b72c967468dbcfa07ba33286ca9fe167eec8cf /pym/portage/update.py | |
parent | Adding test routine to check if the correct ebuild is beeing used to (diff) | |
parent | * Make _world_repo_match() try to match both atoms, so it still works (diff) | |
download | portage-multirepo-da1ae19864ce14fbe11286e10b1e136fe816c83f.tar.gz portage-multirepo-da1ae19864ce14fbe11286e10b1e136fe816c83f.tar.bz2 portage-multirepo-da1ae19864ce14fbe11286e10b1e136fe816c83f.zip |
Merge branch 'master' of git://git.overlays.gentoo.org/proj/portage
Diffstat (limited to 'pym/portage/update.py')
-rw-r--r-- | pym/portage/update.py | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/pym/portage/update.py b/pym/portage/update.py index b24c9cb0..7892f537 100644 --- a/pym/portage/update.py +++ b/pym/portage/update.py @@ -187,10 +187,18 @@ def update_config_files(config_root, protect, protect_mask, update_iter, match_c config_root - location of files to update protect - list of paths from CONFIG_PROTECT protect_mask - list of paths from CONFIG_PROTECT_MASK - update_iter - list of update commands as returned from parse_updates() - match_callback - a callback which will be called with old and new atoms + update_iter - list of update commands as returned from parse_updates(), + or dict of {repo_name: list} + match_callback - a callback which will be called with three arguments: + match_callback(repo_name, old_atom, new_atom) and should return boolean value determining whether to perform the update""" + repo_dict = None + if isinstance(update_iter, dict): + repo_dict = update_iter + if match_callback is None: + def match_callback(repo_name, atoma, atomb): + return True config_root = normalize_path(config_root) update_files = {} file_contents = {} @@ -242,24 +250,29 @@ def update_config_files(config_root, protect, protect_mask, update_iter, match_c # update /etc/portage/packages.* ignore_line_re = re.compile(r'^#|^\s*$') - for update_cmd in update_iter: - for x, contents in file_contents.items(): - for pos, line in enumerate(contents): - if ignore_line_re.match(line): - continue - atom = line.split()[0] - if atom.startswith("-"): - # package.mask supports incrementals - atom = atom[1:] - if not isvalidatom(atom): - continue - new_atom = update_dbentry(update_cmd, atom) - if atom != new_atom: - if match_callback(atom, new_atom): - contents[pos] = line.replace(atom, new_atom) - update_files[x] = 1 - sys.stdout.write("p") - sys.stdout.flush() + if repo_dict is None: + update_items = [(None, update_iter)] + else: + update_items = [x for x in repo_dict.items() if x[0] != 'DEFAULT'] + for repo_name, update_iter in update_items: + for update_cmd in update_iter: + for x, contents in file_contents.items(): + for pos, line in enumerate(contents): + if ignore_line_re.match(line): + continue + atom = line.split()[0] + if atom[:1] == "-": + # package.mask supports incrementals + atom = atom[1:] + if not isvalidatom(atom): + continue + new_atom = update_dbentry(update_cmd, atom) + if atom != new_atom: + if match_callback(repo_name, atom, new_atom): + contents[pos] = line.replace(atom, new_atom, 1) + update_files[x] = 1 + sys.stdout.write("p") + sys.stdout.flush() protect_obj = ConfigProtect( config_root, protect, protect_mask) |