public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: pym/portage/, pym/portage/repository/, man/, pym/portage/package/ebuild/
@ 2016-11-24 17:55 Zac Medico
  0 siblings, 0 replies; only message in thread
From: Zac Medico @ 2016-11-24 17:55 UTC (permalink / raw
  To: gentoo-commits

commit:     f8b1d840de9ffd9aa86dc8666d8915826ffa0f63
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Thu Nov 24 06:50:14 2016 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Thu Nov 24 17:44:12 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f8b1d840

repos.conf: support strict-misc-digests attribute (bug 600128)

This setting determines whether digests are checked for files declared
in the Manifest with MISC type (includes ChangeLog and metadata.xml
files). Defaults to true.

The current GLEP 60 draft specifies that non-strict handling of MISC
digests should be supported.

X-Gentoo-Bug: 600128
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=600128
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 man/portage.5                             |  9 ++++++++-
 pym/portage/manifest.py                   |  6 ++++--
 pym/portage/package/ebuild/digestcheck.py |  2 +-
 pym/portage/repository/config.py          | 18 ++++++++++++++----
 4 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/man/portage.5 b/man/portage.5
index 963f49d..2cacafc 100644
--- a/man/portage.5
+++ b/man/portage.5
@@ -1,4 +1,4 @@
-.TH "PORTAGE" "5" "Nov 2015" "Portage VERSION" "Portage"
+.TH "PORTAGE" "5" "Nov 2016" "Portage VERSION" "Portage"
 .SH NAME
 portage \- the heart of Gentoo
 .SH "DESCRIPTION"
@@ -961,6 +961,13 @@ since operations performed by these tools are inherently
 .B priority
 Specifies priority of given repository.
 .TP
+.B strict\-misc\-digests
+This setting determines whether digests are checked for files declared
+in the Manifest with MISC type (includes ChangeLog and metadata.xml
+files). Defaults to true.
+.br
+Valid values: true, false.
+.TP
 .B sync\-cvs\-repo
 Specifies CVS repository.
 .TP

diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py
index fe4166c..7278e21 100644
--- a/pym/portage/manifest.py
+++ b/pym/portage/manifest.py
@@ -129,7 +129,7 @@ class Manifest(object):
 	def __init__(self, pkgdir, distdir=None, fetchlist_dict=None,
 		manifest1_compat=DeprecationWarning, from_scratch=False, thin=False,
 		allow_missing=False, allow_create=True, hashes=None,
-		find_invalid_path_char=None):
+		find_invalid_path_char=None, strict_misc_digests=True):
 		""" Create new Manifest instance for package in pkgdir.
 		    Do not parse Manifest file if from_scratch == True (only for internal use)
 			The fetchlist_dict parameter is required only for generation of
@@ -173,6 +173,7 @@ class Manifest(object):
 			self.guessType = guessManifestFileType
 		self.allow_missing = allow_missing
 		self.allow_create = allow_create
+		self.strict_misc_digests = strict_misc_digests
 
 	def getFullname(self):
 		""" Returns the absolute path to the Manifest file for this instance """
@@ -461,7 +462,8 @@ class Manifest(object):
 			fetchlist_dict=self.fetchlist_dict, from_scratch=True,
 			thin=self.thin, allow_missing=self.allow_missing,
 			allow_create=self.allow_create, hashes=self.hashes,
-			find_invalid_path_char=self._find_invalid_path_char)
+			find_invalid_path_char=self._find_invalid_path_char,
+			strict_misc_digests=self.strict_misc_digests)
 		pn = os.path.basename(self.pkgdir.rstrip(os.path.sep))
 		cat = self._pkgdir_category()
 

diff --git a/pym/portage/package/ebuild/digestcheck.py b/pym/portage/package/ebuild/digestcheck.py
index e207ba8..502950f 100644
--- a/pym/portage/package/ebuild/digestcheck.py
+++ b/pym/portage/package/ebuild/digestcheck.py
@@ -48,7 +48,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
 				eout.ebegin(_("checking auxfile checksums ;-)"))
 				mf.checkTypeHashes("AUX", hash_filter=hash_filter)
 				eout.eend(0)
-			if mf.fhashdict.get("MISC"):
+			if mf.strict_misc_digests and mf.fhashdict.get("MISC"):
 				eout.ebegin(_("checking miscfile checksums ;-)"))
 				mf.checkTypeHashes("MISC", ignoreMissingFiles=True,
 					hash_filter=hash_filter)

diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 0512057..67c717d 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -80,7 +80,7 @@ class RepoConfig(object):
 		'find_invalid_path_char', 'force', 'format', 'local_config', 'location',
 		'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name',
 		'name', 'portage1_profiles', 'portage1_profiles_compat', 'priority',
-		'profile_formats', 'sign_commit', 'sign_manifest',
+		'profile_formats', 'sign_commit', 'sign_manifest', 'strict_misc_digests',
 		'sync_depth', 'sync_hooks_only_on_change',
 		'sync_type', 'sync_umask', 'sync_uri', 'sync_user', 'thin_manifest',
 		'update_changelog', '_eapis_banned', '_eapis_deprecated',
@@ -172,6 +172,9 @@ class RepoConfig(object):
 		self.sync_hooks_only_on_change = repo_opts.get(
 			'sync-hooks-only-on-change', 'false').lower() == 'true'
 
+		self.strict_misc_digests = repo_opts.get(
+			'strict-misc-digests', 'true').lower() == 'true'
+
 		self.module_specific_options = {}
 
 		# Not implemented.
@@ -326,6 +329,7 @@ class RepoConfig(object):
 		kwds['allow_missing'] = self.allow_missing_manifest
 		kwds['allow_create'] = self.create_manifest
 		kwds['hashes'] = self.manifest_hashes
+		kwds['strict_misc_digests'] = self.strict_misc_digests
 		if self.disable_manifest:
 			kwds['from_scratch'] = True
 		kwds['find_invalid_path_char'] = self.find_invalid_path_char
@@ -403,6 +407,8 @@ class RepoConfig(object):
 			repo_msg.append(indent + "format: " + self.format)
 		if self.location:
 			repo_msg.append(indent + "location: " + self.location)
+		if not self.strict_misc_digests:
+			repo_msg.append(indent + "strict-misc-digests: false")
 		if self.sync_type:
 			repo_msg.append(indent + "sync-type: " + self.sync_type)
 		if self.sync_umask:
@@ -500,7 +506,7 @@ class RepoConfigLoader(object):
 						# Selectively copy only the attributes which
 						# repos.conf is allowed to override.
 						for k in ('aliases', 'auto_sync', 'eclass_overrides',
-							'force', 'masters', 'priority',
+							'force', 'masters', 'priority', 'strict_misc_digests',
 							'sync_depth', 'sync_hooks_only_on_change',
 							'sync_type', 'sync_umask', 'sync_uri', 'sync_user',
 							'module_specific_options'):
@@ -922,12 +928,13 @@ class RepoConfigLoader(object):
 		return repo_name in self.prepos
 
 	def config_string(self):
+		bool_keys = ("strict_misc_digests",)
 		str_or_int_keys = ("auto_sync", "format", "location",
 			"main_repo", "priority",
 			"sync_type", "sync_umask", "sync_uri", 'sync_user')
 		str_tuple_keys = ("aliases", "eclass_overrides", "force")
 		repo_config_tuple_keys = ("masters",)
-		keys = str_or_int_keys + str_tuple_keys + repo_config_tuple_keys
+		keys = bool_keys + str_or_int_keys + str_tuple_keys + repo_config_tuple_keys
 		config_string = ""
 		for repo_name, repo in sorted(self.prepos.items(), key=lambda x: (x[0] != "DEFAULT", x[0])):
 			config_string += "\n[%s]\n" % repo_name
@@ -935,7 +942,10 @@ class RepoConfigLoader(object):
 				if key == "main_repo" and repo_name != "DEFAULT":
 					continue
 				if getattr(repo, key) is not None:
-					if key in str_or_int_keys:
+					if key in bool_keys:
+						config_string += "%s = %s\n" % (key.replace("_", "-"),
+							'true' if getattr(repo, key) else 'false')
+					elif key in str_or_int_keys:
 						config_string += "%s = %s\n" % (key.replace("_", "-"), getattr(repo, key))
 					elif key in str_tuple_keys:
 						config_string += "%s = %s\n" % (key.replace("_", "-"), " ".join(getattr(repo, key)))


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-11-24 17:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-24 17:55 [gentoo-commits] proj/portage:master commit in: pym/portage/, pym/portage/repository/, man/, pym/portage/package/ebuild/ Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox