Phpinsights: Abandoned Packages as dependencies

Created on 10 Sep 2020  路  11Comments  路  Source: nunomaduro/phpinsights

| Q | A
| ---------------- | -----
| Bug report? | yes
| Feature request? | no
| Library version | v1.14.0

The v1.14.0 release has abandoned packages as dependencies:

Package object-calisthenics/phpcs-calisthenics-rules is abandoned, you should avoid using it. Use https://github.com/symplify/coding-standard instead.
$> composer depends object-calisthenics/phpcs-calisthenics-rules                                         
nunomaduro/phpinsights  v1.14.0  requires  object-calisthenics/phpcs-calisthenics-rules (^3.7)  



md5-240960ae82bdd0f782ba9fb34eb8d5f1



Package sebastian/finder-facade is abandoned, you should avoid using it. No replacement was suggested.



md5-6016256015f82f3ff1c22ddf0e2ce963



$> composer depends sebastian/finder-facade                     
phploc/phploc  6.0.2  requires  sebastian/finder-facade (^2.0)  

$> composer depends phploc/phploc          
nunomaduro/phpinsights  v1.14.0  requires  phploc/phploc (^5.0|^6.0)  

Regards!

Most helpful comment

@lybuneiv Yep, we are adding the deprecated sniffs to slevomat's package. When this process completed, we can change our dependency.

All 11 comments

@eusonlito Can you submit a pull request fixing this?

@eusonlito Can you submit a pull request fixing this?

Yes!

Is not so easy :sweat_smile:

$> ./vendor/bin/phpunit 
PHPUnit 9.3.8 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.4.10
Configuration: /home/www/phpinsights/phpunit.xml.dist
Warning:       Your XML configuration validates against a deprecated schema.
Suggestion:    Migrate your XML configuration using "--migrate-configuration"!

................................................EEEEE.........E  63 / 105 ( 60%)
....EEEEEEEEEEE.........EEEEEE............                      105 / 105 (100%)

Time: 00:00.759, Memory: 16.00 MB

There were 23 errors:

1) Tests\Domain\Fixer\FixerDecoratorTest::testCanIgnoreFileInFixerWithFullPath
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Fixer/FixerDecoratorTest.php:27

2) Tests\Domain\Fixer\FixerDecoratorTest::testCanIgnoreFileInFixerWithRelativePath
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Fixer/FixerDecoratorTest.php:57

3) Tests\Domain\Fixer\FixerDecoratorTest::testHasErrorWithNoConfig
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Fixer/FixerDecoratorTest.php:76

4) Tests\Domain\Fixer\FixerDecoratorTest::testConfigExcludeDirectory
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Fixer/FixerDecoratorTest.php:104

5) Tests\Domain\Fixer\FixerDecoratorTest::testFixableIssues
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Fixer/FixerDecoratorTest.php:132

6) Tests\Domain\Insights\ForbiddenFinalClassTest::testSkipFile
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Insights/ForbiddenFinalClassTest.php:47

7) Tests\Domain\Insights\ForbiddenTraitsTest::testSkipFile
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Insights/ForbiddenTraitsTest.php:42

8) Tests\Domain\Insights\InsightFactoryTest::testMakeFromUnknownImplementThrowException
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/tests/Domain/Insights/InsightFactoryTest.php:69

9) Tests\Domain\Insights\InsightFactoryTest::testMakeFromSniffReturnInsight
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/tests/Domain/Insights/InsightFactoryTest.php:74

10) Tests\Domain\Insights\InsightFactoryTest::testMakeFromFixerReturnInsight
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/tests/Domain/Insights/InsightFactoryTest.php:82

11) Tests\Domain\Insights\InsightFactoryTest::testConfigureLineLengthSniff
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/tests/Domain/Insights/InsightFactoryTest.php:99

12) Tests\Domain\Insights\InsightFactoryTest::testConfigureYodaStyleFixer
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/tests/Domain/Insights/InsightFactoryTest.php:127

13) Tests\Domain\Insights\InvalidPhpCodeTest::testNotFailingOnSemiColonAfterExtendClass with data set "Semi colon after extend class" ('/home/www/phpinsights/te...ss.php')
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Domain/Insights/InvalidPhpCodeTest.php:33

14) Tests\Domain\Insights\InvalidPhpCodeTest::testNotFailingOnSemiColonAfterExtendClass with data set "Unclosed comment" ('/home/www/phpinsights/te...nt.php')
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Domain/Insights/InvalidPhpCodeTest.php:33

15) Tests\Domain\Insights\MultiplePathTest::testAnalyserCanWorkOnMultiplePath
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Domain/Insights/MultiplePathTest.php:21

16) Tests\Domain\Insights\SyntaxCheckTest::testHasIssueOnFile
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Domain/Insights/SyntaxCheckTest.php:18

