<feed xmlns='http://www.w3.org/2005/Atom'>
<title>apt/apt-pkg, branch 3.1.5</title>
<subtitle>Debians commandline package manager</subtitle>
<id>https://git.kalnischkies.de/apt/atom?h=3.1.5</id>
<link rel='self' href='https://git.kalnischkies.de/apt/atom?h=3.1.5'/>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/'/>
<updated>2025-08-26T11:52:57Z</updated>
<entry>
<title>edsp: Do not skip lines (fixes Architecture reading)</title>
<updated>2025-08-26T11:52:57Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-05-25T12:46:45Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=171c469927b1b7c5a4f81f113081985e7dc84597'/>
<id>urn:sha1:171c469927b1b7c5a4f81f113081985e7dc84597</id>
<content type='text'>
We skipped the Architecture: line because when the outer
loop got to it, the inner loop started and read the next
line after it.

Get rid of the nested loop instead, and first run a loop
to find the request line, and then a second loop to parse
the request flags.

An alternative would be to use a combined loop that
supports non-compliant protocol implementations, but
that's harder to read and we don't expect there to be
any especially on the request side.
</content>
</entry>
<entry>
<title>edsp: Clear architecture cache</title>
<updated>2025-08-26T11:52:57Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-05-25T12:16:53Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=82cc584ee916df6bc558559b62863b34b069a710'/>
<id>urn:sha1:82cc584ee916df6bc558559b62863b34b069a710</id>
<content type='text'>
We need to actually use the architecture values we set
</content>
</entry>
<entry>
<title>Fix indentation compiler warning with clang</title>
<updated>2025-08-26T11:51:04Z</updated>
<author>
<name>Biswapriyo Nath</name>
<email>nathbappai@gmail.com</email>
</author>
<published>2025-06-18T19:39:15Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=f3c5d176d6d0c91ff2cc80f12eed43a664d3d779'/>
<id>urn:sha1:f3c5d176d6d0c91ff2cc80f12eed43a664d3d779</id>
<content type='text'>
This commit fixes the following compiler warning.
cacheiterators.h:423:54: warning: misleading indentation;
statement is not part of the previous 'if' [-Wmisleading-indentation]
</content>
</entry>
<entry>
<title>debListParser: Cache `essential` and `myArch` more</title>
<updated>2025-08-26T11:49:18Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-07-24T20:08:52Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=6abcb32f7df63c64b88a4fef57d38e219d2b6b42'/>
<id>urn:sha1:6abcb32f7df63c64b88a4fef57d38e219d2b6b42</id>
<content type='text'>
Lookup these variables in the constructor once, rather than
once per package.

This requires a bit of care as debListParser::UsePackage()
defaults to "all" for essential when unset, hence we simply
change its == "all" comparisons to == "all" || .empty().#

This removes any per-paragraph configuration lookups
from the file parser.

Also parse myArch from ParseProvides down to ParseDepends()
as that call ended up causing it to query APT::Architecture
*again* since the function we call is static.

Together, the removed config lookups safe about 2.3% of
cache generation runtime.
</content>
</entry>
<entry>
<title>solver3: Allow any downloadable version to mark a package as not obsolete</title>
<updated>2025-08-26T11:41:35Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-07-22T18:34:34Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=539a3dfcfdf30e552a6374ee478a98e16ab7fa7d'/>
<id>urn:sha1:539a3dfcfdf30e552a6374ee478a98e16ab7fa7d</id>
<content type='text'>
Lots of people have pinned an older version that is no longer
installable, or more common yesterday, we saw a lot of people
who seemingly manually installed a newer version of a deb than
in the repositories, causing the package to be considered obsolete,
which does not make much sense.

Oops: 4c39d922-410f-11f0-bbf9-fa163ec44ecd
Oops: a64054f6-4140-11f0-bbfd-fa163ec44ecd
Oops: a32196c1-661d-11f0-a97c-fa163ec8ca8c
</content>
</entry>
<entry>
<title>solver3: Sort dependency targets against current alternative</title>
<updated>2025-08-26T11:41:35Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-07-22T17:58:14Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=db78e2f8eafb1009bd47e488fc39d8b420f4c749'/>
<id>urn:sha1:db78e2f8eafb1009bd47e488fc39d8b420f4c749</id>
<content type='text'>
Instead of inadvertently sorting dependency targets against
the first alternative in an or group, sort them against the
current alternative as we should.

Otherwise we ended up sorting

    gnome-shell | notification-daemon

With

    Package: notification-daemon

    Package: awesome
    Provides: notification-daemon

into

    gnome-shell | awesome | notification-daemon
                &lt;-we sorted this part wrongly-&gt;

This fixes a minor difference in test-release-candidate-switching
in one case, but not the other where the difference was actually
caused by the loss of install argument ordering information in
the new solver, so just flip the arguments so both solvers produce
the same outcome.
</content>
</entry>
<entry>
<title>Fix stuck acquire queues on partial server errors</title>
<updated>2025-06-24T16:47:18Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-06-24T14:52:06Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=5378c38db0a5dedef34fdf35e357f76c104d717a'/>
<id>urn:sha1:5378c38db0a5dedef34fdf35e357f76c104d717a</id>
<content type='text'>
When a server responds with two InRelease files, but one
is good, and the other indicates a temporary error, we
queued the other indices from the good repository for
downloading and then queued the retry.

The resulting queue ended up with items having fetchAfter=0
before the item with fetchAfter=&lt;something&gt;, causing the
Run() loop to not detect a stuck queue.

Change the order of the queue such that the highest retry-after
items comes first; this ensures that we always see stuck queues.

This of course changes the behavior of retries in that if one
file fails temporarily we block the entire server. This does
seem more beneficial in the common case - if one file fails,
probably all of them fail, and there's no point bombarding
the server with requests for indices from good repositories
until all have failed.

