<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/apt-pkg, branch 3.2.0</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=3.2.0</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=3.2.0'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2026-03-02T21:53:49Z</updated>
<entry>
<title>Copyright changes</title>
<updated>2026-03-02T21:53:49Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-03-02T21:53:49Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=140e4e2f84813c85d96488031e6d3e0359f7b6d5'/>
<id>urn:sha1:140e4e2f84813c85d96488031e6d3e0359f7b6d5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Prevent sleep while running dpkg.</title>
<updated>2026-02-17T10:34:47Z</updated>
<author>
<name>Nathan Pratta Teodosio</name>
<email>nathan.teodosio@canonical.com</email>
</author>
<published>2026-02-17T09:42:13Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=c1607f538559a0b7a1d3f9dc01e88190e543053d'/>
<id>urn:sha1:c1607f538559a0b7a1d3f9dc01e88190e543053d</id>
<content type='text'>
As long as we are running dpkg, keep an inhibitor that
blocks us from sleeping.
</content>
</entry>
<entry>
<title>solver3: Upgrade by source package</title>
<updated>2026-02-17T09:28:17Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-17T09:28:17Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=9f3ecca2b32e4fe56a05811392e01416092f85fa'/>
<id>urn:sha1:9f3ecca2b32e4fe56a05811392e01416092f85fa</id>
<content type='text'>
Implement the "APT::Get::Upgrade-By-Source-Package" option as
the classic solver does.

Here this is equally straight forward now: We enqueue optional, but
eager, clauses of the form

    foo=2 -&gt; foo-data=2

for each sibling in the source version, assuming they are currently
installed, and the selection is not the current version.

This softly enforces upgrades of already installed siblings, but
in non-strict-pinning mode it will not affect the selection of
new packages to be installed.

A more complete solution to version selection by source package
also seems feasible, where we change the "priority" of versions
in the solver dynamically - currently they are statically evaluated.
Such that, when you select foo=2, and something installs foo-data,
foo-data would be installed in version 2 even if version 3 were its
candidate.
</content>
</entry>
<entry>
<title>solver3: Use constexpr and noexcept in most places</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-06T14:50:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=42dab6a46748ac80f0217212932b74af1af94017'/>
<id>urn:sha1:42dab6a46748ac80f0217212932b74af1af94017</id>
<content type='text'>
Aside from Clause, which initializes an std::vector
and an std::forward_list, which do not have constexpr
constructors in C++17, we can turn our inline functions
constexpr.

Using `constexpr` implies `inline`, so simplify that
accordingly where needed.

Adding noexcept to the function allows STL components
to utilize more optimized code paths.

Marking SameOrGroup as constexpr significantly improves
performance due to being in the hot path and it now being
inlined - removing branching by 10%.

iolveiolver
</content>
</entry>
<entry>
<title>pkgcache: Change inline to constexpr noexcept</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-09T10:40:49Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=2e4cc2aebecac327c758965667643d36a02889e5'/>
<id>urn:sha1:2e4cc2aebecac327c758965667643d36a02889e5</id>
<content type='text'>
In particular, map_pointer and iterators are now
all literal types, with most functions translated
to constexpr noexcept.

This allows them to be used in constexpr contexts
in C++17; and the compiler to generate better code
knowing they cannot throw exceptions.

This transformation is safe, because the functions
are inline.

more constexpr
</content>
</entry>
<entry>
<title>solver3: Cache straight pointers in candidate cache</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-09T10:42:26Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=a08f18e2a1b7e409d2d20d55749d378d4c21daa6'/>
<id>urn:sha1:a08f18e2a1b7e409d2d20d55749d378d4c21daa6</id>
<content type='text'>
This reduces its memory usage by half and turns it into a
fast map - no destructors needed (and 0 initialization).
</content>
</entry>
<entry>
<title>solver3: Mark DependencySolver as final</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-01T08:31:10Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=27e845d53da7e1794eadeb93f4b6f591042ad20c'/>
<id>urn:sha1:27e845d53da7e1794eadeb93f4b6f591042ad20c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>solver3: Minor style refactorings</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-02-01T08:25:31Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=8e1750a22ef8be521bdb0542a78438f8d8abc54e'/>
<id>urn:sha1:8e1750a22ef8be521bdb0542a78438f8d8abc54e</id>
<content type='text'>
The for loop with if(foo) continue; return false; was highly
unusual as were the bunch of uses of `!` instead of `not`.

Gbp-dch: ignore
</content>
</entry>
<entry>
<title>solver3: Avoid manual delete[] in favor of RAII</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-01-31T21:41:04Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=e7c1adda00abd16285f5eb53c48587855f2a2992'/>
<id>urn:sha1:e7c1adda00abd16285f5eb53c48587855f2a2992</id>
<content type='text'>
</content>
</entry>
<entry>
<title>solver3: Fix off-by-one missing optimization</title>
<updated>2026-02-10T19:59:03Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2026-01-31T21:33:40Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=7d84e1f830727ca5008566113e7dfd35df049bd6'/>
<id>urn:sha1:7d84e1f830727ca5008566113e7dfd35df049bd6</id>
<content type='text'>
We were trying to compare the dependencies in the first version
with the dependencies in later version, but our loop started
at the first version as well due to an oversight in the use
of the increment operator.

Change the increment from postfix to prefix such that we start
iterating with the 2nd version in the list only.

This should yield minute performance optimizations:

before:

    12:    17.80%     0.00%  apt      libapt-pkg.so.7.0.0  [.] EDSP::ResolveExternal(char const*, pkgDepCache&amp;, unsigned int, OpProgress*)
    14:             --17.80%--EDSP::ResolveExternal(char const*, pkgDepCache&amp;, unsigned int, OpProgress*)
    20:                       |          |          |--6.34%--APT::Solver::DependencySolver::RegisterCommonDependencies(pkgCache::PkgIterator)
    44:                       |          |                      --0.85%--APT::Solver::DependencySolver::RegisterCommonDependencies(pkgCache::PkgIterator)

after:

    12:    16.98%     0.00%  apt      libapt-pkg.so.7.0.0  [.] EDSP::ResolveExternal(char const*, pkgDepCache&amp;, unsigned int, OpProgress*)
    14:             --16.98%--EDSP::ResolveExternal(char const*, pkgDepCache&amp;, unsigned int, OpProgress*)
    20:                       |          |          |--5.65%--APT::Solver::DependencySolver::RegisterCommonDependencies(pkgCache::PkgIterator)
    42:                       |          |                      --0.70%--APT::Solver::DependencySolver::RegisterCommonDependencies(pkgCache::PkgIterator)
</content>
</entry>
</feed>
