Browse Source

apt-ftparchive: Support NotAutomatic and ButAutomaticUpgrades fields

This also changes Acquire-By-Hash to be "yes" rather than "true", so it
is consistent with dak's output.

Closes: #272557
tags/debian/1.4_beta1
James Clarke David Kalnischkies 4 years ago
parent
commit
a658ffbf19
5 changed files with 93 additions and 17 deletions
  1. +3
    -1
      doc/apt-ftparchive.1.xml
  2. +25
    -11
      ftparchive/writer.cc
  3. +10
    -4
      test/integration/framework
  4. +1
    -1
      test/integration/test-apt-ftparchive-by-hash
  5. +54
    -0
      test/integration/test-apt-ftparchive-notautomatic

+ 3
- 1
doc/apt-ftparchive.1.xml View File

@@ -106,7 +106,9 @@
e.g. <literal>APT::FTPArchive::Release::Origin</literal>. The supported fields
are <literal>Origin</literal>, <literal>Label</literal>, <literal>Suite</literal>,
<literal>Version</literal>, <literal>Codename</literal>, <literal>Date</literal>,
<literal>Valid-Until</literal>, <literal>Signed-By</literal>, <literal>Architectures</literal>,
<literal>NotAutomatic</literal>, <literal>ButAutomaticUpgrades</literal>,
<literal>Acquire-By-Hash</literal>, <literal>Valid-Until</literal>,
<literal>Signed-By</literal>, <literal>Architectures</literal>,
<literal>Components</literal> and <literal>Description</literal>.</para></listitem>

</varlistentry>


+ 25
- 11
ftparchive/writer.cc View File

@@ -1004,6 +1004,7 @@ ReleaseWriter::ReleaseWriter(FileFd * const GivenOutput, string const &/*DB*/) :
time_t const now = time(NULL);
time_t const validuntil = now + _config->FindI("APT::FTPArchive::Release::ValidTime", 0);

map<string,bool> BoolFields;
map<string,string> Fields;
Fields["Origin"] = "";
Fields["Label"] = "";
@@ -1017,19 +1018,32 @@ ReleaseWriter::ReleaseWriter(FileFd * const GivenOutput, string const &/*DB*/) :
Fields["Components"] = "";
Fields["Description"] = "";
Fields["Signed-By"] = "";
if (_config->FindB("APT::FTPArchive::DoByHash", false) == true)
Fields["Acquire-By-Hash"] = "true";
for(map<string,string>::const_iterator I = Fields.begin();
I != Fields.end();
++I)
BoolFields["Acquire-By-Hash"] = _config->FindB("APT::FTPArchive::DoByHash", false);
BoolFields["NotAutomatic"] = false;
BoolFields["ButAutomaticUpgrades"] = false;
// Read configuration for string fields, but don't output them
for (auto &&I : Fields)
{
string Config = string("APT::FTPArchive::Release::") + (*I).first;
string Value = _config->Find(Config, (*I).second.c_str());
if (Value == "")
continue;
string Config = string("APT::FTPArchive::Release::") + I.first;
I.second = _config->Find(Config, I.second);
}

std::string const out = I->first + ": " + Value + "\n";
// Read configuration for bool fields, and add them to Fields if true
for (auto &&I : BoolFields)
{
string Config = string("APT::FTPArchive::Release::") + I.first;
I.second = _config->FindB(Config, I.second);
if (I.second)
Fields[I.first] = "yes";
}

// All configuration read and stored in Fields; output
for (auto &&I : Fields)
{
if (I.second.empty())
continue;
std::string const out = I.first + ": " + I.second + "\n";
Output->Write(out.c_str(), out.length());
}



+ 10
- 4
test/integration/framework View File

@@ -1053,6 +1053,12 @@ getreleaseversionfromsuite() { true; }
getlabelfromsuite() { true; }
getoriginfromsuite() { true; }
getarchitecturesfromreleasefile() { echo "all $(getarchitectures)"; }
getnotautomaticfromsuite() {
case "$1" in
experimental|experimental2) echo "yes";;
esac
}
getbutautomaticupgradesfromsuite() { true; }

