]> git.saurik.com Git - apt.git/log
apt.git
9 years agoreplace direct calls to egrep with grep -E
Daniel Hartwig [Tue, 11 Aug 2015 17:56:31 +0000 (19:56 +0200)] 
replace direct calls to egrep with grep -E

The rest of the initial patch is not needed or incorrect in our usage.
Big changes for the dselect scripts seem unneeded as well as those are
hardly used by anyone anymore…

[commit message written by commiter]

Closes: 255577
Thanks: David Weinehall for initial patch

9 years agoremove Dir:: scope limit of RootDir in the documentation
David Kalnischkies [Tue, 11 Aug 2015 17:24:24 +0000 (19:24 +0200)] 
remove Dir:: scope limit of RootDir in the documentation

RootDir doesn't only effect Dir-scope but all FindDir directories, so
document it accordingly.

Closes: 659387
9 years agosupport setting a port for rsh:// in sources.list
Daniel Hartwig [Tue, 11 Aug 2015 15:59:13 +0000 (17:59 +0200)] 
support setting a port for rsh:// in sources.list

[Commiter comment: Untested, but looks and compiles fine, so what could
possibly go wrong]

Closes: 624727
9 years agopo-fixups: fill Project-Id-Version and Encoding correctly
Guillem Jover [Tue, 11 Aug 2015 15:41:27 +0000 (17:41 +0200)] 
po-fixups: fill Project-Id-Version and Encoding correctly

Closes: 612996
9 years agotravis: add ppa:ubuntu-toolschain-r/test as source for gcc-5
David Kalnischkies [Mon, 10 Aug 2015 17:00:16 +0000 (19:00 +0200)] 
travis: add ppa:ubuntu-toolschain-r/test as source for gcc-5

This makes travis-ci able to run our tests again.
Sometimes.
If it doesn't spontaneously fails with internal gcc errors…

Git-Dch: Ignore

9 years agoapt.cron.daily: Reference 10periodic instead of 02periodic
Julian Andres Klode [Wed, 12 Aug 2015 09:10:16 +0000 (11:10 +0200)] 
apt.cron.daily: Reference 10periodic instead of 02periodic

LP: #1332106

9 years agodebian/control: Rename libapt-pkg4.15 -> libapt-pkg5.0
Julian Andres Klode [Tue, 11 Aug 2015 18:02:02 +0000 (20:02 +0200)] 
debian/control: Rename libapt-pkg4.15 -> libapt-pkg5.0

9 years agodebian/gbp.conf: Set multimaint-merge = True
Julian Andres Klode [Tue, 11 Aug 2015 17:40:22 +0000 (19:40 +0200)] 
debian/gbp.conf: Set multimaint-merge = True

Gbp-Dch: ignore

9 years agoAnnotate more methods with APT_OVERRIDE
Julian Andres Klode [Tue, 11 Aug 2015 13:58:03 +0000 (15:58 +0200)] 
Annotate more methods with APT_OVERRIDE

Gbp-Dch: ignore
Reported-By: g++ -Wsuggest-override
Thanks: g++ -Wsuggest-override

9 years agoBump apt-inst SONAME to 2.0 to adjust for the ABI break in apt-pkg
Julian Andres Klode [Tue, 11 Aug 2015 12:37:29 +0000 (14:37 +0200)] 
Bump apt-inst SONAME to 2.0 to adjust for the ABI break in apt-pkg

9 years agoMerge changelog entries from sid-gcc5
Julian Andres Klode [Tue, 11 Aug 2015 12:10:17 +0000 (14:10 +0200)] 
Merge changelog entries from sid-gcc5

9 years agopo: Update Simplified Chinese programs translation
Zhou Mo [Mon, 22 Jun 2015 14:38:32 +0000 (14:38 +0000)] 
po: Update Simplified Chinese programs translation

* fix a wrong translation.
* update some translations.

9 years agopo: update zh_CN translation slightly
Zhou Mo [Mon, 15 Jun 2015 01:39:31 +0000 (01:39 +0000)] 
po: update zh_CN translation slightly

9 years agoExecFork: Use /proc/self/fd to determine which files to close
Julian Andres Klode [Mon, 25 May 2015 14:45:05 +0000 (16:45 +0200)] 
ExecFork: Use /proc/self/fd to determine which files to close

This significantly reduces the number of files that have to be closed
and seems to be faster, despite the additional reads.

On systems where /proc/self/fd is not available, we fallback to the
old code that closes all file descriptors >= 3.

Closes: #764204
9 years agoMake QItem a subclass of DescItem
Julian Andres Klode [Tue, 11 Aug 2015 10:02:39 +0000 (12:02 +0200)] 
Make QItem a subclass of DescItem

CurrentItem previously was a DescItem, so let's make QItem a
DescItem to not break things.

9 years agoRe-introduce None as a deprecated alias for No
Julian Andres Klode [Tue, 11 Aug 2015 10:01:11 +0000 (12:01 +0200)] 
Re-introduce None as a deprecated alias for No

Gbp-Dch: ignore

9 years agoDrop C++11 elements from headers
Julian Andres Klode [Tue, 11 Aug 2015 09:49:21 +0000 (11:49 +0200)] 
Drop C++11 elements from headers

9 years agoapt-get: Do not include apt-pkg/indexrecords.h
Julian Andres Klode [Tue, 11 Aug 2015 09:48:51 +0000 (11:48 +0200)] 
apt-get: Do not include apt-pkg/indexrecords.h

It's gone.

Gbp-Dch: ignore

9 years agoFix an obscure warning from GCC
Julian Andres Klode [Tue, 11 Aug 2015 09:05:57 +0000 (11:05 +0200)] 
Fix an obscure warning from GCC

It complained about the previous code:

apt-pkg/sourcelist.cc: In destructor ‘pkgSourceList::~pkgSourceList()’:
apt-pkg/sourcelist.cc:278:4: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
    for (pkgIndexFile * const File : VolatileFiles)
    ^
There really cannot be an overflow, though. Rewriting it like this
seems to fix it.

9 years agoSimply ignore cruft in the status files, do not treat it as prio 0
Julian Andres Klode [Tue, 11 Aug 2015 08:21:29 +0000 (10:21 +0200)] 
Simply ignore cruft in the status files, do not treat it as prio 0

This was broken in case all other sources were < 0.

