rmarquis / pacaur

[unmaintained] An AUR helper that minimizes user interaction
https://bbs.archlinux.org/viewtopic.php?pid=1755144#p1755144
ISC License
796 stars 114 forks source link

Ignoring a VCS dependency fails the whole update #622

Closed intelfx closed 7 years ago

intelfx commented 7 years ago
Version
$ pacaur -v                                                                             
pacaur 4.6.10
Description

Ignoring an AUR package (either via pacaur --ignore foo or via IgnorePkg = foo in pacman.conf) fails whole update with Unresolved dependency '<ignored package>'.

Note that this is not a duplicate of #615 and transitively #173 because the ignored packages are already installed (just older versions of them).

Output
$ LC_ALL=C pacaur -u --devel --ignore beignet-git --ignore libimobiledevice-git             
:: Starting AUR upgrade...
:: linux-intelfx is not present in AUR -- skipping
:: linux-intelfx-docs is not present in AUR -- skipping
:: linux-intelfx-headers is not present in AUR -- skipping
:: beignet-git: ignoring package upgrade (1.0.0.r1082.g1ca2659c-1 => latest)
:: libimobiledevice-git: ignoring package upgrade (1:1.2.0.r51.gb78a42e-1 => latest)
:: resolving dependencies...
:: Unresolved dependency 'beignet-git'
Debug output
$ LC_ALL=C bash -x pacaur -u --devel --ignore beignet-git --ignore libimobiledevice-git &> pacaur.log

pacaur.zip

rmarquis commented 7 years ago

There is indeed something picky here. Could you tell me which packages require beignet-git on your system?

intelfx commented 7 years ago
$ LC_ALL=C pacman -Qi beignet-git
Name            : beignet-git
Version         : 1.0.0.r970.gd87bbdb1-1
Description     : A GPGPU System for Intel Ivybridge GPUs
Architecture    : x86_64
URL             : http://cgit.freedesktop.org/beignet/
Licenses        : LGPL2.1
Groups          : None
Provides        : opencl-intel  opencl-headers  opencl-headers12
Depends On      : glu  libsm  libxext  mesa  ncurses  ocl-icd  llvm
Optional Deps   : None
Required By     : viennacl
Optional For    : lib32-opencl-nvidia  opencl-nvidia
Conflicts With  : beignet  opencl-intel  opencl-headers  opencl-headers12
Replaces        : beignet  opencl-intel  opencl-headers  opencl-headers12
Installed Size  : 29.14 MiB
Packager        : Ivan Shapovalov <intelfx@intelfx.name>
Build Date      : Thu Jan 19 12:06:26 2017
Install Date    : Thu Jan 19 12:07:04 2017
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : None

$ LC_ALL=C pacman -Qi viennacl   
Name            : viennacl
Version         : 1.7.1-1
Description     : The library provides high level C++ interfaces for linear algebra routines on CPUs and GPUs using CUDA, OpenCL and OpenMP.
Architecture    : any
URL             : http://viennacl.sourceforge.net/
Licenses        : custom
Groups          : None
Provides        : None
Depends On      : libcl  opencl-headers
Optional Deps   : cuda [installed]
                  opencl-nvidia [installed]
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 4.63 MiB
Packager        : Ivan Shapovalov <intelfx@intelfx.name>
Build Date      : Fri Jul 22 12:43:35 2016
Install Date    : Fri Jul 22 12:43:40 2016
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : None

That is, the dependency is indirect via opencl-headers.

intelfx commented 7 years ago

@rmarquis: Also please note that I have old ocl-icd package — the one that still provides libcl (because many AUR packages still depend on that name). This could also contribute to the problem (e. g. if pacaur wrongly uses sync database data instead of the local data).

ArchangeGabriel commented 7 years ago

@intelfx I’m not sure about this, but shouldn’t beignet-git be stripped of opencl-headers content and depends on that one? At least that’s what beignet does.

intelfx commented 7 years ago

@ArchangeGabriel: Probably. I'll try to manually sync the PKGBUILD to beignet and see if this works around the bug.

intelfx commented 7 years ago

Oh, they say it's impossible:

I tried removing the headers and depending on opencl-headers but this does not work for the current git version due to (at least) the following commit:

https://cgit.freedesktop.org/beignet/commit/?id=6a3eddc4dd70c895c426f1f8231778eb98ea7ac3

So beignet uses an opencl extension that is not yet included in the opencl-headers as they are present in the Arch repos.

ArchangeGabriel commented 7 years ago

Hum, I think you still can, but it requires stripping the headers after compilation. The same issue arose in beignet, and that’s how it has been fixed. Not sure about the implications though.

rmarquis commented 7 years ago

@intelfx: That is indeed useful information. The package viennacl should depend on the new ocl-icd instead of libcl, or the binary package ocl-icd should provide libcl. You might want to check with the maintainer of ocl-icd if this provide has been forgotten or if that has been done on purpose.

