#!/bin/sh
set -e

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

insertinstalledpackage 'git' 'amd64' '1:2.25.1-1' 'Multi-Arch: foreign'
insertinstalledpackage 'git-cvs' 'amd64' '1:2.25.1-1' 'Depends: git (>> 1:2.25.1), git (<< 1:2.25.1-.)'


insertpackage 'unstable' 'git' 'amd64,i386' '1:2.26.2-1' 'Multi-Arch: foreign'
insertpackage 'unstable' 'git-cvs' 'amd64,i386' '1:2.26.2-1' 'Depends: git (>> 1:2.26.2), git (<< 1:2.26.2-.)'
insertpackage 'unstable' 'git-ng' 'amd64,i386' '1:2.26.2-1' 'Depends: git (>> 1:2.26.2), git (<< 1:2.26.2-.)'

setupaptarchive

msgmsg 'The setup is' 'fine'
UPGRADE='Reading package lists...
Building dependency tree...
Calculating upgrade...
The following packages will be upgraded:
  git git-cvs
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst git-cvs [1:2.25.1-1] (1:2.26.2-1 unstable [amd64]) []
Inst git [1:2.25.1-1] (1:2.26.2-1 unstable [amd64])
Conf git-cvs (1:2.26.2-1 unstable [amd64])
Conf git (1:2.26.2-1 unstable [amd64])'
testsuccessequal "$UPGRADE" apt upgrade -s
testsuccessequal "$UPGRADE" aptget upgrade -s
testsuccessequal "$UPGRADE" apt full-upgrade -s
testsuccessequal "$UPGRADE" aptget dist-upgrade -s

testsuccessequal 'Reading package lists...
Building dependency tree...
The following additional packages will be installed:
  git git-cvs
The following NEW packages will be installed:
  git-ng
The following packages will be upgraded:
  git git-cvs
2 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst git-cvs [1:2.25.1-1] (1:2.26.2-1 unstable [amd64]) []
Inst git [1:2.25.1-1] (1:2.26.2-1 unstable [amd64])
Inst git-ng (1:2.26.2-1 unstable [amd64])
Conf git-cvs (1:2.26.2-1 unstable [amd64])
Conf git (1:2.26.2-1 unstable [amd64])
Conf git-ng (1:2.26.2-1 unstable [amd64])' apt install git-ng -s


msgmsg 'Now mix it up by' 'holding git'
testsuccessequal 'git set on hold.' aptmark hold git
testsuccessequal 'git' aptmark showholds

NOUPGRADE='Reading package lists...
Building dependency tree...
Calculating upgrade...
The following packages have been kept back:
  git git-cvs
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.'

testsuccessequal "$NOUPGRADE" apt upgrade -s
testsuccessequal "$NOUPGRADE" apt full-upgrade -s
testsuccessequal "$NOUPGRADE" aptget dist-upgrade -s
testsuccessequal "$NOUPGRADE" aptget upgrade -s

testfailureequal 'Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-ng : Depends: git (> 1:2.26.2)
E: Unable to correct problems, you have held broken packages.' apt install git-ng -s --solver internal


testfailureequal 'Reading package lists...
Building dependency tree...
Solving dependencies...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-ng : Depends: git (> 1:2.26.2)
E: Unable to satisfy dependencies. Reached two conflicting decisions:
   1. git-ng:amd64=1:2.26.2-1 is selected for install
   2. git-ng:amd64 Depends git (> 1:2.26.2) and Depends git (< 1:2.26.2-.)
      but none of the choices are installable:
      - git:amd64=1:2.26.2-1 is not selected for install because:
        1. git:amd64=1:2.25.1-1 is selected for install
        2. git:amd64=1:2.25.1-1 conflicts with other versions of itself
      - git:i386=1:2.26.2-1 is not selected for install because:
        1. git:amd64=1:2.25.1-1 is selected for install as above
        2. git:amd64 Conflicts git:i386' apt install git-ng -s --solver 3.0


msgmsg 'Now mix it up by' 'holding git-cvs'
testsuccessequal 'Canceled hold on git.' aptmark unhold git
testsuccessequal 'git-cvs set on hold.' aptmark hold git-cvs
testsuccessequal 'git-cvs' aptmark showholds

testsuccessequal "$NOUPGRADE" apt upgrade -s
testsuccessequal "$NOUPGRADE" apt full-upgrade -s
testsuccessequal "$NOUPGRADE" aptget upgrade -s
testsuccessequal "$NOUPGRADE" aptget dist-upgrade -s

testfailureequal 'Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-cvs : Depends: git (< 1:2.25.1-.)
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.' apt install git-ng -s --solver internal


testfailureequal 'Reading package lists...
Building dependency tree...
Solving dependencies...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-ng : Depends: git (> 1:2.26.2)
E: Unable to satisfy dependencies. Reached two conflicting decisions:
   1. git:amd64=1:2.26.2-1 is selected as an upgrade because:
      1. git-ng:amd64=1:2.26.2-1 is selected for install
      2. git-ng:amd64 Depends git (> 1:2.26.2) and Depends git (< 1:2.26.2-.)
         [selected git-ng:amd64]
      For context, additional choices that could not be installed:
      * In git-ng:amd64 Depends git (> 1:2.26.2) and Depends git (< 1:2.26.2-.):
        - git:i386=1:2.26.2-1 is not selected for install because:
          1. git:amd64 is selected for install
          2. git:amd64 Conflicts git:i386
   2. git:amd64=1:2.26.2-1 is not selected for install because:
      1. git-cvs:amd64=1:2.25.1-1 is selected for install
      2. git-cvs:amd64=1:2.25.1-1 Depends git (> 1:2.25.1) and Depends git (< 1:2.25.1-.)
      3. git:amd64=1:2.25.1-1 conflicts with other versions of itself' apt install git-ng -s --solver 3.0


msgmsg 'Now mix it up by' 'holding both'
testsuccessequal 'git set on hold.' aptmark hold git
testsuccessequal 'git
git-cvs' aptmark showholds

testsuccessequal "$NOUPGRADE" apt upgrade -s
testsuccessequal "$NOUPGRADE" apt full-upgrade -s
testsuccessequal "$NOUPGRADE" aptget upgrade -s
testsuccessequal "$NOUPGRADE" aptget dist-upgrade -s

testfailureequal 'Reading package lists...
Building dependency tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-ng : Depends: git (> 1:2.26.2)
E: Unable to correct problems, you have held broken packages.' apt install git-ng -s --solver internal

testfailureequal 'Reading package lists...
Building dependency tree...
Solving dependencies...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 git-ng : Depends: git (> 1:2.26.2)
E: Unable to satisfy dependencies. Reached two conflicting decisions:
   1. git-ng:amd64=1:2.26.2-1 is selected for install
   2. git-ng:amd64 Depends git (> 1:2.26.2) and Depends git (< 1:2.26.2-.)
      but none of the choices are installable:
      - git:amd64=1:2.26.2-1 is not selected for install because:
        1. git:amd64=1:2.25.1-1 is selected for install
        2. git:amd64=1:2.25.1-1 conflicts with other versions of itself
      - git:i386=1:2.26.2-1 is not selected for install because:
        1. git:amd64=1:2.25.1-1 is selected for install as above
        2. git:amd64 Conflicts git:i386' apt install git-ng -s --solver 3.0