9 years agoReplace INT_MIN with std::numeric_limits<int>::min
Julian Andres Klode [Tue, 11 Aug 2015 08:20:58 +0000 (10:20 +0200)] 
Replace INT_MIN with std::numeric_limits<int>::min

This should fix travis compilation errors.

Gbp-Dch: ignore

9 years agoinitialize PinVers to a nullptr
David Kalnischkies [Mon, 10 Aug 2015 15:47:49 +0000 (17:47 +0200)] 
initialize PinVers to a nullptr

This makes test-bug-254770-segfault-if-cache-not-buildable happy.

Git-Dch: Ignore

9 years agomove manual-bit from 'oldlibs' pkg to its dependencies
David Kalnischkies [Mon, 10 Aug 2015 14:08:21 +0000 (16:08 +0200)] 
move manual-bit from 'oldlibs' pkg to its dependencies

oldlibs used to be in APT::Never-MarkAuto-Sections so that old
transition packages can be removed without causing the then
(autoinstalled) renamed package to be autoremoved. It isn't ideal
through as ideally you want the oldlibs package to be removed after
nothing depends on it anymore regardless of if you have once installed
it by hand or not – and if you had the package talking over (the
dependencies) should carry the manual bit now as they are the real deal
now.

As an added bonus if the package has no dependencies because it is an
oldlibs without a direct replacement you should move away from (like
lib1 and lib2 are currently in the archive, but there will hopefully
only be lib2 in the release) you get a lib1 marked as auto.

If the user still needs the oldlibs package for some reason all he has
to do is mark it as manual once as this move is only performed if a
installed package changes its section from a not-Move-Autobit-Sections
to a Move-Autobit-Sections.

9 years agomove APT::Never-MarkAuto-Sections handling to MarkDelete
David Kalnischkies [Mon, 10 Aug 2015 12:44:14 +0000 (14:44 +0200)] 
move APT::Never-MarkAuto-Sections handling to MarkDelete

Having the handling in MarkInstall means that it just effects
installation of the metapackage, but if the dependencies change the new
dependencies aren't protected (and the old dependencies are still
protected for no 'reason'). Having it in MarkDelete means that if a
metapackage is sheduled for removal all its currently installed
dependencies are marked as manual, which helps against both as in this
case there is no new/old and additionally if a user decides the
installation of a metapackage was wrong he can just remove it
explicitely avoid the manual marking entirely.

9 years agono value for MultiArch field is 'no', not 'none'
David Kalnischkies [Mon, 10 Aug 2015 09:31:28 +0000 (11:31 +0200)] 
no value for MultiArch field is 'no', not 'none'

Git-Dch: Ignore

9 years agochange to libapt-pkg abi 5.0 with versioned symbols
David Kalnischkies [Mon, 10 Aug 2015 09:08:35 +0000 (11:08 +0200)] 
change to libapt-pkg abi 5.0 with versioned symbols

We changed an aweful lot of stuff, so 5.0 is properly better than 4.X as
a semantic version and as we are at it lets add some trivial symbol
versioning as well: We just mark all exported symbols with the same
version for now. This isn't really the proper thing to do as if we add
symbols in later versions (with the same abi) they will get the same
symbols version, but our .symbols file will protect us from the problems
arising from this as it will ensure that a package acutally depends on a
version of the abi high enough to include the symbol.

9 years agoupdate symbols file to current state of affairs
David Kalnischkies [Sun, 9 Aug 2015 18:26:37 +0000 (20:26 +0200)] 
update symbols file to current state of affairs

cxx11abi transition happens, we changed a bunch of methods and all that
stuff which is really good™ for an abi. Lets just slowly start to stop
changing more and a first step is to document the current so changes
aren't hidding in a big wall of change anymore.

Git-Dch: Ignore

9 years agomark again deps of pkgs in APT::Never-MarkAuto-Sections as manual
David Kalnischkies [Mon, 3 Aug 2015 05:00:33 +0000 (07:00 +0200)] 
mark again deps of pkgs in APT::Never-MarkAuto-Sections as manual

In 50ef3344c3afaaf9943142906b2f976a0337d264 (and similar for other
branches), while 'fixing' the edgecase of a package being in multiple
sections (e.g. moved from libs to oldlibs in newer releases) I
accidently broke the feature itself completely by operating on the
package itself and no longer on its dependencies…

The behaviour isn't ideal in multiple ways, which we are hopefully able
to fix with new ideas as mentioned in the buglog, but until then the
functionality of this "hack" should be restored.

Reported-By: Raphaël Hertzog <hertzog@debian.org>
Tested-By: Adam Conrad <adconrad@ubuntu.com>
Closes: 793360
LP: 1479207
Thanks: Raphaël Hertzog and Adam Conrad for detailed reports and initial patches

9 years agodrop extra newline in 'Failed to fetch' and 'GPG error' message
David Kalnischkies [Sun, 9 Aug 2015 17:01:49 +0000 (19:01 +0200)] 
drop extra newline in 'Failed to fetch' and 'GPG error' message

I never understood why there is an extra newline in those messages, so
now is as good time as any to drop them. Lets see if someone complains
with a good reason to keep it…

9 years agoenhance "hit paywall" error message to mention the probable cause
David Kalnischkies [Sun, 9 Aug 2015 15:40:57 +0000 (17:40 +0200)] 
enhance "hit paywall" error message to mention the probable cause

Reporting errors from Done() is bad for progress reporting and such, so
factoring this out is a good idea and we start with moving the supposed-
to-be clearsigned file isn't clearsigned out first – improving the error
message in the process as we use the same message for a similar case
(NODATA) as this is what I have to look at with the venue wifi at
DebCamp and the old errormessage doesn't really say anything.

9 years agodrop obsolete explicit :none handling in pkgCacheGen
David Kalnischkies [Mon, 20 Jul 2015 11:34:25 +0000 (13:34 +0200)] 
drop obsolete explicit :none handling in pkgCacheGen

We archieve the same without the special handling now, so drop this code.
Makes supporting this abdomination a little longer bearable as well.

Git-Dch: Ignore

9 years agoparse packages from all architectures into the cache
David Kalnischkies [Mon, 20 Jul 2015 10:32:46 +0000 (12:32 +0200)] 
parse packages from all architectures into the cache

