fix(show): star marker, aligned gutter and smarter AUR merge

N?? / show marks the upstream candidate with "*" instead of ">" (the
prompt, which read as a command in logs), and every line but the note
gets a two-character gutter: "  " for the installed record, "* " for the
candidate, so keys and colons line up. The plain native fallback (zypper,
unmergeable records) and the not-installed candidate use the same gutter.

pacman records (-Qi with -Si or the AUR helper's -Sia) are now compared
the way they are meant:
- values unwrapped (continuation lines joined, runs of blanks as one):
  yay wraps Depends On / Optional Deps at 80 columns even without a
  terminal unless COLUMNS=0, which the helper now gets for -Qua and -Sia
- Depends On, Provides, Conflicts With, Make/Check Deps and the other
  lists as sets of exact tokens in any order (a constraint is a change)
- Optional Deps by package names ("name: description [installed]" in
  -Qi, bare names from the AUR)
- a differing value is one line like -Qi, Optional Deps one entry per
  line; candidate-only fields sit next to their counterpart (Repository
  after Version, AUR URL after URL, Maintainer after Packager, ...)

Verified on recorded claude-desktop records (paru 2.1.0, yay 13.0.1, the
installed 2.9939.4-1 from the AUR's own .SRCINFO); discovery/pacman.md
section 15.2.
This commit is contained in:
bryanpedini committed 2026-10-10 16:01:51 +02:00
1 parent def537af58
commit 3af159e09a
16 files changed
+680 -288

No files matched your search

+29 -1
View File
@@ -713,6 +713,33 @@ Out Of Date : No
Submitted`, `Last Modified`, `Out Of Date` (yay: `Out-of-date`, plus `Keywords`).
* Not in the AUR: paru `error: package 'no-such-package-zzz' was not found`, yay ` -> No AUR package found for
no-such-package-zzz`, exit 1. AUR unreachable: the `-Qua` errors above, exit 1.
* Optional dependencies are **bare names** in both (`Optional Deps : pipewire kdialog gnome-keyring kwallet`
for `google-chrome`, whose AUR entries carry descriptions such as `pipewire: WebRTC desktop sharing under
Wayland`): the descriptions are dropped. `-Qi` prints one `name: description [installed]` per line.
* **yay wraps** long values at 80 columns - `Depends On`, `Optional Deps`, continuation lines indented to the value
column (31) - whenever `COLUMNS` is unset or 80, also without any terminal (stdout and stdin not a tty);
`COLUMNS=0` turns it off. paru 2.1.0 printed one line per field in every case tried (no terminal; an 80-column
pty with stdout piped, `COLUMNS` unset, 0 or 80; stdout the pty itself with `COLUMNS=0`). Verified 2026-10-10
with `claude-desktop` 2.31226.1-1 (39 dependencies), `yay -Sia claude-desktop` without `COLUMNS=0`:
```
Depends On : alsa-lib at-spi2-core bubblewrap cairo dbus
expat gcc-libs glib2 glibc gtk3
...
xdg-desktop-portal xdg-utils qemu-system-x86
edk2-ovmf
Optional Deps : gnome-keyring kwallet libayatana-appindicator
xdg-desktop-portal-gtk xdg-desktop-portal-kde
qemu-system-aarch64 edk2-aarch64
```
(paru: `Depends On : alsa-lib at-spi2-core bubblewrap ... edk2-ovmf` on one line.) The installed side for
that comparison, `pacman -Qi claude-desktop` of 2.9939.4-1 (a stand-in package built from the AUR's own
`.SRCINFO` of that version, commit b7d5715, plus a dummy `kwallet` for `[installed]`): `Depends On` one line
without `bubblewrap`, `libpipewire`, `qemu-system-x86`, `edk2-ovmf`; `Optional Deps : gnome-keyring:
credential storage via Secret Service (GNOME)` / `kwallet: credential storage (KDE Plasma) [installed]` / ...
one per line. These records are the unit fixtures (`tests/unit/data/pacman/Qi.txt`,
`tests/unit/data/aur/Sia-{paru,yay}-claude-desktop.txt`).
### 15.3 `-Sua`: the AUR upgrade
@@ -739,5 +766,6 @@ Out Of Date : No
|------|---------|
| helper | `--aur-helper=paru\|yay\|none` / `--no-aur`, else `paru`, else `yay` |
| list | `<helper> -Qua`: rows `name old new aur` (flag `aur`, `[ignored]` -> held); a name `pacman -Qu` lists wins; exit 1 + empty stderr = none, other failures: warn, no AUR rows |
| `N??` | `pacman -Qi` merged with `<helper> -Sia PKG` (section 14's merge) |
| `N??` | `pacman -Qi` merged with `<helper> -Sia PKG` (section 14's merge; pacman mode: values unwrapped, lists as token sets, `Optional Deps` as name sets, AUR-only fields next to their counterparts) |
| `COLUMNS` | `COLUMNS=0` for `-Qua` and `-Sia` (yay's wrapping); the upgrade keeps the terminal's |
| upgrade | after the repository step: `<helper> -Sua [--noconfirm when stdin is not a terminal] [--ignore <excluded rows>]` |