summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-10-31 13:45:19 +0000
committerZac Medico <zmedico@gentoo.org>2006-10-31 13:45:19 +0000
commitbd5e3c6cd5b15fb8a5bfcf19bbcc779cd742fe3d (patch)
tree71c6a35f515b3d401e32db2eafadd7bedf73444f
parent0512bd0c41d6bb77f2923ba1fcdc1c223f868994 (diff)
downloadportage-bd5e3c6cd5b15fb8a5bfcf19bbcc779cd742fe3d.tar.gz
portage-bd5e3c6cd5b15fb8a5bfcf19bbcc779cd742fe3d.tar.bz2
portage-bd5e3c6cd5b15fb8a5bfcf19bbcc779cd742fe3d.zip
Add support for frozen config files for which updates are automatically zapped. Thanks to Bo Ørsted Andresen for the initial patch from bug #151685.
svn path=/main/trunk/; revision=4887
-rwxr-xr-xbin/dispatch-conf26
-rw-r--r--cnf/dispatch-conf.conf3
2 files changed, 29 insertions, 0 deletions
diff --git a/bin/dispatch-conf b/bin/dispatch-conf
index 2309b680f..c9f3655f0 100755
--- a/bin/dispatch-conf
+++ b/bin/dispatch-conf
@@ -12,6 +12,9 @@
# dialog menus
#
+if not hasattr(__builtins__, "set"):
+ from sets import Set as set
+
from stat import *
from random import *
import atexit, commands, os, re, shutil, stat, string, sys
@@ -105,6 +108,10 @@ class dispatch:
return False
+ # config file freezing support
+ frozen_files = set(self.options.get("frozen-files", "").split())
+ auto_zapped = []
+
#
# Remove new configs identical to current
# and
@@ -148,6 +155,18 @@ class dispatch:
if os.path.exists(mrgconf):
os.unlink(mrgconf)
return False
+ elif conf['current'] in frozen_files:
+ """Frozen files are automatically zapped. The new config has
+ already been archived with a .new suffix. When zapped, it is
+ left with the .new suffix (post_process is skipped), since it
+ hasn't been merged into the current config."""
+ auto_zapped.append(conf['current'])
+ os.unlink(conf['new'])
+ try:
+ os.unlink(mrgconf)
+ except OSError:
+ pass
+ return False
elif unmodified or same_cvs or same_wsc or conf ['dir'] in portage.settings ['CONFIG_PROTECT_MASK'].split ():
self.replace(newconf, conf['current'])
self.post_process(conf['current'])
@@ -238,6 +257,13 @@ class dispatch:
else:
continue
+ if auto_zapped:
+ print
+ print " One or more updates are frozen and have been automatically zapped:"
+ print
+ for frozen in auto_zapped:
+ print " * '%s'" % frozen
+ print
def replace (self, newconf, curconf):
"""Replace current config with the new/merged version. Also logs
diff --git a/cnf/dispatch-conf.conf b/cnf/dispatch-conf.conf
index 11123b2a8..b1ece73bb 100644
--- a/cnf/dispatch-conf.conf
+++ b/cnf/dispatch-conf.conf
@@ -34,3 +34,6 @@ replace-unmodified=no
# Per-session log file of changes made to configuration files
#log-file=/var/log/dispatch-conf.log
+
+# List of frozen files for which dispatch-conf will automatically zap updates
+#frozen-files=""