Le 20/03/2026 à 11:05, Xavier a écrit :
Control: tags -1 + patch

Hi,

here is a little patch that may fix the issue. Bug was discovered in #1131311: - dh-sequence-nodejs automatically added "Provides: node-rollup-plugin- terser (= 1.0.0)" into node-rollup-plugin-terser 7.0.2+~cs8.6.4-1. - This is fixed in pkg-js-tools 0.17.3, and a workaround is set in version 7.0.2+~cs8.6.4-2

However, the message given by apt in its log was totally wrong (se bellow).

This little patch avoid checking the bad version.



----
Example of bad logs:

   The following packages have unmet dependencies:
    node-rollup-plugin-terser : Depends: node-babel-code-frame (>= 7)
                                Depends: node-babel-parser (>= 7)
                               Depends: node-jest-worker (>= 27~) but it is not going to be installed                                Depends: node-serialize-javascript but it is not going to be installed                                Depends: node-terser (>= 5) but it is not going to be installed
                                Depends: nodejs:any
   E: Unable to satisfy dependencies. Reached two conflicting assignments:
     1. node-rollup-plugin-terser:amd64=7.0.2+~cs8.6.4-1 is selected for install
      2. node-rollup-plugin-terser:amd64 Depends node-jest-worker (>= 27~)
         but none of the choices are installable:
         - node-jest-worker:amd64 is not selected for install because:
          1. node-rollup-plugin-terser:amd64=7.0.2+~cs8.6.4-1 is selected for install           2. node-jest-worker:amd64 Breaks node-rollup-plugin-terser (< 7.0.2-6~)

Here is also a little test
#!/bin/sh
set -e

# Test that Breaks are not incorrectly matched via self-provides.
#
# When a package provides itself at a different version (e.g. embedded
# component version via ${nodejs:Provides}), a Breaks targeting the
# package should check the real package version, not the self-provide
# version.
#
# Regression test for a piuparts failure where apt refused to install
# node-rollup-plugin-terser=7.0.2+~cs8.6.4-1 because node-terser's
# Breaks (<< 7.0.2+~5.0.1-3~) matched via a self-provide at version
# 1.0.0 (an embedded component version), even though the real package
# version 7.0.2+~cs8.6.4-1 is NOT less than 7.0.2+~5.0.1-3~.

TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'amd64'

msgmsg "Self-provide at lower version should not trigger Breaks"
# pkg-a=3.0 self-provides pkg-a (= 1.0) via an embedded component
# pkg-b Breaks pkg-a (<< 2.0) — should NOT match because pkg-a is at 3.0
insertpackage 'unstable' 'pkg-a' 'all' '3.0' 'Depends: pkg-b
Provides: pkg-a (= 1.0)'
insertpackage 'unstable' 'pkg-b' 'all' '1.0' 'Breaks: pkg-a (<< 2.0)'

setupaptarchive

testsuccess aptget install pkg-a -s
testsuccess aptget install pkg-a -s --solver 3.0

msgmsg "Realistic node package scenario with +~ versions and self-provide"
# node-rollup-plugin-terser=7.0.2+~cs8.6.4-1 self-provides itself at
# version 1.0.0 (embedded @rollup/plugin-terser component).
# node-terser Breaks: node-rollup-plugin-terser (<< 7.0.2+~5.0.1-3~)
# The Breaks should NOT match because the real version is 7.0.2+~cs8.6.4-1
insertpackage 'unstable' 'node-rollup-plugin-terser' 'all' '7.0.2+~cs8.6.4-1' 
'Depends: node-terser (>= 5), node-jest-worker (>= 27~)
Provides: node-rollup-plugin-terser (= 1.0.0), node-ascjs (= 6.0.3), node-smob 
(= 1.6.1)'
insertpackage 'unstable' 'node-terser' 'all' '5.46.1-1' 'Breaks: 
node-rollup-plugin-terser (<< 7.0.2+~5.0.1-3~)
Replaces: node-rollup-plugin-terser (<< 7.0.2+~5.0.1-3~)'
insertpackage 'unstable' 'node-jest-worker' 'all' '29.6.2-2' 'Breaks: 
node-rollup-plugin-terser (<< 7.0.2-6~)'

setupaptarchive

testsuccess aptget install node-rollup-plugin-terser -s
testsuccess aptget install node-rollup-plugin-terser -s --solver 3.0
testsuccess aptget install node-rollup-plugin-terser=7.0.2+~cs8.6.4-1 -s
testsuccess aptget install node-rollup-plugin-terser=7.0.2+~cs8.6.4-1 -s 
--solver 3.0

msgmsg "Provide from a DIFFERENT package should still trigger Breaks"
# pkg-c provides pkg-d (= 1.0), pkg-e Breaks pkg-d (<< 2.0)
# This SHOULD match because pkg-c is not pkg-d
insertpackage 'unstable' 'pkg-c' 'all' '3.0' 'Provides: pkg-d (= 1.0)'
insertpackage 'unstable' 'pkg-e' 'all' '1.0' 'Breaks: pkg-d (<< 2.0)'

setupaptarchive

testsuccess aptget install pkg-c -s
testsuccess aptget install pkg-e -s
# Both can be installed because Breaks on pkg-d only prevents
# pkg-d itself (or same-group packages) from being installed,
# not unrelated providers

Reply via email to