aptftparchiverelease() {
aptftparchive -qq release "$@" | sed -e '/0 Release$/ d' # remove the self reference
@@ -1071,6 +1077,8 @@ generatereleasefiles() {
local VERSION="$(getreleaseversionfromsuite $SUITE)"
local LABEL="$(getlabelfromsuite $SUITE)"
local ORIGIN="$(getoriginfromsuite $SUITE)"
local NOTAUTOMATIC="$(getnotautomaticfromsuite $SUITE)"
local BUTAUTOMATICUPGRADES="$(getbutautomaticupgradesfromsuite $SUITE)"
aptftparchiverelease "$dir" \
-o APT::FTPArchive::Release::Suite="${SUITE}" \
-o APT::FTPArchive::Release::Codename="${CODENAME}" \
@@ -1078,11 +1086,9 @@ generatereleasefiles() {
-o APT::FTPArchive::Release::Label="${LABEL}" \
-o APT::FTPArchive::Release::Origin="${ORIGIN}" \
-o APT::FTPArchive::Release::Version="${VERSION}" \
-o APT::FTPArchive::Release::NotAutomatic="${NOTAUTOMATIC}" \
-o APT::FTPArchive::Release::ButAutomaticUpgrades="${BUTAUTOMATICUPGRADES}" \
> "$dir/Release"
if [ "$SUITE" = "experimental" -o "$SUITE" = "experimental2" ]; then
sed -i '/^Date: / a\
NotAutomatic: yes' "$dir/Release"
fi
done
else
msgninfo "\tGenerate Release files for flat… "


+ 1
- 1
test/integration/test-apt-ftparchive-by-hash View File

@@ -46,7 +46,7 @@ verify_by_hash
testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/SHA256/$previous_hash

# ensure we have it in the Release file
testsuccess grep "Acquire-By-Hash: true" aptarchive/dists/unstable/*Release
testsuccess grep "Acquire-By-Hash: yes" aptarchive/dists/unstable/*Release

# now ensure gc work
for i in $(seq 3); do


+ 54
- 0
test/integration/test-apt-ftparchive-notautomatic View File

@@ -0,0 +1,54 @@
#!/bin/sh
set -e

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

getnotautomaticfromsuite() {
case "$1" in
experimental|backports) echo 'yes';;
esac
}
getbutautomaticupgradesfromsuite() {
case "$1" in
backports) echo 'yes';;
esac
}

insertpackage 'unstable' 'foo' 'i386' '1'
insertpackage 'backports' 'foo' 'i386' '3~bpo1'
insertpackage 'experimental' 'foo' 'i386' '3'
setupaptarchive

# check no unstable NotAutomatic field
testfailure grep "NotAutomatic:" aptarchive/dists/unstable/*Release
# check backports NotAutomatic field
testsuccess grep "NotAutomatic: yes" aptarchive/dists/backports/*Release
# check experimental NotAutomatic field
testsuccess grep "NotAutomatic: yes" aptarchive/dists/experimental/*Release

# check no unstable ButAutomaticUpgrades field
testfailure grep "ButAutomaticUpgrades:" aptarchive/dists/unstable/*Release
# check backports ButAutomaticUpgrades field
testsuccess grep "ButAutomaticUpgrades: yes" aptarchive/dists/backports/*Release
# check no experimental ButAutomaticUpgrades field
testfailure grep "ButAutomaticUpgrades:" aptarchive/dists/experimental/*Release

testsuccessequal 'Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
foo
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst foo (1 unstable [i386])
Conf foo (1 unstable [i386])' apt install foo -s

insertinstalledpackage 'foo' 'i386' '2'
testsuccessequal 'Reading package lists...
Building dependency tree...
The following packages will be upgraded:
foo
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst foo [2] (3~bpo1 backports [i386])
Conf foo (3~bpo1 backports [i386])' apt install foo -s

Loading…
Cancel
Save