public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] [PATCH] Implement --newrepo flag.
@ 2014-02-14 17:31 David James
  2014-02-14 20:31 ` Sebastian Luther
  2014-02-17  7:45 ` Mike Frysinger
  0 siblings, 2 replies; 13+ messages in thread
From: David James @ 2014-02-14 17:31 UTC (permalink / raw
  To: gentoo-portage-dev

[-- Attachment #1: Type: text/plain, Size: 10284 bytes --]

The --newrepo flag tells emerge to recompile a package if it is now being
pulled from a different repository.

BUG=chromium:200417
TEST=Verify ebuilds get pulled in when repo changes.
---
 man/emerge.1                          |  5 +++
 pym/_emerge/create_depgraph_params.py |  1 +
 pym/_emerge/depgraph.py               | 80
++++++++++++++++++-----------------
 pym/_emerge/help.py                   |  2 +-
 4 files changed, 48 insertions(+), 40 deletions(-)

diff --git a/man/emerge.1 b/man/emerge.1
index 7b507fe..eacb77a 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -553,6 +553,11 @@ a list of packages with similar names when a package
doesn't exist.
 The \fIEMERGE_DEFAULT_OPTS\fR variable may be used to disable this
 option by default.
 .TP
+.BR "\-\-newrepo "
+Tells emerge to recompile a package if it is now being pulled from a
+different repository. This option also implies the
+\fB\-\-selective\fR option.
+.TP
 .BR "\-\-newuse " (\fB\-N\fR)
 Tells emerge to include installed packages where USE
 flags have changed since compilation. This option
diff --git a/pym/_emerge/create_depgraph_params.py
b/pym/_emerge/create_depgraph_params.py
index 98a7646..f9accf0 100644
--- a/pym/_emerge/create_depgraph_params.py
+++ b/pym/_emerge/create_depgraph_params.py
@@ -46,6 +46,7 @@ def create_depgraph_params(myopts, myaction):
                myparams['rebuild_if_new_slot'] = rebuild_if_new_slot

        if "--update" in myopts or \
+               "--newrepo" in myopts or \
                "--newuse" in myopts or \
                "--reinstall" in myopts or \
                "--noreplace" in myopts or \
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index ae6b883..fe1b48e 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -5389,54 +5389,56 @@ class depgraph(object):
                                                break
                                        # Compare built package to current
config and
                                        # reject the built package if
necessary.
+                                       reinstall_use = ("--newuse" in
self._frozen_config.myopts or \
+                                               "--reinstall" in
self._frozen_config.myopts)
+                                       respect_use =
self._dynamic_config.myparams.get("binpkg_respect_use") in ("y", "auto")
                                        if built and not useoldpkg and \
                                                (not installed or
matched_packages) and \
                                                not (installed and

self._frozen_config.excluded_pkgs.findAtomForPackage(pkg,
-
modified_use=self._pkg_use_enabled(pkg))) and \
-                                               ("--newuse" in
self._frozen_config.myopts or \
-                                               "--reinstall" in
self._frozen_config.myopts or \
-                                               (not installed and
self._dynamic_config.myparams.get(
-                                               "binpkg_respect_use") in
("y", "auto"))):
-                                               iuses = pkg.iuse.all
-                                               old_use =
self._pkg_use_enabled(pkg)
-                                               if myeb:
-
pkgsettings.setcpv(myeb)
-                                               else:
-
pkgsettings.setcpv(pkg)
-                                               now_use =
pkgsettings["PORTAGE_USE"].split()
-                                               forced_flags = set()
-
forced_flags.update(pkgsettings.useforce)
-
forced_flags.update(pkgsettings.usemask)
-                                               cur_iuse = iuses
-                                               if myeb and not usepkgonly
and not useoldpkg:
-                                                       cur_iuse =
myeb.iuse.all
-                                               reinstall_for_flags =
self._reinstall_for_flags(pkg,
-                                                       forced_flags,
old_use, iuses, now_use, cur_iuse)
-                                               if reinstall_for_flags:
-                                                       if not
pkg.installed:
-
self._dynamic_config.ignored_binaries.setdefault(pkg,
set()).update(reinstall_for_flags)
+
modified_use=self._pkg_use_enabled(pkg))):
+                                               if myeb and "--newrepo" in
self._frozen_config.myopts and myeb.repo != pkg.repo:
                                                        break
+                                               elif reinstall_use or (not
installed and respect_use):
+                                                       iuses = pkg.iuse.all
+                                                       old_use =
self._pkg_use_enabled(pkg)
+                                                       if myeb:
+
pkgsettings.setcpv(myeb)
+                                                       else:
+
pkgsettings.setcpv(pkg)
+                                                       now_use =
pkgsettings["PORTAGE_USE"].split()
+                                                       forced_flags = set()
+
forced_flags.update(pkgsettings.useforce)
+
forced_flags.update(pkgsettings.usemask)
+                                                       cur_iuse = iuses
+                                                       if myeb and not
usepkgonly and not useoldpkg:
+                                                               cur_iuse =
myeb.iuse.all
+                                                       reinstall_for_flags
= self._reinstall_for_flags(pkg,
+
forced_flags, old_use, iuses, now_use, cur_iuse)
+                                                       if
reinstall_for_flags:
+                                                               if not
pkg.installed:
+
self._dynamic_config.ignored_binaries.setdefault(pkg,
set()).update(reinstall_for_flags)
+                                                               break
                                        # Compare current config to
