From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/
Date: Mon, 12 Sep 2011 21:27:30 +0000 (UTC) [thread overview]
Message-ID: <69613e420d5be52e413c7c60e571710c2597f58d.zmedico@gentoo> (raw)
commit: 69613e420d5be52e413c7c60e571710c2597f58d
Author: Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Thu Sep 1 21:36:45 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep 12 21:23:10 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=69613e42
add thin manifest support to the Manifest class
'thin' is just distfiles. This is primarily useful when the ebuild
lives in a vcs- git for example, which already has it's own checksums
to rely on.
---
pym/portage/manifest.py | 149 ++++++++++++++++++----------
pym/portage/package/ebuild/digestcheck.py | 2 +-
2 files changed, 97 insertions(+), 54 deletions(-)
diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py
index 13efab7..ef1a552 100644
--- a/pym/portage/manifest.py
+++ b/pym/portage/manifest.py
@@ -49,6 +49,12 @@ def guessManifestFileType(filename):
else:
return "DIST"
+def guessThinManifestFileType(filename):
+ type = guessManifestFileType(filename)
+ if type != "DIST":
+ return None
+ return "DIST"
+
def parseManifest2(mysplit):
myentry = None
if len(mysplit) > 4 and mysplit[0] in portage.const.MANIFEST2_IDENTIFIERS:
@@ -93,12 +99,14 @@ class Manifest2Entry(ManifestEntry):
class Manifest(object):
parsers = (parseManifest2,)
def __init__(self, pkgdir, distdir, fetchlist_dict=None,
- manifest1_compat=False, from_scratch=False):
+ manifest1_compat=False, from_scratch=False, thin=False):
""" create new Manifest instance for package in pkgdir
and add compability entries for old portage versions if manifest1_compat == True.
Do not parse Manifest file if from_scratch == True (only for internal use)
The fetchlist_dict parameter is required only for generation of
- a Manifest (not needed for parsing and checking sums)."""
+ a Manifest (not needed for parsing and checking sums).
+ If thin is specified, then the manifest carries only info for
+ distfiles."""
self.pkgdir = _unicode_decode(pkgdir).rstrip(os.sep) + os.sep
self.fhashdict = {}
self.hashes = set()
@@ -120,7 +128,11 @@ class Manifest(object):
else:
self.fetchlist_dict = {}
self.distdir = distdir
- self.guessType = guessManifestFileType
+ self.thin = thin
+ if thin:
+ self.guessType = guessThinManifestFileType
+ else:
+ self.guessType = guessManifestFileType
def getFullname(self):
""" Returns the absolute path to the Manifest file for this instance """
@@ -313,64 +325,20 @@ class Manifest(object):
distfilehashes = {}
self.__init__(self.pkgdir, self.distdir,
fetchlist_dict=self.fetchlist_dict, from_scratch=True,
- manifest1_compat=False)
- cpvlist = []
+ manifest1_compat=False, thin=self.thin)
pn = os.path.basename(self.pkgdir.rstrip(os.path.sep))
cat = self._pkgdir_category()
pkgdir = self.pkgdir
+ if self.thin:
+ cpvlist = self._update_thin_pkgdir(cat, pn, pkgdir)
+ else:
+ cpvlist = self._update_thick_pkgdir(cat, pn, pkgdir)
- for pkgdir, pkgdir_dirs, pkgdir_files in os.walk(pkgdir):
- break
- for f in pkgdir_files:
- try:
- f = _unicode_decode(f,
- encoding=_encodings['fs'], errors='strict')
- except UnicodeDecodeError:
- continue
- if f[:1] == ".":
- continue
- pf = None
- if f[-7:] == '.ebuild':
- pf = f[:-7]
- if pf is not None:
- mytype = "EBUILD"
- ps = portage.versions._pkgsplit(pf)
- cpv = "%s/%s" % (cat, pf)
- if not ps:
- raise PortagePackageException(
- _("Invalid package name: '%s'") % cpv)
- if ps[0] != pn:
- raise PortagePackageException(
- _("Package name does not "
- "match directory name: '%s'") % cpv)
- cpvlist.append(cpv)
- elif manifest2MiscfileFilter(f):
- mytype = "MISC"
- else:
- continue
- self.fhashdict[mytype][f] = perform_multiple_checksums(self.pkgdir+f, self.hashes)
- recursive_files = []
-
- pkgdir = self.pkgdir
- cut_len = len(os.path.join(pkgdir, "files") + os.sep)
- for parentdir, dirs, files in os.walk(os.path.join(pkgdir, "files")):
- for f in files:
- try:
- f = _unicode_decode(f,
- encoding=_encodings['fs'], errors='strict')
- except UnicodeDecodeError:
- continue
- full_path = os.path.join(parentdir, f)
- recursive_files.append(full_path[cut_len:])
- for f in recursive_files:
- if not manifest2AuxfileFilter(f):
- continue
- self.fhashdict["AUX"][f] = perform_multiple_checksums(
- os.path.join(self.pkgdir, "files", f.lstrip(os.sep)), self.hashes)
distlist = set()
for cpv in cpvlist:
distlist.update(self._getCpvDistfiles(cpv))
+
if requiredDistfiles is None:
# This allows us to force removal of stale digests for the
# ebuild --force digest option (no distfiles are required).
@@ -404,6 +372,81 @@ class Manifest(object):
if f in requiredDistfiles:
raise
+ def _is_cpv(self, cat, pn, filename):
+ if not filename.endswith(".ebuild"):
+ return None
+ pf = filename[:-7]
+ if pf is None:
+ return None
+ ps = portage.versions._pkgsplit(pf)
+ cpv = "%s/%s" % (cat, pf)
+ if not ps:
+ raise PortagePackageException(
+ _("Invalid package name: '%s'") % cpv)
+ if ps[0] != pn:
+ raise PortagePackageException(
+ _("Package name does not "
+ "match directory name: '%s'") % cpv)
+ return cpv
+
+ def _update_thin_pkgdir(self, cat, pn, pkgdir):
+ for pkgdir, pkgdir_dirs, pkgdir_files in os.walk(pkgdir):
+ break
+ cpvlist = []
+ for f in pkgdir_files:
+ try:
+ f = _unicode_decode(f,
+ encoding=_encodings['fs'], errors='strict')
+ except UnicodeDecodeError:
+ continue
+ if f[:1] == '.':
+ continue
+ pf = self._is_cpv(cat, pn, f)
+ if pf is not None:
+ cpvlist.append(pf)
+ return cpvlist
+
+ def _update_thick_pkgdir(self, cat, pn, pkgdir):
+ cpvlist = []
+ for pkgdir, pkgdir_dirs, pkgdir_files in os.walk(pkgdir):
+ break
+ for f in pkgdir_files:
+ try:
+ f = _unicode_decode(f,
+ encoding=_encodings['fs'], errors='strict')
+ except UnicodeDecodeError:
+ continue
+ if f[:1] == ".":
+ continue
+ pf = self._is_cpv(cat, pn, f)
+ if pf is not None:
+ mytype = "EBUILD"
+ cpvlist.append(pf)
+ elif manifest2MiscfileFilter(f):
+ mytype = "MISC"
+ else:
+ continue
+ self.fhashdict[mytype][f] = perform_multiple_checksums(self.pkgdir+f, self.hashes)
+ recursive_files = []
+
+ pkgdir = self.pkgdir
+ cut_len = len(os.path.join(pkgdir, "files") + os.sep)
+ for parentdir, dirs, files in os.walk(os.path.join(pkgdir, "files")):
+ for f in files:
+ try:
+ f = _unicode_decode(f,
+ encoding=_encodings['fs'], errors='strict')
+ except UnicodeDecodeError:
+ continue
+ full_path = os.path.join(parentdir, f)
+ recursive_files.append(full_path[cut_len:])
+ for f in recursive_files:
+ if not manifest2AuxfileFilter(f):
+ continue
+ self.fhashdict["AUX"][f] = perform_multiple_checksums(
+ os.path.join(self.pkgdir, "files", f.lstrip(os.sep)), self.hashes)
+ return cpvlist
+
def _pkgdir_category(self):
return self.pkgdir.rstrip(os.sep).split(os.sep)[-2]
diff --git a/pym/portage/package/ebuild/digestcheck.py b/pym/portage/package/ebuild/digestcheck.py
index d184301..466fd05 100644
--- a/pym/portage/package/ebuild/digestcheck.py
+++ b/pym/portage/package/ebuild/digestcheck.py
@@ -92,7 +92,7 @@ def digestcheck(myfiles, mysettings, strict=False, justmanifest=None, mf=None):
writemsg(_("!!! Got: %s\n") % e.value[2], noiselevel=-1)
writemsg(_("!!! Expected: %s\n") % e.value[3], noiselevel=-1)
return 0
- if allow_missing:
+ if allow_missing or mf.thin:
# In this case we ignore any missing digests that
# would otherwise be detected below.
return 1
next reply other threads:[~2011-09-12 21:27 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-12 21:27 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-07-12 19:49 [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/ Zac Medico
2012-09-20 3:14 Zac Medico
2014-02-05 18:13 Arfrever Frehtes Taifersar Arahesis
2014-09-11 23:45 Brian Dolbec
2014-11-15 5:19 Zac Medico
2015-04-06 5:13 Zac Medico
2018-03-28 5:50 Zac Medico
2018-03-28 5:50 Zac Medico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=69613e420d5be52e413c7c60e571710c2597f58d.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox