6238 Commits (419567ba6db91e8cf15f78ba0690d5e4b6668c0e)

Author SHA1 Message Date
Andreas Möller 6e88683e35
Fix: Return early 4 years ago
Jordi Boggiano 800491175b
Avoid failing cleanup when a package gets uninstalled 4 years ago
Jordi Boggiano 6e45a53e76
Add support for relative paths in handling of install-path for the installed.json 4 years ago
Jordi Boggiano 1b1d59ee6c
Make FileDownloader always download file first in vendor-dir/composer/$tmp instead of next to install path to avoid issues with custom installers not being loaded when downloading on first install, and use cleanup method properly 4 years ago
Jordi Boggiano 918768fc54
Make sure we get a temporary dir which is unique 4 years ago
Jordi Boggiano 73251691a0
Avoid emptying the directory before extracting an archive into it, check that it is empty instead 4 years ago
Nils Adermann fc40fefa6f Make sure nameConstraints is always set when loading a name 4 years ago
Nils Adermann 443553423b Mark replaced packages for update when using --with-dependencies
This is necessary to allow the requiring of new packages which replace
packages currently locked without requiring explicitly listing them as
an argument, so simplifies the composer require command
4 years ago
Nils Adermann 392d0abd21 Rename test files and standardize on allow list rather than whitelist 4 years ago
Nils Adermann 01fe92905a The update allow list is now generated while building the pool
This reduces code complexity while making partial updates more
predictable. This also allows composer require to successfully run a
partial update for a new package with transitive dependency updates.
4 years ago
Nils Adermann da84763f03 Move partial update handling to pool builder 4 years ago
Christian Raue b644f63a93
fixed help URL for ClearCacheCommand 4 years ago
Jordi Boggiano 6679dde713
Merge pull request #8693 from enumag/patch-2
Add --dry-run to composer require
4 years ago
Jordi Boggiano 7e679656a4
Keep absolute path repos symlinks absolute, fixes #8700 4 years ago
Jordi Boggiano 86677ad172
Avoid scanning files twice when generating optimized autoloaders, fixes #8683 4 years ago
Jáchym Toušek 3bf46a77f9
Update RequireCommand.php 4 years ago
Jáchym Toušek bbb781b1ed
Add --dry-run to composer require 4 years ago
Jordi Boggiano cbdf74eb34
Merge remote-tracking branch 'naderman/optimize-fixed-pkg-loading' into 2.0 4 years ago
Jordi Boggiano cf5513f28d
Fix syntax error 4 years ago
Jordi Boggiano 0d2c2c044a
Avoid skipping feature branch detection if no branch-alias is defined at all 4 years ago
Jordi Boggiano c2d0fed06b
Tweak lock repo name 4 years ago
Jordi Boggiano 3a9b786400
Bring suggest output in line with the rest of update/install output 4 years ago
Jordi Boggiano e15f7d6bb7
Merge branch 'master' into 2.0 4 years ago
Aaron Johnson b41e768e1f
Put backticks around command for readability.
Helps to promote the command to discern it from the sentence. :)
4 years ago
Nils Adermann 8a6382d78d Remove unnecessary TODOs and skip EmptyConstraint like null 4 years ago
Nils Adermann bbdbb3517b PoolBuilder: Drop name constraints loop, already set earlier in same code 4 years ago
Nils Adermann 59bc957e76 Simplify loading of fixed and root require packages in pool builder
additionally mark all packages replaced by fixed packages as loaded as
there is no need to load those names at all, since the fixed package
will provide them
4 years ago
Jordi Boggiano d58653627a Optimize loading of deps from fixed packages 4 years ago
Jordi Boggiano 82e2a679bf Add TODO note 4 years ago
Jordi Boggiano 08cee4c3e9
Implement getProviders equally on all repos 4 years ago
Jordi Boggiano 8a83d5cc35
Fix create-project command 4 years ago
Jordi Boggiano d09daa8d5a
Merge pull request #8684 from naderman/dev-require-errors
Handle dev extraction exit codes instead of completing broken lock with errors
4 years ago
Nils Adermann ee8df484c4 Separate createPool and createPoolWithAllPackages, fix test description 4 years ago
Nils Adermann 281d8930ff For dev extraction skip pool building, we already have a working package set
Also reduce getProviders back to just providers, and add some todos
4 years ago
Jordi Boggiano 3d0d71367d
Doc updates 4 years ago
Jordi Boggiano 73a5cc63cc
Always use Removing for consistency between dry-run and actual install 4 years ago
Mathias Berchtold 1ebeb143ae
Fix PHP 8 warnings
The PR fixes this PHP 8 warning:
PHP Deprecated:  Required parameter $ambiguousClasses follows optional parameter $blacklist in phar://.../composer.phar/src/Composer/Autoload/AutoloadGenerator.php on line 339
4 years ago
Nils Adermann 06f460c557 Remove trailing spaces from output 4 years ago
Nils Adermann 1f467046d7 Implement getProviders on reposet for all repo types and add replacers
This way errors during require dev extraction make more sense
4 years ago
Nils Adermann ddb1e79bef Handle dev extraction exit codes instead of completing broken lock with errors 4 years ago
Jordi Boggiano 9c84f4d79f
Make sure InstalledRepository itself can be added too but requires allowing installed repos in reposet 4 years ago
Jordi Boggiano 589aa351a8
Change Uninstalling to Removing in lock operations 4 years ago
Jordi Boggiano ba04a46cae
Fix 5.3 issue 4 years ago
Jordi Boggiano d13ce20b6e
Fix handling of composer repos with v1 version_normalized format 4 years ago
Jordi Boggiano a453792d6b
Merge pull request #8682 from glaubinix/f/gitlab-guest-token-access
GitLab: properly handle token which has Guest only access
4 years ago
Jordi Boggiano d559bf5387
Allow configuring a path repo to an empty path as long as using wildcards and the wildcard root exists, fixes #8679 4 years ago
Stephan 402c64c271
Update src/Composer/Repository/Vcs/GitLabDriver.php
Co-Authored-By: Jordi Boggiano <j.boggiano@seld.be>
4 years ago
Jordi Boggiano a7a975ec1c
Alias dev-master/trunk/default to 9999999-dev instead of normalizing the version to that, fixes #8323 4 years ago
Stephan Vock 55d252b9c3 GitLab: properly handle token which has Guest only access 4 years ago
Jordi Boggiano 97e2a249e8
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano d271004b30
Also check for package requiring itself in require, not only require-dev 4 years ago
Jordi Boggiano 5c4ef1eb96
Make package name validation a hard failure, fixes #7875 4 years ago
Jordi Boggiano c033644f8b
Present lock changes alphabetically, with uninstalls first, then all install/updates mixed 4 years ago
Jordi Boggiano 24a5a0dacb
Skip invalid PSR-0/4 classes from optimized autoloader, fixes #8403 4 years ago
Jordi Boggiano 94e6cfc521
Only show direct dependencies suggestions by default, add --all flag to see all in suggest command, fixes #8660 4 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>
4 years ago
Jordi Boggiano d63eb8179e
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano f964b83018
Add bearer support in config command and add to docs/schema, refs #8671 4 years ago
Jordi Boggiano 0b993ba4b9
Merge pull request #8671 from ethanclevenger91/ethanclevenger91/explicit-bearer-support
Bearer support.
4 years ago
Jordi Boggiano 479414d8bd
Move bearer auth to be first to make sure it does not get shadowed by github/gitlab/.. configs 4 years ago
Jordi Boggiano 9d72c92f07
Avoid looping endlessly for invalid GitLab tokens in git config, fixes #8667 4 years ago
Jordi Boggiano 34fb609aad
Merge pull request #8652 from clxmstaab/more-ambiguous
report ambiguous classes across all classmaps
4 years ago
Jordi Boggiano beb64914a3
Retrieve latest funding info for all packages in fund command 4 years ago
Ethan Clevenger cbec8ceb53 Bearer support. 4 years ago
Markus Staab cc5c5dbee1 merge fix from https://github.com/composer/composer/pull/8651 4 years ago
Markus Staab 04a18c72ba fix CS 4 years ago
Markus Staab 883a179dec removed superflous code 4 years ago
Markus Staab 61e0bf1cb5 fix typo 4 years ago
Jordi Boggiano 6d3d7c39ac
Merge pull request #8621 from remorhaz/master
Fix incorrect --no-dev handling of replaced packages
4 years ago
Jordi Boggiano 6cf54170cc
Avoid mixing write/writeError which causes issues on some terminals, fixes #8656 4 years ago
Jordi Boggiano 2285a79c63
Merge pull request #8641 from souweb22/delete_return
delete 'return' and 'spaces' in Filesystem.php
4 years ago
Jordi Boggiano c5ce4de89e
Consistently return void 4 years ago
Jordi Boggiano eb56c8dcd4
Merge pull request #8640 from souweb22/fix_doc
add 'array' to document in ConfigSourceInterface.php
4 years ago
Jordi Boggiano 5d970022e8
Normalize output of create-project target path, refs #8609, refs #8412 4 years ago
Jordi Boggiano 919fa60579
Merge pull request #8611 from ol0lll/fix/create-project-with-absolute-path
Create project with absolute path(fixes #8609)
4 years ago
Jordi Boggiano c6969756e8
Make sure $_SERVER is updated when putenv updates environment variables, fixes #8298 4 years ago
Jordi Boggiano 7a270955f5
Fix issues handling branch names with pipes in them 4 years ago
Jordi Boggiano 80875e896d
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano 05737a46fb
Improve funding info parsing 4 years ago
Jordi Boggiano 9cab8c10cc
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano 0b9c658bef
Add plugin-api-version used to generate a lock file in itself 4 years ago
Jordi Boggiano c4f19e51d8
Rework the funding info parsing to avoid requiring graphql permissions 4 years ago
remorhaz 339ee953e5 Fix incorrect --no-dev handling of replaced packages 4 years ago
Markus Staab 30b1dfb8a9 report ambiguous classes across all classmaps 4 years ago
arai e61b559eb2 delete 'return' in Filesystem.php 4 years ago
arai 766c8d448c add 'array' to document in ConfigSourceInterface.php 4 years ago
Jordi Boggiano a2eb0bab12
Abort loop correctly when package is a match 4 years ago
Jordi Boggiano 5b41b78809
Optimize findPackagesWithReplacersAndProviders to avoid multiple loops over replace/provide links 4 years ago
Jordi Boggiano 20e4cc3b6f
Fix finding replacers/providers to check constraints correctly 4 years ago
arai 1f08138379 Delete variable 4 years ago
Volker Killesreiter e532e70b22 Revert "Chore: Use consistent directory path"
This reverts commit 43e0321ee7.
4 years ago
Jordi Boggiano 2e82e34fe0
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano 4f59162827
Fix class name of caught exception 4 years ago
Jordi Boggiano 0ad322e51f
Fix tests 4 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.
4 years ago
Jordi Boggiano bc002ae1fb
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano 055a179cc5
Merge pull request #8453 from naderman/funding
Add funding field to composer.json and composer fund command
4 years ago
Jordi Boggiano 8dc055bec7
Fix 5.3 syntax 4 years ago
Jordi Boggiano 653e62f201
Merge pull request #8605 from guilliamxavier/fix-validate-strict-warnings
Fix validate strict warnings
4 years ago
Jordi Boggiano 4ebc318510
Fix 5.3/5.4 builds 4 years ago
Jordi Boggiano 77a477fb57
Add FundCommand 4 years ago
Jordi Boggiano f171d1fd89
Avoid requiring auth for the funding API access 4 years ago
Guilliam Xavier a17e7e9bd3
ValidateCommand: fix array syntax for PHP 5.3 4 years ago
Jordi Boggiano b033a2ae81
Retrieve funding info from github into composer.json if not declared there 4 years ago
Jordi Boggiano ff8bf0ab82
Clarify code
Co-Authored-By: Guilliam Xavier <guilliamxavier@users.noreply.github.com>
4 years ago
Guilliam Xavier a222ec5b36
ValidateCommand: remove actually unused code 4 years ago
Nils Adermann d665ea7ea9
After update and install commands display how many packages want funding 4 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.
4 years ago
Jordi Boggiano 8fd70d2dc4
Target ClassMapGenerator ignoring of invalid PSR classes for 2.0 4 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
4 years ago
Jordi Boggiano 850bfcddfa
Fix json manipulation fallback handling of empty objects, fixes #8600 4 years ago
Jordi Boggiano 71005091f0
Fix invalid access to private prop 4 years ago
Jordi Boggiano 2d8a8ed7e3
Add InstalledRepository to clean up some concepts and usages, remove BaseRepository 4 years ago
Jordi Boggiano 78885c556a
Add missing use statement 4 years ago
Jordi Boggiano c5c6d44a0b
Refactor away some unnecessary RepositorySet usages 4 years ago
Jordi Boggiano f35cd8948a
Minor refactoring of RootPackageRepo 4 years ago
Jordi Boggiano 44d1e15294
Simplify suggester output when updating, refactor suggest command to reuse SuggestedPackagesReporter and make smarter defaults, fixes #6267 4 years ago
Guilliam Xavier 35562dcd49
ValidateCommand: add a comment that we didn't forget $lockErrors 4 years ago
Guilliam Xavier 2f4bd85219
ValidateCommand: de-invert if-elseif-else to reduce code duplication 4 years ago
Guilliam Xavier 901d177179
ValidateCommand: factorize $printSchemaUrl code 4 years ago
Guilliam Xavier b5e41d6792
ValidateCommand: always display all warnings, independently of --strict 4 years ago
Guilliam Xavier 7e2679ffc1
ValidateCommand: pass $isStrict to outputResult() of with-dependencies too 4 years ago
Jordi Boggiano d52ce3c37f
Replace pre/post-dependencies-solving by a pre-operations-exec event happening only on install from lock 4 years ago
Stephan Vock 243ee9b1e4 Git: log error for sync mirror with existing local copy 4 years ago
Jordi Boggiano 835a91532d
Add PRE_POOL_CREATE event, fixes #8348 4 years ago
Jordi Boggiano 71855e6430
Restore PRE/POST_DEPENDENCY_SOLVING events 4 years ago
Jordi Boggiano 4d74f5ba95
Fix exclude-from-classmap handling to avoid foo matching foo* directories, fixes #8563, refs #8575 4 years ago
Jordi Boggiano 7e142b5d6b
Use Upgrading for package installs too 4 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
4 years ago
Jordi Boggiano 9609729de7
Change update to upgrade for package update operations which are upgrades, refs #8594 4 years ago
Jordi Boggiano be8dd528b8
Merge remote-tracking branch 'origin/master' into 2.0 4 years ago
Jordi Boggiano ef249ef6b6
Add support for lib-zip platform package 4 years ago
Ion Bazan a180f48921 Distinguish between updates and downgrades in dry-run 4 years ago
Stephan Vock 2a564a9f36 Create project: add option to add the repository to the composer.json 4 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
4 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.
4 years ago
Jordi Boggiano 589abb06a3
PHPStan fixes 4 years ago
Jordi Boggiano c56886ac36
Avoid checking for .dockerenv if open_basedir is set, fixes #8585 4 years ago
Jordi Boggiano 45ecbae8f5
Merge branch 'master' into 2.0 4 years ago
Ion Bazan 2ff73a8797 respect `notify-on-install` option 4 years ago
Jordi Boggiano 4e4304ae7d
Fix 4 years ago
Jordi Boggiano 0b4763e6c7
Make it clear which package the error is for when detecting uncommitted changes 4 years ago
Jordi Boggiano 006c3de542
Fix tests and make TTY usage on ProcessExecutor cleaner 4 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 4 years ago
Jérôme Billiras 58e2956b95
Allow referencing scripts to extends @composer 4 years ago
Jordi Boggiano d14d411fa4
Add --dry-run to require and remove commands, fixes #7793 4 years ago
Nils Adermann fdfdee03c1 Remove unused argument to pool->match 4 years ago
Nils Adermann 4f44b7b221 Remove unused policy function findUpdatePackages 4 years ago
Jordi Boggiano a1fe64152d
Minor Installer cleanups 4 years ago
Jordi Boggiano 2f4ea3a463
Fix show command, refactor RepositorySet constructor 4 years ago
Jordi Boggiano 38f6ae2c4e
Fix react/promise usage for v2 4 years ago
Jordi Boggiano 189d5adab0
Fix reporting of replace conflicts to not mention provides 4 years ago
Jordi Boggiano ec90c17e3b
Fix conflict order to be more accurate 4 years ago
Jordi Boggiano 1e68555e0a
Sanitize URLs in getRepoName and centralize the Url sanitization process 4 years ago
Jordi Boggiano c41df325d8
Remove RepositorySet from Solver and remove getPool from RepositorySet 4 years ago
Jordi Boggiano 1d4cdb60d0
Improve error reporting for conflicts/replaces of various kinds, fixes #7254 4 years ago
Jordi Boggiano 6c9d9e775c
Clean up and deduplicate the output of RULE_LEARNED 4 years ago
Jordi Boggiano 29efc473a1
Suggest which providers could be required to fulfill a virtual package requirement, fixes #2811 4 years ago
Jordi Boggiano 3fc7e10c5c
Improve error reporting of solver issues, refs #7779
Fixes #8525
Fixes #6513
4 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
4 years ago
Jordi Boggiano 46e35bc8d7
Fix 5.3/undef var issues 4 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 4 years ago
Jordi Boggiano 2901995fc8
Fix issue excluding unstable packages when stabilityFlags are empty 4 years ago
Jordi Boggiano 8f09f3764b
Avoid fetching non-existing files multiple times 4 years ago
Jordi Boggiano 39fb2cc51c
Fix case 4 years ago
Jordi Boggiano 3f48acf56a
Add test checking references update to latest and remove TODO 4 years ago
Jordi Boggiano 41720e9b70
Show abandoned warnings from the locked repo 4 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 4 years ago
Jordi Boggiano 173b96de2d
Make sure the first require does not fail due to a missing lock file 4 years ago
Jordi Boggiano 8584d15e8c
Merge branch 'master' into 2.0 4 years ago
Jordi Boggiano 94dce37424
Avoid use of refs and avoid a false path when showing the root package, refs #8545 4 years ago
Jordi Boggiano 9db08f9883
Merge remote-tracking branch 'Serializator/feature/show-package-json' 4 years ago
Jordi Boggiano e9c7e253f4
Merge pull request #8529 from vitalyzhakov/master
Change only modified files for docker caching
4 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
4 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