]> git.saurik.com Git - apt.git/log
apt.git
8 years agodo dpkg --configure before --remove/--purge --pending
David Kalnischkies [Mon, 22 Aug 2016 19:33:38 +0000 (21:33 +0200)] 
do dpkg --configure before --remove/--purge --pending

Commit 7ec343309b7bc6001b465c870609b3c570026149 got us most of the way,
but the last mile was botched by having the pending calls in the wrong
order as this way we potentially 'force' dpkg to remove/purge a package
it doesn't want to as another package still depends on it and the
replacement isn't fully installed yet.

So what we do now is a configure before remove and purge (all with
--no-triggers) and finishing off with another configure pending call to
take care of the triggers.

Note that in the bugreport example our current planner is forcing dpkg
to remove the package earlier via --force-depends which we could do for
the pending calls as well and could be used as a workaround, but we want
to do less forcing eventually.

Closes: 835094
8 years agozh_CN.po: update simplified Chinese translation
Zhou Mo [Sat, 20 Aug 2016 13:32:17 +0000 (13:32 +0000)] 
zh_CN.po: update simplified Chinese translation

8 years agoCMake: Fix uninitialized variables
Julian Andres Klode [Sat, 20 Aug 2016 12:41:33 +0000 (14:41 +0200)] 
CMake: Fix uninitialized variables

This fixes some actual bugs for PROJECT and BZIP2_INCLUDE_DIR.

Gbp-Dch: ignore

8 years agoCMake: Translations: Build byproduct before output
Julian Andres Klode [Fri, 19 Aug 2016 23:15:27 +0000 (01:15 +0200)] 
CMake: Translations: Build byproduct before output

This can lead to an inconsistent state otherwise, with the
output being updated and the byproduct not; for example,
when the build was manually interrupted.

8 years agodebian: Get rid of dh_movefiles again
Julian Andres Klode [Fri, 19 Aug 2016 22:25:34 +0000 (00:25 +0200)] 
debian: Get rid of dh_movefiles again

This workaround is a bit more ugly, but does not use a
(somewhat) deprecated debhelper command.

Gbp-Dch: ignore

8 years agodebian: Run wrap-and-sort
Julian Andres Klode [Fri, 19 Aug 2016 18:03:36 +0000 (20:03 +0200)] 
debian: Run wrap-and-sort

Manually clean up the apt.maintscript, it moved stuff from
before the comment to after the comment...

8 years agodebian: Drop outdated stuff
Julian Andres Klode [Fri, 19 Aug 2016 17:49:54 +0000 (19:49 +0200)] 
debian: Drop outdated stuff

The README.source is not usable anymore, and the Build-Conflicts
andd Breaks/Replaces are not needed anymore.

8 years agodebian: Add more lintian overrides
Julian Andres Klode [Fri, 19 Aug 2016 17:42:45 +0000 (19:42 +0200)] 
debian: Add more lintian overrides

8 years agodebian: Switch to debhelper 10
Julian Andres Klode [Fri, 19 Aug 2016 17:26:55 +0000 (19:26 +0200)] 
debian: Switch to debhelper 10

debhelper 10 is much nicer with the installation part from
a dirty tree, so you can just fix some stuff breaking the
install step and then continue building with debuild -b -nc
until you have fixed all your stuff.

It also has some other advantages, of course, like some
bug fixes in shell escaping for maintscript, or systemd
helper changes.

8 years agodebian: Make better use of the tree installed by CMake
Julian Andres Klode [Fri, 19 Aug 2016 15:49:29 +0000 (17:49 +0200)] 
debian: Make better use of the tree installed by CMake

This gets rid of the special casing of etc/apt, various
example file installations handled by the upstream build
system, and of course the directory creation for all dirs
created by the upstream build system.

8 years agoCMake: Install config and logging directories
Julian Andres Klode [Fri, 19 Aug 2016 16:21:04 +0000 (18:21 +0200)] 
CMake: Install config and logging directories

These directories are essential for apt to work, so we should
install them in the upstream build system and not just in the
debian packaging...

8 years agotests/control: Handle the gpg1/gpg2 mess a bit better
Julian Andres Klode [Thu, 18 Aug 2016 12:21:16 +0000 (14:21 +0200)] 
tests/control: Handle the gpg1/gpg2 mess a bit better

Hardcoding gpgv1 and gnupg1 breaks Ubuntu, because on Ubuntu,
these packages do not exist yet. Instead allow gnupg (<< 2)
for gnupg1 and gnupg2 for gnupg (>= 2), so we cover all
potential combinations.

8 years agoprepare-release: Use equivs and gdebi-core for travis deps
Julian Andres Klode [Thu, 18 Aug 2016 12:56:36 +0000 (14:56 +0200)] 
prepare-release: Use equivs and gdebi-core for travis deps

Our previous hack did not really support or groups and other
more advanced dependency types. This hack basically removes
build profiles, and the @-type depends for tests, and otherwise
converts the deps to a package which is then installed via
gdebi.

8 years agoIgnore SIGINT and SIGQUIT for Pre-Install hooks
Julian Andres Klode [Fri, 19 Aug 2016 11:00:33 +0000 (13:00 +0200)] 
Ignore SIGINT and SIGQUIT for Pre-Install hooks

Instead of erroring out when receiving a SIGINT, let the
child deal with it - we'll error out anyway if the child
exits with an error or due to the signal. Also ignore
SIGQUIT, as system() ignores it.

This basically fixes Bug #832593, but: we are running
the hooks via sh -c. Some shells exit with a signal
error even if the command they are executing catches
the signal and exits successfully. So far, this has
been noticed on dash, which unfortunately, is our
default shell.

