remaining packages and any with unsatisfied dependencies are
automatically dropped. The --skipfirst option automatically drops
packages in the same way, and also drops any masked packages.
-* Add subversion support for repoman.
+* Add git and subversion support for repoman.
* It is now possible to use `emerge <file>` to reinstall the package that
installed a particular file. Package contents entries are indexed to
improve performance. A command such as `emerge /lib/modules` can serve
PORTAGE_BINPKG_TMPFILE="${PKGDIR}/${CATEGORY}/${PF}.tbz2"
mkdir -p "${PORTAGE_BINPKG_TMPFILE%/*}" || die "mkdir failed"
tar $tar_options -cf - $PORTAGE_BINPKG_TAR_OPTS -C "${D}" . | \
- bzip2 -f > "$PORTAGE_BINPKG_TMPFILE" || \
- die "Failed to create tarball"
+ bzip2 -f > "$PORTAGE_BINPKG_TMPFILE"
+ assert
PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \
python -c "from portage import xpak; t=xpak.tbz2('${PORTAGE_BINPKG_TMPFILE}'); t.recompose('${PORTAGE_BUILDDIR}/build-info')"
if [ $? -ne 0 ]; then
myaux = pkg.metadata
eapi = myaux["EAPI"]
inherited = pkg.inherited
+ live_ebuild = live_eclasses.intersection(inherited)
if not src_uri_error:
# Check that URIs don't reference a server from thirdpartymirrors.
if catdir == "virtual" and \
missing_var in ("HOMEPAGE", "LICENSE"):
continue
+ if live_ebuild and missing_var == "KEYWORDS":
+ continue
myqakey=missingvars[pos]+".missing"
stats[myqakey]=stats[myqakey]+1
fails[myqakey].append(x+"/"+y+".ebuild")
previous_keywords = slot_keywords.get(myaux["SLOT"])
if previous_keywords is None:
slot_keywords[myaux["SLOT"]] = set()
- else:
+ elif not live_ebuild:
dropped_keywords = previous_keywords.difference(ebuild_archs)
if dropped_keywords:
stats["KEYWORDS.dropped"] += 1
Ebuilds that inherit a "Live" eclass (darcs,subversion,git,cvs,etc..) should
not be allowed to be marked stable
"""
- if live_eclasses.intersection(pkg.inherited):
+ if live_ebuild:
bad_stable_keywords = []
for keyword in keywords:
if not keyword.startswith("~") and \
print green("------------------------------------------------------------------------------")
print
+ # Having a leading ./ prefix on file paths can trigger a bug in
+ # the cvs server when committing files to multiple directories,
+ # so strip the prefix.
+ myfiles = [f.lstrip("./") for f in myfiles]
+
retval = None
if options.pretend:
if vcs == "cvs":
</section>
<section id='package-ebuild-eapi-2-metadata-dependencies-use'>
<title>USE Dependencies</title>
+ <para>
+ When used together with SLOT dependencies, USE dependencies
+ appear on the right hand side of SLOT dependencies.
+ </para>
<section id='package-ebuild-eapi-2-metadata-dependencies-use-unconditional'>
<title>Unconditional USE Dependencies</title>
<table><title>Syntax Examples</title>
Contains a list of URI's for the required source files. It can contain
multiple URI's for a single source file. The list is processed in order
if the file was not found on any of the \fIGENTOO_MIRRORS\fR.
+Beginning with \fBEAPI 2\fR, the output file name of a given URI may be
+customized with a "->" operator on the right hand side, followed by the
+desired output file name. All tokens, including the operator and output
+file name, should be separated by whitespace.
.TP
\fBHOMEPAGE\fR = \fI"http://happy.com/"\fR
Should contain a list of URL's for the sources main sites and other further
=dev\-libs/glib\-2\fI*\fR
\fI!\fR=net\-fs/samba\-2\fI*\fR
\fI~\fRnet\-libs/libnet\-1.0.2a
+\fI!!\fR<sys\-apps/portage\-2.1.4_rc1\fI\fR
.fi
\fI!\fR means block packages from being installed at the same time.
.br
+\fI!!\fR means block packages from being installed at the same time
+and explicitly disallow them from being temporarily installed
+simultaneously during a series of upgrades. This syntax is supported
+beginning with \fBEAPI 2\fR.
+.br
\fI*\fR means match any version of the package so long as the specified base
is matched. So with a version of '2*', we can match '2.1', '2.2', '2.2.1',
etc... and not match version '1.0', '3.0', '4.1', etc...
\fI>=\fRx11\-libs/qt-3.3.8:3
\fI=\fRx11\-libs/qt-3.3*:3
.fi
+.TP
+.B Atom USE
+Beginning with \fBEAPI 2\fR, any atom can be constrained to match specific
+\fBUSE\fR flag settings. When used together with \fBSLOT\fR dependencies,
+\fBUSE\fR dependencies appear on the right hand side of \fBSLOT\fR
+dependencies.
+
+.RS
+.TP
+.B Unconditional USE Dependencies
+.TS
+l l
+__
+l l.
+Example Meaning
+
+foo[bar] foo must have bar enabled
+foo[bar,baz] foo must have both bar and baz enabled
+foo[\-bar,baz] foo must have bar disabled and baz enabled
+.TE
+
+.TP
+.B Conditional USE Dependencies
+.TS
+l l
+__
+l l.
+Compact Form Equivalent Expanded Form
+
+foo[bar?] bar? ( foo[bar] ) !bar? ( foo )
+foo[!bar?] bar? ( foo ) !bar? ( foo[\-bar] )
+foo[bar=] bar? ( foo[bar] ) !bar? ( foo[\-bar] )
+foo[!bar=] bar? ( foo[\-bar] ) !bar? ( foo[bar] )
+.TE
+.RE
.RE
.TP
.B Dynamic DEPENDs
Calls the default phase function implementation for the currently executing
phase. This function is supported beginning with \fBEAPI 2\fR.
.TP
-.B default_pkg_nofetch
-Calls the default pkg_nofetch phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
-.TP
-.B default_src_unpack
-Calls the default src_unpack phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
-.TP
-.B default_src_prepare
-Calls the default src_prepare phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
-.TP
-.B default_src_configure
-Calls the default src_configure phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
-.TP
-.B default_src_compile
-Calls the default src_compile phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
-.TP
-.B default_src_test
-Calls the default src_test phase function implementation.
-This function is supported beginning with \fBEAPI 2\fR.
+.B default_*
+Beginning with \fBEAPI 2\fR, the default pkg_nofetch and src_* phase
+functions are accessible via a function having a name that begins with
+default_ and ends with the respective phase function name. For example,
+a call to a function with the name default_src_compile is equivalent to
+a call to the default src_compile implementation.
+
+.RS
+.TS
+l
+_
+l.
+Default Phase Functions
+
+default_pkg_nofetch
+default_src_unpack
+default_src_prepare
+default_src_configure
+default_src_compile
+default_src_test
+.TE
+.RE
.SH "HELPER FUNCTIONS: GENERAL"
.TP
\fBdie\fR \fI[reason]\fR
"""Ensure ebuilds have valid quoting around things like D,FILESDIR, etc..."""
repoman_check_name = 'ebuild.minorsyn'
- _ignored_commands = ["echo", "local", "export"]
- _ignored_commands += ["eerror", "einfo", "elog", "eqawarn", "ewarn"]
+ _message_commands = ["die", "echo", "eerror",
+ "einfo", "elog", "eqawarn", "ewarn"]
+ _message_re = re.compile(r'\s(' + "|".join(_message_commands) + \
+ r')\s+"[^"]*"\s*$')
+ _ignored_commands = ["local", "export"] + _message_commands
ignore_line = re.compile(r'(^$)|(^\s*#.*)|(^\s*\w+=.*)' + \
r'|(^\s*(' + "|".join(_ignored_commands) + r')\s+)')
var_names = ["D", "DISTDIR", "FILESDIR", "S", "T", "ROOT", "WORKDIR"]
if self.var_reference.search(group) is None:
continue
+ # Filter matches that appear to be an
+ # argument to a message command.
+ # For example: false || ewarn "foo $WORKDIR/bar baz"
+ message_match = self._message_re.search(line)
+ if message_match is not None and \
+ message_match.start() < pos and \
+ message_match.end() > pos:
+ break
+
# This is an attempt to avoid false positives without getting
# too complex, while possibly allowing some (hopefully
# unlikely) violations to slip through. We just assume