Now that we can dynamically create dependencies and provides as needed
rather than requiring to know with which architectures we will deal
before running we can allow the listparser to parse all records rather
than skipping records of "unknown" architectures.

This can e.g. happen if a user has foreign architecture packages in his
status file without dpkg knowing about this architecture (or apt
configured in this way).

A sideeffect is that now arch:all packages are (correctly) recorded as
available from any Packages file, not just from the native one – which
has its downsides for the resolver as mixed-arch source packages can
appear in different architectures at different times, but that is the
problem of the resolver and dealing with it in the parser is at best a
hack (and also depends on a helpful repository).

Another sideeffect is that his allows :none packages to appear in
Packages files again as we don't do any kind of checks now, but given
that they aren't really supported (anymore) by anyone we can live with
that.

9 years agoeliminate dead file-provides code in cache generation
David Kalnischkies [Mon, 20 Jul 2015 08:33:07 +0000 (10:33 +0200)] 
eliminate dead file-provides code in cache generation

The code was never active in production, it just sits there collecting
dust and given that it is never tested probably doesn't even work
anymore the way it was supposed to be (whatever that was exactly in the
first place). So just remove it before I have to "fix" it again next
time.

Git-Dch: Ignore

9 years agoelimate duplicated code in pkgIndexFile subclasses
David Kalnischkies [Mon, 20 Jul 2015 08:17:29 +0000 (10:17 +0200)] 
elimate duplicated code in pkgIndexFile subclasses

Trade deduplication of code for a bunch of new virtuals, so it is
actually visible how the different indexes behave cleaning up the
interface at large in the process.

Git-Dch: Ignore

9 years agoadd volatile sources support in libapt-pkg
David Kalnischkies [Sat, 18 Jul 2015 16:03:54 +0000 (18:03 +0200)] 
add volatile sources support in libapt-pkg

Sources are usually defined in sources.list (and co) and are pretty
stable, but once in a while a frontend might want to add an additional
"source" like a local .deb file to install this package (No support for
'real' sources being added this way as this is a multistep process).

We had a hack in place to allow apt-get and apt to pull this of for a
short while now, but other frontends are either left in the cold by this
and/or the code for it looks dirty with FIXMEs plastering it and has on
top of this also some problems (like including these 'volatile' sources
in the srcpkgcache.bin file).

So the biggest part in this commit is actually the rewrite of the cache
generation as it is now potentially a three step process. The biggest
problem with adding support now through is that this makes a bunch of
previously mostly unusable by externs and therefore hidden classes
public, so a bit of further tuneing on this now public API is in order…

9 years agojust-in-time creation for (explicit) negative deps
David Kalnischkies [Fri, 17 Jul 2015 08:53:01 +0000 (10:53 +0200)] 
just-in-time creation for (explicit) negative deps

Now that we deal with provides in a more dynamic fashion the last
remaining problem is explicit dependencies like 'Conflicts: foo' which
have to apply to all architectures, but creating them all at the same
time requires us to know all architectures ending up in the cache which
isn't needed to be the same set as all foreign architectures.

The effect is visible already now through as this prevents the creation
of a bunch of virtual packages for arch:all packages and as such also
many dependencies, just not very visible if you don't look at the stats…

Git-Dch Ignore

9 years agojust-in-time creation for (implicit) Provides
David Kalnischkies [Thu, 16 Jul 2015 17:41:45 +0000 (19:41 +0200)] 
just-in-time creation for (implicit) Provides

Expecting the worst is easy to code, but has its disadvantages e.g.
by creating package structures which otherwise would have never
existed. By creating the provides instead at the time a package
structure is added we are well prepared for the introduction of partial
architectures, massive amounts of M-A:foreign (and :allowed) and co as
far as provides are concerned at least. We have something relatively
similar for dependencies already.

Many tests are added for both M-A states and the code cleaned to
properly support implicit provides for foreign architectures and
architectures we 'just' happen to parse.

Git-Dch: Ignore

9 years agohide implicit deps in apt-cache again by default
David Kalnischkies [Thu, 16 Jul 2015 09:15:25 +0000 (11:15 +0200)] 
hide implicit deps in apt-cache again by default

Before MultiArch implicits weren't a thing, so they were hidden by
default by definition. Adding them for MultiArch solved many problems,
but having no reliable way of detecting which dependency (and provides)
is implicit or not causes problems everytime we want to output
dependencies without confusing our observers with unneeded
implementation details.

The really notworthy point here is actually that we keep now a better
record of how a dependency came to be so that we can later reason about
it more easily, but that is hidden so deep down in the library internals
that change is more the problems it solves than the change itself.

9 years agouse a smaller type for flags storage in the cache
David Kalnischkies [Wed, 15 Jul 2015 12:36:16 +0000 (14:36 +0200)] 
use a smaller type for flags storage in the cache

We store very few flags in the cache, so keeping storage space for 8 is
enough for all of them and still leaves a few unused bits remaining for
future extensions without wasting bytes for nothing.

Git-Dch: Ignore

9 years agoremove the compatibility markers for 4.13 abi
David Kalnischkies [Wed, 15 Jul 2015 11:21:21 +0000 (13:21 +0200)] 
remove the compatibility markers for 4.13 abi

We aren't and we will not be really compatible again with the previous
stable abi, so lets drop these markers (which never made it into a
released version) for good as they have outlived their intend already.

Git-Dch: Ignore

9 years agolink DependencyData structs together
David Kalnischkies [Tue, 14 Jul 2015 11:41:11 +0000 (13:41 +0200)] 
link DependencyData structs together

Cache generation needs a way of quickly iterating over the unique potion
of the dependencies to be able to share them. By linking them together
we can reduce the speed penality (~ 80%) with only a small reduction in
saved size (~ 20%).

Git-Dch: Ignore

9 years agosplit-up Dependency struct
David Kalnischkies [Mon, 13 Jul 2015 14:28:21 +0000 (16:28 +0200)] 
split-up Dependency struct

Having dependency data separated from the link between version/package
and the dependency allows use to work on sharing the depdency data a bit
as it turns out that many dependencies are in fact duplicates. How many
are duplicates various heavily with the sources configured, but for a
single Debian release the ballpark is 2 duplicates for each dependency
already (e.g. libc6 counts 18410 dependencies, but only 45 unique). Add
more releases and the duplicates count only rises to get ~6 for 3
releases. For each architecture a user has configured which given the
shear number of dependencies amounts to MBs of duplication.