Example:
$ cat trap.sh
trap 'echo int' INT; sleep 10; exit 0
$ if dash -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
FAIL: 130
$ if mksh -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
OK: 0
$ if bash -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
OK: 0

8 years agoCMake: Translations: Pass --previous to msgmerge
Julian Andres Klode [Fri, 19 Aug 2016 14:31:55 +0000 (16:31 +0200)] 
CMake: Translations: Pass --previous to msgmerge

When updating our .po files, pass --previous to msgmerge
to make it easier for translators to translate fuzzy
strings.

Thanks: Guillem Jover for the suggestion.

8 years agoCMake: Translations: Don't rebuild .mo for line number changes
Julian Andres Klode [Fri, 19 Aug 2016 13:52:14 +0000 (15:52 +0200)] 
CMake: Translations: Don't rebuild .mo for line number changes

If only the line numbers changed in a file without any of the
translatable strings changing, the .po and .mo files were
rebuilt, making building simple code changes somewhat annoying.

We can work around this by passing --add-location=file to msgcomm
when we are creating the temporary .pot file used for building
the .mo files.

8 years agodebian: Install etc/apt if present (e.g., on Ubuntu)
Julian Andres Klode [Thu, 11 Aug 2016 23:36:55 +0000 (01:36 +0200)] 
debian: Install etc/apt if present (e.g., on Ubuntu)

On Ubuntu, cmake installs are vendor-specific apt.conf.d
snippet, causing the build to fail.

8 years agoRelease 1.3~rc2 1.3_rc2
Julian Andres Klode [Wed, 17 Aug 2016 21:47:22 +0000 (23:47 +0200)] 
Release 1.3~rc2

8 years agomethods: read config in most to least specific order
David Kalnischkies [Wed, 17 Aug 2016 19:53:05 +0000 (21:53 +0200)] 
methods: read config in most to least specific order

The implementation of the generic config fallback did the fallback in
the wrong order so that the least specific option wasn't the last value
picked but in fact the first one… doh!

So in the bugreports case http -> https -> http::<hostname> ->
https::<hostname> while it should have been the reverse as before.

Regression-In: 30060442025824c491f58887ca7369f3c572fa57
Closes: 834642
8 years agodon't count each Type as an individual deb822-sources stanza
David Kalnischkies [Wed, 17 Aug 2016 18:35:47 +0000 (20:35 +0200)] 
don't count each Type as an individual deb822-sources stanza

Reported-By: Mattia Rizzolo <mattia@debian.org> in #834629
8 years agoadd --with-source option and Packages/Sources support
David Kalnischkies [Tue, 16 Aug 2016 18:08:29 +0000 (20:08 +0200)] 
add --with-source option and Packages/Sources support

We support "./foobar.deb" as a way to install a deb file directly.
Recently .changes files were added. This highlights a problem as you
can't add the changes file without also trying to install all of them.
Now, it could also be handy to add entire Packages/Sources files to
perhaps get a bunch of packages in without installing them all
implicitly.

This commit introduces --with-source which allows to add *.deb, *.changes,
*.dsc, source-dirs, Packages & Sources files (the later can also be
compressed) without also installing them.

8 years agoallow spaces in fingerprints for 'apt-key del'
David Kalnischkies [Wed, 17 Aug 2016 06:10:29 +0000 (08:10 +0200)] 
allow spaces in fingerprints for 'apt-key del'

Fingerprints tend to be displayed in space-separated octet pairs so be
nice and allow delete to remove a key based on such a string rather than
requiring that the user is deleting all the spaces manually.

8 years agoadd the gpg-classic variant to the gpgv/gnupg or-group
David Kalnischkies [Tue, 16 Aug 2016 13:46:19 +0000 (15:46 +0200)] 
add the gpg-classic variant to the gpgv/gnupg or-group

We need to support partial upgrades anyhow, so we have to deal with the
different versions and your tests try to ensure that we do, so we
shouldn't make any explicit higher requirements.

8 years agotests: update self-sigs on our test keys
David Kalnischkies [Tue, 16 Aug 2016 11:42:30 +0000 (13:42 +0200)] 
tests: update self-sigs on our test keys

gpg upstream committed "gpgv: Tweak default options for extra
security." applied on the 1.x and 2.x branches:
http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commit;h=e32c575e0f3704e7563048eea6d26844bdfc494b
This commit includes "[…], but we should validate the key by its self
signature for primary key, and back signature for subkey."

Our testkeys are old and do not really considered best practices in the
last years, so their most recent self-signature is SHA1-only which with
this gpg commit and our testcases defaulting to --weak-digest sha1 are
refused.

So what we do here is just applying some of the recent best practices on
top of our testcase keys.

Gbp-Dch: Ignore

8 years agotests: set source directory for gdb
David Kalnischkies [Tue, 16 Aug 2016 05:38:18 +0000 (07:38 +0200)] 
tests: set source directory for gdb

Helps interactive gdb calls find the source code.

Gbp-Dch: Ignore

8 years agodefault to Dir=/ in dpkg/status file finding magic
David Kalnischkies [Sat, 13 Aug 2016 13:55:52 +0000 (15:55 +0200)] 
default to Dir=/ in dpkg/status file finding magic

Seen in cme #833656 if Dir isn't set (yet) we end up later absoluting a
path which was supposed to be absolute already, so if Dir is empty we
assume it to be '/' instead. In practice this is a bug in the software
using libapt, but for maxium compatibility lets explicitly set the
default value here to be safe.

