]> git.saurik.com Git - apt.git/log
apt.git
8 years agotests: limit autotest-functionname generation to sane characters
David Kalnischkies [Fri, 8 Jan 2016 12:08:19 +0000 (13:08 +0100)] 
tests: limit autotest-functionname generation to sane characters

Some (older) versions of bash seem to be allergic to a method named
"aptautotest_grep_^apt" (note the caret). Unlikely that we are going to
write autotests for such commands so we could just skip those, but lets
instead just use "normal" characters in the names and strip the rest as
we already did with the (arguable more common) '-'.

8 years agosupport '-' and no parameter for stdin in apt-helper cat-file
David Kalnischkies [Thu, 7 Jan 2016 23:35:39 +0000 (00:35 +0100)] 
support '-' and no parameter for stdin in apt-helper cat-file

This way it works more similar to the compressor binaries, which we
can relief in this way from their job in the test framework avoiding the
need of adding e.g. liblz4-tool to the test dependencies.

8 years agokeep compressed indexes in a low-cost format
David Kalnischkies [Thu, 7 Jan 2016 19:32:09 +0000 (20:32 +0100)] 
keep compressed indexes in a low-cost format

Downloading and storing are two different operations were different
compression types can be preferred. For downloading we provide the
choice via Acquire::CompressionTypes::Order as there is a choice to
be made between download size and speed – and limited by whats available
in the repository.

Storage on the other hand has all compressions currently supported by
apt available and to reduce runtime of tools accessing these files the
compression type should be a low-cost format in terms of decompression.

apt traditionally stores its indexes uncompressed on disk, but has
options to keep them compressed. Now that apt downloads additional files
we also deal with files which simply can't be stored uncompressed as
they are just too big (like Contents for apt-file). Traditionally they
are downloaded in a low-cost format (gz) as repositories do not provide
other formats, but there might be even lower-cost formats and for
download we could introduce higher-cost in the repositories.

Downloading an entire index potentially requires recompression to
another format, so an update takes potentially longer – but big files
are usually updated via pdiffs which has to de- and re-compress anyhow
and does it on the fly anyhow, so there is no extra time needed and in
general it seems to be benefitial to invest the time in update to save
time later on file access.

8 years agotests: try to pick up compressors from config automatically
David Kalnischkies [Sun, 3 Jan 2016 21:39:46 +0000 (22:39 +0100)] 
tests: try to pick up compressors from config automatically

Less hardcoding should help while introducing new compressors.

Git-Dch: Ignore

8 years agoallow pdiff bootstrap from all supported compressors
David Kalnischkies [Tue, 5 Jan 2016 23:05:24 +0000 (00:05 +0100)] 
allow pdiff bootstrap from all supported compressors

There is no reason to enforce that the file we start the bootstrap with
is compressed with a compressor which is available online. This allows
us to change the on-disk format as well as deals with repositories
adding/removing support for a specific compressor.

8 years agoensure compression cleanup even without lists-cleanup
David Kalnischkies [Tue, 5 Jan 2016 23:08:04 +0000 (00:08 +0100)] 
ensure compression cleanup even without lists-cleanup

