Jordi Boggiano
5c4ef1eb96
Make package name validation a hard failure, fixes #7875
5 years ago
Jordi Boggiano
c033644f8b
Present lock changes alphabetically, with uninstalls first, then all install/updates mixed
5 years ago
Jordi Boggiano
24a5a0dacb
Skip invalid PSR-0/4 classes from optimized autoloader, fixes #8403
5 years ago
Jordi Boggiano
94e6cfc521
Only show direct dependencies suggestions by default, add --all flag to see all in suggest command, fixes #8660
5 years ago
Jordi Boggiano
2445ef5e1f
Refactor check-platform-reqs to use InstalledRepository and look for providers as well as platform packages, fixes #8645 , closes #8676
...
Co-authored-by: Ellis <eantaya@nuglif.com>
Co-authored-by: Jordi Boggiano <j.boggiano@seld.be>
5 years ago
Jordi Boggiano
d63eb8179e
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
f964b83018
Add bearer support in config command and add to docs/schema, refs #8671
5 years ago
Jordi Boggiano
0b993ba4b9
Merge pull request #8671 from ethanclevenger91/ethanclevenger91/explicit-bearer-support
...
Bearer support.
5 years ago
Jordi Boggiano
479414d8bd
Move bearer auth to be first to make sure it does not get shadowed by github/gitlab/.. configs
5 years ago
Jordi Boggiano
9d72c92f07
Avoid looping endlessly for invalid GitLab tokens in git config, fixes #8667
5 years ago
Jordi Boggiano
34fb609aad
Merge pull request #8652 from clxmstaab/more-ambiguous
...
report ambiguous classes across all classmaps
5 years ago
Jordi Boggiano
beb64914a3
Retrieve latest funding info for all packages in fund command
5 years ago
Ethan Clevenger
cbec8ceb53
Bearer support.
5 years ago
Markus Staab
cc5c5dbee1
merge fix from https://github.com/composer/composer/pull/8651
5 years ago
Markus Staab
04a18c72ba
fix CS
5 years ago
Markus Staab
883a179dec
removed superflous code
5 years ago
Markus Staab
61e0bf1cb5
fix typo
5 years ago
Jordi Boggiano
6d3d7c39ac
Merge pull request #8621 from remorhaz/master
...
Fix incorrect --no-dev handling of replaced packages
5 years ago
Jordi Boggiano
6cf54170cc
Avoid mixing write/writeError which causes issues on some terminals, fixes #8656
5 years ago
Jordi Boggiano
2285a79c63
Merge pull request #8641 from souweb22/delete_return
...
delete 'return' and 'spaces' in Filesystem.php
5 years ago
Jordi Boggiano
c5ce4de89e
Consistently return void
5 years ago
Jordi Boggiano
eb56c8dcd4
Merge pull request #8640 from souweb22/fix_doc
...
add 'array' to document in ConfigSourceInterface.php
5 years ago
Jordi Boggiano
5d970022e8
Normalize output of create-project target path, refs #8609 , refs #8412
5 years ago
Jordi Boggiano
919fa60579
Merge pull request #8611 from ol0lll/fix/create-project-with-absolute-path
...
Create project with absolute path(fixes #8609 )
5 years ago
Jordi Boggiano
c6969756e8
Make sure $_SERVER is updated when putenv updates environment variables, fixes #8298
5 years ago
Jordi Boggiano
7a270955f5
Fix issues handling branch names with pipes in them
5 years ago
Jordi Boggiano
80875e896d
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
05737a46fb
Improve funding info parsing
5 years ago
Jordi Boggiano
9cab8c10cc
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
0b9c658bef
Add plugin-api-version used to generate a lock file in itself
5 years ago
Jordi Boggiano
c4f19e51d8
Rework the funding info parsing to avoid requiring graphql permissions
5 years ago
remorhaz
339ee953e5
Fix incorrect --no-dev handling of replaced packages
5 years ago
Markus Staab
30b1dfb8a9
report ambiguous classes across all classmaps
5 years ago
arai
e61b559eb2
delete 'return' in Filesystem.php
5 years ago
arai
766c8d448c
add 'array' to document in ConfigSourceInterface.php
5 years ago
Jordi Boggiano
a2eb0bab12
Abort loop correctly when package is a match
5 years ago
Jordi Boggiano
5b41b78809
Optimize findPackagesWithReplacersAndProviders to avoid multiple loops over replace/provide links
5 years ago
Jordi Boggiano
20e4cc3b6f
Fix finding replacers/providers to check constraints correctly
5 years ago
arai
1f08138379
Delete variable
5 years ago
Volker Killesreiter
e532e70b22
Revert "Chore: Use consistent directory path"
...
This reverts commit 43e0321ee7
.
5 years ago
Jordi Boggiano
2e82e34fe0
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
4f59162827
Fix class name of caught exception
5 years ago
Jordi Boggiano
0ad322e51f
Fix tests
5 years ago
Jordi Boggiano
ee2252c6ac
Add lint check after phar is built
...
The initial 1.10.0-RC build (593b8dfb29
)
had what looks like a bit flip of one > into a :, causing a parse error as $foo->bar became $foo-:bar in some class.
This is quite unpleasant and easy to miss as it requires including the file in question before the error is spotted.
It was quite lucky I ran a composer install with the new phar right after to do something else and spotted the error.
Linting all files covers this problem mostly, at least for the PHP files.
5 years ago
Jordi Boggiano
bc002ae1fb
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
055a179cc5
Merge pull request #8453 from naderman/funding
...
Add funding field to composer.json and composer fund command
5 years ago
Jordi Boggiano
8dc055bec7
Fix 5.3 syntax
5 years ago
Jordi Boggiano
653e62f201
Merge pull request #8605 from guilliamxavier/fix-validate-strict-warnings
...
Fix validate strict warnings
5 years ago
Jordi Boggiano
4ebc318510
Fix 5.3/5.4 builds
5 years ago
Jordi Boggiano
77a477fb57
Add FundCommand
5 years ago
Jordi Boggiano
f171d1fd89
Avoid requiring auth for the funding API access
5 years ago
Guilliam Xavier
a17e7e9bd3
ValidateCommand: fix array syntax for PHP 5.3
5 years ago
Jordi Boggiano
b033a2ae81
Retrieve funding info from github into composer.json if not declared there
5 years ago
Jordi Boggiano
ff8bf0ab82
Clarify code
...
Co-Authored-By: Guilliam Xavier <guilliamxavier@users.noreply.github.com>
5 years ago
Guilliam Xavier
a222ec5b36
ValidateCommand: remove actually unused code
5 years ago
Nils Adermann
d665ea7ea9
After update and install commands display how many packages want funding
5 years ago
Nils Adermann
5c4f524d6a
Add funding field to composer.json
...
You can specify a list of funding options each with a type and URL. The
type is used to specify the kind of funding or the platform through
which funding is possible.
5 years ago
Jordi Boggiano
8fd70d2dc4
Target ClassMapGenerator ignoring of invalid PSR classes for 2.0
5 years ago
Jordi Boggiano
fe5b4fa4cc
Merge pull request #8597 from glaubinix/t/log-git-sync-mirror-error
...
Git: log error for sync mirror with existing local copy
5 years ago
Jordi Boggiano
850bfcddfa
Fix json manipulation fallback handling of empty objects, fixes #8600
5 years ago
Jordi Boggiano
71005091f0
Fix invalid access to private prop
5 years ago
Jordi Boggiano
2d8a8ed7e3
Add InstalledRepository to clean up some concepts and usages, remove BaseRepository
5 years ago
Jordi Boggiano
78885c556a
Add missing use statement
5 years ago
Jordi Boggiano
c5c6d44a0b
Refactor away some unnecessary RepositorySet usages
5 years ago
Jordi Boggiano
f35cd8948a
Minor refactoring of RootPackageRepo
5 years ago
Jordi Boggiano
44d1e15294
Simplify suggester output when updating, refactor suggest command to reuse SuggestedPackagesReporter and make smarter defaults, fixes #6267
5 years ago
Guilliam Xavier
35562dcd49
ValidateCommand: add a comment that we didn't forget $lockErrors
5 years ago
Guilliam Xavier
2f4bd85219
ValidateCommand: de-invert if-elseif-else to reduce code duplication
5 years ago
Guilliam Xavier
901d177179
ValidateCommand: factorize $printSchemaUrl code
5 years ago
Guilliam Xavier
b5e41d6792
ValidateCommand: always display all warnings, independently of --strict
5 years ago
Guilliam Xavier
7e2679ffc1
ValidateCommand: pass $isStrict to outputResult() of with-dependencies too
5 years ago
Jordi Boggiano
d52ce3c37f
Replace pre/post-dependencies-solving by a pre-operations-exec event happening only on install from lock
5 years ago
Stephan Vock
243ee9b1e4
Git: log error for sync mirror with existing local copy
5 years ago
Jordi Boggiano
835a91532d
Add PRE_POOL_CREATE event, fixes #8348
5 years ago
Jordi Boggiano
71855e6430
Restore PRE/POST_DEPENDENCY_SOLVING events
5 years ago
Jordi Boggiano
4d74f5ba95
Fix exclude-from-classmap handling to avoid foo matching foo* directories, fixes #8563 , refs #8575
5 years ago
Jordi Boggiano
7e142b5d6b
Use Upgrading for package installs too
5 years ago
Jordi Boggiano
02433c3659
Merge pull request #8565 from glaubinix/t/create-project-add-repository
...
Create project: add option to add the repository to the composer.json
5 years ago
Jordi Boggiano
9609729de7
Change update to upgrade for package update operations which are upgrades, refs #8594
5 years ago
Jordi Boggiano
be8dd528b8
Merge remote-tracking branch 'origin/master' into 2.0
5 years ago
Jordi Boggiano
ef249ef6b6
Add support for lib-zip platform package
5 years ago
Ion Bazan
a180f48921
Distinguish between updates and downgrades in dry-run
5 years ago
Stephan Vock
2a564a9f36
Create project: add option to add the repository to the composer.json
5 years ago
Jordi Boggiano
5843a282bc
Merge pull request #8562 from adrianosferreira/fix-archive-format-cli
...
Uses config data from Composer object whenever possible on ArchiveCommand
5 years ago
Adriano Ferreira
97d077c43b
Uses config data from Composer object whenever possible on ArchiveCommand
...
It was previously blindly getting a new instance from the factory thus ignoring what is on Composer object config data.
5 years ago
Jordi Boggiano
589abb06a3
PHPStan fixes
5 years ago
Jordi Boggiano
c56886ac36
Avoid checking for .dockerenv if open_basedir is set, fixes #8585
5 years ago
Jordi Boggiano
45ecbae8f5
Merge branch 'master' into 2.0
5 years ago
Ion Bazan
2ff73a8797
respect `notify-on-install` option
5 years ago
Jordi Boggiano
4e4304ae7d
Fix
5 years ago
Jordi Boggiano
0b4763e6c7
Make it clear which package the error is for when detecting uncommitted changes
5 years ago
Jordi Boggiano
006c3de542
Fix tests and make TTY usage on ProcessExecutor cleaner
5 years ago
Jordi Boggiano
f572636628
Add support for TTY mode on Linux/OSX in script handlers when running in interactive mode, fixes #5856 , fixes #3299 , closes #4036
5 years ago
Jérôme Billiras
58e2956b95
Allow referencing scripts to extends @composer
5 years ago
Jordi Boggiano
d14d411fa4
Add --dry-run to require and remove commands, fixes #7793
5 years ago
Nils Adermann
fdfdee03c1
Remove unused argument to pool->match
5 years ago
Nils Adermann
4f44b7b221
Remove unused policy function findUpdatePackages
5 years ago
Jordi Boggiano
a1fe64152d
Minor Installer cleanups
5 years ago
Jordi Boggiano
2f4ea3a463
Fix show command, refactor RepositorySet constructor
5 years ago
Jordi Boggiano
38f6ae2c4e
Fix react/promise usage for v2
5 years ago
Jordi Boggiano
189d5adab0
Fix reporting of replace conflicts to not mention provides
5 years ago
Jordi Boggiano
ec90c17e3b
Fix conflict order to be more accurate
5 years ago
Jordi Boggiano
1e68555e0a
Sanitize URLs in getRepoName and centralize the Url sanitization process
5 years ago
Jordi Boggiano
c41df325d8
Remove RepositorySet from Solver and remove getPool from RepositorySet
5 years ago
Jordi Boggiano
1d4cdb60d0
Improve error reporting for conflicts/replaces of various kinds, fixes #7254
5 years ago
Jordi Boggiano
6c9d9e775c
Clean up and deduplicate the output of RULE_LEARNED
5 years ago
Jordi Boggiano
29efc473a1
Suggest which providers could be required to fulfill a virtual package requirement, fixes #2811
5 years ago
Jordi Boggiano
3fc7e10c5c
Improve error reporting of solver issues, refs #7779
...
Fixes #8525
Fixes #6513
5 years ago
Jordi Boggiano
f611c641db
Merge pull request #8561 from Seldaek/allow-providers-even-on-match
...
Allow providers which are selected to be installed in place of existing packages which do not satisfy requirements
5 years ago
Jordi Boggiano
46e35bc8d7
Fix 5.3/undef var issues
5 years ago
Jordi Boggiano
8a41f1a5ca
Allow providers which are selected to be installed in place of existing packages which do not satisfy requirements, fixes #6753
5 years ago
Jordi Boggiano
2901995fc8
Fix issue excluding unstable packages when stabilityFlags are empty
5 years ago
Jordi Boggiano
8f09f3764b
Avoid fetching non-existing files multiple times
5 years ago
Jordi Boggiano
39fb2cc51c
Fix case
5 years ago
Jordi Boggiano
3f48acf56a
Add test checking references update to latest and remove TODO
5 years ago
Jordi Boggiano
41720e9b70
Show abandoned warnings from the locked repo
5 years ago
Jordi Boggiano
292d4b3c8f
Make sure a lock file is always written and things work well even without any dependencies in the require/require-dev
5 years ago
Jordi Boggiano
173b96de2d
Make sure the first require does not fail due to a missing lock file
5 years ago
Jordi Boggiano
8584d15e8c
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
94dce37424
Avoid use of refs and avoid a false path when showing the root package, refs #8545
5 years ago
Jordi Boggiano
9db08f9883
Merge remote-tracking branch 'Serializator/feature/show-package-json'
5 years ago
Jordi Boggiano
e9c7e253f4
Merge pull request #8529 from vitalyzhakov/master
...
Change only modified files for docker caching
5 years ago
Jordi Boggiano
1287a7a611
Merge pull request #8538 from adrianosferreira/add-vendor-bin-for-each-event
...
Append the bin dir on each listener iteration
5 years ago
Julian van den Berkmortel
933fe27cd5
Add support for "composer show --format=json <package>" #8544
5 years ago
Жаков Виталий
ccd8be382b
comments for #2764
5 years ago
Жаков Виталий
415cf9fd50
Merge branch 'master' of https://github.com/composer/composer
5 years ago
Жаков Виталий
48c7442b63
should be || not OR
5 years ago
Adriano Ferreira
acc040f745
Append the bin dir on each listener iteration
...
The "composer install" can create the vendor/dir folders and be used as a script item on composer.json. Having another script running after it that relies on vendor/bir binaries (such as phpunit) will cause it to not find the binary. This fix addresses the issue by trying to append the path on each script iteration.
5 years ago
Nils Adermann
8b877eb068
Remove superfluous check in Problem
5 years ago
Nils Adermann
0b4e8952f6
PHP5 disallows require as a function name, use requireName analog to fixPackage
5 years ago
Nils Adermann
5bdc0fc9c5
Request jobs replaced by root require / fixed package
...
The only type of request job remaining was "install" which is really a
root requirement. The only other kind of input for the solver is now a
set of fixed packages.
Rules have been updated to account for only two kinds of former job
reason: FIXED or ROOT_REQUIRE. The job property has always been
redundant and has been removed, since reasonData suffices.
Problem reasons are always rules, so the unnecessary wrapping in an
array has been removed.
We now only ever generate a single rule per root require or fixed
package, so there is no need for the solver to special handle disabling
"jobs" anymore, the rule can just be disabled as usual.
For consistency special handling of rules for jobs in problems has been
integrated into the rule class like all other rule reasons. As part of
this change the error message for root requirements has been improved a
bit to make it clearer where the package installation request came from.
The word job has also been removed from operations, which are called
operations, not jobs.
5 years ago
Jordi Boggiano
1d31190472
Keep track of unacceptable fixed packages for later to use in error reporting and make sure the pool state is consistent
5 years ago
Жаков Виталий
1e92780600
operations case touch
5 years ago
Jordi Boggiano
c6a3f48eaf
Remove some more remove request handling
5 years ago
Patrick Weyck
7d7e3d594b
Normalize minimum-stability `rc` to `RC` in `InitCommand`
...
A `minimum-stability` of `rc` is valid according to
`composer-schema.json` and works fine with install and update and
generally in version comparisons, because it's normalized to `RC`.
This commit makes it work in `InitCommand` and `RequireCommand` too.
5 years ago
Jordi Boggiano
7cc8a4aed8
Avoid checking stability on platform packages too
5 years ago
Jordi Boggiano
6dc576738a
Avoid partial updates from applying changes to packages which are not locked with an acceptable stability
5 years ago
Jordi Boggiano
e162cc6f0a
Remove "remove" from request
5 years ago
Jordi Boggiano
304753ff69
Remove callback and pass stabilities all the way instead
...
This allows optimizing the loading of ~dev files, and cleans up a few things
5 years ago
Jordi Boggiano
98860b8619
Fix show command when no package is found
5 years ago
Jordi Boggiano
8bb472a608
No need to alias platform packages before the repository set as the pool builder already does it
5 years ago
Jordi Boggiano
b9d00153d9
Suggest using -p when a platform package can not be found in show command
5 years ago
Jordi Boggiano
56b2e1ae7a
Allow installing an aliased root package
5 years ago
Jordi Boggiano
572ef1add1
Add comment for lockable
5 years ago
Jordi Boggiano
cc91e9164a
Stop unrolling the root aliases
5 years ago
Jordi Boggiano
73bc137c3c
Avoid nameConstraints from being collected for fixed packages
5 years ago
Jordi Boggiano
e50f78043a
Try to load packages from lock file only and avoid loading other versions for pinned packages
5 years ago
Jordi Boggiano
257d2ce889
Avoid setting the update whitelist in require command on newly created files and when the lock file is disabled
5 years ago
Жаков Виталий
33db6ec71b
touch only if update
5 years ago
Jordi Boggiano
e6749d8717
Add comment, fix 5.3 build
5 years ago
Jordi Boggiano
dd556f989b
Use LockArrayRepository instead of RepositoryInterface to clearly indicate which type of repo it is in some places
5 years ago
Jordi Boggiano
6c24e85e54
Merge pull request #8528 from Seldaek/repo-prio-fix
...
Avoid loading packages found in a higher prio repo entirely from lower prio repos
5 years ago
Jordi Boggiano
f68731e663
Remove package/repo priority concept as it is enforced by the pool builder now
5 years ago
Жаков Виталий
f02989ceba
revert formatting
5 years ago
Жаков Виталий
a4dc076dc8
fix file load errors
5 years ago
Жаков Виталий
8429a48dac
Change only modified files
5 years ago
Jordi Boggiano
30b6a41035
Extract MetadataMinifier util
5 years ago
Jordi Boggiano
926afab1f4
Move loadPackages impl out of BaseRepository
5 years ago
Jordi Boggiano
47a94b3a88
Ensure packages that exist in a higher prio repo never get loaded in lower prio repos, fixes #5076
5 years ago
Jordi Boggiano
40f5806a7c
Fix ComposerRepo issue
5 years ago
Jordi Boggiano
13f1924892
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
e4b495ca16
Fix 5.3 build
5 years ago
Jordi Boggiano
a5b178084c
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
4b6c25d4bc
Use Authorization header instead of deprecated access_token query param, fixes #8454
5 years ago
Jordi Boggiano
c3d3d45903
Merge pull request #8331 from jimmy-ho/bug/issue-8330
...
8330 Correct issue where permission umask of files were not set when …
5 years ago
Jordi Boggiano
669033f1e7
Collect existing packages only once, refs #8372
5 years ago
Jordi Boggiano
c0714e5ff8
Merge remote-tracking branch 'xy2z/has-package-name'
5 years ago
Jordi Boggiano
78217e2313
Merge branch '1.9'
5 years ago
Jordi Boggiano
a2dadb91bf
Return two packages in PathRepository when on a feature branch, one for feature branch and one for the source branch it came from, fixes #8498 , fixes #8477
5 years ago
Jordi Boggiano
6c795dedc0
Add openssl version to diagnose command, refs #8506
5 years ago
Jordi Boggiano
a902279a5b
Merge branch '1.9'
5 years ago
Jordi Boggiano
0b767e0b83
Allow calling getProviderNames multiple times, refs #8516
5 years ago
Maximilian Bösing
3791a574a2
Provide partial packages names if available, closes #8516 , fixes #8526
5 years ago
Jordi Boggiano
f5dab18b7d
Remove dead code, refs #8517
5 years ago
Jordi Boggiano
ee3fd0f745
Merge remote-tracking branch 'adrianosferreira/package-install-method-cli'
...
Fixed formatting, and handling of config command to be preferred-install.foo value
Refs #8517
5 years ago
Jordi Boggiano
e8426d2c01
Adjust config handling of suggest, refs #8520
5 years ago
Jordi Boggiano
f203b3eb41
Merge remote-tracking branch 'adrianosferreira/add-suggest-in-json-by-cli'
5 years ago
Jordi Boggiano
c43137db3f
Merge branch '1.9'
5 years ago
Jordi Boggiano
8d24b61bef
Tweak and add comments to the working dir fix with global exec, refs #8515
5 years ago
Jordi Boggiano
6b8f1c71b6
Merge remote-tracking branch 'cdayjr/issue-8481'
5 years ago
Jordi Boggiano
ef6ef8ac0f
Hint at the partial update command, fixes #8508 , refs #8332
5 years ago
Jordi Boggiano
818e16238f
Merge pull request #8510 from glaubinix/t/abandon-archived
...
VcsRepositories: mark archived repositories as abandoned
5 years ago
Jordi Boggiano
a6176a7beb
Add IOInterface methods
5 years ago
Jordi Boggiano
23359f2db6
Merge branch 'master' into 2.0
5 years ago
Jordi Boggiano
3d72b56ed6
Merge branch '1.9'
5 years ago
Jordi Boggiano
d3f1c664d4
Avoid formatting output from external processes, fixes #8524
5 years ago
Jordi Boggiano
2bd817acf9
Merge pull request #8444 from Toflar/remove-filters-from-pool
...
Removed the filters from the pool
5 years ago
Adriano Ferreira
607d491921
Implemented way to add packages into suggest through CLI
5 years ago
Adriano Ferreira
5ea6fd0bcb
Implemented way to use preferred-install for defining granular preferences through CLI
...
Currently, preferred-install accepts the hash of patterns as the value in the composer.json. I've followed the same approach as used in extra and platform for letting the user define install preferences through CLI in the format: `composer config preferred-install my-organization/stable-package.dist`.
5 years ago
Chad Wade Day, Jr
917680e0d4
Make global exec execute commands in working directory
5 years ago
Stephan Vock
731d94a2a3
VcsRepositories: mark archived repositories as abandoned
5 years ago
Tyson Andre
6827105a5b
Fix nits on typos
5 years ago
Jordi Boggiano
2dd001132a
Merge pull request #8492 from staabm/putenv
...
implemented `@putenv` composer script
5 years ago
Markus Staab
3d8c1ebad5
implemented @putenv composer script
...
@putenv supports setting environment variables in a x-OS compatible way
5 years ago
johnstevenson
beacdf4e51
Add Windows OneDrive to platform warnings
5 years ago
Stephan Vock
dd2cc3e985
VcsRepository: make transport exceptions during initialize run accessible
...
* also display the http status code in composer failed to load a composer.json file
5 years ago
Adam Žurek
406a28708f
updated phpstan to 0.12
5 years ago
Jordi Boggiano
620497a2ed
Fix usage of DefaultPolicy in show command
5 years ago
Jordi Boggiano
082422f334
Merge pull request #8458 from johnstevenson/noproxy
...
Rewrite NoProxyPattern to include IPv6
5 years ago
Jordi Boggiano
f6b3f12107
Merge branch 'master' into 2.0
5 years ago