autounmask-write: force configpro if non-existent
authorZac Medico <zmedico@gentoo.org>
Fri, 3 Jun 2011 05:20:51 +0000 (22:20 -0700)
committerZac Medico <zmedico@gentoo.org>
Fri, 3 Jun 2011 05:20:51 +0000 (22:20 -0700)
We want to force new_protect_filename to ensure that the user will see
all our changes via etc-update, even if file_to_write_to doesn't exist
yet.

pym/_emerge/depgraph.py
pym/portage/util/__init__.py

index b71d3648d5a0020e0e880225fcb485ed1942e0ba..b60fd19fb7f120eee2174902cb2fbf6c9814f00a 100644 (file)
@@ -5846,7 +5846,12 @@ class depgraph(object):
                        if file_contents is not None:
                                file_contents.extend(changes)
                                if protect_obj[root].isprotected(file_to_write_to):
-                                       file_to_write_to = new_protect_filename(file_to_write_to)
+                                       # We want to force new_protect_filename to ensure
+                                       # that the user will see all our changes via
+                                       # etc-update, even if file_to_write_to doesn't
+                                       # exist yet, so we specify force=True.
+                                       file_to_write_to = new_protect_filename(file_to_write_to,
+                                               force=True)
                                try:
                                        write_atomic(file_to_write_to, "".join(file_contents))
                                except PortageException:
index 94e4451adeb41bab24319a3a273134dbc9c611f9..138553a160b7106fe32eca5f625cd1a63c015317 100644 (file)
@@ -1473,9 +1473,11 @@ class ConfigProtect(object):
                                                masked = len(pmpath)
                return protected > masked
 
-def new_protect_filename(mydest, newmd5=None):
+def new_protect_filename(mydest, newmd5=None, force=False):
        """Resolves a config-protect filename for merging, optionally
-       using the last filename if the md5 matches.
+       using the last filename if the md5 matches. If force is True,
+       then a new filename will be generated even if mydest does not
+       exist yet.
        (dest,md5) ==> 'string'            --- path_to_target_filename
        (dest)     ==> ('next', 'highest') --- next_target and most-recent_target
        """
@@ -1489,7 +1491,8 @@ def new_protect_filename(mydest, newmd5=None):
        prot_num = -1
        last_pfile = ""
 
-       if not os.path.exists(mydest):
+       if not force and \
+               not os.path.exists(mydest):
                return mydest
 
        real_filename = os.path.basename(mydest)