Reported-By: Paul Wise <pabs@debian.org>
Inspired-By: Brendan O'Dea <bod@debian.org>
Fixes-Regression: 475f75506db48a7fa90711fce4ed129f6a14cc9a
Shadows-Bug: #833656

8 years agosupport compression and by-hash for .diff/Index files
David Kalnischkies [Tue, 16 Aug 2016 05:47:44 +0000 (07:47 +0200)] 
support compression and by-hash for .diff/Index files

In af81ab9030229b4ce6cbe28f0f0831d4896fda01 by-hash got implemented as a
special compression type for our usual index files like Packages.
Missing in this scheme was the special .diff/Index index file containing
the info about individual patches for this index file. Deriving from the
index file class directly we inherent the compression handling
infrastructure and in this way also by-hash nearly for free.

Closes: #824926
8 years agosupport getting only-uncompressed files via by-hash
David Kalnischkies [Mon, 15 Aug 2016 08:51:07 +0000 (10:51 +0200)] 
support getting only-uncompressed files via by-hash

The URI we later want to modify to get the file via by-hash was unset in
case a file was only available uncompressed (which is usually not the
case) causing an acquire error.

8 years agoset the correct item FileSize in by-hash case
David Kalnischkies [Mon, 15 Aug 2016 08:39:53 +0000 (10:39 +0200)] 
set the correct item FileSize in by-hash case

In af81ab9030229b4ce6cbe28f0f0831d4896fda01 we implement by-hash as a
special compression type, which breaks this filesize setting as the code
is looking for a foobar.by-hash file then. Dealing this slightly gets
us the intended value. Note that this has no direct effect as this value
will be set in other ways, too, and could only effect progress reporting.

Gbp-Dch: Ignore

8 years agoretry without same redirection mirror on 404 errors
David Kalnischkies [Sun, 14 Aug 2016 11:12:08 +0000 (13:12 +0200)] 
retry without same redirection mirror on 404 errors

If 9b8034a9fd40b4d05075fda719e61f6eb4c45678 serves the Release files
from a partial mirror we will end up getting 404 for some of the
indexes. Instead of giving up, we will instead ignore our same
redirection mirror constrain and ask the redirection service as a
potential hashsum mismatch is better than keeping the certain 404 error.

8 years agocheck internal redirections for loops, too
David Kalnischkies [Sun, 14 Aug 2016 10:13:59 +0000 (12:13 +0200)] 
check internal redirections for loops, too

Now that we have the redirections loopchecker centrally in our items we
can use it also to prevent internal redirections to loop caused by
bugs as in a few instances we get into the business of rewriting the URI
we will query by ourself as we predict we would see such a redirect
anyway. Our code has no bugs of course, hence no practical difference. ;)

Gbp-Dch: Ignore

8 years agolog with the failed item description, not with next try
David Kalnischkies [Sun, 14 Aug 2016 07:51:56 +0000 (09:51 +0200)] 
log with the failed item description, not with next try

The failure handling frequently changes URI & Description of the failed
item to try a slightly different combination which might work, but the
logging of the failure happens only afterwards as the same failure
handling decides if this is a critical error or not so we need a backup
here instead of potentially new content.

A purely cosmetic issue, but can still be confusing for humans.

8 years agodon't try pipelining if server closes connections
David Kalnischkies [Fri, 12 Aug 2016 09:05:58 +0000 (11:05 +0200)] 
don't try pipelining if server closes connections

If a server closes a connection after sending us a file that tends to
mean that its a type of server who always closes the connection – it is
therefore relatively pointless to try pipelining with it even if it
isn't a problem by itself: apt is just restarting the pipeline each
time after it got served one file and the connection is closed.

The problem starts if one or more proxies are between the server and apt
and they disagree about how the connection should be as in the
bugreporters case where the responses apt gets contain both Keep-Alive
and Proxy-Connection headers (which apt both ignores) indicating a
proxy is trying to keep a connection open while the response also
contains "Connection: close" indicating the opposite which apt
understands and respects as it is required to do.

We avoid stepping into this abyss by not performing pipelining anymore
if we got a respond with the indication to close connection if the
response was otherwise a success – error messages are sent by some
servers via this method as their pages tend to be created dynamically
and hence their size isn't known a priori to them.

Closes: #832113
8 years agodon't sent Range requests if we know its not accepted
David Kalnischkies [Thu, 11 Aug 2016 16:24:35 +0000 (18:24 +0200)] 
don't sent Range requests if we know its not accepted

If the server told us in a previous request that it isn't supporting
Ranges with bytes via an Accept-Ranges header missing bytes, we don't
try to formulate requests using Ranges.

8 years agoreorganize server-states resetting in http/https
David Kalnischkies [Thu, 11 Aug 2016 14:59:13 +0000 (16:59 +0200)] 
reorganize server-states resetting in http/https

We keep various information bits about the server around, some only
effecting the currently handled file (like sizes) while others
should be persistent (like pipeline detections). http used to reset all
file-related manually, which is a bit silly if we already have a Reset()
method – which does reset all through –, so extending it with a
parameter for reuse and calling it from https too (as this was
previously resetting by just creating a new state struct – it uses no
value of the persistent state-keeping yet as it supports no pipelining).

Gbp-Dch: Ignore

8 years agoCMake: Install bash completions via cmake
Julian Andres Klode [Mon, 15 Aug 2016 10:55:51 +0000 (12:55 +0200)] 
CMake: Install bash completions via cmake

Having the completions installed only by the packaging was
an oversight.

Gbp-Dch: ignore

8 years agoChange anonscm.d.o links to /git/apt/apt.git and https
Julian Andres Klode [Sat, 13 Aug 2016 21:54:26 +0000 (23:54 +0200)] 
Change anonscm.d.o links to /git/apt/apt.git and https