The actual root cause is more that the remaining items are
Enqueued like this:

1. Enqueue jammy/InRelease (delayed)
2. Enqueue jammy-updates/main all Packages

The resulting queue ended up being:

    jammy-updates/main all Packages
    jammy/InRelease (delayed)

But Enqueue() only calls Cycle() when there are no items in
the queue already - after all, any item that is already running
will call Cycle() eventually. Or so was the case until we added
the retry-after handling.

It's unclear why we don't Cycle() all the time when enqueuing
a new item, given that our pipeline might not be filled yet,
and we could send the request to the server while waiting for
data on a running item.

Trying to always Cycle() however led to regressions that still
need investigating. Given that, this solution certainly is the
more easy to reason about one.

LP: #2003851
</content>
</entry>
<entry>
<title>Include standard headers to fix clang compiler error</title>
<updated>2025-06-18T14:03:24Z</updated>
<author>
<name>Biswapriyo Nath</name>
<email>nathbappai@gmail.com</email>
</author>
<published>2025-06-18T14:03:19Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=06d0c12be00ee50c965830127f5812d2156681b1'/>
<id>urn:sha1:06d0c12be00ee50c965830127f5812d2156681b1</id>
<content type='text'>
This commit fixes the following compiler errors.
apt-pkg/acquire.cc:833:51: error: no template named 'function' in namespace 'std'
apt-pkg/contrib/error.cc:198:59: error: no member named 'front_inserter' in namespace 'std'
apt-pkg/solver3.h:44:22: error: no template named 'is_trivially_constructible_v' in namespace 'std'
methods/http.cc:1029:24: error: no member named 'inserter' in namespace 'std'
</content>
</entry>
<entry>
<title>solver3: Avoid FTBFS with g++ 14.2 on arm{el,hf}</title>
<updated>2025-06-10T18:51:09Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-06-10T18:51:09Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=d9b87e3e2b2615eb3be1e6a4413aa18384f04328'/>
<id>urn:sha1:d9b87e3e2b2615eb3be1e6a4413aa18384f04328</id>
<content type='text'>
With an explicit {} initialization, g++ 14.2 on armhf and armel
seems to generate the default constructor for the vector too early,
or in the first place, outside of solver3.cc where the constructor
is defined.

Without {}, this compiles again.

    In file included from /usr/include/c++/14/vector:66,
                     from /&lt;&lt;PKGBUILDDIR&gt;&gt;/obj-arm-linux-gnueabihf/include/apt-pkg/cachefilter.h:14:
    /usr/include/c++/14/bits/stl_vector.h: In instantiation of ‘constexpr std::_Vector_base&lt;_Tp, _Alloc&gt;::~_Vector_base() [with _Tp = APT::Solver::Work; _Alloc = std::allocator&lt;APT::Solver::Work&gt;]’:
    /usr/include/c++/14/bits/stl_vector.h:531:7:   required from here
      531 |       vector() = default;
          |       ^~~~~~
    /usr/include/c++/14/bits/stl_vector.h:369:49: error: invalid use of incomplete type ‘struct APT::Solver::Work’
      369 |                       _M_impl._M_end_of_storage - _M_impl._M_start);
          |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
    In file included from /&lt;&lt;PKGBUILDDIR&gt;&gt;/apt-pkg/edsp.cc:22:
    /&lt;&lt;PKGBUILDDIR&gt;&gt;/obj-arm-linux-gnueabihf/include/apt-pkg/solver3.h:87:11: note: forward declaration of ‘struct APT::Solver::Work’
       87 |    struct Work;
          |           ^~~~
    /usr/include/c++/14/bits/stl_vector.h: In instantiation of ‘constexpr std::_Vector_base&lt;_Tp, _Alloc&gt;::~_Vector_base() [with _Tp = APT::Solver::Solved; _Alloc = std::allocator&lt;APT::Solver::Solved&gt;]’:
    /usr/include/c++/14/bits/stl_vector.h:531:7:   required from here
      531 |       vector() = default;
          |       ^~~~~~
    /usr/include/c++/14/bits/stl_vector.h:369:49: error: invalid use of incomplete type ‘struct APT::Solver::Solved’
      369 |                       _M_impl._M_end_of_storage - _M_impl._M_start);
          |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
    /&lt;&lt;PKGBUILDDIR&gt;&gt;/obj-arm-linux-gnueabihf/include/apt-pkg/solver3.h:88:11: note: forward declaration of ‘struct APT::Solver::Solved’
       88 |    struct Solved;
          |           ^~~~~~
</content>
</entry>
<entry>
<title>Avoid cast alignment warning in cache string view</title>
<updated>2025-06-10T15:29:33Z</updated>
<author>
<name>Julian Andres Klode</name>
<email>jak@debian.org</email>
</author>
<published>2025-06-10T15:23:41Z</published>
<link rel='alternate' type='text/html' href='https://git.kalnischkies.de/apt/commit/?id=ed836aa73a87b9d60e81c607d5b4f57e9b82f948'/>
<id>urn:sha1:ed836aa73a87b9d60e81c607d5b4f57e9b82f948</id>
<content type='text'>
The cache allocates strings as

    uint16_t size;
    char content[];
    char zero;

Aligned to the uint16_t. When doing the casting, this causes a
warning on some architectures that cannot do unaligned loads, such
as armhf.

Use __builtin_assume_aligned() to explictly say that the pointer
is aligned to 16 bits. This is a bit of a backhanded approach,
as the warning seems to be actually avoided by the function
returning a void* rather than the assumed alignment, but this
is very much self-documenting.
</content>
</entry>
</feed>