We can cut down on this number, but pay a heavy price for it: In my
many releases(3) + architectures(3) test we have a 10% (~ 0.5 sec)
increase in cache creationtime, but also 10% less cachesize (~ 10 MB).

Further work is needed to rip the whole benefits from this through, so
this is just the start.

Git-Dch: Ignore

9 years agobunch of micro-optimizations for depcache
David Kalnischkies [Mon, 13 Jul 2015 10:47:05 +0000 (12:47 +0200)] 
bunch of micro-optimizations for depcache

DepCache functions are called a lot, so if we can squeeze some drops out
of them for free we should do so. Takes also the opportunity to remove
some whitespace errors from these functions.

Git-Dch: Ignore

9 years agoavoid virtual in the iterators
David Kalnischkies [Mon, 13 Jul 2015 21:10:53 +0000 (23:10 +0200)] 
avoid virtual in the iterators

With a bit of trickery and the Curiously recurring template pattern we
can free us from our use of virtual in the iterators were it is unneeded
bloat as we never deal with pointers to iterators and similar such.

Git-Dch: Ignore

9 years agoshow or-groups in not-installed recommends and suggests lists
David Kalnischkies [Mon, 13 Jul 2015 01:36:59 +0000 (03:36 +0200)] 
show or-groups in not-installed recommends and suggests lists

Further abstracting our new ShowList allows to use it for containers of
strings as well giving us the option to implement an or-groups display
for the recommends and suggests lists which is a nice trick given that
it also helps with migrating the last remaining other cases of old
ShowList.

9 years agoheaders are for declarations only
David Kalnischkies [Sun, 12 Jul 2015 16:28:34 +0000 (18:28 +0200)] 
headers are for declarations only

Housekeeping. This used to be embedded in apt-get directly, then moved
to into our (then new) private lib and now header and code get a proper
separation.

Git-Dch: Ignore

9 years agoimplement a more generic ShowList method
David Kalnischkies [Sun, 12 Jul 2015 11:41:12 +0000 (13:41 +0200)] 
implement a more generic ShowList method

apt-get is displaying various lists of package names, which until now it
was building as a string before passing it to ShowList, which inserted
linebreaks at fitting points and showed a title if needed, but it never
really understood what it was working with. With the help of C++11 the
new generic knows not only what it works with, but generates the list on
the fly rather than asking for it and potentially discarding parts of
the input (= the non-default verbose display). It also doubles as a test
for how usable the CacheSets are with C++11.

(Not all callers are adapted yet.)

Git-Dch: Ignore

9 years agoenforce GCC5 C++11 ABI and usage
David Kalnischkies [Sat, 11 Jul 2015 18:21:45 +0000 (20:21 +0200)] 
enforce GCC5 C++11 ABI and usage

The library(s) make an API break anyhow, so lets ensure we use gcc5 for
this break and enable c++11 as standard as gcc6 will use it as default
and should provide some API parts for c++11 – beside that it can't hurt
to use c++11 itself. We just have to keep our headers c++03 compatible
to not enforce a standrd bump in our reverse dependencies.

9 years agorename 'apt-get files' to 'apt-get indextargets'
David Kalnischkies [Thu, 9 Jul 2015 22:07:37 +0000 (00:07 +0200)] 
rename 'apt-get files' to 'apt-get indextargets'

'files' is a bit too generic as a name for a command usually only used
programmatically (if at all) by developers, so instead of "wasting" this
generic name for this we use "indextargets" which is actually the name
of the datastructure the displayed data is stored in.
Along with this rename the config options are renamed accordingly.

9 years agodisable locking even for root in --simulate
David Kalnischkies [Thu, 9 Jul 2015 19:10:53 +0000 (21:10 +0200)] 
disable locking even for root in --simulate

Six years ago in 55a5a46c235a30bf024fb2301066553953701cc5 apt-get
learned to disable locking if run as normal user and show a message.

Helmut Grohne rightly suggests on IRC now that there isn't much point in
getting the locks for root either as the output isn't in any way more
authoritive than without locking given that after this call the lock is
freed and any action can sneak in before we make the next call. So we
exchange no benefit for the disavantage of blocking real calls. This can
be especially confusing with the aliases --no-act and --just-print.

We do not print the message we print for users through as the non-root
users can be confronted with a lot more difference via unreadable files.

9 years agohandle site-changing redirects as mirror changes
David Kalnischkies [Thu, 9 Jul 2015 10:21:20 +0000 (12:21 +0200)] 
handle site-changing redirects as mirror changes

Redirectors like httpredir.debian.org orchestra the download from
multiple (hopefully close) mirrors while having only a single central
sources.list entry by using redirects. This has the effect that the
progress report always shows the source it started with, not the mirror
it ends up fetching from, which is especially problematic for error
reporting as having a report for a "Hashsum mismatch" for the redirector
URI is next to useless as nobody knows which URI it was really fetched
from (regardless of it coming from a user or via the report script) from
this output alone. You would need to enable debug output and hope for
the same situation to arise again…

We hence reuse the UsedMirror field of the mirror:// method and detect
redirects which change the site and declare this new site as the
UsedMirrror (and adapt the description).

The disadvantage is that there is no obvious mapping anymore (it is
relatively easy to guess through with some experience) from progress
lines to sources.list lines, so error messages need to take care to use
the Target description (rather than current Item description) if they
want to refer to the sources.list entry.

9 years agoskip .diff/Index acquire if Release file was a hit
David Kalnischkies [Thu, 9 Jul 2015 10:01:29 +0000 (12:01 +0200)] 
skip .diff/Index acquire if Release file was a hit

QuereURI already skips the aquire of the real file in such a case, but
it can't detect pdiffs this way. Those already have a handling if the
file wasn't changed in between two Release files, so we just add an
other check for a Release file hit here, too.

Git-Dch: Ignore

9 years agoadd c++11 override marker to overridden methods
David Kalnischkies [Wed, 8 Jul 2015 22:35:40 +0000 (00:35 +0200)] 
add c++11 override marker to overridden methods

C++11 adds the 'override' specifier to mark that a method is overriding
a base class method and error out if not. We hide it in the APT_OVERRIDE
macro to ensure that we keep compiling in pre-c++11 standards.

