diff mbox

[dbscripts,v3] test: db-update: @test "update same any package to same repository fails": change PKGEXT

Message ID 20180219233156.4016-1-lukeshu@lukeshu.com
State Superseded
Headers show

Commit Message

Luke Shumaker Feb. 19, 2018, 11:31 p.m. UTC
From: Luke Shumaker <lukeshu@parabola.nu>

This has the test change PKGEXT the second time it tries to release the
package.  Currently, this causes the tests to fail.  That's a good thing;
it's checking for the regression where db-functions:check_pkgrepos isn't
treating PKGEXT as a glob.

Without this, that regression didn't cause test failure because the checks
right after it were tripping anyway.

https://lists.archlinux.org/pipermail/arch-projects/2018-February/004742.html

v2: Follow Eli's suggestion to simplify it using the check in __buildPackage
v3: Simplify further by assuming __buildPackage checks PKGEXT, not PKGEXTS
---
 This is written againt Eli's v2 patchset (my concerns there don't
 affect this).  You can verify--applying this patch first makes the
 tests fail, then applying Eli's patches make the tests pass again.

 Dave's objections to the __isGlobfile name and comment apply to this
 patch as well.

 test/cases/db-update.bats | 2 +-
 test/lib/common.bash      | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Emil Velikov via arch-projects Feb. 20, 2018, 1:47 a.m. UTC | #1
On 02/19/2018 06:31 PM, Luke Shumaker wrote:
> From: Luke Shumaker <lukeshu@parabola.nu>
> 
> This has the test change PKGEXT the second time it tries to release the
> package.  Currently, this causes the tests to fail.  That's a good thing;
> it's checking for the regression where db-functions:check_pkgrepos isn't
> treating PKGEXT as a glob.
> 
> Without this, that regression didn't cause test failure because the checks
> right after it were tripping anyway.
> 
> https://lists.archlinux.org/pipermail/arch-projects/2018-February/004742.html
> 
> v2: Follow Eli's suggestion to simplify it using the check in __buildPackage
> v3: Simplify further by assuming __buildPackage checks PKGEXT, not PKGEXTS
> ---
>  This is written againt Eli's v2 patchset (my concerns there don't
>  affect this).  You can verify--applying this patch first makes the
>  tests fail, then applying Eli's patches make the tests pass again.
> 
>  Dave's objections to the __isGlobfile name and comment apply to this
>  patch as well.
As far as the testsuite is concerned, you can just use "Fix overloading
PKGEXT to mean two things." as a base. This means that all you need to
do is check that if you releasePackage the same package twice using a
new $PKGEXT it is still rejected.

...

We're not testing whether or not globs work, we're testing whether or
not check_pkgrepos properly detects pre-existing packages (which it does
via globs). Using __isGlobfile() here will no longer be useful
information once $PKGEXT is only ever something from makepkg. So it
doesn't make sense to add code that will be almost immediately removed.
Emil Velikov via arch-projects Feb. 20, 2018, 2:12 a.m. UTC | #2
On 02/19/2018 08:47 PM, Eli Schwartz wrote:
> On 02/19/2018 06:31 PM, Luke Shumaker wrote:
>> From: Luke Shumaker <lukeshu@parabola.nu>
>>
>> This has the test change PKGEXT the second time it tries to release the
>> package.  Currently, this causes the tests to fail.  That's a good thing;
>> it's checking for the regression where db-functions:check_pkgrepos isn't
>> treating PKGEXT as a glob.
>>
>> Without this, that regression didn't cause test failure because the checks
>> right after it were tripping anyway.
>>
>> https://lists.archlinux.org/pipermail/arch-projects/2018-February/004742.html
>>
>> v2: Follow Eli's suggestion to simplify it using the check in __buildPackage
>> v3: Simplify further by assuming __buildPackage checks PKGEXT, not PKGEXTS
>> ---
>>  This is written againt Eli's v2 patchset (my concerns there don't
>>  affect this).  You can verify--applying this patch first makes the
>>  tests fail, then applying Eli's patches make the tests pass again.
>>
>>  Dave's objections to the __isGlobfile name and comment apply to this
>>  patch as well.
> As far as the testsuite is concerned, you can just use "Fix overloading
> PKGEXT to mean two things." as a base. This means that all you need to
> do is check that if you releasePackage the same package twice using a
> new $PKGEXT it is still rejected.
> 
> ...
> 
> We're not testing whether or not globs work, we're testing whether or
> not check_pkgrepos properly detects pre-existing packages (which it does
> via globs). Using __isGlobfile() here will no longer be useful
> information once $PKGEXT is only ever something from makepkg. So it
> doesn't make sense to add code that will be almost immediately removed.

