Merged from trunk 9509:9538
authorFabian Groffen <grobian@gentoo.org>
Fri, 28 Mar 2008 21:25:26 +0000 (21:25 -0000)
committerFabian Groffen <grobian@gentoo.org>
Fri, 28 Mar 2008 21:25:26 +0000 (21:25 -0000)
   | 9510    | Support ${HOST} substitution in "From" field. Thanks to      |
   | zmedico | wschlich.                                                    |

   | 9511    | Move the default empty compiler flag settings from ebuild.sh |
   | zmedico | to make.globals (bug #214499).                               |

   | 9512    | Bug #214879 - In fetch(), only parse the Manifest when       |
   | zmedico | FEATURES=strict is enabled.                                  |

   | 9513    | Make --noreplace take precedence over --newuse, as suggested |
   | zmedico | by wolf31o2.                                                 |

   | 9514    | Fix the noreplace logic to break out of the cpv loop early   |
   | zmedico | since there's no point in examining any lower versions from  |
   |         | the same repo.                                               |

   | 9519    | Bug #214879 - Fix FEATURES=-strict behavior so that          |
   | zmedico | distfiles digests are always checked.                        |

   | 9520    | Bug #212509 - Implement a new --without-mask option that     |
   | zmedico | causes repoman to behave as if there are no package.mask     |
   |         | entries.                                                     |

   | 9521    | Bug #212509 - Display a note about the --without-mask option |
   | zmedico | when there are masked packages.                              |

   | 9522    | Bug #209418 - Add a new KEYWORDS.dropped check that compares |
   | zmedico | keywords against the keywords of earlier ebuild versions     |
   |         | within a slot.                                               |

   | 9523    | Remove redundant info from the KEYWORDS.dropped message.     |
   | zmedico |                                                              |

   | 9524    | Bug #213629 - Create an EAPI.incompatible category and use   |
   | zmedico | it in cases where EAPI=0 and a slot atom is encountered.     |

   | 9525    | Bug #213629 - Use EAPI.incompatible in cases where EAPI=0    |
   | zmedico | and a default IUSE is encountered.                           |

   | 9526    | Bug #213698 - Make FEAUTURES=keepwork and keeptemp preserve  |
   | zmedico | ${T}/environment since it may contain essential state.       |

   | 9527    | Make dyn_clean() consistent wrt removal of                   |
   | zmedico | ${PORTAGE_BUILDDIR}/image and ${PORTAGE_BUILDDIR}/.installed |
   |         | since otherwise with FEATURES=keepwork dyn_install() will    |
   |         | not call src_install() as necessary to repopulate            |
   |         | ${PORTAGE_BUILDDIR}/image (resulting in install_qa_check     |
   |         | failure due to absence of ${PORTAGE_BUILDDIR}/image).        |

   | 9528    | Bug #214619 - Add support for a PORTAGE_BINPKG_TAR_OPTS      |
   | zmedico | variable that allows the user to specify tar command options |
   |         | for binary package creation.                                 |

   | 9537    | Disable tarsync when using lzma compression since it doesn't |
   | zmedico | seem to be supported.                                        |

   | 9538    | * Skip the recusive chown call if it fails on the top level  |
   | zmedico | directory since it's possible that emerge-webrsync is not    |
   |         | run by root. * Just chown to portage:portage instead of      |
   |         | using PORTAGE_INST_{UID,GID}.  Prefix: use PORTAGE_USER and  |
   |         | PORTAGE_GROUP instead.                                       |

svn path=/main/branches/prefix/; revision=9583

12 files changed:
bin/ebuild.sh
bin/emerge-webrsync
bin/isolated-functions.sh
bin/misc-functions.sh
bin/repoman
cnf/make.globals
man/make.conf.5
man/repoman.1
pym/_emerge/__init__.py
pym/portage/__init__.py
pym/portage/elog/mod_mail.py
pym/portage/elog/mod_mail_summary.py

index 5251f7951bbb7ebea2c6b50365bc655cbc21f2ba..7811e439bab7d72bd15e40c380975c68b175d4f1 100755 (executable)
@@ -273,12 +273,6 @@ export LIBOPTIONS="-m0644"
 export DIROPTIONS="-m0755"
 export MOPREFIX=${PN}
 
-# When compiler flags are unset, many packages will substitute their own
-# implicit flags. For uniformity, use an empty string as the default.
-[ "${CFLAGS-unset}"    == "unset" ] && export CFLAGS=""
-[ "${CXXFLAGS-unset}"  == "unset" ] && export CXXFLAGS=""
-[ "${LDFLAGS-unset}"   == "unset" ] && export LDFLAGS=""
-
 check_KV() {
        if [ -z "${KV}" ]; then
                eerror ""
@@ -676,11 +670,9 @@ dyn_unpack() {
        if [ "${newstuff}" == "yes" ]; then
                # We don't necessarily have privileges to do a full dyn_clean here.
                rm -rf "${WORKDIR}"
-               if [ -d "${T}" ] && ! hasq keeptemp ${FEATURES} ; then
+               if [ -d "${T}" ] && \
+                       ! hasq keeptemp $FEATURES && ! hasq keepwork $FEATURES ; then
                        rm -rf "${T}" && mkdir "${T}"
-               else
-                       [ -e "${T}/environment" ] && \
-                               mv "${T}/environment" "${T}/environment.keeptemp"
                fi
        fi
        if [ -e "${WORKDIR}" ]; then
@@ -717,11 +709,10 @@ dyn_clean() {
        fi
 
        rm -rf "${PORTAGE_BUILDDIR}/image" "${PORTAGE_BUILDDIR}/homedir"
+       rm -f "${PORTAGE_BUILDDIR}/.installed"
 
-       if ! hasq keeptemp $FEATURES; then
+       if ! hasq keeptemp $FEATURES && ! hasq keepwork $FEATURES ; then
                rm -rf "${T}"
-       else
-               [ -e "${T}/environment" ] && mv "${T}/environment" "${T}/environment.keeptemp"
        fi
 
        if ! hasq keepwork $FEATURES; then
@@ -730,7 +721,6 @@ dyn_clean() {
                rm -rf "${PORTAGE_BUILDDIR}/.unpacked"
                rm -rf "${PORTAGE_BUILDDIR}/.compiled"
                rm -rf "${PORTAGE_BUILDDIR}/.tested"
-               rm -rf "${PORTAGE_BUILDDIR}/.installed"
                rm -rf "${PORTAGE_BUILDDIR}/.packaged"
                rm -rf "${PORTAGE_BUILDDIR}/build-info"
                rm -rf "${WORKDIR}"
index 0910bd939e9fdfa6bef8aa2f4533d1b4a2ef13c9..324837d3936fff6f54f4a72467dc4cb1f34f80db 100755 (executable)
@@ -33,7 +33,7 @@ if ! type portageq > /dev/null ; then
        exit 1
 fi
 eval $(portageq envvar -v FEATURES FETCHCOMMAND GENTOO_MIRRORS \
-       PORTAGE_BIN_PATH PORTAGE_GPG_DIR PORTAGE_INST_UID PORTAGE_INST_GID \
+       PORTAGE_BIN_PATH PORTAGE_GPG_DIR \
        PORTAGE_NICENESS PORTAGE_RSYNC_EXTRA_OPTS PORTAGE_TMPDIR PORTDIR \
        http_proxy ftp_proxy EPREFIX)
 DISTDIR="${PORTAGE_TMPDIR}/emerge-webrsync"
@@ -173,7 +173,8 @@ sync_local() {
 
        vecho "Syncing local tree ..."
 
-       if type -P tarsync &> /dev/null; then
+       # tarsync-0.2.1 doesn't seem to support lzma compression.
+       if [ "${file##*.}" != "lzma" ] && type -P tarsync &> /dev/null; then
                if ! tarsync $(vvecho -v) -s 1 -o portage -g portage -e /distfiles -e /packages -e /local "${file}" "${PORTDIR}"; then
                        eecho "tarsync failed; tarball is corrupt? (${file})"
                        return 1
@@ -188,8 +189,9 @@ sync_local() {
                # Free disk space
                rm -f "${file}"
 
-               # Make sure user and group file ownership is ${PORTAGE_INST_UID}:${PORTAGE_INST_GID}
-               chown -R ${PORTAGE_INST_UID:-0}:${PORTAGE_INST_GID:-0} portage
+               chown ${PORTAGE_USER:-portage}:${PORTAGE_GROUP:-portage} portage &> /dev/null && \
+                       chown -R ${PORTAGE_USER:-portage}:${PORTAGE_GROUP:-portage} portage
+
                cd portage
                rsync -av --progress --stats --delete --delete-after \
                        --exclude='/distfiles' --exclude='/packages' \
index 239524ce5718c31051f24373562f6954acc0e83e..e525e5f8725741398fb8b101797ac33464b7218e 100755 (executable)
@@ -481,7 +481,7 @@ save_ebuild_env() {
                        LAST_E_CMD LAST_E_LEN LD_PRELOAD MISC_FUNCTIONS_ARGS MOPREFIX \
                        NORMAL PKGDIR PKGUSE PKG_LOGDIR PKG_TMPDIR \
                        PORTAGE_ACTUAL_DISTDIR PORTAGE_ARCHLIST PORTAGE_BASHRC \
-                       PORTAGE_BINPKG_TMPFILE PORTAGE_BUILDDIR \
+                       PORTAGE_BINPKG_TAR_OPTS PORTAGE_BINPKG_TMPFILE PORTAGE_BUILDDIR \
                        PORTAGE_COLORMAP PORTAGE_CONFIGROOT PORTAGE_DEBUG \
                        PORTAGE_DEPCACHEDIR PORTAGE_GID PORTAGE_INST_GID \
                        PORTAGE_INST_UID PORTAGE_LOG_FILE PORTAGE_MASTER_PID \
index 38c64c59ea9c8c75849ce712ccc9cf1df3d71d85..7736974d259ca453780fb9eaed74248e7eda14e4 100644 (file)
@@ -659,7 +659,8 @@ dyn_package() {
        [ -z "${PORTAGE_BINPKG_TMPFILE}" ] && \
                PORTAGE_BINPKG_TMPFILE="${PKGDIR}/${CATEGORY}/${PF}.tbz2"
        mkdir -p "${PORTAGE_BINPKG_TMPFILE%/*}" || die "mkdir failed"
-       tar ${tar_options} -cf - . | bzip2 -f > "${PORTAGE_BINPKG_TMPFILE}" || \
+       tar $tar_options -cf - $PORTAGE_BINPKG_TAR_OPTS . | \
+               bzip2 -f > "$PORTAGE_BINPKG_TMPFILE" || \
                die "Failed to create tarball"
        cd ..
        export PYTHONPATH=${PORTAGE_PYM_PATH:-${EPREFIX}/usr/lib/portage/pym}
index 7ffabda08c5de9a0711e826de7cd3fd3145a89b0..94802c4eb3829e6dbff4c1535fc359911cb74e2c 100755 (executable)
@@ -183,8 +183,11 @@ def ParseArgs(args, qahelp):
        parser.add_option('-i', '--ignore-arches', dest='ignore_arches', action='store_true',
                default=False, help='ignore arch-specific failures (where arch != host)')
 
-       parser.add_option('-I', '--ignored-masked', dest='ignore_masked', action='store_true',
-               default=False, help='ignore masked packages (not allowed with commit mode')
+       parser.add_option('-I', '--ignore-masked', dest='ignore_masked', action='store_true',
+               default=False, help='ignore masked packages (not allowed with commit mode)')
+
+       parser.add_option('--without-mask', dest='without_mask', action='store_true',
+               default=False, help='behave as if no package.mask entries exist')
 
        parser.add_option('--mode', type='choice', dest='mode', choices=modes.keys(), 
                help='specify which mode repoman will run in (default=full)')
@@ -245,12 +248,14 @@ qahelp={
        "file.size":"Files in the files directory must be under 20k",
        "file.name":"File/dir name must be composed of only the following chars: %s " % allowed_filename_chars,
        "file.UTF8":"File is not UTF8 compliant",
+       "KEYWORDS.dropped":"Ebuilds that appear to have dropped KEYWORDS for some arch",
        "KEYWORDS.missing":"Ebuilds that have a missing or empty KEYWORDS variable",
        "KEYWORDS.stable":"Ebuilds that have been added directly with stable KEYWORDS",
        "KEYWORDS.stupid":"Ebuilds that use KEYWORDS=-* instead of package.mask", 
        "LICENSE.missing":"Ebuilds that have a missing or empty LICENSE variable",
        "DESCRIPTION.missing":"Ebuilds that have a missing or empty DESCRIPTION variable",
        "DESCRIPTION.toolong":"DESCRIPTION is over %d characters" % max_desc_len,
+       "EAPI.incompatible":"Ebuilds that use features that are only available with a different EAPI",
        "EAPI.unsupported":"Ebuilds that have an unsupported EAPI version (you must upgrade portage)",
        "SLOT.missing":"Ebuilds that have a missing or empty SLOT variable",
        "HOMEPAGE.missing":"Ebuilds that have a missing or empty HOMEPAGE variable",
@@ -312,6 +317,7 @@ qawarnings=[
 "DEPEND.badindev","RDEPEND.badindev","PDEPEND.badindev",
 "DEPEND.badmaskedindev","RDEPEND.badmaskedindev","PDEPEND.badmaskedindev",
 "DESCRIPTION.toolong",
+"KEYWORDS.dropped",
 "KEYWORDS.stupid",
 "KEYWORDS.missing",
 "RESTRICT.invalid",
@@ -695,6 +701,7 @@ if vcs == "cvs":
        new_ebuilds.update(x for x in mynew if x.endswith(".ebuild"))
        del mycvstree, mynew
 
+have_masked = False
 dofail = 0
 arch_caches={}
 arch_xmatch_caches = {}
@@ -746,7 +753,19 @@ for x in scanlist:
                                fails["EAPI.unsupported"].append(os.path.join(x, y))
                                continue
                        ebuild_metadata[pf] = myaux
-       ebuildlist.sort()
+
+       # Sort ebuilds in ascending order for the KEYWORDS.dropped check.
+       pkgsplits = {}
+       for i in xrange(len(ebuildlist)):
+               ebuild_split = portage.pkgsplit(ebuildlist[i])
+               pkgsplits[ebuild_split] = ebuildlist[i]
+               ebuildlist[i] = ebuild_split
+       ebuildlist.sort(portage.pkgcmp)
+       for i in xrange(len(ebuildlist)):
+               ebuildlist[i] = pkgsplits[ebuildlist[i]]
+       del pkgsplits
+
+       slot_keywords = {}
 
        if len(ebuild_metadata) != len(ebuildlist):
                # If we can't access all the metadata then it's totally unsafe to
@@ -1005,6 +1024,7 @@ for x in scanlist:
                        continue
 
                myaux = ebuild_metadata[y]
+               eapi = myaux["EAPI"]
 
                # Test for negative logic and bad words in the RESTRICT var.
                #for x in myaux[allvars.index("RESTRICT")].split():
@@ -1066,6 +1086,22 @@ for x in scanlist:
                                        x + "/" + y + ".ebuild added with stable keywords: %s" % \
                                                " ".join(stable_keywords))
 
+               ebuild_archs = set(kw.lstrip("~") for kw in keywords \
+                       if not kw.startswith("-"))
+
+               previous_keywords = slot_keywords.get(myaux["SLOT"])
+               if previous_keywords is None:
+                       slot_keywords[myaux["SLOT"]] = set()
+               else:
+                       dropped_keywords = previous_keywords.difference(ebuild_archs)
+                       if dropped_keywords:
+                               stats["KEYWORDS.dropped"] += 1
+                               fails["KEYWORDS.dropped"].append(
+                                       relative_path + ": %s" % \
+                                       " ".join(sorted(dropped_keywords)))
+
+               slot_keywords[myaux["SLOT"]].update(ebuild_archs)
+
                # KEYWORDS="-*" is a stupid replacement for package.mask and screws general KEYWORDS semantics
                if "-*" in keywords:
                        haskeyword = False
@@ -1160,15 +1196,22 @@ for x in scanlist:
                                if myteststr.find(token) != -1:
                                        badsyntax.append("'%s' not separated by space" % (token))
 
-
                        if mytype in ("DEPEND", "RDEPEND", "PDEPEND"):
                                for token in mydepstr.split():
                                        if token in operator_tokens or \
                                                token.endswith("?"):
                                                continue
-                                       if not portage.isvalidatom(token, allow_blockers=True) or \
-                                               ":" in token and myaux["EAPI"] == "0":
+                                       if not portage.isvalidatom(token, allow_blockers=True):
                                                badsyntax.append("'%s' not a valid atom" % token)
+                                       else:
+                                               atom = token.lstrip("!")
+                                               if eapi == "0":
+                                                       if portage.dep.dep_getslot(atom):
+                                                               stats['EAPI.incompatible'] += 1
+                                                               fails['EAPI.incompatible'].append(
+                                                                       (relative_path + ": %s slot dependency" + \
+                                                                       " not supported with EAPI='%s':" + \
+                                                                       " '%s'") % (mytype, eapi, atom))
 
                        type_list.extend([mytype] * (len(badsyntax) - len(type_list)))
 
@@ -1198,8 +1241,15 @@ for x in scanlist:
                        for mypos in range(len(myuse)-1,-1,-1):
                                if myuse[mypos] and (myuse[mypos] in luselist[mykey]):
                                        del myuse[mypos]
-               if default_use and myaux["EAPI"] == "0":
-                       myuse += default_use
+
+               if default_use and eapi == "0":
+                       for myflag in default_use:
+                               stats['EAPI.incompatible'] += 1
+                               fails['EAPI.incompatible'].append(
+                                       (relative_path + ": IUSE defaults" + \
+                                       " not supported with EAPI='%s':" + \
+                                       " '%s'") % (eapi, myflag))
+
                for mypos in range(len(myuse)):
                        stats["IUSE.invalid"]=stats["IUSE.invalid"]+1
                        fails["IUSE.invalid"].append(x+"/"+y+".ebuild: %s" % myuse[mypos])      
@@ -1291,6 +1341,8 @@ for x in scanlist:
                                                config_profile_path=profdir,
                                                config_incrementals=portage.const.INCREMENTALS,
                                                local_config=False)
+                                       if options.without_mask:
+                                               dep_settings.pmaskdict.clear()
                                        arch_caches[prof[0]] = dep_settings
                                        while True:
                                                try:
@@ -1328,6 +1380,7 @@ for x in scanlist:
                                        ismasked = os.path.join(catdir, y) not in \
                                                portdb.xmatch("list-visible", x)
                                        if ismasked:
+                                               have_masked = True
                                                if options.ignore_masked:
                                                        continue
                                                #we are testing deps for a masked package; give it some lee-way
@@ -1453,6 +1506,10 @@ def grouplist(mylist,seperator="/"):
                        mygroups[xs[0]]+=[seperator.join(xs[1:])]
        return mygroups
 
+if have_masked and not (options.without_mask or options.ignore_masked):
+       print bold("Note: use --without-mask to check " + \
+               "KEYWORDS on dependencies of masked packages")
+
 if options.mode != 'commit':
        if dofull:
                print bold("Note: type \"repoman full\" for a complete listing.")
index 6417cd767896d52e5b24fbc41899e02e824b5011..1c848a749036ce6c18600d694d2de20a7d232a02 100644 (file)
 # **  USE, CONFIG_*, and FEATURES are incremental  **
 # ***************************************************
 
+# When compiler flags are unset, many packages will substitute their own
+# implicit flags. For uniformity, use an empty string as the default.
+CFLAGS=""
+CXXFLAGS=""
+LDFLAGS=""
 
 # Default rsync mirror
 SYNC="rsync://rsync.gentoo.org/gentoo-portage"
index 5c8fc022b38311792e7500b53a5779448058270e..d5d21a6f8f73ebc056f1d2868a66ce42521396e6 100644 (file)
@@ -272,7 +272,7 @@ stored for later use by various debuggers.  This feature is disabled by
 .TP
 .B strict
 Have portage react strongly to conditions that have the potential to be 
-dangerous (like missing or incorrect digests for ebuilds or distfiles).
+dangerous (like missing or incorrect digests for ebuilds).
 .TP
 .B stricter
 Have portage react strongly to conditions that may conflict with system
@@ -382,6 +382,10 @@ use the URI header field as a base URI for fetching binary packages. If the URI
 header field is not defined then the client will use it's ${PORTAGE_BINHOST}
 setting as the base URI.
 .TP
+.B PORTAGE_BINPKG_TAR_OPTS
+This variable contains options to be passed to the tar command for creation
+of binary packages.
+.TP
 \fBPORTAGE_COMPRESS\fR = \fI"bzip2"\fR
 This variable contains the command used to compress documentation during the
 install phase.
index 037f5db2e7709beb780aa7d82ecf5ef1f112ca16..f217524251b9a9c26a80f3da077bfa1816374673 100644 (file)
@@ -34,9 +34,15 @@ Forces the metadata.xml parse check to be carried out
 \fB-v\fR, \fB--verbose\fR
 Displays every package name while checking
 .TP
-\fB-I\fR, \fB--ignore-arches\fR
+\fB\-i\fR, \fB\-\-ignore\-arches\fR
 Ignore arch-specific failures (where arch != host)
 .TP
+\fB\-I\fR, \fB\-\-ignore\-masked\fR
+Ignore masked packages (not allowed with commit mode)
+.TP
+\fB\-\-without\-mask\fR
+Behave as if no package.mask entries exist
+.TP
 \fB-m\fR, \fB--commitmsg\fR
 Adds a commit message via the command line
 .TP
@@ -96,6 +102,9 @@ Syntax error in DEPEND (usually an extra/missing space/parenthesis)
 .B DESCRIPTION.missing
 Ebuilds that have a missing or empty DESCRIPTION variable
 .TP
+.B EAPI.incompatible
+Ebuilds that use features that are only available with a different EAPI
+.TP
 .B EAPI.unsupported
 Ebuilds that have an unsupported EAPI version (you must upgrade portage)
 .TP
@@ -105,6 +114,9 @@ Ebuilds that have a missing or empty HOMEPAGE variable
 .B IUSE.invalid
 This build has a variable in IUSE that is not in the use.desc or use.local.desc file
 .TP
+.B KEYWORDS.dropped
+Ebuilds that appear to have dropped KEYWORDS for some arch
+.TP
 .B KEYWORDS.invalid
 This ebuild contains KEYWORDS that are not listed in profiles/arch.list or for which no valid profile was found
 .TP
index 0602c9cfbb7acb3788f90b1f84be6b700a6be40b..cd49064bd811c9099838bd5d97cd0276ce68f572 100644 (file)
@@ -2599,6 +2599,7 @@ class depgraph(object):
                usepkgonly = "--usepkgonly" in self.myopts
                empty = "empty" in self.myparams
                selective = "selective" in self.myparams
+               noreplace = "--noreplace" in self.myopts
                reinstall = False
                # Behavior of the "selective" parameter depends on
                # whether or not a package matches an argument atom.
@@ -2633,6 +2634,10 @@ class depgraph(object):
                                # descending order
                                cpv_list.reverse()
                                for cpv in cpv_list:
+                                       # Make --noreplace take precedence over --newuse.
+                                       if not installed and noreplace and \
+                                               cpv in vardb.match(atom):
+                                               break
                                        reinstall_for_flags = None
                                        try:
                                                metadata = dict(izip(db_keys,
index 3ebb253a9105ade130bea1a32be9b5587e55fb8c..d0653e0508e08921a5f6c83d074e81d18c2c4d4f 100644 (file)
@@ -883,7 +883,8 @@ class config(object):
                "PKGUSE", "PKG_LOGDIR", "PKG_TMPDIR",
                "PORTAGE_ACTUAL_DISTDIR", "PORTAGE_ARCHLIST",
                "PORTAGE_BASHRC",
-               "PORTAGE_BINPKG_FILE", "PORTAGE_BINPKG_TMPFILE",
+               "PORTAGE_BINPKG_FILE", "PORTAGE_BINPKG_TAR_OPTS",
+               "PORTAGE_BINPKG_TMPFILE",
                "PORTAGE_BIN_PATH",
                "PORTAGE_BUILDDIR", "PORTAGE_COLORMAP",
                "PORTAGE_CONFIGROOT", "PORTAGE_DEBUG", "PORTAGE_DEPCACHEDIR",
@@ -3120,7 +3121,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                        mymirrors += [x.rstrip("/") for x in mysettings["GENTOO_MIRRORS"].split() if x]
 
        pkgdir = mysettings.get("O")
-       if pkgdir:
+       if pkgdir is not None:
                mydigests = Manifest(
                        pkgdir, mysettings["DISTDIR"]).getTypeDigests("DIST")
        else:
@@ -3766,8 +3767,6 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
        """Verifies checksums.  Assumes all files have been downloaded.
        DEPRECATED: this is now only a compability wrapper for 
                    portage.manifest.Manifest()."""
-       if not strict:
-               return 1
        pkgdir = mysettings["O"]
        manifest_path = os.path.join(pkgdir, "Manifest")
        if not os.path.exists(manifest_path):
@@ -3779,15 +3778,16 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
        eout = portage.output.EOutput()
        eout.quiet = mysettings.get("PORTAGE_QUIET", None) == "1"
        try:
-               eout.ebegin("checking ebuild checksums ;-)")
-               mf.checkTypeHashes("EBUILD")
-               eout.eend(0)
-               eout.ebegin("checking auxfile checksums ;-)")
-               mf.checkTypeHashes("AUX")
-               eout.eend(0)
-               eout.ebegin("checking miscfile checksums ;-)")
-               mf.checkTypeHashes("MISC", ignoreMissingFiles=True)
-               eout.eend(0)
+               if strict:
+                       eout.ebegin("checking ebuild checksums ;-)")
+                       mf.checkTypeHashes("EBUILD")
+                       eout.eend(0)
+                       eout.ebegin("checking auxfile checksums ;-)")
+                       mf.checkTypeHashes("AUX")
+                       eout.eend(0)
+                       eout.ebegin("checking miscfile checksums ;-)")
+                       mf.checkTypeHashes("MISC", ignoreMissingFiles=True)
+                       eout.eend(0)
                for f in myfiles:
                        eout.ebegin("checking %s ;-)" % f)
                        mf.checkFileHashes(mf.findFile(f), f)
@@ -3814,7 +3814,8 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
                if f.endswith(".ebuild") and not mf.hasFile("EBUILD", f):
                        writemsg("!!! A file is not listed in the Manifest: '%s'\n" % \
                                os.path.join(pkgdir, f), noiselevel=-1)
-                       return 0
+                       if strict:
+                               return 0
        """ epatch will just grab all the patches out of a directory, so we have to
        make sure there aren't any foreign files that it might grab."""
        filesdir = os.path.join(pkgdir, "files")
@@ -3830,7 +3831,8 @@ def digestcheck(myfiles, mysettings, strict=0, justmanifest=0):
                        if file_type != "AUX" and not f.startswith("digest-"):
                                writemsg("!!! A file is not listed in the Manifest: '%s'\n" % \
                                        os.path.join(filesdir, f), noiselevel=-1)
-                               return 0
+                               if strict:
+                                       return 0
        return 1
 
 # parse actionmap to spawn ebuild with the appropriate args
index 922ea08465edb474f9ada34af0b1fc9c5240cc1e..09e3db22dcd7d321c23de5fe1db152ce23ac7757 100644 (file)
@@ -14,6 +14,7 @@ def process(mysettings, key, logentries, fulltext):
                myrecipient = "root@localhost"
        
        myfrom = mysettings["PORTAGE_ELOG_MAILFROM"]
+       myfrom = myfrom.replace("${HOST}", socket.getfqdn())
        mysubject = mysettings["PORTAGE_ELOG_MAILSUBJECT"]
        mysubject = mysubject.replace("${PACKAGE}", key)
        mysubject = mysubject.replace("${HOST}", socket.getfqdn())
index 2e870fe5deb58b441226ac8f0f8fc80f9a57530a..40a2484a637396547e7b267cb8e43f298c482db6 100644 (file)
@@ -39,6 +39,7 @@ def _finalize(mysettings, items):
                myrecipient = "root@localhost"
        
        myfrom = mysettings["PORTAGE_ELOG_MAILFROM"]
+       myfrom = myfrom.replace("${HOST}", socket.getfqdn())
        mysubject = mysettings["PORTAGE_ELOG_MAILSUBJECT"]
        mysubject = mysubject.replace("${PACKAGE}", count)
        mysubject = mysubject.replace("${HOST}", socket.getfqdn())