This also fixes Debian/apt#20, but is slightly more complete. I
think /git also looks better than /cgit, so let's switch the Vcs
entry in control over too.

8 years agohttp(s): allow empty values for header fields
David Kalnischkies [Fri, 12 Aug 2016 20:13:09 +0000 (22:13 +0200)] 
http(s): allow empty values for header fields

It seems completely pointless from a server-POV to sent empty header
fields, so most of them don't do it (simply proven by this limitation
existing since day one) – but it is technically allowed by the RFC as
the surounding whitespaces are optional and Github seems to like sending
"X-Geo-Block-List:\r\n" since recently (bug reports in other http
clients indicate July) at least sometimes as the reporter claims to have
seen it on https only even through it can happen with both.

Closes: 834048
8 years agodrop incorrect const attribute from DirectoryExists
David Kalnischkies [Fri, 12 Aug 2016 17:11:01 +0000 (19:11 +0200)] 
drop incorrect const attribute from DirectoryExists

Since its existence in 2010 DirectoryExists was always marked with this
attribute, but for no real reason. Arguably a check for the existence of
the file is not modifying global state, so theoretically this shouldn't
be a problem. It is wrong from a logical point of view through as
between two calls the directory could be created so the promise we made
to the compiler that it could remove the second call would be wrong, so
API wise it is wrong.

It's a bit mysterious that this is only observeable on ppc64el and can be
fixed by reordering code ever so slightly, but in the end its more our
fault for adding this attribute than the compilers fault for doing
something silly based on the attribute.

LP: 1473674

8 years agofileutl: empty file support: Avoid fstat() on -1 fd and check result
Julian Andres Klode [Fri, 12 Aug 2016 11:55:09 +0000 (13:55 +0200)] 
fileutl: empty file support: Avoid fstat() on -1 fd and check result

When checking if a file is empty, we forget to check that
fstat() actually worked.

8 years agotests: don't do boundless string compares with data()
David Kalnischkies [Fri, 12 Aug 2016 09:27:19 +0000 (11:27 +0200)] 
tests: don't do boundless string compares with data()

Git-Dch: Ignore

8 years agoensure a good clock() value for usage and tests
David Kalnischkies [Fri, 12 Aug 2016 08:02:28 +0000 (10:02 +0200)] 
ensure a good clock() value for usage and tests

We use clock() as a very cheap way of getting a "random" value, but the
manpage warns that this could return -1, so we should be dealing with
this. Additionally, e.g. on hurd-i386 the value increases only slowly –
to slow for our fast running tests for randomness hence producing the
same range in both samples, so we introduce a simple busy-wait loop (as
clock is counting processor time used by the program) in the test which
delays the second sample just enough making our randomness a bit more
predictable.

8 years agodon't perform int<float in progress bar drawing
David Kalnischkies [Fri, 12 Aug 2016 07:07:59 +0000 (09:07 +0200)] 
don't perform int<float in progress bar drawing

Comparing floating numbers is always fun and in this instance a 9 < 9.0
is "somehow" true on hurd-i386 letting the tests fail by reporting that
too much progress achieved. A bit mysterious, but with some rework we
can use code which avoids dealing with the floats in this way entirely
and make our testcases happy.

8 years agoctest: show test output in case of failures
David Kalnischkies [Fri, 12 Aug 2016 08:45:45 +0000 (10:45 +0200)] 
ctest: show test output in case of failures

ctest as run by cmake by default does not show the output of the tests
even if the tests failed. In terms of our tests it could be handy to set
it always, but unfortunately it seems like cmake doesn't allow it if the
internet is to be believed, so lets enable it at least while building
packages and on travis.

Gbp-Dch: Ignore

8 years agoCMake: Exclude .md5 and .map doxygen files from install
Julian Andres Klode [Thu, 11 Aug 2016 16:09:39 +0000 (18:09 +0200)] 
CMake: Exclude .md5 and .map doxygen files from install

This is much better than removing them in debian/rules.

Gbp-Dch: ignore

8 years agoCMake: Use COPYONLY instead of @ONLY
Julian Andres Klode [Thu, 11 Aug 2016 15:54:19 +0000 (17:54 +0200)] 
CMake: Use COPYONLY instead of @ONLY

I don't know what happened back in 2009 when I wrote this,
but it seems I used the wrong option. These files should
not have any variable substitution done to them.

8 years agoCMake: Mark Doxygen as required and use DOXYGEN_EXECUTABLE
Julian Andres Klode [Thu, 11 Aug 2016 15:34:12 +0000 (17:34 +0200)] 
CMake: Mark Doxygen as required and use DOXYGEN_EXECUTABLE

Seems like I missed that when adding doxygen support.

Gbp-Dch: ignore

8 years agodebian/NEWS: Get rid of 1.3~pre3+cmake1 entry
Julian Andres Klode [Thu, 11 Aug 2016 17:48:54 +0000 (19:48 +0200)] 
debian/NEWS: Get rid of 1.3~pre3+cmake1 entry

This was only needed temporarily

Thanks: Axel Beckert for reporting

8 years agoRelease 1.3~rc1 1.3_rc1
Julian Andres Klode [Thu, 11 Aug 2016 12:05:04 +0000 (14:05 +0200)] 
Release 1.3~rc1

This commit looks heavy. Most of that comes from the fact that the
ordering of files in the translations changed with the switch to
CMake. I could have gone the extra mile to figure out the original
ordering and replicate it, but I have chosen to re-order everything
by file and line number, as that's easier.

