3
3
array_shift ($ _SERVER ['argv ' ]);
4
4
$ dirs = $ _SERVER ['argv ' ];
5
5
6
- function getContentHash ( $ composerJson )
6
+ function getRelevantContent ( array $ composerJson )
7
7
{
8
8
$ relevantKeys = array (
9
9
'name ' ,
@@ -27,12 +27,18 @@ function getContentHash($composerJson)
27
27
$ relevantContent ['config ' ]['platform ' ] = $ composerJson ['config ' ]['platform ' ];
28
28
}
29
29
30
+ return $ relevantContent ;
31
+ }
32
+
33
+ function getContentHash (array $ composerJson )
34
+ {
35
+ $ relevantContent = getRelevantContent ($ composerJson );
30
36
ksort ($ relevantContent );
31
37
32
38
return md5 (json_encode ($ relevantContent ));
33
39
}
34
40
35
- $ composerLocks = array ();
41
+ $ composerJsons = array ();
36
42
37
43
foreach ($ dirs as $ dir ) {
38
44
if (!file_exists ($ dir .'/composer.lock ' ) || !$ composerLock = @json_decode (file_get_contents ($ dir .'/composer.lock ' ), true )) {
@@ -50,28 +56,29 @@ function getContentHash($composerJson)
50
56
@unlink ($ dir .'/composer.lock ' );
51
57
continue ;
52
58
}
53
- $ composerLocks [$ composerJson ['name ' ]] = array ($ dir , $ composerLock, $ composerJson );
59
+ $ composerJsons [$ composerJson ['name ' ]] = array ($ dir , $ composerLock[ ' packages ' ], getRelevantContent ( $ composerJson) );
54
60
}
55
61
56
- foreach ($ composerLocks as list ($ dir , $ composerLock )) {
57
- foreach ($ composerLock [ ' packages ' ] as $ composerJson ) {
58
- if (0 !== strpos ($ version = $ composerJson ['version ' ], 'dev- ' ) && '-dev ' !== substr ($ version , -4 )) {
62
+ foreach ($ composerJsons as list ($ dir , $ lockedPackages )) {
63
+ foreach ($ lockedPackages as $ lockedJson ) {
64
+ if (0 !== strpos ($ version = $ lockedJson ['version ' ], 'dev- ' ) && '-dev ' !== substr ($ version , -4 )) {
59
65
continue ;
60
66
}
61
67
62
- if (!isset ($ composerLocks [$ name = $ composerJson ['name ' ]])) {
68
+ if (!isset ($ composerJsons [$ name = $ lockedJson ['name ' ]])) {
63
69
echo "$ dir/composer.lock references missing $ name. \n" ;
64
70
@unlink ($ dir .'/composer.lock ' );
65
71
continue 2 ;
66
72
}
67
73
68
74
foreach (array ('minimum-stability ' , 'prefer-stable ' , 'repositories ' ) as $ key ) {
69
- if (array_key_exists ($ key , $ composerLocks [$ name ][2 ])) {
70
- $ composerJson [$ key ] = $ composerLocks [$ name ][2 ][$ key ];
75
+ if (array_key_exists ($ key , $ composerJsons [$ name ][2 ])) {
76
+ $ lockedJson [$ key ] = $ composerJsons [$ name ][2 ][$ key ];
71
77
}
72
78
}
73
79
74
- if (getContentHash ($ composerJson ) !== $ composerLocks [$ name ][1 ]['content-hash ' ]) {
80
+ // use weak comparison to ignore ordering
81
+ if (getRelevantContent ($ lockedJson ) != $ composerJsons [$ name ][2 ]) {
75
82
echo "$ dir/composer.lock is not in sync with $ name. \n" ;
76
83
@unlink ($ dir .'/composer.lock ' );
77
84
continue 2 ;
0 commit comments