| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Removal of std::to_string avoids the temporary std::string,
but it leads to locale-dependent output that parsers (including ours)
are not prepared to encounter especially as number formatting
can be highly ambiguous due to different rules surrounding '.' and ','.
In the distant future (c++20) this could be replaced with a variant of
std::format, which incidentally is also what std::to_string becomes
an alias for in an even more distant future (c++26).
Regression-of: 729a5c8f4fb8c841497d26170e1a47c41617ecd9
Reported-By: Stefan Lippers-Hollmann and Kel Modderman on IRC
|
| |
|
|
| |
Closes: #1098456
|
| |
|
|
| |
Closes: #1095976
|
| |\ |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We don't really care about solver progress messages in testing;
hide them when comparing output, and hide them better than before.
Previously testsuccessequal ... --solver 3.0 behaved differently
than tests run with globally forced on 3.0 solver.
Stop cleaning up autoremovals, but do clean up "Calculating upgrade"
as well.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Pushing the stack in push and popping it in pop did not
really work correctly and is more complex than needed.
Instead, push the error stack at the start of the Solve()
method and revert at the end, such that we leave exactly
at the same error stack level we entered.
To handle error clearing on backtracking, just discard any
pending errors.
|
| | |
| |
| |
| |
| | |
Implement the moving of the auto bit. The whole auto-bit management
is not entirely optimal yet, but this works.
|
| |/
|
|
|
| |
Deduplicate the copies in a central one, mark it unavailable to
external users.
|
| |
|
|
| |
Closes: #1096322
|
| |
|
|
| |
This makes the dump almost instant rather than take forever.
|
| | |
|
| |
|
|
|
| |
Some manual editing, as riscv64 and mips64el are not yet built
in exp2
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This is the first step that introduces a 1:1 mapping between version
and source version. In a future version this can use the fields
currently marked unavailable to deduplicate the SourceVersion
objects across the group.
The policy gains a member for storing pins for sourceversions.
Together, in the future we should be able to determine candidates
for source versions.
|
| |
|
|
|
| |
These templates are all inline and there is not much sense
exposing their vtables and typeinfo publicly.
|
| | |
|
| |
|
|
| |
Final ABI cleanup before unstable?!
|
| |
|
|
|
| |
main picked up a couple new ifdefs since the branch started; so
clean them up again.
|
| | |
|
| | |
|
| |
|
|
| |
constant string in .data
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
string{=> _view})
|
| |
|
|
| |
VectorizeString(), StringSplit(), SubstVar()
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
This involves the use of goto to fix undefined behavior in
the for-loop restart which temporarily generates a K pointing
one element ahead of the start of the array (which is undefined).
|
| |
|
|
| |
This makes it clear from reading that we are accessing an array.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Some bit of private refactoring to avoid having to pass
the raw pointer.
|
| | |
|
| | |
|
| |\
| |
| |
| |
| | |
Get 3.0 solver mostly in shape
See merge request apt-team/apt!451
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
So far we only stored the last reason why something was decided,
for example, if "A depends B | C" and we assigned B=false, C=false,
we'd store "(not) C" as the reason for "(not) A".
This gives us only a partial implication graph; after all "C" was
not the *sole* reason for not installing A. This has two implications:
1. We cannot do conflict-driven clause learning
2. We cannot print excellent information about why packages cannot be
installed (or removed)
This commit is incomplete in addressing both; in particular, we always
store a clause as a reason for something that is not a root object;
whereas MiniSAT would only store a clause on propagation. That is,
if A depends B | C, and we install A, then we have to make a choice
between B|C. Let's say we pick B, we store 'A depends B|C' as the
reason whereas MiniSAT would not store a reason (because it picked
the "next best" unassigned literal).
Hopefully this is not going to be an issue. The reason is used to
calculate the assignments that caused the decision in MiniSAT, but
the idea is that we can just treat reason clauses with unassigned
values as "no reason".
The conflict explanation (WhyStr) has been changed to print the
strongest reason; which produces the same result as the previous
solution for the test suite. What does this mean?
If we look at A depends B|C, let's analyse:
Why not A?
We return the first assigned value for B|C, likely B.
We might have returned C here before as it was the
last assignment, but we might also return C here,
if B is not assigned.
Why B? We return A.
If we look at A conflicts B:
Why not A? Well B
Why not B? Well A
Thanks to the structure of the implication graph this is quite
simple, but also generalizing this to the CNF format should not
be hard.
A future version will extend clauses with backlinks to
pkgCache::Dependency*, allowing us to print useful information
to uses such as "A Depends B | C | D (>= 2)" in the real form, rather
than the expanded form which may be "A -> B | C | D=3 | D=2".
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Dependencies shared by all versions are enqueued at the package
level, so avoid enqueuing duplicates at the version level. This
presumably has no meaningful impact on performance, potentially
a negative performance impact on some workloads as we now need
to find the duplicates again; it can become useful when there
is a lot of backtracking.
More importantly though this improves error messages, because
now we can say that "all versions of foo depend on X", rather
than saying "foo=1 depends on X" and you are left wondering
why we did not select "foo=2".
In this commit though, improved error messages are not implemented,
they depend on redesigning the reason tracking to use clauses.
Also the rationale tracking includes a lot more dependencies of
the form "pkg:arch=version -> pkg:arch" which are annoying. Improved
error messages should fold them into one node.
|