8 years agodoc/po: Adjust translations for programmatic typo fix
Julian Andres Klode [Thu, 11 Aug 2016 12:00:20 +0000 (14:00 +0200)] 
doc/po: Adjust translations for programmatic typo fix

This enhances commit b9e6db821a6ddbc5bf6a90c80c296d4e91283a63.

Gbp-Dch: ignore

8 years agotests: copy 01autoremove from the right place
David Kalnischkies [Thu, 11 Aug 2016 00:19:31 +0000 (02:19 +0200)] 
tests: copy 01autoremove from the right place

With cmake using BUILDDIRECTORY at this place is not only as wrong as it
was before, but it might not even work always copying the system
provided one which might or might not be current and hence fails tests
needing it to be current like ./test-apt-move-and-forget-manual-sections

We don't want to always use the one from the source directory through
either like in autopkgtests.

Gbp-Dch: Ignore

8 years agoMerge branch 'feature/apt-dpkg-comm'
David Kalnischkies [Wed, 10 Aug 2016 23:36:23 +0000 (01:36 +0200)] 
Merge branch 'feature/apt-dpkg-comm'

8 years agoMerge branch 'feature/methods'
David Kalnischkies [Wed, 10 Aug 2016 23:36:18 +0000 (01:36 +0200)] 
Merge branch 'feature/methods'

8 years agohttp: auto-configure for local Tor proxy if called as 'tor'
David Kalnischkies [Sat, 6 Aug 2016 20:54:31 +0000 (22:54 +0200)] 
http: auto-configure for local Tor proxy if called as 'tor'

With apts http transport supporting socks5h proxies and all the work
in terms of configuration of methods based on the name it is called with
it becomes surprisingly easy to implement Tor support equally (and
perhaps even a bit exceeding) what is available currently in
apt-transport-tor.

How this will turn out to be handled packaging wise we will see in
https://lists.debian.org/deity/2016/08/msg00012.html , but until this is
resolved we can add the needed support without actively enabling it for
now, so that this can be tested better.

8 years agoblock direct connections to .onion domains (RFC7687)
David Kalnischkies [Sat, 6 Aug 2016 11:53:05 +0000 (13:53 +0200)] 
block direct connections to .onion domains (RFC7687)

