Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package apk-tools for openSUSE:Factory checked in at 2026-04-13 23:20:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/apk-tools (Old) and /work/SRC/openSUSE:Factory/.apk-tools.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "apk-tools" Mon Apr 13 23:20:17 2026 rev:7 rq:1346464 version:3.0.6 Changes: -------- --- /work/SRC/openSUSE:Factory/apk-tools/apk-tools.changes 2026-03-14 22:24:26.302208945 +0100 +++ /work/SRC/openSUSE:Factory/.apk-tools.new.21863/apk-tools.changes 2026-04-13 23:22:32.569176698 +0200 @@ -1,0 +2,14 @@ +Mon Apr 13 12:52:33 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 3.0.6: + * extract_v3: validate link target size. + * query: match depends exactly against dependencies. + * defines: add and use APKE_BUFFER_SIZE. + * db: fix url buffer sizes and names. + * pkg: add and use PKG_VER_MAX for PKG_VER_FMT. + * db, update: update idb package size from index. + * db: set diri->pkg to null to indicate overlay. + * fix re-exec writing to original argv instead of copy. + * fix off-by-one in fetch_parseuint radix check. + +------------------------------------------------------------------- Old: ---- apk-tools-3.0.5.tar.xz New: ---- apk-tools-3.0.6.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ apk-tools.spec ++++++ --- /var/tmp/diff_new_pack.HuQWny/_old 2026-04-13 23:22:33.053196667 +0200 +++ /var/tmp/diff_new_pack.HuQWny/_new 2026-04-13 23:22:33.057196832 +0200 @@ -21,7 +21,7 @@ %define soname 3_0_0 %define libname libapk%{soname} Name: apk-tools -Version: 3.0.5 +Version: 3.0.6 Release: 0 Summary: Alpine package manager License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.HuQWny/_old 2026-04-13 23:22:33.097198483 +0200 +++ /var/tmp/diff_new_pack.HuQWny/_new 2026-04-13 23:22:33.105198813 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="manual"> <param name="url">https://git.alpinelinux.org/apk-tools</param> <param name="scm">git</param> - <param name="revision">v3.0.5</param> + <param name="revision">v3.0.6</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="versionformat">@PARENT_TAG@</param> @@ -14,4 +14,3 @@ <service name="set_version" mode="manual"/> </services> - ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.HuQWny/_old 2026-04-13 23:22:33.133199968 +0200 +++ /var/tmp/diff_new_pack.HuQWny/_new 2026-04-13 23:22:33.133199968 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://git.alpinelinux.org/apk-tools</param> - <param name="changesrevision">b5a31c0d865342ad80be10d68f1bb3d3ad9b0866</param></service></servicedata> + <param name="changesrevision">7e92634afe99db29e00037e6a134104ad9720b68</param></service></servicedata> (No newline at EOF) ++++++ apk-tools-3.0.5.tar.xz -> apk-tools-3.0.6.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/VERSION new/apk-tools-3.0.6/VERSION --- old/apk-tools-3.0.5/VERSION 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/VERSION 2026-04-13 10:36:44.000000000 +0200 @@ -1 +1 @@ -3.0.5 +3.0.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-add.8.scd new/apk-tools-3.0.6/doc/apk-add.8.scd --- old/apk-tools-3.0.5/doc/apk-add.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-add.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -40,7 +40,7 @@ dependencies cannot be satisfied. *--no-chown* - Deperecated alias for --usermode. + Deprecated alias for --usermode. *--upgrade*, *-u* Upgrade _packages_ and their dependencies. Normally *apk add* will diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-audit.8.scd new/apk-tools-3.0.6/doc/apk-audit.8.scd --- old/apk-tools-3.0.5/doc/apk-audit.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-audit.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -33,7 +33,7 @@ | D : Directory added (with non-listed files/subdirs) | e -: error occured during audit (e.g. no permissions to read file) +: error occurred during audit (e.g. no permissions to read file) | M : File metadata changed (uid, gid, or mode) | m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-cache.5.scd new/apk-tools-3.0.6/doc/apk-cache.5.scd --- old/apk-tools-3.0.5/doc/apk-cache.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-cache.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -7,7 +7,7 @@ # DESCRIPTION If */etc/apk/cache* is a symlink to a local directory, *apk*(8) will use it as -a local cache for downloaded package files and repository indicies. The cache +a local cache for downloaded package files and repository indices. The cache must not reside on a tmpfs. To enable the apk cache, run the following commands as root: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-convndx.8.scd new/apk-tools-3.0.6/doc/apk-convndx.8.scd --- old/apk-tools-3.0.5/doc/apk-convndx.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-convndx.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -10,7 +10,7 @@ # DESCRIPTION -*apk convndx* reads the specifed _indexes_ and generates and merges them. +*apk convndx* reads the specified _indexes_ and generates and merges them. The resulting data is written out to stdout in apkv3 index format. # OPTIONS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-fetch.8.scd new/apk-tools-3.0.6/doc/apk-fetch.8.scd --- old/apk-tools-3.0.5/doc/apk-fetch.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-fetch.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -39,7 +39,7 @@ Simulate the requested operation without making any changes. *Note*: this option is unreliable if needed indexes are not up-to-date - as this omits refresing or downloading of missing indexes. + as this omits refreshing or downloading of missing indexes. *--stdout*, *-s* Dump the .apk file(s) to stdout. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-index.8.scd new/apk-tools-3.0.6/doc/apk-index.8.scd --- old/apk-tools-3.0.5/doc/apk-index.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-index.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -11,7 +11,7 @@ # DESCRIPTION *apk index* creates a repository index from a list of package files. See -*apk-repositories*(5) for more information on repository indicies. +*apk-repositories*(5) for more information on repository indices. Generally, the resulting index must be cryptographically signed before *apk* will accept it. See *abuild-sign*(1) for details. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-keys.5.scd new/apk-tools-3.0.6/doc/apk-keys.5.scd --- old/apk-tools-3.0.5/doc/apk-keys.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-keys.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -9,12 +9,12 @@ The */etc/apk/keys* directory stores the public keys which are trusted by apk to verify cryptographic signatures for packages. -To trust a new key, simply add the armored public key to this directory. The +To trust a new key, simply add the armoured public key to this directory. The keys can be generated with *openssl*. The APKv2 packages require the filename of public key to match the signing key name in the package. APKv3 files are matched using the public key identity -and filename is not signifcant. +and filename is not significant. # SEE ALSO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-list.8.scd new/apk-tools-3.0.6/doc/apk-list.8.scd --- old/apk-tools-3.0.5/doc/apk-list.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-list.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -10,7 +10,7 @@ # DESCRIPTION -*apk list* searches package indicies for packages matching the given patterns +*apk list* searches package indices for packages matching the given patterns and prints any matching packages. The patterns are matched with *fnmatch*(3), which behaves similarly to shell diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-mkndx.8.scd new/apk-tools-3.0.6/doc/apk-mkndx.8.scd --- old/apk-tools-3.0.5/doc/apk-mkndx.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-mkndx.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -11,7 +11,7 @@ # DESCRIPTION *apk mkndx* creates a repository index from a list of package files. See -*apk-repositories*(5) for more information on repository indicies. +*apk-repositories*(5) for more information on repository indices. # OPTIONS @@ -63,7 +63,7 @@ - hash Additionally a prefix of the variable can used with syntax: *${name:4}*. This - truncates the substition to maximum of 4 characters. + truncates the substitution to maximum of 4 characters. The specification writer should ensure that the repository does not contain multiple packages that would expand to same package filename. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-mkpkg.8.scd new/apk-tools-3.0.6/doc/apk-mkpkg.8.scd --- old/apk-tools-3.0.5/doc/apk-mkpkg.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-mkpkg.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -15,7 +15,7 @@ # OPTIONS *--compat* _APK_VERSION_ - Produces packages comptable with given apk versions. The default + Produces packages compatible with given apk versions. The default currently is *3.0.0_pre1*. *--files*, *-F* _PATH_ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-package.5.scd new/apk-tools-3.0.6/doc/apk-package.5.scd --- old/apk-tools-3.0.5/doc/apk-package.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-package.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -29,8 +29,8 @@ APK will often display concatenation of *name*-*version* in its verbose output mode. The rule below on how a valid version number is defined allow -that this format can be uniquely splitted back to the two components by -finding the *last* occurance of *-[0-9]*. The dash in the beginning of this +that this format can be uniquely split back to the two components by +finding the *last* occurrence of *-[0-9]*. The dash in the beginning of this match is the splitting point: first portion is the *name* and second portion is the *version*. @@ -62,7 +62,7 @@ This can be followed with an optional *{~hash}* to indicate a commit hash from where it was built. This can be any length string of - lower case hexdecimal digits (0-9a-f). + lower case hexadecimal digits (0-9a-f). Finally an optional package build component *-r{number}* can follow. @@ -217,7 +217,7 @@ *replaces* (*r*) List of package names this package is allowed to replace files from. Normally apk treats it as an error if multiple packages contain the - same file. Specifying a replaces declartion allows the package to + same file. Specifying a replaces declaration allows the package to silently overwrite files from the listed packages. *install-if* (*install_if*, *i*) @@ -245,7 +245,7 @@ the uvol volume manager should be used to install the images In addition to controlling where the package content goes, this also - affects the installad database where the metadata of these packages + affects the installed database where the metadata of these packages go. Each layer has a separate installed database. *tags* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-protected_paths.5.scd new/apk-tools-3.0.6/doc/apk-protected_paths.5.scd --- old/apk-tools-3.0.5/doc/apk-protected_paths.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-protected_paths.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -2,7 +2,7 @@ # NAME -*/etc/apk/protected_paths.d/\*.list* - paths with special treatement by apk +*/etc/apk/protected_paths.d/\*.list* - paths with special treatment by apk # DESCRIPTION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-query.8.scd new/apk-tools-3.0.6/doc/apk-query.8.scd --- old/apk-tools-3.0.5/doc/apk-query.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-query.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -22,7 +22,7 @@ In the *--recursive* mode, the _constraints_ specify a list of dependencies to satisfy and the solver algorithm is used to determine a list of packages -that fullfill these constraints. +that fulfil these constraints. The query executes in the following steps: . Each _query_ string is executed independently to select candidate packages @@ -44,7 +44,7 @@ *--fields* _FIELDS_[:_REVERSE_FIELD_] A comma separated list of fields to include in the output. An optional specification to specify the field to output for the synthetic reverse - dependency fields can be specifed (*name*, *package* or *origin*). + dependency fields can be specified (*name*, *package* or *origin*). *--format* _FORMATSPEC_ Specify output format from *default*, *yaml* or *json*. The *default* @@ -53,7 +53,7 @@ *--from* _FROMSPEC_ Search packages from: *system* (all system sources), *repositories* (exclude installed database), *installed* (exclude normal repositories) - or *none* (commandline repositories only). + or *none* (command-line repositories only). *--installed* Filter selection to installed packages. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-repositories.5.scd new/apk-tools-3.0.6/doc/apk-repositories.5.scd --- old/apk-tools-3.0.5/doc/apk-repositories.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-repositories.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -30,7 +30,7 @@ and must start with a letter. The *APK_* prefixed variable names are reserved for built-in variables and cannot be defined by the user. - A variable expansion is perfomered on the *value* before assignment. + A variable expansion is performed on the *value* before assignment. If the option *-default* is specified, the *key* value is not changed if it already exists. @@ -40,7 +40,7 @@ *ndx \[@tag\] url*++ *\[v2|v3\] \[@tag\] url \[component...\]* - If a repository declaration omits the type field it defaults to the type + If a repository declaration omits the type field, it defaults to the type defined in latest *default* command, or if absent, to *v2* (or *ndx* if *url* ends with *.adb* or *.tar.gz*). If the format is *v3* or the *ndx* filename ends with *.adb* a v3 format index file required. @@ -59,7 +59,7 @@ - _file://_ - absolute filesystem path (must start with `/`) - The *component* list specifies a list of repository components. If specifies, + The *component* list specifies a list of repository components. If specified, the line is expanded to multiple URLs: one for each component, and the *component* is appended to the *url*. Specifying *component* with *ndx* type is not valid. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-upgrade.8.scd new/apk-tools-3.0.6/doc/apk-upgrade.8.scd --- old/apk-tools-3.0.5/doc/apk-upgrade.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-upgrade.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -16,7 +16,7 @@ provided, only those packages are upgraded along with needed dependencies. If dependencies mentioned in *--preupgrade-depends* (see *apk*(8)) match -an upgradabable package, a preupgrade step is performed. During the preupgrade +an upgradable package, a preupgrade step is performed. During the preupgrade step, the installed packages matching the preupgrade dependencies are upgraded if possible - their dependencies are enforced (but not upgraded unless required by the dependencies in the new package). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-v3.5.scd new/apk-tools-3.0.6/doc/apk-v3.5.scd --- old/apk-tools-3.0.5/doc/apk-v3.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-v3.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -56,7 +56,7 @@ all arrays and objects contain at least one item. The only real difference between arrays and objects in the wire encoding -is that arrays are homogenous, whereas objects are heterogenous with a +is that arrays are homogenous, whereas objects are heterogeneous with a separate defined type for each slot. The special type is used to represent three atoms: @@ -138,11 +138,11 @@ The SIG block contains one or more signatures of the ADB block. Signatures of the same version should be in the same SIG block. If in future, a new signature version is specified, and package should contain for compatibility -reasons two different versions of signature during transiton time, then there +reasons two different versions of signature during transition time, then there should be two signature blocks, one of each version. Unlike the v2 format, the key name used for the signature is not -explicitly specified. Instead an intrisic ID of the key is used for the +explicitly specified. Instead an intrinsic ID of the key is used for the lookup, so verifiers must find the key based in the key ID. Also unlike the v2 format, the ADB block is not signed directly, but it is hashed first by a secure digest (currently SHA512). After this a small payload diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-verify.8.scd new/apk-tools-3.0.6/doc/apk-verify.8.scd --- old/apk-tools-3.0.5/doc/apk-verify.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-verify.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -15,7 +15,7 @@ *apk verify* prints a summary of the results on stdout, and exits with status code zero if all packages were successfully verified. If any failed, *apk -verify* exits with a nonzero status. +verify* exits with a non-zero status. # OPTIONS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk-world.5.scd new/apk-tools-3.0.6/doc/apk-world.5.scd --- old/apk-tools-3.0.5/doc/apk-world.5.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk-world.5.scd 2026-04-13 10:36:44.000000000 +0200 @@ -7,7 +7,7 @@ # DESCRIPTION At /etc/apk/world, apk maintains the _world_, that is, a list of constraints -the package selection needs to fulfill. +the package selection needs to fulfil. If you edit this file manually, you should run *apk-fix*(8) to apply the changes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/doc/apk.8.scd new/apk-tools-3.0.6/doc/apk.8.scd --- old/apk-tools-3.0.5/doc/apk.8.scd 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/doc/apk.8.scd 2026-04-13 10:36:44.000000000 +0200 @@ -22,7 +22,7 @@ this default to be interactive. Only _global options_ should be specified before _command_. For backwards -compatilibity a best effort attempt is made to parse applet specific options +compatibility a best effort attempt is made to parse applet specific options before the _command_, but this is deprecated and subject to be removed. # COMMANDS @@ -141,7 +141,7 @@ if */etc/apk/cache* symlink exists. *--cache-predownload*[=_BOOL_] - Download needed packages to cache before starting to commit a transtaction. + Download needed packages to cache before starting to commit a transaction. Requires cache to be configured to be functional. Implies *--cache-packages*. *--check-certificate*[=_BOOL_] @@ -451,7 +451,7 @@ */etc/apk/commit_hooks.d/\**++ */lib/apk/commit_hooks.d/\** Hook scripts which are executed before anything has been written to the - filesystem and after all the changes have been commited. The script + filesystem and after all the changes have been committed. The script executed gets as an argument the stage name (*pre-commit* or *post-commit*). If the script returns failure during *pre-commit* stage, the commit is aborted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/libfetch/common.c new/apk-tools-3.0.6/libfetch/common.c --- old/apk-tools-3.0.5/libfetch/common.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/libfetch/common.c 2026-04-13 10:36:44.000000000 +0200 @@ -94,7 +94,7 @@ if (isdigit(ch)) d = ch - '0'; else d = tolower(ch) - 'a' + 10; - if (d > radix || val > maxx) goto err; + if (d >= radix || val > maxx) goto err; val *= radix; if (val > max-d) goto err; val += d; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/adb.c new/apk-tools-3.0.6/src/adb.c --- old/apk-tools-3.0.5/src/adb.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/adb.c 2026-04-13 10:36:44.000000000 +0200 @@ -1185,7 +1185,7 @@ return -APKE_ADB_SCHEMA; } if (done.ptr != to->ptr) { - if (done.len > to->len) return -ENOBUFS; + if (done.len > to->len) return -APKE_BUFFER_SIZE; memcpy(to->ptr, done.ptr, done.len); } to->ptr += done.len; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/apk_blob.h new/apk-tools-3.0.6/src/apk_blob.h --- old/apk-tools-3.0.5/src/apk_blob.h 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/apk_blob.h 2026-04-13 10:36:44.000000000 +0200 @@ -68,7 +68,7 @@ apk_blob_t apk_blob_fmt(char *str, size_t sz, const char *fmt, ...) __attribute__ ((format (printf, 3, 4))); -#define apk_fmt(args...) ({ apk_blob_t b = apk_blob_fmt(args); b.ptr ? b.len : -ENOBUFS; }) +#define apk_fmt(args...) ({ apk_blob_t b = apk_blob_fmt(args); b.ptr ? b.len : -APKE_BUFFER_SIZE; }) #define apk_fmts(args...) ({ apk_blob_fmt(args).ptr; }) int apk_blob_subst(char *buf, size_t sz, apk_blob_t fmt, int (*res)(void *ctx, apk_blob_t var, apk_blob_t *to), void *ctx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/apk_database.h new/apk-tools-3.0.6/src/apk_database.h --- old/apk-tools-3.0.5/src/apk_database.h 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/apk_database.h 2026-04-13 10:36:44.000000000 +0200 @@ -215,6 +215,7 @@ unsigned int root_proc_ok : 1; unsigned int root_dev_ok : 1; unsigned int need_unshare : 1; + unsigned int idb_dirty : 1; struct apk_dependency_array *world; struct apk_id_cache *id_cache; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/apk_defines.h new/apk-tools-3.0.6/src/apk_defines.h --- old/apk-tools-3.0.5/src/apk_defines.h 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/apk_defines.h 2026-04-13 10:36:44.000000000 +0200 @@ -101,6 +101,7 @@ APKE_REPO_SYNTAX, APKE_REPO_KEYWORD, APKE_REPO_VARIABLE, + APKE_BUFFER_SIZE, }; static inline void *ERR_PTR(long error) { return (void*) error; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/apk_package.h new/apk-tools-3.0.6/src/apk_package.h --- old/apk-tools-3.0.5/src/apk_package.h 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/apk_package.h 2026-04-13 10:36:44.000000000 +0200 @@ -115,6 +115,7 @@ #define APK_PROVIDER_FROM_PACKAGE(pkg) (struct apk_provider){(pkg),(pkg)->version} #define APK_PROVIDER_FROM_PROVIDES(pkg,p) (struct apk_provider){(pkg),(p)->version} +#define PKG_VER_MAX 256 #define PKG_VER_FMT "%s-" BLOB_FMT #define PKG_VER_PRINTF(pkg) (pkg)->name->name, BLOB_PRINTF(*(pkg)->version) #define PKG_VER_STRLEN(pkg) (strlen(pkg->name->name) + 1 + pkg->version->len) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/app_update.c new/apk-tools-3.0.6/src/app_update.c --- old/apk-tools-3.0.5/src/app_update.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/app_update.c 2026-04-13 10:36:44.000000000 +0200 @@ -32,9 +32,11 @@ struct apk_database *db = ac->db; const char *msg = "OK:"; char buf[64]; + int r = db->repositories.unavailable + db->repositories.stale; - if (apk_out_verbosity(out) < 1) - return db->repositories.unavailable + db->repositories.stale; + if (db->idb_dirty && apk_db_write_config(db) != 0) r++; + + if (apk_out_verbosity(out) < 1) return r; apk_db_foreach_repository(repo, db) { if (!repo->available) continue; @@ -50,8 +52,7 @@ apk_msg(out, "%s %d distinct packages available", msg, db->available.packages.num_items); - - return db->repositories.unavailable + db->repositories.stale; + return r; } static struct apk_applet apk_update = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/app_upgrade.c new/apk-tools-3.0.6/src/app_upgrade.c --- old/apk-tools-3.0.5/src/app_upgrade.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/app_upgrade.c 2026-04-13 10:36:44.000000000 +0200 @@ -167,9 +167,9 @@ extern char **apk_argv; char **argv = malloc(sizeof(char*[apk_argc+2])); memcpy(argv, apk_argv, sizeof(char*[apk_argc])); - apk_argv[apk_argc] = "--no-self-upgrade"; - apk_argv[apk_argc+1] = NULL; - execvp(apk_argv[0], apk_argv); + argv[apk_argc] = "--no-self-upgrade"; + argv[apk_argc+1] = NULL; + execvp(argv[0], argv); apk_err(out, "PANIC! Failed to re-execute new apk-tools!"); exit(1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/blob.c new/apk-tools-3.0.6/src/blob.c --- old/apk-tools-3.0.5/src/blob.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/blob.c 2026-04-13 10:36:44.000000000 +0200 @@ -187,7 +187,7 @@ while (apk_blob_split(fmt, var_start, &prefix, &key)) { apk_blob_push_blob(&to, prefix); - if (APK_BLOB_IS_NULL(to)) return -ENOBUFS; + if (APK_BLOB_IS_NULL(to)) return -APKE_BUFFER_SIZE; if (!apk_blob_split(key, var_end, &key, &fmt)) return -APKE_FORMAT_INVALID; char *max_advance = to.ptr + to.len; if (apk_blob_split(key, colon, &key, &len)) { @@ -203,7 +203,7 @@ } apk_blob_push_blob(&to, fmt); apk_blob_push_blob(&to, APK_BLOB_PTR_LEN("", 1)); - if (APK_BLOB_IS_NULL(to)) return -ENOBUFS; + if (APK_BLOB_IS_NULL(to)) return -APKE_BUFFER_SIZE; return to.ptr - buf - 1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/commit.c new/apk-tools-3.0.6/src/commit.c --- old/apk-tools-3.0.5/src/commit.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/commit.c 2026-04-13 10:36:44.000000000 +0200 @@ -715,7 +715,7 @@ static void analyze_package(struct print_state *ps, struct apk_package *pkg, unsigned int tag) { - char pkgtext[256]; + char pkgtext[PKG_VER_MAX]; ps->label = apk_fmts(pkgtext, sizeof pkgtext, PKG_VER_FMT, PKG_VER_PRINTF(pkg)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/database.c new/apk-tools-3.0.6/src/database.c --- old/apk-tools-3.0.5/src/database.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/database.c 2026-04-13 10:36:44.000000000 +0200 @@ -608,6 +608,10 @@ old_repos = idb->repos; idb->repos |= pkg->repos; if (!idb->filename_ndx) idb->filename_ndx = pkg->filename_ndx; + if (!old_repos && idb->size != pkg->size) { + idb->size = pkg->size; + db->idb_dirty = 1; + } } if (idb->repos && !old_repos) { pkg->name->has_repository_providers = 1; @@ -682,18 +686,18 @@ struct apk_istream *is; struct apk_ostream *os; struct apk_extract_ctx ectx; - char cache_url[NAME_MAX], download_url[PATH_MAX]; + char cache_filename[NAME_MAX], download_url[PATH_MAX]; int r, download_fd, cache_fd, tee_flags = 0; time_t download_mtime = 0; if (pkg != NULL) { - r = apk_repo_package_url(db, &db->cache_repository, pkg, &cache_fd, cache_url, sizeof cache_url); + r = apk_repo_package_url(db, &db->cache_repository, pkg, &cache_fd, cache_filename, sizeof cache_filename); if (r < 0) return r; r = apk_repo_package_url(db, repo, pkg, &download_fd, download_url, sizeof download_url); if (r < 0) return r; tee_flags = APK_ISTREAM_TEE_COPY_META; } else { - r = apk_repo_index_cache_url(db, repo, &cache_fd, cache_url, sizeof cache_url); + r = apk_repo_index_cache_url(db, repo, &cache_fd, cache_filename, sizeof cache_filename); if (r < 0) return r; download_mtime = repo->mtime; download_fd = AT_FDCWD; @@ -703,7 +707,7 @@ } if (db->ctx->flags & APK_SIMULATE) return 0; - os = apk_ostream_to_file_safe(cache_fd, cache_url, 0644); + os = apk_ostream_to_file_safe(cache_fd, cache_filename, 0644); if (IS_ERR(os)) return PTR_ERR(os); is = apk_istream_from_fd_url_if_modified(download_fd, download_url, apk_db_url_since(db, download_mtime)); @@ -713,7 +717,7 @@ if (pkg) apk_extract_verify_identity(&ectx, pkg->digest_alg, apk_pkg_digest_blob(pkg)); r = apk_extract(&ectx, is); if (r == -APKE_FILE_UNCHANGED) { - if (!tee_flags) utimensat(cache_fd, cache_url, NULL, 0); + if (!tee_flags) utimensat(cache_fd, cache_filename, NULL, 0); return r; } if (pkg) pkg->cached = 1; @@ -894,7 +898,7 @@ break; } - diri = apk_db_diri_get(db, bdir, pkg); + diri = apk_db_diri_get(db, bdir, NULL); if (bfile.len == 0) { diri->dir->created = 1; } else { @@ -1145,7 +1149,7 @@ bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf); if (APK_BLOB_IS_NULL(bbuf)) { - r = -ENOBUFS; + r = -APKE_BUFFER_SIZE; goto err; } r = apk_ostream_write(os, bbuf.ptr, bbuf.len); @@ -1170,7 +1174,7 @@ bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf); if (APK_BLOB_IS_NULL(bbuf)) { - r = -ENOBUFS; + r = -APKE_BUFFER_SIZE; goto err; } r = apk_ostream_write(os, bbuf.ptr, bbuf.len); @@ -1527,15 +1531,15 @@ static bool is_index_stale(struct apk_database *db, struct apk_repository *repo) { struct stat st; - char cache_url[NAME_MAX]; + char cache_filename[NAME_MAX]; int cache_fd; if (!db->autoupdate) return false; if (!repo->is_remote) return false; if (!db->ctx->cache_max_age) return true; if (db->ctx->force & APK_FORCE_REFRESH) return true; - if (apk_repo_index_cache_url(db, repo, &cache_fd, cache_url, sizeof cache_url) < 0) return true; - if (fstatat(cache_fd, cache_url, &st, 0) != 0) return true; + if (apk_repo_index_cache_url(db, repo, &cache_fd, cache_filename, sizeof cache_filename) < 0) return true; + if (fstatat(cache_fd, cache_filename, &st, 0) != 0) return true; repo->mtime = st.st_mtime; return (time(NULL) - st.st_mtime) > db->ctx->cache_max_age; } @@ -1609,7 +1613,7 @@ const char *error_action = "constructing url"; unsigned int repo_mask = BIT(repo_num); unsigned int available_repos = 0; - char open_url[NAME_MAX]; + char open_url[PATH_MAX]; int r, update_error = 0, open_fd = AT_FDCWD; error_action = "opening"; @@ -3070,7 +3074,7 @@ if (!file->broken) { ctrl = APK_FS_CTRL_COMMIT; - if (ofile && ofile->diri->pkg->name == NULL) { + if (ofile && !ofile->diri->pkg) { // File was from overlay, delete the package's version ctrl = APK_FS_CTRL_CANCEL; } else if (!apk_protect_mode_none(diri->dir->protect_mode) && @@ -3149,7 +3153,7 @@ struct apk_istream *is = NULL; struct apk_repository *repo; struct apk_package *pkg = ipkg->pkg; - char file_url[PATH_MAX], cache_url[NAME_MAX]; + char file_url[PATH_MAX], cache_filename[NAME_MAX]; int r, file_fd = AT_FDCWD, cache_fd = AT_FDCWD; bool need_copy = false; @@ -3172,9 +3176,9 @@ is = apk_progress_istream(&pis, is, prog); if (need_copy) { struct apk_istream *origis = is; - r = apk_repo_package_url(db, &db->cache_repository, pkg, &cache_fd, cache_url, sizeof cache_url); + r = apk_repo_package_url(db, &db->cache_repository, pkg, &cache_fd, cache_filename, sizeof cache_filename); if (r == 0) - is = apk_istream_tee(is, apk_ostream_to_file_safe(cache_fd, cache_url, 0644), + is = apk_istream_tee(is, apk_ostream_to_file_safe(cache_fd, cache_filename, 0644), APK_ISTREAM_TEE_COPY_META|APK_ISTREAM_TEE_OPTIONAL); if (is == origis) apk_warn(out, PKG_VER_FMT": unable to cache package", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/extract_v3.c new/apk-tools-3.0.6/src/extract_v3.c --- old/apk-tools-3.0.5/src/extract_v3.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/extract_v3.c 2026-04-13 10:36:44.000000000 +0200 @@ -85,6 +85,7 @@ break; case S_IFLNK: case S_IFREG: + if (target.len >= PATH_MAX-1) goto err_schema; target_path = alloca(target.len + 1); memcpy(target_path, target.ptr, target.len); target_path[target.len] = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/io.c new/apk-tools-3.0.6/src/io.c --- old/apk-tools-3.0.5/src/io.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/io.c 2026-04-13 10:36:44.000000000 +0200 @@ -151,7 +151,7 @@ is->ptr = ptr; is->end = ptr + buf_used; } else { - if (is->end == is->buf+is->buf_size) return -ENOBUFS; + if (is->end == is->buf+is->buf_size) return -APKE_BUFFER_SIZE; } ssize_t sz = is->ops->read(is, is->end, is->buf + is->buf_size - is->end); @@ -1265,7 +1265,7 @@ va_start(va, fmt); n = vsnprintf(buf, sizeof buf, fmt, va); va_end(va); - if (n > sizeof buf) return apk_ostream_cancel(os, -ENOBUFS); + if (n > sizeof buf) return apk_ostream_cancel(os, -APKE_BUFFER_SIZE); return apk_ostream_write(os, buf, n); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/package.c new/apk-tools-3.0.6/src/package.c --- old/apk-tools-3.0.5/src/package.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/package.c 2026-04-13 10:36:44.000000000 +0200 @@ -875,7 +875,7 @@ apk_blob_push_blob(&bbuf, APK_BLOB_STR("\n")); if (APK_BLOB_IS_NULL(bbuf)) - return apk_ostream_cancel(os, -ENOBUFS); + return apk_ostream_cancel(os, -APKE_BUFFER_SIZE); bbuf = apk_blob_pushed(APK_BLOB_BUF(buf), bbuf); if (apk_ostream_write(os, bbuf.ptr, bbuf.len) < 0 || @@ -916,16 +916,15 @@ int apk_pkg_replaces_dir(const struct apk_package *a, const struct apk_package *b) { - const struct apk_installed_package *ai = a->ipkg, *bi = b->ipkg; - /* Prefer overlay */ - if (a->name == NULL) return APK_PKG_REPLACES_NO; - if (b->name == NULL) return APK_PKG_REPLACES_YES; + if (!a) return APK_PKG_REPLACES_NO; + if (!b) return APK_PKG_REPLACES_YES; /* Upgrading package? */ if (a->name == b->name) return APK_PKG_REPLACES_YES; /* Replace files on removal */ + const struct apk_installed_package *ai = a->ipkg, *bi = b->ipkg; if (ai->to_be_removed) return APK_PKG_REPLACES_YES; if (bi->to_be_removed) return APK_PKG_REPLACES_NO; @@ -949,16 +948,17 @@ int apk_pkg_replaces_file(const struct apk_package *a, const struct apk_package *b) { - const struct apk_installed_package *ai = a->ipkg, *bi = b->ipkg; int a_prio = -1, b_prio = -1; /* Overlay file? Replace the ownership, but extraction will keep the overlay file. */ - if (a->name == NULL) return APK_PKG_REPLACES_YES; + if (!a) return APK_PKG_REPLACES_YES; + if (!b) return APK_PKG_REPLACES_NO; /* Upgrading package? */ if (a->name == b->name) return APK_PKG_REPLACES_YES; /* Replace files on removal */ + const struct apk_installed_package *ai = a->ipkg, *bi = b->ipkg; if (ai->to_be_removed) return APK_PKG_REPLACES_YES; if (bi->to_be_removed) return APK_PKG_REPLACES_NO; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/print.c new/apk-tools-3.0.6/src/print.c --- old/apk-tools-3.0.5/src/print.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/print.c 2026-04-13 10:36:44.000000000 +0200 @@ -85,6 +85,7 @@ func(APKE_REPO_SYNTAX, "repositories file syntax error") \ func(APKE_REPO_KEYWORD, "unsupported repositories file keyword") \ func(APKE_REPO_VARIABLE, "undefined repositories file variable") \ + func(APKE_BUFFER_SIZE, "internal buffer too small") \ const char *apk_error_str(int error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/src/query.c new/apk-tools-3.0.6/src/query.c --- old/apk-tools-3.0.5/src/query.c 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/src/query.c 2026-04-13 10:36:44.000000000 +0200 @@ -321,7 +321,7 @@ static void pkgser_serialize_package(struct pkgser_ctx *pc, struct apk_package *pkg) { - char buf[FILENAME_MAX]; + char buf[PKG_VER_MAX]; apk_ser_string(pc->ser, apk_blob_fmt(buf, sizeof buf, PKG_VER_FMT, PKG_VER_PRINTF(pkg))); } @@ -660,13 +660,14 @@ static void pkgpkgser_match_dependency(struct pkgser_ctx *pc, struct apk_dependency_array *deps, bool provides) { struct apk_serializer *ser = pc->ser; - // TODO: This dependency operator/version is not used for normal dependencies; only for provides - // where the provided version is matched same as normal package version. struct match_ctx *m = container_of(ser, struct match_ctx, ser); if (m->done_matching) return; apk_array_foreach(dep, deps) { - if (!match_string(m, dep->name->name)) continue; - if (provides && !apk_version_match(*m->dep.version, m->dep.op, *dep->version)) continue; + if (!match_blob(m, APK_BLOB_STR(dep->name->name))) continue; + if (m->dep.op != APK_DEPMASK_ANY) { + if (provides && !apk_version_match(*m->dep.version, m->dep.op, *dep->version)) continue; + if (!provides && (m->dep.op != dep->op || apk_blob_compare(*m->dep.version, *dep->version))) continue; + } m->qm.name = dep->name; m->cb(m->cb_ctx, &m->qm); m->has_matches = true; @@ -941,7 +942,7 @@ } apk_ser_end(ser); } else if (apk_array_len(s.pkgs)) { - char buf[FILENAME_MAX]; + char buf[PKG_VER_MAX]; apk_array_qsort(s.pkgs, apk_package_array_qsort); apk_ser_start_array(ser, apk_array_len(s.pkgs)); apk_array_foreach_item(pkg, s.pkgs) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/test/user/overlay.sh new/apk-tools-3.0.6/test/user/overlay.sh --- old/apk-tools-3.0.5/test/user/overlay.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/apk-tools-3.0.6/test/user/overlay.sh 2026-04-13 10:36:44.000000000 +0200 @@ -0,0 +1,37 @@ +#!/bin/sh + +TESTDIR=$(realpath "${TESTDIR:-"$(dirname "$0")"/..}") +. "$TESTDIR"/testlib.sh + +setup_apkroot +APK="$APK --allow-untrusted --no-interactive --force-no-chroot" + +mkdir -p pkg/etc pkg/data "$TEST_ROOT"/etc "$TEST_ROOT"/data +for f in etc/a etc/b etc/c data/d data/e; do + echo "package" > pkg/"$f" + echo "overlay" > "$TEST_ROOT"/"$f" +done + +$APK mkpkg -F pkg -I name:overlay -I version:1.0 -o overlay-1.0.apk + +$APK add --initdb $TEST_USERMODE --overlay-from-stdin overlay-1.0.apk > apk-stdout.log 2>&1 <<EOF || assert "install fail" +etc/b +data/e +EOF + +diff -u - apk-stdout.log <<EOF || assert "wrong scripts result" +(1/1) Installing overlay (1.0) + Installing file to etc/a.apk-new + Installing file to etc/c.apk-new +OK: 40 B in 1 packages +EOF + +cd "$TEST_ROOT" +[ "$(cat etc/a)" = "overlay" ] || assert "etc/a updated unexpectedly" +[ "$(cat etc/a.apk-new)" = "package" ] || assert "etc/a.apk-new missing" +[ "$(cat etc/b)" = "overlay" ] || assert "etc/b updated unexpectedly" +[ ! -e "etc/b.apk-new" ] || assert "etc/b.apk-new exists" +[ "$(cat etc/c)" = "overlay" ] || assert "etc/c updated unexpectedly" +[ "$(cat etc/c.apk-new)" = "package" ] || assert "etc/c.apk-new missing" +[ "$(cat data/d)" = "package" ] || assert "data/d updated unexpectedly" +[ "$(cat data/e)" = "overlay" ] || assert "data/e updated unexpectedly" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/apk-tools-3.0.5/test/user/query.sh new/apk-tools-3.0.6/test/user/query.sh --- old/apk-tools-3.0.5/test/user/query.sh 2026-02-25 13:15:59.000000000 +0100 +++ new/apk-tools-3.0.6/test/user/query.sh 2026-04-13 10:36:44.000000000 +0200 @@ -176,6 +176,12 @@ apk-tools EOF +$APK query --format yaml --fields origin,package --match depends "musl>=1.2.3_git20230424" 2>&1 | diff -u /dev/fd/4 4<<EOF - || assert "wrong result" +# 1 items +- package: apk-tools-2.14.6-r3 + origin: apk-tools +EOF + $APK query --format json --installed "musl*" 2>&1 | diff -u /dev/fd/4 4<<EOF - || assert "wrong result" [ {