Actually, it would tend to help if we had the actual candidate filenames
here. Hmm...
Emil Velikov via arch-projects Feb. 20, 2018, 2:29 a.m. UTC | #3
On 02/19/2018 09:12 PM, Eli Schwartz wrote:
> On 02/19/2018 08:47 PM, Eli Schwartz wrote:
>> On 02/19/2018 06:31 PM, Luke Shumaker wrote:
>>> From: Luke Shumaker <lukeshu@parabola.nu>
>>>
>>> This has the test change PKGEXT the second time it tries to release the
>>> package.  Currently, this causes the tests to fail.  That's a good thing;
>>> it's checking for the regression where db-functions:check_pkgrepos isn't
>>> treating PKGEXT as a glob.
>>>
>>> Without this, that regression didn't cause test failure because the checks
>>> right after it were tripping anyway.
>>>
>>> https://lists.archlinux.org/pipermail/arch-projects/2018-February/004742.html
>>>
>>> v2: Follow Eli's suggestion to simplify it using the check in __buildPackage
>>> v3: Simplify further by assuming __buildPackage checks PKGEXT, not PKGEXTS
>>> ---
>>>  This is written againt Eli's v2 patchset (my concerns there don't
>>>  affect this).  You can verify--applying this patch first makes the
>>>  tests fail, then applying Eli's patches make the tests pass again.
>>>
>>>  Dave's objections to the __isGlobfile name and comment apply to this
>>>  patch as well.
>> As far as the testsuite is concerned, you can just use "Fix overloading
>> PKGEXT to mean two things." as a base. This means that all you need to
>> do is check that if you releasePackage the same package twice using a
>> new $PKGEXT it is still rejected.
>>
>> ...
>>
>> We're not testing whether or not globs work, we're testing whether or
>> not check_pkgrepos properly detects pre-existing packages (which it does
>> via globs). Using __isGlobfile() here will no longer be useful
>> information once $PKGEXT is only ever something from makepkg. So it
>> doesn't make sense to add code that will be almost immediately removed.
> 
> Actually, it would tend to help if we had the actual candidate filenames
> here. Hmm...

Maybe:
>  	if [[ -n ${BUILDDIR} ]]; then
>  		cache=${BUILDDIR}/$(__getCheckSum PKGBUILD)
> -		if [[ -d ${cache} ]]; then
> +		if __isGlobfile "${cache}"/*"${PKGEXT}"; then
>  			cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest}
>  			return 0
>  		else

could use

if cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest} 2>/dev/null; then
    return 0
else

This would avoid the need for __isGlobfile function altogether.

I'd also like a more descriptive commit message. Don't tell me what you
changed, tell me why you changed it. :p
Luke Shumaker Feb. 20, 2018, 3:24 a.m. UTC | #4
Eli Schwartz wrote:
>
> >  	if [[ -n ${BUILDDIR} ]]; then
> >  		cache=${BUILDDIR}/$(__getCheckSum PKGBUILD)
> > -		if [[ -d ${cache} ]]; then
> > +		if __isGlobfile "${cache}"/*"${PKGEXT}"; then
> >  			cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest}
> >  			return 0
> >  		else
>
> We're not testing whether or not globs work, we're testing whether or
> not check_pkgrepos properly detects pre-existing packages (which it does
> via globs). Using __isGlobfile() here will no longer be useful
> information once $PKGEXT is only ever something from makepkg. So it
> doesn't make sense to add code that will be almost immediately removed.

The glob I was using it for wasn't PKGEXT(s), it was the '*' that's
right there in the argument!

> Maybe:
...
> if cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest} 2>/dev/null; then
>     return 0
> else
> 
> This would avoid the need for __isGlobfile function altogether.

I like that!  Good idea!

> I'd also like a more descriptive commit message. Don't tell me what you
> changed, tell me why you changed it. :p

Ok, I'll go in to that more.
Emil Velikov via arch-projects Feb. 20, 2018, 3:33 a.m. UTC | #5
On 02/19/2018 10:24 PM, Luke Shumaker wrote:
> The glob I was using it for wasn't PKGEXT(s), it was the '*' that's
> right there in the argument!

Right, that's why I replied to myself with "Actually, it would tend to
help if we had the actual candidate filenames here. Hmm..."

Context: I wrote a makepkg patch whose sole purpose is to ensure that
people can extract a newline-separated list of absolute filepaths for
each package that a PKGBUILD would/did create. No globs needed. :)

I'm hoping this will simplify some rather hackish and fragile logic in
*many* projects that interface with makepkg.

>> Maybe:
> ...
>> if cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest} 2>/dev/null; then
>>     return 0
>> else
>>
>> This would avoid the need for __isGlobfile function altogether.
> 
> I like that!  Good idea!
> 
>> I'd also like a more descriptive commit message. Don't tell me what you
>> changed, tell me why you changed it. :p
> 
> Ok, I'll go in to that more.

The changes look great, thanks.
diff mbox

Patch

diff --git a/test/cases/db-update.bats b/test/cases/db-update.bats
index 1da7eef..2395438 100644
--- a/test/cases/db-update.bats
+++ b/test/cases/db-update.bats
@@ -92,7 +92,7 @@  load ../lib/common
 	db-update
 	checkPackage extra pkg-any-a
 
-	releasePackage extra pkg-any-a
+	PKGEXT=.pkg.tar.gz releasePackage extra pkg-any-a
 	run db-update
 	[ "$status" -ne 0 ]
 }
diff --git a/test/lib/common.bash b/test/lib/common.bash
index 540e403..d251259 100644
--- a/test/lib/common.bash
+++ b/test/lib/common.bash
@@ -13,6 +13,11 @@  __getCheckSum() {
 	echo ${result[0]}
 }
 
+# Check if a file exists, even if the file uses wildcards
+__isGlobfile() {
+	[[ -f $1 ]]
+}
+
 __buildPackage() {
 	local pkgdest=${1:-.}
 	local p
@@ -23,7 +28,7 @@  __buildPackage() {
 
 	if [[ -n ${BUILDDIR} ]]; then
 		cache=${BUILDDIR}/$(__getCheckSum PKGBUILD)
-		if [[ -d ${cache} ]]; then
+		if __isGlobfile "${cache}"/*"${PKGEXT}"; then
 			cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest}
 			return 0
 		else