Doing a direct connect to an .onion address (if you don't happen to use
it as a local domain, which you shouldn't) is bound to fail and does
leak the information that you do use Tor and which hidden service you
wanted to connect to to a DNS server. Worse, if the DNS is poisoned and
actually resolves tricking a user into believing the setup would work
correctly…

This does block also the usage of wrappers like torsocks with apt, but
with native support available and advertised in the error message this
shouldn't really be an issue.

Inspired-by: https://bugzilla.mozilla.org/show_bug.cgi?id=1228457
8 years agodisable explicit configuration of all packages at the end
David Kalnischkies [Thu, 28 Jul 2016 07:13:24 +0000 (09:13 +0200)] 
disable explicit configuration of all packages at the end

With b4450f1dd6bca537e60406b2383ab154a3e1485f we dropped what we
calculated here later on and now that we don't need it in the meantime
either we can just skip the busy work by default and expect dpkg to do
the right thing dropping also our little "last explicit configures"
removal trick introduced in b4450f1dd6bca537e60406b2383ab154a3e1485f.

This enables the last of a bunch of previously experimental options,
some of them existing still, but are very special and hence not really
worth documenting anymore (especially as it would need to be rewritten
now entirely) which is why the documentation is nearly completely
dropped.

The order of configuration stanzas in the simulation code changes
slightly as it isn't concerning itself with finding the 'right' order,
but any order is valid anyhow as long as the entire set happens in the
same call.

8 years agosimulate all package manager actions explicitly
David Kalnischkies [Thu, 28 Jul 2016 09:43:36 +0000 (11:43 +0200)] 
simulate all package manager actions explicitly

If a planner lets actions to be figured out by dpkg in pending calls
these actions aren't mentioned in a simulation. While that might be
a good thing for debugging, it would be a change in behavior and
especially if a planner avoids explicit removals could be confusing for
users. As such we perform the same 'trick' as in the dpkg implementation
by performing explicitly what would be done by the pending calls.

To save us some work and avoid desyncs we perform a layer violation by
using deb/ code in the generic simulation – and further we perform ugly
dynamic_cast to avoid breaking the ABI for nothing; aptitude is the only
other user of the simulation class according to codesearch.d.n and for
that our little trick works. It just isn't working if you happen to
extend pkgSimulate or otherwise manage to call the protected Go methods
directly – which isn't very realistic/practical.

8 years agotry to avoid removal of crossgraded packages
David Kalnischkies [Mon, 25 Jul 2016 14:36:53 +0000 (16:36 +0200)] 
try to avoid removal of crossgraded packages

The user has to approve the removal of a crossgraded package as it might
be needed to remove it (temporarily) in the process, but in most cases
we can happily avoid it and let dpkg unpack over it skipping the
remove. This has some effects on progress reporting and how deal with
selections through which makes this a tiny bit complicated.

8 years agoallow user@host (aka: no password) in URI parsing
David Kalnischkies [Mon, 1 Aug 2016 19:45:29 +0000 (21:45 +0200)] 
allow user@host (aka: no password) in URI parsing

If the URI had no password the username was ignored

8 years agofix programmatic typo in apt-key manpage
David Kalnischkies [Mon, 1 Aug 2016 13:13:14 +0000 (15:13 +0200)] 
fix programmatic typo in apt-key manpage

Reported-By: Johannes 'josch' Schauer on IRC
Gbp-Dch: Ignore

8 years agoallow methods to be disabled and redirected via config
David Kalnischkies [Sat, 6 Aug 2016 17:59:57 +0000 (19:59 +0200)] 
allow methods to be disabled and redirected via config

To prevent accidents like adding http-sources while using tor+http it
can make sense to allow disabling methods. It might even make sense to
allow "redirections" and adding "symlinked" methods via configuration.
This could e.g. allow using different options for certain sources by
adding and configuring a "virtual" new method which picks up the config
based on the name it was called with like e.g. http does if called as
tor+http.

8 years agoimplement socks5h proxy support for http method
David Kalnischkies [Thu, 4 Aug 2016 06:45:38 +0000 (08:45 +0200)] 
implement socks5h proxy support for http method

Socks support is a requested feature in sofar that the internet is
actually believing Acquire::socks::Proxy would exist. It doesn't and
this commit isn't adding it as that isn't how our configuration works,
but it allows Acquire::http::Proxy="socks5h://…". The HTTPS method was
changed already to support socks proxies (all versions) via curl. This
commit implements only SOCKS5 (RFC1928) with no auth or pass&user auth
(RFC1929), but not GSSAPI which is required by the RFC. The 'h' in the
protocol name further indicates that DNS resolution is delegated to the
socks proxy rather than performed locally.

The implementation works and was tested with Tor as socks proxy for
which implementing socks5h only can actually be considered a feature.

Closes: 744934
8 years agoimplement generic config fallback for methods
David Kalnischkies [Sun, 31 Jul 2016 16:05:56 +0000 (18:05 +0200)] 
implement generic config fallback for methods

The https method implemented for a long while now a hardcoded fallback
to the same options in http, which, while it works, is rather inflexible
if we want to allow the methods to use another name to change their
behavior slightly, like apt-transport-tor does to https – most of the
diff being s#https#tor#g which then fails to do the full circle
fallthrough tor -> https -> http for https sources. With this config
infrastructure this could be implemented now.

8 years agouse the same redirection handling for http and https
David Kalnischkies [Tue, 2 Aug 2016 12:49:58 +0000 (14:49 +0200)] 
use the same redirection handling for http and https

cURL which backs our https implementation can handle redirects on its
own, but by dealing with them on our own we gain finer control over which
redirections will be performed (we don't like https → http) and by whom
so that redirections to other hosts correctly spawn a new https method
dealing with these instead of letting the current one deal with it.

8 years agodetect redirection loops in acquire instead of workers
David Kalnischkies [Tue, 2 Aug 2016 20:44:50 +0000 (22:44 +0200)] 
detect redirection loops in acquire instead of workers

Having the detection handled in specific (http) workers means that a
redirection loop over different hostnames isn't detected. Its also not a
good idea have this implement in each method independently even if it
would work

8 years agofail on unsupported http/https proxy settings
David Kalnischkies [Wed, 3 Aug 2016 19:17:26 +0000 (21:17 +0200)] 
fail on unsupported http/https proxy settings

Closes: #623443
8 years agosuggest transport-packages based on established namescheme
David Kalnischkies [Mon, 1 Aug 2016 15:52:55 +0000 (17:52 +0200)] 
suggest transport-packages based on established namescheme

apt-transports not shipped in apt directly are usually named
apt-transport-% with % being what is in the name of the transport.
tor additional introduced aliases via %+something, which isn't a bad
idea, so be strip the +something part from the method name before
suggesting the installation of an apt-transport-% package.

This avoids us the maintainance of a list of existing transports
creating a two class system of known and unknown transports which would
be quite arbitrary and is unfriendly to backports.

8 years agosupport all socks-proxy known to curl in https method
David Kalnischkies [Sun, 31 Jul 2016 16:46:34 +0000 (18:46 +0200)] 
support all socks-proxy known to curl in https method

8 years agoensure all removes are reported to hook scripts
David Kalnischkies [Sun, 24 Jul 2016 17:00:08 +0000 (19:00 +0200)] 
ensure all removes are reported to hook scripts

Same reason and implementation as for configure.

8 years agoensure all configures are reported to hook scripts
David Kalnischkies [Sun, 24 Jul 2016 09:52:04 +0000 (11:52 +0200)] 
ensure all configures are reported to hook scripts

A planner might not explicitly configure all packages, but we need to
know all packages which will be configured for progress reporting and to
tell the hook scripts about them as they rely on this for their own
functionality.

8 years agodon't purge directly, but remove and do purge at the end
David Kalnischkies [Thu, 21 Jul 2016 16:46:34 +0000 (18:46 +0200)] 
don't purge directly, but remove and do purge at the end

If we want a package to be purged from the system tell dpkg in the
ordering (if it has to touch it explicitly) to remove it and cover the
purging of the config files at the end with a --purge --pending call.

That should help packages move conffiles around between packages
correctly even if the user is purging packages directly in big actions
like dist-upgrades involving many packages.

8 years agocall dpkg with --no-triggers by default
David Kalnischkies [Thu, 21 Jul 2016 14:33:01 +0000 (16:33 +0200)] 
call dpkg with --no-triggers by default

Implemented a long while ago now with relatively good progress reporting
involving triggers is a good time to try delaying the execution of
triggers across dpkg invocations finally by default.

Note: The bugreport talks also about 'smarter' configuration which is a
much bigger part and approached from multiple directions, but doesn't
really involve triggers per-se so considering it decoupled should help
in getting it done…

Closes: #626599
8 years agoselect remove/purge packages early on for dpkg
David Kalnischkies [Fri, 8 Jul 2016 07:40:46 +0000 (09:40 +0200)] 
select remove/purge packages early on for dpkg

Telling dpkg early on that we are going to remove these packages later
helps it with auto-deconfiguration decisions and its another area where
a planner can ignore the nitty gritty details and let dpkg decide the
course of action if there are no special requirements.

8 years agosave and restore selection states before/after calling dpkg
David Kalnischkies [Sun, 3 Jul 2016 12:39:16 +0000 (14:39 +0200)] 
save and restore selection states before/after calling dpkg

dpkg decides certain things on its own based on selections and
especially if we want to call --pending on purge/remove actions, we need
to ensure a clean slate or otherwise we surprise the user by removing
packages we weren't allowed to remove by the user in this run (the
selection might be an overarching plan for the not-yet "future").

Ideally dpkg would have some kind of temporal selection interface for
this case, but it hasn't, so we make it temporal with the risk of
loosing state if we don't manage to restore them.

8 years agouse dpkg --unpack --recursive to avoid long cmdlines
David Kalnischkies [Thu, 9 Jun 2016 09:48:16 +0000 (11:48 +0200)] 
use dpkg --unpack --recursive to avoid long cmdlines

Having long commandlines split into two is a huge problem if it happens
and additionally if we want to introduce planners which perform less
micromanagment its a good idea to leave the details for dpkg to decide.

In practice this doesn't work yet unconditionally as a bug is hiding in
the ordering code of dpkg, but it works if apt imposes its ordering so
this commit allows for now at least to solve the first problem.

8 years agopass --force-remove-essential to dpkg only if needed
David Kalnischkies [Sun, 3 Jul 2016 11:57:25 +0000 (13:57 +0200)] 
pass --force-remove-essential to dpkg only if needed

APT (usually) knows which package is essential or not, so we can avoid
passing this force flag to dpkg unconditionally  if the user hasn't
chosen a non-default essential handling obscuring the information.

8 years agoDo not set the binary dir in run-tests, it breaks stuff
Julian Andres Klode [Wed, 10 Aug 2016 14:42:23 +0000 (16:42 +0200)] 
Do not set the binary dir in run-tests, it breaks stuff

This breaks -j and does all sort of other weird stuff I did not
notice in the previous (non-parallel) runs.

Gbp-Dch: ignore

8 years agoFix some indentation issues in README.md
Julian Andres Klode [Wed, 10 Aug 2016 14:26:23 +0000 (16:26 +0200)] 
Fix some indentation issues in README.md

8 years agoMerge branch 'cmake'
Julian Andres Klode [Wed, 10 Aug 2016 14:19:00 +0000 (16:19 +0200)] 
Merge branch 'cmake'

8 years agotest: Automatically discover CMake build directory
Julian Andres Klode [Wed, 10 Aug 2016 12:16:52 +0000 (14:16 +0200)] 
test: Automatically discover CMake build directory

Look at the project root, and all directories directly below it and
pick the directory with the newest CMakeCache.txt file.

Gbp-Dch: ignore

8 years agoUpdate gitignore for cmake
Julian Andres Klode [Tue, 9 Aug 2016 18:17:21 +0000 (20:17 +0200)] 
Update gitignore for cmake

We cannot be sure if you are not running the build tree, so this
is a bit ugly.

Gbp-Dch: ignore

8 years agoGet rid of the old buildsystem
Julian Andres Klode [Tue, 9 Aug 2016 15:40:01 +0000 (17:40 +0200)] 
Get rid of the old buildsystem

Bye, bye, old friend.

8 years agoAdd statvfs.h.in to CMake directory
Julian Andres Klode [Tue, 9 Aug 2016 15:39:25 +0000 (17:39 +0200)] 
Add statvfs.h.in to CMake directory

Gbp-Dch: ignore

8 years agoMerge README.cmake into README.md
Julian Andres Klode [Tue, 9 Aug 2016 15:49:46 +0000 (17:49 +0200)] 
Merge README.cmake into README.md

Gbp-Dch: ignore

8 years agoapt-private: Do not include apti18n.h in headers
Julian Andres Klode [Mon, 8 Aug 2016 21:52:14 +0000 (23:52 +0200)] 
apt-private: Do not include apti18n.h in headers

This causes build failures when turning translations off.

8 years agoprepare-release: Switch over to CMake, set version in CMakeLists.txt
Julian Andres Klode [Mon, 8 Aug 2016 20:12:16 +0000 (22:12 +0200)] 
prepare-release: Switch over to CMake, set version in CMakeLists.txt

Teach the prepare-release script about the version new locations
and also set the version in CMakeLists, as that is better than
reading it from the changelog: CMake would not rerun automatically
otherwise if the version changed.

Gbp-Dch: ignore

8 years agoCMake: Rewrite existing Documentation support and add doxygen
Julian Andres Klode [Mon, 8 Aug 2016 19:53:46 +0000 (21:53 +0200)] 
CMake: Rewrite existing Documentation support and add doxygen

This can now build all documentation. It should also be fairly
reusable for other projects, as long as they follow the same
naming scheme for the po4a output files and set the PACKAGE_*
variables used here.

We could have done all translations in a single call to po4a
like the makefile based buildsystem does. While that would
have made the output slightly nicer, this solution offers a
huge performance gain because it can translate the documents
in parallel, which also means that the xsltproc stage does not
have to wait for all translations to be done first.

You might think that the add_custom_command() should list the
actual output files as BYPRODUCTS. This is not true however:
Because the files are not always generated, Ninja will think
missing byproducts mean that the target is out of date - which
is not what we want.

Finally, also add the missing doxygen support. Note that the
packaging script cleans up some md5 and map files created by
doxygen, otherwise it is fairly boring.

8 years agoCMake: Misc: Extract command path_join() from Translations
Julian Andres Klode [Mon, 8 Aug 2016 19:53:05 +0000 (21:53 +0200)] 
CMake: Misc: Extract command path_join() from Translations

This abstracts the joining of paths a bit better than having
basically the same code twice in the Translations module.

Gbp-Dch: ignore

8 years agoCMake: Check for ptsname_r() again
Julian Andres Klode [Mon, 8 Aug 2016 12:56:53 +0000 (14:56 +0200)] 
CMake: Check for ptsname_r() again

This was dropped in autotools as I found no use of the HAVE_PTSNAME_R
macro. Turns out it was typoed as HAVE_PTS_NAME_R. Fix the #ifdef and
add checks to CMake for it.

Closes: #833674
8 years agoCMake: Allow building without dpkg
Julian Andres Klode [Mon, 8 Aug 2016 12:35:09 +0000 (14:35 +0200)] 
CMake: Allow building without dpkg

It's not entirely clear if that is useful, but it cannot hurt. We
need to check what is missing to build on foreign systems without
dpkg.

Gbp-Dch: ignore

8 years agoCMake: Bump minimum required version to 3.4.0
Julian Andres Klode [Mon, 8 Aug 2016 12:16:36 +0000 (14:16 +0200)] 
CMake: Bump minimum required version to 3.4.0

The SOURCE_DIR property is used for the translation building and
was introduced in cmake 3.4

8 years agodebian: make autopkgtest run with CMake build dir
Julian Andres Klode [Mon, 8 Aug 2016 09:31:06 +0000 (11:31 +0200)] 
debian: make autopkgtest run with CMake build dir

8 years agoCMake: Add unit tests
Julian Andres Klode [Sun, 7 Aug 2016 16:22:14 +0000 (18:22 +0200)] 
CMake: Add unit tests

Add support for our GTest based unit tests. By default, CMake will
look in /usr/src/gtest for the external GTest project, but this can
be overriden by defining GTEST_ROOT when invoking cmake.

Gbp-Dch: ignore

8 years agoCMake: Translations: Build .pot in po binary dir, not project one
Julian Andres Klode [Tue, 9 Aug 2016 19:52:08 +0000 (21:52 +0200)] 
CMake: Translations: Build .pot in po binary dir, not project one

This was cluttering up things all over the place.

Gbp-Dch: ignore

8 years agoCMake: Translations: Allow excluding languages from translation
Julian Andres Klode [Tue, 9 Aug 2016 16:14:41 +0000 (18:14 +0200)] 
CMake: Translations: Allow excluding languages from translation

This seems to be needed for the hebrew translations.

Gbp-Dch: ignore

8 years agoCMake: Translations: Avoid rebuilding .mo if .pot did not change
Julian Andres Klode [Tue, 9 Aug 2016 11:10:28 +0000 (13:10 +0200)] 
CMake: Translations: Avoid rebuilding .mo if .pot did not change

Use the witness/byproducts approach to build the translations. A
byproduct of a command is like an output, but may be older than the
input.

Here, we generate a normal template with headers in the normal way
as a witness (and for Launchpad translations), but we also generate
a .pot-tmp0 template file without a header that gets copied to a
.pot-tmp byproduct only if it changed. This way, the .pot-tmp is
only updated if an actual string translation changed. We also
create a custom target for the .pot file that we'll depend on
later in the overall target creating the mo files to ensure that
the template is build before we try to build mo files.

Then we make the msgmerge depend on the .pot-tmp instead of the .pot
file, which means that msgmerge and msgfmt only get re-run if a string
change occured.

Gbp-Dch: ignore

8 years agoCMake: Translations: Add a statistics target
Julian Andres Klode [Tue, 9 Aug 2016 09:58:28 +0000 (11:58 +0200)] 
CMake: Translations: Add a statistics target

This is really useful stuff to have.

Gbp-Dch: ignore

8 years agoCMake: Translations: Build apt-all.pot and update .po files
Julian Andres Klode [Sun, 7 Aug 2016 14:01:18 +0000 (16:01 +0200)] 
CMake: Translations: Build apt-all.pot and update .po files

Merge all the per-domain templates into one template file using
msgcomm, stripping any line numbers in the input files, and sorting
the output per file.

This should create reasonably stable .pot and .po files that do not
change just because files move around. It should also be resilient
against some line changes, as long as one translated line is not
moved before/after another translated line.

Gbp-Dch: ignore

8 years agoCMake: Translations: Add support for shell scripts
Julian Andres Klode [Sun, 7 Aug 2016 13:52:59 +0000 (15:52 +0200)] 
CMake: Translations: Add support for shell scripts

Rework the arguments to apt_add_translation_domain so a user
can specify TARGETS and SCRIPTS, the latter being Shell scripts.

For each language (TARGETS being C++, SCRIPTS being Shell), a separate
template is generated via xgettext. Those templates are then merged
together by using msgcomm. In case there are no Shell scripts in
the translation domain, msgcomm will receive /dev/null instead of
a shell translation template.

This also reintroduces line numbers, as msgcomm would otherwise
re-order the merged files not only by filename, but also by message
string. It's unclear why it does that, it could just leave strings
within a file alone.

In contrast to the old build system, we use xgettext for shell scripts
instead of bash --dump-strings, as it's just easier to use the same
tool for everything. We also create valid headers.

8 years agoCMake: Translations: Write a .po file before writing a .mo file
Julian Andres Klode [Sun, 7 Aug 2016 13:50:04 +0000 (15:50 +0200)] 
CMake: Translations: Write a .po file before writing a .mo file

This makes debugging things easier.

Gbp-Dch: ignore