1
0
Fork 0
Commit Graph

394 Commits (29ff6a40ae2e64d52b444329ce16cf6b10eaf652)

Author SHA1 Message Date
Nils Adermann 29ff6a40ae Follow up to #7946 test: add solver flag to assert path execution 2019-02-10 20:26:47 +01:00
Jordi Boggiano f2cc666c2c
Merge pull request #7913 from fredemmott/hhvm-version
Support identifying the HHVM version when not running with HHVM
2019-02-08 16:13:32 +01:00
Fred Emmott 41c7f4d2bf
Same but for Problem.php 2019-02-06 13:11:04 -08:00
Fred Emmott 17788c76f6
Better error message for present but incompatible versions
hhvm-nightly (and next week's release) now report 4.x, so all the 3.x
constraints are now giving misleading error messages with this patch.

Before:

```
    - facebook/fbexpect v2.3.0 requires hhvm ^3.28 -> you are running this with PHP and not HHVM.
```

After:

```
    - facebook/fbexpect v2.3.0 requires hhvm ^3.28 -> your HHVM version (4.0.0-dev) does not satisfy that requirement.
```
2019-02-06 12:51:30 -08:00
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
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
Gabriel Caruso 71c8735e11 Use combined assignment operators 2018-09-10 14:24:41 +02:00
Christophe Coevoet e5b948c683 Refactor the handling of conflict rules in the solver
Conflict rules are not added in the solver based on the packages loaded in the
solver by require rules, instead of loading remote metadata for them. This has
2 benefits:

- it reduces the number of conflict rules in the solver in case of conflict
  rules targetting packages which are not required
- it fixes the behavior of replaces, which is meant to conflict with all
  versions of the replaced package, without introducing a performance
  regression (this behavior was changed when optimizing composer in the past).
2018-08-27 12:14:34 +02:00
Jordi Boggiano ff59bbdab0 CS fixer 2018-07-24 14:32:52 +02:00
Jordi Boggiano 0d92c8df63
Merge pull request #7480 from staabm/patch-3
Simplify Rule->getJob()
2018-07-20 11:25:33 +02:00
Markus Staab 05499099a0
Simplify Rule->getJob() 2018-07-18 20:50:46 +02:00
Markus Staab f7a1c34c92
Removed unused variables 2018-07-18 20:21:04 +02:00
Markus Staab 50565cb0c8 Use variable to call count() less often 2018-07-12 20:44:24 +02:00
Rob 68d468d683
Merge pull request #7450 from staabm/simpler-hash
Use a simpler hashing for the Rule2Literal case
2018-07-12 10:05:24 +02:00
Rob 1e9136f086
Merge pull request #7456 from staabm/simpler-equals
Specialize Rule2Literal->equals(Rule2Literal) for speedup
2018-07-12 10:02:36 +02:00
Rob 7079cdb70d
Merge pull request #7458 from staabm/patch-3
Define variable only when actually used
2018-07-12 10:01:19 +02:00
Rob b350c09c7e
Merge pull request #7457 from staabm/patch-2
Remove unnecessary abs() calls
2018-07-12 09:58:38 +02:00
Markus Staab 86d5de2965
Define variable only when actually used 2018-07-10 21:01:52 +02:00
Markus Staab 42516901f1
Removed another unnecessary abs() call 2018-07-10 20:59:39 +02:00
Markus Staab 0e16dbabde
Removed another unnecessary abs() call 2018-07-10 20:55:14 +02:00
Markus Staab e3a23f4ae6
Remove unnecessary abs() calls
Literal cannot be negative at this point
2018-07-10 20:49:24 +02:00
Markus Staab 7a4937bbcc Specialize Rule2Literal->equals(Rule2Literal) for speedup 2018-07-10 18:24:06 +02:00
Markus Staab 07383552b3
Temporary save the package-name into a variable
this reduces number of unnecessary function calls in the hot path of "composer update"
2018-07-09 14:09:46 +02:00
Markus Staab 0aa7ec2d2c Use a simpler hashing for the Rule2Literal case
this speeds up "composer update" by ~18%
2018-07-09 14:01:57 +02:00
Gabriel Caruso 7d9f8e2247
Improvements
Small improvements, such as remove unused imports, unecessaries casts, parentheses, etc.
2018-07-05 07:44:43 -03:00
Yanick Witschi d82bdc04ac Improved debugging output 2018-05-24 11:46:50 +02:00
Yanick Witschi 5435877bd9 Improve SAT resolving developer debug information 2018-05-18 10:59:09 +02:00
Jordi Boggiano dae3c5bc2d Merge branch '1.6' 2018-01-24 10:20:12 +01:00
Jordi Boggiano 766ed9555e Only show override description if there is one, refs #7011 2018-01-24 09:02:51 +01:00
Vic Metcalfe fa5a94143a Show reason for php version package mismatch due to config.platform 2018-01-24 08:55:37 +01:00
Jordi Boggiano ad8b44a4c8 Merge branch '1.6' 2018-01-22 15:42:56 +01:00
Jordi Boggiano 471b012e3a Fix problem report when requiring "ext-zend opcache", refs #2509 2018-01-22 13:41:32 +01: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 32a409a3ee Clean elses 2017-12-16 04:23:48 -02:00
Jordi Boggiano 0b3bc4ccb9 Merge branch '1.5' 2017-11-28 18:09:36 +01:00
Nils Adermann f40f95b269 Add a note that a user could have forgotten to add a custom repo if package not found 2017-11-16 10:15:37 +01:00
Jordi Boggiano c0eb32669a Remove comment 2017-09-12 09:24:28 +02:00
Vladimir Reznichenko c8615358cb SCA with PHP Inspections (EA Extended) 2017-09-11 19:40:43 +02:00
Denis Brumann 2df1a69287 Improve IDE autocompletion
According to type 2nd constructor-argument `$reasonData` can either be a Link or a PackageInterface. IDEs like PhpStorm won't be able to provide autocompletion since both classes are from a different namespace.

In order to provide better autocompletion for `$reasonData` and by extension `$this->reasonData` the use statements should be included or the type hint should use the fully qualified class name.

For the same reason I added the docblock on the protected method `formatePackagesUnique()`.
2017-08-04 13:00:24 +02:00
Jordi Boggiano 122e422682 CS fixes 2017-03-08 15:16:44 +01:00
rubenrua 8fccbaa4a4 Improve memory usage resolving dependencies II
Optimize `rulesByHash` in `Composer\DependencyResolver\RuleSet` to only
use an array with the second element, event with very low probability.
2017-02-20 18:52:34 +00: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
johnstevenson 379fb70ad9 Use random name for tmp ini and delete after use
Thanks to Patrick Rose for reporting this issue.
2016-11-20 10:59:05 +00:00
Nicolas Grekas daf84bea33 Enhance solver perf by removing count() 2016-10-14 15:56:18 +02:00
Yanick Witschi 7b5fe5c7d4 CS 2016-10-04 10:40:18 +02:00
Yanick Witschi a9e88a27b3 CS 2016-09-30 17:40:28 +02:00
Yanick Witschi 4a769a785c Reduce calls on Rule::getHash() 2016-09-30 17:25:41 +02:00
ReenExe 53fc30fe56 clear code 2016-05-17 13:34:54 +03:00
Lucas CHERIFI 7e34d9ab97 Typo fix ;-) 2016-05-10 21:45:39 +02:00
Jordi Boggiano feda2a283f Improve error reporting some more, fixes #4310 2016-04-18 23:03:00 +01:00