repoman: bail out if unsupported manifest-hashes
authorZac Medico <zmedico@gentoo.org>
Tue, 4 Oct 2011 05:42:22 +0000 (22:42 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 4 Oct 2011 05:42:22 +0000 (22:42 -0700)
bin/repoman

index 711fce98bd2e8345f58bc0d96ecff6c65701b8c5..7943f54ef4e9e1eeaa56074981ee76c9791d9a0d 100755 (executable)
@@ -587,6 +587,31 @@ manifest_hashes = repo_config.manifest_hashes
 if manifest_hashes is None:
        manifest_hashes = portage.const.MANIFEST2_HASH_DEFAULTS
 
+if options.mode in ("commit", "fix", "manifest"):
+       if portage.const.MANIFEST2_REQUIRED_HASH not in manifest_hashes:
+               msg = ("The 'manifest-hashes' setting in the '%s' repository's "
+               "metadata/layout.conf does not contain the '%s' hash which "
+               "is required by this portage version. You will have to "
+               "upgrade portage if you want to generate valid manifests for "
+               "this repository.") % \
+               (repo_config.name, portage.const.MANIFEST2_REQUIRED_HASH)
+               for line in textwrap.wrap(msg, 70):
+                       logging.error(line)
+               sys.exit(1)
+
+       unsupported_hashes = manifest_hashes.difference(
+               portage.const.MANIFEST2_HASH_FUNCTIONS)
+       if unsupported_hashes:
+               msg = ("The 'manifest-hashes' setting in the '%s' repository's "
+               "metadata/layout.conf contains one or more hash types '%s' "
+               "which are not supported by this portage version. You will "
+               "have to upgrade portage if you want to generate valid "
+               "manifests for this repository.") % \
+               (repo_config.name, " ".join(sorted(unsupported_hashes)))
+               for line in textwrap.wrap(msg, 70):
+                       logging.error(line)
+               sys.exit(1)
+
 if "commit" == options.mode and \
        repo_config.name == "gentoo" and \
        "RMD160" in manifest_hashes and \