If we store files compressed in lists/ and the file switched compression
formats we happened to retain the "old" format, but by default the
cleanup process catched this oversight and removed the file.
[The initial situation described doesn't arise as we store no files by
default compressed and even with apt-file configuring Contents files, we
don't really have that problem as there is just .gz files for those.]

We solve this by just removing any uncompressed as well as compressed
(we support) file just before we move the 'new' version of the file in.

8 years agouse one 'store' method to rule all (de)compressors
David Kalnischkies [Sun, 3 Jan 2016 18:23:30 +0000 (19:23 +0100)] 
use one 'store' method to rule all (de)compressors

Adding a new compressor method meant adding a new method as well – even
if that boilt down to just linking to our generalized decompressor with
a new name. That is unneeded busywork if we can instead just call the
generalized decompressor and let it figure out which compressor to use
based on the filenames rather than by program name.

For compatibility we ship still 'gzip', 'bzip2' and co, but they are
just links to our "new" 'store' method.

8 years agoinclude all compressed Packages/Sources files in Release file
David Kalnischkies [Sat, 2 Jan 2016 22:15:15 +0000 (23:15 +0100)] 
include all compressed Packages/Sources files in Release file

Having a hardcoded list of compression types here doesn't really provide
us with anything beside added complexity each time someone adds a new
compression type. That we don't need to be that specific is evident by
Contents and Translation-* matchers which are a lot more generic and
didn't generate problems anyhow.

8 years agofix typo in SrvRecords documentation
David Kalnischkies [Wed, 6 Jan 2016 01:43:27 +0000 (02:43 +0100)] 
fix typo in SrvRecords documentation

Git-Dch: Ignore

8 years agoAvailableDescriptionLanguages: Use one string for all iterations
Julian Andres Klode [Fri, 8 Jan 2016 11:37:58 +0000 (12:37 +0100)] 
AvailableDescriptionLanguages: Use one string for all iterations

Do not create strings within the loop, that creates one string
per language and does more work than needed. Instead, reserve
enough space at the beginning and assign the prefix, and then
resize and append inside the loop.

Also call exists with the string itself instead of the c_str(),
this means that the lookup uses the size information in the
string now and does not have to call strlen() on it.

8 years agopkgCacheGenerator: CurMd5.Value() cannot be empty
Julian Andres Klode [Fri, 8 Jan 2016 11:15:11 +0000 (12:15 +0100)] 
pkgCacheGenerator: CurMd5.Value() cannot be empty

It makes no sense to check if the value is empty, as it cannot
be. It will always be a hexstring of exactly 32 bytes.

8 years agooperator==(char*, StringView) use StringView.operator==
Julian Andres Klode [Fri, 8 Jan 2016 01:32:23 +0000 (02:32 +0100)] 
operator==(char*, StringView) use StringView.operator==

Use the same path for both comparisons, as the operator== path
is faster than just calling compare() - it avoids any comparison
if the size differs.

Gbp-Dch: ignore

8 years agopkgCacheGenerator::hash: Do not call tolower_ascii()
Julian Andres Klode [Fri, 8 Jan 2016 00:34:53 +0000 (01:34 +0100)] 
pkgCacheGenerator::hash: Do not call tolower_ascii()

Gbp-Dch: ignore

8 years agopkgCacheGenerator::StoreString: Get rid of std::string
Julian Andres Klode [Fri, 8 Jan 2016 00:27:01 +0000 (01:27 +0100)] 
pkgCacheGenerator::StoreString: Get rid of std::string

Instead of storing a string -> map_stringitem_t mapping, create
our own data type that can point to either a normal string or
a string inside the cache.

This avoids the creation of any string and improves performance
slightly (about 4%).

8 years agoReplace compare() == 0 checks with this == other checks
Julian Andres Klode [Thu, 7 Jan 2016 23:52:29 +0000 (00:52 +0100)] 
Replace compare() == 0 checks with this == other checks

This improves performance, as we now can ignore unequal strings
based on their length already.

Gbp-Dch: ignore

8 years agopkgCacheGenerator: Use StringView for toString
Julian Andres Klode [Thu, 7 Jan 2016 23:41:14 +0000 (00:41 +0100)] 
pkgCacheGenerator: Use StringView for toString

This removes some minor overhead.

Gbp-Dch: ignore

8 years agopkgCacheGenerator::StoreString: Move the string into the map
Julian Andres Klode [Thu, 7 Jan 2016 23:25:45 +0000 (00:25 +0100)] 
pkgCacheGenerator::StoreString: Move the string into the map

Moving the string is likely faster than copying it. We could probably
avoid strings alltogether in the future using some more crazy code,
but I have not looked at that yet.

Gbp-Dch: ignore

8 years agoStringView: rfind: pos should be end of substr, not start
Julian Andres Klode [Thu, 7 Jan 2016 19:23:48 +0000 (20:23 +0100)] 
StringView: rfind: pos should be end of substr, not start

Gbp-Dch: ignore

8 years agoStringView: pos argument default should be npos
Julian Andres Klode [Thu, 7 Jan 2016 19:21:16 +0000 (20:21 +0100)] 
StringView: pos argument default should be npos

Gbp-Dch: ignore

8 years agoStringView::rfind(): Call rfind() instead of find() on subst
Julian Andres Klode [Thu, 7 Jan 2016 19:01:16 +0000 (20:01 +0100)] 
StringView::rfind(): Call rfind() instead of find() on subst

Thanks: Niels Thykier for reporting on IRC
Gbp-Dch: ignore

8 years agoSwitch performance critical code to use APT::StringView
Julian Andres Klode [Thu, 7 Jan 2016 18:16:23 +0000 (19:16 +0100)] 
Switch performance critical code to use APT::StringView

This improves performance of the cache generation on my
ARM platform (4x Cortex A15) by about 10% to 20% from
2.35-2.50 to 2.1 seconds.

8 years agoIntroduce internal APT::StringView class
Julian Andres Klode [Thu, 7 Jan 2016 18:14:21 +0000 (19:14 +0100)] 
Introduce internal APT::StringView class

The class APT::StringView implements a drop-in replacement
for a subset of C++17 std::string_view() features. It will
be dropped at a later point and may not be used in public
interfaces.

8 years agorred: Run in parallel
Julian Andres Klode [Thu, 7 Jan 2016 16:09:30 +0000 (17:09 +0100)] 
rred: Run in parallel

Remove the SingleInstance flag so we can use the new randomized
queue feature to run parallel.

8 years agoacquire: Allow parallelizing methods without hosts
Julian Andres Klode [Thu, 7 Jan 2016 16:06:55 +0000 (17:06 +0100)] 
acquire: Allow parallelizing methods without hosts

The maximum parallelization soft limit is the number of CPU
cores * 2 on systems defining _SC_NPROCESSORS_ONLN. The hard
limit in all cases is Acquire::QueueHost::Limit.

8 years agoCopyFile: Use 64 * 1024 instead of 64000 as buffer size
Julian Andres Klode [Thu, 7 Jan 2016 15:16:06 +0000 (16:16 +0100)] 
CopyFile: Use 64 * 1024 instead of 64000 as buffer size

This is a multiple of the page size and thus results in less
page faults, speeding up copying.

Also, while we're at at, unify all uses of that size in a
constant variable APT_BUFFER_SIZE.

8 years agoapt-helper: cat-file: Add -C/--compress option
Julian Andres Klode [Thu, 7 Jan 2016 14:51:00 +0000 (15:51 +0100)] 
apt-helper: cat-file: Add -C/--compress option

This allows passing compressing the output. The compressor must
be a compressor name, extension, or an extension without the
leading dot.

8 years agoFileFd: (native) LZ4 support
Julian Andres Klode [Sun, 27 Dec 2015 23:07:03 +0000 (00:07 +0100)] 
FileFd: (native) LZ4 support

Implement native support for LZ4 compression, using the official
lz4 library.

8 years agotravis: pull liblz4-dev from wily
Julian Andres Klode [Mon, 28 Dec 2015 01:42:26 +0000 (02:42 +0100)] 
travis: pull liblz4-dev from wily

8 years agoDo not remove a not working SrvRecords server twice
Michael Vogt [Tue, 5 Jan 2016 19:49:19 +0000 (20:49 +0100)] 
Do not remove a not working SrvRecords server twice

The PopFromSrvRecs() already removed the entry from the active
list, so the extra SrvRecords.erase() was incorrect.

Git-Dch: ignore

8 years agoAdd documentation about the SrvRecords support in apt
Michael Vogt [Tue, 5 Jan 2016 19:48:56 +0000 (20:48 +0100)] 
Add documentation about the SrvRecords support in apt

Git-Dch: ignore

8 years agoDocument new APT::Keep-Downloaded-Packages option in NEWS
Michael Vogt [Tue, 5 Jan 2016 18:34:06 +0000 (19:34 +0100)] 
Document new APT::Keep-Downloaded-Packages option in NEWS

Git-Dch: ignore

8 years agotest-apt-cache: Adjust for hashtable size change
Julian Andres Klode [Sun, 3 Jan 2016 19:07:19 +0000 (20:07 +0100)] 
test-apt-cache: Adjust for hashtable size change

Gbp-Dch: ignore

8 years agoIncrease APT::Cache-HashTableSize default to 50503
Julian Andres Klode [Sun, 3 Jan 2016 16:45:26 +0000 (17:45 +0100)] 
Increase APT::Cache-HashTableSize default to 50503

This drop the hash table utilization from a high 98%
to acceptable 74% on unstable, and the average bucket length
from 4.6 to 1.8.

This improves performance by about 5%, while increasing
the size of the cache by 0.2 out of 38MB, that is 0.5%.

48481 is a nice number

8 years agoapt-cache: stats: Show a table utilization as percentage
Julian Andres Klode [Sun, 3 Jan 2016 16:39:39 +0000 (17:39 +0100)] 
apt-cache: stats: Show a table utilization as percentage

Gbp-Dch: ignore

8 years agoapt-cache: stats: Average is over used, not all, buckets
Julian Andres Klode [Sun, 3 Jan 2016 16:34:50 +0000 (17:34 +0100)] 
apt-cache: stats: Average is over used, not all, buckets

It does not make sense to consider empty buckets in the
average, as they do not affect the lookup performance.

8 years agoAllow building without libgtest-dev under <nocheck> build profile
Helmut Grohne [Sun, 3 Jan 2016 14:10:05 +0000 (15:10 +0100)] 
Allow building without libgtest-dev under <nocheck> build profile

I'd like to avoid pulling libgtest-dev into the bootstrap set.

Fortunately, libgtest-dev is only used for testing apt and apt
correctly implements DEB_BUILD_OPTIONS=nocheck now. So this
bug is about getting rid of the Build-Depends.

Simply removing it (by adding a build profile) is not sufficient
however as configure fails hard, so an additional bit is necessary
to cover for that.

Closes: #809726
8 years agoChange compressor costs to be 100 apart
Julian Andres Klode [Sun, 3 Jan 2016 13:53:26 +0000 (14:53 +0100)] 
Change compressor costs to be 100 apart

This will give us the freedom to insert more compressors at
positions in between.

Also change the cost of uncompressed to 0, as that really has
no overhead, and the values do not really mean much.

8 years agosimple_compressor: Provide some accessors for end and free
Julian Andres Klode [Sun, 3 Jan 2016 13:33:47 +0000 (14:33 +0100)] 
simple_compressor: Provide some accessors for end and free

This makes code easier to read, and somewhat more correct.

Gbp-Dch: ignore

8 years agosimple_buffer: Allow buffer size to change
Julian Andres Klode [Mon, 28 Dec 2015 14:04:57 +0000 (15:04 +0100)] 
simple_buffer: Allow buffer size to change

Gbp-Dch: ignore

8 years agoprepare-release: travis: Ignore build profiles in build-depends
Julian Andres Klode [Sun, 3 Jan 2016 13:24:51 +0000 (14:24 +0100)] 
prepare-release: travis: Ignore build profiles in build-depends

This aids our introduction of lz4, which we do not want to impose
as an additional requirement for bootstrappers.

Gbp-Dch: ignore

8 years agoAdd new APT::Keep-Downloaded-Packages option
Michael Vogt [Sat, 2 Jan 2016 21:08:30 +0000 (22:08 +0100)] 
Add new APT::Keep-Downloaded-Packages option

This option controls if downloaded packages should be kept after
a successful install or if they should be deleted. The default
for "apt-get" is that they are kept (just like before).

However the default for "apt" is that they get deleted.

Closes: #160743
8 years agoAdd bash-completion support for the "apt" command
Michael Vogt [Sat, 2 Jan 2016 20:18:47 +0000 (21:18 +0100)] 
Add bash-completion support for the "apt" command

The apt bash-completion support was submited to the bash-completion
package as a patch in May 2014. It is still not included to this
date and because it is an important feature for many users it is
now part of apt until the bash-completion package is mantained
more actively again.

Note that the "Relaces" line is only required for Ubuntu it will
have no effect on Debian.

Closes: #747094
8 years agoAdd support for APT::Periodic::CleanInterval
Michael Vogt [Sat, 2 Jan 2016 20:24:47 +0000 (21:24 +0100)] 
Add support for APT::Periodic::CleanInterval

In order to allow regular cleaning of the downloaded deb archives
the new option APT::Periodic::CleanInterval is added. It will run
"apt-get clean" in the given time interval.

Thanks: Martin-Éric Racine

8 years agoproperly parse comments in apt_preferences and deb822-style sources
David Kalnischkies [Sat, 2 Jan 2016 12:27:02 +0000 (13:27 +0100)] 
properly parse comments in apt_preferences and deb822-style sources

apt_preferences and deb822-style sources used the specialized class
pkgUserTagSection to deal with comments before/after a given stanza, but
it couldn't deal with comments in the stanza at all.

codesearch suggests that nobody else does and a vastely superior way of
working with potentially commented files is implemented now, so we can
officially discourage the use of the old incomplete hack class.

8 years agosupport comments in debian/control parsing
David Kalnischkies [Sat, 2 Jan 2016 12:19:32 +0000 (13:19 +0100)] 
support comments in debian/control parsing

Now (55153bf94ff28a23318e79aa48242244c4d82b3c) that pkgTagFile can be
told to deal with all sorts of comments we can use this mode to parse
dsc (as by catch) and debian/control files properly even in the wake of
multiline fields spliced with comments like Build-Depends.

Closes: 806775
8 years agoadd optional support for comments in pkgTagFile
David Kalnischkies [Sat, 2 Jan 2016 11:25:29 +0000 (12:25 +0100)] 
add optional support for comments in pkgTagFile

APT usually deals with perfectly formatted files generated automatically
be other programs – and as it has to parse multiple MBs of such files it
tries to be fast rather than forgiving.

This was always a problem if we reused this parser for files with a
deb822 syntax which are mostly written by hand however, like
apt_preferences or the deb822-style sources as these can include stray
newlines and more importantly comments all over the place.

As a stopgap we had pkgUserTagSection which deals at least with comments
before and after a given stanza, but comments in between weren't really
supported and now that we support parsing debian/control for e.g.
build-dep we face the full comment problem e.g. with comments inbetween
multi-line fields (like Build-Depends).

We can't easily deal with this on the pkgTagSection level as the interface
gives access to 'raw' char-pointers for performance reasons so we would
need to optionally add a buffer here on which we could remove comments
to hand out pointers into this buffer instead. The interface is quite
large already and supports writing stanzas as well, which does not
support comments at all either. So while in future it might make sense
to have a parser setup which deals with and keeps comments in this
commit we opt for the simpler solution for now: We officially declare
that pkgTagSection does not support comments and instead expect the
caller to deal with them, which in our case is pkgTagFile:

pkgTagFile is extended with an additional mode which can deal with
comments by dropping them from the buffer which will later form the
input of pkgTagSection. The actual implementation is slightly more
complex than this sentence suggests at first on one hand to have good
performance and on the other to allow jumping directly to stanzas with
offsets collected in a previous run (like our cache generation does it
for example).

8 years agofail installing build-deps if parsing them failed
David Kalnischkies [Wed, 30 Dec 2015 20:51:17 +0000 (21:51 +0100)] 
fail installing build-deps if parsing them failed

Git-Dch: Ignore

8 years agoItalian manpages translation update
Beatrice Torracca [Sat, 2 Jan 2016 12:50:35 +0000 (13:50 +0100)] 
Italian manpages translation update

Closes: 809522
8 years agoRelease 1.1.10 1.1.10
Julian Andres Klode [Tue, 29 Dec 2015 23:41:26 +0000 (00:41 +0100)] 
Release 1.1.10

8 years agoDo not sync the cache file
Julian Andres Klode [Tue, 29 Dec 2015 14:35:47 +0000 (15:35 +0100)] 
Do not sync the cache file

Integrity is taken care of by the checksum now.

8 years agoAdd support for calculating hashes over the entire cache
Julian Andres Klode [Tue, 29 Dec 2015 14:11:11 +0000 (15:11 +0100)] 
Add support for calculating hashes over the entire cache

8 years agopkgCacheGenerator: Allow passing down an already created cache
Julian Andres Klode [Tue, 29 Dec 2015 14:59:41 +0000 (15:59 +0100)] 
pkgCacheGenerator: Allow passing down an already created cache

If we already have opened a cache, there is no point in having
to open it again.

8 years agopkgTagSection::Scan: Fix read of uninitialized value
Julian Andres Klode [Tue, 29 Dec 2015 13:37:14 +0000 (14:37 +0100)] 
pkgTagSection::Scan: Fix read of uninitialized value

We ignored the boundary of the buffer we were reading in
while scanning for spaces.

8 years agostrutl.cc: Add declarations for the compat _ascii() functions
Julian Andres Klode [Tue, 29 Dec 2015 12:21:45 +0000 (13:21 +0100)] 
strutl.cc: Add declarations for the compat _ascii() functions

This shuts up gcc

Gbp-Dch: ignore

8 years agoFix test case that was broken by switch of hash function
Julian Andres Klode [Tue, 29 Dec 2015 02:29:29 +0000 (03:29 +0100)] 
Fix test case that was broken by switch of hash function

This test relies on the ordering of the hash function.

8 years agoTurn tolower_ascii() and isspace_ascii() into inline functions
Julian Andres Klode [Tue, 29 Dec 2015 02:19:51 +0000 (03:19 +0100)] 
Turn tolower_ascii() and isspace_ascii() into inline functions

To preserve compatibility, the new inline functions have _inline
as a suffix, and a macro defines the old names to refer to the
inline variants.

The old functions are still preserved for binary compatibility.

Also simplify the implementation of both functions.

8 years agoSwitch to DJB hashing and use prime number as table size
Julian Andres Klode [Tue, 29 Dec 2015 01:40:18 +0000 (02:40 +0100)] 
Switch to DJB hashing and use prime number as table size

On my testing system, consisting of unstable and experimental,
this reduces the average chain from 6.5 to 4.5, and the longest
chain from 17 to 15.

8 years agoBufferedFileFdPrivate: Make InternalFlush() save against errors
Julian Andres Klode [Mon, 28 Dec 2015 21:30:44 +0000 (22:30 +0100)] 
BufferedFileFdPrivate: Make InternalFlush() save against errors

Previously, if flush errored inside the loop, data could have
already been written to the wrapped descriptor without having
been removed from the buffer.

Also try to work around EINTR here. A better solution might be
to have the individual privates detect an interrupt and return
0 in such a case, instead of relying on errno being untouched
in between the syscall and the return from InternalWrite.

8 years agoaptconfiguration: Set default compression level to 6
Julian Andres Klode [Mon, 28 Dec 2015 20:50:13 +0000 (21:50 +0100)] 
aptconfiguration: Set default compression level to 6

Since commit 7a68effcb904b4424b54a30e448b6f2560cd1078, the xz
and lzma compressors read the level of compression they shall
use.

A default of -9 is too much for them, this will use 674 MB,
according to the xz manual page. Level -6 on the other hand
only needs 94 MB memory for compression.

This causes autopkgtest failures in the test-compressed-indexes
test, as not enough memory exists to proceed.

Change the other compression levels to 6 as well: The gzip
and bzip2 FileFd backends do not read them, and use their
code's default level which is 6, so do the same for external
methods.

8 years agoapt-helper: Use CopyFile() for concatenating the files
Julian Andres Klode [Mon, 28 Dec 2015 10:41:04 +0000 (11:41 +0100)] 
apt-helper: Use CopyFile() for concatenating the files

There's no point in keeping using yet another read-then-write
loop.

Gbp-Dch: ignore

8 years agoBufferedWriter: flushing: Check for written < size instead of <=
Julian Andres Klode [Mon, 28 Dec 2015 03:09:55 +0000 (04:09 +0100)] 
BufferedWriter: flushing: Check for written < size instead of <=

This avoids some issues with InternalWrite returning 0 because
it just cannot write stuff at the moment.

8 years agofix 3 typos/omissions in apt.conf(5)
Beatrice Torracca [Sun, 27 Dec 2015 21:25:25 +0000 (22:25 +0100)] 
fix 3 typos/omissions in apt.conf(5)

Closes: 809160
8 years agodeal with empty values properly in deb822 parser
David Kalnischkies [Sun, 27 Dec 2015 20:52:01 +0000 (21:52 +0100)] 
deal with empty values properly in deb822 parser

Regression introduced in 8710a36a01c0cb1648926792c2ad05185535558e,
but such fields are unlikely in practice as it is just as simple to not
have a field at all with the same result of not having a value.

Closes: 808102
8 years agoRelease 1.1.9 1.1.9
Julian Andres Klode [Sun, 27 Dec 2015 18:17:21 +0000 (19:17 +0100)] 
Release 1.1.9

8 years agodoc/acquire-additional-files.txt: Mention apt-helper cat-file
Julian Andres Klode [Sun, 27 Dec 2015 18:11:16 +0000 (19:11 +0100)] 
doc/acquire-additional-files.txt: Mention apt-helper cat-file

People should know that this is exists.

8 years agoallow repositories to forbid arch:all for specific index targets
David Kalnischkies [Sun, 27 Dec 2015 16:04:33 +0000 (17:04 +0100)] 
allow repositories to forbid arch:all for specific index targets

Debian has a Packages file for arch:all already, but the arch:any files
contain arch:all packages as well, so downloading it would be a total
waste of resources. Getting this solved is on the list of things to do,
but it is also the hardest part – for index targets like Contents the
situation is much easier and less server/client implementations are
involved so we might not want to stall them.

A repository can now declare via:
No-Support-for-Architecture-all: Packages
that even if an arch:all Packages exists, it shouldn't be downloaded, so
that support for Contents files can be added now.

See also 1dd20368486820efb6ef4476ad739e967174bec4 for the implementation
of downloading arch:all index targets, which this is limiting.

The field uses the name of the target from the apt configuration for
simplicity and is negative by design as this field is intended to be
supported/needed only for a "short" time (one or two Debian releases).

While this commit theoretically supports any target, its expected to
only see "Packages" as a value in reality.

8 years agopkgcachegen.h: Hack around unordered_map not existing before C++11
Julian Andres Klode [Sun, 27 Dec 2015 15:43:28 +0000 (16:43 +0100)] 
pkgcachegen.h: Hack around unordered_map not existing before C++11

This is for public users only, which cannot use the class at all,
except for the static methods.

8 years agorred: Use buffered writes
Julian Andres Klode [Sun, 27 Dec 2015 13:30:19 +0000 (14:30 +0100)] 
rred: Use buffered writes

Buffered writes improve performance a lot, given that we spent
about 78% of the time in _write.

8 years agoFileFd: Add a buffered writing mode
Julian Andres Klode [Sun, 27 Dec 2015 13:29:01 +0000 (14:29 +0100)] 
FileFd: Add a buffered writing mode

This is somewhat experimental right now, and might not work
for everyone, so it is on an opt-in basis.

8 years agoFildFd: Introduce a Flush() function and call it from Close()
Julian Andres Klode [Sun, 27 Dec 2015 13:25:11 +0000 (14:25 +0100)] 
FildFd: Introduce a Flush() function and call it from Close()

The flush function can be used for buffered writers.

8 years agoFileFdPrivate: Add getter and setter for fields
Julian Andres Klode [Sun, 27 Dec 2015 12:31:32 +0000 (13:31 +0100)] 
FileFdPrivate: Add getter and setter for fields

We will soon implement a buffered writing decorator and we will
need to forward attribute changes to those.

8 years agofileutl: simple_buffer: Add write() and full() methods
Julian Andres Klode [Sun, 27 Dec 2015 14:35:51 +0000 (15:35 +0100)] 
fileutl: simple_buffer: Add write() and full() methods

These can be used to implement write buffering

Gbp-Dch: ignore

8 years agofileutl: simple_buffer: Mark accessors as const
Julian Andres Klode [Sun, 27 Dec 2015 14:33:59 +0000 (15:33 +0100)] 
fileutl: simple_buffer: Mark accessors as const

Suggested by David.

Gbp-Dch: ignore

8 years agoFileFdPrivate: Extract SimpleBuffer and mark it as hidden
Julian Andres Klode [Sun, 27 Dec 2015 14:31:34 +0000 (15:31 +0100)] 
FileFdPrivate: Extract SimpleBuffer and mark it as hidden

Gbp-Dch: ignore

8 years agorred: Only call pkgInitConfig() in test mode
Julian Andres Klode [Sun, 27 Dec 2015 12:25:23 +0000 (13:25 +0100)] 
rred: Only call pkgInitConfig() in test mode

This accidentally slipped in in a previous commit, but it should
be used only for testing mode.

Reported-By: David Kalnischkies <david@kalnischkies.de>
8 years agoParseDepends: Mark branches for build-dep parsing as unlikely
Julian Andres Klode [Sun, 27 Dec 2015 10:50:05 +0000 (11:50 +0100)] 
ParseDepends: Mark branches for build-dep parsing as unlikely

We do not see those branches at all during normal mode of
operation (that is, during cache generation), so tell the
compiler about it.

8 years agodebListParser: Do not validate Description-md5 for correctness twice
Julian Andres Klode [Sun, 27 Dec 2015 02:33:12 +0000 (03:33 +0100)] 
debListParser: Do not validate Description-md5 for correctness twice

The Set() method returns false if the input is no hex number,
so simply use that.

8 years agoHex2Digit: Do not use isxdigit()
Niels Thykier [Sun, 27 Dec 2015 02:16:55 +0000 (03:16 +0100)] 
Hex2Digit: Do not use isxdigit()

We directly check if we are a hex digit in HexDigit, so use that
information.

[jak@debian.org: Commit message wording]

8 years agodebListParser: ParseDepends: Only query native arch if needed
Julian Andres Klode [Sun, 27 Dec 2015 01:19:20 +0000 (02:19 +0100)] 
debListParser: ParseDepends: Only query native arch if needed

This makes the code parsing architecture lists slower, but on
the other hand, improves the more generic case of reading
dependencies from Packages files.

8 years agopkgcachegen: Use std::unordered_map instead of std::map
Julian Andres Klode [Sun, 27 Dec 2015 00:33:38 +0000 (01:33 +0100)] 
pkgcachegen: Use std::unordered_map instead of std::map

std::unordered_map is faster than std::map in our use case,
reducing cache generation time by about 10% in my benchmark.

8 years agoConvert most callers of isspace() to isspace_ascii()
Julian Andres Klode [Sat, 26 Dec 2015 23:51:59 +0000 (00:51 +0100)] 
Convert most callers of isspace() to isspace_ascii()

This converts all callers that read machine-generated data,
callers that might work with user input are not converted.

8 years agoIntroduce isspace_ascii() for use by parsers
Julian Andres Klode [Sat, 26 Dec 2015 23:42:37 +0000 (00:42 +0100)] 
Introduce isspace_ascii() for use by parsers

This is like isspace(), but ignores the current locale.

8 years agoRelease 1.1.8 1.1.8
Julian Andres Klode [Sat, 26 Dec 2015 22:24:11 +0000 (23:24 +0100)] 
Release 1.1.8

This release is made for Niels Thykier and apt-file.

8 years agoapt-helper: Check that we can open stdout
Julian Andres Klode [Sat, 26 Dec 2015 22:26:55 +0000 (23:26 +0100)] 
apt-helper: Check that we can open stdout

Gbp-Dch: ignore

8 years agoRefactor InternalReadLine to not unroll Size == 0 case
Julian Andres Klode [Sat, 26 Dec 2015 21:23:43 +0000 (22:23 +0100)] 
Refactor InternalReadLine to not unroll Size == 0 case

There is not much point and this is more readable.

Gbp-Dch: ignore

8 years agoChange InternalReadLine to always use buffer.read() return value
Julian Andres Klode [Sat, 26 Dec 2015 21:06:14 +0000 (22:06 +0100)] 
Change InternalReadLine to always use buffer.read() return value

This is mostly a documentation issue, as the size we want to
read is always less than or equal to the size of the buffer,
so the return value will be the same as the size argument.

Nonetheless, people wondered about it, and it seems clearer
to just always use the return value.

8 years agoapt-helper: Add a cat-file command for concatening files
Julian Andres Klode [Sat, 26 Dec 2015 20:45:32 +0000 (21:45 +0100)] 
apt-helper: Add a cat-file command for concatening files

This can automatically handle compressed files and is useful
for stuff like apt-file.

8 years agoRelease 1.1.7 1.1.7
Julian Andres Klode [Sat, 26 Dec 2015 18:10:21 +0000 (19:10 +0100)] 
Release 1.1.7

8 years agoGet rid of memmove() in our read buffering
Julian Andres Klode [Sat, 26 Dec 2015 16:38:40 +0000 (17:38 +0100)] 
Get rid of memmove() in our read buffering

This further improves our performance, and rred on uncompressed
files now spents 78% of its time in writing. Which means that
we should really look at buffering those.

8 years agorred: Allow passing files as arguments for compressor testing
Julian Andres Klode [Sat, 26 Dec 2015 14:25:33 +0000 (15:25 +0100)] 
rred: Allow passing files as arguments for compressor testing

This introduces a -t mode in which the first argument is input,
the second is output and the remaining are diffs.

This allows us to test patching compressed files, which are
detected using their file extension.

8 years agoUse a hardcoded buffer size of 4096 to fix performance
Julian Andres Klode [Sat, 26 Dec 2015 13:49:00 +0000 (14:49 +0100)] 
Use a hardcoded buffer size of 4096 to fix performance

The code uses memmove() to move parts of the buffer to the
front when the buffer is only partially read. By simply
reading one page at a time, the maximum size of bytes that
must be moved has a hard limit, and performance improves:

In one test case, consisting of a 430 MB Contents file,
and a 75K PDiff, applying the PDiff previously took about
48 seconds and now completes in 2 seconds.

Further speed up can be achieved by buffering writes, they
account for about 60% of the run-time now.

8 years agoMark all FileFdPrivate classes as hidden 1.1.6
Julian Andres Klode [Thu, 24 Dec 2015 16:14:15 +0000 (17:14 +0100)] 
Mark all FileFdPrivate classes as hidden

Gbp-Dch: ignore

8 years ago1.1.6 Christmas release
Julian Andres Klode [Thu, 24 Dec 2015 16:03:21 +0000 (17:03 +0100)] 
1.1.6 Christmas release

8 years agofix new[] vs delete mismatch introduced by b3db9d81
David Kalnischkies [Wed, 23 Dec 2015 18:42:53 +0000 (19:42 +0100)] 
fix new[] vs delete mismatch introduced by b3db9d81

And as we are at it lets fix the 'style' issue I introduced with the
filefd changes as well.

Reported-By: gcc -fsanitize's & cppcheck
Git-Dch: Ignore

8 years agoensure we got a lock in clean operation
David Kalnischkies [Wed, 23 Dec 2015 16:48:16 +0000 (17:48 +0100)] 
ensure we got a lock in clean operation

We try to acquired the locks, but we didn't stop if we failed to get it…

Closes: 808561
8 years agouse a dynamic buffer for ReadLine
David Kalnischkies [Wed, 23 Dec 2015 16:16:13 +0000 (17:16 +0100)] 
use a dynamic buffer for ReadLine

We don't need the buffer that often - only for ReadLine - as it is only
occasionally used, so it is actually more efficient to allocate it if
needed instead of statically by default. It also allows the caller to
influence the buffer size instead of hardcoding it.

Git-Dch: Ignore

8 years agoimplement a buffer system for FileFd::ReadLine
David Kalnischkies [Wed, 23 Dec 2015 15:42:12 +0000 (16:42 +0100)] 
implement a buffer system for FileFd::ReadLine

The default implementation of ReadLine was very naive by just reading
each character one-by-one. That is kinda okay for libraries implementing
compression as they have internal buffers (but still not great), but
while working with files directly or via a pipe as there is no buffer
there so all those reads are in fact system calls.

This commit introduces an internal buffer in the FileFd implementation
which is only used by ReadLine. The more low-level Read and all other
actions remain unbuffered – they just changed to deal with potential
"left-overs" in the buffer correctly.

Closes: 808579
8 years agoparse xz-compression level from configuration
David Kalnischkies [Tue, 22 Dec 2015 15:32:56 +0000 (16:32 +0100)] 
parse xz-compression level from configuration

If we use the library to compress xz, still try to understand and pick
up the arguments we would have used to call xz to figure out which level
the user wants us to use instead of defaulting to level 6 (which is the
default level of xz).

8 years agofollow dpkg and xz and use CRC64 for xz compression
David Kalnischkies [Tue, 22 Dec 2015 14:56:47 +0000 (15:56 +0100)] 
follow dpkg and xz and use CRC64 for xz compression

dpkg switched from CRC32 to CRC64 in
777915108d9d36d022dc4fc4151a615fc95e5032 with the message:
| This is the default CRC used by the xz command-line tool, align with
| it and switch from CRC32 to CRC64. It should provide slightly better
| detection against damaged data, at a negligible speed difference.

8 years agoshuffle compressor-specific code into private subclasses
David Kalnischkies [Tue, 22 Dec 2015 14:46:13 +0000 (15:46 +0100)] 
shuffle compressor-specific code into private subclasses

This isn't implementing any new features, it is "just" moving code
around from FileFd methods which decided on each call how to handle the
request by including all logic for all possible compressor backends in
the method body to a model in which backend-specifics are implemented in
a FileFdPrivate subclass. This avoids a big chunk of #ifdef's and should
make it a tiny bit more obvious which backend uses which code.

The execution of the idea is slightly uglified by the need to preserve
ABI and API which causes liberal befriending.

Git-Dch: Ignore