Nils Adermann
6b2edeae56
Fix solver problem exceptions with unexpected contradictory "Conclusions"
...
This 5 character fix comes with a solver test as well as a functional
installer test essentially verifying the same thing. The solver test is
more useful when working on the solver. But the functional test is less
likely to be accidentally modified incorrectly during refactoring, as
every single package, version and link in the rather complex test
scenario is essential, and a modified version of the test may very well
still result in a successful installation but no longer verify the bug
described below.
Background:
In commit 451bab1c2c
from May 19, 2012 I
refactored literals from complex objects into pure integers to reduce
memory consumption. The absolute value of an integer literal is the id
of the package it refers to in the package pool. The sign indicates
whether the package should be installed (positive) or removed (negative),
So a major part of the refactoring was swapping this call:
$literal->getPackageId()
For this:
abs($literal)
Unintentionally in line 554/523 I incorrectly applied this change to the
line:
$this->literalFromId(-$literal->getPackageId());
It was converted to:
-abs($literal);
The function literalFromId used to create a new literal object. By using
the abs() function this change essentially forces the resulting literal
to be negative, while the minus sign previously inverted the literal, so
positive into negative and vice versa.
This particular line is in a function meant to analyze a conflicting
decision during dependency resolution and to draw a conclusion from it,
then revert the state of the solver to an earlier position, and attempt
to solve the rest of the rules again with this new "learned" conclusion.
Because of this bug these conclusions could only ever occur in the
negative, e.g. "don't install package X". This is by far the most likely
scenario when the solver reaches this particular line, but there are
exceptions.
If you experienced a solver problem description that contained a
statement like "Conclusion: don't install vendor/package 1.2.3" which
directly contradicted other statements listed as part of the problem,
this could likely have been the cause.
2019-02-03 16:33:55 +01:00
Jordi Boggiano
2e0f31106a
Merge remote-tracking branch 'origin/master' into 2.0
2018-11-12 16:01:07 +01:00
Gabriel Caruso
2a13bb2649
Fixes from PHPStan ( #7687 )
...
* fix docblocks
* remove redundant conditional
* fix wrong variable name
* fix wrong namespaces
* add missing private members
* remove unused/redundant arguments
* move testcase class
* exclude TestCase.php
* Tweak RuleWatchGraph type hints
* Tweak doc comment
2018-11-12 15:23:32 +01:00
Nils Adermann
81bb8f81ad
Set all package ids only once the pool is created
...
They all get set in one place only and at a specific time when nothing
else will possibly change them anymore
2018-09-12 14:31:40 +02:00
Nils Adermann
c0f19f6c57
Move construction of pool from repo set into a pool builder
...
Pool construction depends on the install request now, so only required
packages get loaded, add some structure for future asynchronously
loading composer repositories
2018-09-12 11:49:09 +02:00
Nils Adermann
b6e2d60c9e
Create the pool in the installer before giving it to the solver
2018-09-11 15:49:08 +02:00
Nils Adermann
1228bcdffc
Internalize pool creation in repository set, store root aliases in set
...
The pool is still exposed too early in a few places which will require
further refactoring
2018-09-11 13:34:18 +02:00
Nils Adermann
6ef65e5319
Add a new RepositorySet class and restrict pool usage to the solver
...
Breaking change for the plugin interface so bumping the version of
composer-plugin-api to 2.0.0
First step for a refactoring of the package metadata loading mechanism
2018-09-10 15:27:54 +02:00
Jordi Boggiano
ff59bbdab0
CS fixer
2018-07-24 14:32:52 +02:00
Gabriel Caruso
3d262bd637
Fixes from PHPStan level 0
...
More fixes from PHPStan level 0
2018-01-14 11:44:15 -02:00
Gabriel Caruso
afc9a7643e
Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase
2017-11-30 13:44:43 -02:00
Gabriel Caruso
a4b220273e
Refactoring Tests ( #6849 )
2017-11-30 15:58:10 +01:00
Nils Adermann
7dffe79a0f
Update tests of solver problem message to match new message
2017-11-16 12:41:41 +01:00
Jordi Boggiano
122e422682
CS fixes
2017-03-08 15:16:44 +01:00
rubenrua
4e1887a721
Improve memory usage resolving dependencies
...
It is known that composer update takes a lot of memory: #5915 , #5902 ,
I am playing with a profiler (@blackfireio) to make a demo in my local
PHP meetup (@phpvigo) and I found out a way to use less memory. These
are my first tests:
* Private project using PHP 5.6:
* Memory: from 1.31GB to 1.07GB
* Wall Time: from 2min 8s to 1min 33s
* symfony-demo using PHP 7.1 in my old mac book:
* Memory: from 667MB to 523MB
* Wall Time: from 5min 29s to 5min 28s
Not use an array inside conflict rules is this improvement main idea:
```php
<?php
//Memory 38MB
gc_collect_cycles();
gc_disable();
class Rule
{
public $literals;
public function __construct(array $literals)
{
$this->literals = $literals;
}
}
$rules = array();
$i = 0;
while ($i<80000){ //
$i++;
$array = array(-$i, $i);
$rule = new Rule($array);
$rules[] = $rule;
}
```
```php
<?php
//Memory 11.1MB
gc_collect_cycles();
gc_disable();
class Rule2Literals
{
public $literal1;
public $literal2;
public function __construct($literal1, $literal2)
{
$this->literal1 = $literal1;
$this->literal2 = $literal2;
}
}
$rules = array();
$i = 0;
while ($i<80000){ //
$i++;
$rule = new ConflictRule(-$i, $i);
$rules[] = $rule;
}
```
More info https://github.com/composer/composer/pull/6168
2017-02-20 18:52:17 +00:00
Jordi Boggiano
4cd6eabdba
Merge branch '1.2'
2016-10-08 11:27:52 +02:00
Yanick Witschi
4a769a785c
Reduce calls on Rule::getHash()
2016-09-30 17:25:41 +02:00
Rob Bast
9cbcda9ae6
add test that asserts pool priority matters
...
also switch assertEquals for assertSame
2016-09-28 09:34:08 +02:00
Jordi Boggiano
1bd9c8da3c
More ruletest fixes for 7.1
2016-04-01 11:58:42 +01:00
Jordi Boggiano
c74e6df65d
Fix strings being passed to an int arg, fixes 7.1 build
2016-04-01 11:52:19 +01:00
David Prévot
933a8e1d09
Fix method name
...
It makes the test fail with recent (>= 3.1) phpunit-mock-objects
version.
2016-03-28 23:37:19 -04:00
Niels Keurentjes
8e78ce9a43
Add extra logging before and after SAT solving
2016-03-24 23:19:40 +01:00
Jefferson Carpenter
b7845bb6c0
Update SolverTest.php
2016-01-28 20:13:44 -06:00
Rob Bast
b523fc0b7b
ran fixers
2015-10-13 11:35:51 +02:00
Jordi Boggiano
ce08582671
Fix CS
2015-09-28 10:53:24 +01:00
Rob Bast
a1427d7fd6
replace all occurences in code and comments
2015-09-24 16:32:36 +02:00
Nils Adermann
6e81f63635
Reduce memory footprint of rules by storing data in blob
...
Not declaring the job property saves significant amounts of memory as
most rules leave it as null
2015-07-09 17:23:45 +02:00
Nils Adermann
b869fa9662
Correct rule hash test
2015-07-08 19:36:13 +02:00
Possum
2e99b9fdf5
Use https where possible
2015-05-04 19:37:57 +02:00
Nils Adermann
b4ed331168
The Solver Request no longer depends on the Pool
2015-04-30 17:24:24 +02:00
isoroku
e0657b60a2
Fix misspellings
2015-03-20 14:23:24 +00:00
Nicolas Grekas
4a0feb0189
add --prefer-lowest-stable to update command
2014-12-13 11:51:30 +01:00
Nils Adermann
26598c4a9a
Remove unnecessary pool reference from rules
2014-12-01 19:02:50 +01:00
Nils Adermann
d77400ade2
Make ruleById lookup table in rule set public
...
Saves about 500k function calls on a packagist update
2014-12-01 18:28:45 +01:00
Jordi Boggiano
94926218e8
CS fixes
2014-10-17 18:57:27 +01:00
Jordi Boggiano
ec0463a400
Add tests for platform packages required by root and avoid creating rules altogether instead of disabling them, refs #3320
2014-10-17 15:30:27 +01:00
Nils Adermann
5b80144ad0
Resolve job packages after whitelist generation
2014-02-21 13:41:21 +01:00
Nils Adermann
3148ffd355
Whitelist packages with names matching those specified before generating rules
...
Addresses #2690 doesn't do any performance optimisations yet which we
could do now
2014-02-21 12:25:15 +01:00
Jordi Boggiano
38917c2047
Add parallel build to travis script
2013-09-25 10:23:48 +02:00
Jordi Boggiano
051d219438
Fix whatProvides returning too many results when no constraint is given
2013-08-12 18:37:34 +02:00
Jordi Boggiano
e848c76cbc
Only compare branches as versions in the policy to sort packages, but not in the solver, fixes #1817
2013-05-23 18:12:54 +02:00
Jordi Boggiano
cc9dac8fe2
Fix tests and convert all package lists to Name[Versions] format
2013-04-27 00:31:22 +02:00
Robert Gruendler
5160dd2f5e
Return different error code for SolverProblemsException
...
To make it easier for external tools to detect SolverProblems and react
to them accordingly,
this PR introduces a new exit code.
2013-04-25 14:37:47 +02:00
Jordi Boggiano
b41fd35c2b
Remove unused use statement
2013-04-17 18:38:05 +02:00
Jordi Boggiano
0700cd9186
Adjust according to feedback
2013-04-17 17:37:22 +02:00
Jordi Boggiano
db4055b778
Put a higher prio on replacers of the same vendor as the required package
2013-04-17 15:39:42 +02:00
Jordi Boggiano
b0297ef67a
Add prefer-stable flag to pick stable package over unstable ones when possible
2013-04-02 18:40:42 +02:00
Jordi Boggiano
3ca22f9ef1
Fix class name
2013-02-20 15:27:11 +01:00
Jordi Boggiano
1c39ad779b
Fix wording
2012-10-31 18:34:27 +01:00
Jordi Boggiano
5d78fa6ce6
Report typos in package name if no version matches
2012-10-31 18:20:54 +01:00
Jordi Boggiano
beb9a5bd72
Code optimizations: avoid loops in match()
2012-10-14 16:35:32 +02:00
Jordi Boggiano
18492a1f84
Remove Pool::getMaxId and the solver's reliance on it
2012-10-12 18:45:41 +02:00
Jordi Boggiano
fb4183d5ad
Fix tests
2012-10-08 20:05:42 +02:00
Jordi Boggiano
d4aab7d5b6
Fix solver test
2012-07-11 19:37:02 +02:00
Jordi Boggiano
6573fd3f77
Add hint in solver exceptions as to what may be wrong
2012-07-04 15:57:51 +02:00
Jordi Boggiano
175d1939b5
Fix tests
2012-07-04 14:28:15 +02:00
Jordi Boggiano
e6f7150196
Change default minimum-stability to "stable", fixes #744
2012-07-04 14:22:09 +02:00
Jordi Boggiano
4fcc114f97
Merge pull request #808 from palex-fpt/not-equal-operator
...
Add '<>' operator to Version Parser
2012-06-22 07:00:18 -07:00
Nils Adermann
cc7632489d
Make problem report messages more readable
...
Added pretty strings to constraints
2012-06-20 19:06:36 +02:00
Alexey Prilipko
e130386612
Add '<>' operator for Version Parser
2012-06-19 12:11:11 +11:00
Grégoire Pineau
f4e9dd4fb8
Fixed PSR rules
2012-06-14 12:10:01 +02:00
Nils Adermann
a08c2a0b9f
Corrected altered error message in test
2012-06-07 11:07:09 +02:00
Nils Adermann
67fde90666
Correctly sort operations within transactions using DFS
...
Fixes #655
2012-06-05 01:06:35 +02:00
Nils Adermann
a7f1605cdf
Add test for correct sorting when force installing deps
2012-06-04 23:30:55 +02:00
Nils Adermann
26e051cb76
Decisions are now encapsulated in a separate object
2012-06-04 23:19:32 +02:00
Nils Adermann
c869566868
Make ruleHash a protected member of rules
2012-05-20 15:57:38 +02:00
Nils Adermann
dd527a4049
Remove weak rules
...
Since we no longer have suggest/recommend rules and no longer use any update
or feature rules so packages are removed by default, we do not need weak rules
anymore.
2012-05-19 21:49:48 +02:00
Nils Adermann
451bab1c2c
Get rid of Literal object / literal id mix, use literals only to save memory
2012-05-19 20:38:56 +02:00
Jordi Boggiano
453b9a616b
Add test for Pool handling and refactor a couple things
2012-05-11 17:21:02 +02:00
Nils Adermann
0c1944a9d0
Let the solver handle aliases instead of the installer
2012-05-09 15:15:39 +02:00
Nils Adermann
15f43571b9
Rules of type feature are no longer needed
2012-05-08 19:26:50 +02:00
Nils Adermann
c37e126e14
Installed packages are now always removed unless otherwise requested
...
This means that an update request must always be accompanied by an install
request, otherwise the package might be removed rather than updated.
2012-05-08 19:25:58 +02:00
Nils Adermann
5daeacf0ac
We won't implement choice rules, you need to edit composer.json to choose
2012-05-08 19:25:38 +02:00
Jordi Boggiano
f7440076fa
Revert "Merge remote-tracking branch 'naderman/remove-packages-by-default'"
...
This reverts commit 2988152602
, reversing
changes made to adb4188e12
.
2012-04-29 22:21:58 +02:00
Nils Adermann
f4d5568937
Rules of type feature are no longer needed
2012-04-27 18:28:51 +02:00
Nils Adermann
2cb2cde096
Installed packages are now always removed unless otherwise requested
...
This means that an update request must always be accompanied by an install
request, otherwise the package might be removed rather than updated.
2012-04-27 18:13:37 +02:00
Nils Adermann
0e537b9c93
We won't implement choice rules, you need to edit composer.json to choose
2012-04-27 17:46:13 +02:00
Jordi Boggiano
06fb1b8083
Fix priority of aliases when mixing root package aliases with branch-alias ones, fixes #576
2012-04-20 22:10:58 +02:00
Nils Adermann
a16aa68c1d
Rule literals are sorted, so first literal added is not first retrieved
...
Fixes #477
2012-04-01 22:26:44 +02:00
Nils Adermann
2c87fe5a22
Collect solver problems in Problem objects with human readable output.
2012-03-18 20:41:10 +01:00
Martin Hasoň
2b08df5192
Changed repository priority in the pool
2012-03-06 11:17:23 +01:00
Nils Adermann
f3ff53b17c
Create problems directly, rather than generating impossible rules
2012-02-20 12:58:27 +01:00
Nils Adermann
dd443cd570
Complete circular dependency with alternatives through virtual packages test
2012-02-19 20:08:15 +01:00
Nils Adermann
3e1749fbad
Readd update-all jobs and make them available through the request
2012-02-19 16:59:04 +01:00
Nils Adermann
9b8e62396c
Merge pull request #324 from edorian/installNonExistingPackage
...
Create an 'impossible rule' when installing non existent packages
2012-02-19 07:05:21 -08:00
Nils Adermann
3b06a22e69
Add getVersionConstraint test case to avoid version normalization issues
2012-02-19 15:58:19 +01:00
Volker Dusch
f304a0f129
Clean up the incomplete marker like suggested in https://github.com/composer/composer/pull/324#r465391
2012-02-19 15:38:03 +01:00
Nils Adermann
1ee5d99405
When changing watched literals of a rule, update the parent's next pointer
...
The previous rule was not previously updated to point to the next rule when
removing a middle rule from the watch tree for a literal. This resulted in
jumping from one literal's watch tree to another's, which could then jump
back to the original and cause infinite loop in a case like #265 .
Fixes #265
2012-02-19 15:35:13 +01:00
Volker Dusch
e20a79ac61
Fix TODO tags to confirm with the projects standard
2012-02-19 15:30:53 +01:00
Volker Dusch
eafe13d5a5
Create an impossible rule when trying to install something that doesn't exist.
...
The rule isn't acted upon yet (hence the incomplete test) but it is there as a reminder that this case needs to be handled.
2012-02-19 14:55:14 +01:00
Nils Adermann
e6143d1584
Add todos to explain why try/catch is inside the test
2012-02-19 00:21:39 +01:00
Nils Adermann
52d876e11e
Add SolverProblemsException and test basic solver failures
2012-02-19 00:15:23 +01:00
Volker Dusch
3fb75faa75
Now that no more update rules are created the code that handles them can be removed too.
...
Also adapted the tests that used TYPE_UPDATE exemplarily to use TYPE_FEATURE.
2012-02-18 19:19:49 +01:00
Volker Dusch
a8b2db64d5
Expaned the update tests to make sure a) Only requested updates execute and b) Installed repos with no actions get pruned from the jobqueue
2012-02-18 16:55:45 +01:00
Nils Adermann
8aa0127de8
Remove test of undefined behaviour for unknown types in rulesets
2012-02-18 13:09:19 +01:00
Nils Adermann
7609f27052
Merge branch 'add-tests' of https://github.com/l3l0/composer into new-master
...
* 'add-tests' of https://github.com/l3l0/composer :
Made fixes after review.
Made changes which fied warnings and errors in tests.
Fixed tests after update and merge of changes from upstream/master
Fixed code. Changes improved code testability
Added and extended some unit tests
2012-02-18 13:08:20 +01:00
Nils Adermann
460822fb96
Fix indentation of doc comment
2012-02-18 12:37:45 +01:00
Nils Adermann
3b54316e91
Add a test for the off by one error in solver conflict resolution
2012-02-18 12:33:55 +01:00
Leszek Prabucki
f59ca1e2f8
Made fixes after review.
2012-01-24 18:48:42 +01:00
Leszek Prabucki
de7f666118
Added and extended some unit tests
2012-01-24 18:44:54 +01:00
Jordi Boggiano
098ba8e583
Add test
2012-01-15 14:15:53 +01:00
Jordi Boggiano
8cfbf9e198
Fix update, fixes #125
2011-12-24 14:15:10 +01:00
Nils Adermann
a0faa4f69f
Add a test for the complex conflict resolution fixed in #118
2011-11-25 23:35:58 +01:00
Jordi Boggiano
8e6f8ae57e
Add prettyVersion to packages, fixes #76
2011-11-20 15:06:12 +01:00
Nils Adermann
4140f08d9c
Use a map of installed package ids in the solver
...
The assumption package.repo == installed no longer holds for installed
packages because there are multiple wrapped installed repositories.
2011-11-19 00:27:35 +01:00
Nils Adermann
e16c3f0626
Remove useless test, packages providing different versions aren't alternatives
2011-10-22 17:26:42 +02:00
Nils Adermann
0801d8ed31
Enable solver test regarding replaced packages after policy fix
2011-10-22 17:23:23 +02:00
Nils Adermann
571c14adf9
Prefer original packages over replaced packages of same repository priority
2011-10-22 17:20:45 +02:00
Nils Adermann
1b6f57e651
Correctly implement priorities and version numbers in the default policy
2011-10-22 16:44:10 +02:00
Nils Adermann
55d5e55195
DefaultPolicy test: pick package providing newest virtual package version
2011-10-21 15:22:47 +02:00
Nils Adermann
0c30610fdc
Complete the policy tests with provider and replacement tests
2011-10-21 14:58:31 +02:00
Nils Adermann
e4c94dd415
Adding tests for the default policy specifying its desired behaviour
2011-10-21 14:44:24 +02:00
Jordi Boggiano
40cc5fea1d
Add a few solver tests regarding "replace"
2011-10-15 20:04:29 +02:00
Nils Adermann
30f6c05069
Add test for choices in circular requirements and delete packagist based test
2011-09-25 23:50:54 +02:00
Nils Adermann
85f88de59d
Add a solver test for provided virtual packages and circular dependencies
2011-09-25 23:46:24 +02:00
everzet
123f5fef77
Refactored Operations in order to fulfill naderman requests
2011-09-25 14:40:12 +03:00
Jordi Boggiano
6d667a849e
Remove broken functional test
2011-09-24 17:00:18 +02:00
everzet
0a1e7320b0
Refactored solver result array. Now it returns array of operation objects which are much nicer to work with
2011-09-24 02:29:22 +03:00
Nils Adermann
b1d16a88b7
Test a replace link with a null constraint between packages
2011-08-21 07:08:34 -04:00
Nils Adermann
69ebbf0eac
Correct handling of rules with more than 2 literals.
2011-08-21 06:30:06 -04:00
Nils Adermann
db18e1b560
Add a few proper tests for literals, all tests passing now
2011-08-20 23:15:12 -04:00
Nils Adermann
ac61c3973b
Add a test for two equivalent installable packages and fix the functional test
2011-08-20 23:05:11 -04:00
Nils Adermann
0f6fb9b692
Separate transaction generation from solving and properly identify updates
2011-08-20 18:38:31 -04:00
Nils Adermann
f46aa495da
Turn obsolete relationships and replaced packages into conflict rules
2011-08-20 18:19:47 -04:00
Nils Adermann
ad25618bdd
Add install job and update rule conflict handling and reenable installation
2011-08-19 06:15:51 -04:00
Nils Adermann
1125de6bf2
Added disablePolicyRules to solve conflicts between remove jobs & update rules
...
This temporarily breaks installation of packages
2011-08-19 06:06:00 -04:00
Nils Adermann
01945c20f9
Simplify testSolverWithComposerRepo reusing utility methods from other tests
2011-08-05 04:17:07 -04:00
Nils Adermann
172c8b908e
Split the large solver test up into individual units testing smaller parts
2011-08-05 04:14:11 -04:00
Jordi Boggiano
b277b8e73c
Add failing test with composer repo
2011-07-21 13:42:47 +02:00
Jordi Boggiano
2d1f8fbe70
LiteralTest is incomplete
2011-07-21 12:16:24 +02:00
Nils Adermann
825deff09f
Completed analysis of unsolvable situations and main decision process
2011-07-08 07:11:04 -04:00
Nils Adermann
bc672deb32
Moving rule iteration logic to a separate RuleSet and RuleSetIterator class
2011-06-27 00:11:57 +02:00
Nils Adermann
498125adbe
Assertions are now properly decided before running the main solver.
...
Updating does not work yet. The test case works fine for installing/removing
the correct packages however. Weak (update/feature) rules are entirely ignored
so far.
Watches are on literal ids rather than literals to save on function calls
and memory usage. So a few methods for literals now have an id counter part.
This should probably be refactored to have the literal versions call the
id ones instead.
2011-06-07 22:43:26 +02:00
Jordi Boggiano
d181e32000
Fixed test expectation
2011-05-23 02:23:21 +02:00
Jordi Boggiano
00260a89ae
Make test fail
2011-05-23 02:18:11 +02:00
Jordi Boggiano
c6321e7277
Fix tests and invalid use statements
2011-04-17 23:45:37 +02:00
Jordi Boggiano
7ea2fd6c93
Fix author/copyright
2011-04-17 21:39:53 +02:00
Nils Adermann
933cc6179b
Import initial partial port of the libzypp satsolver.
2011-04-05 17:37:19 +02:00