openSUSE / obs-build

OBS build script, can be used with OBS or stand alone
GNU General Public License v2.0
132 stars 183 forks source link

Can not resolve build dependency of old version #935

Open TLIAOatEB opened 1 year ago

TLIAOatEB commented 1 year ago

This issue is reproduced here https://build.opensuse.org/project/show/home:TLIAOatEB:old-BD-version-resolving-issue Steps to reproduce:

  1. debian-package_0.0.1 has the build dependency build-dependency (= 0.0.1-1) and was built successfully.

    Build-Depends: build-dependency (=0.0.1-1), debhelper (>=11~)

  2. After adding package build-dependency_0.0.2, debian-package_0.0.1 can not build anymore, getting 'unresolvable' error:

    nothing provides build-dependency = 0.0.1-1, (got version 0.0.2-1)

  3. However, build-dependency_0.0.1 can be found and installed by apt:

    ~$ sudo apt install build-dependency=0.0.1-1 Reading package lists... Done Building dependency tree
    Reading state information... Done The following packages were automatically installed and are no longer required: bridge-utils ubuntu-fan Use 'sudo apt autoremove' to remove them. The following NEW packages will be installed: build-dependency 0 upgraded, 1 newly installed, 0 to remove and 210 not upgraded. Need to get 2372 B of archives. After this operation, 14.3 kB of additional disk space will be used. Get:1 https://download.opensuse.org/repositories/home:/TLIAOatEB:/old-BD-version-resolving-issue/xUbuntu_20.04 ./ build-dependency 0.0.1-1 [2372 B] Fetched 2372 B in 0s (9779 B/s)
    Selecting previously unselected package build-dependency. (Reading database ... 116793 files and directories currently installed.) Preparing to unpack .../build-dependency_0.0.1-1_amd64.deb ... Unpacking build-dependency (0.0.1-1) ... Setting up build-dependency (0.0.1-1) ...

So my expection is, as build-dependency_0.0.1-1_amd64.deb can be installed by apt, it shall also be found by OBS build.

To be able to have multiple versions of a package in one OBS project is a very straight-forward idea for me and a very important approach for my company, for following reasons:

  1. When upstream updates from 0.0.1 to 0.0.2, you can simply add one more OBS package debian-package_0.0.2, with OBS package debian-package_0.0.1 kept and thus the built deb file debian-package_0.0.1-1_amd64.deb kept.
  2. Installation user needs only one OBS project repo registered in /etc/apt/sources.list to access all available versions of a package.
  3. Build-dependency user can specify B-D version in debian/control to ensure traceability and reproducibility of his package. All B-D versions come from one OBS project, so he doesn't need to figure out for a certain B-D version which OBS project to use in his project Meta.
  4. Package maintainer has easier life. If upstream 0.0.1 only supports Ubuntu20.04 and upstream 0.0.2 comes to only support Ubuntu22.04, he can simply add debian-package_0.0.2 and make it built only for repo xUbuntu22.04, while support for Ubuntu20.04 still maintained by debian-package_0.0.1-1_amd64.deb in repo xUbuntu22.04. All this in one OBS project, no need to create another OBS project just for Ubuntu22.04 support.