git-aggregate-rs 0.0.6__tar.gz → 0.0.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/Cargo.lock +42 -35
  2. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/Cargo.toml +21 -20
  3. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/PKG-INFO +1 -1
  4. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/environments.rs +11 -0
  5. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/cache.rs +18 -0
  6. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/client.rs +10 -0
  7. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/contribute.rs +1 -1
  8. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/http.rs +73 -0
  9. git_aggregate_rs-0.0.7/crates/odx-forge/src/issues.rs +668 -0
  10. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/lib.rs +5 -0
  11. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/testing.rs +10 -0
  12. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/README.md +0 -0
  13. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/Cargo.toml +0 -0
  14. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/README.md +0 -0
  15. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/src/aggregate.rs +0 -0
  16. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/src/dirmatch.rs +0 -0
  17. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/src/lib.rs +0 -0
  18. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/src/main.rs +0 -0
  19. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/src/prs.rs +0 -0
  20. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/tests/aggregate.rs +0 -0
  21. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/tests/cli.rs +0 -0
  22. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/tests/prs.rs +0 -0
  23. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/git-aggregate-rs/tests/snapshots/cli__help_snapshot.snap +0 -0
  24. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/Cargo.toml +0 -0
  25. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/README.md +0 -0
  26. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/aggregation.rs +0 -0
  27. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/guard.rs +0 -0
  28. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/lib.rs +0 -0
  29. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/locking.rs +0 -0
  30. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/packages.rs +0 -0
  31. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/pipeline.rs +0 -0
  32. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/plan.rs +0 -0
  33. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-aggregate/src/repos_yaml.rs +0 -0
  34. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/Cargo.toml +0 -0
  35. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/README.md +0 -0
  36. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/addons.rs +0 -0
  37. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/env.rs +0 -0
  38. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/export.rs +0 -0
  39. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/import.rs +0 -0
  40. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/mod.rs +0 -0
  41. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/ordered.rs +0 -0
  42. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/compat/repos.rs +0 -0
  43. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/deps.rs +0 -0
  44. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/duration.rs +0 -0
  45. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/edit/doc.rs +0 -0
  46. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/edit/doc_tests.rs +0 -0
  47. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/edit/mod.rs +0 -0
  48. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/edit/spec.rs +0 -0
  49. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/error.rs +0 -0
  50. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/lib.rs +0 -0
  51. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/load.rs +0 -0
  52. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/lock.rs +0 -0
  53. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/lock_tests.rs +0 -0
  54. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/mutes.rs +0 -0
  55. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/packages.rs +0 -0
  56. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/schema.rs +0 -0
  57. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/snapshots/odx_config__lock__tests__canonical_layout.snap +0 -0
  58. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/user.rs +0 -0
  59. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/src/uvlock.rs +0 -0
  60. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/full.toml +0 -0
  61. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/real/client-four-groups.toml +0 -0
  62. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/real/hatch-odoo.toml +0 -0
  63. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/real/oca-addon-whool.toml +0 -0
  64. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/real/oca-repo-root.toml +0 -0
  65. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/fixtures/real/uvault.toml +0 -0
  66. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/real_fixtures.rs +0 -0
  67. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-config/tests/schema.rs +0 -0
  68. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/Cargo.toml +0 -0
  69. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/README.md +0 -0
  70. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/clock.rs +0 -0
  71. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/env.rs +0 -0
  72. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/exit.rs +0 -0
  73. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/fake.rs +0 -0
  74. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/fs.rs +0 -0
  75. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/lib.rs +0 -0
  76. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/process.rs +0 -0
  77. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/redact.rs +0 -0
  78. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/system.rs +0 -0
  79. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-core/src/url.rs +0 -0
  80. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/Cargo.toml +0 -0
  81. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/README.md +0 -0
  82. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/admin.rs +0 -0
  83. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/ci.rs +0 -0
  84. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/listing.rs +0 -0
  85. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/pulls.rs +0 -0
  86. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/secrets.rs +0 -0
  87. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-forge/src/url.rs +0 -0
  88. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/Cargo.toml +0 -0
  89. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/README.md +0 -0
  90. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/backend.rs +0 -0
  91. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/cache.rs +0 -0
  92. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/clones.rs +0 -0
  93. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/fetch.rs +0 -0
  94. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/fetch_tests.rs +0 -0
  95. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/lib.rs +0 -0
  96. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/lock.rs +0 -0
  97. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/merge.rs +0 -0
  98. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/merge_tests.rs +0 -0
  99. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/refs.rs +0 -0
  100. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/run.rs +0 -0
  101. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/run_tests.rs +0 -0
  102. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/src/vault.rs +0 -0
  103. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/tests/daemon.rs +0 -0
  104. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/crates/odx-git/tests/mergiraf.rs +0 -0
  105. {git_aggregate_rs-0.0.6 → git_aggregate_rs-0.0.7}/pyproject.toml +0 -0
