Bug #275945 - Add a new --avoid-update which tries to avoid updating packages
authorZac Medico <zmedico@gentoo.org>
Tue, 30 Jun 2009 21:33:42 +0000 (21:33 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 30 Jun 2009 21:33:42 +0000 (21:33 -0000)
which possible. Thanks to Sebastian Mingramm (few) <s.mingramm@gmx.de> for
this patch.

svn path=/main/trunk/; revision=13745

man/emerge.1
pym/_emerge/depgraph.py
pym/_emerge/help.py
pym/_emerge/main.py

index df054c9e979717e0fe78303be0e997813ec1346d..a1dbcde731eb70bc299374a9cb697d51b34390d2 100644 (file)
@@ -90,6 +90,15 @@ option if you want to install a tbz2\fR.  The packages are added
 to the \fBworld\fR file at the end, so that they are considered for
 later updating.
 .TP
+.BR "\-\-avoid\-update "
+Tries to prevent package updates. This may not always be
+possible since new packages or new dependencies due to USE
+flag changes may require a newer version of an installed
+package. Furthermore, this option may lead to slot conflicts
+(Multiple package instances within a single package slot
+have been pulled into the dependency graph). It is not
+possible to use this option in such a case.
+.TP
 .BR "\-\-clean " (\fB\-c\fR)
 Cleans up the system by examining the installed packages and removing older
 packages.  This is accomplished by looking at each installed package and separating
@@ -364,6 +373,9 @@ A USE flag was turned off for a package.
 
 USE flags may be toggled by your profile as well as your USE and package.use
 settings.
+
+\fB\-\-avoid\-update\fR may prevent updates of installed packages without 
+use flag changes. Note that \fB\-\-avoid-\update\fR may lead to slot conflicts.
 .TP
 .BR "\-\-noconfmem"
 Causes portage to disregard merge records indicating that a config file
index 25e385521ad0644e5f86a55c93283e783ab60217..de097c419bfbad0c0213aa81dd1b8dc658db3e97 100644 (file)
@@ -2091,6 +2091,11 @@ class depgraph(object):
                                break
 
                if len(matched_packages) > 1:
+                       if "--avoid-update" in self.myopts:
+                               for pkg in matched_packages:
+                                       if pkg.installed:
+                                               return pkg, existing_node
+
                        bestmatch = portage.best(
                                [pkg.cpv for pkg in matched_packages])
                        matched_packages = [pkg for pkg in matched_packages \
index 950692136d839b9cedc2a8cc36f2883fec02c3e2..1f4b5201e46a6ec5ff752ba8bd1372b87689ccc1 100644 (file)
@@ -235,6 +235,17 @@ def help(myaction,myopts,havecolor=1):
                print "              to the prompt, so an accidental press of the \"Enter\" key at any"
                print "              time prior to the prompt will be interpreted as a choice!"
                print
+               print "       "+green("--avoid-update")
+               desc = "Tries to prevent package updates. This may not always be" + \
+                       " possible since new packages or new dependencies due to USE" + \
+                       " flag changes may require a newer version of an installed" + \
+                       " package. Furthermore, this option may lead to slot conflicts" + \
+                       " (Multiple package instances within a single package slot" + \
+                       " have been pulled into the dependency graph). It is not" + \
+                       " possible to use this option in such a case."
+               for line in wrap(desc, desc_width):
+                       print desc_indent + line
+               print
                print "       "+green("--buildpkg")+" ("+green("-b")+" short option)"
                desc = "Tells emerge to build binary packages for all ebuilds processed in" + \
                        " addition to actually merging the packages. Useful for maintainers" + \
index f73bc6db41a5668879db9d0d92e6f24cc80d33e4..087493c4d2f3c1bcc67a941212b311cb8aa09744 100644 (file)
@@ -65,6 +65,7 @@ options=[
 "--searchdesc",   "--selective",
 "--skipfirst",
 "--tree",
+"--avoid-update",
 "--update",
 "--usepkg",       "--usepkgonly",
 "--verbose",
@@ -1060,6 +1061,11 @@ def emerge_main():
                        noiselevel=-1)
                return 1
 
+       if "--avoid-update" in myopts and "--update" in myopts:
+               writemsg("!!! conflicting options given: " + \
+                       "--update and --avoid-update\n", noiselevel=-1)
+               return 1
+
        if settings.get("PORTAGE_DEBUG", "") == "1":
                spinner.update = spinner.update_quiet
                portage.debug=1