Reported-By: clang-modernize -add-override -override-macros
Git-Dch: Ignore

9 years agoimplement reverse_iterators for cachesets
David Kalnischkies [Wed, 8 Jul 2015 20:44:09 +0000 (22:44 +0200)] 
implement reverse_iterators for cachesets

By further abstracting the iterator templates we can wrap the reverse
iterators of the wrapped containers and share code in a way that
iterator creating is now more template intensive, but shorter in code.

Git-Dch: Ignore

9 years agoprepare cachesets for -std=c++11
David Kalnischkies [Wed, 8 Jul 2015 14:37:04 +0000 (16:37 +0200)] 
prepare cachesets for -std=c++11

The "problem" is mostly in the erase() definitions as they slightly
conflict and in pre-c++11 are not uniformly in different containers.
By differenciating based on the standard we can provide erase() methods
for both standards – and as the method is in a template and inline we
don't need to worry about symbols here.

The rest is adding wrappings for the new forward_list and unordered_set
containers and correcting our iterators to use the same trait as the
iterator they are wrapping instead of having all of them be simple
forward iterators. This allows the use of specialized algorithms which
are picked based on iterator_traits and implementing them all is simple
to do as we can declare all methods easily and only if they are called
they will generate errors (if the underlying iterator doesn't support
these).

Git-Dch: Ignore

9 years agoimplement Signed-By without using gpg for verification
David Kalnischkies [Tue, 7 Jul 2015 20:11:20 +0000 (22:11 +0200)] 
implement Signed-By without using gpg for verification

The previous commit returns to the possibility of using just gpgv for
verification proposes. There is one problem through: We can't enforce a
specific keyid without using gpg, but our acquire method can as it
parses gpgv output anyway, so it can deal with good signatures from not
expected signatures and treats them as unknown keys instead.

Git-Dch: Ignore

9 years agomerge keyrings with cat instead of gpg in apt-key
David Kalnischkies [Tue, 7 Jul 2015 09:46:39 +0000 (11:46 +0200)] 
merge keyrings with cat instead of gpg in apt-key