17) Tests\Domain\Insights\SyntaxCheckTest::testHasIssueOnDirectory
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Domain/Insights/SyntaxCheckTest.php:40

18) Tests\Domain\Sniffs\SniffDecoratorTest::testCanIgnoreFileInSniffWithFullPath
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Sniffs/SniffDecoratorTest.php:26

19) Tests\Domain\Sniffs\SniffDecoratorTest::testCanIgnoreFileInSniffWithRelativePath
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Sniffs/SniffDecoratorTest.php:58

20) Tests\Domain\Sniffs\SniffDecoratorTest::testFindMoreThanOneClassInFile
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Sniffs/SniffDecoratorTest.php:79

21) Tests\Domain\Sniffs\SniffDecoratorTest::testConfigExcludeDirectory
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Sniffs/SniffDecoratorTest.php:111

22) Tests\Domain\Sniffs\SniffDecoratorTest::testFixableIssues
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/Domain/Sniffs/SniffDecoratorTest.php:136

23) Tests\Feature\Laravel\ClassesTest::testCanAllowAttributeSetters
class_implements(): Class ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff does not exist and could not be loaded

/home/www/phpinsights/src/Domain/InsightLoader/InsightLoader.php:18
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:117
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:93
/home/www/phpinsights/src/Domain/Insights/InsightFactory.php:69
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:67
/home/www/phpinsights/src/Domain/Insights/InsightCollectionFactory.php:68
/home/www/phpinsights/tests/TestCase.php:108
/home/www/phpinsights/tests/TestCase.php:64
/home/www/phpinsights/tests/Feature/Laravel/ClassesTest.php:25

ERRORS!
Tests: 105, Assertions: 139, Errors: 23.

@nunomaduro as concerns the object-calisthenics/phpcs-calisthenics-rules package, what's the desired outcome here? Just removing everything in the ObjectCalisthenics\Sniffs namespace, or replacing it with equivalent functionality? Looks like the following sniffs are used:

Domain/Metrics/Architecture/Classes.php:
use ObjectCalisthenics\Sniffs\Files\ClassTraitAndInterfaceLengthSniff;
use ObjectCalisthenics\Sniffs\Metrics\MethodPerClassLimitSniff;
use ObjectCalisthenics\Sniffs\Metrics\PropertyPerClassLimitSniff;

Domain/Metrics/Architecture/Functions.php:
use ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff;

Domain/Metrics/Code/Classes.php:
use ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff;

Domain/Metrics/Code/Code.php:
use ObjectCalisthenics\Sniffs\Metrics\MaxNestingLevelSniff;
use ObjectCalisthenics\Sniffs\NamingConventions\ElementNameMinimalLengthSniff;

And of those, only MaxNestingLevelSniff seems to have equivalent functionality found in PHP_CodeSniffer\Standards\Generic\Sniffs\Metrics\NestingLevelSniff. If the functionality is to be kept, the other sniffs would need to be imported into this package.

Thanks for looking into this.

@miken32 Great question. This is a tough one, as that increases this repositories complexity as we would have to support a lot of new lines of codes, which we would prefer not to. However those sniffs are also really important to keep.

Did you also check that we can't replace any of them with slevomat sniffs?

I created an issue in slevomat's package https://github.com/slevomat/coding-standard/issues/1099, hoping that they might wanna adapt some of the rules.

Alright, so it sounds like slevomat wouldn't mind having the sniffs in their codebase.

This means someone has to make pr's with the sniffs we need to their codebase and then we can depend on a new slevomat version in here instead.

@olivernybroe Which rules do we need exactly? Maybe I can help with those PRs.

I think @miken32 created a full list of what we need 馃憤

Domain/Metrics/Architecture/Classes.php:
use ObjectCalisthenics\Sniffs\Files\ClassTraitAndInterfaceLengthSniff;
use ObjectCalisthenics\Sniffs\Metrics\MethodPerClassLimitSniff;
use ObjectCalisthenics\Sniffs\Metrics\PropertyPerClassLimitSniff;

Domain/Metrics/Architecture/Functions.php:
use ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff;

Domain/Metrics/Code/Classes.php:
use ObjectCalisthenics\Sniffs\Classes\ForbiddenPublicPropertySniff;

Domain/Metrics/Code/Code.php:
use ObjectCalisthenics\Sniffs\Metrics\MaxNestingLevelSniff;
use ObjectCalisthenics\Sniffs\NamingConventions\ElementNameMinimalLengthSniff;

@olivernybroe Oh you're right! I didn't see it :blush: Thanks!

any solution?

@lybuneiv Yep, we are adding the deprecated sniffs to slevomat's package. When this process completed, we can change our dependency.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

dmitryuk picture dmitryuk  路  5Comments

nunomaduro picture nunomaduro  路  4Comments

brunocfalcao picture brunocfalcao  路  5Comments

deleugpn picture deleugpn  路  3Comments

Gummibeer picture Gummibeer  路  4Comments