summaryrefslogtreecommitdiff
path: root/NEWS
blob: 0361e6ac61081b5798157e5e3f51216ae187952b (plain)
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
portage-3.0.46 (2023-04-07)
---------------

Breaking changes:
* Drop STREEBOG{256,512} support

  Support was originally added in https://bugs.gentoo.org/597736, but
  exclusively via two modules (pygost and pygcrypt) which aren't packaged in
  Gentoo - or seemingly any other major distribution.

  We're dropping both pygost and pygcrypt compatibility: pygost has been
  removed from pypi and pygcrypt is inactive upstream.

  pygost being yanked from pypi made CI start to fail too and silently dropping
  it from CI without addressing the situation which was already suboptimal (insufficient
  testing) wasn't deemed acceptable.

* Inline most code from prepinfo in install_qa_check() (bug #899898).
  Output a deprecation warning for prepinfo and prepman when they are called
  from an ebuild.

Cleanups:
* Drop support for pygcrypt

  The codepath has been disabled since 2017 because of https://bugs.gentoo.org/615620,
  so let's finally clean it up.

  pygcrypt *prior to 2017* was used for RMD160/WHIRLPOOL/SHA3_256/SHA3_512
  if hashlib didn't provide these *and* the sha3 module didn't either.

  pygcrypt last received a release in 2017 too.

* Drop support for pyblake2, sha3

  We've only supported >= Python 3.6 for quite some time, so these codepaths are
  obsolete given hashlib will always provide support for BLAKE2 and SHA3.

  Neither pyblake2 nor sha3 are even packaged in Gentoo anymore either (the
  Python bindings).

* Drop most of the pycrypto/pycryptodome fallbacks

  >= Python 3.6 includes support for BLAKE2 and SHA3 in hashlib, so these
  aren't needed anymore.

  pycrypto fallback support continues to exist for RMD160.

* Drop support for WHIRLPOOL logic via mhash

  Drop mhash fallback logic for WHIRLPOOL as we already have:
      hashlib > pycrypto > bundled C > bundled pure Python
  in terms of priority for providers.

Features:
* Respect the NO_COLOR environment variable for disabling color.

  The new quasi-standard for disabling ANSI color is to check for the NO_COLOR
  environment variable and disable color when the variable has a nonempty value.
  See bug #898224. Portage previously used NOCOLOR. It continues to support NOCOLOR
  for a time for compatibility.

* ci: enable running Portage tests on sourcehut builds

  The build manifests and supporting files can be found in .builds/

  Current limitations compared to GitHub actions:

  - Does not test with PyPy (see bug #903709)
  - Runs all all tests on each push (unless pushed with `-o skip-ci` which skips
    all tests)
  - Runs lint and ci jobs concurrently, but each Python version within those is
    tested sequentially. This means tests will take longer to complete, unless
    the run fails partway through (~1h vs ~15-20m).

  Benefits compared to GitHub actions:

  - Can monitor test progress over SSH
  - Can investigate failed tests over SSH
  - ... not GitHub ;)

Bug fixes:
* dbapi: Handle mismatched binpkg structure during pkgmoves (bug #877271,
  bug #903917, bug #903926).

* tests: util/test_shelve: fix test failure if the backend for the shelve module
  does not create the shelve db using the literal filename.

portage-3.0.45.3 (2023-03-19)
----------------

Features:
* New portage FEATURE warn-on-large-env, to emit a warning if portage
  executes an ebuild-related child process with a large environment.

Bug fixes:
* repository: config: Handle more error cases when determining repository
  volatility (bug #900683).

portage-3.0.45.2 (2023-03-04)
----------------

Bug fixes:
* repository: config: Fix initial sync of repositories (bug #899208). Regression
  from portage-3.0.45, but the real bug is from portage-3.0.42.

portage-3.0.45.1 (2023-02-27)
----------------

Bug fixes:
* install-qa-check.d/90config-impl-decl: fix handling of non-ASCII quotes when
  extracting the function name. Detect "-Werror=implicit-function-declaration"
  as used by GCC.

portage-3.0.45 (2023-02-26)
--------------

Features:
* Support new ELF machine code: AMDGPU (bug #795825)

* ebuild: Set GNUMAKEFLAGS="--output-sync=line" to ensure build logs are written
  to synchronously when running GNU make in parallel. This option is only set if
  MAKEOPTS and GNUMAKEFLAGS are left unset by the user.

* emerge: add --onlydeps-with-ideps=<y|n> option (bug #890777)

* emerge: add --update-if-installed option. This is useful for one-shot
  emerge commands to be run across several machines to upgrade packages
  only if they're installed.

* install-qa-check.d: 60pkgconfig: add opt-in QA_PKGCONFIG_VERSION check

* install-qa-check.d: add 90config-impl-decl to detect -Wimplicit-function-declaration
  in config.log, CMakeError.log, and meson-log.txt. ebuilds can add functions to
  the QA_CONFIG_IMPL_DECL_SKIP array to skip false positives.

  The following entries are created in qa.log under the tag 'config.log-impl-decl':

  * 'line' - line number in the config log where the warning is found
  * 'func' - the function that is implicitly declared

  (bug #892651)

* emerge: Log completion of package installs.

Bug fixes:
* gpkg: Handle out-of-space errors (bug #891391).

* gpkg: GPG signed gpkg will be ignored for profiles updates.

* binpkg: Show warning if the binhost is missing metadata (outdated). (bug #884869)

* binpkg: Improve error handling for binpkg detection. (bug #893638)

* portage(5): List volatile option as a separate entry (bug #888585).

* emaint: Changed default action for emaint target sync to 'auto'.

* tests: news: significantly improved test coverage (bug #889330).

* git: also report sync errors for volatile repos. Portage would previously simply
  report success if an volatile repository failed to sync (bug #895526).

* git: correct detection of volatile repositories (bug #895526).

* ebuild(5): alphabetize QA_* vars

portage-3.0.44 (2023-01-15)
--------------

Features:
* emerge: Show time taken to calculate dependency resolution with
  emerge --verbose.

* cleanups: Use flynt on the codebase to upgrade to Python f-strings everywhere.

* process: Show diagnostic message if exec failed with E2BIG

Bug fixes:
* ebuild: the PATH variable exported to ebuilds has been changed:
  The PATH setting from /etc/profile.env is appended to portage-internal
  paths, and ROOTPATH is no longer included (bug #607696, #693308, #888543).

* emerge: Fix installation of binpkgs by path (bug #873202, bug #890291).

* Fix crash with pypy when PORTAGE_SCHEDULING_POLICY has been set (bug #876031).

portage-3.0.43 (2023-01-02)
--------------

Bug fixes:
* news: Fix matching profile paths with Display-If-Profile in some cases.

* checksum: Rewrite Whirlpool implementation as a C extension to substantially improve
  performance (bug #885909).

  This only takes effect with OpenSSL 3 and newer (unnecessary otherwise).

  Whirlpool is considered deprecated within Portage and we recommend that
  repository maintainers remove it from `metadata/layout.conf`!

* sync: git: Fix "is shallow git repository" check.

* bin: Rewrite signal handling which will now correctly rethrow SIGINT
  and not confuse shells (bug #887817).

* bin: Pass -S to file(1) to avoid seccomp sandbox issues (bug #811462, bug #889046).

  Files being installed by Portage are generally trusted but also the
  syscalls allowed by file are quite broad anyway.

  Things can go catastrophically wrong if file misses valid input,
  as we may have invalid VDB metadata.

portage-3.0.42 (2022-12-26)
--------------

Breaking changes:
* Portage changed its git sync behaviour for repositories with sync-type=git.

  Recently in Portage 3.0.39 (for sync depth) and Portage 3.0.40 (git reset/clobbering),
  Portage started doing two things:

  1. Clobbering changes to repositories with sync-type=git

  If git is pulling from a CDN, Portage may on one sync receive state X, but
  on a subsequent sync receive state X-1. This can cause an odd state
  where git wants to resolve conflicts and manual intervention is required,
  hence needing git reset.

  This situation was often worse with sync-depth=1 and would lead
  to orphaned files hence needing git clean.

  2. Defaulted to sync-depth=clone-depth=1.

  The motivation here was because of disk space growing unbounded
  otherwise, as a full disk could lead to sync failure. It also makes sense
  when considered within the school of thought / motivation listed above
  (prioritising a successful sync and then making an optimisation
  based on how we achieve that).

  Portage 3.0.42 will now only make a repository shallow if:
  1. volatile=yes and it is a new sync (i.e. it was not deep before), or
  2. volatile=no  and sync-depth is unset in repos.conf.

  --

  To allow users to opt-out of these destructive changes, we now
  have a repository setting called 'volatile'.

  * If volatile=yes, the repository is assumed to be user-modifiable
    and Portage will NOT prioritise successful sync over preserving
    repository state.

  * If volatile=no, the repository is assumed to only be modified
    by Portage, and Portage will try its best to ensure syncs continue
    to work.

  The default value of 'volatile' is determined as follows:
  - If the repository is under /var/db/repos or if it is owned by either
    'portage' or 'root', then it defaults to 'no'. That is, portage
    assumes full control over the repository, potentially performing
    destructive changes to the repository.
  - If the repository is not under /var/db/repos or owned by a different
    user than 'portage' or 'root', then it defaults to 'yes'. That is,
    portage assumes the repository is user owned and does *not* perform
    any destructive changes.

Features:
* cnf: make.conf.example.loong: add for the loong arch (bug #884135).

* sync: git: only perform destructive operations like 'git reset' to keep
  sync working and the repository in a predictable state for sync-type=git
  repositories if the repository is not marked volatile.

* sync: git: only perform shallow updates if the repository is a shallow one
  or if the repository is not marked volatile.

* sync: git: run 'git clean' in git repositories if they are marked as
  non-volatile.

Bug fixes:
* glsa: Abort if a GLSA's arch list doesn't match the expected format (bug #882797).

* install-qa-check.d: 60pkgconfig: avoid using grep -P (PCRE) unnecessarily (bug #884285).

* etc-update: Apply defences for patsub_replacement being default on in Bash 5.2
  (bug #881383).

* make.conf(5): Note the various file suffixes / file extensions used
  for binary packages.

* logging: Write logs under BROOT, not EPREFIX.

portage-3.0.41 (2022-11-04)
--------------

Features:
* vartree: On collisions which are non-fatal (e.g. orphaned files when using
  FEATURES="protect-owned"), Portage now has friendlier output
  by using ewarn rather than eerror.

* cleanups: Use pyupgrade on the codebase (up to Python 3.8) to use newer
  idioms.

Bug fixes:
* Fixed possible corruption of GPKG multi-instance binary packages on upgrade.
  Bug #877271.

portage-3.0.40 (2022-12-01)
--------------

Features:
* Optimize _slot_operator_check_reverse_dependencies by caching using
  lru_cache. In a ChromeOS use case, this patch decreases the running time from
  311s to 197s with almost no memory usage increase. See bug #883071.

* config: /etc/portage/sets.conf can now be a directory. Ditto for the Portage extension
  supporting sets.conf in ebuild repositories.

* sets: Tests added for VariableSet changes to check @golang-rebuild works as
  intended.

* cleanups: Drop long-obsolete Jython compatibility code.

* cleanups: Use designated initializer syntax in src/ (C bits).

* Add support for a distinct SYSROOT location that is not equal to / or ROOT.
  This is only expected to be used for cross-bootstrapping a new system from
  scratch using a crossdev environment under /usr/${CHOST}.

Bug fixes:
* ebuild: Handle Bash 5.2's change in behavior which enables the shopt
  'patsub_replacement' by default. This is needed to avoid breaking existing
  working ebuilds. Future EAPIs will need to adjust the logic
  added by this change. See bug #881383.

* sync: Clobber repositories using sync-type=git to match rsync behavior. This
  helps with issues where git-synced repositories can become confused
  if the remote is a CDN and then starts to diverge, preventing further
  syncs.

* portage: sets: Fix DeprecationWarning in sets.

* install-qa-check.d: 90gcc-warnings: Disable -Wimplicit-function-declaration being
  fatal for now. The number of failures in bug #870412 is too large for the time
  being.

* Fix definition of ESYSROOT to use SYSROOT's prefix. For a given location, we
  were basing ESYSROOT on the prefix of that location instead of the prefix used
  by the SYSROOT location. For example, if BROOT=/foo, ROOT=/bar, EPREFIX=/baz,
  EROOT=/bar/baz, and SYSROOT=/ then ESYSROOT should be /foo, not /baz.

* depgraph: Resolve atoms using the correct root. This bug may have played out
  in different ways, but one example was a rebuild in / causing the same package
  to be added to ROOT, even when it had no other reason to be. See bug #520112.

* env-update: Also generate PATH definition in systemd user environment file
  /etc/environment.d/10-gentoo-env.conf

* bintree: Properly assign filenames for remote binpkgs.

* --disable-static is only passed for libtool-enabled configure scripts in EAPI 8.
  This avoids annoying warnings when a configure script has a flag such as
  --disable-static_link that would then trigger a QA warning (bug #814380).

portage-3.0.39 (2022-11-20)
--------------

Features:
* gpkg: Call xz and zstd with -T N where N is the number of jobs from ${MAKEOPTS}
  for parallel compression (xz & zstd) and decompression (xz with newer versions).

* gpkg: Add per format compression flags for binpkgs. This adds new config
  options BINPKG_COMPRESS_FLAGS_[format] to be used for different compression
  methods. General BINPKG_COMPRESS_FLAGS will be ignored if current method had
  specified BINPKG_COMPRESS_FLAGS_[format] (bug #871573).

* sync: git: git will sync with --depth=1 unless otherwise specified in repos.conf
  (bug #824782).

* install-qa-check.d: 90gcc-warnings: Add additional code quality warnings
  which are indicative of problems with LTO in particular:
  * -Wbuiltin-declaration-mismatch
  * -Wlto-type-mismatch (LTO esp.)
  * -Wmismatched-dealloc
  * -Wodr (LTO esp.)
  * -Wreturn-type
  * -Wstringop-overflow (GCC, FORTIFY_SOURCE)
  * -Wfortify-source (Clang, FORTIFY_SOURCE)
  * -Wstrlcpy-strlcat-size
  * -Wstrncat-size
  * -Wsuspicious-bzero
  * -Wvarargs
  * -Wargument-undefined-behaviour (Clang)
  * -Wincompatible-function-pointer-types (Clang, becomes fatal in Clang 16)
    (note we already have -Wincompatible-pointer-types in the list for GCC)
  * -Wundefined-reinterpret-cast (Clang, C++ strict aliasing)
  * -Wcast-function-type-strict (Clang, CFI)
  * Further -Wformat matches for missing specifiers.
    In future, we may warn on all -Wformat (in particular because of e.g.
    time_t & LFS).

* install-qa-check.d: 90gcc-warnings: Always die on -Wimplicit-function-declaration
  and remove bin/check-implicit-pointer-usage.py of dubious licencing (it was
  broken since GCC 4.5 because of output changes anyway, bug #365655).

  -Wimplicit-function-declaration becomes an error in Clang 16 onwards and
  GCC is likely to do the same from 14 onwards. See bug #870412.

* ecompress, etc: Support additional compression suffixes for texinfo:
  .Z, .bz2, .lzma, .lz, .xz, .zst (bug #757525).

Bug fixes:
* binpkg: Deprecate BINPKG_FORMAT in the binpkg manifest ('Packages') because
  it can become out-of-sync with reality and shouldn't be relied upon anyway
  (bug #877419).

* binpkg: Add various asserts / integrity checks to detect structure mismatches
  and detect problems earlier (bug #877357, bug #877271, bug #877419).

* binpkg: gpkg: Try to correct mismatched structures (old/new gpkg structure)
  (bug #877271).

* binpkg: gpkg: Handle package renames ('updates') where the same category was
  used but with a new package name (bug #877357).

* binpkg: gpkg: Don't silence compressor stderr to ease debugging (bug #877215).

* Manifest: Fix Manifest.addFile() calls and add tests (bug #875860).

* ecompress, etc: Pass --quiet to xz to reduce noise from "reducing threads"
  messages.

* ecompress, etc: Pass --memlimit-compress=50% to xz to avoid breakage
  on 32-bit systems with large -Tn. Required for < xz-5.3.3_alpha and
  has an equivalent effect to the limiting that comes with newer xz versions.
  We don't need it for decompression as it's there by default in newer xz
  and it's a no-op in older xz.

* emerge(1), make.conf(5), xpak(5): document BINPKG_FORMAT and the gpkg binary
  packate format further.

* sync: git: Fix sync printing local repo path (bug #875812)

portage-3.0.38.1 (2022-10-04)
--------------

Bug fixes:
* ecompress: Fix typo in ___makeopts_jobs (bug #874597).

portage-3.0.38 (2022-10-01)
--------------

Features:
* unpack now calls xz(1) with -T N where N is the number of jobs from ${MAKEOPTS}.
  This allows decompression in parallel with new enough xz (>= xz-utils 5.3.3 alpha)
  and where the source file was compressed using the parallel xz compressor
  (which becomes the default with newer xz too).

* portage: sets: Parse INCLUDES/EXCLUDES in VariableSet which allows properly
  checking for dependencies. Update @golang-rebuild accordingly which now
  includes all packages depending on dev-lang/go (bug #827974, bug #865115)

* cnf: Provide a @rust-rebuild set, similar to @golang-rebuild.

* bin: ecompress: xz, zstd: Pass -T N where N is the number of jobs from ${MAKEOPTS}
  to xz, zstd for parallel compression.

* bin: ecompress: xz: Pass -9 to xz for compression level like we do for bzip2 & gzip.

Bug fixes:
* emerge: Scheduler: Fix filenames for binpkgs in some cases - reuse existing
  filename and don't allocate a new one (bug #872392).

* dbapi: bintree: Avoid fetching 'Packages' multiple times (bug #864259).

* binpkg: Handle failure of various BINPKG_COMPRESS_* commands (bug #871570).

* data: Fix PORTAGE_USERNAME default (bug #873088).

* bin: isolated-functions.sh: return number of CPUs in ___makeopts_jobs as default
  instead of 1 to match Portage's behavior on the Python side.

* bin: ecompress: Recognize .lz, .lzo, .lz4, and .zst as compressed file
  suffixes for the purposes of the internal compressed file collision check.

* bin: ecompress: zstd: Set '-q --rm' in PORTAGE_COMPRESS_FLAGS to behave
  like other compressors.

* portage: _global_updates: Fix update summary output.

portage-3.0.37 (2022-09-23)
--------------

Bug fixes:
* _emerge: SpawnProcess: Avoid sandbox violations with PROPERTIES="interactive"
  when accessing /dev/tty* (bug #870310).

* _emerge: Binpkg: Don't create empty stray binpkgs (bug #870283).

* bin: gpkg-sign: Check gpg configuration before using (bug #869470).

* portage: gpkg: Allow missing files (needed for when ebuilds touch
  ${EROOT} in pkg_*) when creating binpkgs with quickpkg (bug #870229).

* portage: getbinpkg: Fix --getbinpkgonly command list with e.g. rsync (bug #866197).

* portage: checksum: Fix PORTAGE_CHECKSUM_FILTER. Regression from 3.0.31.

portage-3.0.36 (2022-09-09)
--------------

Bug fixes:
* The layout of gpkg (new binpkg format) packages has been fixed (bug #865905).

* Fix getbinpkg fetching (bug #864160).

portage-3.0.35 (2022-08-23)
--------------

Features:
* Portage can now set scheduling policies using the PORTAGE_SCHEDULING_POLICY
  and PORTAGE_SCHEDULING_PRIORITY variables. See make.conf.example for details.

  See also https://wiki.gentoo.org/wiki/Portage_niceness.

* The header of build.log now contains the package's slot (bug #864382).

Bug fixes:
* xml: Fix XML node parsing (resulted in duplicate USE flag descriptions
  in gentoolkit, bug 858791). This code is thought to have only one
  consumer (gentoolkit, and only as of its most recent releases), so
  impact is not severe.

* portage: dbapi: porttree: fix _set_porttrees() to operate correctly if passed
  a generator. Fixes e.g. blank emerge --metadata caches in /var/cache/edb
  which affected eix (bug #865635). Regression from 3.0.31.

* logging: don't clutter with a global logger and instead scope to
  each module. Allows further logging refactoring in future.

* estrip: fix double slash for older EAPIs (bug #862600).

* estrip: avoid spurious NEEDED warning when no ELF files installed for
  < EAPI 7 (bug #749624, bug #862606).

* estrip: apply scanelf optimisation for EAPI 7+ too (bug #749624, bug #862606).

* dispatch-conf: respect (E)ROOT

* install-qa-check.d: 60pkgconfig: drop noisy pkg-config mismatched Version
  field check (bug 857654).

* install-qa-check.d: 60pkgconfig: fix --validate check by adding
  ${ED}/usr/{lib*,share} to search path.

* install-qa-check.d: 60pkgconfig: only check defined variables for
  ${EPREFIX} compliance (bug 860825).

* install-qa-check.d: 60pkgconfig: display the detected version from
  the .pc file (improves the QA warning output), and hint to the user/developer
  about the existence of QA_PKGCONFIG_VERSION to silence the warning.

* install-qa-check.d: 60pkgconfig: use eqatag for nicer output.

* install-qa-check.d: 60pkgconfig: use ver_test where possible in version
  comparison checks to avoid warning if the Version field in the .pc file
  is equivalent to the ebuild version.

* install-qa-check.d: 80libraries: include Darwin/Mach-O objects in checks.

* install-qa-check.d: 80multilib-strict: use file/find from Prefix instead
  of absolute paths in /usr/bin.

* install-qa-checks.d: 90gcc-warnings: add arm64, aarch64 (used by Apple),
  loongarch64, riscv64, s390x to list of 64-bit arches which affects the
  severity of some warnings (like pointer truncation).

* install-qa-check.d: 90world-writable: include EPREFIX in paths.

* portage: output: update obsolete /etc/init.d/functions.sh path.

* bin: style tweaks to conform to Gentoo style (mostly variable bracing).

* doins: fix D check, add EPREFIX check

* misc-functions.sh: add Prefix fixups, like including EPREFIX in
  INSTALL_MASK for /usr/share for noman, noinfo, nodoc.

* phase-function.sh: mark ED, EROOT read-only variables

* eapi.sh: cleanup obsolete references to unofficial 5-hdepend EAPI.

* isolated-functions.sh: sync __makeopts_jobs implementation with
  multiprocessing.eclass.

* ebuild(1): improve descriptions of various phase functions.

* emerge(1): mention --with-bdeps=n behavior for both --usepkg (-k) and
  --usepkgonly (-K) (bug #863422).

* ecompress: add option to lz4 in order to be able to compress multiple
  files at once (bug #672916).

portage-3.0.34 (2022-07-20)
--------------

Bug fixes:
* checksum: fix trying to use discard on a frozenset().

* ebuild(5): mention doexe behavior is undefined if exeinto not yet called.

* ebuild(5): fix typos.

portage-3.0.33 (2022-07-18)
--------------

Bug fixes:
* env-update: Handle BROOT vs ROOT distinction for PATH (and other
  variables like PREROOTPATH and ROOTPATH). The issue being that
  only some variables are relevant for execution (and hence need
  to be derived from BROOT), while others need to correspond to
  EROOT for e.g. library paths. This should help with Clang
  stage building.

* Build: Fix test suite file data processing (copying of .gnupg data
  for the gpkg tests led to a failure in src_test in the portage ebuild).

* emerge: drop obsolete fixpackages warning (as a result of refactoring,
  started to show on every emerge, but is harmless and left over
  from many years ago). Bug #858407.

* quickpkg: Fix quoting/splitting of BINPKG_COMPRESS_FLAGS arguments. Bug #857933.

* estrip: fix double prefix (regression from "don't call estrip twice" fix
  in 3.0.31). Bug #858818.

* ebuild(5): dolib, libopts: mention dolib, libopts being banned in EAPI 7.

* ebuild(5): dohtml: mention dohtml is banned in EAPI 7.

* ebuild(5): hasv: mention hasv is banned in EAPI 8.

* ebuild(5): dosym: mention dosym -r for EAPI 8.

* ebuild(5): einstall: mention einstall was banned in EAPI 6.

* ebuild(5): econf: add --docdir and --htmldir for EAPI 6,
  add --with-sysroot for EAPI 7, add --datarootdir and --disable-static for EAPI
  8.

* ebuild(5): econf: drop --disable-dependency-tracking from "example"
  because it's confusing (implies it was always added, even before EAPI 4).

* ebuild(5): modernize examples slightly.

portage-3.0.32 (2022-07-11)
--------------

Bug fixes:
* Fix marking all news items as relevant. See bug #857669.

* Allow nested ebegin again while there's a lack of consensus on banning it.

* Fix use of deprecated (now removed) getchildren() call in XML parser,
  which caused failures with gentoolkit. See bug #857537. (Note that this
  was not originally in the release notes for 3.0.32, but the fix was in
  3.0.32).

* Fix doc generation by removing reference to removed EAPIs. See bug #857486.

portage-3.0.31 (2022-07-10)
--------------

Breaking changes:
* repoman support dropped. Please migrate to pkgcheck. See bug 835013.

* Remove support for never-official EAPIs: "4-python", "5-progress".
  Further cleanups as a result allowed removal of "USE alias" support too.

* Drop support for Python 3.6. It's been EOL upstream since 2021-12-23.
  The minimum version of Python for Portage is now Python 3.7.

Features:
* GLEP 78 "gpkg" binary package format support, including the ability to sign
  binpkgs! See bug 500630, bug 659864, bug 672672, bug 773259, bug 820578.

  This is still somewhat experimental!

  To try it out:
  - set BINPKG_FORMAT="gpkg" in make.conf;

  - optionally, set FEATURES="binpkg-signing binpkg-request-signature", and so on.
    See cnf/make.conf.example for the full details, options, and documentation.

* emerge: Add -X short option for --exclude.

* emerge: Support the "foot" terminal for title updates.

* Recognize LoongArch ABIs in multilib_category.

* depclean: Return failure via exit code if requested packages
  aren't depcleaned. See bug 851750.

* estrip: Optimize calls (avoid duplicate call) by using previously
  collected scanelf data. See bug 749624

* autoclean: Optimize unmerges by only enabling autoclean for global
  updates and/or depcleans. This avoids needing to iterate over all
  installed packages after each individual removal.

* vartree: Optimize by skipping `env-update` call (which is expensive, as
  it ends up calling `ldconfig` to regenerate ld.so.cache) if no files
  were installed (e.g. virtual/).

* vartree: Optimize by avoiding VDB lock contention (avoid taking
  lock if no blockers).

* QA: warn if 'eend' is called without a corresponding 'ebegin',
  and vice-versa: if 'ebegin' is called without a corresponding 'eend'.
  See bug 835824 and bug 835823.

* QA: install-qa-check.d: Add 60pkgconfig check which:
  - checks libdir in installed .pc files
  - checks paths not respecting EPREFIX in .pc files
  - runs pkg-config --validate on .pc files
  - checks for mismatched version in .pc files vs ${PV}. Ebuilds can override
    this using QA_PKGCONFIG_VERSION.

* QA: install-qa-check.d: Update 20runtime-directories to warn on /var/tmp
  usage too.

* emerge: Deduplicate atoms in 'dropped' message for --keep-going.

* dispatch-conf: Warn about changing the 'use-rcs' setting. See bug 837533.

* Lots of general refactoring and code cleanups.

Bug fixes:
* Disable SONAME dependencies by default again (i.e. set --ignore-soname-deps=y
  to default on). See bug 687956 and bug 829623.

  This was done because of problems caused with depcleans.

* git: Mark repository as safe for newer versions of git (>= git-2.35.2).
  See bug 838223 and bug 838271.

* dosym: Fix EAPI check for '-r' (relative) flag. It would previously allow
  using an EAPI 8 only feature.

* ebuild: Fix re-sourcing IDEPEND (EAPI 8+).

* estrip: Fix race when creating build-id debug symlinks. See bug 831927.

* MergeProcess: Fix bug causing unnecessary ld.so.cache regeneration even
  when no libraries were installed. This used to work in the past, so is viewed
  as a bug fix, rather than an optimization, although it's a bit of both.
  See bug 836375.

* MiscFunctionsProcess: Avoid clobbering the main sandbox.log if a "die hook"
  is invoked. This should prevent sandbox.log being blank in many cases.

* Drop /run warning as it ended up being too noisy and we've decided
  to workaround/fix (depending on your perspective) the issues in packages
  themselves, given only one package was actually at fault here: bug 832853.

* movefile: Merge symlinks atomically. This should reduce the risk of build
  failures during parallel builds (multiple emerge jobs). See bug 836400.

* Improve error message when Bash version is too old for an ebuild
  to be read.

* Minor improvements to 'die' output.

* Undo dep_zapdeps change in 3.0.29 as it introduced a regression w.r.t solving
  blockers for gentoo-kernel. See bug 833014.

* QA: install-qa-check.d: update 95empty-dirs to mention Portage behavior
  change for EAPI 8+.

* QA: install-qa-check.d: Fix usage of obsolete 'egrep' and 'fgrep' which
  now emit warnings with an upcoming grep release (> 3.7).

* portageq: Ditto re egrep/fgrep.

* util: Fix Whirlpool implementation breaking (crashing/failing tests) with
  OpenSSL 3. This wasn't noticed before as previously, OpenSSL exposed its
  Whirlpool implementation by default, whereas it's now marked as legacy.
  See bug 846389.

* socks5-server: Fix Python 3.10 DeprecationWarning. See bug 794115.

* portage.eapi: Include workaround for consumers with misconfigured
  logger to avoid needing a newer gentoolkit. See bug 838406.

* CI: Run 'black' on remaining files missed in the previous conversion and fix
  CI to catch regressions related to this.

* CI: Test with Python 3.11.

* CI: Drop references to unsupported Python 3.6.

* make.conf: document MAKEOPTS defaulting to the number of processors for
  the number of jobs in make.conf(5).

* dispatch-conf: fix description of 'frozen-files' format in dispatch-conf.conf
  man page. See bug 830618.

portage-3.0.30
--------------
* fix warning/crash on bad PROVIDES in package. See bug 828966.
* avoid infinite loop in _optimized_copyfile. See bug 828844.

portage-3.0.29
--------------
* check for inconsistent/missing PROVIDES during package (and binpkg)
  installation. See bug 811462.
* avoid pulling in newer slots for upgrades in some cases. See bug 828136.
* enable SONAME dependencies for binpkgs by default. See bug 687956.
* add new options to allow avoiding building/using binpkgs for live ebuilds:
  FEATURES="binpkg-live" and --usepkg-exclude-live.
* add emphasis in output to user patches being applied.

portage-3.0.27
--------------
* improve blocker output to make it clear which blockers
  are not satisfied.
* use distinct colors for einfo/elog and ewarn/eqawarn.

portage-3.0.26
--------------
* fix broken FILESDIR copying logic.

portage-3.0.25 (yanked)
-----------------------
* fix Python < 3.8 compatibility of FILESDIR copying code.

portage-3.0.24
--------------
* remove doebuild(dbkey=...) support that was deprecated since 2013.
* pass metadata internally using key=value format.
* include INHERIT key md5-cache to match pkgcore.
* reformat Portage code using black.
* fix Python 3.10 deprecation warnings.
* replace compat_coroutine use with modern async.

portage-3.0.23
--------------
* enable autogroup scheduling with pid-sandbox if possible. This should
  make the kernel respect niceness better.
* add support conf-update.d hooks.
* display all preserved libraries with --verbose.
* restore QA warnings when EXPORT_FUNCTIONS is called before inherit.
* catch more setuptools warnings via the respective QA check.

portage-3.0.22
--------------
* USE flags are now sorted with respect to numerical segments in emerge
  output (e.g. python3_10 comes after python3_9).
* setuptools version normalization warnings are now ignored.
* FEATURES=installsources no longer copies irrelevant directory trees
  with gcc-11.
* sdist archives built using "build" now include setup.py.

portage-3.0.21
--------------
* EAPI 8 fixups.

portage-3.0.20
--------------
* Finalize EAPI 8.

portage-3.0.19
--------------
* Enable EAPI 8.

portage-3.0.18
--------------
* profile-repo-deps is supported in layout.conf profile-formats.

portage-3.0.16
--------------
* emirrordist supports the content-hash distfiles mirror layout.

portage-3.0.15
--------------
* FEATURES=binpkg-multi-instance is now enabled by default.

portage-3.0.13
--------------
* FETCHCOMMAND now supports a \${DIGESTS} placeholder which expands
  to a space separated list of digests. Refer to the FETCHCOMMAND
  documentation in the make.conf(5) man page.

portage-3.0.6
--------------
* emerge --search now detects regular expressions automatically. This
  behavior is controlled by the --regex-search-auto option.
* make.conf now treats variable names that begin with two underscores
  as local variables which are not displayed by emerge --info --verbose.
* egencache --update-pkg-desc now has a --verbose option which causes
  it to emulate esync --verbose output.
* env-update now generates a systemd user-session environment in a file
  named /etc/environment.d/10-gentoo-env.conf.
* binrepos.conf is a new configuration file that acts as a substitute
  for the PORTAGE_BINHOST variable, and allows each repository to have
  a separate FETCHCOMMAND which can be used to customize authentication.
  This file is documented in the portage(5) man page.

portage-3.0.0
--------------
* Dropped support for Python 2.x.

portage-2.3.101
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.100
--------------
* New BINPKG_COMPRESS=zstd default (does not apply to installed systems
  using the old bzip2 default).

portage-2.3.97
--------------
* Support for the PORTAGE_LOG_FILTER_FILE_CMD variable has been
  temporarily removed due to bug 716636.

portage-2.3.90
--------------
* The new PORTAGE_LOG_FILTER_FILE_CMD make.conf(5) variable specifies a
  command that filters build log output to a log file. In order to
  filter ANSI escape codes from build logs, ansifilter(1) is a
  convenient setting for this variable.

portage-2.3.80
--------------
* The emerge --quickpkg-direct option enables use of installed packages
  directly as binary packages. It can be used to create minimal runtime
  container images (which need not include a package manager), or to
  enable a live image to act as a binary installer that uses packages
  installed in the live image as a source of binary packages. This
  option is especially useful in combination with --usepkgonly and
  --ignore-soname-deps=n options, allowing implicit system dependencies
  such as libc to be automatically accounted for.

portage-2.3.77
--------------
* The emerge --autounmask option is now disabled by default, except for
  portions of behavior which are controlled by the --autounmask-use and
  --autounmask-license options. For backward compatibility, previous
  behavior of --autounmask=y and --autounmask=n is entirely preserved.
  Users can get the old behavior simply by adding --autounmask to the
  make.conf EMERGE_DEFAULT_OPTS variable.

portage-2.3.72
--------------
* The glsa-check program is now provided by portage, and it has been
  removed from gentoolkit. See bug 463952.

portage-2.3.70
--------------
* The @live-rebuild package set now searches for PROPERTIES=live, see
  bug 233589. The @deprecated-live-rebuild package set provides the
  old behavior which was based on inherited eclasses.

portage-2.3.64
--------------
* New (council approved) default locations for the Gentoo repository,
  distfiles, and binary packages (does not apply to installed systems
  using the old defaults):
  /usr/portage -> /var/db/repos/gentoo
  /usr/portage/distfiles -> /var/cache/distfiles
  /usr/portage/packages -> /var/cache/binpkgs

portage-2.3.53
--------------
* Renamed PORT_LOGDIR and PORT_LOGDIR_CLEAN variables to
  PORTAGE_LOGDIR and PORTAGE_LOGDIR_CLEAN to match other existing
  similar variables
* Enable FEATURES={ipc,network,pid}-sandbox by default

portage-2.3.42
----------------
* Sync with rsync quarantines data prior to verification, using the
  rsync --link-dest option (can be disabled by setting
  "sync-allow-hardlinks = no" in repos.conf).
* Sync with git quarantines data prior to verification, see
  https://wiki.gentoo.org/wiki/Portage_Security#git-mirror_repo.
* Sync with shallow git pull is supported, by "setting sync-depth = 1"
  in repos.conf.

portage-2.3.32
----------------
* EAPI 7 support.

portage-2.3.29
----------------
* Portage API consumers can use asyncio with portage's internal event
  loop, see portage.util.futures.unix_events.DefaultEventLoopPolicy.

portage-2.3.25
----------------
* Experimental support for EAPI 7_pre1.

portage-2.3.20
----------------
* Support RESTRICT=network-sandbox in ebuilds.

portage-2.3.17
----------------
* The doins ebuild helper has been rewritten in python for performance, and
  it does in-kernel file copying on Linux.

portage-2.3.14
----------------
* Repository metadata/layout.conf supports manifest-required-hashes
  attribute (default value is SHA512).

portage-2.3.12
----------------
* better_cache implemented to use less expensive os.listdir() instead of
  os.stat() operations to scan for ebuilds. Avoids exhaustively scanning
  overlays for all ebuilds which allows Portage to not slow down significantly
  with lots of overlays enabled. (Daniel Robbins)

portage-2.3.7
-----------------
* eapply_user combines patch basenames from all matched directories into a
  list, and applies them in POSIX sorted order. This allows patches in
  more-specific directories to override patches of the same basename found
  in less-specific directories. An empty patch (or /dev/null symlink) negates
  a patch with the same basename found in a less-specific directory.
* FEATURES=multilib-strict no longer recurses into subdirectories, in order
  to avoid false-positives. The MULTILIB_STRICT_EXEMPT variable only served
  to filter false-positives that were triggered by recursion, so it will no
  longer be needed.
* New emerge --autounmask-keep-keywords and --onlydeps-with-rdeps=<y|n>
  options.
* Set compression method for binpackages via BINPKG_COMPRESS variable
* Support for environment variables for git cmd in repos.conf via sync-git-env


portage-2.3.5
-----------------
* Numerous patches updating checksums code and python module imports for them
  including new checksum methods
* New linux in kernel movefile support via a new "C" extension module


portage-2.3.3
-----------------
* Reverted commits:
    - Bug 552814 Revert "GitSync.update: respect sync-depth
                 (Shallow fetch is not a practical default at this time,
                  given performance issues introduced by `git update-index`
                  and `git prune` (see bug 599008).
                 )


portage-2.3.1
-----------------
* Support News-Item-Format 2.0
* emerge: add --fuzzy-search and --search-similarity
* Add emerge --autounmask-continue option

portage-2.3.0
-----------------
* Final release
* Includes numerous bugfixes

portage-2.3.0_rc1
-----------------
* New split release for the repoman Q/A tool
* Includes the stage2 rewite of the repoman code base


portage-2.2.26
--------------
* EAPI 6 stable portage release


portage-2.2.25
--------------
* EAPI 6 final fully implemented.


portage-2.2.22
-------------
* Stage 1 of the repoman re-write code merged in to master branch
  This is the first release of the new code base.


portage-2.2.19
-------------
* The squashdelta sync module was removed for separate installation
  and development work


portage-2.2.19
-------------
* websync module now fully renamed to webrsync
* New squashdelta sync module for downloading full or updates for a squasfs tree
  requires dev-util/squashmerge be installed
* New binpkg-multi-instance feature allows for multiple variations
    (USE settings) to be saved in the pkgdir and index.


portage-2.2.16
-------------
* New portage plug-in sync system.
    Read the news anouncement for more details of the changes in config
    settings and operation.
* New native portage postsync.d capability
* New native portage repo.postsync.d capability
* New native indexed search capability for decent search speed
* Tentative EAPI 6 patches for additional testing


portage-2.2.14
-------------
* Remaining bugs in build/install system should be fixed.


portge-2.2.14_rc1
-------------
* Many new build/installation system errors fixed.


portage-2.2.13
-------------
* New setup.py build system and distutils-r1 ebuild at EAPI 5
* PORTAGE_{BIN,PYM}_PATH variables. If you want to call internal portage tools,
    you need to query PORTAGE_BIN_PATH and PORTAGE_PYM_PATH, use them
    and re-export them.
* New @changed-deps set to update packages which need dependecy change updates.


portage-2.2.12
-------------
* New emaint module "merges"  for finding and fixing failed merges
  If a pkg fails to merge to the live filesystem correctly, that pkg may
  not work correctly if at all.  This module scans the installed pkg database
  for those failures and can re-emerge those packages.

portage-2.2.1
-------------

* Add cgroups, ipc-sandbox, and network-sandbox FEATURES.

portage-2.2
-------------

* Add extended set configuration via /etc/portage/sets.conf. See
  /usr/share/portage/config/sets/portage.conf for examples.

portage-2.1.11.20
-------------
* Add support for EAPI 5. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 5.
* Add support for FEATURES=preserve-libs which preserves libraries when the
  sonames change during upgrade or downgrade, and the @preserved-rebuild
  package set which rebuilds consumers of preserved libraries.
* Add link level dependency awareness to emerge --depclean and --prune actions
  in order to protect against uninstallation of required libraries. Refer to
  the --depclean-lib-check option in the emerge(1) man page.

portage-2.1.11
-------------

* Add support for experimental EAPI "4-slot-abi". Refer to the corresponding
  html documentation that is installed with USE=doc, and also to the emerge(1)
  man page for information about the related --ignore-built-slot-operator-deps and
  --rebuild-if-new-slot options.

portage-2.1.10
-------------

* Improve handling of repositories/overlays for cases in which the same ebuild
  is provided by multiple repositories but with different masking status, and
  support for repository constraints on atoms (atom::repo) in configuration
  files.
* Add emerge --rebuild-if-* options that trigger rebuilds of reverse
  dependencies when packages are rebuilt or updated. Related --rebuild-exclude
  and --rebuild-ignore options can be used to avoid rebuilds for specific
  packages.
* Add emerge --reinstall-atoms, --useoldpkg-atoms, and --usepkg-exclude options
  which can be used to alter selection rules for specific packages.
* Add FEATURES=parallel-install and ebuild-locks, allowing for greater
  parallelization when installing packages (by using finer-grained locks).

portage-2.1.9.27
-------------

* Add support for EAPI 4. Refer to the PMS EAPI Cheat Sheet, portage's html
  docs installed with USE=doc, or `man 5 ebuild` for more info about EAPI 4.
  Bug #273620 tracks EAPI 4 implementation in portage.

portage-2.1.9
-------------

* There is a new ipc (inter-process communication) USE flag which is enabled
  by default. This allows portage to communicate with running ebuild processes,
  for things like best_version, has_version, and die calls in nested processes.
  This flag should remain enabled unless it is found to be incompatible with a
  specific profile or environment. When enabled, it fixes bug #278895,
  bug #315615, and makes subshell die support more robust (so that repoman's
  ebuild.nesteddie check is irrelevant).

portage-2.1.8
-------------
* The top-level __init__.py for the portage python package has been split into
  many smaller python modules, making the code easier to navigate and allowing
  small parts of the portage api to be imported with less overhead.

portage-2.1.7.17
-------------
* Add support for EAPI 3. This adds support for installation prefix, including
  new EPREFIX, ED, and EROOT variables which are used by econf and einstall
  helpers. Also, EAPI 3 adds xz extension support to the unpack helper.

portage-2.1.7
-------------

* Add license visibility filtering (GLEP 23)
* Add --accept-properties option for emerge which allows you to use
  --accept-properties=-interactive in order to temporarily exclude
  interactive updates.
* Add support for Python 3.0. At least Python 2.6 is now required in order to
  support the new syntax which is used by Python 3.0.

portage-2.1.6
-------------

* Add support for a new EAPI="2" value. For more information about new EAPI
  features, refer to the "Ebuild" chapter of the html documentation that is
  installed with portage.
* Add PORTAGE_IONICE_COMMAND setting for make.conf which is called to adjust
  IO priority on portage and it's subprocesses.
* Add emerge --jobs and --load-average options which specify behavior
  for building packages in parallel or for generating metadata in parallel
  with emerge --regen.
* Add emerge --keep-going option to continue as much as possible after
  an error. When an error occurs, dependencies are recalculated for
  remaining packages and any with unsatisfied dependencies are
  automatically dropped. The --skipfirst option automatically drops
  packages in the same way, and also drops any masked packages.
* Add git and subversion support for repoman.
* It is now possible to use `emerge <file>` to reinstall the package that
  installed a particular file. Package contents entries are indexed to
  improve performance. A command such as `emerge /lib/modules` can serve
  as a decent substitute for module-rebuild.
* Namespace sanitizing: move all portage related code into portage.* namespace,
  rename portage_foo modules to portage.foo (but keep symlinks for compability)
* Add support for news items (GLEP 42)
* Add FEATURES=protect-owned which is identical to the collision-protect
  feature except that files may be overwritten if they are not explicitly
  listed in the contents of a currently installed package.

portage-2.1.5
-------------

* For extra careful dependency handling, emerge has a new --complete-graph
  option that causes it to consider the deep dependencies of all packages from
  the system and world sets. With this option enabled, emerge will bail out
  if it determines that the given operation will break any dependencies of
  the packages that have been added to the graph. Unlike the --deep option,
  the --complete-graph option does not cause any more packages to be updated
  than would have otherwise been updated with the option disabled.
* Blockers are now resolved automatically in many more cases
  than before.  When it's safe, blocked packages are uninstalled
  automatically so that users are no longer inconvenienced with the
  task. Automatically uninstalled packages are displayed in the merge
  list, marked "uninstall" and highlighted in red. With the --tree
  option enabled, it's possible to see which package(s) caused other
  ones to be automatically uninstalled.
* The dependency resolver now has a feedback mechanism that helps make atom
  selections more consistent with previous selections that have been added to
  the graph. This solves some common cases of bug #1343.

portage-2.1.4
-------------

* After the initial setup phase, the original ebuild and eclasses are no
  longer needed because the same ebuild environment is reused for the
  entire lifecycle of the package, including uninstallation.
* The emerge --search action supports searching of both installed and binary packages
  The --usepkg and --usepkgonly options control which repositories are searched.

portage-2.1.3
-------------

* Allow per-module setting of PORTAGE_ELOG_CLASSES
* Add new elog module "echo" to simply display messages when emerge exits
* Add ** as new token for package.keywords to bypass the keyword visibility layer
* USE_EXPAND variables such as LINGUAS support a * wildcard that will enable
  all of the corresponding flags that are listed in IUSE for a given package.
  USE_EXPAND wildcards such as linguas_* are supported in USE and package.use.
* The merge process preserves the modification timestamp of files that it
  installs. The unmerge process will not uninstall files that are claimed by
  another package in the same slot.
* PDEPEND is now installed as soon as possible so that it behaves more like
  RDEPEND.  This makes PDEPEND more useful for breaking the dependency cycles
  that are sometimes triggered by RDEPEND and DEPEND.
* Enable "echo" and "save_summary" elog modules by default
* Fix -* handling in package.keywords to work as intended (reset the accepted
  keywords list), also see RELEASE-NOTES.
* Make elog functionality available to python code

portage-2.1.2
-------------

* Ebuilds support default USE flags via +flag in IUSE.
* New-style virtuals are now usable for packages that depend on themselves for
  bootstrap.
* Profiles support multiple inheritance and package.use.
* CONFIG_PROTECT and CONFIG_PROTECT_MASK both support files (not just
  directories).
* Collision protection handles symlinks properly.
* Dependencies can be satisfied by installed packages that do not have matching
  ebuilds in the portage tree or overlay.
* Emerge automatically ignores blockers that are made irrelevant by an upgrade.
* Emerge supports "reverse blocker detection" which means that the blockers of
  installed packages will always be respected.
* Emerge builds a complete dependency graph in order to ensure correct merge
  order and detection of circular dependencies.
* The world and system sets allow automatic update of all installed slots.
* DEPEND atoms support SLOT dependencies of the form ${CATEGORY}/${PN}:${SLOT}.
* Development: Extend PYTHONPATH support to allow overriding the hardcoded
  /usr/lib/portage/pym for development/testing purposes
* New "finalize" hook for elog modules enabling modules to perform actions on
  shutdown (like dispatching collected messages).
* New elog modules mail_summary and save_summary that act like the mail/save
  modules except that they merge messages from multiple packages in a single
  file/mail.
* New QA loglevel and matching eqawarn function
* `ebuild foo test` now always runs src_test if available
* If DOC_SYMLINK_DIR is set portage installs symlinks to html documention there
* FEATURES="test" automatically implies USE="test".

portage-2.1.1
-------------

* Profiles support use.force, package.use.force, and package.use.mask files.

portage-2.1 (ongoing via pre releases)
------------

* FEATURES="confcache" integration; global caching to speed up configure calls,
  requires dev-util/confcache
* elog framework and accompanying modules for logging ebuild warnings, errors
  and general notices. Collects eerror/ewarn/elog/einfo messages.
* New elog function (should replace einfo in many cases)
* version syntax enhancements allowing multiple suffixes and a new 'cvs'
  version prefix for denoting "live sources" ebuilds.
* config files as directories enabling more flexible settings management.
* Addition of an register_die_hook method that allows ebuild/eclasses to
  register functions to be called for better debugging on errors.
* Addition of pre and post user hookable functions for each ebuild phase, accessible
  via portage bashrc.  Example would be pre_src_unpack .
* cache refactoring- runtime improvement from 35% -> 65%.
* Intelligently handle and display USE_EXPAND-based IUSE variables.
* FEATURES="parallel-fetch".  Download in parallel to compilation.
* Include a "changed or new" USE flag output when --verbose isn't specified.
* Support for splitting out debug information into separate files in
  /usr/lib{,32,64}.
* exec subsystem refactoring (now with less bugs!)
* Added sha256 and rmd160 hashes for digests/manifests
* Make --emptytree only apply to ${ROOT} rather than always including /.
* Allow packages to be upgraded that are only depended on via a
  "|| ( =cat/pkg-1* =cat/pkg-2* )" construct.
* Ebuild output is no longer cut off early when using PORTAGE_LOGDIR.
* Distfiles indirection- $DISTFILES access goes through a tmp dir to fail
  access to files not listed in SRC_URI.
* Emerge now uses --resume to restart itself after portage upgrade.
* Atomic file updates via the new atomic_ofstream class.
* Global updates and fixpackages performance optimizations.
* Tests show that file locking is now more reliable.
* A bash call stack is printed when an ebuild dies in ebuild.sh.
* New rsync option handling by using a generic PORTAGE_RSYNC_EXTRA_OPTS variable
* Manifest2 support that will allow digest-* files to be eliminated from the tree.