If all keyrings are simple keyrings we can merge the keyrings with cat
rather than doing a detour over gpg --export | --import (see #790665),
which means 'apt-key verify' can do without gpg and just use gpgv as
before the merging change.

We declare this gpgv usage explicit now in the dependencies. This isn't
a new dependency as gnupg as well as debian-archive-keyring depend on
and we used it before unconditionally, just that we didn't declare it.

The handling of the merged keyring needs to be slightly different as our
merged keyring can end up containing the same key multiple times, but at
least currently gpg does remove only the first occurrence with
--delete-keys, so we move the handling to a if one is gone, all are gone
rather than an (implicit) quid pro quo or even no effect.

Thanks: Daniel Kahn Gillmor for the suggestion

9 years agosupport gpg 2.1.x in apt-key
David Kalnischkies [Mon, 6 Jul 2015 19:15:45 +0000 (21:15 +0200)] 
support gpg 2.1.x in apt-key

The output of gpg slightly changes in 2.1 which breaks the testcase, but
the real problem is that this branch introduces a new default keyring
format (which is called keybox) and mixing it with simple keyrings (the
previous default format) has various problems like failing in the keybox
to keyring import (#790665) or [older] gpgv versions not being able to
deal with keyboxes (and newer versions as well currently:
https://bugs.gnupg.org/gnupg/issue2025).

We fix this by being a bit more careful in who creates keyrings (aka: we
do it or we take a simple keyring as base) to ensure we always have a
keyring instead of a keybox. This way we can ensure that any version
combination of gpv/gpgv2 and gnupg/gnupg2 without doing explicit version
checks and use the same code for all of them.

Closes: 781042
9 years agoenhance apt-key debugging options
David Kalnischkies [Mon, 6 Jul 2015 14:44:01 +0000 (16:44 +0200)] 
enhance apt-key debugging options

It is sometimes handy to know how apt-key exactly called gpg, so adding
a pair of options to be able to see this if wanted is added.  Two are
needed as some commands output is redirected to /dev/null, while sfor
others stdout is piped into another gpg call so in both cases you
wouldn't see all and hence you can choose.

Git-Dch: Ignore

9 years agoallow individual targets to be kept compressed
David Kalnischkies [Tue, 30 Jun 2015 08:53:51 +0000 (10:53 +0200)] 
allow individual targets to be kept compressed

There is an option to keep all targets (Packages, Sources, …) compressed
for a while now, but the all-or-nothing approach is a bit limited for
our purposes with additional targets as some of them are very big
(Contents) and rarely used in comparison, so keeping them compressed by
default can make sense, while others are still unpacked.

Most interesting is the copy-change maybe: Copy is used by the acquire
system as an uncompressor and it is hence expected that it returns the
hashes for the "output", not the input. Now, in the case of keeping a
file compressed, the output is never written to disk, but generated in
memory and we should still validated it, so for compressed files copy is
expected to return the hashes of the uncompressed file. We used to use
the config option to enable on-the-fly decompress in the method, but in
reality copy is never used in a way where it shouldn't decompress a
compressed file to get its hashes, so we can save us the trouble of
sending this information to the method and just do it always.

9 years agoRussian program translation update
Yuri Kozlov [Wed, 24 Jun 2015 20:35:00 +0000 (22:35 +0200)] 
Russian program translation update

Closes: 789709
9 years agoremove the longtime deprecated vendor{,list} stuff
David Kalnischkies [Wed, 24 Jun 2015 20:13:51 +0000 (22:13 +0200)] 
remove the longtime deprecated vendor{,list} stuff

History suggests that this comes from an earlier apt-secure
implementation, but never really became a thing, totally unused and
marked as deprecated for "ages" now. Especially as it did nothing even
if it would have been used (libapt itself didn't use it at all).

9 years agoimplement Signed-By option for sources.list
David Kalnischkies [Wed, 24 Jun 2015 17:31:22 +0000 (19:31 +0200)] 
implement Signed-By option for sources.list

Limits which key(s) can be used to sign a repository. Not immensely useful
from a security perspective all by itself, but if the user has
additional measures in place to confine a repository (like pinning) an
attacker who gets the key for such a repository is limited to its
potential and can't use the key to sign its attacks for an other (maybe
less limited) repository… (yes, this is as weak as it sounds, but having
the capability might come in handy for implementing other stuff later).

9 years agoadd sources.list Check-Valid-Until and Valid-Until-{Max,Min} options
David Kalnischkies [Tue, 23 Jun 2015 15:26:57 +0000 (17:26 +0200)] 
add sources.list Check-Valid-Until and Valid-Until-{Max,Min} options

These options could be set via configuration before, but the connection
to the actual sources is so strong that they should really be set in the
sources.list instead – especially as this can be done a lot more
specific rather than e.g. disabling Valid-Until for all sources at once.

Valid-Until-* names are chosen instead of the Min/Max-ValidTime as this
seems like a better name and their use in the wild is probably low
enough that this isn't going to confuse anyone if we have to names for
the same thing in different areas.

In the longrun, the config options should be removed, but for now
documentation hinting at the new options is good enough as these are the
kind of options you set once across many systems with different apt
versions, so the new way should work everywhere first before we
deprecate the old way.

9 years agomerge indexRecords into metaIndex
David Kalnischkies [Tue, 23 Jun 2015 13:16:08 +0000 (15:16 +0200)] 
merge indexRecords into metaIndex

indexRecords was used to parse the Release file – mostly the hashes –
while metaIndex deals with downloading the Release file, storing all
indexes coming from this release and … parsing the Release file, but
this time mostly for the other fields.

That wasn't a problem in metaIndex as this was done in the type specific
subclass, but indexRecords while allowing to override the parsing method
did expect by default a specific format.

APT isn't really supporting different types at the moment, but this is
a violation of the abstraction we have everywhere else and, which is the
actual reason for this merge: Options e.g. coming from the sources.list
come to metaIndex naturally, which needs to wrap them up and bring them
into indexRecords, so the acquire system is told about it as they don't
get to see the metaIndex, but they don't really belong in indexRecords
as this is just for storing data loaded from the Release file… the
result is a complete mess.

I am not saying it is a lot prettier after the merge, but at least
adding new options is now slightly easier and there is just one place
responsible for parsing the Release file. That can't hurt.

9 years agodetect and error out on conflicting Trusted settings
David Kalnischkies [Mon, 22 Jun 2015 10:34:11 +0000 (12:34 +0200)] 
detect and error out on conflicting Trusted settings

A specific trust state can be enforced via a sources.list option, but it
effects all entries handled by the same Release file, not just the entry
it was given on so we enforce acknowledgement of this by requiring the
same value to be (not) set on all such entries.

9 years agobring back deb822 sources.list entries as .sources
David Kalnischkies [Sun, 21 Jun 2015 21:12:24 +0000 (23:12 +0200)] 
bring back deb822 sources.list entries as .sources

Having two different formats in the same file is very dirty and causes
external tools to fail hard trying to parse them. It is probably not a
good idea for them to parse them in the first place, but they do and we
shouldn't break them if there is a better way.

So we solve this issue for now by giving our deb822 format a new
filename extension ".sources" which unsupporting applications are likely
to ignore an can begin gradually moving forward rather than waiting for
the unknown applications to catch up.

Currently and for the forseeable future apt is going to support both
with the same feature set as documented in the manpage, with the
longtime plan of adopting the 'new' format as default, but that is a
long way to go and might get going more from having an easier time
setting options than from us pushing it explicitely.

9 years agosupport lang= and target= sources.list options
David Kalnischkies [Sun, 21 Jun 2015 14:47:53 +0000 (16:47 +0200)] 
support lang= and target= sources.list options

We support arch= for a while, now we finally add lang= as well and as a
first simple way of controlling which targets to acquire also target=.

This asked for a redesign of the internal API of parsing and storing
information about 'deb' and 'deb-src' lines. As this API isn't visible
to the outside no damage done through.

Beside being a nice cleanup (= it actually does more in less lines) it
also provides us with a predictable order of architectures as provides
in the configuration rather than based on string sorting-order, so that
now the native architecture is parsed/displayed first. Observeable e.g.
in apt-get output.

9 years agofix memory leaks reported by -fsanitize
David Kalnischkies [Thu, 18 Jun 2015 15:33:15 +0000 (17:33 +0200)] 
fix memory leaks reported by -fsanitize

Various small leaks here and there. Nothing particularily big, but still
good to fix. Found by the sanitizers while running our testcases.

Reported-By: gcc -fsanitize
Git-Dch: Ignore

9 years agosome CXXFLAGS housekeeping
David Kalnischkies [Wed, 17 Jun 2015 20:15:01 +0000 (22:15 +0200)] 
some CXXFLAGS housekeeping

More warnings are always better.

Git-Dch: Ignore

9 years agoapt manpage is built from xml nowadays like the rest
David Kalnischkies [Wed, 17 Jun 2015 17:34:45 +0000 (19:34 +0200)] 
apt manpage is built from xml nowadays like the rest

It used be a handwritten manpage, but that is gone and this artifact is
the cause for the message:
../../buildlib/manpage.mak:23: target '../../build/docs/apt.de.8' given
more than once in the same rule
[ … repeated for all translations … ]
So lets get right of it.

Git-Dch: Ignore

9 years agosimplify Origin matchmaking for status files
David Kalnischkies [Wed, 17 Jun 2015 17:22:13 +0000 (19:22 +0200)] 
simplify Origin matchmaking for status files

The old check is overly complicated nowadays as we have a pretty
defining difference between packages from a Packages files coming
from with a Release file (even if the file itself doesn't exist) and
packages coming from the dpkg.status or directly out of *.deb's
as these have no associated Release file.

Git-Dch: Ignore

9 years agocleanup Container.erase API to look more like std::containers
David Kalnischkies [Wed, 17 Jun 2015 11:30:14 +0000 (13:30 +0200)] 
cleanup Container.erase API to look more like std::containers

C++11 slightly changes the API again to const_iterator, but we are find
with iterators in the C++03 style for now as long as they look and
behave equally to the methods of the standard containers.

Git-Dch: Ignore

9 years agomake all d-pointer * const pointers
David Kalnischkies [Wed, 17 Jun 2015 07:29:00 +0000 (09:29 +0200)] 
make all d-pointer * const pointers

Doing this disables the implicit copy assignment operator (among others)
which would cause hovac if used on the classes as it would just copy the
pointer, not the data the d-pointer points to. For most of the classes
we don't need a copy assignment operator anyway and in many classes it
was broken before as many contain a pointer of some sort.

Only for our Cacheset Container interfaces we define an explicit copy
assignment operator which could later be implemented to copy the data
from one d-pointer to the other if we need it.

Git-Dch: Ignore

9 years agoapply various style suggestions by cppcheck
David Kalnischkies [Tue, 16 Jun 2015 22:14:10 +0000 (00:14 +0200)] 
apply various style suggestions by cppcheck

Some of them modify the ABI, but given that we prepare a big one
already, these few hardly count for much.

Git-Dch: Ignore

9 years agopolicy: Fix the handling of config-files states
Julian Andres Klode [Mon, 10 Aug 2015 13:52:06 +0000 (15:52 +0200)] 
policy: Fix the handling of config-files states

Gbp-Dch: ignore

9 years agoFix test case breakage from the new policy implementation
Julian Andres Klode [Mon, 10 Aug 2015 13:36:51 +0000 (15:36 +0200)] 
Fix test case breakage from the new policy implementation

Everything's working now.

9 years agopolicy: Fix the new policy implementation to handle downgrades correctly
Julian Andres Klode [Mon, 10 Aug 2015 13:00:16 +0000 (15:00 +0200)] 
policy: Fix the new policy implementation to handle downgrades correctly

This was broken previously, as we'd choose a downgrade when it's
pin was higher than the previously selected candidate.

9 years agoDetermine the candidate based on per-version pins, instead of old code
Julian Andres Klode [Mon, 10 Aug 2015 10:20:51 +0000 (12:20 +0200)] 
Determine the candidate based on per-version pins, instead of old code

The new implementation assigns each version a pin, instead of assigning
the pin to a package. This enables us to give each version of a package
a different priority.

Closes: #770017
Closes: #622237
Closes: #620249
Closes: #685215
9 years agopolicy: Return highest file pin if version pin == 0 in GetPriority()
Julian Andres Klode [Mon, 10 Aug 2015 10:18:28 +0000 (12:18 +0200)] 
policy: Return highest file pin if version pin == 0 in GetPriority()

This makes sure that we display a useful value instead of 0 for
versions that are pinned due to package files.

9 years agofileutl_test.cc: Check for /etc/passwd instead of /bin/sh
Julian Andres Klode [Mon, 10 Aug 2015 09:42:34 +0000 (11:42 +0200)] 
fileutl_test.cc: Check for /etc/passwd instead of /bin/sh

This fixes the tests on systems where usrmerge is installed.

Gbp-dch: ignore

9 years agoapt-cache: Change version pin output to use per-version pins
Julian Andres Klode [Mon, 10 Aug 2015 09:31:19 +0000 (11:31 +0200)] 
apt-cache: Change version pin output to use per-version pins

9 years agopolicy: Assign per-version pins
Julian Andres Klode [Mon, 10 Aug 2015 09:21:11 +0000 (11:21 +0200)] 
policy: Assign per-version pins

9 years agoversionmatch: Extract version match checking out of Find()
Julian Andres Klode [Mon, 10 Aug 2015 09:19:11 +0000 (11:19 +0200)] 
versionmatch: Extract version match checking out of Find()

Refactor version matching to allow us to check if a version matches
a pin. This will aid the per-version pinning implementation.

9 years agopkgPolicy: Introduce storage and helpers for per-version pins
Julian Andres Klode [Mon, 10 Aug 2015 09:00:37 +0000 (11:00 +0200)] 
pkgPolicy: Introduce storage and helpers for per-version pins

Per-version pins should lead to more predictable results with
/etc/apt/preferences uses like pinning one version with -1.

9 years agoTurkish translation update for apt
Mert Dirik [Tue, 23 Jun 2015 11:58:47 +0000 (12:58 +0100)] 
Turkish translation update for apt

Closes: #789491
9 years agoMerge remote-tracking branch 'donkult/debian/experimental' into debian/experimental
Michael Vogt [Tue, 23 Jun 2015 11:17:35 +0000 (12:17 +0100)] 
Merge remote-tracking branch 'donkult/debian/experimental' into debian/experimental

9 years agoadd d-pointer, virtual destructors and de-inline de/constructors
David Kalnischkies [Tue, 16 Jun 2015 14:22:46 +0000 (16:22 +0200)] 
add d-pointer, virtual destructors and de-inline de/constructors

To have a chance to keep the ABI for a while we need all three to team
up. One of them missing and we might loose, so ensuring that they are
available is a very tedious but needed task once in a while.

Git-Dch: Ignore

9 years agoallow ratelimiting progress reporting for testcases
David Kalnischkies [Mon, 15 Jun 2015 21:59:14 +0000 (23:59 +0200)] 
allow ratelimiting progress reporting for testcases

Progress reports once in a while which is a bit to unpredictable for
testcases, so we enforce a steady progress for them in the hope that
this makes the tests (mostly test-apt-progress-fd) a bit more stable.

Git-Dch: Ignore

9 years agocondense parallel requests with the same hashes to one
David Kalnischkies [Mon, 15 Jun 2015 21:06:56 +0000 (23:06 +0200)] 
condense parallel requests with the same hashes to one

It shouldn't be too common, but sometimes people have multiple mirrors
in the sources or otherwise repositories with the same content. Now that
we gracefully can handle multiple requests to the same URI, we can also
fold multiple requests with the same expected hashes into one. Note that
this isn't trying to find oppertunities for merging, but just merges if
it happens to encounter the oppertunity for it.

This is most obvious in the new testcase actually as it needs to delay
the action to give the acquire system enough time to figure out that
they can be merged.

9 years agoshow item ID in Hit, Ign and Err lines as well
David Kalnischkies [Mon, 15 Jun 2015 14:41:43 +0000 (16:41 +0200)] 
show item ID in Hit, Ign and Err lines as well

Again, consistency is the main sellingpoint here, but this way it is now
also easier to explain that some files move through different stages and
lines are printed for them hence multiple times: That is a bit hard to
believe if the number is changing all the time, but now that it keeps
consistent.

9 years agocall URIStart in cdrom and file method
David Kalnischkies [Mon, 15 Jun 2015 11:36:11 +0000 (13:36 +0200)] 
call URIStart in cdrom and file method

All other methods call it, so they should follow along even if the work
they do afterwards is hardly breathtaking and usually results in a
URIDone pretty soon, but the acquire system tells the individual item
about this via a virtual method call, so even through none of our
existing items contains any critical code in these, maybe one day they
might. Consistency at least once…

Which is also why this has a good sideeffect: file: and cdrom: requests
appear now in the 'apt-get update' output. Finally - it never made sense
to hide them for me. Okay, I guess it made before the new hit behavior,
but now that you can actually see the difference in an update it makes
sense to see if a file: repository changed or not as well.

9 years agodeal better with acquiring the same URI multiple times
David Kalnischkies [Mon, 15 Jun 2015 11:16:43 +0000 (13:16 +0200)] 
deal better with acquiring the same URI multiple times

This is an unlikely event for indexes and co, but it can happen quiet
easily e.g. for changelogs where you want to get the changelogs for
multiple binary package(version)s which happen to all be built from a
single source.

The interesting part is that the Acquire system actually detected this
already and set the item requesting the URI again to StatDone - expect
that this is hardly sufficient: an Item must be Complete=true as well
to be considered truely done and that is only the tip of the ::Done
handling iceberg. So instead of this StatDone hack we allow QItems to be
owned by multiple items and notify all owners about everything now,
so that for the point of each item they got it downloaded just for them.

9 years agoensure valid or remove destination file in file method
David Kalnischkies [Mon, 15 Jun 2015 10:51:22 +0000 (12:51 +0200)] 
ensure valid or remove destination file in file method

'file' isn't using the destination file per-se, but returns another name
via "Filename" header. It still should deal with destination files as
they could exist (pkgAcqFile e.g. creates links in that location) and
are potentially bogus.

9 years agoprovide a public interface for acquiring changelogs
David Kalnischkies [Sat, 13 Jun 2015 09:13:45 +0000 (11:13 +0200)] 
provide a public interface for acquiring changelogs

Provided is a specialized acquire item which given a version can figure
out the correct URI to try by itself and if not provides an error
message alongside with static methods to get just the URI it would try
to download if it should just be displayed or similar such.

The URI is constructed as follows:
Release files can provide an URI template in the "Changelogs" field,
otherwise we lookup a configuration item based on the "Label" or
"Origin" of the Release file to get a (hopefully known) default value
for now. This template should contain the string CHANGEPATH which is
replaced with the information about the version we want the changelog
for (e.g.  main/a/apt/apt_1.1). This middleway was choosen as this path
part was consistent over the three known implementations (+1 defunct),
while the rest of the URI varies widely between them.

The benefit of this construct is that it is now easy to get changelogs
for Debian packages on Ubuntu and vice versa – even at the moment where
the Changelogs field is present nowhere. Strictly better than what
apt-get had before as it would even fail to get changelogs from
security… Now it will notice that security identifies as Origin: Debian
and pick this setting (assuming again that no Changelogs field exists).
If on the other hand security would ship its changelogs in a different
location we could set it via the Label option overruling Origin.

Closes: 687147, 739854, 784027, 787190
9 years agohide Translation-* in 'apt-cache policy' output
David Kalnischkies [Fri, 12 Jun 2015 13:48:00 +0000 (15:48 +0200)] 
hide Translation-* in 'apt-cache policy' output

Translation-* files are internally handled as PackageFiles which isn't
super nice, but giving them their own struct is a bit overkill so let it
be for the moment. They always appeared in the policy output because of
this through and now that they are properly linked to a ReleaseFile they
even display all the pinning information on them, but they don't contain
any packages which could be pinned… No problem, but useless and
potentially confusing output.

Adding a 'NoPackages' flag which can be set on those files and be used
in applications seems like a simple way to fix this display issue.

9 years agopopulate the Architecture field for PackageFiles
David Kalnischkies [Fri, 12 Jun 2015 12:42:17 +0000 (14:42 +0200)] 
populate the Architecture field for PackageFiles

This is mainly visible in the policy, so that you can now pin by b= and
let it only effect Packages files of this architecture and hence the
packages coming from it (which do not need to be from this architecture,
but very likely are in a normal repository setup).

If you should pin by architecture in this way is a different question…

Closes: 687255
9 years agoimplement default apt-get file --release-info mode
David Kalnischkies [Fri, 12 Jun 2015 10:06:29 +0000 (12:06 +0200)] 
implement default apt-get file --release-info mode

Selecting targets based on the Release they belong to isn't to
unrealistic. In fact, it is assumed to be the most used case so it is
made the default especially as this allows to bundle another thing we
have to be careful with: Filenames and only showing targets we have
acquired.

Closes: 752702
9 years agostore Release files data in the Cache
David Kalnischkies [Fri, 12 Jun 2015 00:08:53 +0000 (02:08 +0200)] 
store Release files data in the Cache

We used to read the Release file for each Packages file and store the
data in the PackageFile struct even through potentially many Packages
(and Translation-*) files could use the same data. The point of the
exercise isn't the duplicated data through. Having the Release files as
first-class citizens in the Cache allows us to properly track their
state as well as allows us to use the information also for files which
aren't in the cache, but where we know to which Release file they
belong (Sources are an example for this).

This modifies the pkgCache structs, especially the PackagesFile struct
which depending on how libapt users access the data in these structs can
mean huge breakage or no visible change. As a single data point:
aptitude seems to be fine with this. Even if there is breakage it is
trivial to fix in a backportable way while avoiding breakage for
everyone would be a huge pain for us.

Note that not all PackageFile structs have a corresponding ReleaseFile.
In particular the dpkg/status file as well as *.deb files have not. As
these have only a Archive property need, the Component property takes
over this duty and the ReleaseFile remains zero. This is also the reason
why it isn't needed nor particularily recommended to change from
PackagesFile to ReleaseFile blindly. Sticking with the earlier is
usually the better option.

9 years agoimplement 'apt-get files' to access index targets
David Kalnischkies [Thu, 11 Jun 2015 14:40:45 +0000 (16:40 +0200)] 
implement 'apt-get files' to access index targets

Downloading additional files is only half the job. We still need a way
to allow external tools to know where the files are they requested for
download given that we don't want them to choose their own location.

'apt-get files' is our answer to this showing by default in a deb822
format information about each IndexTarget with the potential to filter
the records based on lines and an option to change the output format.

The command serves also as an example on how to get to this information
via libapt.