aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2018-09-20 13:35:42 -0700
committerZac Medico <zmedico@gentoo.org>2018-09-22 01:23:14 -0700
commit4ff4e4200b984a88109b10de9e82b20451751aee (patch)
treee94950be36108e50ca30dbe58f2d540db6c814c2
parentecompress: Run compression in parallel (diff)
downloadportage-4ff4e4200b984a88109b10de9e82b20451751aee.tar.gz
portage-4ff4e4200b984a88109b10de9e82b20451751aee.tar.bz2
portage-4ff4e4200b984a88109b10de9e82b20451751aee.zip
repoman: regen thick manifest after copyright update (bug 656698)
Bug: https://bugs.gentoo.org/656698
-rw-r--r--repoman/lib/repoman/actions.py40
-rw-r--r--repoman/lib/repoman/copyrights.py10
2 files changed, 49 insertions, 1 deletions
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