commit:     4ff4e4200b984a88109b10de9e82b20451751aee
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 20 20:35:42 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Sep 22 08:23:14 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4ff4e420

repoman: regen thick manifest after copyright update (bug 656698)

Bug: https://bugs.gentoo.org/656698

 repoman/lib/repoman/actions.py    | 40 ++++++++++++++++++++++++++++++++++++++-
 repoman/lib/repoman/copyrights.py | 10 ++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/repoman/lib/repoman/actions.py b/repoman/lib/repoman/actions.py
index 8e23322c8..9fe5f722e 100644
--- a/repoman/lib/repoman/actions.py
+++ b/repoman/lib/repoman/actions.py
@@ -151,10 +151,17 @@ the whole commit message to abort.
 
                # Update copyright for new and changed files
                year = time.strftime('%Y', time.gmtime())
+               updated_copyright = []
                for fn in chain(mynew, mychanged):
                        if fn.endswith('.diff') or fn.endswith('.patch'):
                                continue
-                       update_copyright(fn, year, pretend=self.options.pretend)
+                       if update_copyright(fn, year, 
pretend=self.options.pretend):
+                               updated_copyright.append(fn)
+
+               if updated_copyright and not (
+                       self.options.pretend or 
self.repo_settings.repo_config.thin_manifest):
+                       for cp in 
sorted(self._vcs_files_to_cps(iter(updated_copyright))):
+                               self._manifest_gen(cp)
 
                myupdates, broken_changelog_manifests = self.changelogs(
                                        myupdates, mymanifests, myremoved, 
mychanged, myautoadd,
@@ -230,6 +237,37 @@ the whole commit message to abort.
                        "\"If everyone were like you, I'd be out of 
business!\"\n")
                return
 
+       def _vcs_files_to_cps(self, vcs_file_iter):
+               """
+               Iterate over the given modified file paths returned from the 
vcs,
+               and return a frozenset containing category/pn strings for each
+               modified package.
+
+               @param vcs_file_iter: file paths from vcs module
+               @type iter
+               @rtype: frozenset
+               @return: category/pn strings for each package.
+               """
+               return vcs_files_to_cps(
+                       vcs_file_iter,
+                       self.repo_settings.repodir,
+                       self.scanner.repolevel,
+                       self.scanner.reposplit,
+                       self.scanner.categories)
+
+       def _manifest_gen(self, cp):
+               """
+               Generate manifest for a cp.
+
+               @param cp: category/pn string
+               @type str
+               @rtype: bool
+               @return: True if successful, False otherwise
+               """
+               self.repoman_settings["O"] = 
os.path.join(self.repo_settings.repodir, cp)
+               return not digestgen(
+                       mysettings=self.repoman_settings,
+                       myportdb=self.repo_settings.portdb)
 
        def _suggest(self):
                print()

diff --git a/repoman/lib/repoman/copyrights.py 
b/repoman/lib/repoman/copyrights.py
index 1eaaab660..275dcbc3f 100644
--- a/repoman/lib/repoman/copyrights.py
+++ b/repoman/lib/repoman/copyrights.py
@@ -67,6 +67,15 @@ def update_copyright(fn_path, year, pretend=False):
        Files are read and written in binary mode, so that this function
        will work correctly with files encoded in any character set, as
        long as the copyright statements consist of plain ASCII.
+
+       @param fn_path: file path
+       @type str
+       @param year: current year
+       @type str
+       @param pretend: pretend mode
+       @type bool
+       @rtype: bool
+       @return: True if copyright update was needed, False otherwise
        """
 
        try:
@@ -120,3 +129,4 @@ def update_copyright(fn_path, year, pretend=False):
                else:
                        util.apply_stat_permissions(fn_path, fn_stat)
        fn_hdl.close()
+       return difflines > 3

Reply via email to