@@ -727,7 +727,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
727
727
  checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
728
728
  dependencies = [
729
729
  "lazy_static",
730
- "windows-sys 0.48.0",
730
+ "windows-sys 0.52.0",
731
731
  ]
732
732
 
733
733
  [[package]]
@@ -988,9 +988,9 @@ dependencies = [
988
988
 
989
989
  [[package]]
990
990
  name = "ctutils"
991
- version = "0.4.3"
991
+ version = "0.4.5"
992
992
  source = "registry+https://github.com/rust-lang/crates.io-index"
993
- checksum = "03bb0e1cc970d482d121d9a1744999169b69a07470b3d644a7894e53fcaf4574"
993
+ checksum = "38d28fb6aa7dd680b3ffd1a3e64e115c177bdba63c0ae7f9cd48129ff05c4fa0"
994
994
  dependencies = [
995
995
  "cmov",
996
996
  ]
@@ -1541,7 +1541,7 @@ dependencies = [
1541
1541
 
1542
1542
  [[package]]
1543
1543
  name = "git-aggregate-rs"
1544
- version = "0.0.6"
1544
+ version = "0.0.7"
1545
1545
  dependencies = [
1546
1546
  "assert_cmd",
1547
1547
  "clap",
@@ -1581,9 +1581,9 @@ dependencies = [
1581
1581
 
1582
1582
  [[package]]
1583
1583
  name = "granit-parser"
1584
- version = "1.3.0"
1584
+ version = "2.0.0"
1585
1585
  source = "registry+https://github.com/rust-lang/crates.io-index"
1586
- checksum = "e20f99e46474f56bd905c56e817ebddcf377a611f94c53ac4649e4d3fa3c0cd0"
1586
+ checksum = "da55feca5d1625466bae068f9fd4b87892caeae70c3fe671ddb0f50d41aebf37"
1587
1587
  dependencies = [
1588
1588
  "arraydeque",
1589
1589
  "smallvec",
@@ -2624,9 +2624,9 @@ dependencies = [
2624
2624
 
2625
2625
  [[package]]
2626
2626
  name = "odoo-lint"
2627
- version = "0.1.0-alpha.14"
2627
+ version = "0.1.0-alpha.15"
2628
2628
  source = "registry+https://github.com/rust-lang/crates.io-index"
2629
- checksum = "30cc86daa0fcf1d83cc32a933859e73bf9ef40e31df71a3790a047a24a27ef39"
2629
+ checksum = "aa5adca538c23ff9fb17a8c4c0d865dba562ff8fbe10960002f0eb377e753fd3"
2630
2630
  dependencies = [
2631
2631
  "clap",
2632
2632
  "comrak",
@@ -2642,6 +2642,7 @@ dependencies = [
2642
2642
  "oxc_ast_visit",
2643
2643
  "oxc_parser",
2644
2644
  "oxc_span",
2645
+ "oxc_syntax",
2645
2646
  "rayon",
2646
2647
  "regex",
2647
2648
  "roxmltree",
@@ -2651,6 +2652,7 @@ dependencies = [
2651
2652
  "ruff_text_size",
2652
2653
  "serde",
2653
2654
  "serde_json",
2655
+ "sha2 0.10.9",
2654
2656
  "similar",
2655
2657
  "toml 0.8.23",
2656
2658
  "walkdir",
@@ -2658,7 +2660,7 @@ dependencies = [
2658
2660
 
2659
2661
  [[package]]
2660
2662
  name = "odx-aggregate"
2661
- version = "0.0.6"
2663
+ version = "0.0.7"
2662
2664
  dependencies = [
2663
2665
  "odx-config",
2664
2666
  "odx-core",
@@ -2671,7 +2673,7 @@ dependencies = [
2671
2673
 
2672
2674
  [[package]]
2673
2675
  name = "odx-analyze"
2674
- version = "0.0.6"
2676
+ version = "0.0.7"
2675
2677
  dependencies = [
2676
2678
  "serde",
2677
2679
  "tempfile",
@@ -2680,11 +2682,15 @@ dependencies = [
2680
2682
 
2681
2683
  [[package]]
2682
2684
  name = "odx-bot"
2683
- version = "0.0.6"
2685
+ version = "0.0.7"
2686
+ dependencies = [
2687
+ "odx-dashboard",
2688
+ "odx-forge",
2689
+ ]
2684
2690
 
2685
2691
  [[package]]
2686
2692
  name = "odx-cli"
2687
- version = "0.0.6"
2693
+ version = "0.0.7"
2688
2694
  dependencies = [
2689
2695
  "assert_cmd",
2690
2696
  "clap",
@@ -2693,6 +2699,7 @@ dependencies = [
2693
2699
  "insta",
2694
2700
  "odx-aggregate",
2695
2701
  "odx-analyze",
2702
+ "odx-bot",
2696
2703
  "odx-config",
2697
2704
  "odx-core",
2698
2705
  "odx-dashboard",
@@ -2710,7 +2717,7 @@ dependencies = [
2710
2717
  "ratatui",
2711
2718
  "serde",
2712
2719
  "serde_json",
2713
- "sha2 0.10.9",
2720
+ "sha2 0.11.1",
2714
2721
  "tempfile",
2715
2722
  "toml_edit 0.25.17+spec-1.1.0",
2716
2723
  "zip",
@@ -2718,7 +2725,7 @@ dependencies = [
2718
2725
 
2719
2726
  [[package]]
2720
2727
  name = "odx-config"
2721
- version = "0.0.6"
2728
+ version = "0.0.7"
2722
2729
  dependencies = [
2723
2730
  "insta",
2724
2731
  "odx-core",
@@ -2733,11 +2740,11 @@ dependencies = [
2733
2740
 
2734
2741
  [[package]]
2735
2742
  name = "odx-core"
2736
- version = "0.0.6"
2743
+ version = "0.0.7"
2737
2744
 
2738
2745
  [[package]]
2739
2746
  name = "odx-dashboard"
2740
- version = "0.0.6"
2747
+ version = "0.0.7"
2741
2748
  dependencies = [
2742
2749
  "ratatui",
2743
2750
  "serde",
@@ -2746,7 +2753,7 @@ dependencies = [
2746
2753
 
2747
2754
  [[package]]
2748
2755
  name = "odx-dev"
2749
- version = "0.0.6"
2756
+ version = "0.0.7"
2750
2757
  dependencies = [
2751
2758
  "odx-config",
2752
2759
  "serde",
@@ -2756,7 +2763,7 @@ dependencies = [
2756
2763
 
2757
2764
  [[package]]
2758
2765
  name = "odx-env"
2759
- version = "0.0.6"
2766
+ version = "0.0.7"
2760
2767
  dependencies = [
2761
2768
  "odx-config",
2762
2769
  "pep440_rs",
@@ -2765,7 +2772,7 @@ dependencies = [
2765
2772
 
2766
2773
  [[package]]
2767
2774
  name = "odx-forge"
2768
- version = "0.0.6"
2775
+ version = "0.0.7"
2769
2776
  dependencies = [
2770
2777
  "apple-native-keyring-store",
2771
2778
  "keyring-core",
@@ -2781,7 +2788,7 @@ dependencies = [
2781
2788
 
2782
2789
  [[package]]
2783
2790
  name = "odx-git"
2784
- version = "0.0.6"
2791
+ version = "0.0.7"
2785
2792
  dependencies = [
2786
2793
  "futures-util",
2787
2794
  "odx-core",
@@ -2793,7 +2800,7 @@ dependencies = [
2793
2800
 
2794
2801
  [[package]]
2795
2802
  name = "odx-index"
2796
- version = "0.0.6"
2803
+ version = "0.0.7"
2797
2804
  dependencies = [
2798
2805
  "odx-analyze",
2799
2806
  "odx-core",
@@ -2806,7 +2813,7 @@ dependencies = [
2806
2813
 
2807
2814
  [[package]]
2808
2815
  name = "odx-lint"
2809
- version = "0.0.6"
2816
+ version = "0.0.7"
2810
2817
  dependencies = [
2811
2818
  "odoo-lint",
2812
2819
  "tempfile",
@@ -2814,14 +2821,14 @@ dependencies = [
2814
2821
 
2815
2822
  [[package]]
2816
2823
  name = "odx-platform"
2817
- version = "0.0.6"
2824
+ version = "0.0.7"
2818
2825
  dependencies = [
2819
2826
  "odx-analyze",
2820
2827
  "odx-config",
2821
2828
  "pep440_rs",
2822
2829
  "serde",
2823
2830
  "serde_json",
2824
- "sha2 0.10.9",
2831
+ "sha2 0.11.1",
2825
2832
  "tempfile",
2826
2833
  "toml 1.1.8+spec-1.1.0",
2827
2834
  "zip",
@@ -2829,7 +2836,7 @@ dependencies = [
2829
2836
 
2830
2837
  [[package]]
2831
2838
  name = "odx-port"
2832
- version = "0.0.6"
2839
+ version = "0.0.7"
2833
2840
  dependencies = [
2834
2841
  "odx-core",
2835
2842
  "regex",
@@ -2840,7 +2847,7 @@ dependencies = [
2840
2847
 
2841
2848
  [[package]]
2842
2849
  name = "odx-sync"
2843
- version = "0.0.6"
2850
+ version = "0.0.7"
2844
2851
  dependencies = [
2845
2852
  "serde",
2846
2853
  "serde_json",
@@ -2850,7 +2857,7 @@ dependencies = [
2850
2857
 
2851
2858
  [[package]]
2852
2859
  name = "odx-vendor"
2853
- version = "0.0.6"
2860
+ version = "0.0.7"
2854
2861
  dependencies = [
2855
2862
  "odx-analyze",
2856
2863
  "odx-config",
@@ -2858,7 +2865,7 @@ dependencies = [
2858
2865
  "odx-platform",
2859
2866
  "serde",
2860
2867
  "serde_json",
2861
- "sha2 0.10.9",
2868
+ "sha2 0.11.1",
2862
2869
  "tempfile",
2863
2870
  "thiserror 2.0.21",
2864
2871
  "toml 1.1.8+spec-1.1.0",
@@ -2867,7 +2874,7 @@ dependencies = [
2867
2874
 
2868
2875
  [[package]]
2869
2876
  name = "odx-verdicts"
2870
- version = "0.0.6"
2877
+ version = "0.0.7"
2871
2878
  dependencies = [
2872
2879
  "serde",
2873
2880
  "tempfile",
@@ -4155,9 +4162,9 @@ dependencies = [
4155
4162
 
4156
4163
  [[package]]
4157
4164
  name = "serde-saphyr"
4158
- version = "1.3.0"
4165
+ version = "2.0.0"
4159
4166
  source = "registry+https://github.com/rust-lang/crates.io-index"
4160
- checksum = "b8050abb251097357e24aff63ba2c52a6309ecb7d23a5474023df960a02694d8"
4167
+ checksum = "a253edfdea34032da21af84e16fcc94f4c7a6ba237f9f3bc2dbf43cea8535c44"
4161
4168
  dependencies = [
4162
4169
  "annotate-snippets",
4163
4170
  "encoding_rs_io",
@@ -4753,9 +4760,9 @@ dependencies = [
4753
4760
 
4754
4761
  [[package]]
4755
4762
  name = "tokio"
4756
- version = "1.53.2"
4763
+ version = "1.54.1"
4757
4764
  source = "registry+https://github.com/rust-lang/crates.io-index"
4758
- checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044"
4765
+ checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
4759
4766
  dependencies = [
4760
4767
  "bytes",
4761
4768
  "libc",
@@ -5843,9 +5850,9 @@ dependencies = [
5843
5850
 
5844
5851
  [[package]]
5845
5852
  name = "zip"
5846
- version = "9.0.2"
5853
+ version = "9.0.5"
5847
5854
  source = "registry+https://github.com/rust-lang/crates.io-index"
5848
- checksum = "9e2fc56a6707efb066c40aead2409ebb1224e6dde24a074e9fbc78ced500507b"
5855
+ checksum = "6e04976da629d3b04204ba8105b396a193af8ad2583b2c79bfb3ab8af580a11e"
5849
5856
  dependencies = [
5850
5857
  "crc32fast",
5851
5858
  "flate2",
@@ -3,7 +3,7 @@ resolver = "3"
3
3
  members = ["crates/*"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.0.6"
6
+ version = "0.0.7"
7
7
  edition = "2024"
8
8
  rust-version = "1.97"
9
9
  license = "MIT"
@@ -16,23 +16,24 @@ categories = ["command-line-utilities", "development-tools"]
16
16
 
17
17
  [workspace.dependencies]
18
18
  # Internal crates.
19
- odx-core = { path = "crates/odx-core", version = "0.0.6" }
20
- git-aggregate-rs = { path = "crates/git-aggregate-rs", version = "0.0.6" }
21
- odx-config = { path = "crates/odx-config", version = "0.0.6" }
22
- odx-git = { path = "crates/odx-git", version = "0.0.6" }
23
- odx-aggregate = { path = "crates/odx-aggregate", version = "0.0.6" }
24
- odx-forge = { path = "crates/odx-forge", version = "0.0.6" }
25
- odx-analyze = { path = "crates/odx-analyze", version = "0.0.6" }
26
- odx-dashboard = { path = "crates/odx-dashboard", version = "0.0.6" }
27
- odx-index = { path = "crates/odx-index", version = "0.0.6" }
28
- odx-port = { path = "crates/odx-port", version = "0.0.6" }
29
- odx-lint = { path = "crates/odx-lint", version = "0.0.6" }
30
- odx-verdicts = { path = "crates/odx-verdicts", version = "0.0.6" }
31
- odx-platform = { path = "crates/odx-platform", version = "0.0.6" }
32
- odx-vendor = { path = "crates/odx-vendor", version = "0.0.6" }
33
- odx-dev = { path = "crates/odx-dev", version = "0.0.6" }
34
- odx-sync = { path = "crates/odx-sync", version = "0.0.6" }
35
- odx-env = { path = "crates/odx-env", version = "0.0.6" }
19
+ odx-core = { path = "crates/odx-core", version = "0.0.7" }
20
+ git-aggregate-rs = { path = "crates/git-aggregate-rs", version = "0.0.7" }
21
+ odx-config = { path = "crates/odx-config", version = "0.0.7" }
22
+ odx-git = { path = "crates/odx-git", version = "0.0.7" }
23
+ odx-aggregate = { path = "crates/odx-aggregate", version = "0.0.7" }
24
+ odx-forge = { path = "crates/odx-forge", version = "0.0.7" }
25
+ odx-analyze = { path = "crates/odx-analyze", version = "0.0.7" }
26
+ odx-dashboard = { path = "crates/odx-dashboard", version = "0.0.7" }
27
+ odx-index = { path = "crates/odx-index", version = "0.0.7" }
28
+ odx-port = { path = "crates/odx-port", version = "0.0.7" }
29
+ odx-lint = { path = "crates/odx-lint", version = "0.0.7" }
30
+ odx-verdicts = { path = "crates/odx-verdicts", version = "0.0.7" }
31
+ odx-platform = { path = "crates/odx-platform", version = "0.0.7" }
32
+ odx-vendor = { path = "crates/odx-vendor", version = "0.0.7" }
33
+ odx-dev = { path = "crates/odx-dev", version = "0.0.7" }
34
+ odx-sync = { path = "crates/odx-sync", version = "0.0.7" }
35
+ odx-env = { path = "crates/odx-env", version = "0.0.7" }
36
+ odx-bot = { path = "crates/odx-bot", version = "0.0.7" }
36
37
 
37
38
  # External crates. Versions are pinned in Cargo.lock.
38
39
  clap = { version = "4.5", features = ["derive"] }
@@ -44,7 +45,7 @@ serde = { version = "1", features = ["derive"] }
44
45
  serde_json = "1"
45
46
  regex = "1"
46
47
  ratatui = "0.30"
47
- serde-saphyr = { version = "1", default-features = false, features = ["deserialize"] }
48
+ serde-saphyr = { version = "2", default-features = false, features = ["deserialize"] }
48
49
  thiserror = "2"
49
50
  tokio = { version = "1.47", features = ["rt", "rt-multi-thread", "sync", "macros", "signal", "time"] }
50
51
  tokio-util = "0.7"
@@ -52,7 +53,7 @@ toml = "1"
52
53
  toml_edit = "0.25"
53
54
  tokei = { version = "15", default-features = false }
54
55
  pep440_rs = "0.7"
55
- sha2 = "0.10"
56
+ sha2 = "0.11"
56
57
  keyring-core = "1"
57
58
  zip = { version = "9", default-features = false, features = ["deflate-flate2-zlib-rs"] }
58
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: git-aggregate-rs
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Classifier: Development Status :: 2 - Pre-Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Programming Language :: Rust
@@ -319,6 +319,16 @@ impl Model {
319
319
  self.promotion.iter().any(|[a, b]| a == from && b == to)
320
320
  }
321
321
 
322
+ /// The environments `from` may be promoted into, in configuration order.
323
+ #[must_use]
324
+ pub fn targets(&self, from: &str) -> Vec<&str> {
325
+ self.promotion
326
+ .iter()
327
+ .filter(|[a, _]| a == from)
328
+ .map(|[_, b]| b.as_str())
329
+ .collect()
330
+ }
331
+
322
332
  /// The environment a promotion into `to` comes from when `--from` is
323
333
  /// not given: the one allowed source that is not disposable, else the
324
334
  /// one allowed source.
@@ -469,6 +479,7 @@ mod tests {
469
479
  assert_eq!(main.get("test").unwrap().branch, "main");
470
480
  assert!(main.allows("test", "prod") && main.allows("prod", "test"));
471
481
  assert!(!main.allows("test", "test"));
482
+ assert_eq!(main.targets("test"), ["prod"]);
472
483
  let sh = model("[tool.odx.environments]\npreset = \"odoo-sh\"\n")
473
484
  .unwrap()
474
485
  .unwrap();
@@ -87,6 +87,16 @@ impl<H: Http> Http for CachedHttp<H> {
87
87
  ) -> Result<HttpResponse, ForgeError> {
88
88
  self.inner.put(url, headers, body)
89
89
  }
90
+
91
+ /// Not cached either.
92
+ fn patch(
93
+ &self,
94
+ url: &str,
95
+ headers: &[(&str, String)],
96
+ body: &serde_json::Value,
97
+ ) -> Result<HttpResponse, ForgeError> {
98
+ self.inner.patch(url, headers, body)
99
+ }
90
100
  }
91
101
 
92
102
  #[cfg(test)]
@@ -161,6 +171,14 @@ mod tests {
161
171
  .status,
162
172
  200
163
173
  );
174
+ let patching = CachedHttp::new(Scripted::new(vec![Ok(reply(200, ""))]), tmp.path());
175
+ assert_eq!(
176
+ patching
177
+ .patch("https://x/a", &[], &serde_json::json!({}))
178
+ .unwrap()
179
+ .status,
180
+ 200
181
+ );
164
182
  let failing = CachedHttp::new(
165
183
  Scripted::new(vec![Err(ForgeError::Http("down".into()))]),
166
184
  tmp.path(),
@@ -216,6 +216,16 @@ impl<'a> ForgeClient<'a> {
216
216
  self.http.put(url, &self.headers(repo, kind), body)
217
217
  }
218
218
 
219
+ pub(crate) fn patch(
220
+ &self,
221
+ url: &str,
222
+ repo: &RepoUrl,
223
+ kind: ForgeKind,
224
+ body: &Value,
225
+ ) -> Result<HttpResponse, ForgeError> {
226
+ self.http.patch(url, &self.headers(repo, kind), body)
227
+ }
228
+
219
229
  fn get(&self, url: &str, repo: &RepoUrl, kind: ForgeKind) -> Result<HttpResponse, ForgeError> {
220
230
  let headers = self.headers(repo, kind);
221
231
  for _ in 0..ATTEMPTS {
@@ -33,7 +33,7 @@ pub struct Proposal<'a> {
33
33
  }
34
34
 
35
35
  /// The JSON of a `200` or `201` answer.
36
- fn created(response: &HttpResponse, repo: &RepoUrl) -> Result<Value, ForgeError> {
36
+ pub(crate) fn created(response: &HttpResponse, repo: &RepoUrl) -> Result<Value, ForgeError> {
37
37
  if !matches!(response.status, 200..=202) {
38
38
  return Err(ForgeError::Status {
39
39
  host: repo.host.clone(),
@@ -57,6 +57,25 @@ pub trait Http: fmt::Debug + Send + Sync {
57
57
  headers: &[(&str, String)],
58
58
  body: &serde_json::Value,
59
59
  ) -> Result<HttpResponse, ForgeError>;
60
+
61
+ /// PATCH `body` as JSON to `url` with `headers`. Clients that only
62
+ /// read, or only create, need not answer it.
63
+ ///
64
+ /// # Errors
65
+ ///
66
+ /// [`ForgeError::Http`] when no response arrives (DNS, TLS, connection),
67
+ /// or when the client does not send PATCH requests.
68
+ fn patch(
69
+ &self,
70
+ url: &str,
71
+ headers: &[(&str, String)],
72
+ body: &serde_json::Value,
73
+ ) -> Result<HttpResponse, ForgeError> {
74
+ let _ = (url, headers, body);
75
+ Err(ForgeError::Http(
76
+ "this client does not send PATCH requests".to_owned(),
77
+ ))
78
+ }
60
79
  }
61
80
 
62
81
  /// [`Http`] over `reqwest` with rustls, verifying certificates against the
@@ -146,6 +165,15 @@ impl Http for ReqwestHttp {
146
165
  ) -> Result<HttpResponse, ForgeError> {
147
166
  Self::execute(self.client.put(url).json(body), headers)
148
167
  }
168
+
169
+ fn patch(
170
+ &self,
171
+ url: &str,
172
+ headers: &[(&str, String)],
173
+ body: &serde_json::Value,
174
+ ) -> Result<HttpResponse, ForgeError> {
175
+ Self::execute(self.client.patch(url).json(body), headers)
176
+ }
149
177
  }
150
178
 
151
179
  #[cfg(test)]
@@ -189,6 +217,51 @@ mod tests {
189
217
  assert!(request.contains("user-agent: odx/"), "{request}");
190
218
  }
191
219
 
220
+ #[test]
221
+ fn patches() {
222
+ /// A client that only reads.
223
+ #[derive(Debug)]
224
+ struct Reader;
225
+ impl Http for Reader {
226
+ fn get(&self, _: &str, _: &[(&str, String)]) -> Result<HttpResponse, ForgeError> {
227
+ Ok(HttpResponse::default())
228
+ }
229
+ fn post(
230
+ &self,
231
+ _: &str,
232
+ _: &[(&str, String)],
233
+ _: &serde_json::Value,
234
+ ) -> Result<HttpResponse, ForgeError> {
235
+ Ok(HttpResponse::default())
236
+ }
237
+ fn put(
238
+ &self,
239
+ _: &str,
240
+ _: &[(&str, String)],
241
+ _: &serde_json::Value,
242
+ ) -> Result<HttpResponse, ForgeError> {
243
+ Ok(HttpResponse::default())
244
+ }
245
+ }
246
+ let (url, server) = serve_once(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\n{}");
247
+ let http = ReqwestHttp::new().unwrap();
248
+ let response = http.patch(&url, &[], &serde_json::json!({"a": 1})).unwrap();
249
+ assert_eq!(response.status, 200);
250
+ let request = server.join().unwrap();
251
+ assert!(request.starts_with("PATCH /repos/a/b "), "{request}");
252
+ assert!(request.ends_with(r#"{"a":1}"#), "{request}");
253
+
254
+ assert!(Reader.get("u", &[]).is_ok());
255
+ assert!(Reader.post("u", &[], &serde_json::json!({})).is_ok());
256
+ assert!(Reader.put("u", &[], &serde_json::json!({})).is_ok());
257
+ assert_eq!(
258
+ Reader.patch("u", &[], &serde_json::json!({})),
259
+ Err(ForgeError::Http(
260
+ "this client does not send PATCH requests".to_owned()
261
+ ))
262
+ );
263
+ }
264
+
192
265
  #[test]
193
266
  fn connection_and_body_failures() {
194
267
  let http = ReqwestHttp::new().unwrap();