[pacman-dev] [PATCH 1/3] makepkg: Better error messages for versions in (check, make, opt)depends/provides/conflicts

Luke Shumaker lukeshu at lukeshu.com
Wed Aug 8 04:20:41 UTC 2018


On Wed, 08 Aug 2018 00:05:25 -0400,
Eli Schwartz wrote:
> 
> On 08/07/2018 11:16 PM, Luke Shumaker wrote:
> > +check_fullpkgver() {
> > +	local fullver=$1 type=$2
> > +	local ret=0
> > +
> > +	# If there are multiple colons or multiple hyphens, there's a
> > +	# question of how we split it--it's invalid either way, but it
> > +	# will affect error messages.  Let's mimic version.c:parseEVR().
> > +
> > +	if [[ $fullver = *:* ]]; then
> > +		# split at the *first* colon
> > +		check_epoch "${fullver%%:*}" "$type" || ret=1
> > +		fullver=${fullver#*:}
> > +	fi
> > +
> > +	if [[ $fullver = *-* ]]; then
> > +		# split at the *last* hyphen
> > +		check_pkgrel "${fullver##*-}" "$type" || ret=1
> > +		fullver=${fullver%-*}
> > +	fi
> 
> Allan and I discussed on IRC that this does interesting things if
> someone uses e.g. makedepends=('perl-test-fatal>=-0.003')
> This was a real example discovered during the perl rebuild...
> 
> The resulting error message is:
> ERROR: pkgver in makedepends is not allowed to be empty.
> 
> Your patch improves error reporting in several ways, but it does nothing
> for this. So while we are at it, this would be a great time to check
> when splitting off the epoch/pkgrel, whether there's actually a pkgver
> on the other side.

Hmm, I'll have to ponder how to best handle that.  This is a problem
of "given a malformed input, what's the most likely thing that the
user intended?", which is a problem with no robust answer.

Perhaps change the check to:

    if [[ $fullver = ?*-* ]]; then

> > -lint_pkgrel() {

> > +lint_pkgrel() {
> > +	if (( PKGVERFUNC )); then
> > +		# defer check to after getting version from pkgver function
> > +		return 0
> > +	fi
> 
> Why are you delaying this? I assume to match how we do pkgver. But
> that's a change in how we currently handle it. I suppose we should
> consistently treat both variables which makepkg can auto-update... but
> it shouldn't be silently changed without mention in the commit logs. And
> it probably deserves its own commit.

You're right, this should have at least been a separate commit.

Since if pkgver() changes the value of pkgver, it also resets pkgrel
to '1', I figured that there's no point in linting the old value.

> And I'm not positive why we do so for pkgver either TBH. It's been like
> that since 4b129d484394ce6090a9ed21782fe1df2227ad18 when we added
> validation after running pkgver() at all, but the commit logs are not
> clear on why. Maybe to allow the initial author to use `pkgver=` and set
> the initial value using makepkg?

I'll study how it uses PKGVERFUNC and see if I can come up with an answer.

-- 
Happy hacking,
~ Luke Shumaker


More information about the pacman-dev mailing list