on master help sign in
10 files changed+635−210
since splitsnapshots
unifiedsplit
CURATORS.md+45−15 build-constraints.yaml+107−102 commenter+20 etc/commenter/Cargo.lock+95−18 etc/commenter/Cargo.toml+2 etc/commenter/latest-version/latest-version.cabal+1−1 etc/commenter/latest-version/src/Main.hs+17−7 etc/commenter/latest-version/stack.yaml.lock+13 etc/commenter/src/lib.rs+324−47 etc/commenter/src/main.rs+11−20
CURATORS.md+45−15
@@ -210,6 +210,8 @@ can modify it and push it to Github to trigger a build. The nightly
210210branch is used for nightlies. For LTSes, we use the ltsX branch, where X is the
211211major version number (e.g., lts3 for lts-3.\*).
212212
213+Update the `Win32` version in `build-constraints.yaml` under "GHC upper bounds".
214+
213215Note that when starting a new LTS major release, you'll need to modify `.github/workflows/image.yml` to add a new lts branch.
214216
215217Update `GHCVER` in `Dockerfile`. (This env var automatically gets passed to `debian-bootstrap.sh`.)
@@ -315,7 +317,7 @@ First run `build.sh` to regenerate updated `ltsXX/work/constraints.yaml` and `lt
315317
316318For an LTS minor bump, you'll typically want to:
317319
318−* Add constraints to package `range:` fields _under_ the `source:` field in that `constraints.yaml`, and edit `snapshot-incomplete.yaml` to change the version used for that package, if necessary.
320+* Add constraints to package `range:` fields _under_ the `source:` field in that `constraints.yaml` (should not be necessary normally to edit `snapshot-incomplete.yaml` to change the version used for that package).
319321* Add new packages to the `constraints.yaml` file
320322* Test, benchmark, haddock failures can also be added to package fields in the `constraints.yaml` if necessary, though it should be avoided if possible for LTS.
321323
@@ -420,20 +422,16 @@ errors for builds, tests and benchmarks.
420422
421423### Large scale enabling/disabling of packages
422424
423−`etc/commenter` is a binary that mostly automates the translation of
424−`./check` errors into lines that go into `build-constraints.yaml`. It
425−can only handle bounds issues, compilation issues still need to be
426−handled manually.
427−
428−It disables all offending packages/test suites/benchmarks, so it is
429−only meant to be used when we close bounds issues and want to disable
430−packages, and when upgrading GHC.
425+`etc/commenter` is a binary that automates `build-constraints.yaml` workflows.
431426
432427#### Setup
433428This is currently a rust program, You can install the rust toolchain
434429by using [rustup](https://rustup.rs/).
435430
436−Then `cargo install --locked --path etc/commenter`
431+For some commands you also need etc/commenter/latest-version installed.
432+```
433+stack install --stack-yaml etc/commenter/latest-version/stack.yaml
434+```
437435
438436#### Example usage
439437
@@ -454,7 +452,7 @@ testing-feat (GHC 9 bounds issues, Grandfathered dependencies) (not present) dep
454452
455453Now run:
456454```
457−./check 2>&1 >/dev/null | commenter add
455+./check 2>&1 >/dev/null | ./commenter add
458456```
459457
460458You will get this output:
@@ -481,8 +479,8 @@ Re-run this command until no more packages are disabled.
481479We can periodically remove all packages under the bounds sections and then re-run the disabling flow above until we get a clean plan. This will automatically pick up packages that have been fixed.
482480
483481```
484−commenter clear
485−./check 2>&1 >/dev/null | commenter add
482+./commenter clear
483+./check 2>&1 >/dev/null | ./commenter add
486484```
487485
488486Repeat the second command until no updates are made to build-constraints.yaml.
@@ -491,7 +489,7 @@ Repeat the second command until no updates are made to build-constraints.yaml.
491489
492490Run `stack update` before doing this.
493491
494−`commenter outdated` looks through all bounds issues and library
492+`./commenter outdated` looks through all bounds issues and library
495493compilation failures and compares the marked version with the latest hackage release. Example output is
496494
497495```
@@ -502,7 +500,7 @@ aeson mismatch, auto: 1.5.6.0, hackage: 2.0.2.0
502500where "manual" means the bound was added manually by a curator,
503501perhaps due to a compilation failure so we could try re-enabling the
504502package. "auto" means it's part of the sections generated by
505−`commenter`, to update that run the `Re-enabling` step as documented
503+`./commenter`, to update that run the `Re-enabling` step as documented
506504above.
507505
508506`outdated` only finds packages that are in the auto generated
@@ -512,6 +510,38 @@ sections, or that are of the form `- package < 0 # $version`.
512510
513511* Please make sure to separate bounds issues from compilation failures/test run failures, as we cannot verify that a package builds or that tests pass without running the build!
514512
513+#### Diffing snapshots / Inspecting changes
514+
515+To diff existing snapshots, or to evaluate changes before they end up
516+in a snapshot you can run:
517+
518+```
519+./commenter diff-snapshot <old-snapshot.yaml> <new-snapshot.yaml>
520+```
521+
522+Existing snapshots can be retrieved from https://github.com/commercialhaskell/stackage-snapshots. Preliminary snapshots can be generated by running relevant parts of `automated/build.sh`, at the time of writing:
523+
524+```
525+TARGET=nightly-2021-01-14 \ # the date doesn't matter
526+ curator update && \
527+ curator constraints --target $TARGET && \
528+ curator snapshot-incomplete --target $TARGET && \
529+ curator snapshot
530+```
531+
532+#### Finding disabled packages with lots of dependents
533+
534+`./commenter disabled` prints the number of transitive dependents a disabled package has. Low hanging fruit to get a lot of packages included again.
535+
536+Example output:
537+```
538+[...]
539+stringable is disabled with 10 dependents
540+llvm-hs is disabled with 12 dependents
541+th-data-compat is disabled with 12 dependents
542+amazonka-core is disabled with 96 dependents
543+gogol-core is disabled with 96 dependents
544+```
515545
516546## Adding new curators
517547
build-constraints.yaml+107−102
@@ -10,6 +10,14 @@ cabal-format-version: "3.0"
1010# Constraints for brand new builds
1111packages:
1212
13+ "Xy Ren <xy.r@outlook.com> @re-xyr":
14+ - cleff
15+
16+ "Janus Troelsen <ysangkok@gmail.com> @ysangkok":
17+ - ListZipper
18+ - rollbar
19+ - timezone-olson-th
20+
1321 "David Burkett <david@davidburkett.xyz> @Disco-Dave":
1422 - katip-wai
1523
@@ -66,6 +74,7 @@ packages:
6674 - regex-posix-clib
6775 - regex-tdfa
6876 - java-adt
77+ - shelly
6978 - tasty-silver
7079
7180 "Diogo Biazus <diogo@biazus.ca>":
@@ -307,8 +316,10 @@ packages:
307316 - essence-of-live-coding-gloss
308317 - essence-of-live-coding-pulse
309318 - essence-of-live-coding-quickcheck
319+ - essence-of-live-coding-warp
310320 - pulse-simple
311321 - simple-affine-space
322+ - has-transformers
312323
313324 "Paul Johnson <paul@cogito.org.uk> @PaulJohnson":
314325 - geodetics
@@ -397,7 +408,7 @@ packages:
397408 - normalization-insensitive
398409
399410 "Jacob Stanley <jacob@stanley.io> @jacobstanley":
400− - hedgehog
411+ - hedgehog < 1.1 # https://github.com/commercialhaskell/stackage/issues/6415
401412 - hedgehog-quickcheck
402413 - transformers-bifunctors
403414 - unix-compat
@@ -755,7 +766,7 @@ packages:
755766 - cryptonite-conduit
756767 - streaming-commons
757768
758− - alex
769+ - alex < 3.2.7 || > 3.2.7
759770 - async
760771 - base16-bytestring
761772 - csv-conduit
@@ -764,7 +775,7 @@ packages:
764775 - foreign-store
765776 - formatting
766777 - gtk2hs-buildtools
767− - happy
778+ - happy < 1.21.0 || > 1.21.0 # https://github.com/commercialhaskell/stackage/issues/6294
768779 - hybrid-vectors
769780 - indents
770781 - language-c
@@ -890,7 +901,6 @@ packages:
890901 - wai-slack-middleware
891902 - sysinfo
892903 - xmonad-extras
893− - shelly
894904 - persistent-redis
895905 - fakedata
896906 - fakedata-parser
@@ -1123,7 +1133,7 @@ packages:
11231133 - bugsnag-haskell
11241134 - gravatar
11251135 - load-env
1126− - yesod-auth-oauth2
1136+ - yesod-auth-oauth2 < 0.7 # https://github.com/commercialhaskell/stackage/issues/6424
11271137 - yesod-markdown
11281138 - yesod-paginator
11291139
@@ -2965,7 +2975,7 @@ packages:
29652975 - wai-session-postgresql
29662976
29672977 "Haisheng Wu <freizl@gmail.com> @freizl":
2968− - hoauth2
2978+ - hoauth2 < 2.0 # https://github.com/commercialhaskell/stackage/issues/6424
29692979
29702980 "Falko Peters <falko.peters@gmail.com> @informatikr":
29712981 - scrypt
@@ -3007,7 +3017,7 @@ packages:
30073017 "Justus Adam <dev@justus.science> @JustusAdam":
30083018 - marvin
30093019 - marvin-interpolate
3010− - mustache
3020+ - mustache < 2.4.0 # https://github.com/commercialhaskell/stackage/issues/6421
30113021 - exit-codes >= 1.0.0
30123022
30133023 "Cindy Wang <cindylinz@gmail.com> @CindyLinz":
@@ -3344,6 +3354,7 @@ packages:
33443354 - quote-quot
33453355 - tasty-bench
33463356 - tasty-inspection-testing
3357+ - text-rope
33473358
33483359 "Ashley Yakeley <ashley@semantic.org> @AshleyYakeley":
33493360 - countable
@@ -3721,7 +3732,7 @@ packages:
37213732 - hslua-classes
37223733 - hslua-core
37233734 - hslua-marshalling
3724− - hslua-module-doclayout
3735+ - hslua-module-doclayout < 0 # https://github.com/commercialhaskell/stackage/issues/6416
37253736 - hslua-module-path
37263737 - hslua-module-system
37273738 - hslua-module-text
@@ -4043,7 +4054,7 @@ packages:
40434054 - ghc-parser
40444055
40454056 "Alexis Williams <alexis@typedr.at> @typedrat":
4046− - stb-image-redux
4057+ - stb-image-redux < 0.2.1.3 || > 0.2.1.3 # deprecated version
40474058
40484059 "Alexandre Peyroux <alex@px.io> @apeyroux":
40494060 - HSlippyMap
@@ -4428,7 +4439,7 @@ packages:
44284439 - gtk-strut
44294440 - rate-limit
44304441 - status-notifier-item
4431− - taffybar
4442+ - taffybar < 0 # https://github.com/taffybar/taffybar/issues/542
44324443 - time-units
44334444 - xml-helpers
44344445 - xdg-desktop-entry
@@ -4541,7 +4552,7 @@ packages:
45414552 - multi-containers
45424553
45434554 "Vaclav Svejcar <vaclav.svejcar@gmail.com> @vaclavsvejcar":
4544− - headroom < 0 # 0.4.2.0 compile fail https://github.com/commercialhaskell/stackage/issues/6342
4555+ - headroom
45454556 - vcs-ignore
45464557
45474558 "Adrian Sieber <stackage@ad-si.com> @ad-si":
@@ -4740,8 +4751,22 @@ packages:
47404751 "Ghais Issa <0x47@0x49.dev> @ghais":
47414752 - LetsBeRational
47424753
4754+ "Edward Yang <qwbarch@gmail.com> @qwbarch":
4755+ - captcha-core
4756+ - captcha-2captcha
4757+ - captcha-capmonster
4758+ - data-default-extra
4759+ - data-default-instances-base
4760+ - data-default-instances-bytestring
4761+ - data-default-instances-case-insensitive
4762+ - data-default-instances-new-base
4763+ - data-default-instances-text
4764+ - data-default-instances-unordered-containers
4765+ - data-default-instances-vector
4766+
47434767 "Grandfathered dependencies":
47444768 - Boolean
4769+ - Cabal-syntax
47454770 - Decimal
47464771 - Diff
47474772 - FloatingHex
@@ -4869,7 +4894,7 @@ packages:
48694894 - dlist
48704895 - dlist-instances
48714896 - dlist-nonempty
4872− - double-conversion
4897+ - double-conversion < 2.0.3.0 # https://github.com/commercialhaskell/stackage/issues/6417
48734898 - dual-tree
48744899 - easy-file
48754900 - easytest
@@ -5031,7 +5056,7 @@ packages:
50315056 - process-extras
50325057 - product-isomorphic
50335058 - project-template
5034− - protobuf < 0.2.1.4 # https://github.com/alphaHeavy/protobuf/issues/39
5059+ - protobuf < 0.2.1.4 || > 0.2.1.4 # deprecated version
50355060 - pureMD5
50365061 - quickcheck-instances
50375062 - quickcheck-io
@@ -5419,8 +5444,8 @@ packages:
54195444 # for compilation failures as we need to build those packages to
54205445 # verify if they have been fixeq.
54215446 "Library and exe bounds failures":
5422− - BiobaseHTTP < 0 # tried BiobaseHTTP-1.2.0, but its *library* does not support: network-3.1.2.5
5423− - BlastHTTP < 0 # tried BlastHTTP-1.4.2, but its *library* does not support: network-3.1.2.5
5447+ - BiobaseHTTP < 0 # tried BiobaseHTTP-1.2.0, but its *library* does not support: network-3.1.2.7
5448+ - BlastHTTP < 0 # tried BlastHTTP-1.4.2, but its *library* does not support: network-3.1.2.7
54245449 - Chart-cairo < 0 # tried Chart-cairo-1.9.3, but its *library* requires the disabled package: cairo
54255450 - Chart-diagrams < 0 # tried Chart-diagrams-1.9.3, but its *library* does not support: SVGFonts-1.8.0.1
54265451 - EntrezHTTP < 0 # tried EntrezHTTP-1.0.4, but its *library* requires the disabled package: biocore
@@ -5431,7 +5456,7 @@ packages:
54315456 - HaskellNet < 0 # tried HaskellNet-0.6, but its *library* does not support: base-4.15.1.0
54325457 - HaskellNet-SSL < 0 # tried HaskellNet-SSL-0.3.4.4, but its *library* requires the disabled package: HaskellNet
54335458 - Hoed < 0 # tried Hoed-0.5.1, but its *library* requires the disabled package: regex-tdfa-text
5434− - IPv6DB < 0 # tried IPv6DB-0.3.2, but its *executable* does not support: fast-logger-3.1.0
5459+ - IPv6DB < 0 # tried IPv6DB-0.3.2, but its *executable* does not support: fast-logger-3.1.1
54355460 - IPv6DB < 0 # tried IPv6DB-0.3.2, but its *executable* does not support: optparse-applicative-0.16.1.0
54365461 - IPv6DB < 0 # tried IPv6DB-0.3.2, but its *library* does not support: IPv6Addr-2.0.4
54375462 - IPv6DB < 0 # tried IPv6DB-0.3.2, but its *library* does not support: aeson-1.5.6.0
@@ -5451,7 +5476,7 @@ packages:
54515476 - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* does not support: BiobaseHTTP-1.2.0
54525477 - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* does not support: BiobaseTypes-0.2.1.0
54535478 - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* does not support: aeson-1.5.6.0
5454− - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* does not support: network-3.1.2.5
5479+ - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* does not support: network-3.1.2.7
54555480 - RNAlien < 0 # tried RNAlien-1.7.0, but its *library* requires the disabled package: hierarchical-clustering
54565481 - Spock < 0 # tried Spock-0.14.0.0, but its *library* requires the disabled package: Spock-core
54575482 - Spock-api-server < 0 # tried Spock-api-server-0.14.0.0, but its *library* requires the disabled package: Spock-core
@@ -5498,7 +5523,7 @@ packages:
54985523 - airship < 0 # tried airship-0.9.4, but its *library* does not support: wai-3.2.3
54995524 - airship < 0 # tried airship-0.9.4, but its *library* does not support: wai-extra-3.1.8
55005525 - alg < 0 # tried alg-0.2.13.1, but its *library* requires the disabled package: util
5501− - amazonka < 0 # tried amazonka-1.6.1, but its *library* does not support: http-client-0.7.9
5526+ - amazonka < 0 # tried amazonka-1.6.1, but its *library* does not support: http-client-0.7.10
55025527 - amazonka < 0 # tried amazonka-1.6.1, but its *library* does not support: unliftio-core-0.2.0.1
55035528 - amazonka-apigateway < 0 # tried amazonka-apigateway-1.6.1, but its *library* requires the disabled package: amazonka-core
55045529 - amazonka-application-autoscaling < 0 # tried amazonka-application-autoscaling-1.6.1, but its *library* requires the disabled package: amazonka-core
@@ -5524,7 +5549,7 @@ packages:
55245549 - amazonka-cognito-idp < 0 # tried amazonka-cognito-idp-1.6.1, but its *library* requires the disabled package: amazonka-core
55255550 - amazonka-cognito-sync < 0 # tried amazonka-cognito-sync-1.6.1, but its *library* requires the disabled package: amazonka-core
55265551 - amazonka-config < 0 # tried amazonka-config-1.6.1, but its *library* requires the disabled package: amazonka-core
5527− - amazonka-core < 0 # tried amazonka-core-1.6.1, but its *library* does not support: http-client-0.7.9
5552+ - amazonka-core < 0 # tried amazonka-core-1.6.1, but its *library* does not support: http-client-0.7.10
55285553 - amazonka-datapipeline < 0 # tried amazonka-datapipeline-1.6.1, but its *library* requires the disabled package: amazonka-core
55295554 - amazonka-devicefarm < 0 # tried amazonka-devicefarm-1.6.1, but its *library* requires the disabled package: amazonka-core
55305555 - amazonka-directconnect < 0 # tried amazonka-directconnect-1.6.1, but its *library* requires the disabled package: amazonka-core
@@ -5630,19 +5655,12 @@ packages:
56305655 - base-noprelude < 0 # tried base-noprelude-4.13.0.0, but its *library* does not support: base-4.15.1.0
56315656 - bcp47 < 0 # tried bcp47-0.2.0.5, but its *library* requires the disabled package: country
56325657 - bcp47-orphans < 0 # tried bcp47-orphans-0.1.0.4, but its *library* requires the disabled package: bcp47
5633− - beam-core < 0 # tried beam-core-0.9.1.0, but its *library* does not support: dlist-1.0
5634− - beam-core < 0 # tried beam-core-0.9.1.0, but its *library* does not support: ghc-prim-0.7.0
5635− - beam-core < 0 # tried beam-core-0.9.1.0, but its *library* does not support: vector-sized-1.5.0
5636− - beam-migrate < 0 # tried beam-migrate-0.5.1.0, but its *library* does not support: ghc-prim-0.7.0
56375658 - beam-mysql < 0 # tried beam-mysql-0.2.0.0, but its *library* does not support: aeson-1.5.6.0
5638− - beam-mysql < 0 # tried beam-mysql-0.2.0.0, but its *library* does not support: beam-core-0.9.1.0
5659+ - beam-mysql < 0 # tried beam-mysql-0.2.0.0, but its *library* does not support: beam-core-0.9.2.0
56395660 - beam-mysql < 0 # tried beam-mysql-0.2.0.0, but its *library* does not support: hashable-1.3.5.0
56405661 - beam-mysql < 0 # tried beam-mysql-0.2.0.0, but its *library* does not support: mysql-0.2.1
5641− - beam-postgres < 0 # tried beam-postgres-0.5.1.0, but its *library* does not support: attoparsec-0.14.4
5642− - beam-sqlite < 0 # tried beam-sqlite-0.5.1.0, but its *library* does not support: attoparsec-0.14.4
5643− - beam-sqlite < 0 # tried beam-sqlite-0.5.1.0, but its *library* does not support: dlist-1.0
56445662 - bench-show < 0 # tried bench-show-0.3.1, but its *library* does not support: statistics-0.16.0.1
5645− - bhoogle < 0 # tried bhoogle-0.1.3.5, but its *executable* does not support: brick-0.65
5663+ - bhoogle < 0 # tried bhoogle-0.1.3.5, but its *executable* does not support: brick-0.66.1
56465664 - bhoogle < 0 # tried bhoogle-0.1.3.5, but its *executable* does not support: bytestring-0.10.12.1
56475665 - bhoogle < 0 # tried bhoogle-0.1.3.5, but its *executable* does not support: directory-1.3.6.2
56485666 - bhoogle < 0 # tried bhoogle-0.1.3.5, but its *executable* does not support: filepath-1.4.2.1
@@ -5689,16 +5707,13 @@ packages:
56895707 - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: aeson-casing-0.2.0.0
56905708 - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: connection-0.3.1
56915709 - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: http-api-data-0.4.3
5692− - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: http-client-0.7.9
5710+ - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: http-client-0.7.10
56935711 - chatwork < 0 # tried chatwork-0.1.3.5, but its *library* does not support: req-3.9.2
56945712 - chronos < 0 # tried chronos-1.1.3, but its *library* requires the disabled package: bytebuild
56955713 - chronos < 0 # tried chronos-1.1.3, but its *library* requires the disabled package: byteslice
56965714 - chronos < 0 # tried chronos-1.1.3, but its *library* requires the disabled package: bytesmith
56975715 - chronos-bench < 0 # tried chronos-bench-0.2.0.2, but its *library* requires the disabled package: chronos
56985716 - clang-compilation-database < 0 # tried clang-compilation-database-0.1.0.1, but its *library* does not support: base-4.15.1.0
5699− - clash-ghc < 0 # tried clash-ghc-1.4.6, but its *library* does not support: ghc-bignum-1.1
5700− - clash-lib < 0 # tried clash-lib-1.4.6, but its *library* does not support: ghc-bignum-1.1
5701− - clash-prelude < 0 # tried clash-prelude-1.4.6, but its *library* does not support: ghc-bignum-1.1
57025717 - classyplate < 0 # tried classyplate-0.3.2.0, but its *library* does not support: base-4.15.1.0
57035718 - classyplate < 0 # tried classyplate-0.3.2.0, but its *library* does not support: template-haskell-2.17.0.0
57045719 - clock-extras < 0 # tried clock-extras-0.1.0.2, but its *library* does not support: clock-0.8.2
@@ -5785,10 +5800,10 @@ packages:
57855800 - distributed-process-lifted < 0 # tried distributed-process-lifted-0.3.0.1, but its *library* requires the disabled package: distributed-process
57865801 - distributed-process-monad-control < 0 # tried distributed-process-monad-control-0.5.1.3, but its *library* requires the disabled package: distributed-process
57875802 - distributed-process-simplelocalnet < 0 # tried distributed-process-simplelocalnet-0.2.4, but its *library* does not support: containers-0.6.4.1
5788− - distributed-process-simplelocalnet < 0 # tried distributed-process-simplelocalnet-0.2.4, but its *library* does not support: network-3.1.2.5
5803+ - distributed-process-simplelocalnet < 0 # tried distributed-process-simplelocalnet-0.2.4, but its *library* does not support: network-3.1.2.7
57895804 - distributed-process-simplelocalnet < 0 # tried distributed-process-simplelocalnet-0.2.4, but its *library* does not support: network-transport-tcp-0.8.0
57905805 - distributed-process-simplelocalnet < 0 # tried distributed-process-simplelocalnet-0.2.4, but its *library* requires the disabled package: network-multicast
5791− - distributed-process-tests < 0 # tried distributed-process-tests-0.4.11, but its *library* does not support: network-3.1.2.5
5806+ - distributed-process-tests < 0 # tried distributed-process-tests-0.4.11, but its *library* does not support: network-3.1.2.7
57925807 - distributed-process-tests < 0 # tried distributed-process-tests-0.4.11, but its *library* does not support: random-1.2.1
57935808 - distributed-process-tests < 0 # tried distributed-process-tests-0.4.11, but its *library* requires the disabled package: rematch
57945809 - distribution < 0 # tried distribution-1.1.1.0, but its *library* does not support: containers-0.6.4.1
@@ -5846,7 +5861,6 @@ packages:
58465861 - ghc-clippy-plugin < 0 # tried ghc-clippy-plugin-0.0.0.1, but its *library* does not support: dhall-1.40.2
58475862 - ghc-clippy-plugin < 0 # tried ghc-clippy-plugin-0.0.0.1, but its *library* does not support: ghc-9.0.2
58485863 - ghc-syb-utils < 0 # tried ghc-syb-utils-0.3.0.0, but its *library* does not support: ghc-9.0.2
5849− - ghc-typelits-extra < 0 # tried ghc-typelits-extra-0.4.3, but its *library* does not support: ghc-bignum-1.1
58505864 - ghcjs-dom < 0 # tried ghcjs-dom-0.9.5.0, but its *library* requires the disabled package: ghcjs-dom-jsaddle
58515865 - gi-gsk < 0 # tried gi-gsk-4.0.4, but its *library* does not support: gi-gdk-3.0.25
58525866 - gi-webkit2 < 0 # tried gi-webkit2-4.0.28, but its *library* requires the disabled package: gi-soup
@@ -5974,7 +5988,7 @@ packages:
59745988 - google-cloud < 0 # tried google-cloud-0.0.4, but its *library* does not support: base-4.15.1.0
59755989 - google-oauth2-jwt < 0 # tried google-oauth2-jwt-0.3.3, but its *library* does not support: base64-bytestring-1.2.1.0
59765990 - google-translate < 0 # tried google-translate-0.5, but its *library* does not support: http-api-data-0.4.3
5977− - google-translate < 0 # tried google-translate-0.5, but its *library* does not support: http-client-0.7.9
5991+ - google-translate < 0 # tried google-translate-0.5, but its *library* does not support: http-client-0.7.10
59785992 - graphql-client < 0 # tried graphql-client-1.1.1, but its *executable* does not support: path-0.9.2
59795993 - groundhog-inspector < 0 # tried groundhog-inspector-0.11.0, but its *library* does not support: groundhog-0.12.0
59805994 - groundhog-inspector < 0 # tried groundhog-inspector-0.11.0, but its *library* does not support: groundhog-th-0.12
@@ -5982,7 +5996,7 @@ packages:
59825996 - grouped-list < 0 # tried grouped-list-0.2.2.1, but its *library* does not support: base-4.15.1.0
59835997 - gtk3 < 0 # tried gtk3-0.15.6, but its *library* does not support: Cabal-3.4.1.0
59845998 - hOpenPGP < 0 # tried hOpenPGP-2.9.7, but its *library* requires the disabled package: ixset-typed
5985− - hackernews < 0 # tried hackernews-1.4.0.0, but its *library* does not support: http-client-0.7.9
5999+ - hackernews < 0 # tried hackernews-1.4.0.0, but its *library* does not support: http-client-0.7.10
59866000 - hackernews < 0 # tried hackernews-1.4.0.0, but its *library* does not support: servant-0.18.3
59876001 - hackernews < 0 # tried hackernews-1.4.0.0, but its *library* does not support: servant-client-0.18.3
59886002 - hadolint < 0 # tried hadolint-2.8.0, but its *library* does not support: deepseq-1.4.5.0
@@ -6013,7 +6027,7 @@ packages:
60136027 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: aeson-1.5.6.0
60146028 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: base-4.15.1.0
60156029 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: ghc-9.0.2
6016− - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: network-3.1.2.5
6030+ - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: network-3.1.2.7
60176031 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: optparse-applicative-0.16.1.0
60186032 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: strict-0.4.0.1
60196033 - haskell-tools-daemon < 0 # tried haskell-tools-daemon-1.1.1.0, but its *library* does not support: template-haskell-2.17.0.0
@@ -6044,8 +6058,8 @@ packages:
60446058 - haskell-tools-rewrite < 0 # tried haskell-tools-rewrite-1.1.1.0, but its *library* requires the disabled package: references
60456059 - haskey < 0 # tried haskey-0.3.1.0, but its *library* does not support: stm-containers-1.2
60466060 - haskey-mtl < 0 # tried haskey-mtl-0.3.1.0, but its *library* does not support: monad-control-1.0.3.1
6047− - haskoin-store < 0 # tried haskoin-store-0.64.16, but its *library* requires the disabled package: haskoin-node
6048− - haskoin-store < 0 # tried haskoin-store-0.64.16, but its *library* requires the disabled package: haskoin-store-data
6061+ - haskoin-store < 0 # tried haskoin-store-0.64.18, but its *library* requires the disabled package: haskoin-node
6062+ - haskoin-store < 0 # tried haskoin-store-0.64.18, but its *library* requires the disabled package: haskoin-store-data
60496063 - hasmin < 0 # tried hasmin-1.0.3, but its *executable* does not support: optparse-applicative-0.16.1.0
60506064 - hasmin < 0 # tried hasmin-1.0.3, but its *library* does not support: attoparsec-0.14.4
60516065 - haxl-amazonka < 0 # tried haxl-amazonka-0.1.1, but its *library* requires the disabled package: haxl
@@ -6054,7 +6068,7 @@ packages:
60546068 - heist < 0 # tried heist-1.1.0.1, but its *library* does not support: base-4.15.1.0
60556069 - heist < 0 # tried heist-1.1.0.1, but its *library* does not support: dlist-1.0
60566070 - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: ansi-terminal-0.11.1
6057− - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: brick-0.65
6071+ - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: brick-0.66.1
60586072 - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: optparse-applicative-0.16.1.0
60596073 - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: semigroups-0.19.2
60606074 - herms < 0 # tried herms-1.9.0.4, but its *executable* does not support: vty-5.33
@@ -6094,7 +6108,7 @@ packages:
60946108 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: ghc-boot-9.0.2
60956109 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: ghc-lib-parser-9.0.2.20211226
60966110 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: hlint-3.3.6
6097− - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: http-client-0.7.9
6111+ - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: http-client-0.7.10
60986112 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: lens-5.0.1
60996113 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: optparse-applicative-0.16.1.0
61006114 - hsdev < 0 # tried hsdev-0.3.4.0, but its *library* does not support: template-haskell-2.17.0.0
@@ -6107,7 +6121,7 @@ packages:
61076121 - hw-hspec-hedgehog < 0 # tried hw-hspec-hedgehog-0.1.1.0, but its *library* does not support: hspec-2.8.5
61086122 - hyraxAbif < 0 # tried hyraxAbif-0.2.3.27, but its *library* does not support: text-1.2.5.0
61096123 - idris < 0 # tried idris-1.3.4, but its *library* does not support: Cabal-3.4.1.0
6110− - idris < 0 # tried idris-1.3.4, but its *library* does not support: network-3.1.2.5
6124+ - idris < 0 # tried idris-1.3.4, but its *library* does not support: network-3.1.2.7
61116125 - importify < 0 # tried importify-1.0.1, but its *library* requires the disabled package: hse-cpp
61126126 - indentation-core < 0 # tried indentation-core-0.0.0.2, but its *library* does not support: base-4.15.1.0
61136127 - indentation-parsec < 0 # tried indentation-parsec-0.0.0.2, but its *library* does not support: base-4.15.1.0
@@ -6119,7 +6133,7 @@ packages:
61196133 - io-streams-haproxy < 0 # tried io-streams-haproxy-1.0.1.0, but its *library* does not support: base-4.15.1.0
61206134 - ipa < 0 # tried ipa-0.3.1.1, but its *library* does not support: unicode-transforms-0.4.0
61216135 - irc-dcc < 0 # tried irc-dcc-2.0.1, but its *library* does not support: attoparsec-0.14.4
6122− - irc-dcc < 0 # tried irc-dcc-2.0.1, but its *library* does not support: network-3.1.2.5
6136+ - irc-dcc < 0 # tried irc-dcc-2.0.1, but its *library* does not support: network-3.1.2.7
61236137 - irc-dcc < 0 # tried irc-dcc-2.0.1, but its *library* does not support: path-0.9.2
61246138 - it-has < 0 # tried it-has-0.2.0.0, but its *library* does not support: generic-lens-2.2.0.0
61256139 - ixset < 0 # tried ixset-1.1.1.1, but its *library* requires the disabled package: syb-with-class
@@ -6198,7 +6212,7 @@ packages:
61986212 - logging-effect-extra-handler < 0 # tried logging-effect-extra-handler-2.0.1, but its *library* does not support: prettyprinter-1.7.1
61996213 - logging-effect-extra-handler < 0 # tried logging-effect-extra-handler-2.0.1, but its *library* requires the disabled package: logging-effect
62006214 - loopbreaker < 0 # tried loopbreaker-0.1.1.1, but its *library* does not support: ghc-9.0.2
6201− - lxd-client < 0 # tried lxd-client-0.1.0.6, but its *library* does not support: network-3.1.2.5
6215+ - lxd-client < 0 # tried lxd-client-0.1.0.6, but its *library* does not support: network-3.1.2.7
62026216 - lxd-client < 0 # tried lxd-client-0.1.0.6, but its *library* does not support: servant-0.18.3
62036217 - lxd-client < 0 # tried lxd-client-0.1.0.6, but its *library* does not support: servant-client-0.18.3
62046218 - machines-directory < 0 # tried machines-directory-7.0.0.0, but its *library* requires the disabled package: machines-io
@@ -6210,12 +6224,12 @@ packages:
62106224 - map-syntax < 0 # tried map-syntax-0.3, but its *library* does not support: base-4.15.1.0
62116225 - markup < 0 # tried markup-4.2.0, but its *library* requires the disabled package: attoparsec-uri
62126226 - marvin < 0 # tried marvin-0.2.5, but its *library* does not support: aeson-1.5.6.0
6213− - marvin < 0 # tried marvin-0.2.5, but its *library* does not support: http-client-0.7.9
6227+ - marvin < 0 # tried marvin-0.2.5, but its *library* does not support: http-client-0.7.10
62146228 - marvin < 0 # tried marvin-0.2.5, but its *library* does not support: lens-5.0.1
62156229 - marvin < 0 # tried marvin-0.2.5, but its *library* requires the disabled package: marvin-interpolate
62166230 - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: extra-1.7.10
62176231 - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: formatting-7.1.3
6218− - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: http-client-0.7.9
6232+ - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: http-client-0.7.10
62196233 - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: optparse-applicative-0.16.1.0
62206234 - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: scalpel-core-0.6.2
62216235 - mbug < 0 # tried mbug-1.3.2, but its *library* does not support: time-1.9.3
@@ -6224,14 +6238,14 @@ packages:
62246238 - messagepack-rpc < 0 # tried messagepack-rpc-0.5.1, but its *library* does not support: containers-0.6.4.1
62256239 - microformats2-parser < 0 # tried microformats2-parser-1.0.2.0, but its *executable* requires the disabled package: aws-lambda-haskell-runtime-wai
62266240 - microformats2-parser < 0 # tried microformats2-parser-1.0.2.0, but its *library* requires the disabled package: xml-lens
6227− - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: http-client-0.7.9
6241+ - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: http-client-0.7.10
62286242 - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: http-media-0.8.0.0
62296243 - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: servant-0.18.3
62306244 - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: servant-client-0.18.3
62316245 - microsoft-translator < 0 # tried microsoft-translator-0.1.2, but its *library* does not support: time-1.9.3
62326246 - midi-music-box < 0 # tried midi-music-box-0.0.1.2, but its *executable* requires the disabled package: diagrams-postscript
62336247 - milena < 0 # tried milena-0.5.4.0, but its *library* does not support: lens-5.0.1
6234− - milena < 0 # tried milena-0.5.4.0, but its *library* does not support: network-3.1.2.5
6248+ - milena < 0 # tried milena-0.5.4.0, but its *library* does not support: network-3.1.2.7
62356249 - milena < 0 # tried milena-0.5.4.0, but its *library* does not support: random-1.2.1
62366250 - milena < 0 # tried milena-0.5.4.0, but its *library* does not support: semigroups-0.19.2
62376251 - mini-egison < 0 # tried mini-egison-1.0.0, but its *library* requires the disabled package: egison-pattern-src
@@ -6261,7 +6275,7 @@ packages:
62616275 - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: binary-conduit-1.3.1
62626276 - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: conduit-1.3.4.2
62636277 - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: conduit-extra-1.3.5
6264− - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: network-3.1.2.5
6278+ - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: network-3.1.2.7
62656279 - msgpack-rpc < 0 # tried msgpack-rpc-1.0.0, but its *library* does not support: random-1.2.1
62666280 - multistate < 0 # tried multistate-0.8.0.3, but its *library* does not support: base-4.15.1.0
62676281 - mwc-random-accelerate < 0 # tried mwc-random-accelerate-0.2.0.0, but its *library* requires the disabled package: accelerate
@@ -6280,8 +6294,7 @@ packages:
62806294 - netrc < 0 # tried netrc-0.2.0.0, but its *library* does not support: base-4.15.1.0
62816295 - network-anonymous-tor < 0 # tried network-anonymous-tor-0.11.0, but its *library* requires the disabled package: hexstring
62826296 - network-anonymous-tor < 0 # tried network-anonymous-tor-0.11.0, but its *library* requires the disabled package: network-attoparsec
6283− - network-msgpack-rpc < 0 # tried network-msgpack-rpc-0.0.6, but its *library* does not support: network-3.1.2.5
6284− - network-msgpack-rpc < 0 # tried network-msgpack-rpc-0.0.6, but its *library* requires the disabled package: data-default-instances-base
6297+ - network-msgpack-rpc < 0 # tried network-msgpack-rpc-0.0.6, but its *library* does not support: network-3.1.2.7
62856298 - network-transport-inmemory < 0 # tried network-transport-inmemory-0.5.2, but its *library* does not support: containers-0.6.4.1
62866299 - nri-test-encoding < 0 # tried nri-test-encoding-0.1.1.1, but its *library* requires the disabled package: servant-auth-server
62876300 - numhask-prelude < 0 # tried numhask-prelude-0.5.0, but its *library* does not support: numhask-0.8.1.0
@@ -6305,7 +6318,7 @@ packages:
63056318 - persistable-record < 0 # tried persistable-record-0.6.0.5, but its *library* requires the disabled package: th-data-compat
63066319 - persistable-types-HDBC-pg < 0 # tried persistable-types-HDBC-pg-0.0.3.5, but its *library* requires the disabled package: persistable-record
63076320 - persistable-types-HDBC-pg < 0 # tried persistable-types-HDBC-pg-0.0.3.5, but its *library* requires the disabled package: relational-query-HDBC
6308− - persistent-mysql-haskell < 0 # tried persistent-mysql-haskell-0.6.0, but its *library* does not support: tls-1.5.6
6321+ - persistent-mysql-haskell < 0 # tried persistent-mysql-haskell-0.6.0, but its *library* does not support: tls-1.5.7
63096322 - pg-harness-server < 0 # tried pg-harness-server-0.6.2, but its *executable* does not support: random-1.2.1
63106323 - pg-harness-server < 0 # tried pg-harness-server-0.6.2, but its *executable* does not support: scotty-0.12
63116324 - picedit < 0 # tried picedit-0.2.3.0, but its *executable* requires the disabled package: cli
@@ -6324,9 +6337,9 @@ packages:
63246337 - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: base64-bytestring-1.2.1.0
63256338 - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: containers-0.6.4.1
63266339 - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: hashable-1.3.5.0
6327− - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: http-client-0.7.9
6340+ - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: http-client-0.7.10
63286341 - pier-core < 0 # tried pier-core-0.3.0.0, but its *library* does not support: shake-0.19.6
6329− - pinboard < 0 # tried pinboard-0.10.2.0, but its *library* does not support: http-client-0.7.9
6342+ - pinboard < 0 # tried pinboard-0.10.2.0, but its *library* does not support: http-client-0.7.10
63306343 - pipes-category < 0 # tried pipes-category-0.3.0.0, but its *library* does not support: lens-5.0.1
63316344 - pipes-misc < 0 # tried pipes-misc-0.5.0.0, but its *library* requires the disabled package: pipes-category
63326345 - pipes-network-tls < 0 # tried pipes-network-tls-0.4, but its *library* requires the disabled package: pipes-network
@@ -6364,7 +6377,7 @@ packages:
63646377 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: connection-0.3.1
63656378 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: constraints-0.13.2
63666379 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: http-api-data-0.4.3
6367− - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: http-client-0.7.9
6380+ - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: http-client-0.7.10
63686381 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: lens-5.0.1
63696382 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* does not support: req-3.9.2
63706383 - rakuten < 0 # tried rakuten-0.1.1.5, but its *library* requires the disabled package: extensible
@@ -6393,10 +6406,10 @@ packages:
63936406 - rethinkdb-client-driver < 0 # tried rethinkdb-client-driver-0.0.25, but its *library* does not support: base-4.15.1.0
63946407 - rhine-gloss < 0 # tried rhine-gloss-0.7.0, but its *library* requires the disabled package: rhine
63956408 - riak < 0 # tried riak-1.2.0.0, but its *library* does not support: attoparsec-0.14.4
6396− - riak < 0 # tried riak-1.2.0.0, but its *library* does not support: network-3.1.2.5
6409+ - riak < 0 # tried riak-1.2.0.0, but its *library* does not support: network-3.1.2.7
63976410 - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: aeson-1.5.6.0
6398− - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: http-client-0.7.9
6399− - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: network-3.1.2.5
6411+ - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: http-client-0.7.10
6412+ - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: network-3.1.2.7
64006413 - rollbar-hs < 0 # tried rollbar-hs-0.3.1.0, but its *library* does not support: time-1.9.3
64016414 - safe-tensor < 0 # tried safe-tensor-0.2.1.1, but its *library* does not support: singletons-3.0.1
64026415 - salak-toml < 0 # tried salak-toml-0.3.5.3, but its *library* requires the disabled package: tomland
@@ -6408,7 +6421,7 @@ packages:
64086421 - sendgrid-v3 < 0 # tried sendgrid-v3-0.3.0.0, but its *library* does not support: base-4.15.1.0
64096422 - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: aeson-1.5.6.0
64106423 - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: base-4.15.1.0
6411− - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: http-client-0.7.9
6424+ - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: http-client-0.7.10
64126425 - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: lens-5.0.1
64136426 - sensu-run < 0 # tried sensu-run-0.7.0.5, but its *executable* does not support: optparse-applicative-0.16.1.0
64146427 - seqloc < 0 # tried seqloc-0.6.1.1, but its *library* requires the disabled package: biocore
@@ -6475,8 +6488,7 @@ packages:
64756488 - sized-grid < 0 # tried sized-grid-0.2.0.1, but its *library* does not support: lens-5.0.1
64766489 - sized-grid < 0 # tried sized-grid-0.2.0.1, but its *library* does not support: random-1.2.1
64776490 - skeletons < 0 # tried skeletons-0.4.0, but its *executable* requires the disabled package: tinytemplate
6478− - slack-web < 0 # tried slack-web-0.3.0.1, but its *library* does not support: base-4.15.1.0
6479− - slack-web < 0 # tried slack-web-0.3.0.1, but its *library* does not support: http-client-0.7.9
6491+ - slack-web < 0 # tried slack-web-0.4.0.0, but its *library* does not support: http-client-0.7.10
64806492 - smallcheck-series < 0 # tried smallcheck-series-0.7.1.0, but its *library* does not support: base-4.15.1.0
64816493 - smash-lens < 0 # tried smash-lens-0.1.0.1, but its *library* does not support: lens-5.0.1
64826494 - snap < 0 # tried snap-1.1.3.1, but its *library* does not support: aeson-1.5.6.0
@@ -6489,7 +6501,7 @@ packages:
64896501 - snap < 0 # tried snap-1.1.3.1, but its *library* requires the disabled package: snap-server
64906502 - snap-blaze < 0 # tried snap-blaze-0.2.1.5, but its *library* requires the disabled package: snap-core
64916503 - snap-core < 0 # tried snap-core-1.0.4.2, but its *library* does not support: attoparsec-0.14.4
6492− - socket-activation < 0 # tried socket-activation-0.1.0.2, but its *library* does not support: network-3.1.2.5
6504+ - socket-activation < 0 # tried socket-activation-0.1.0.2, but its *library* does not support: network-3.1.2.7
64936505 - sparkle < 0 # tried sparkle-0.7.4, but its *library* does not support: inline-java-0.10.0
64946506 - sparkle < 0 # tried sparkle-0.7.4, but its *library* does not support: jvm-0.6.0
64956507 - sparkle < 0 # tried sparkle-0.7.4, but its *library* requires the disabled package: distributed-closure
@@ -6514,17 +6526,17 @@ packages:
65146526 - sv-core < 0 # tried sv-core-0.5, but its *library* does not support: profunctors-5.6.2
65156527 - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: containers-0.6.4.1
65166528 - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: http-api-data-0.4.3
6517− - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: http-client-0.7.9
6529+ - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: http-client-0.7.10
65186530 - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: http-media-0.8.0.0
65196531 - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: katip-0.8.7.0
6520− - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: network-3.1.2.5
6532+ - swagger-petstore < 0 # tried swagger-petstore-0.0.2.0, but its *library* does not support: network-3.1.2.7
65216533 - swagger2 < 0 # tried swagger2-2.7, but its *library* does not support: aeson-1.5.6.0
65226534 - sweet-egison < 0 # tried sweet-egison-0.1.1.3, but its *library* requires the disabled package: egison-pattern-src
65236535 - sweet-egison < 0 # tried sweet-egison-0.1.1.3, but its *library* requires the disabled package: egison-pattern-src-th-mode
65246536 - tasty-stats < 0 # tried tasty-stats-0.2.0.4, but its *library* does not support: containers-0.6.4.1
65256537 - tasty-stats < 0 # tried tasty-stats-0.2.0.4, but its *library* does not support: tasty-1.4.2.1
65266538 - tasty-stats < 0 # tried tasty-stats-0.2.0.4, but its *library* does not support: time-1.9.3
6527− - tcp-streams-openssl < 0 # tried tcp-streams-openssl-1.0.1.0, but its *library* does not support: network-3.1.2.5
6539+ - tcp-streams-openssl < 0 # tried tcp-streams-openssl-1.0.1.0, but its *library* does not support: network-3.1.2.7
65286540 - termcolor < 0 # tried termcolor-0.2.0.0, but its *executable* requires the disabled package: cli
65296541 - termonad < 0 # tried termonad-4.2.0.0, but its *library* requires the disabled package: xml-html-qq
65306542 - test-fixture < 0 # tried test-fixture-0.5.1.0, but its *library* does not support: template-haskell-2.17.0.0
@@ -6544,22 +6556,21 @@ packages:
65446556 - tonatona < 0 # tried tonatona-0.1.2.1, but its *library* does not support: base-4.15.1.0
65456557 - tonatona-logger < 0 # tried tonatona-logger-0.2.0.2, but its *library* does not support: base-4.15.1.0
65466558 - tonatona-persistent-postgresql < 0 # tried tonatona-persistent-postgresql-0.1.0.2, but its *library* does not support: base-4.15.1.0
6547− - tonatona-persistent-postgresql < 0 # tried tonatona-persistent-postgresql-0.1.0.2, but its *library* does not support: persistent-2.13.2.1
6548− - tonatona-persistent-postgresql < 0 # tried tonatona-persistent-postgresql-0.1.0.2, but its *library* does not support: persistent-postgresql-2.13.2.1
6559+ - tonatona-persistent-postgresql < 0 # tried tonatona-persistent-postgresql-0.1.0.2, but its *library* does not support: persistent-2.13.2.2
6560+ - tonatona-persistent-postgresql < 0 # tried tonatona-persistent-postgresql-0.1.0.2, but its *library* does not support: persistent-postgresql-2.13.2.2
65496561 - tonatona-persistent-sqlite < 0 # tried tonatona-persistent-sqlite-0.1.0.2, but its *library* does not support: base-4.15.1.0
6550− - tonatona-persistent-sqlite < 0 # tried tonatona-persistent-sqlite-0.1.0.2, but its *library* does not support: persistent-2.13.2.1
6551− - tonatona-persistent-sqlite < 0 # tried tonatona-persistent-sqlite-0.1.0.2, but its *library* does not support: persistent-sqlite-2.13.0.3
6562+ - tonatona-persistent-sqlite < 0 # tried tonatona-persistent-sqlite-0.1.0.2, but its *library* does not support: persistent-2.13.2.2
6563+ - tonatona-persistent-sqlite < 0 # tried tonatona-persistent-sqlite-0.1.0.2, but its *library* does not support: persistent-sqlite-2.13.0.4
65526564 - tonatona-servant < 0 # tried tonatona-servant-0.1.0.4, but its *library* does not support: base-4.15.1.0
65536565 - tonatona-servant < 0 # tried tonatona-servant-0.1.0.4, but its *library* does not support: servant-0.18.3
65546566 - tonatona-servant < 0 # tried tonatona-servant-0.1.0.4, but its *library* does not support: servant-server-0.18.3
65556567 - tonatona-servant < 0 # tried tonatona-servant-0.1.0.4, but its *library* does not support: wai-extra-3.1.8
65566568 - transformers-lift < 0 # tried transformers-lift-0.2.0.2, but its *library* does not support: base-4.15.1.0
65576569 - transformers-lift < 0 # tried transformers-lift-0.2.0.2, but its *library* does not support: writer-cps-transformers-0.5.6.1
6558− - transient-universe < 0 # tried transient-universe-0.6.0.1, but its *library* does not support: network-3.1.2.5
6570+ - transient-universe < 0 # tried transient-universe-0.6.0.1, but its *library* does not support: network-3.1.2.7
65596571 - tries < 0 # tried tries-0.0.6.1, but its *library* requires the disabled package: rose-trees
65606572 - true-name < 0 # tried true-name-0.1.0.3, but its *library* does not support: template-haskell-2.17.0.0
65616573 - type-combinators-singletons < 0 # tried type-combinators-singletons-0.2.1.0, but its *library* requires the disabled package: type-combinators
6562− - tz < 0 # tried tz-0.1.3.5, but its *library* does not support: template-haskell-2.17.0.0
65636574 - ucam-webauth < 0 # tried ucam-webauth-0.1.0.0, but its *library* does not support: aeson-1.5.6.0
65646575 - ucam-webauth < 0 # tried ucam-webauth-0.1.0.0, but its *library* does not support: attoparsec-0.14.4
65656576 - ucam-webauth < 0 # tried ucam-webauth-0.1.0.0, but its *library* does not support: base-4.15.1.0
@@ -6581,13 +6592,13 @@ packages:
65816592 - vector-circular < 0 # tried vector-circular-0.1.3, but its *library* does not support: template-haskell-2.17.0.0
65826593 - vector-fftw < 0 # tried vector-fftw-0.1.4.0, but its *library* does not support: base-4.15.1.0
65836594 - viewprof < 0 # tried viewprof-0.0.0.33, but its *executable* does not support: base-4.15.1.0
6584− - viewprof < 0 # tried viewprof-0.0.0.33, but its *executable* does not support: brick-0.65
6595+ - viewprof < 0 # tried viewprof-0.0.0.33, but its *executable* does not support: brick-0.66.1
65856596 - viewprof < 0 # tried viewprof-0.0.0.33, but its *executable* does not support: lens-5.0.1
65866597 - viewprof < 0 # tried viewprof-0.0.0.33, but its *executable* does not support: vty-5.33
65876598 - wai-middleware-crowd < 0 # tried wai-middleware-crowd-0.1.4.2, but its *executable* does not support: optparse-applicative-0.16.1.0
65886599 - wai-middleware-metrics < 0 # tried wai-middleware-metrics-0.2.4, but its *library* requires the disabled package: ekg-core
65896600 - wai-middleware-rollbar < 0 # tried wai-middleware-rollbar-0.11.0, but its *library* does not support: aeson-1.5.6.0
6590− - wai-middleware-rollbar < 0 # tried wai-middleware-rollbar-0.11.0, but its *library* does not support: http-client-0.7.9
6601+ - wai-middleware-rollbar < 0 # tried wai-middleware-rollbar-0.11.0, but its *library* does not support: http-client-0.7.10
65916602 - wai-middleware-rollbar < 0 # tried wai-middleware-rollbar-0.11.0, but its *library* does not support: time-1.9.3
65926603 - wai-middleware-throttle < 0 # tried wai-middleware-throttle-0.3.0.1, but its *library* requires the disabled package: token-bucket
65936604 - wai-routing < 0 # tried wai-routing-0.13.0, but its *library* requires the disabled package: wai-predicates
@@ -6602,7 +6613,7 @@ packages:
66026613 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: base-4.15.1.0
66036614 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: cryptonite-0.29
66046615 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: hspec-2.8.5
6605− - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: http-client-0.7.9
6616+ - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: http-client-0.7.10
66066617 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: memory-0.16.0
66076618 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: servant-0.18.3
66086619 - web3 < 0 # tried web3-0.9.1.0, but its *library* does not support: servant-client-0.18.3
@@ -6624,7 +6635,7 @@ packages:
66246635 - xml-isogen < 0 # tried xml-isogen-0.3.0, but its *library* requires the disabled package: dom-parser
66256636 - yeshql < 0 # tried yeshql-4.2.0.0, but its *library* does not support: yeshql-core-4.2.0.0
66266637 - yeshql < 0 # tried yeshql-4.2.0.0, but its *library* requires the disabled package: yeshql-hdbc
6627− - yesod-auth-bcryptdb < 0 # tried yesod-auth-bcryptdb-0.3.0.1, but its *library* does not support: persistent-2.13.2.1
6638+ - yesod-auth-bcryptdb < 0 # tried yesod-auth-bcryptdb-0.3.0.1, but its *library* does not support: persistent-2.13.2.2
66286639 - yesod-auth-bcryptdb < 0 # tried yesod-auth-bcryptdb-0.3.0.1, but its *library* does not support: yesod-auth-1.6.10.5
66296640 - yesod-auth-bcryptdb < 0 # tried yesod-auth-bcryptdb-0.3.0.1, but its *library* does not support: yesod-core-1.6.21.0
66306641 - yesod-auth-bcryptdb < 0 # tried yesod-auth-bcryptdb-0.3.0.1, but its *library* does not support: yesod-form-1.7.0
@@ -6663,6 +6674,9 @@ packages:
66636674
66646675 # aeson-2
66656676 # https://github.com/commercialhaskell/stackage/issues/6217
6677+ # https://github.com/commercialhaskell/stackage/issues/6402
6678+ # https://github.com/commercialhaskell/stackage/issues/6243
6679+ # https://github.com/commercialhaskell/stackage/issues/6393
66666680 - aeson < 2.0.0.0
66676681 - aura < 3.2.6
66686682 - avro < 0.6.0.0
@@ -6670,6 +6684,7 @@ packages:
66706684 - core-data < 0.3.0.0
66716685 - eventstore < 1.4.2
66726686 - faktory < 1.1.2.1
6687+ - flow < 2.0.0.0
66736688 - forma < 1.2.0
66746689 - geojson < 4.1.0
66756690 - greskell < 2.0.0.0
@@ -6677,25 +6692,20 @@ packages:
66776692 - greskell-websocket < 1.0.0.0
66786693 - hruby < 0.4.0.0
66796694 - hspec-expectations-json < 1.0.0.5
6695+ - http2 < 3.0.3
6696+ - jose < 0.9
66806697 - jsonpath < 0.2.1.0
66816698 - kanji < 3.5
66826699 - microlens-aeson < 2.4
66836700 - mmark-cli < 0.0.5.1
6701+ - pandoc-plot < 1.4.0
66846702 - postgresql-binary < 0.12.4.2
66856703 - servant-tracing < 0.2.0.0
66866704 - shikensu < 0.4.0
66876705 - stache < 2.3.1
66886706 - stripe-scotty < 1.1.0.1
66896707 - stripe-wreq < 1.0.1.12
6690−
6691− # happy-1.21.0 is deprecated an unbuildable
6692− # https://github.com/commercialhaskell/stackage/issues/6294
6693− # see also https://github.com/commercialhaskell/stackage/issues/6242
6694− - happy < 1.21
6695−
6696− # https://github.com/commercialhaskell/stackage/issues/6243
6697− # lift together with https://github.com/commercialhaskell/stackage/issues/6217
6698− - jose < 0.9
6708+ - yaml < 0.11.7
66996709
67006710 # https://github.com/commercialhaskell/stackage/issues/6264
67016711 # Requires GHC 9.2
@@ -6757,19 +6767,9 @@ packages:
67576767 # issue is for 5.0, but 4.0.4 is deprecated.
67586768 - hw-kafka-client < 4.0.4
67596769
6760− # https://github.com/commercialhaskell/stackage/issues/6393
6761− - flow < 2.0.0.0 # blocked by shikensu through aeson-2.0
6762−
67636770 # https://github.com/commercialhaskell/stackage/issues/6395
67646771 - wuss < 2.0
67656772
6766− # https://github.com/commercialhaskell/stackage/issues/6396
6767− # https://github.com/commercialhaskell/stackage/issues/6397
6768− # https://github.com/commercialhaskell/stackage/issues/6398
6769− - pandoc < 2.17
6770− - texmath < 0.12.4
6771− - ipynb < 0.2
6772−
67736773 # https://github.com/haskell-game/sdl2/issues/240 (need newer Ubuntu)
67746774 - sdl2 < 2.5.3.1
67756775
@@ -6779,8 +6779,6 @@ packages:
67796779 # https://github.com/commercialhaskell/stackage/issues/6401
67806780 - rope-utf16-splay < 0.4
67816781
6782− # https://github.com/commercialhaskell/stackage/issues/6402
6783− - yaml < 0.11.7
67846782# end of packages
67856783
67866784# Package flags are applied to individual packages, and override the values of
@@ -6923,6 +6921,7 @@ skipped-builds:
69236921# Otherwise place them in expected-test-failures.
69246922skipped-tests:
69256923 # aeson-2
6924+ # https://github.com/commercialhaskell/stackage/issues/6217
69266925 - jsonifier
69276926 - req
69286927
@@ -7004,6 +7003,9 @@ skipped-tests:
70047003 - hpqtypes-extras # needs a running postgres database
70057004 # norfairking
70067005 - autodocodec # runs doctest
7006+ - captcha-core
7007+ - captcha-2captcha
7008+ - captcha-capmonster
70077009
70087010 # Uses Cabal's "library internal" stanza feature
70097011 - s3-signer
@@ -7051,7 +7053,7 @@ skipped-tests:
70517053 # Test bounds issues
70527054 - ENIG # tried ENIG-0.0.1.0, but its *test-suite* requires the disabled package: test-framework-th
70537055 - IPv6DB # tried IPv6DB-0.3.2, but its *test-suite* does not support: hspec-2.8.5
7054− - IPv6DB # tried IPv6DB-0.3.2, but its *test-suite* does not support: http-client-0.7.9
7056+ - IPv6DB # tried IPv6DB-0.3.2, but its *test-suite* does not support: http-client-0.7.10
70557057 - MissingH # tried MissingH-1.4.3.0, but its *test-suite* requires the disabled package: errorcall-eq-instance
70567058 - aeson # tried aeson-1.5.6.0, but its *test-suite* does not support: hashable-time-0.3
70577059 - airship # tried airship-0.9.4, but its *test-suite* does not support: tasty-1.4.2.1
@@ -7112,7 +7114,6 @@ skipped-tests:
71127114 - generic-xmlpickler # tried generic-xmlpickler-0.1.0.6, but its *test-suite* does not support: tasty-1.4.2.1
71137115 - ghc-prof # tried ghc-prof-1.4.1.9, but its *test-suite* does not support: attoparsec-0.14.4
71147116 - gitlib-libgit2 # tried gitlib-libgit2-3.1.2.1, but its *test-suite* requires the disabled package: gitlib-test
7115− - hackage-security # tried hackage-security-0.6.0.1, but its *test-suite* does not support: tasty-1.4.2.1
71167117 - haddock-library # tried haddock-library-1.10.0, but its *test-suite* does not support: hspec-2.8.5
71177118 - haddock-library # tried haddock-library-1.10.0, but its *test-suite* does not support: hspec-discover-2.8.5
71187119 - haddock-library # tried haddock-library-1.10.0, but its *test-suite* does not support: optparse-applicative-0.16.1.0
@@ -7122,7 +7123,7 @@ skipped-tests:
71227123 - haskell-tools-cli # tried haskell-tools-cli-1.1.1.0, but its *test-suite* requires the disabled package: knob
71237124 - haskell-tools-daemon # tried haskell-tools-daemon-1.1.1.0, but its *test-suite* does not support: Glob-0.10.2
71247125 - haskell-tools-daemon # tried haskell-tools-daemon-1.1.1.0, but its *test-suite* does not support: tasty-1.4.2.1
7125− - haskell-tools-demo # tried haskell-tools-demo-1.1.1.0, but its *test-suite* does not support: network-3.1.2.5
7126+ - haskell-tools-demo # tried haskell-tools-demo-1.1.1.0, but its *test-suite* does not support: network-3.1.2.7
71267127 - haskell-tools-demo # tried haskell-tools-demo-1.1.1.0, but its *test-suite* does not support: tasty-1.4.2.1
71277128 - haskell-tools-refactor # tried haskell-tools-refactor-1.1.1.0, but its *test-suite* does not support: polyparse-1.13
71287129 - haskell-tools-refactor # tried haskell-tools-refactor-1.1.1.0, but its *test-suite* does not support: tasty-1.4.2.1
@@ -7234,7 +7235,7 @@ skipped-tests:
72347235 - simple-log # tried simple-log-0.9.12, but its *test-suite* does not support: hspec-2.8.5
72357236 - sized-grid # tried sized-grid-0.2.0.1, but its *test-suite* does not support: ansi-terminal-0.11.1
72367237 - snap # tried snap-1.1.3.1, but its *test-suite* does not support: QuickCheck-2.14.2
7237− - stb-image-redux # tried stb-image-redux-0.2.1.3, but its *test-suite* does not support: hspec-2.8.5
7238+ - stb-image-redux # tried stb-image-redux-0.2.1.2, but its *test-suite* does not support: hspec-2.8.5
72387239 - stm-supply # tried stm-supply-0.2.0.0, but its *test-suite* requires the disabled package: Unique
72397240 - streaming-cassava # tried streaming-cassava-0.2.0.0, but its *test-suite* does not support: hspec-2.8.5
72407241 - stripe-http-client # tried stripe-http-client-2.6.2, but its *test-suite* does not support: hspec-2.8.5
@@ -7252,7 +7253,6 @@ skipped-tests:
72527253 - temporary-resourcet # tried temporary-resourcet-0.1.0.1, but its *test-suite* does not support: tasty-1.4.2.1
72537254 - test-framework # tried test-framework-0.8.2.0, but its *test-suite* requires the disabled package: libxml
72547255 - transient # tried transient-0.7.0.0, but its *test-suite* does not support: random-1.2.1
7255− - tzdata # tried tzdata-0.2.20201021.0, but its *test-suite* requires the disabled package: test-framework-th
72567256 - ucam-webauth # tried ucam-webauth-0.1.0.0, but its *test-suite* does not support: QuickCheck-2.14.2
72577257 - ucam-webauth # tried ucam-webauth-0.1.0.0, but its *test-suite* does not support: generic-random-1.5.0.1
72587258 - ucam-webauth # tried ucam-webauth-0.1.0.0, but its *test-suite* does not support: hspec-2.8.5
@@ -7277,6 +7277,8 @@ skipped-tests:
72777277 # https://github.com/commercialhaskell/stackage/issues/6363
72787278 - amqp
72797279
7280+ - c2hs # https://github.com/commercialhaskell/stackage/issues/6420
7281+
72807282# end of skipped-tests
72817283
72827284# Tests listed in expected-test-failures configure correctly but may fail to run
@@ -7552,6 +7554,7 @@ expected-test-failures:
75527554 - xml-picklers # https://github.com/Philonous/xml-picklers/issues/5
75537555 - xmlbf
75547556 - yesod-gitrev # needs a git repo https://github.com/commercialhaskell/stackage/issues/6132
7557+ - yesod-markdown # https://github.com/pbrisbin/yesod-markdown/issues/77
75557558
75567559 # Assertion failures due to module name ambiguity.
75577560 # These _should_ be fixed by using the `hide` section of this file
@@ -7725,6 +7728,7 @@ expected-benchmark-failures:
77257728# Otherwise place them in expected-benchmark-failures.
77267729skipped-benchmarks:
77277730 # aeson-2
7731+ # https://github.com/commercialhaskell/stackage/issues/6217
77287732 - jsonifier
77297733
77307734 # Cyclic dependencies
@@ -8031,6 +8035,7 @@ no-revisions:
80318035- hi-file-parser
80328036
80338037
8038+# Note, this no longer actually does anything with curator2 unfortunately:
80348039# Do not build these packages in parallel with others. Useful for high memory
80358040# usage.
80368041non-parallel-builds:
commenternew file+20
@@ -0,0 +1,20 @@
1+#!/usr/bin/env bash
2+
3+if ! command -v cargo
4+then
5+ echo "Rust doesn't seem to be installed. https://rustup.rs/"
6+ exit 1
7+fi
8+
9+if [ "$1" = "outdated" ];
10+then
11+ if ! command -v latest-version &> /dev/null
12+ then
13+ echo "This command requires latest-version in your PATH"
14+ echo "Install it with: "
15+ echo "stack install --stack-yaml etc/commenter/latest-version/stack.yaml"
16+ exit 1
17+ fi
18+fi
19+
20+cargo run -q --release --manifest-path etc/commenter/Cargo.toml $@
etc/commenter/Cargo.lock+95−18
@@ -31,6 +31,12 @@ dependencies = [
3131 "winapi",
3232]
3333
34+[[package]]
35+name = "autocfg"
36+version = "1.0.1"
37+source = "registry+https://github.com/rust-lang/crates.io-index"
38+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
39+
3440[[package]]
3541name = "bitflags"
3642version = "1.3.2"
@@ -58,9 +64,17 @@ version = "0.2.0"
5864dependencies = [
5965 "lazy-regex",
6066 "regex",
67+ "serde",
68+ "serde_yaml",
6169 "structopt",
6270]
6371
72+[[package]]
73+name = "hashbrown"
74+version = "0.11.2"
75+source = "registry+https://github.com/rust-lang/crates.io-index"
76+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
77+
6478[[package]]
6579name = "heck"
6680version = "0.3.3"
@@ -79,11 +93,21 @@ dependencies = [
7993 "libc",
8094]
8195
96+[[package]]
97+name = "indexmap"
98+version = "1.8.0"
99+source = "registry+https://github.com/rust-lang/crates.io-index"
100+checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
101+dependencies = [
102+ "autocfg",
103+ "hashbrown",
104+]
105+
82106[[package]]
83107name = "lazy-regex"
84−version = "2.2.1"
108+version = "2.2.2"
85109source = "registry+https://github.com/rust-lang/crates.io-index"
86−checksum = "17d198f91272f6e788a5c0bd5d741cf778da4e5bc761ec67b32d5d3b0db34a54"
110+checksum = "919a16773ebf2de27e95fc58460110932e55bb0780e23aa51fa5a6b59c9e2b3d"
87111dependencies = [
88112 "lazy-regex-proc_macros",
89113 "once_cell",
@@ -92,9 +116,9 @@ dependencies = [
92116
93117[[package]]
94118name = "lazy-regex-proc_macros"
95−version = "2.2.1"
119+version = "2.2.2"
96120source = "registry+https://github.com/rust-lang/crates.io-index"
97−checksum = "6c12938b1b92cf5be22940527e15b79fd0c7e706e34bc70816f6a72b3484f84e"
121+checksum = "5fbe6bf0a04af51c07976625d5007e75ed9b8b955befc21c77b3947733496e36"
98122dependencies = [
99123 "proc-macro2",
100124 "quote",
@@ -110,21 +134,27 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
110134
111135[[package]]
112136name = "libc"
113−version = "0.2.108"
137+version = "0.2.112"
138+source = "registry+https://github.com/rust-lang/crates.io-index"
139+checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
140+
141+[[package]]
142+name = "linked-hash-map"
143+version = "0.5.4"
114144source = "registry+https://github.com/rust-lang/crates.io-index"
115−checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119"
145+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
116146
117147[[package]]
118148name = "memchr"
119−version = "2.4.0"
149+version = "2.4.1"
120150source = "registry+https://github.com/rust-lang/crates.io-index"
121−checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
151+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
122152
123153[[package]]
124154name = "once_cell"
125−version = "1.8.0"
155+version = "1.9.0"
126156source = "registry+https://github.com/rust-lang/crates.io-index"
127−checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
157+checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
128158
129159[[package]]
130160name = "proc-macro-error"
@@ -152,18 +182,18 @@ dependencies = [
152182
153183[[package]]
154184name = "proc-macro2"
155−version = "1.0.27"
185+version = "1.0.36"
156186source = "registry+https://github.com/rust-lang/crates.io-index"
157−checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
187+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
158188dependencies = [
159189 "unicode-xid",
160190]
161191
162192[[package]]
163193name = "quote"
164−version = "1.0.9"
194+version = "1.0.14"
165195source = "registry+https://github.com/rust-lang/crates.io-index"
166−checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
196+checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
167197dependencies = [
168198 "proc-macro2",
169199]
@@ -185,6 +215,44 @@ version = "0.6.25"
185215source = "registry+https://github.com/rust-lang/crates.io-index"
186216checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
187217
218+[[package]]
219+name = "ryu"
220+version = "1.0.9"
221+source = "registry+https://github.com/rust-lang/crates.io-index"
222+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
223+
224+[[package]]
225+name = "serde"
226+version = "1.0.133"
227+source = "registry+https://github.com/rust-lang/crates.io-index"
228+checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
229+dependencies = [
230+ "serde_derive",
231+]
232+
233+[[package]]
234+name = "serde_derive"
235+version = "1.0.133"
236+source = "registry+https://github.com/rust-lang/crates.io-index"
237+checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
238+dependencies = [
239+ "proc-macro2",
240+ "quote",
241+ "syn",
242+]
243+
244+[[package]]
245+name = "serde_yaml"
246+version = "0.8.23"
247+source = "registry+https://github.com/rust-lang/crates.io-index"
248+checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0"
249+dependencies = [
250+ "indexmap",
251+ "ryu",
252+ "serde",
253+ "yaml-rust",
254+]
255+
188256[[package]]
189257name = "strsim"
190258version = "0.8.0"
@@ -217,9 +285,9 @@ dependencies = [
217285
218286[[package]]
219287name = "syn"
220−version = "1.0.73"
288+version = "1.0.85"
221289source = "registry+https://github.com/rust-lang/crates.io-index"
222−checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
290+checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7"
223291dependencies = [
224292 "proc-macro2",
225293 "quote",
@@ -261,9 +329,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
261329
262330[[package]]
263331name = "version_check"
264−version = "0.9.3"
332+version = "0.9.4"
265333source = "registry+https://github.com/rust-lang/crates.io-index"
266−checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
334+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
267335
268336[[package]]
269337name = "winapi"
@@ -286,3 +354,12 @@ name = "winapi-x86_64-pc-windows-gnu"
286354version = "0.4.0"
287355source = "registry+https://github.com/rust-lang/crates.io-index"
288356checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
357+
358+[[package]]
359+name = "yaml-rust"
360+version = "0.4.5"
361+source = "registry+https://github.com/rust-lang/crates.io-index"
362+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
363+dependencies = [
364+ "linked-hash-map",
365+]
etc/commenter/Cargo.toml+2
@@ -9,4 +9,6 @@ edition = "2018"
99[dependencies]
1010lazy-regex = "2.2.1"
1111regex = "1.5.4"
12+serde = { version = "1.0.133", features = ["derive"] }
13+serde_yaml = "0.8.23"
1214structopt = "0.3.25"
etc/commenter/latest-version/latest-version.cabal+1−1
@@ -12,7 +12,7 @@ cabal-version: >=1.10
1212extra-source-files: README.md
1313
1414executable latest-version
15− ghc-options: -Wall
15+ ghc-options: -Wall -threaded
1616 hs-source-dirs: src
1717 main-is: Main.hs
1818 default-language: Haskell2010
etc/commenter/latest-version/src/Main.hs+17−7
@@ -9,10 +9,20 @@ import System.Environment
99import qualified Data.Map as Map
1010
1111main :: IO ()
12−main =
13− runPantryApp $
14− liftIO . putStrLn
15− . intercalate "." . map show . versionNumbers
16− . fst . head . Map.toDescList
17− =<< getHackagePackageVersions YesRequireHackageIndex IgnorePreferredVersions
18− . mkPackageName =<< head <$> liftIO getArgs
12+main = do
13+ args <- getArgs
14+ (onlyVersion, packages) <- pure $ case args of
15+ "only-version" : packages -> (True, packages)
16+ packages -> (False, packages)
17+ runPantryApp $ liftIO . putStrLn . unlines_ =<< mapM (latestVersion onlyVersion) packages
18+ where
19+ -- unlines adds an extra trailing newline which can be annoying...
20+ unlines_ = intercalate "\n"
21+
22+latestVersion :: (HasPantryConfig env, HasLogFunc env) => Bool -> String -> RIO env String
23+latestVersion onlyVersion name = fmap (displayVersion onlyVersion) . getVersion . mkPackageName $ name
24+ where
25+ showVersion = intercalate "." . map show . versionNumbers . fst . head . Map.toDescList
26+ getVersion = getHackagePackageVersions YesRequireHackageIndex UsePreferredVersions
27+ displayVersion True v = showVersion v
28+ displayVersion False v = name <> "-" <> showVersion v
etc/commenter/latest-version/stack.yaml.locknew file+13
@@ -0,0 +1,13 @@
1+# This file was autogenerated by Stack.
2+# You should not edit this file by hand.
3+# For more information, please see the documentation at:
4+# https://docs.haskellstack.org/en/stable/lock_files
5+
6+packages: []
7+snapshots:
8+- completed:
9+ size: 586296
10+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/18.yaml
11+ sha256: 63539429076b7ebbab6daa7656cfb079393bf644971156dc349d7c0453694ac2
12+ original:
13+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/18.yaml
etc/commenter/src/lib.rs+324−47
@@ -1,10 +1,13 @@
11use std::collections::{BTreeMap, BTreeSet};
2+use std::error::Error;
3+use std::fmt;
24use std::fs::File;
35use std::io::{BufRead, BufReader, LineWriter, Lines, Write};
46use std::path::Path;
57use std::process::Command;
68
79use lazy_regex::regex;
10+use serde::{Deserialize, Deserializer};
811
912pub fn clear() {
1013 handle(true, |loc, _lines| match loc {
@@ -27,8 +30,8 @@ pub fn add(lib: Vec<String>, test: Vec<String>, bench: Vec<String>) {
2730}
2831
2932enum VersionTag {
30− Manual(String),
31− Auto(String),
33+ Manual(Version),
34+ Auto(Version),
3235}
3336
3437impl VersionTag {
@@ -39,7 +42,7 @@ impl VersionTag {
3942 }
4043 }
4144
42− fn version(&self) -> &str {
45+ fn version(&self) -> &Version {
4346 match self {
4447 VersionTag::Manual(s) => s,
4548 VersionTag::Auto(s) => s,
@@ -49,48 +52,55 @@ impl VersionTag {
4952
5053pub fn outdated() {
5154 let mut all: Vec<String> = vec![];
52− let versioned = handle(false, |_loc, lines| {
55+ let (versioned, disabled) = handle(false, |_loc, lines| {
5356 all.extend(lines);
5457 vec![]
5558 });
56− let mut map: BTreeMap<String, VersionTag> = BTreeMap::new();
59+
60+ for DisabledPackage { package } in disabled {
61+ println!("WARN: {package} is disabled without a noted version");
62+ }
63+
64+ let mut map: BTreeMap<Package, VersionTag> = BTreeMap::new();
5765 for VersionedPackage { package, version } in versioned {
5866 map.insert(package, VersionTag::Manual(version));
5967 }
60− let mut support: BTreeMap<(String, String), BTreeSet<(String, String)>> = BTreeMap::new();
68+ let mut support: BTreeMap<(Package, Version), BTreeSet<(Package, Version)>> = BTreeMap::new();
6169 for v in all.into_iter() {
6270 let caps = regex!("tried ([^ ]+)-([^,-]+),").captures(&v).unwrap();
63− let package = caps.get(1).unwrap().as_str().to_owned();
64− let version = caps.get(2).unwrap().as_str().to_owned();
71+ let package = Package(caps.get(1).unwrap().as_str().to_owned());
72+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
6573 map.insert(package.clone(), VersionTag::Auto(version.clone()));
6674
6775 if let Some(caps) = regex!("does not support: ([^ ]+)-([^-]+)").captures(&v) {
68− let dep_package = caps.get(1).unwrap().as_str().to_owned();
69− let dep_version = caps.get(2).unwrap().as_str().to_owned();
76+ let dep_package = Package(caps.get(1).unwrap().as_str().to_owned());
77+ let dep_version = Version(caps.get(2).unwrap().as_str().to_owned());
7078 let entry = support.entry((dep_package, dep_version)).or_default();
7179 entry.insert((package, version));
7280 }
7381 }
7482
75− let entries = map.len() + support.len();
76− let mut i = 0;
83+ let latest_versions = {
84+ let mut packages: Vec<Package> = map.iter().map(|(package, _)| package.clone()).collect();
85+ packages.append(
86+ &mut support
87+ .iter()
88+ .map(|((package, _), _)| package.clone())
89+ .collect(),
90+ );
91+ latest_version(packages.into_iter())
92+ };
7793
7894 for (package, version) in map {
7995 if is_boot(&package) {
8096 continue;
8197 }
82− if i % 100 == 0 {
83− println!("{:02}%", ((i as f64 / entries as f64) * 100.0).floor());
84− }
85− i += 1;
86− let latest = latest_version(&package);
98+ let latest = latest_versions.get(&package).unwrap();
8799 if version.version() != latest {
88100 println!(
89− "{} mismatch, {}: {}, hackage: {}",
90− package,
91− version.tag(),
92− version.version(),
93− latest
101+ "{package} mismatch, {tag}: {version}, hackage: {latest}",
102+ tag = version.tag(),
103+ version = version.version(),
94104 );
95105 }
96106 }
@@ -100,35 +110,30 @@ pub fn outdated() {
100110 continue;
101111 }
102112
103− if i % 100 == 0 {
104− println!("{:02}%", ((i as f64 / entries as f64) * 100.0).floor());
105− }
106− i += 1;
107− let latest = latest_version(&package);
108− if version != latest {
113+ let latest = latest_versions.get(&package).unwrap();
114+ if &version != latest {
109115 let max = 3;
110116 let dependents_stripped = dependents.len().saturating_sub(max);
111117 let dependents = dependents
112118 .into_iter()
113119 .take(max)
114− .map(|(p, v)| format!("{}-{}", p, v))
120+ .map(|(p, v)| format!("{p}-{v}"))
115121 .collect::<Vec<String>>()
116122 .join(", ");
117123 let dependents = if dependents_stripped > 0 {
118− format!("{} and {} more", dependents, dependents_stripped)
124+ format!("{dependents} and {dependents_stripped} more")
119125 } else {
120126 dependents
121127 };
122128
123129 println!(
124− "{} mismatch, snapshot: {}, hackage: {}, dependents: {}",
125− package, version, latest, dependents,
130+ "{package} mismatch, snapshot: {version}, hackage: {latest}, dependents: {dependents}"
126131 );
127132 }
128133 }
129134}
130135
131−fn is_boot(package: &str) -> bool {
136+fn is_boot(package: &Package) -> bool {
132137 [
133138 "Cabal",
134139 "base",
@@ -151,20 +156,26 @@ fn is_boot(package: &str) -> bool {
151156 "text",
152157 "time",
153158 ]
154− .contains(&package)
159+ .contains(&&*package.0)
155160}
156161
157−fn latest_version(pkg: &str) -> String {
162+fn latest_version(packages: impl Iterator<Item = Package>) -> BTreeMap<Package, Version> {
158163 String::from_utf8(
159164 Command::new("latest-version")
160− .args([pkg])
165+ .args(packages.map(|p| p.0))
161166 .output()
162− .unwrap()
167+ .expect("Could not find latest-version in PATH")
163168 .stdout,
164169 )
165170 .unwrap()
166171 .trim()
167172 .to_owned()
173+ .lines()
174+ .map(|s| {
175+ let VersionedPackage { package, version } = parse_versioned_package_canonical(s).unwrap();
176+ (package, version)
177+ })
178+ .collect()
168179}
169180
170181enum State {
@@ -177,38 +188,69 @@ enum State {
177188 Done,
178189}
179190
191+#[derive(PartialEq, Eq, Debug)]
180192struct VersionedPackage {
181− package: String,
182− version: String,
193+ package: Package,
194+ version: Version,
195+}
196+
197+fn parse_versioned_package_canonical(s: &str) -> Option<VersionedPackage> {
198+ if let Some(caps) = regex!(r#"^(.+)-([\d.]+)$"#).captures(s) {
199+ let package = Package(caps.get(1).unwrap().as_str().to_owned());
200+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
201+ Some(VersionedPackage { package, version })
202+ } else {
203+ None
204+ }
183205}
184206
185−fn parse_versioned_package(s: &str) -> Option<VersionedPackage> {
207+fn parse_versioned_package_yaml(s: &str) -> Option<VersionedPackage> {
186208 if let Some(caps) = regex!(r#"- *([^ ]+) < *0 *# *([\d.]+)"#).captures(s) {
187− let package = caps.get(1).unwrap().as_str().to_owned();
188− let version = caps.get(2).unwrap().as_str().to_owned();
209+ let package = Package(caps.get(1).unwrap().as_str().to_owned());
210+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
189211 Some(VersionedPackage { package, version })
190212 } else if let Some(caps) = regex!(r#"- *([^ ]+) *# *([\d.]+)"#).captures(s) {
191− let package = caps.get(1).unwrap().as_str().to_owned();
192− let version = caps.get(2).unwrap().as_str().to_owned();
213+ let package = Package(caps.get(1).unwrap().as_str().to_owned());
214+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
193215 Some(VersionedPackage { package, version })
194216 } else {
195217 None
196218 }
197219}
198220
199−fn handle<F>(write: bool, mut f: F) -> Vec<VersionedPackage>
221+struct DisabledPackage {
222+ package: String,
223+}
224+
225+fn parse_disabled_package(s: &str) -> Option<DisabledPackage> {
226+ if !regex!(r#"- *([^ ]+) < *0 *# tried"#).is_match(s) {
227+ if let Some(caps) = regex!(r#"- *([^ ]+) < *0 *# *[^\d]"#).captures(s) {
228+ let package = caps.get(1).unwrap().as_str().to_owned();
229+ Some(DisabledPackage { package })
230+ } else {
231+ None
232+ }
233+ } else {
234+ None
235+ }
236+}
237+
238+fn handle<F>(write: bool, mut f: F) -> (Vec<VersionedPackage>, Vec<DisabledPackage>)
200239where
201240 F: FnMut(Location, Vec<String>) -> Vec<String>,
202241{
203242 let path = "build-constraints.yaml";
204243 let mut new_lines: Vec<String> = vec![];
205244 let mut versioned_packages: Vec<VersionedPackage> = vec![];
245+ let mut disabled_packages: Vec<DisabledPackage> = vec![];
206246
207247 let mut state = State::LookingForLibBounds;
208248 let mut buf = vec![];
209249 for line in read_lines(path).map(|s| s.unwrap()) {
210− if let Some(versioned_package) = parse_versioned_package(&line) {
250+ if let Some(versioned_package) = parse_versioned_package_yaml(&line) {
211251 versioned_packages.push(versioned_package);
252+ } else if let Some(disabled_package) = parse_disabled_package(&line) {
253+ disabled_packages.push(disabled_package);
212254 }
213255
214256 match state {
@@ -279,7 +321,7 @@ where
279321 file.flush().unwrap();
280322 }
281323
282− versioned_packages
324+ (versioned_packages, disabled_packages)
283325}
284326
285327enum Location {
@@ -295,3 +337,238 @@ where
295337 let file = File::open(filename).unwrap();
296338 BufReader::new(file).lines()
297339}
340+
341+#[derive(Deserialize)]
342+struct SnapshotYaml {
343+ // flags: BTreeMap<Package, BTreeMap<PackageFlag, bool>>,
344+ // publish_time
345+ packages: Vec<SnapshotPackage>,
346+ // hidden
347+ // resolver
348+}
349+
350+#[derive(Deserialize)]
351+struct SnapshotPackage {
352+ hackage: PackageWithVersionAndSha,
353+ // pantry-tree
354+}
355+
356+#[derive(PartialOrd, Ord, PartialEq, Eq, Clone, Debug)]
357+struct Package(String);
358+
359+impl fmt::Display for Package {
360+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
361+ self.0.fmt(f)
362+ }
363+}
364+
365+#[derive(Clone, PartialOrd, Ord, PartialEq, Eq, Debug)]
366+struct Version(String);
367+
368+impl fmt::Display for Version {
369+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
370+ self.0.fmt(f)
371+ }
372+}
373+
374+// zstd-0.1.3.0@sha256:4c0a372251068eb6086b8c3a0a9f347488f08b570a7705844ffeb2c720c97223,3723
375+struct PackageWithVersionAndSha {
376+ name: Package,
377+ version: Version,
378+}
379+
380+impl<'de> serde::Deserialize<'de> for PackageWithVersionAndSha {
381+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
382+ where
383+ D: Deserializer<'de>,
384+ {
385+ let s: String = String::deserialize(deserializer)?;
386+ let r = regex!(r#"^(.+?)-([.\d]+)@sha256:[\da-z]+,\d+$"#);
387+ if let Some(caps) = r.captures(&s) {
388+ let name = Package(caps.get(1).unwrap().as_str().to_owned());
389+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
390+ Ok(Self { name, version })
391+ } else {
392+ Err(serde::de::Error::invalid_value(
393+ serde::de::Unexpected::Other(&s),
394+ &"Invalid PackageVersionWithSha",
395+ ))
396+ }
397+ }
398+}
399+
400+fn yaml_from_file<A, P: AsRef<Path>>(path: P) -> Result<A, Box<dyn Error>>
401+where
402+ A: for<'de> Deserialize<'de>,
403+{
404+ let file = File::open(path)?;
405+ let reader = BufReader::new(file);
406+ let u = serde_yaml::from_reader(reader)?;
407+ Ok(u)
408+}
409+
410+struct Snapshot {
411+ packages: BTreeMap<Package, Diff<Version>>,
412+}
413+
414+#[derive(Clone, Copy)]
415+enum Diff<A> {
416+ Left(A),
417+ Right(A),
418+ Both(A, A),
419+}
420+
421+fn to_diff(a: SnapshotYaml, b: SnapshotYaml) -> Snapshot {
422+ let mut packages = BTreeMap::new();
423+ for s in a.packages {
424+ let package = s.hackage;
425+ packages.insert(package.name, Diff::Left(package.version));
426+ }
427+ for s in b.packages {
428+ let package = s.hackage;
429+ let name = package.name;
430+ let version = package.version;
431+ if let Some(a) = packages.remove(&name) {
432+ match a {
433+ Diff::Left(a) => {
434+ if a == version {
435+ packages.remove(&name);
436+ } else {
437+ packages.insert(name, Diff::Both(a, version));
438+ }
439+ }
440+ _ => unreachable!(),
441+ }
442+ } else {
443+ packages.insert(name, Diff::Right(version));
444+ }
445+ }
446+
447+ Snapshot { packages }
448+}
449+
450+pub fn diff_snapshot(a: String, b: String) {
451+ let diff = to_diff(yaml_from_file(a).unwrap(), yaml_from_file(b).unwrap());
452+ for (name, diff) in diff.packages {
453+ let s = match diff {
454+ Diff::Left(a) => format!("- {name}-{a}"),
455+ Diff::Right(b) => format!("+ {name}-{b}"),
456+ Diff::Both(a, b) => format!("~ {name}-{a} -> {b}"),
457+ };
458+ println!("{s}");
459+ }
460+}
461+
462+#[derive(PartialEq, Eq, Debug)]
463+struct DisabledTransitively {
464+ child: VersionedPackage,
465+ parent: Package,
466+}
467+
468+fn parse_disabled_transitviely(s: &str) -> Option<DisabledTransitively> {
469+ let r = regex!(
470+ r#"- *([^ ]+) < *0 *# tried [^ ]+-([\d.]+), but its \*[^*]+\* requires the disabled package: ([^ ]+)"#
471+ );
472+ if let Some(caps) = r.captures(s) {
473+ let package = Package(caps.get(1).unwrap().as_str().to_owned());
474+ let version = Version(caps.get(2).unwrap().as_str().to_owned());
475+ let parent = Package(caps.get(3).unwrap().as_str().to_owned());
476+ Some(DisabledTransitively {
477+ child: VersionedPackage { package, version },
478+ parent,
479+ })
480+ } else {
481+ None
482+ }
483+}
484+
485+#[test]
486+fn test_parse_disabled_transitviely() {
487+ let s = "- Network-NineP < 0 # tried Network-NineP-0.4.7.1, but its *library* requires the disabled package: mstate";
488+ assert_eq!(
489+ parse_disabled_transitviely(s),
490+ Some(DisabledTransitively {
491+ child: VersionedPackage {
492+ package: Package("Network-NineP".to_owned()),
493+ version: Version("0.4.7.1".to_owned())
494+ },
495+ parent: Package("mstate".to_owned()),
496+ })
497+ )
498+}
499+
500+type M = BTreeMap<Package, (Vec<VersionedPackage>, Option<usize>)>;
501+
502+pub fn disabled() {
503+ let mut disabled_transitively: Vec<DisabledTransitively> = vec![];
504+ handle(false, |loc, lines| {
505+ match loc {
506+ Location::Lib => disabled_transitively.extend(
507+ lines
508+ .into_iter()
509+ .map(|line| parse_disabled_transitviely(&line))
510+ .flatten()
511+ .collect::<Vec<_>>(),
512+ ),
513+ Location::Test | Location::Bench => (),
514+ }
515+ vec![]
516+ });
517+
518+ let mut packages: BTreeSet<Package> = BTreeSet::new();
519+ let mut disabled: M = BTreeMap::new();
520+
521+ for DisabledTransitively { child, parent } in disabled_transitively {
522+ packages.insert(child.package.clone());
523+ packages.insert(parent.clone());
524+ disabled
525+ .entry(child.package.clone())
526+ .or_insert_with(|| (vec![], None));
527+ let t = disabled.entry(parent).or_insert_with(|| (vec![], None));
528+ t.0.push(child);
529+ }
530+
531+ let mut packages_len = packages.len();
532+ while packages_len > 0 {
533+ let mut new_packages: BTreeSet<Package> = BTreeSet::new();
534+ for package in packages {
535+ let (_, count) = disabled.get(&package).unwrap();
536+ if count.is_none() && !process(&package, &mut disabled) {
537+ new_packages.insert(package.clone());
538+ }
539+ }
540+ packages = new_packages;
541+ packages_len = packages.len();
542+ }
543+
544+ let mut v: Vec<_> = disabled
545+ .into_iter()
546+ .map(|(package, (_, count))| (count, package))
547+ .collect();
548+ v.sort();
549+ for (count, package) in v {
550+ let count = count.unwrap();
551+ if count != 0 {
552+ println!("{package} is disabled with {count} dependents");
553+ }
554+ }
555+}
556+
557+fn process(package: &Package, m: &mut M) -> bool {
558+ let (children, count) = m.get(package).unwrap();
559+ assert!(count.is_none(), "{:?}", package);
560+ let mut count = 0;
561+ for child in children {
562+ let (_, child_count) = m
563+ .get(&child.package)
564+ .unwrap_or_else(|| panic!("{}", child.package));
565+ match child_count {
566+ None => return false,
567+ Some(i) => count += 1 + i,
568+ }
569+ }
570+ m.entry(package.clone())
571+ .and_modify(|tup| tup.1 = Some(count))
572+ .or_insert_with(|| panic!("{}", package));
573+ true
574+}
etc/commenter/src/main.rs+11−20
@@ -19,28 +19,24 @@ enum Header {
1919 about = "Automates generation of bounds in build-constraints.yaml"
2020)]
2121enum Opt {
22− Clear,
2322 Add,
23+ Clear,
24+ DiffSnapshot { a: String, b: String },
25+ Disabled,
2426 Outdated,
2527}
2628
2729fn main() {
2830 let opt = Opt::from_args();
2931 match opt {
30− Opt::Clear => clear(),
3132 Opt::Add => add(),
32− Opt::Outdated => outdated(),
33+ Opt::Clear => commenter::clear(),
34+ Opt::DiffSnapshot { a, b } => commenter::diff_snapshot(a, b),
35+ Opt::Disabled => commenter::disabled(),
36+ Opt::Outdated => commenter::outdated(),
3337 }
3438}
3539
36−fn clear() {
37− commenter::clear();
38−}
39−
40−fn outdated() {
41− commenter::outdated();
42−}
43−
4440fn add() {
4541 let mut lib_exes: H = Default::default();
4642 let mut tests: H = Default::default();
@@ -64,7 +60,7 @@ fn add() {
6460 } else if line == "curator: Snapshot dependency graph contains errors:" {
6561 process_line = true;
6662 } else if !process_line {
67− println!("[INFO] {}", line);
63+ println!("[INFO] {line}");
6864 } else if let Some(cap) = package.captures(&line) {
6965 let root = last_header.clone().unwrap();
7066 let package = cap.name("package").unwrap().as_str();
@@ -100,7 +96,7 @@ fn add() {
10096 for (header, packages) in lib_exes {
10197 for (package, version, component) in packages {
10298 let s = printer(" ", &package, true, &version, &component, &header);
103− println!("{}", s);
99+ println!("{s}");
104100 auto_lib_exes.push(s);
105101 }
106102 }
@@ -111,7 +107,7 @@ fn add() {
111107 for (header, packages) in tests {
112108 for (package, version, component) in packages {
113109 let s = printer(" ", &package, false, &version, &component, &header);
114− println!("{}", s);
110+ println!("{s}");
115111 auto_tests.push(s);
116112 }
117113 }
@@ -122,7 +118,7 @@ fn add() {
122118 for (header, packages) in benches {
123119 for (package, version, component) in packages {
124120 let s = printer(" ", &package, false, &version, &component, &header);
125− println!("{}", s);
121+ println!("{s}");
126122 auto_benches.push(s);
127123 }
128124 }
@@ -148,11 +144,6 @@ fn printer(
148144 let lt0 = if lt0 { " < 0" } else { "" };
149145 format!(
150146 "{indent}- {package}{lt0} # tried {package}-{version}, but its *{component}* {cause}",
151− indent = indent,
152− package = package,
153− lt0 = lt0,
154− version = version,
155− component = component,
156147 cause = match header {
157148 Header::Versioned { package, version } => format!(
158149 "does not support: {package}-{version}",