aboutsummaryrefslogtreecommitdiffstats
path: root/src/solver.c
Commit message (Collapse)AuthorAgeFilesLines
...
* solver: remove backjumping by nameTimo Teräs2013-01-281-28/+3
| | | | | | It is incorrect optimization causing valid solutions to be skipped. Any performance it might've gained, should be fixed by reintroduction of the minimum penalty logic added in previous commit.
* solver: reintroduce minimum penalty logicTimo Teräs2013-01-281-49/+55
| | | | Basic per-name per-package specific scoring added.
* solver: do not backtrack over "exclude none"Timo Teräs2013-01-221-1/+8
| | | | | Otherwise we can return no solution at all instead of partially satisfied solution (and give proper error message).
* solver: simplify strength evaluation in constraint handlingTimo Teräs2013-01-211-20/+8
|
* solver: check if solution is not found at allTimo Teräs2013-01-211-0/+6
| | | | This is an internal error.
* solver: fix reset of last_touched to zeroTimo Teräs2013-01-181-2/+2
|
* solver: some code clean upsTimo Teräs2013-01-181-5/+5
|
* solver: build fix for debug print on x86_64Natanael Copa2013-01-181-1/+1
| | | | use %zu for size_t
* solver: fix name assignment logic to not mess up internal stateTimo Teräs2013-01-181-11/+10
| | | | | Should get rid of error messages like: ERROR: Saved_score {4/0/0,74} != score {6/0/0,74}
* solver: fix package prefence calculation a bitTimo Teräs2012-11-041-1/+3
|
* solver: additional backjumping schemeTimo Teräs2012-10-081-11/+48
| | | | | | Enabled when all attempts to satisfy a name failed, we know that we can ignore all decisions until we find a decision affecting the name we wanted to satisfy.
* solver: optimize backjumpingTimo Teräs2012-10-081-7/+7
| | | | to be functional when backtracking
* solver: properly calculate decision "strength" with providesTimo Teräs2012-10-081-17/+13
|
* solver: fix back jumping once moreTimo Teräs2012-10-051-17/+33
|
* solver: record dependency apk_name in apk_decisionTimo Teräs2012-10-051-51/+19
| | | | | | | We can't just use the primary name, as that would mess up backtracking. We need to record the name which caused the name to get considered - that way the right last_touched_decision is used on backtracking.
* solver: various fixesTimo Teräs2012-10-031-14/+58
| | | | | | | | | | | | | * push_decision expects to always get the package primary 'name' as apk_name. ASSERT that and fix problem cases. (though - this might need to be reverted, and store the non primary name in apk_decision instead to accomodate for better backtracking optimizations) * fix error reporting of virtual package names * make 'assign_name' errors soft. the incorrect packages just are no longer consider instead of aborting whole calculation. * fix backtracking of virtual packages that are not depended directly
* solver: improve assert error messagesNatanael Copa2012-10-031-2/+3
| | | | Print name of package and void double "ERROR"
* solver: fix compile with -Werror on 64bitNatanael Copa2012-10-031-1/+1
|
* apk: implement --progress-fd to write progress to a specified fdTimo Teräs2012-09-201-17/+27
|
* solver: fix install_if triggers on cyclic and early depsTimo Teräs2012-04-271-11/+15
|
* solver: fix backtracking with install_if dependenciesTimo Teräs2012-04-271-17/+20
|
* solver: fix a type from previous commitTimo Teräs2012-03-311-1/+1
|
* solver: fix installation of non-repository packagesTimo Teräs2012-03-311-1/+2
|
* solver: properly set allowed flag for installed packagesTimo Teräs2012-03-011-3/+6
|
* solver: rename some fieldsTimo Teräs2012-02-291-24/+25
|
* solver: merge apk_name_state to apk_nameTimo Teräs2012-02-291-223/+136
| | | | | | | apk_name_state is now quite small; and we avoid overhead of two pointers (+ malloc overhead) when we just make it part of apk_name. It also fixes some problems (that got introduced) where apk_name_state was not allocated.
* solver, test: make conflicts unconditionalTimo Teräs2012-02-291-13/+36
| | | | | | | Solver will now never report partial solution where a conflict constraint is not satisfied. The is because with --force we might install the partial solution; and if conflicted packages were to be installed we might have extra trouble.
* solver: ask confirmation in interactive mode only if there's changesTimo Teräs2012-02-281-1/+2
|
* solver: do not consider non-allowed packages in main loopTimo Teräs2012-02-281-43/+32
| | | | | Instead cache the allowed pinning decision, and use it. Update install decision heuristic to also use this cached information.
* solver: consider provided names also for preferenceTimo Teräs2012-02-281-2/+13
| | | | ref #574
* solver: fix conflicting provides detectionTimo Teräs2012-02-281-2/+15
| | | | ref #574
* solver: allow multiple packages with same virtual providesTimo Teräs2012-02-281-8/+14
| | | | ref #574
* solver, test: implements more provides things, add testsTimo Teräs2012-02-271-30/+92
| | | | ref #574
* solver: have most inherited things per-package and clean upsTimo Teräs2012-02-271-156/+168
| | | | | | Required for provides support as package might be pulled in via non-primary package name. This allows relatively easily to pass through inherited flags via the provided names. ref #574.
* solver: remove minimum penalty logicTimo Teräs2012-02-271-49/+7
| | | | | | | | | Reasoning: - it is less useful now that we do not do common dependency merging - provides support would make the required logic overly complicated - callgrind reports that depending on the case it can improve or decrease performance (the overhead pays off only in some cases); the difference is not large either way
* solver, dot: elementary provides fixesTimo Teräs2012-02-241-21/+57
| | | | | | implementation is still not near finished, but now at least it can handle it to a minimum degree. many cases are not done right yet, though. ref #574.
* all: introduce apk_provides and use it in apk_nameTimo Teräs2012-02-241-73/+79
| | | | | | | in preparation for provides support. implements also some dependency satisfaction helper routines. ref #574.
* solver: unallowed pinning is worse than changing installed packageTimo Teräs2012-02-241-10/+7
|
* solver: non preferred actions are worse then non preferred pinningTimo Teräs2012-02-241-6/+16
| | | | | | | | Otherwise we might start to change packages unexpectedly when not upgrading. This also fixes some other things the solver might've decided to do. Add also few test cases to detect bad behaviour.
* test: improve pinning testsTimo Teräs2012-02-241-1/+4
|
* solver: fix output of broken dependenciesTimo Teräs2012-02-231-1/+1
|
* solver: report size difference in kibi- or mebibytesTimo Teräs2012-02-231-5/+11
|
* solver: lock early names that have only single option leftTimo Teräs2012-02-221-3/+13
| | | | care is needed to get the score right.
* solver: lazily update name state in main loopTimo Teräs2012-02-221-171/+125
|
* solver: handle fix/reinstall betterTimo Teräs2012-02-221-30/+36
| | | | | | | | | | In case someone did "fix --force" for package for which we have no APK available, we would uninstall the package instead of silently ignoring the request. This could mean worse things. So now we just consider unavailable packages a bad deal for reinstall requests. And will downgrade if necessary. But if we really don't have any APK available, we just skip the request but report it.
* solver: transitive dependency requiringTimo Teräs2012-02-221-12/+41
| | | | | | | | | | | If n+1 packages depend A, and A depend on B. Add n+1 dependencies to B. Otherwise if someone conflicts B, B might be left out. Leaving package unassigned is no longer a non-preferred action, this fixes the final test case that was failing. And with --force we might even install that scenario. Add also some debug checks.
* solver: remove dependency merging; it's not worth itTimo Teräs2012-02-221-77/+4
| | | | | | callgrind says it's more overhead than improvement. back jumping effectively prunes all bad trees. but can be added later if it becomes needed; due to e.g. provides support.
* db, solver, io: scan cache items at startupTimo Teräs2012-02-221-42/+36
| | | | | | It is faster to just scan the cache directory for existing packages at startup than trying to faccessat() them on demand. It also makes quite a few parts of the code more readable and simpler.
* solver: make apk_score a 64-bit int for speedTimo Teräs2012-02-211-9/+49
|
* solver: remove unneeded flagTimo Teräs2012-02-211-4/+1
|