-
Notifications
You must be signed in to change notification settings - Fork 41
/
changelog.json
1567 lines (1567 loc) · 81.8 KB
/
changelog.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"_readme": [
"The contents of this file are used to generate CHANGELOG.md; It's kept in JSON/parsable format to make it",
"possible to generate change-logs in other formats as well (when needed) and to do automatic releases based on",
"added change-log records. More on how to use it: https://github.com/vaimo/composer-changelogs"
],
"5.0.0": {
"fix": [
"Drop php5 support, Fix PHP 8.1 deprecation notices: https://github.com/vaimo/composer-patches/pull/96",
"Add conflict with cweagans/composer-patches: https://github.com/vaimo/composer-patches/pull/94",
"Uninstall package during ReInstallOperation for Composer v2 https://github.com/vaimo/composer-patches/pull/99"
]
},
"4.22.4": {
"overview": "changes in this release forward-ported from 3.53.4",
"fix": [
"bundled patches fail to apply when using patch-mapping configuration due to refactored code in 3.53.2 having messed up argument order used for a sub-function call in BasePathComponent"
]
},
"4.22.3": {
"overview": "changes in this release forward-ported from 3.53.3",
"fix": [
"patch applier crash when branch alias defined for root package (scenario: root-branch-alias) [pull/73]"
],
"maintenance": [
"make patch commands available when the plugin itself is a root package (just for the sake of allowing people to conduct quick experiments when developing)"
]
},
"4.22.2": {
"overview": "changes in this release forward-ported from 3.53.2",
"fix": [
"patches applied before packages properly re-installed with Composer V2 (missed the fact that installations, like downloads are now done in asynchronous manner) [issues/70]"
]
},
"4.22.1": {
"overview": "changes in this release forward-ported from 3.53.1",
"fix": [
"minor issue addressed with V2-style call being in code without version-check (said call is currently backwards-compatible with V1, but you never know ...)"
]
},
"4.22.0": {
"overview": "changes in this release forward-ported from 3.53.0",
"feature": [
"add support for Composer 2 [issues/59]",
"allow patcher operations to be optionally disabled by re-declarng them with label replaced with: false"
],
"maintenance": [
"introduce ready-to-use development environment setup for quicker developer onboarding [issues/65]",
"improved linter rules to be a it less forgiving on excessive use of whitespace",
"fix an issue where GIT applier was polled within the tests (due to there being repo-within-repo situation which made the applier to be excluded)"
]
},
"4.21.1": {
"overview": "changes in this release forward-ported from 3.52.1",
"fix": [
"remove patch availability validation crash under certain package setups"
],
"maintenance": [
"improve test coverage to include scenarios where the patches are owned by a sub-package rather than the root"
]
},
"4.21.0": {
"overview": "changes in this release forward-ported from 3.52.0",
"feature": [
"allow global usage of the plugin when explicitly enabled via environment variable: COMPOSER_PATCHER_ALLOW_GLOBAL_USAGE (pull/45)"
],
"fix": [
"added /F switch to where to add double quotes to windows commands (pull/44)",
"added no-scripts option to avoid executing post-install-cmd (pull/48)",
"strpos() empty needle errors can occur with certain configurations (pull/53)",
"patches-searches path containing .patch fails (pull/58) (with extra modifications)"
],
"maintenance": [
"CI config fixed to use Composer 1.X",
"make it possible to run tests while developing the module on MacOS",
"make sure output assertions on tests don't fail on small terminal windows when composer output gets wrapped",
"update compatibility checker not to fail on false-negatives",
"fix normalizer script not executing as expected after code:deps run"
]
},
"4.20.2": {
"overview": "changes in this release forward-ported from 3.51.2",
"fix": [
"some errors not properly reported in the 'most likely' errors brief report (for patches with corrupt content)",
"errors not listed when file reference not available within patch (affects brief reporting, everything worked as expected with -vvv)"
]
},
"4.20.1": {
"overview": "changes in this release forward-ported from 3.51.1",
"fix": [
"allow the plugin to be installed as dependency to globally installed package (as part of dependency of some global package); previously caused every composer call to crash with class declaration conflict",
"patch error reporting includes patch creation date where just path should have been shown",
"patch errors caused by output analysis did not include the raw output line that caused the failure detector to trigger",
"outdated documentation reference in code when specifying unsecure URL endpoint for a patch to be downloaded from"
],
"maintenance": [
"new documentation page added to shed some light to different situations one might find themselves in when a patch applying fails"
]
},
"4.20.0": {
"overview": "changes in this release forward-ported from 3.51.0",
"feature": [
"allow defining OS-specific applier operation without overwriting the default operation value"
],
"fix": [
"proper support for FreeBSD 'patch' command that does not have the call arguments of --no-backup-if-mismatch and --verbose [issues/38]"
],
"maintenance": [
"documentation split to make it easier to read and work with updating it [issues/38]"
]
},
"4.19.3": {
"overview": "changes in this release forward-ported from 3.50.3",
"fix": [
"running 'composer update --lock' not cleaning up composer.lock afterwards when patches already applied. No such issue when no patches applied at all (running 'update' with --lock does not apply the patches); This situation resulted in patches being perceived as already applied when a package with such a lock was installed"
],
"maintenance": [
"the state of the test installation not properly reset when composer.lock got corrupted (example: 'patches_applied' key ended up there)",
"test run output improvements; less output from composer calls that are not directly relevant to scenarios"
]
},
"4.19.2": {
"overview": "changes in this release forward-ported from 3.50.2",
"fix": [
"loosened dependency on drupol/phposinfo to make sure that the module is installable on all PHP version (latest release of the module is only covering PHP <7.0 (the constraint used to explicitly state 1.6.1.2, changed to 1.6 which covers all needed PHP versions) [issues/37]",
"validation error for remote patches displayed TMP path in output instead of the URL",
"the 'probable causes' report did not include file path reference"
],
"maintenance": [
"removed lock files from tests to make sure that initial setup always ends up installing the latest package dependencies",
"make sure that under no conditions, the Packagist package will not end up being used in tests (using aliased package)",
"run tests (including the test that the module can be installed) on multiple PHP versions: 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3",
"run Compatibility rule-set on all installations"
]
},
"4.19.1": {
"overview": "changes in this release forward-ported from 3.50.1",
"fix": [
"the command patch:list not usable when some patch configuration included remote patches that would have resulted in 404 errors on apply (now listing said patches with proper errors)"
],
"maintenance": [
"test coverage increased around dealing with remote patches"
]
},
"4.19.0": {
"overview": "changes in this release forward-ported from 3.50.0",
"feature": [
"allow defining sha1 checksum for remote patches through 'sha1' key within JSON definition"
],
"fix": [
"the configuration value of 'secure-http' not having any effect (value usage ignored); Now properly handled by remote filesystem implementation",
"allow retries on failed downloads (switch from using remote filesystem to file downloader which allows the usage of caching and retry logic in place for Composer package downloads)"
]
},
"4.18.3": {
"overview": "changes in this release forward-ported from 3.49.3",
"fix": [
"needless whitespace in output when using patches-search (extra line for patch label added for no reason)"
],
"maintenance": [
"introduces output expectation for each test scenario"
]
},
"4.18.2": {
"overview": "changes in this release forward-ported from 3.49.2",
"maintenance": [
"package configuration and build flow updates"
]
},
"4.18.1": {
"overview": "changes in this release forward-ported from 3.49.1",
"maintenance": [
"code quality improvements"
]
},
"4.18.0": {
"overview": "changes in this release forward-ported from 3.49.0",
"feature": [
"allow very precise configuration for specific OS based on OS names in drupol\\phposinfo\\Enum\\OsName"
],
"fix": [
"switched over to using drupol/phposinfo instead of tivie/php-os-detector which was only detecting the OS that php binary was built for and not the actual OS the php binary was being used"
],
"maintenance": [
"improved dependency compatibility scanner to allow whitelisted issue reports (in case the dependency had mechanics to deal with the reported issue)"
]
},
"4.17.10": {
"overview": "changes in this release forward-ported from 3.48.10",
"fix": [
"more clear error reporting when encountering patch reversals (failures from log output analysis)"
],
"maintenance": [
"increased test coverage"
]
},
"4.17.9": {
"overview": "changes in this release forward-ported from 3.48.9",
"fix": [
"certain behaviour flags incorrectly forced to false (explicit flag) when using redo/undo with no option to override said falsey value"
],
"maintenance": [
"improved test coverage where 'redo' and 'undo' also get covered",
"allow multiple commands to be called per test"
]
},
"4.17.8": {
"overview": "changes in this release forward-ported from 3.48.8",
"fix": [
"patches validation not failing when there are patch files present without patch target definition in JSON files and using sym-linked patch folder (not an issue when using patches-search)"
]
},
"4.17.7": {
"overview": "changes in this release forward-ported from 3.48.7",
"fix": [
"using printf variable syntax in patch descriptions crashed the patch applier"
]
},
"4.17.6": {
"overview": "changes in this release forward-ported from 3.48.6",
"fix": [
"the meta-data @skip tag not perceived properly (this actually affected all tags that had no value)"
],
"maintenance": [
"test coverage improved; introduced the possibility to write test scenarios for multiple installations (one using patches-search, other using patches-file, etc)"
]
},
"4.17.5": {
"overview": "changes in this release forward-ported from 3.48.5",
"fix": [
"basePatch templates not being applied after code changes from last release"
]
},
"4.17.4": {
"overview": "changes in this release forward-ported from 3.48.4",
"fix": [
"patch file meta-tags conflict in situations where there are values for all of: depends, package, version; the following setup now results in package+version also being listed as dependency"
]
},
"4.17.3": {
"overview": "changes in this release forward-ported from 3.48.3",
"fix": [
"meta-tags overwriting each-other rather than stacking (when, say @depends is used multiple times)"
]
},
"4.17.2": {
"overview": "changes in this release forward-ported from 3.48.2",
"maintenance": [
"added notice to the 'most likely error' output (on patch failure) to indicate that the list presented is not the full list of details"
]
},
"4.17.1": {
"overview": "changes in this release forward-ported from 3.48.1",
"fix": [
"broken compatibility with PHP 5.3 (wrong array syntax used)"
]
},
"4.17.0": {
"overview": "changes in this release forward-ported from 3.48.0",
"feature": [
"highlight most probable error that caused patch to fail in the non-verbose error message (full logs available when running with -vvv); this change was introduced to make it easier for people to identify issues within patches as the verbose output is extremely noisy [issues/34]"
],
"fix": [
"operation step always gets reported as 'UNKNOWN' when running the apply commands with heightened verbosity [issues/34]",
"hard-coded path separators made patches to fail on certain operation systems (Windows) when applying remote patch [github/33]"
],
"maintenance": [
"exception and call stack directly exposed when executing code with 'halt of first failure'; changed to fail with proper error message (full stack still available with -vvv)"
]
},
"4.16.2": {
"overview": "changes in this release forward-ported from 3.47.2",
"fix": [
"support for older (<1.1) Composer releases faultily implemented where the availability with CommandsProvider was incorrectly checked for"
]
},
"4.16.1": {
"overview": "all features and fixes in this release are forward-ported from 3.47.1",
"fix": [
"wrong path used for pre-loading classes while running composer commands when the plugin package used as ROOT",
"removed all syntax/code that was not compatible with 5.3",
"removed/replaced all dependencies that were not compatible with 5.3",
"having a patch for a back-ported fix for a package where when the package gets updated, the update could cause reverse-apply of the patch, thus reintroducing issue that was fixed in newer release (only happens with patches that should be declared with upper-capped version constraints but are not for some reason). This will cause patch failure from now on",
"don't provide patch commands when plugin on older (<1.1) Composer versions [github/31]",
"always load patches in alphabetical order from file-system when using patches-search (unless @after, @before directives used within the patch file; introduced in FileSystemUtils, using natural sorting) [github/29]",
"fail the whole patching process with fatal exception when none of the patch applier commands (defined in the plugin config) are available [github/30]",
"log output typos corrected"
],
"maintenance": [
"improved early auto-loader setup within proxy plugin",
"code normalized according to coding standards",
"simple integration tests added that test the patch applying in sandbox Composer project"
]
},
"4.16.0": {
"overview": "all features and fixes in this release are forward-ported from 3.47.0",
"feature": [
"allow platform requirement dependencies on patches a'la php:>=7.2 (previously only package dependencies could be declared); usable with \"depends\" config or @depends tag"
],
"fix": [
"malformed package reset queue in some edge cases when using bundled patches which targets packages that have no direct patches applying on them",
"load all the plugin classes on startup (to avoid crashes on patch apply); the old plugin logic will be used til the end of the particular Composer call that upgraded the plugin [github/28]"
]
},
"4.15.0": {
"overview": [
"This release comes basically with re-written logic to the core of the patch apply queue generation due to issues with the old logic. The listing command now also uses same code which removes some of the confusion when using apply and seeing something different than what list reports",
"",
"All features and fixes in this release are forward-ported from 3.46.0"
],
"feature": [
"added --with-affected argument option for path:list command to list patches that indirectly are affected by the new/changed patches (would be re-applied on actually patch:apply due to package resets caused by new/changed statuses)",
"patch owner embedded in applied patch registry to provide proper REMOVED information when patch gets removed"
],
"fix": [
"bundled patches partially reset when removing some dev-only (with --no-dev option) patches that targeted same packages as bundles did; Issue caused by only partially recursive lookup on an impact of re-installing certain composer package",
"the alias argument for --explicit, --show-reapplies did not trigger explicit output",
"make sure that repeated patch:undo calls don't reinstall previously reverted patches",
"make sure that patch:list uses same functionality that the main patch applier uses, thus guaranteeing that path:list will list the things as they'd be processed in actual patch apply run"
]
},
"4.14.0": {
"overview": "all features and fixes in this release are forward-ported from 3.45.0",
"feature": [
"allow patch:validate to use only patches that the root package owns: --local"
],
"fix": [
"patch contents not properly analysed when working with Bundled patches or using patches-search or patcher/search when trying to apply patches on Windows; Reason: using OS-specific EOL constant to split file content to lines [github/26]"
]
},
"4.13.0": {
"overview": "all features and fixes in this release are forward-ported from 3.44.0",
"feature": [
"Allow declaration of patches that only apply when owner package is used as ROOT package (README/Patches: local patch)"
]
},
"4.12.0": {
"overview": "all features and fixes in this release are forward-ported from 3.43.0",
"feature": [
"allow patch file paths, etc to be defined under extra/patcher key to make sure that they don't hog up too much main level keys of 'extra' config for given package (old keys are also still supported)",
"allow some patches to be ignored when running patch:validate by providing list of path ignores in package's configuration: extra/patcher/ignore (takes array of ignored paths)",
"allow patcher operations to be split to have separate sub-operation per OS type [github/26]"
],
"fix": [
"some path processing functions did not use proper directory separator constant",
"patches not applied properly on Windows due to using 'which' instead of 'where' when resolving the patch applier absolute path [gitdhub/26]"
]
},
"4.11.0": {
"overview": "all features and fixes in this release are forward-ported from 3.42.0, 3.42.1 & 3.42.2",
"feature": [
"added more informative patches configuration JSON validation (that gives exact details on what's wrong with the JSON file)",
"added alias for --excluded argument: --with-excludes for more intuitive usage and to move towards more self-documenting arguments",
"added alias for --explicit argument: --show-reapplies for more intuitive usage and to move towards more self-documenting arguments",
"added reason to patch:validation errors (either 'NO FILE' or 'NO CONFIG')"
],
"fix": [
"incorrect TMP path on Windows [github/22]",
"crash when running patch:list in situation where none of bundled patches dependencies is directly available (expectation: should be able to list all patches even when none of the targets are installed)",
"the patch:validate not catching situations where there's a patch JSON declaration that has no corresponding file at the place where the declaration targets",
"better error message when wanting to download patches from unsecure URLs by referring to documentation of the plugin rather than to documentation of Composer (the module has it's own 'secure-http' config option that only affects patches)",
"patch validation not properly issues that one can have with remote patches (report UNSECURE and ERROR 404 patches)",
"rollback on newer array declaration usage (broke compatibility with 5.3)"
],
"maintenance": [
"made patch commands available within the plugin itself (not currently used for anything, potentially used in integration tests in the near future)"
]
},
"4.10.0": {
"feature": [
"forward-port (3.41.0): allow patcher config overrides per package instead of allowing it only per patch definition (reserved key: '_config'). More on this under the topic of 'Patches: shared config' in the README"
]
},
"4.9.0": {
"feature": [
"forward-port (3.40.0): allow patch to target the autoloader root (instead of targeting package root) by configuring 'cwd' key to 'autoload'"
]
},
"4.8.2": {
"maintenance": [
"follow-up to incorrectly released version (4.8.1); no extra changes done"
]
},
"4.8.1": {
"fix": [
"forward-port (3.39.1): patches not applied when dealing with requires that use dev branches (even when version available in package config or when dev branch aliased as proper version)"
]
},
"4.8.0": {
"overview": "all features and fixes in this release are forward-ported from 3.39.0",
"feature": [
"added --brief to list command (skips over description, etc)",
"when using --filter or targeting a specific package with 'redo', 'undo' or 'apply', show only those patches that match with the filter; other patches still applied, just not reported (all actions can still be made visible when using --explicit flag)",
"show information about patches that are removed (when patches are re-applied, show which items were applied, but no longer listed/queued)"
],
"fix": [
"rework on fix done in 3.37.1 for patches that applied half-way while 'patch' command still returned SUCCESS exit code; perform patch command dry-apply output analysis to detect edge-cases that should be considered as failures",
"the command 'list' listing removals even when --filter used",
"the command 'list' --excluded option not properly dealing with filter when --filter used",
"the command 'list' not listing removals when every patch against some package gets removed",
"the command 'list' always listing removed items, even when they do not match with used filter",
"allow both 'undo' and 'redo' command to finish even when there are errors encountered while re-applying some patches (bundled patches might get re-applied; encountered when doing partial/targeted command call); suppress environment flags that tell otherwise (apply still stops on first failure when required)",
"queue resolver re-introducing undo'd patches when patches targeting a package that had bundled patches defined against it",
"show all applied patches when running 'redo' command without a filter (otherwise only matched patches are shown)",
"hide NEW patches (that might be failing) when doing filtered redo/undo calls to avoid too much noise in output where it's pretty clear that developer is working with a sub-selection of patches (all shown when doing explicit call)",
"composer lock still modified when applying patches (leaves empty EXTRA key behind where there previously wasn't one present)"
]
},
"4.7.0": {
"feature": [
"forward-port (3.38.0): hide all information on previously applied patches by default (when patches for certain package are re-applied) and only show the ones that changed, are new or got matches with a filter (--explicit flag added for commands to use old output that shows every patch that gets re-applied)"
],
"fix": [
"forward-port (3.38.0): rollback to fix in 3.37.1 (caused errors for patches that created new files, new solution needed)"
]
},
"4.6.1": {
"fix": [
"forward-port (3.37.1): some patches that patched multiple files applied only half-way through on certain OS's without returning with proper exit code on failure (or failed hunks considered as ignoreable junk)"
]
},
"4.6.0": {
"feature": [
"forward-port (3.37.0): new flag introduced for patch:list to allow including patches that have been ruled out due to mismatch with certain constraint: --excluded"
],
"fix": [
"forward-port (3.37.0): embedded targeting info for bundled patches that declares constrains not processed correctly (@depends,@version)"
]
},
"4.5.0": {
"feature": [
"forward-port (3.36.0): allow '@type bundle' to be used for bundle package instead of using somewhat cryptic '@package *'",
"forward-port (3.36.0): allow multiple types to be combined in embedded info (@type dev+bundle)"
],
"fix": [
"forward-port (3.36.0): multi-line description not presented properly when using composer patch:list command",
"forward-port (3.36.0): bundled patches not included as expected when using embedded patch target info"
]
},
"4.4.3": {
"fix": [
"forward-port (3.35.3): backwards compatibility problems with composer.lock contents for projects that upgraded to latest releases of the plugin and had patches previously applied (boolean values for patches_applied no longer tolerated)"
]
},
"4.4.2": {
"fix": [
"forward-port (3.35.2): lock management reworked (again) to make sure that under no circumstances does the plugin crash while sanitizing the lock"
]
},
"4.4.1": {
"fix": [
"forward-port (3.35.1): lock management reworked to use built-in methods for locating a package to avoid issues with potential aliases, etc"
]
},
"4.4.0": {
"feature": [
"forward-port (3.35.0): list command added (allows listing all registered patches and their state)"
],
"fix": [
"forward-port (3.35.0): bundled patch targets not properly reset when using patch:redo in case patches applied on packages, but installed.json reset to provide no information about applied patches",
"forward-port (3.35.0): patches for packages that are covered with certain bundle patch do not get re-applied when running patch:redo with filter (redo should not leave any patch uninstalled even when executed with a filter)"
]
},
"4.3.0": {
"feature": [
"forward-port (3.34.0): allow patch path strip level to be defined in patch's embedded target-info declaration (@level <int>)"
],
"fix": [
"forward-port (3.34.0): patches queue generator sometimes generated lists that did not queue proper re-applying of patches when dealing with bundles and indirect targets so that 'patch:redo' == 'patch:undo' + 'patch:apply'",
"forward-port (3.34.0): make sure that the removal of 'dev' bundle (or any other type with indirect targets) patches cause proper re-patching of related targets when running with --no-dev",
"forward-port (3.34.1): conflicting project applied patches state when doing a --no-dev call and a filtered undo/redo after that"
]
},
"4.2.1": {
"fix": [
"forward-port (3.33.1): improved error reporting when encountering issues on composer lock cleanup"
]
},
"4.2.0": {
"feature": [
"forward-port (3.33.0): allow patch applied root to be configured per patch to allow patching of files that are mapped by other composer plugins to project root (see more at 'Patches: patch applier cwd options')"
],
"fix": [
"forward-port (3.33.0): switched away from using a class constant name that on older php versions is reserved (new)",
"forward-port (3.33.0): avoid reporting non-vcs package differences as reason for halting the patch applying (which requires package reset)",
"forward-port (3.33.0): full list of applied patches ended up in composer.lock (new: none added, not even 'true' flag)",
"forward-port (3.33.0): multiple dependencies on patches with embedded target info not respected"
]
},
"4.1.1": {
"fix": [
"forward-port (3.32.1): definition list validation command returning with false failures when using #skip on patch paths"
],
"maintenance": [
"forward-port (3.32.1): removing #skip flag from path when encountered (previously it remained in the path)"
]
},
"4.1.0": {
"feature": [
"forward-port (3.32.0): allow comments on any level and with any keyword as long as it starts with underscore (_)"
]
},
"4.0.0": {
"breaking": [
"logic: installation/update/applying patches fails on first patch failure (used to be activated by COMPOSER_PATCHES_FATAL_FAIL); old default behavior usable via COMPOSER_PATCHES_GRACEFUL or using --graceful flag",
"config: removed COMPOSER_PATCHES_REAPPLY_ALL, COMPOSER_FORCE_PATCH_REAPPLY; replaced by 'composer patch:redo'",
"config: removed COMPOSER_PATCHES_FATAL_FAIL, COMPOSER_EXIT_ON_PATCH_FAILURE; replaced by COMPOSER_PATCHES_GRACEFUL",
"config: removed COMPOSER_PATCHES_FROM_SOURCE, COMPOSER_PATCHES_PREFER_OWNER; replaced with --from-source flag on commands (was meant for testing out a patch)",
"config: removed COMPOSER_SKIP_PATCH_PACKAGES, COMPOSER_PATCHES_SKIP_PACKAGES; never really used for anything, could be achieved via using patcher configuration"
],
"feature": [
"allow patch failures to be passed over gracefully with --graceful flag on 'composer patch:*' commands",
"allow patch failures to be passed over gracefully with COMPOSER_PATCHES_GRACEFUL flag",
"allow patch failures to be passed over gracefully with extra/patcher/graceful configuration in root package"
]
},
"3.53.4": {
"fix": [
"bundled patches fail to apply when using patch-mapping configuration due to refactored code in 3.53.2 having messed up argument order used for a sub-function call in BasePathComponent"
],
"branch": "release/3"
},
"3.53.3": {
"fix": [
"patch applier crash when branch alias defined for root package (scenario: root-branch-alias) [pull/73]"
],
"maintenance": [
"make patch commands available when the plugin itself is a root package (just for the sake of allowing people to conduct quick experiments when developing)"
],
"branch": "release/3"
},
"3.53.2": {
"fix": [
"patches applied before packages properly re-installed with Composer V2 (missed the fact that installations, like downloads are now done in asynchronous manner) [issues/70]"
],
"branch": "release/3"
},
"3.53.1": {
"fix": [
"minor issue addressed with V2-style call being in code without version-check (said call is currently backwards-compatible with V1, but you never know ...)"
],
"branch": "release/3"
},
"3.53.0": {
"feature": [
"add support for Composer 2 [issues/59]",
"allow patcher operations to be optionally disabled by re-declarng them with label replaced with: false"
],
"maintenance": [
"introduce ready-to-use development environment setup for quicker developer onboarding [issues/65]",
"improved linter rules to be a it less forgiving on excessive use of whitespace",
"fix an issue where GIT applier was polled within the tests (due to there being repo-within-repo situation which made the applier to be excluded)"
],
"branch": "release/3"
},
"3.52.1": {
"fix": [
"remote patch availability validation crash under certain package setups"
],
"maintenance": [
"improve test coverage to include scenarios where the patches are owned by a sub-package rather than the root"
],
"branch": "release/3"
},
"3.52.0": {
"feature": [
"allow global usage of the plugin when explicitly enabled via environment variable: COMPOSER_PATCHER_ALLOW_GLOBAL_USAGE (pull/45)"
],
"fix": [
"added /F switch to where to add double quotes to windows commands [pull/44]",
"added no-scripts option to avoid executing post-install-cmd [pull/48]",
"strpos() empty needle errors can occur with certain configurations [pull/53]",
"patches-searches path containing .patch fails [pull/58] (with extra modifications)"
],
"maintenance": [
"CI config fixed to use Composer 1.X",
"make it possible to run tests while developing the module on MacOS",
"make sure output assertions on tests don't fail on small terminal windows when composer output gets wrapped",
"update compatibility checker not to fail on false-negatives",
"fix normaliser script not executing as expected after code:deps run"
],
"branch": "release/3"
},
"3.51.2": {
"fix": [
"some errors not properly reported in the 'most likely' errors brief report (for patches with corrupt content)",
"errors not listed when file reference not available within patch (affects brief reporting, everything worked as expected with -vvv)"
],
"branch": "release/3"
},
"3.51.1": {
"fix": [
"allow the plugin to be installed as dependency to globally installed package (as part of dependency of some global package); previously caused every composer call to crash with class declaration conflict",
"patch error reporting includes patch creation date where just path should have been shown",
"patch errors caused by output analysis did not include the raw output line that caused the failure detector to trigger",
"outdated documentation reference in code when specifying unsecure URL endpoint for a patch to be downloaded from"
],
"maintenance": [
"new documentation page added to shed some light to different situations one might find themselves in when a patch applying fails"
],
"branch": "release/3"
},
"3.51.0": {
"feature": [
"allow defining OS-specific applier operation without overwriting the default operation value"
],
"fix": [
"proper support for FreeBSD 'patch' command that does not have the call arguments of --no-backup-if-mismatch and --verbose [issues/38]"
],
"maintenance": [
"documentation split to make it easier to read and work with updating it [issues/38]"
],
"branch": "release/3"
},
"3.50.3": {
"fix": [
"running 'composer update --lock' not cleaning up composer.lock afterwards when patches already applied. No such issue when no patches applied at all (running 'update' with --lock does not apply the patches); This situation resulted in patches being perceived as already applied when a package with such a lock was installed"
],
"maintenance": [
"the state of the test installation not properly reset when composer.lock got corrupted (a'la: 'patches_applied' key ended up there)",
"test run output improvements; less output from composer calls that are not directly relevant to scenarios"
],
"branch": "release/3"
},
"3.50.2": {
"fix": [
"loosened dependency on drupol/phposinfo to make sure that the module is installable on all PHP version (latest release of the module is only covering PHP <7.0 (the constraint used to explicitly state 1.6.1.2, changed to 1.6 which covers all needed PHP versions) [issues/37]",
"validation error for remote patches displayed TMP path in output instead of the URL",
"the 'probable causes' report did not include file path reference"
],
"maintenance": [
"removed lock files from tests to make sure that initial setup always ends up installing the latest package dependencies",
"make sure that under no conditions, the Packagist package will not end up being used in tests (using aliased package)",
"run tests (including the test that the module can be installed) on multiple PHP versions: 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3",
"run Compatibility ruleset on all installations"
],
"branch": "release/3"
},
"3.50.1": {
"fix": [
"the command patch:list not usable when some patch configuration included remote patches that would have resulted in 404 errors on apply (now listing said patches with proper errors)"
],
"maintenance": [
"test coverage increased around dealing with remote patches"
],
"branch": "release/3"
},
"3.50.0": {
"feature": [
"allow defining sha1 checksum for remote patches through 'sha1' key within JSON definition"
],
"fix": [
"the configuration value of 'secure-http' not having any effect (value usage ignored); Now properly handled by remote filesystem implementation",
"allow retries on failed downloads (switch from using remote filesystem to file downloader which allows the usage of caching and retry logic in place for Composer package downloads)"
],
"branch": "release/3"
},
"3.49.3": {
"fix": [
"needless whitespace in output when using patches-search (extra line for patch label added for no reason)"
],
"maintenance": [
"introduces output expectation for each test scenario"
],
"branch": "release/3"
},
"3.49.2": {
"maintenance": [
"package configuration and build flow updates"
],
"branch": "release/3"
},
"3.49.1": {
"maintenance": [
"code quality improvements"
],
"branch": "release/3"
},
"3.49.0": {
"feature": [
"allow very precise configuration for specific OS based on OS names in drupol\\phposinfo\\Enum\\OsName"
],
"fix": [
"switched over to using drupol/phposinfo instead of tivie/php-os-detector which was only detecting the OS that php binary was built for and not the actual OS the php binary was being used [issues/36]"
],
"maintenance": [
"improved dependency compatibility scanner to allow whitelisted issue reports (in case the dependency had mechanics to deal with the reported issue)"
],
"branch": "release/3"
},
"3.48.10": {
"fix": [
"more clear error reporting when encountering patch reversals (failures from log output analysis)"
],
"maintenance": [
"increased test coverage"
],
"branch": "release/3"
},
"3.48.9": {
"fix": [
"certain behaviour flags incorrectly forced to false (explicit flag) when using redo/undo with no option to override said falsey value"
],
"maintenance": [
"improved test coverage where 'redo' and 'undo' also get covered",
"allow multiple commands to be called per test"
],
"branch": "release/3"
},
"3.48.8": {
"fix": [
"patches validation not failing when there are patch files present without patch target definition in JSON files and using sym-linked patch folder (not an issue when using patches-search)"
],
"branch": "release/3"
},
"3.48.7": {
"fix": [
"using printf variable syntax in patch descriptions crashed the patch applier"
],
"branch": "release/3"
},
"3.48.6": {
"fix": [
"the meta-data @skip tag not perceived properly (this actually affected all tags that had no value)"
],
"maintenance": [
"test coverage improved; introduced the possibility to write test scenarios for multiple installations (one using patches-search, other using patches-file, etc)"
],
"branch": "release/3"
},
"3.48.5": {
"fix": [
"basePatch templates not being applied after code changes from last release"
],
"branch": "release/3"
},
"3.48.4": {
"fix": [
"patch file meta-tags conflict in situations where there are values for all of: depends, package, version; the following setup now results in package+version also being listed as dependency"
],
"branch": "release/3"
},
"3.48.3": {
"fix": [
"patch file meta-tags overwriting each-other rather than stacking (when, say @depends is used multiple times)"
],
"branch": "release/3"
},
"3.48.2": {
"maintenance": [
"added notice to the 'most likely error' output (on patch failure) to indicate that the list presented is not the full list of details"
],
"branch": "release/3"
},
"3.48.1": {
"fix": [
"broken compatibility with PHP 5.3 (wrong array syntax used)"
],
"branch": "release/3"
},
"3.48.0": {
"feature": [
"highlight most probable error that caused patch to fail in the non-verbose error message (full logs available when running with -vvv); this change was introduced to make it easier for people to identify issues within patches as the verbose output is extremely noisy [issues/34]"
],
"fix": [
"operation step always gets reported as 'UNKNOWN' when running the apply commands with heightened verbosity [issues/34]",
"hard-coded path separators made patches to fail on certain operation systems (Windows) when applying remote patch [github/33]"
],
"maintenance": [
"exception and call stack directly exposed when executing code with 'halt of first failure'; changed to fail with proper error message (full stack still available with -vvv)"
],
"branch": "release/3"
},
"3.47.2": {
"fix": [
"support for older (<1.1) Composer releases faultily implemented where the availability with CommandsProvider was incorrectly checked for"
],
"branch": "release/3"
},
"3.47.1": {
"fix": [
"wrong path used for pre-loading classes while running composer commands when the plugin package used as ROOT",
"removed all syntax/code that was not compatible with 5.3",
"removed/replaced all dependencies that were not compatible with 5.3",
"having a patch for a back-ported fix for a package where when the package gets updated, the update could cause reverse-apply of the patch, thus reintroducing issue that was fixed in newer release (only happens with patches that should be declared with upper-capped version constraints but are not for some reason). This will cause patch failure from now on",
"don't provide patch commands when plugin on older (<1.1) Composer versions [github/31]",
"always load patches in alphabetical order from file-system when using patches-search (unless @after, @before directives used within the patch file; introduced in FileSystemUtils, using natural sorting) [github/29]",
"fail the whole patching process with fatal exception when none of the patch applier commands (defined in the plugin config) are available [github/30]",
"log output typos corrected"
],
"maintenance": [
"improved early autoloader setup within proxy plugin",
"code normalised according to coding standards",
"simple integration tests added that test the patch applying in sandbox Composer project"
],
"branch": "release/3"
},
"3.47.0": {
"feature": [
"allow platform requirement dependencies on patches a'la php:>=7.2 (previously only package dependencies could be declared); usable with \"depends\" config or @depends tag"
],
"fix": [
"malformed package reset queue in some edge cases when using bundled patches which targets packages that have no direct patches applying on them",
"load all the plugin classes on startup (to avoid crashes on patch apply); the old plugin logic will be used til the end of the particular Composer call that upgraded the plugin [github/28]"
],
"branch": "release/3"
},
"3.46.0": {
"overview": "This release comes basically with re-written logic to the core of the patch apply queue generation due to issues with the old logic. The listing command now also uses same code which removes some of the confusion when using apply and seeing something different than what list reports",
"feature": [
"added --with-affected argument option for path:list command to list patches that indirectly are affected by the new/changed patches (would be re-applied on actually patch:apply due to package resets caused by new/changed statuses)",
"patch owner embedded in applied patch registry to provide proper REMOVED information when patch gets removed"
],
"fix": [
"bundled patches partially reset when removing some dev-only (with --no-dev option) patches that targeted same packages as bundles did; Issue caused by only partially recursive lookup on an impact of re-installing certain composer package",
"the alias argument for --explicit, --show-reapplies did not trigger explicit output",
"make sure that repeated patch:undo calls don't reinstall previously undo'd patches",
"make sure that patch:list uses same functionality that the main patch applier uses, thus guaranteeing that path:list will list the things as they'd be processed in actual patch apply run"
],
"branch": "release/3"
},
"3.45.0": {
"feature": [
"allow patch:validate to use only patches that the root package owns: --local"
],
"fix": [
"patch contents not properly analysed when working with Bundled patches or using patches-search or patcher/search when trying to apply patches on Windows; Reason: using OS-specific EOL constant to split file content to lines [github/26]"
],
"branch": "release/3"
},
"3.44.0": {
"feature": [
"Allow declaration of pathces that only apply when owner package is used as ROOT package (README/Patches: local patch)"
],
"branch": "release/3"
},
"3.43.0": {
"feature": [
"allow patch file paths, etc to be defined under extra/patcher key to make sure that they don't hog up too much main level keys of 'extra' config for given package (old keys are also still supported)",
"allow some patches to be ignored when running patch:validate by providing list of path ignores in package's configuration: extra/patcher/ignore (takes array of ignored paths)",
"allow patcher operations to be split to have separate sub-operation per OS type [github/26]"
],
"fix": [
"some path processing functions did not use proper directory separator constant",
"patches not applied properly on Windows due to using 'which' instead of 'where' when resolving the patch applier absolute path [gitdhub/26]"
],
"branch": "release/3"
},
"3.42.2": {
"fix": [
"additional rollbacks on newer array declaration usage (broke compatibility with 5.3)"
],
"branch": "release/3"
},
"3.42.1": {
"fix": [
"rollback on newer array declaration usage (broke compatibility with 5.3)"
],
"branch": "release/3"
},
"3.42.0": {
"feature": [
"added more informative patches configuration JSON validation (that gives exact details on what's wrong with the JSON file)",
"added alias for --excluded argument: --with-excludes for more intuitive usage and to move towards more self-documenting arguments",
"added alias for --explicit argument: --show-reapplies for more intuitive usage and to move towards more self-documenting arguments",
"added reason to patch:validation errors (either 'NO FILE' or 'NO CONFIG')"
],
"fix": [
"incorrect TMP path on Windows [github/22]",
"crash when running patch:list in situation where none of bundled patches dependencies is directly available (expectation: should be able to list all patches even when none of the targets are installed)",
"the patch:validate not catching situations where there's a patch JSON declaration that has no corresponding file at the place where the declaration targets",
"better error message when wanting to download patches from unsecure URLs by referring to documentation of the plugin rather than to documentation of Composer (the module has it's own 'secure-http' config option that only affects patches)",
"patch validation not properly issues that one can have with remote patches (report UNSECURE and ERROR 404 patches)"
],
"maintenance": [
"made patch commands available within the plugin itself (not currently used for anything, potentially used in integration tests in the near future)"
],
"branch": "release/3"
},
"3.41.0": {
"feature": [
"allow patcher config overrides per package instead of allowing it only per patch definition (reserved key: '_config'). More on this under the topic of 'Patches: shared config' in the README"
],
"branch": "release/3"
},
"3.40.0": {
"feature": [
"allow patch to target the autoloader root (instead of targeting package root) by configuring 'cwd' key to 'autoload'"
],
"branch": "release/3"
},
"3.39.2": {
"maintenance": [
"follow-up to incorrectly released version (3.39.1); no extra changes done"
],
"branch": "release/3"
},
"3.39.1": {
"fix": [
"patches not applied when dealing with requires that use dev branches (even when version available in package config or when dev branch aliased as proper version)"
],
"branch": "release/3"
},
"3.39.0": {
"feature": [
"added --brief to list command (skips over description, etc)",
"when using --filter or targeting a specific package with 'redo', 'undo' or 'apply', show only those patches that match with the filter; other patches still applied, just not reported (all actions can still be made visible when using --explicit flag)",
"show information about patches that are removed (when patches are re-applied, show which items were applied, but no longer listed/queued)"
],
"fix": [
"rework on fix done in 3.37.1 for patches that applied half-way while 'patch' command still returned SUCCESS exit code; perform patch command dry-apply output analysis to detect edge-cases that should be considered as failures",
"the command 'list' listing removals even when --filter used",
"the command 'list' --excluded option not properly dealing with filter when --filter used",
"the command 'list' not listing removals when every patch against some package gets removed",
"the command 'list' always listing removed items, even when they do not match with used filter",
"allow both 'undo' and 'redo' command to finish even when there are errors encountered while re-applying some patches (bundled patches might get re-applied; encountered when doing partial/targeted command call); suppress environment flags that tell otherwise (apply still stops on first failure when required)",
"queue resolver re-introducing undo'd patches when patches targeting a package that had bundled patches defined against it",
"show all applied patches when running 'redo' command without a filter (otherwise only matched patches are shown)",
"hide NEW patches (that might be failing) when doing filtered redo/undo calls to avoid too much noise in output where it's pretty clear that developer is working with a sub-selection of patches (all shown when doing explicit call)",
"composer lock still modified when applying patches (leaves empty EXTRA key behind where there previously wasn't one present)"
],
"branch": "release/3"
},
"3.38.0": {
"feature": [
"hide all information on previously applied patches by default (when patches for certain package are re-applied) and only show the ones that changed, are new or got matches with a filter (--explicit flag added for commands to use old output that shows every patch that gets re-applied)"
],
"fix": [
"rollback to fix in 3.37.1 (caused errors for patches that created new files, new solution needed)"
],
"branch": "release/3"
},
"3.37.1": {
"fix": [
"some patches that patched multiple files applied only half-way through on certain OS's without returning with proper exit code on failure (or failed hunks considered as ignoreable junk)"
],
"branch": "release/3"
},
"3.37.0": {
"feature": [
"new flag introduced for patch:list to allow including patches that have been ruled out due to mismatch with certain constraint: --excluded"
],
"fix": [
"embedded targeting info for bundled patches that declares constrains not processed correctly (@depends,@version)"
],
"branch": "release/3"
},
"3.36.0": {
"feature": [
"allow '@type bundle' to be used for bundle package instead of using somewhat cryptic '@package *'",
"allow multiple types to be combined in embedded info (@type dev+bundle)"
],
"fix": [
"multi-line description not presented properly when using composer patch:list command",
"bundled patches not included as expected when using embedded patch target info"
],
"branch": "release/3"
},
"3.35.3": {
"fix": [
"backwards compatibility problems with composer.lock contents for projects that upgraded to latest releases of the plugin and had patches previously applied (boolean values for patches_applied no longer tolerated)"
],
"branch": "release/3"
},
"3.35.2": {
"fix": [
"lock management reworked (again) to make sure that under no circumstances does the plugin crash while sanitizing the lock"
],
"branch": "release/3"
},
"3.35.1": {
"fix": [
"lock management reworked to use built-in methods for locating a package to avoid issues with potential aliases, etc"
],
"branch": "release/3"
},
"3.35.0": {
"feature": [
"list command added (allows listing all registered patches and their state)"
],
"fix": [
"bundled patch targets not properly reset when using patch:redo in case patches applied on packages, but installed.json reset to provide no information about applied patches",
"patches for packages that are covered with certain bundle patch do not get re-applied when running patch:redo with filter (redo should not leave any patch uninstalled even when executed with a filter)"
],
"branch": "release/3"
},
"3.34.1": {
"fix": [
"conflicting project applied patches state when doing a --no-dev call and a filtered undo/redo after that"
],
"branch": "release/3"
},
"3.34.0": {
"feature": [
"allow patch path strip level to be defined in patch's embedded target-info declaration (@level <int>)"
],
"fix": [
"patches queue generator sometimes generated lists that did not queue proper re-applying of patches when dealing with bundles and indirect targets so that 'patch:redo' == 'patch:undo' + 'patch:apply'",
"make sure that the removal od 'dev' bundle (or any other type with indirect targets) patches cause proper re-patching of related targets when running with --no-dev"
],