I cannot reproduce the issue on latest code with the newest ocl-icd, and the package viennacl doesn't seem required anymore. This is a won't fix from my side. From what I see, the whole dependency tree on your system is broken and you choose or have to rely on an inconsistent, partially upgraded system. Your best bet is to work with the various package maintainers to avoid to rely on that old ocl-icd so you can use a consistent and up-to-date system.

intelfx commented 7 years ago

This is not an up-to-date configuration, but it is consistent. Hence I'd rather disagree with this resolution.

rmarquis commented 7 years ago

Cannot reproduce here, thus not worth my time.

intelfx commented 7 years ago

Let's forget beignet-git. This can be reproduced on another package:

$ LC_ALL=C pacaur -u --devel --ignore libimobiledevice-git
:: Starting AUR upgrade...
:: linux-intelfx is not present in AUR -- skipping
:: linux-intelfx-docs is not present in AUR -- skipping
:: linux-intelfx-headers is not present in AUR -- skipping
:: libimobiledevice-git: ignoring package upgrade (1:1.2.0.r51.gb78a42e-1 => latest)
:: resolving dependencies...
:: Unresolved dependency 'libimobiledevice-git'

I'm ignoring this package because its maintainer left the package in a broken state while being unresponsive. The local package has a different clone URL and a bunch of missed deps.

rmarquis commented 7 years ago

Same question: which packages require it on your system?

Also, please test the latest code. Might as well been an issue that is already fixed.

intelfx commented 7 years ago

Same question: which packages require it on your system?

$ LC_ALL=C pacman -Qi libimobiledevice-git   
Name            : libimobiledevice-git
Version         : 1:1.2.0.r51.gb78a42e-1
Description     : libimobiledevice is a software library that talks the protocols to support iPhone and iPod Touch devices on Linux
Architecture    : x86_64
URL             : http://www.libimobiledevice.org/
Licenses        : GPL2  LGPL2.1
Groups          : None
Provides        : libiphone-git  libiphone  libimobiledevice
Depends On      : gnutls  openssl  libgcrypt  libplist-git  libusbmuxd-git  usbmuxd-git
Optional Deps   : None
Required By     : gvfs-afc  ideviceinstaller-git  idevicerestore-git  ifuse  upower  usbmuxd-git
Optional For    : None
Conflicts With  : libiphone-git  libiphone  libimobiledevice
Replaces        : None
Installed Size  : 678.00 KiB
Packager        : Ivan Shapovalov <intelfx@intelfx.name>
Build Date      : Thu Jan 19 11:24:52 2017
Install Date    : Thu Jan 19 12:01:13 2017
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : None

If this again sounds too complex, I can also reproduce this on a kdevelop-git + kdevplatform-git dependency tree, where ignoring kdevplatform-git again fails the whole update. In this case, kdevplatform is required only by kdevelop and there are no local changes to these packages.

Also, please test the latest code. Might as well been an issue that is already fixed.

pacaur 4.6.10.81.gcad48d2 — nope, bug still present.

rmarquis commented 7 years ago

Thanks. I can reproduce the issue with the kdevelop-git and kdevplatform-git package, I'll have a deeper look shortly.

Commit of interest is 393d67d04e61d6085b9aad4a29940cb8b7dba224 with the starting issue located in IgnoreDepsCheck(). The issue happens when the aurdepspkgs array contains the ignored package, which is populated in FindDepsAur(). The root of the issue is unsurprisingly in the part that remove installed deps of the dependency solver, when either of the --devel or --foreign options are set.

The issue seems to be located here following commits ff07757fb8a2d00ca33ce224405a19c2db4dae44, f8584c36f7645f30c3a0f5e03155a8429ba5167a and 35fbbbc2d8b4eef5cd3da2a59c8395488d298a01. See #346 and #396.


Additional test cases:

pacaur -Su --devel --ignore kdevplatform-git -> :: Unresolved dependency 'kdevplatform-git'

pacaur -Su kdevelop-git kdevplatform-git --ignore kdevplatform-git -> OK

pacaur -S kdevelop-git kdevplatform-git --ignore kdevplatform-git -> ignore prompt but OK in both case

FIXME: double check this last user case. Only kdevelop-git gets to the main prompt in both case (y/n) (issue introduced in 52e061cdd8ea643d4b8e91d2ee87a0db99ef3abf).

rmarquis commented 7 years ago

Should be fixed in 2b405c5a97c11341ff99ff0ba83172212e424e58. I found another semi-related bug (the stable version isn't concerned) with the ignore prompt check and have fixed it in b7a0c533849f66ed0b7252d93ac502d4035c872a.

Feedback welcome.

intelfx commented 7 years ago

Yep, current master works for me in all cases. Thanks.