installed package
                                        # and do not reinstall if possible.
-                                       if not installed and not useoldpkg
and \
-                                               ("--newuse" in
self._frozen_config.myopts or \
-                                               "--reinstall" in
self._frozen_config.myopts) and \
-                                               cpv in vardb.match(atom):
-                                               forced_flags = set()
-
forced_flags.update(pkg.use.force)
-
forced_flags.update(pkg.use.mask)
+                                       if not installed and not useoldpkg
and cpv in vardb.match(atom):
                                                inst_pkg =
vardb.match_pkgs('=' + pkg.cpv)[0]
-                                               old_use =
inst_pkg.use.enabled
-                                               old_iuse = inst_pkg.iuse.all
-                                               cur_use =
self._pkg_use_enabled(pkg)
-                                               cur_iuse = pkg.iuse.all
-                                               reinstall_for_flags = \
-
self._reinstall_for_flags(pkg,
-                                                       forced_flags,
old_use, old_iuse,
-                                                       cur_use, cur_iuse)
-                                               if reinstall_for_flags:
+                                               if "--newrepo" in
self._frozen_config.myopts and pkg.repo != inst_pkg.repo:
                                                        reinstall = True
+                                               elif reinstall_use:
+                                                       forced_flags = set()
+
forced_flags.update(pkg.use.force)
+
forced_flags.update(pkg.use.mask)
+                                                       old_use =
inst_pkg.use.enabled
+                                                       old_iuse =
inst_pkg.iuse.all
+                                                       cur_use =
self._pkg_use_enabled(pkg)
+                                                       cur_iuse =
pkg.iuse.all
+                                                       reinstall_for_flags
= \
+
self._reinstall_for_flags(pkg,
+
forced_flags, old_use, old_iuse,
+                                                               cur_use,
cur_iuse)
+                                                       if
reinstall_for_flags:
+                                                               reinstall =
True
                                        if
reinstall_atoms.findAtomForPackage(pkg, \

modified_use=self._pkg_use_enabled(pkg)):
                                                reinstall = True
diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py
index 52cfd00..ab4e88f 100644
--- a/pym/_emerge/help.py
+++ b/pym/_emerge/help.py
@@ -17,7 +17,7 @@ def help():
        print("          [ " + green("--color")+" < " + turquoise("y") + "
| "+ turquoise("n")+" >            ] [ "+green("--columns")+"    ]")
        print("          [ "+green("--complete-graph")+"             ] [
"+green("--deep")+"       ]")
        print("          [ "+green("--jobs") + " " + turquoise("JOBS")+" ]
[ "+green("--keep-going")+" ] [ " + green("--load-average")+" " +
turquoise("LOAD") + "            ]")
-       print("          [ "+green("--newuse")+"    ] [
"+green("--noconfmem")+"  ] [ "+green("--nospinner")+"  ]")
+       print("          [ "+green("--newrepo")+"   ] [
"+green("--newuse")+"     ] [ "+green("--noconfmem")+"  ] [
"+green("--nospinner")+"   ]")
        print("          [ "+green("--oneshot")+"   ] [
"+green("--onlydeps")+"   ] [ "+ green("--quiet-build")+" [ " +
turquoise("y") + " | "+ turquoise("n")+" ]        ]")
        print("          [ "+green("--reinstall
")+turquoise("changed-use")+"      ] [ " + green("--with-bdeps")+" < " +
turquoise("y") + " | "+ turquoise("n")+" >         ]")
        print(bold("Actions:")+"  [ "+green("--depclean")+" |
"+green("--list-sets")+" | "+green("--search")+" | "+green("--sync")+" |
"+green("--version")+"        ]")
--
1.8.0.2

[-- Attachment #2: Type: text/html, Size: 16096 bytes --]

^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-02-18 17:35 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-14 17:31 [gentoo-portage-dev] [PATCH] Implement --newrepo flag David James
2014-02-14 20:31 ` Sebastian Luther
2014-02-14 20:43   ` David James
2014-02-14 21:37     ` Sebastian Luther
2014-02-17  4:57       ` David James
2014-02-17  7:49         ` Mike Frysinger
2014-02-17 16:39           ` Brian Dolbec
2014-02-17 17:52             ` David James
2014-02-17 20:09               ` Sebastian Luther
2014-02-17 21:44                 ` David James
2014-02-18 17:35                   ` Sebastian Luther
2014-02-17 18:23             ` Sebastian Luther
2014-02-17  7:45 ` Mike Frysinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox