Merge branch 'master' into stable-7.6 * master: MidxIterator: Add reset method PackIndexMerger: remove rawIterator() method PackIndexMerge: Use deduped iterators instead of deduping while reading PackIndexMerger: use MidxIterators instead of its own MidxIterators: Helpers around the MidxIterator Bazel: align JGit with shared external_deps repository Bazel: bump rules_jvm_external to 6.10 MultiPackIndex: Offer an iterator over the entries in the midx RevWalk: abort computation of merged commits if the monitor is canceled [cli] Add options --pack-refs and --no-pack-refs to Gc command Add missing LF at the end of GarbageCollectCommandTest Add GarbageCollectCommand#setGcConfig GC: add flag to control whether gc should pack all refs Downgrade spring-boot-maven-plugin to 3.5.10 pack-refs: Add sorted flag Bazel: enforce strict MODULE.bazel.lock synchronization DfsPackFileMidxSingle: No need to set ints to 0 in constructor MidxPackFilter: Remove debug printlns DfsMidxWriter: add writing bitmaps to the newly created midx RefAdvancer: helper to find when a branch enters a pack Throw IOException if API tries to use destroyed TemporaryBuffer Update com.google.errorprone:error_prone_type_annotations to 2.46.0 Update Apache sshd to 2.17.1 DfsPackFileMidx: offer local objects as ObjectToPack Change-Id: I6296337594bf55033aeb680824f42bb739050989
diff --git a/.bazelrc b/.bazelrc index 5bf3ef8..385a71d 100644 --- a/.bazelrc +++ b/.bazelrc
@@ -1,6 +1,6 @@ # TODO(davido): Migrate all dependencies from WORKSPACE to MODULE.bazel # https://issues.gerritcodereview.com/issues/303819949 -common --enable_bzlmod +common --enable_bzlmod --lockfile_mode=error common --enable_workspace build --workspace_status_command="python3 ./tools/workspace_status.py"
diff --git a/Documentation/config-options.md b/Documentation/config-options.md index 20c2b58..3d48115 100644 --- a/Documentation/config-options.md +++ b/Documentation/config-options.md
@@ -80,6 +80,7 @@ | `gc.autoDetach` | `true` | ✅ | Make auto gc return immediately and run in background. | | `gc.autoPackLimit` | `50` | ✅ | Number of packs until auto gc consolidates existing packs (except those marked with a .keep file) into a single pack. Setting `gc.autoPackLimit` to 0 disables automatic consolidation of packs. | | `gc.logExpiry` | `1.day.ago` | ✅ | If the file `gc.log` exists, then auto gc will print its content and exit successfully instead of running unless that file is more than `gc.logExpiry` old. | +| `gc.packRefs`| `true` | ✅ | This variable determines whether JGit garbage collection will also pack refs. This can be set to `notbare` to enable it within all non-bare repos or it can be set to a boolean value. | | `gc.pruneExpire` | `2.weeks.ago` | ✅ | Grace period after which unreachable objects will be pruned. | | `gc.prunePackExpire` | `1.hour.ago` | ⃞ | Grace period after which packfiles only containing unreachable objects will be pruned. | | `gc.writeChangedPaths` | `false`| ⃞ | Whether bloom filter should be written to commit-graph during a gc operation. |
diff --git a/MODULE.bazel b/MODULE.bazel index ac7d934..7b70fa2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -1,7 +1,7 @@ module(name = "jgit") bazel_dep(name = "rules_java", version = "8.11.0") -bazel_dep(name = "rules_jvm_external", version = "6.7") +bazel_dep(name = "rules_jvm_external", version = "6.10") bazel_dep(name = "rbe_autoconfig") git_override( module_name = "rbe_autoconfig", @@ -33,15 +33,15 @@ SLF4J_VERSION = "2.0.17" -SSHD_VERSION = "2.16.0" +SSHD_VERSION = "2.17.1" maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( - name = "jgit_deps", + name = "external_deps", artifacts = [ "args4j:args4j:2.37", "com.google.code.gson:gson:2.13.2", - "com.google.errorprone:error_prone_type_annotations:2.38.0", + "com.google.errorprone:error_prone_type_annotations:2.46.0", "com.googlecode.javaewah:JavaEWAH:1.2.3", "com.jcraft:jsch:0.1.55", "com.jcraft:jzlib:1.1.3", @@ -87,9 +87,10 @@ duplicate_version_warning = "warn", fail_on_missing_checksum = True, fetch_sources = True, + known_contributing_modules = ["jgit"], repositories = [ "https://repo1.maven.org/maven2", ], strict_visibility = True, ) -use_repo(maven, "jgit_deps") +use_repo(maven, "external_deps")
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index b6cdace..5717851 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock
@@ -6,35 +6,76 @@ "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/source.json": "035b6f1911e17340db722bbc9158f830ee6d5dedba4cb3bcb9e25e590808a32c", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/MODULE.bazel": "d1086e248cda6576862b4b3fe9ad76a214e08c189af5b42557a6e1888812c5d5", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/source.json": "1b996859f840d8efc7c720efc61dcf2a84b1261cb3974cbbe9b6666ebf567775", + "https://bcr.bazel.build/modules/abseil-py/2.1.0/MODULE.bazel": "5ebe5bf853769c65707e5c28f216798f7a4b1042015e6a36e6d03094d94bec8a", + "https://bcr.bazel.build/modules/abseil-py/2.1.0/source.json": "0e8fc4f088ce07099c1cd6594c20c7ddbb48b4b3c0849b7d94ba94be88ff042b", + "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896", + "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", + "https://bcr.bazel.build/modules/apple_support/1.15.1/source.json": "517f2b77430084c541bc9be2db63fdcbb7102938c5f64c17ee60ffda2e5cf07b", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", - "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", + "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", + "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", + "https://bcr.bazel.build/modules/bazel_features/1.13.0/MODULE.bazel": "c14c33c7c3c730612bdbe14ebbb5e61936b6f11322ea95a6e91cd1ba962f94df", + "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.23.0/MODULE.bazel": "fd1ac84bc4e97a5a0816b7fd7d4d4f6d837b0047cf4cbd81652d616af3a6591a", "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", - "https://bcr.bazel.build/modules/bazel_features/1.28.0/source.json": "16a3fc5b4483cb307643791f5a4b7365fa98d2e70da7c378cdbde55f0c0b32cf", + "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/source.json": "b07e17f067fe4f69f90b03b36ef1e08fe0d1f3cac254c1241a1818773e3423bc", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", + "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", + "https://bcr.bazel.build/modules/bazel_worker_api/0.0.1/MODULE.bazel": "02a13b77321773b2042e70ee5e4c5e099c8ddee4cf2da9cd420442c36938d4bd", + "https://bcr.bazel.build/modules/bazel_worker_api/0.0.4/MODULE.bazel": "460aa12d01231a80cce03c548287b433b321d205b0028ae596728c35e5ee442e", + "https://bcr.bazel.build/modules/bazel_worker_api/0.0.4/source.json": "d353c410d47a8b65d09fa98e83d57ebec257a2c2b9c6e42d6fda1cb25e5464a5", + "https://bcr.bazel.build/modules/bazel_worker_java/0.0.4/MODULE.bazel": "82494a01018bb7ef06d4a17ec4cd7a758721f10eb8b6c820a818e70d669500db", + "https://bcr.bazel.build/modules/bazel_worker_java/0.0.4/source.json": "a2d30458fd86cf022c2b6331e652526fa08e17573b2f5034a9dbcacdf9c2583c", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", + "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", + "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", + "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", + "https://bcr.bazel.build/modules/gazelle/0.40.0/MODULE.bazel": "42ba5378ebe845fca43989a53186ab436d956db498acde790685fe0e8f9c6146", + "https://bcr.bazel.build/modules/gazelle/0.40.0/source.json": "1e5ef6e4d8b9b6836d93273c781e78ff829ea2e077afef7a57298040fa4f010a", + "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", + "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", - "https://bcr.bazel.build/modules/googletest/1.14.0/source.json": "2478949479000fdd7de9a3d0107ba2c85bb5f961c3ecb1aa448f52549ce310b5", + "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108", + "https://bcr.bazel.build/modules/googletest/1.15.2/source.json": "dbdda654dcb3a0d7a8bc5d0ac5fc7e150b58c2a986025ae5bc634bb2cb61f470", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/MODULE.bazel": "2f8d20d3b7d54143213c4dfc3d98225c42de7d666011528dc8fe91591e2e17b0", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/source.json": "a04756d367a2126c3541682864ecec52f92cdee80a35735a3cb249ce015ca000", + "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9", + "https://bcr.bazel.build/modules/package_metadata/0.0.7/MODULE.bazel": "7adb03933fc8401f495800cf4eafcff0edc6da0ff55c7db223ef69d19f689486", + "https://bcr.bazel.build/modules/package_metadata/0.0.7/source.json": "50639625e937b56115012674c797cca7a05a96b4878c87d803c13dc2b31de8a0", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", @@ -42,68 +83,141 @@ "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/23.1/MODULE.bazel": "88b393b3eb4101d18129e5db51847cd40a5517a53e81216144a8c32dfeeca52a", + "https://bcr.bazel.build/modules/protobuf/24.4/MODULE.bazel": "7bc7ce5f2abf36b3b7b7c8218d3acdebb9426aeb35c2257c96445756f970eb12", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", - "https://bcr.bazel.build/modules/protobuf/27.0/source.json": "1acf3d080c728d42f423fde5422fd0a1a24f44c15908124ce12363a253384193", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", + "https://bcr.bazel.build/modules/protobuf/27.2/MODULE.bazel": "32450b50673882e4c8c3d10a83f3bc82161b213ed2f80d17e38bece8f165c295", + "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/3.19.2/MODULE.bazel": "532ffe5f2186b69fdde039efe6df13ba726ff338c6bc82275ad433013fa10573", "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/protobuf/31.1/MODULE.bazel": "379a389bb330b7b8c1cdf331cc90bf3e13de5614799b3b52cdb7c6f389f6b38e", + "https://bcr.bazel.build/modules/protobuf/31.1/source.json": "25af5d0219da0c0fc4d1191a24ce438e6ca7f49d2e1a94f354efeba6ef10426f", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680", + "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4", + "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa", "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", - "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_android/0.6.6/MODULE.bazel": "b0fb569752aab65ab1a9db0a8f6cfaf5aa1754965e17e95dcf0e4d88e192a68d", + "https://bcr.bazel.build/modules/rules_android/0.6.6/source.json": "a9d8dc2d5a102dc03269a94acc886a4cab82cdcb9ccbc77b0f665d6d17a6ae09", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/source.json": "d8b5fe461272018cc07cfafce11fe369c7525330804c37eec5a82f84cd475366", "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", + "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a", "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", "https://bcr.bazel.build/modules/rules_cc/0.2.14/MODULE.bazel": "353c99ed148887ee89c54a17d4100ae7e7e436593d104b668476019023b58df8", "https://bcr.bazel.build/modules/rules_cc/0.2.14/source.json": "55d0a4587c5592fad350f6e698530f4faf0e7dd15e69d43f8d87e220c78bea54", + "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", + "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", + "https://bcr.bazel.build/modules/rules_go/0.41.0/MODULE.bazel": "55861d8e8bb0e62cbd2896f60ff303f62ffcb0eddb74ecb0e5c0cbe36fc292c8", + "https://bcr.bazel.build/modules/rules_go/0.42.0/MODULE.bazel": "8cfa875b9aa8c6fce2b2e5925e73c1388173ea3c32a0db4d2b4804b453c14270", + "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd", + "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0", + "https://bcr.bazel.build/modules/rules_go/0.51.0-rc2/MODULE.bazel": "edfc3a9cea7bedb0eaaff37b0d7817c1a4bf72b3c615580b0ffcee6c52690fd4", + "https://bcr.bazel.build/modules/rules_go/0.51.0-rc2/source.json": "6b5cd0b3da2bd0e6949580851db990a04af0a285f072b9a0f059424457cd8cc9", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", + "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", + "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", + "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel": "30d9135a2b6561c761bd67bd4990da591e6bdc128790ce3e7afd6a3558b2fb64", + "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", + "https://bcr.bazel.build/modules/rules_java/7.4.0/MODULE.bazel": "a592852f8a3dd539e82ee6542013bf2cadfc4c6946be8941e189d224500a8934", "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", "https://bcr.bazel.build/modules/rules_java/8.11.0/MODULE.bazel": "c3d280bc5ff1038dcb3bacb95d3f6b83da8dd27bba57820ec89ea4085da767ad", - "https://bcr.bazel.build/modules/rules_java/8.11.0/source.json": "302b52a39259a85aa06ca3addb9787864ca3e03b432a5f964ea68244397e7544", + "https://bcr.bazel.build/modules/rules_java/8.13.0/MODULE.bazel": "0444ebf737d144cf2bb2ccb368e7f1cce735264285f2a3711785827c1686625e", + "https://bcr.bazel.build/modules/rules_java/8.13.0/source.json": "4605c0f676b87dd9d1fabd4d743b71f04d97503bd1a79aad53f87399fb5396de", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_java/8.6.0/MODULE.bazel": "9c064c434606d75a086f15ade5edb514308cccd1544c2b2a89bbac4310e41c71", + "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", + "https://bcr.bazel.build/modules/rules_jvm_external/6.10/MODULE.bazel": "33e636ca6bc9ee0fa090a38aa33c631ded2d8cf6fead4124181d1b35dc474f7c", + "https://bcr.bazel.build/modules/rules_jvm_external/6.10/source.json": "c191249787625db72616a3fb3cc2786ab57355a2e3b615402b8b3b66b0f995b7", + "https://bcr.bazel.build/modules/rules_jvm_external/6.2/MODULE.bazel": "36a6e52487a855f33cb960724eb56547fa87e2c98a0474c3acad94339d7f8e99", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", + "https://bcr.bazel.build/modules/rules_jvm_external/6.6/MODULE.bazel": "153042249c7060536dc95b6bb9f9bb8063b8a0b0cb7acdb381bddbc2374aed55", "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd", - "https://bcr.bazel.build/modules/rules_jvm_external/6.7/source.json": "5426f412d0a7fc6b611643376c7e4a82dec991491b9ce5cb1cfdd25fe2e92be4", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.5/MODULE.bazel": "043a16a572f610558ec2030db3ff0c9938574e7dd9f58bded1bb07c0192ef025", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", + "https://bcr.bazel.build/modules/rules_kotlin/2.1.3/MODULE.bazel": "ce7def6d576aa8d3a9c6d10e13b4d157296229674371f67dbf788dae0afae3d5", + "https://bcr.bazel.build/modules/rules_kotlin/2.1.3/source.json": "0b0dc9400f14b5fbb13d278ad3bf0413cdbaf0da0db337e055b855e35b878a3b", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", - "https://bcr.bazel.build/modules/rules_pkg/0.7.0/source.json": "c2557066e0c0342223ba592510ad3d812d4963b9024831f7f66fd0584dd8c66c", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", + "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", - "https://bcr.bazel.build/modules/rules_proto/6.0.2/source.json": "17a2e195f56cb28d6bbf763e49973d13890487c6945311ed141e196fb660426d", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", - "https://bcr.bazel.build/modules/rules_python/0.23.1/source.json": "a6d9965700e3bd75df4e19140c0e651851bb720d8b9eb280ecd1ee44b92d7646", + "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", + "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", + "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", + "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", + "https://bcr.bazel.build/modules/rules_python/0.37.1/MODULE.bazel": "3faeb2d9fa0a81f8980643ee33f212308f4d93eea4b9ce6f36d0b742e71e9500", + "https://bcr.bazel.build/modules/rules_python/0.37.2/MODULE.bazel": "b5ffde91410745750b6c13be1c5dc4555ef5bc50562af4a89fd77807fdde626a", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", + "https://bcr.bazel.build/modules/rules_python/1.0.0/source.json": "b0162a65c6312e45e7912e39abd1a7f8856c2c7e41ecc9b6dc688a6f6400a917", + "https://bcr.bazel.build/modules/rules_robolectric/4.14.1.2/MODULE.bazel": "d44fec647d0aeb67b9f3b980cf68ba634976f3ae7ccd6c07d790b59b87a4f251", + "https://bcr.bazel.build/modules/rules_robolectric/4.14.1.2/source.json": "37c10335f2361c337c5c1f34ed36d2da70534c23088062b33a8bdaab68aa9dea", + "https://bcr.bazel.build/modules/rules_shell/0.1.2/MODULE.bazel": "66e4ca3ce084b04af0b9ff05ff14cab4e5df7503973818bb91cbc6cda08d32fc", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", - "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", + "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", + "https://bcr.bazel.build/modules/rules_shell/0.4.1/source.json": "4757bd277fe1567763991c4425b483477bb82e35e777a56fd846eb5cceda324a", + "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/source.json": "40fc69dfaac64deddbb75bd99cdac55f4427d9ca0afbe408576a65428427a186", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", + "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", + "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/source.json": "32bd87e5f4d7acc57c5b2ff7c325ae3061d5e242c0c4c214ae87e0f1c13e54cb", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/upb/0.0.0-20230516-61a97ef/MODULE.bazel": "c0df5e35ad55e264160417fd0875932ee3c9dda63d9fccace35ac62f45e1b6f9", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d" + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", + "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" }, "selectedYankedVersions": {}, "moduleExtensions": { "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { - "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", + "bzlTransitiveDigest": "ltCGFbl/LQQZXn/LEMXfKX7pGwyqNiOCHcmiQW0tmjM=", + "usagesDigest": "eXsWd8YDJDt7+F94YtjKuTAIRMWBi9JLS8hUiqynRIY=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -128,27 +242,207 @@ ] } }, - "@@platforms//host:extension.bzl%host_platform": { + "@@pybind11_bazel~//:internal_configure.bzl%internal_configure_extension": { "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", + "bzlTransitiveDigest": "CyAKLVVonohnkTSqg9II/HA7M49sOlnMkgMHL3CmDuc=", + "usagesDigest": "mFrTHX5eCiNU/OIIGVHH3cOILY9Zmjqk8RQYv8o6Thk=", + "recordedFileInputs": { + "@@pybind11_bazel~//MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34" + }, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "pybind11": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "build_file": "@@pybind11_bazel~//:pybind11-BUILD.bazel", + "strip_prefix": "pybind11-2.12.0", + "urls": [ + "https://github.com/pybind/pybind11/archive/v2.12.0.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "pybind11_bazel~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_android~//bzlmod_extensions:apksig.bzl%apksig_extension": { + "general": { + "bzlTransitiveDigest": "+fNvC5PNWx1aA64JjkW33+1zGbG9xgfi70xQhxbglhY=", + "usagesDigest": "TaGkNxVMBZxl1ANdUNPmIjKrA33bO+BpI06yTlpHdos=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", + "apksig": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "url": "https://android.googlesource.com/platform/tools/apksig/+archive/24e3075e68ebe17c0b529bb24bfda819db5e2f3b.tar.gz", + "build_file": "@@rules_android~//bzlmod_extensions:apksig.BUILD" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_android~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_android~//bzlmod_extensions:com_android_dex.bzl%com_android_dex_extension": { + "general": { + "bzlTransitiveDigest": "/KJvxHLYhvSLJihEHN0e5Uzdd7OOMvpFb0BFUl1RUTs=", + "usagesDigest": "fh77SU1OUlWN5ivrGpY93+t0MipuVj89/MMUgfTpSa8=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_android_dex": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "url": "https://android.googlesource.com/platform/dalvik/+archive/5a81c499a569731e2395f7c8d13c0e0d4e17a2b6.tar.gz", + "build_file": "@@rules_android~//bzlmod_extensions:com_android_dex.BUILD" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_android~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_android~//rules/android_sdk_repository:rule.bzl%android_sdk_repository_extension": { + "general": { + "bzlTransitiveDigest": "NAy+0M15JNVEBb8Tny6t7j3lKqTnsAMjoBB6LJ+C370=", + "usagesDigest": "weZLGEpNa+fTJZ9CEljWxpN3/kuPzj/ULgebzOt2h4g=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "androidsdk": { + "bzlFile": "@@rules_android~//rules/android_sdk_repository:rule.bzl", + "ruleClassName": "_android_sdk_repository", "attributes": {} } }, "recordedRepoMappingEntries": [] } }, + "@@rules_apple~//apple:apple.bzl%provisioning_profile_repository_extension": { + "general": { + "bzlTransitiveDigest": "OLmLOE2zg0CXXzAR24XTccdOw39pMG2gG6R1VFOgDsE=", + "usagesDigest": "cLx5XGjlbSDOpyA053y/jlr4GcaXFVTeHQic6eyG38E=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_provisioning_profiles": { + "bzlFile": "@@rules_apple~//apple/internal:local_provisioning_profiles.bzl", + "ruleClassName": "provisioning_profile_repository", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support~", + "bazel_skylib", + "bazel_skylib~" + ], + [ + "rules_apple~", + "bazel_skylib", + "bazel_skylib~" + ], + [ + "rules_apple~", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_apple~", + "build_bazel_apple_support", + "apple_support~" + ], + [ + "rules_apple~", + "build_bazel_rules_swift", + "rules_swift~" + ], + [ + "rules_swift~", + "bazel_skylib", + "bazel_skylib~" + ], + [ + "rules_swift~", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_swift~", + "build_bazel_apple_support", + "apple_support~" + ], + [ + "rules_swift~", + "build_bazel_rules_swift", + "rules_swift~" + ], + [ + "rules_swift~", + "build_bazel_rules_swift_local_config", + "rules_swift~~non_module_deps~build_bazel_rules_swift_local_config" + ] + ] + } + }, + "@@rules_apple~//apple:extensions.bzl%non_module_deps": { + "general": { + "bzlTransitiveDigest": "LJ3bhNqfW9y6MZFgtKQoPJyUMg/aEZ8H9QXSzK1VOBk=", + "usagesDigest": "5FfEPy/Z0Y2V9RbdJRDabgADFdvlfIIrps/5XYOnMNI=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "xctestrunner": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/google/xctestrunner/archive/b7698df3d435b6491b4b4c0f9fc7a63fbed5e3a6.tar.gz" + ], + "strip_prefix": "xctestrunner-b7698df3d435b6491b4b4c0f9fc7a63fbed5e3a6", + "sha256": "ae3a063c985a8633cb7eb566db21656f8db8eb9a0edb8c182312c7f0db53730d" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_apple~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", - "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=", + "bzlTransitiveDigest": "BSndOxBXlbe5qZf1NRxf828dpEK6tM429pCnaFoUFYs=", + "usagesDigest": "Dg5Nih77FaLAipQB7wgwsAy553a3po0eNGQVTZKgCM8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -158,9 +452,9 @@ "ruleClassName": "kotlin_compiler_git_repository", "attributes": { "urls": [ - "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + "https://github.com/JetBrains/kotlin/releases/download/v2.1.0/kotlin-compiler-2.1.0.zip" ], - "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + "sha256": "b6698d5728ad8f9edcdd01617d638073191d8a03139cc538a391b4e3759ad297" } }, "com_github_jetbrains_kotlin": { @@ -168,7 +462,7 @@ "ruleClassName": "kotlin_capabilities_repository", "attributes": { "git_repository_name": "com_github_jetbrains_kotlin_git", - "compiler_version": "1.9.23" + "compiler_version": "2.1.0" } }, "com_github_google_ksp": { @@ -176,31 +470,50 @@ "ruleClassName": "ksp_compiler_plugin_repository", "attributes": { "urls": [ - "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + "https://github.com/google/ksp/releases/download/2.1.0-1.0.28/artifacts.zip" ], - "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", - "strip_version": "1.9.23-1.0.20" + "sha256": "fc27b08cadc061a4a989af01cbeccb613feef1995f4aad68f2be0f886a3ee251", + "strip_version": "2.1.0-1.0.28" } }, "com_github_pinterest_ktlint": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_file", "attributes": { - "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "sha256": "a9f923be58fbd32670a17f0b729b1df804af882fa57402165741cb26e5440ca1", "urls": [ - "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + "https://github.com/pinterest/ktlint/releases/download/1.3.1/ktlint" ], "executable": true } }, - "rules_android": { + "kotlinx_serialization_core_jvm": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", + "ruleClassName": "http_jar", "attributes": { - "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - "strip_prefix": "rules_android-0.1.1", + "sha256": "29c821a8d4e25cbfe4f2ce96cdd4526f61f8f4e69a135f9612a34a81d93b65f1", "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-serialization-core-jvm/1.6.3/kotlinx-serialization-core-jvm-1.6.3.jar" + ] + } + }, + "kotlinx_serialization_json": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_jar", + "attributes": { + "sha256": "8c0016890a79ab5980dd520a5ab1a6738023c29aa3b6437c482e0e5fdc06dab1", + "urls": [ + "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-serialization-json/1.6.3/kotlinx-serialization-json-1.6.3.jar" + ] + } + }, + "kotlinx_serialization_json_jvm": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_jar", + "attributes": { + "sha256": "d3234179bcff1886d53d67c11eca47f7f3cf7b63c349d16965f6db51b7f3dd9a", + "urls": [ + "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-serialization-json-jvm/1.6.3/kotlinx-serialization-json-jvm-1.6.3.jar" ] } } @@ -214,582 +527,2480 @@ ] } }, - "@@rules_python~//python/extensions:python.bzl%python": { + "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "l7SEKGzdShn1GH45yoD3IEBi5SxT+5WsAq/OlHiiuiw=", - "usagesDigest": "YiLsNY5r63HmlgMVyESsQgfKVj6Ky/w9Zozdju6rXl4=", - "recordedFileInputs": {}, + "bzlTransitiveDigest": "AMoojKsX4Iw9GcO0xHbXz11GhPs9wzQ+Ua4OZ3muUzw=", + "usagesDigest": "ZVqDJcq4jlkbKBvSiotiO7ElR126/eiKOiKURsvOcoA=", + "recordedFileInputs": { + "@@rules_python~//tools/publish/requirements_linux.txt": "8175b4c8df50ae2f22d1706961884beeb54e7da27bd2447018314a175981997d", + "@@rules_python~//tools/publish/requirements_windows.txt": "7673adc71dc1a81d3661b90924d7a7c0fc998cd508b3cb4174337cef3f2de556", + "@@rules_python~//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc" + }, "recordedDirentsInputs": {}, - "envVariables": {}, + "envVariables": { + "RULES_PYTHON_REPO_DEBUG": null, + "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null + }, "generatedRepoSpecs": { - "python_3_11_aarch64-apple-darwin": { - "bzlFile": "@@rules_python~//python:repositories.bzl", - "ruleClassName": "python_repository", + "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", "attributes": { - "sha256": "4918cdf1cab742a90f85318f88b8122aeaa2d04705803c7b6e78e81a3dd40f80", - "patches": [], - "platform": "aarch64-apple-darwin", - "python_version": "3.11.1", - "release_filename": "20230116/cpython-3.11.1+20230116-aarch64-apple-darwin-install_only.tar.gz", + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "backports.tarfile-1.2.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1+20230116-aarch64-apple-darwin-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "ignore_root_user_error": false - } - }, - "python_3_11_aarch64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "sha256": "debf15783bdcb5530504f533d33fda75a7b905cec5361ae8f33da5ba6599f8b4", - "patches": [], - "platform": "aarch64-unknown-linux-gnu", - "python_version": "3.11.1", - "release_filename": "20230116/cpython-3.11.1+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1+20230116-aarch64-unknown-linux-gnu-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "ignore_root_user_error": false - } - }, - "python_3_11_x86_64-apple-darwin": { - "bzlFile": "@@rules_python~//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "sha256": "20a4203d069dc9b710f70b09e7da2ce6f473d6b1110f9535fb6f4c469ed54733", - "patches": [], - "platform": "x86_64-apple-darwin", - "python_version": "3.11.1", - "release_filename": "20230116/cpython-3.11.1+20230116-x86_64-apple-darwin-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1+20230116-x86_64-apple-darwin-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "ignore_root_user_error": false - } - }, - "python_3_11_x86_64-pc-windows-msvc": { - "bzlFile": "@@rules_python~//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "sha256": "edc08979cb0666a597466176511529c049a6f0bba8adf70df441708f766de5bf", - "patches": [], - "platform": "x86_64-pc-windows-msvc", - "python_version": "3.11.1", - "release_filename": "20230116/cpython-3.11.1+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1+20230116-x86_64-pc-windows-msvc-shared-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "ignore_root_user_error": false - } - }, - "python_3_11_x86_64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "sha256": "02a551fefab3750effd0e156c25446547c238688a32fabde2995c941c03a6423", - "patches": [], - "platform": "x86_64-unknown-linux-gnu", - "python_version": "3.11.1", - "release_filename": "20230116/cpython-3.11.1+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1+20230116-x86_64-unknown-linux-gnu-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "ignore_root_user_error": false - } - }, - "python_3_11": { - "bzlFile": "@@rules_python~//python/private:toolchains_repo.bzl", - "ruleClassName": "toolchain_aliases", - "attributes": { - "python_version": "3.11.1", - "user_repository_name": "python_3_11" - } - }, - "pythons_hub": { - "bzlFile": "@@rules_python~//python/extensions/private:pythons_hub.bzl", - "ruleClassName": "hub_repo", - "attributes": { - "toolchain_prefixes": [ - "_0000_python_3_11_" - ], - "toolchain_python_versions": [ - "3.11" - ], - "toolchain_set_python_version_constraints": [ - "False" - ], - "toolchain_user_repository_names": [ - "python_3_11" + "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" ] } }, - "python_aliases": { - "bzlFile": "@@rules_python~//python/private:toolchains_repo.bzl", - "ruleClassName": "multi_toolchain_aliases", + "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", "attributes": { - "python_versions": { - "3.11": "python_3_11" - } + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "backports_tarfile-1.2.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "backports-tarfile==1.2.0", + "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", + "urls": [ + "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "certifi-2024.8.30-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "urls": [ + "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_certifi_sdist_bec941d2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "certifi-2024.8.30.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", + "urls": [ + "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "urls": [ + "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "urls": [ + "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "urls": [ + "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "urls": [ + "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "urls": [ + "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", + "urls": [ + "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_sdist_1c39c601": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cffi-1.17.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "urls": [ + "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "urls": [ + "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "urls": [ + "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "urls": [ + "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "urls": [ + "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "urls": [ + "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "urls": [ + "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "urls": [ + "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "urls": [ + "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "urls": [ + "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "urls": [ + "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "urls": [ + "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "urls": [ + "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "urls": [ + "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "charset_normalizer-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "urls": [ + "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "urls": [ + "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", + "urls": [ + "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", + "urls": [ + "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", + "urls": [ + "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", + "urls": [ + "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "urls": [ + "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_sdist_315b9001": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cryptography-43.0.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", + "urls": [ + "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "docutils-0.21.2.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "urls": [ + "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_idna_sdist_12f65c9b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "idna-3.10.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "urls": [ + "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "importlib_metadata-8.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "urls": [ + "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "importlib_metadata-8.5.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "urls": [ + "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.classes-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", + "urls": [ + "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco.classes-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", + "urls": [ + "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.context-6.0.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", + "urls": [ + "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_context-6.0.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "urls": [ + "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.functools-4.1.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", + "urls": [ + "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_functools-4.1.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "urls": [ + "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "jeepney-0.8.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", + "urls": [ + "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jeepney-0.8.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jeepney==0.8.0", + "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "urls": [ + "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "keyring-25.4.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", + "urls": [ + "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "keyring-25.4.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "keyring==25.4.1", + "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", + "urls": [ + "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "markdown_it_py-3.0.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "urls": [ + "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "markdown-it-py-3.0.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "markdown-it-py==3.0.0", + "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", + "urls": [ + "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "mdurl-0.1.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "urls": [ + "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "mdurl-0.1.2.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "mdurl==0.1.2", + "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", + "urls": [ + "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "more_itertools-10.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", + "urls": [ + "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "more-itertools-10.5.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", + "urls": [ + "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", + "urls": [ + "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", + "urls": [ + "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", + "urls": [ + "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", + "urls": [ + "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", + "urls": [ + "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", + "urls": [ + "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", + "urls": [ + "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", + "urls": [ + "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", + "urls": [ + "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", + "urls": [ + "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", + "urls": [ + "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", + "urls": [ + "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_sdist_94a16692": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "nh3-0.2.18.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", + "urls": [ + "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pkginfo-1.10.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "urls": [ + "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pkginfo-1.10.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", + "urls": [ + "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "pycparser-2.22-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", + "urls": [ + "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pycparser-2.22.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pycparser==2.22", + "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "urls": [ + "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pygments-2.18.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", + "urls": [ + "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pygments_sdist_786ff802": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pygments-2.18.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pygments==2.18.0", + "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "urls": [ + "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", + "urls": [ + "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pywin32-ctypes-0.2.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", + "urls": [ + "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "readme_renderer-44.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", + "urls": [ + "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "readme_renderer-44.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "readme-renderer==44.0", + "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", + "urls": [ + "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests-2.32.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", + "urls": [ + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_sdist_55365417": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-2.32.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests==2.32.3", + "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "urls": [ + "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", + "urls": [ + "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-toolbelt-1.0.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "urls": [ + "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "urls": [ + "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rfc3986-2.0.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "urls": [ + "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rich_py3_none_any_9836f509": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rich-13.9.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.3", + "sha256": "9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", + "urls": [ + "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rich_sdist_bc1e01b8": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rich-13.9.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.3", + "sha256": "bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e", + "urls": [ + "https://files.pythonhosted.org/packages/d9/e9/cf9ef5245d835065e6673781dbd4b8911d352fb770d56cf0879cf11b7ee1/rich-13.9.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "SecretStorage-3.3.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", + "urls": [ + "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "SecretStorage-3.3.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "secretstorage==3.3.3", + "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", + "urls": [ + "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "twine-5.1.1-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", + "urls": [ + "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "twine-5.1.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "urls": [ + "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "urllib3-2.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "urls": [ + "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "urllib3-2.2.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", + "urls": [ + "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "zipp-3.20.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "urls": [ + "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "zipp-3.20.2.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", + "urls": [ + "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" + ] + } + }, + "rules_python_publish_deps": { + "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", + "ruleClassName": "hub_repository", + "attributes": { + "repo_name": "rules_python_publish_deps", + "extra_hub_aliases": {}, + "whl_map": { + "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", + "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", + "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", + "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", + "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", + "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", + "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", + "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", + "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", + "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", + "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", + "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", + "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", + "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", + "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", + "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", + "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_9836f509\":[{\"filename\":\"rich-13.9.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_bc1e01b8\":[{\"filename\":\"rich-13.9.3.tar.gz\",\"version\":\"3.11\"}]}", + "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", + "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", + "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" + }, + "packages": [ + "backports_tarfile", + "certifi", + "charset_normalizer", + "docutils", + "idna", + "importlib_metadata", + "jaraco_classes", + "jaraco_context", + "jaraco_functools", + "keyring", + "markdown_it_py", + "mdurl", + "more_itertools", + "nh3", + "pkginfo", + "pygments", + "readme_renderer", + "requests", + "requests_toolbelt", + "rfc3986", + "rich", + "twine", + "urllib3", + "zipp" + ], + "groups": {} } } }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, "recordedRepoMappingEntries": [ [ + "bazel_features~", + "bazel_features_globals", + "bazel_features~~version_extension~bazel_features_globals" + ], + [ + "bazel_features~", + "bazel_features_version", + "bazel_features~~version_extension~bazel_features_version" + ], + [ "rules_python~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_python~//python/extensions/private:internal_deps.bzl%internal_deps": { - "general": { - "bzlTransitiveDigest": "HZia2x2zClxBbkyhPtNWVBPeKOTV8j7xJuwILyef0YY=", - "usagesDigest": "9RSsqSb2/36w50hPv3LjfktbwXR/5SiHNcdkp4m2BVA=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "pypi__build": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/03/97/f58c723ff036a8d8b4d3115377c0a37ed05c1f68dd9a0d66dab5e82c5c1c/build-0.9.0-py3-none-any.whl", - "sha256": "38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__click": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/76/0a/b6c5f311e32aeb3b406e03c079ade51e905ea630fc19d1262a46249c1c86/click-8.0.1-py3-none-any.whl", - "sha256": "fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__colorama": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", - "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__installer": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl", - "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__packaging": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/8f/7b/42582927d281d7cb035609cd3a543ffac89b74f3f4ee8e1c50914bcb57eb/packaging-22.0-py3-none-any.whl", - "sha256": "957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__pep517": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/ee/2f/ef63e64e9429111e73d3d6cbee80591672d16f2725e648ebc52096f3d323/pep517-0.13.0-py3-none-any.whl", - "sha256": "4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__pip": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl", - "sha256": "908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__pip_tools": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/5e/e8/f6d7d1847c7351048da870417724ace5c4506e816b38db02f4d7c675c189/pip_tools-6.12.1-py3-none-any.whl", - "sha256": "f0c0c0ec57b58250afce458e2e6058b1f30a4263db895b7d72fd6311bf1dc6f7", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__setuptools": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/7c/5b/3d92b9f0f7ca1645cba48c080b54fe7d8b1033a4e5720091d1631c4266db/setuptools-60.10.0-py3-none-any.whl", - "sha256": "782ef48d58982ddb49920c11a0c5c9c0b02e7d7d1c2ad0aa44e1a1e133051c96", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__tomli": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", - "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__wheel": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/bd/7c/d38a0b30ce22fc26ed7dbc087c6d00851fb3395e9d0dac40bec1f905030c/wheel-0.38.4-py3-none-any.whl", - "sha256": "b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__importlib_metadata": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/d7/31/74dcb59a601b95fce3b0334e8fc9db758f78e43075f22aeb3677dfb19f4c/importlib_metadata-1.4.0-py2.py3-none-any.whl", - "sha256": "bdd9b7c397c273bcc9a11d6629a38487cd07154fa255a467bf704cd2c258e359", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__zipp": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/f4/50/cc72c5bcd48f6e98219fc4a88a5227e9e28b81637a99c49feba1d51f4d50/zipp-1.0.0-py2.py3-none-any.whl", - "sha256": "8dda78f06bd1674bd8720df8a50bb47b6e1233c503a4eed8e7810686bde37656", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__more_itertools": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "url": "https://files.pythonhosted.org/packages/bd/3f/c4b3dbd315e248f84c388bd4a72b131a29f123ecacc37ffb2b3834546e42/more_itertools-8.13.0-py3-none-any.whl", - "sha256": "c5122bffc5f104d37c1626b8615b511f3427aa5389b94d61e5ef8236bfbc3ddb", - "type": "zip", - "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" - } - }, - "pypi__coverage_cp38_aarch64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/28/d7/9a8de57d87f4bbc6f9a6a5ded1eaac88a89bf71369bb935dac3c0cf2893e/coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl" - ] - } - }, - "pypi__coverage_cp38_aarch64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/c8/e4/e6182e4697665fb594a7f4e4f27cb3a4dd00c2e3d35c5c706765de8c7866/coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "pypi__coverage_cp38_x86_64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/c6/fc/be19131010930a6cf271da48202c8cc1d3f971f68c02fb2d3a78247f43dc/coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl" - ] - } - }, - "pypi__coverage_cp38_x86_64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/44/55/49f65ccdd4dfd6d5528e966b28c37caec64170c725af32ab312889d2f857/coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "pypi__coverage_cp39_aarch64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/ca/0c/3dfeeb1006c44b911ee0ed915350db30325d01808525ae7cc8d57643a2ce/coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl" - ] - } - }, - "pypi__coverage_cp39_aarch64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/61/af/5964b8d7d9a5c767785644d9a5a63cacba9a9c45cc42ba06d25895ec87be/coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "pypi__coverage_cp39_x86_64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/88/da/495944ebf0ad246235a6bd523810d9f81981f9b81c6059ba1f56e943abe0/coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl" - ] - } - }, - "pypi__coverage_cp39_x86_64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/fe/57/e4f8ad64d84ca9e759d783a052795f62a9f9111585e46068845b1cb52c2b/coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "pypi__coverage_cp310_aarch64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/3d/80/7060a445e1d2c9744b683dc935248613355657809d6c6b2716cdf4ca4766/coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl" - ] - } - }, - "pypi__coverage_cp310_aarch64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/b8/9d/926fce7e03dbfc653104c2d981c0fa71f0572a9ebd344d24c573bd6f7c4f/coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "pypi__coverage_cp310_x86_64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/01/24/be01e62a7bce89bcffe04729c540382caa5a06bee45ae42136c93e2499f5/coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl" - ] - } - }, - "pypi__coverage_cp310_x86_64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/b4/bd/1b2331e3a04f4cc9b7b332b1dd0f3a1261dfc4114f8479bebfcc2afee9e8/coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "pypi__coverage_cp311_aarch64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/67/d7/cd8fe689b5743fffac516597a1222834c42b80686b99f5b44ef43ccc2a43/coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl" - ] - } - }, - "pypi__coverage_cp311_aarch64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/8c/95/16eed713202406ca0a37f8ac259bbf144c9d24f9b8097a8e6ead61da2dbb/coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "pypi__coverage_cp311_x86_64-apple-darwin": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/c6/fa/529f55c9a1029c840bcc9109d5a15ff00478b7ff550a1ae361f8745f8ad5/coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl" - ] - } - }, - "pypi__coverage_cp311_x86_64-unknown-linux-gnu": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\nfilegroup(\n name = \"coverage\",\n srcs = [\"coverage/__main__.py\"],\n data = glob([\"coverage/*.py\", \"coverage/**/*.py\", \"coverage/*.so\"]),\n visibility = [\"//visibility:public\"],\n)\n ", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@rules_python~//python/private:coverage.patch" - ], - "sha256": "63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb", - "type": "zip", - "urls": [ - "https://files.pythonhosted.org/packages/a7/cd/3ce94ad9d407a052dc2a74fbeb1c7947f442155b28264eb467ee78dea812/coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - } - }, - "recordedRepoMappingEntries": [ + "bazel_features", + "bazel_features~" + ], [ "rules_python~", "bazel_skylib", @@ -802,8 +3013,275 @@ ], [ "rules_python~", - "rules_python", - "rules_python~" + "pypi__build", + "rules_python~~internal_deps~pypi__build" + ], + [ + "rules_python~", + "pypi__click", + "rules_python~~internal_deps~pypi__click" + ], + [ + "rules_python~", + "pypi__colorama", + "rules_python~~internal_deps~pypi__colorama" + ], + [ + "rules_python~", + "pypi__importlib_metadata", + "rules_python~~internal_deps~pypi__importlib_metadata" + ], + [ + "rules_python~", + "pypi__installer", + "rules_python~~internal_deps~pypi__installer" + ], + [ + "rules_python~", + "pypi__more_itertools", + "rules_python~~internal_deps~pypi__more_itertools" + ], + [ + "rules_python~", + "pypi__packaging", + "rules_python~~internal_deps~pypi__packaging" + ], + [ + "rules_python~", + "pypi__pep517", + "rules_python~~internal_deps~pypi__pep517" + ], + [ + "rules_python~", + "pypi__pip", + "rules_python~~internal_deps~pypi__pip" + ], + [ + "rules_python~", + "pypi__pip_tools", + "rules_python~~internal_deps~pypi__pip_tools" + ], + [ + "rules_python~", + "pypi__pyproject_hooks", + "rules_python~~internal_deps~pypi__pyproject_hooks" + ], + [ + "rules_python~", + "pypi__setuptools", + "rules_python~~internal_deps~pypi__setuptools" + ], + [ + "rules_python~", + "pypi__tomli", + "rules_python~~internal_deps~pypi__tomli" + ], + [ + "rules_python~", + "pypi__wheel", + "rules_python~~internal_deps~pypi__wheel" + ], + [ + "rules_python~", + "pypi__zipp", + "rules_python~~internal_deps~pypi__zipp" + ], + [ + "rules_python~", + "pythons_hub", + "rules_python~~python~pythons_hub" + ], + [ + "rules_python~~python~pythons_hub", + "python_3_10_host", + "rules_python~~python~python_3_10_host" + ], + [ + "rules_python~~python~pythons_hub", + "python_3_11_host", + "rules_python~~python~python_3_11_host" + ], + [ + "rules_python~~python~pythons_hub", + "python_3_12_host", + "rules_python~~python~python_3_12_host" + ], + [ + "rules_python~~python~pythons_hub", + "python_3_9_host", + "rules_python~~python~python_3_9_host" + ] + ] + } + }, + "@@rules_swift~//swift:extensions.bzl%non_module_deps": { + "general": { + "bzlTransitiveDigest": "vhXfCi07IAmWf5hLHcxh5xCtTwvEGrmMkOavEMD5pzs=", + "usagesDigest": "/dVEtCLqIAaLXjfRXsJupTS9pTgmYVN/tFdJlGgE5NA=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_github_apple_swift_protobuf": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-protobuf/archive/1.20.2.tar.gz" + ], + "sha256": "3fb50bd4d293337f202d917b6ada22f9548a0a0aed9d9a4d791e6fbd8a246ebb", + "strip_prefix": "swift-protobuf-1.20.2/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_protobuf/BUILD.overlay" + } + }, + "com_github_grpc_grpc_swift": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/grpc/grpc-swift/archive/1.16.0.tar.gz" + ], + "sha256": "58b60431d0064969f9679411264b82e40a217ae6bd34e17096d92cc4e47556a5", + "strip_prefix": "grpc-swift-1.16.0/", + "build_file": "@@rules_swift~//third_party:com_github_grpc_grpc_swift/BUILD.overlay" + } + }, + "com_github_apple_swift_docc_symbolkit": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-docc-symbolkit/archive/refs/tags/swift-5.10-RELEASE.tar.gz" + ], + "sha256": "de1d4b6940468ddb53b89df7aa1a81323b9712775b0e33e8254fa0f6f7469a97", + "strip_prefix": "swift-docc-symbolkit-swift-5.10-RELEASE", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_docc_symbolkit/BUILD.overlay" + } + }, + "com_github_apple_swift_nio": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-nio/archive/2.42.0.tar.gz" + ], + "sha256": "e3304bc3fb53aea74a3e54bd005ede11f6dc357117d9b1db642d03aea87194a0", + "strip_prefix": "swift-nio-2.42.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_nio/BUILD.overlay" + } + }, + "com_github_apple_swift_nio_http2": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-nio-http2/archive/1.26.0.tar.gz" + ], + "sha256": "f0edfc9d6a7be1d587e5b403f2d04264bdfae59aac1d74f7d974a9022c6d2b25", + "strip_prefix": "swift-nio-http2-1.26.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_nio_http2/BUILD.overlay" + } + }, + "com_github_apple_swift_nio_transport_services": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-nio-transport-services/archive/1.15.0.tar.gz" + ], + "sha256": "f3498dafa633751a52b9b7f741f7ac30c42bcbeb3b9edca6d447e0da8e693262", + "strip_prefix": "swift-nio-transport-services-1.15.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_nio_transport_services/BUILD.overlay" + } + }, + "com_github_apple_swift_nio_extras": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-nio-extras/archive/1.4.0.tar.gz" + ], + "sha256": "4684b52951d9d9937bb3e8ccd6b5daedd777021ef2519ea2f18c4c922843b52b", + "strip_prefix": "swift-nio-extras-1.4.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_nio_extras/BUILD.overlay" + } + }, + "com_github_apple_swift_log": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-log/archive/1.4.4.tar.gz" + ], + "sha256": "48fe66426c784c0c20031f15dc17faf9f4c9037c192bfac2f643f65cb2321ba0", + "strip_prefix": "swift-log-1.4.4/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_log/BUILD.overlay" + } + }, + "com_github_apple_swift_nio_ssl": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-nio-ssl/archive/2.23.0.tar.gz" + ], + "sha256": "4787c63f61dd04d99e498adc3d1a628193387e41efddf8de19b8db04544d016d", + "strip_prefix": "swift-nio-ssl-2.23.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_nio_ssl/BUILD.overlay" + } + }, + "com_github_apple_swift_collections": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-collections/archive/1.0.4.tar.gz" + ], + "sha256": "d9e4c8a91c60fb9c92a04caccbb10ded42f4cb47b26a212bc6b39cc390a4b096", + "strip_prefix": "swift-collections-1.0.4/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_collections/BUILD.overlay" + } + }, + "com_github_apple_swift_atomics": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/apple/swift-atomics/archive/1.1.0.tar.gz" + ], + "sha256": "1bee7f469f7e8dc49f11cfa4da07182fbc79eab000ec2c17bfdce468c5d276fb", + "strip_prefix": "swift-atomics-1.1.0/", + "build_file": "@@rules_swift~//third_party:com_github_apple_swift_atomics/BUILD.overlay" + } + }, + "build_bazel_rules_swift_index_import": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "build_file": "@@rules_swift~//third_party:build_bazel_rules_swift_index_import/BUILD.overlay", + "canonical_id": "index-import-5.8", + "urls": [ + "https://github.com/MobileNativeFoundation/index-import/releases/download/5.8.0.1/index-import.tar.gz" + ], + "sha256": "28c1ffa39d99e74ed70623899b207b41f79214c498c603915aef55972a851a15" + } + }, + "build_bazel_rules_swift_local_config": { + "bzlFile": "@@rules_swift~//swift/internal:swift_autoconfiguration.bzl", + "ruleClassName": "swift_autoconfiguration", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_swift~", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_swift~", + "build_bazel_rules_swift", + "rules_swift~" ] ] }
diff --git a/lib/BUILD b/lib/BUILD index 0e798ff..20b85da 100644 --- a/lib/BUILD +++ b/lib/BUILD
@@ -6,7 +6,7 @@ "//org.eclipse.jgit.pgm:__pkg__", "//org.eclipse.jgit.pgm.test:__pkg__", ], - exports = ["@jgit_deps//:args4j_args4j"], + exports = ["@external_deps//:args4j_args4j"], ) java_library( @@ -16,7 +16,7 @@ "//org.eclipse.jgit.pgm.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_apache_commons_commons_compress"], + exports = ["@external_deps//:org_apache_commons_commons_compress"], ) java_library( @@ -26,7 +26,7 @@ "//org.eclipse.jgit.pgm.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_apache_commons_commons_lang3"], + exports = ["@external_deps//:org_apache_commons_commons_lang3"], ) java_library( @@ -36,7 +36,7 @@ "//org.eclipse.jgit.pgm.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:commons_io_commons_io"], + exports = ["@external_deps//:commons_io_commons_io"], ) java_library( @@ -45,13 +45,13 @@ "//org.eclipse.jgit:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:commons_codec_commons_codec"], + exports = ["@external_deps//:commons_codec_commons_codec"], ) java_library( name = "commons-logging", visibility = ["//visibility:public"], - exports = ["@jgit_deps//:commons_logging_commons_logging"], + exports = ["@external_deps//:commons_logging_commons_logging"], ) java_library( @@ -60,7 +60,7 @@ "//org.eclipse.jgit.lfs:__pkg__", "//org.eclipse.jgit.lfs.server:__pkg__", ], - exports = ["@jgit_deps//:com_google_code_gson_gson"], + exports = ["@external_deps//:com_google_code_gson_gson"], ) java_library( @@ -70,7 +70,7 @@ "//org.eclipse.jgit.lfs.server.test:__pkg__", "//org.eclipse.jgit.pgm:__pkg__", ], - exports = ["@jgit_deps//:org_apache_httpcomponents_httpclient"], + exports = ["@external_deps//:org_apache_httpcomponents_httpclient"], ) java_library( @@ -82,7 +82,7 @@ "//org.eclipse.jgit.lfs.server.test:__pkg__", "//org.eclipse.jgit.pgm:__pkg__", ], - exports = ["@jgit_deps//:org_apache_httpcomponents_httpcore"], + exports = ["@external_deps//:org_apache_httpcomponents_httpcore"], ) java_library( @@ -94,7 +94,7 @@ "//org.eclipse.jgit.ssh.apache.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_apache_sshd_sshd_osgi"], + exports = ["@external_deps//:org_apache_sshd_sshd_osgi"], ) java_library( @@ -105,7 +105,7 @@ "//org.eclipse.jgit.ssh.apache.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_apache_sshd_sshd_sftp"], + exports = ["@external_deps//:org_apache_sshd_sshd_sftp"], ) java_library( @@ -113,7 +113,7 @@ visibility = [ "//org.eclipse.jgit.ssh.apache.agent:__pkg__", ], - exports = ["@jgit_deps//:net_java_dev_jna_jna"], + exports = ["@external_deps//:net_java_dev_jna_jna"], ) java_library( @@ -121,20 +121,20 @@ visibility = [ "//org.eclipse.jgit.ssh.apache.agent:__pkg__", ], - exports = ["@jgit_deps//:net_java_dev_jna_jna_platform"], + exports = ["@external_deps//:net_java_dev_jna_jna_platform"], ) java_library( name = "javaewah", visibility = ["//visibility:public"], - exports = ["@jgit_deps//:com_googlecode_javaewah_JavaEWAH"], + exports = ["@external_deps//:com_googlecode_javaewah_JavaEWAH"], ) java_library( name = "jetty-http", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_http"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_http"], runtime_deps = [":commons-codec"], ) @@ -142,28 +142,28 @@ name = "jetty-io", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_io"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_io"], ) java_library( name = "jetty-security", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_security"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_security"], ) java_library( name = "jetty-session", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_session"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_session"], ) java_library( name = "jetty-server", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_server"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_server"], ) java_library( @@ -171,8 +171,8 @@ # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], exports = [ - "@jgit_deps//:org_eclipse_jetty_ee10_jetty_ee10_servlet", - "@jgit_deps//:org_eclipse_jetty_jetty_util_ajax", + "@external_deps//:org_eclipse_jetty_ee10_jetty_ee10_servlet", + "@external_deps//:org_eclipse_jetty_jetty_util_ajax", ], ) @@ -180,14 +180,14 @@ name = "jetty-util", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_jetty_util"], + exports = ["@external_deps//:org_eclipse_jetty_jetty_util"], ) java_library( name = "jetty-ee10-servlet", # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it. visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_eclipse_jetty_ee10_jetty_ee10_servlet"], + exports = ["@external_deps//:org_eclipse_jetty_ee10_jetty_ee10_servlet"], ) java_library( @@ -197,7 +197,7 @@ "//org.eclipse.jgit.ssh.jsch:__pkg__", "//org.eclipse.jgit.ssh.jsch.test:__pkg__", ], - exports = ["@jgit_deps//:com_jcraft_jsch"], + exports = ["@external_deps//:com_jcraft_jsch"], ) java_library( @@ -209,7 +209,7 @@ "//org.eclipse.jgit.ssh.apache.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_bouncycastle_bcpg_jdk18on"], + exports = ["@external_deps//:org_bouncycastle_bcpg_jdk18on"], ) java_library( @@ -222,7 +222,7 @@ "//org.eclipse.jgit.ssh.jsch.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_bouncycastle_bcprov_jdk18on"], + exports = ["@external_deps//:org_bouncycastle_bcprov_jdk18on"], ) java_library( @@ -235,7 +235,7 @@ "//org.eclipse.jgit.ssh.jsch.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_bouncycastle_bcutil_jdk18on"], + exports = ["@external_deps//:org_bouncycastle_bcutil_jdk18on"], ) java_library( @@ -247,7 +247,7 @@ "//org.eclipse.jgit.ssh.jsch.test:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:org_bouncycastle_bcpkix_jdk18on"], + exports = ["@external_deps//:org_bouncycastle_bcpkix_jdk18on"], ) java_library( @@ -256,7 +256,7 @@ "//org.eclipse.jgit.ssh.jsch:__pkg__", "//org.eclipse.jgit.test:__pkg__", ], - exports = ["@jgit_deps//:com_jcraft_jzlib"], + exports = ["@external_deps//:com_jcraft_jzlib"], ) java_library( @@ -264,12 +264,12 @@ testonly = 1, visibility = ["//visibility:public"], exports = [ - "@jgit_deps//:net_bytebuddy_byte_buddy_agent", - "@jgit_deps//:net_bytebuddy_byte_buddy", - "@jgit_deps//:org_hamcrest_hamcrest", - "@jgit_deps//:junit_junit", - "@jgit_deps//:org_mockito_mockito_core", - "@jgit_deps//:org_objenesis_objenesis", + "@external_deps//:net_bytebuddy_byte_buddy_agent", + "@external_deps//:net_bytebuddy_byte_buddy", + "@external_deps//:org_hamcrest_hamcrest", + "@external_deps//:junit_junit", + "@external_deps//:org_mockito_mockito_core", + "@external_deps//:org_objenesis_objenesis", ], ) @@ -278,10 +278,10 @@ testonly = 1, visibility = ["//visibility:public"], exports = [ - "@jgit_deps//:net_bytebuddy_byte_buddy_agent", - "@jgit_deps//:net_bytebuddy_byte_buddy", - "@jgit_deps//:org_mockito_mockito_core", - "@jgit_deps//:org_objenesis_objenesis", + "@external_deps//:net_bytebuddy_byte_buddy_agent", + "@external_deps//:net_bytebuddy_byte_buddy", + "@external_deps//:org_mockito_mockito_core", + "@external_deps//:org_objenesis_objenesis", ], ) @@ -290,7 +290,7 @@ testonly = 1, visibility = ["//visibility:public"], exports = [ - "@jgit_deps//:org_assertj_assertj_core", + "@external_deps//:org_assertj_assertj_core", ], ) @@ -305,24 +305,24 @@ "//org.eclipse.jgit.lfs.server.test:__pkg__", "//org.eclipse.jgit.pgm:__pkg__", ], - exports = ["@jgit_deps//:jakarta_servlet_jakarta_servlet_api_6_1_0"], + exports = ["@external_deps//:jakarta_servlet_jakarta_servlet_api_6_1_0"], ) java_library( name = "slf4j-api", visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_slf4j_slf4j_api"], + exports = ["@external_deps//:org_slf4j_slf4j_api"], ) java_library( name = "slf4j-simple", visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_slf4j_slf4j_simple"], + exports = ["@external_deps//:org_slf4j_slf4j_simple"], ) java_library( name = "xz", testonly = 1, visibility = ["//visibility:public"], - exports = ["@jgit_deps//:org_tukaani_xz"], + exports = ["@external_deps//:org_tukaani_xz"], )
diff --git a/lib/jmh/BUILD b/lib/jmh/BUILD index 1bba1a5..2b15300 100644 --- a/lib/jmh/BUILD +++ b/lib/jmh/BUILD
@@ -4,9 +4,9 @@ name = "jmh", visibility = ["//visibility:public"], exports = [ - "@jgit_deps//:org_openjdk_jmh_jmh_generator_annprocess", - "@jgit_deps//:org_openjdk_jmh_jmh_core", - "@jgit_deps//:net_sf_jopt_simple_jopt_simple", - "@jgit_deps//:org_apache_commons_commons_math3", + "@external_deps//:org_openjdk_jmh_jmh_generator_annprocess", + "@external_deps//:org_openjdk_jmh_jmh_core", + "@external_deps//:net_sf_jopt_simple_jopt_simple", + "@external_deps//:org_apache_commons_commons_math3", ], )
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF index 400a5dc..012f00b 100644 --- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
@@ -9,31 +9,31 @@ Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-SCM: url=https://github.com/eclipse-jgit/jgit, connection=scm:git:https://eclipse.gerrithub.io/eclipse-jgit/jgit.git, developerConnection=scm:git:https://eclipse.gerrithub.io/a/eclipse-jgit/jgit.git -Import-Package: org.apache.sshd.common;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)", - org.apache.sshd.common.file.virtualfs;version="[2.16.0,2.17.0)", - org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)", - org.apache.sshd.common.io;version="[2.16.0,2.17.0)", - org.apache.sshd.common.kex;version="[2.16.0,2.17.0)", - org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)", - org.apache.sshd.common.session;version="[2.16.0,2.17.0)", - org.apache.sshd.common.signature;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.logging;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.threads;version="[2.16.0,2.17.0)", - org.apache.sshd.core;version="[2.16.0,2.17.0)", - org.apache.sshd.server;version="[2.16.0,2.17.0)", - org.apache.sshd.server.auth;version="[2.16.0,2.17.0)", - org.apache.sshd.server.auth.gss;version="[2.16.0,2.17.0)", - org.apache.sshd.server.auth.keyboard;version="[2.16.0,2.17.0)", - org.apache.sshd.server.auth.password;version="[2.16.0,2.17.0)", - org.apache.sshd.server.command;version="[2.16.0,2.17.0)", - org.apache.sshd.server.session;version="[2.16.0,2.17.0)", - org.apache.sshd.server.shell;version="[2.16.0,2.17.0)", - org.apache.sshd.server.subsystem;version="[2.16.0,2.17.0)", - org.apache.sshd.sftp;version="[2.16.0,2.17.0)", - org.apache.sshd.sftp.server;version="[2.16.0,2.17.0)", +Import-Package: org.apache.sshd.common;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)", + org.apache.sshd.common.file.virtualfs;version="[2.17.1,2.18.0)", + org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)", + org.apache.sshd.common.io;version="[2.17.1,2.18.0)", + org.apache.sshd.common.kex;version="[2.17.1,2.18.0)", + org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)", + org.apache.sshd.common.session;version="[2.17.1,2.18.0)", + org.apache.sshd.common.signature;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.logging;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.threads;version="[2.17.1,2.18.0)", + org.apache.sshd.core;version="[2.17.1,2.18.0)", + org.apache.sshd.server;version="[2.17.1,2.18.0)", + org.apache.sshd.server.auth;version="[2.17.1,2.18.0)", + org.apache.sshd.server.auth.gss;version="[2.17.1,2.18.0)", + org.apache.sshd.server.auth.keyboard;version="[2.17.1,2.18.0)", + org.apache.sshd.server.auth.password;version="[2.17.1,2.18.0)", + org.apache.sshd.server.command;version="[2.17.1,2.18.0)", + org.apache.sshd.server.session;version="[2.17.1,2.18.0)", + org.apache.sshd.server.shell;version="[2.17.1,2.18.0)", + org.apache.sshd.server.subsystem;version="[2.17.1,2.18.0)", + org.apache.sshd.sftp;version="[2.17.1,2.18.0)", + org.apache.sshd.sftp.server;version="[2.17.1,2.18.0)", org.eclipse.jgit.annotations;version="[7.6.0,7.7.0)", org.eclipse.jgit.api;version="[7.6.0,7.7.0)", org.eclipse.jgit.api.errors;version="[7.6.0,7.7.0)",
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target index 2b01f35..2f519a0 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.34" sequenceNumber="1769375519"> +<target name="jgit-4.34" sequenceNumber="1769597966"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target index b838cfc..abaa5a4 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.35" sequenceNumber="1769375519"> +<target name="jgit-4.35" sequenceNumber="1769597966"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target index 278511b..c6a05ea 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.36" sequenceNumber="1769375519"> +<target name="jgit-4.36" sequenceNumber="1769597965"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target index 3df478a..a4b0cac 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.37" sequenceNumber="1769375519"> +<target name="jgit-4.37" sequenceNumber="1769597966"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target index 3fb1dbe..e75ee6d 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.38" sequenceNumber="1769375519"> +<target name="jgit-4.38" sequenceNumber="1769597966"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target index 7742ddb..5836dd3 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <?pde?> <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl --> -<target name="jgit-4.39" sequenceNumber="1769375519"> +<target name="jgit-4.39" sequenceNumber="1769597966"> <locations> <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit"> <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/> @@ -65,13 +65,13 @@ <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-osgi</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> - <version>2.16.0</version> + <version>2.17.1</version> <type>jar</type> </dependency> </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd index 5368a95..b67fa77 100644 --- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd +++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
@@ -238,12 +238,12 @@ dependency { groupId = "org.apache.sshd" artifactId = "sshd-osgi" - version = "2.16.0" + version = "2.17.1" } dependency { groupId = "org.apache.sshd" artifactId = "sshd-sftp" - version = "2.16.0" + version = "2.17.1" } }
diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties index 606b29d..96ecf2a 100644 --- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties +++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
@@ -284,6 +284,8 @@ usage_DisplayTheVersionOfJgit=Display the version of jgit usage_Exclude=Do not consider tags matching the given glob(7) pattern, excluding the "refs/tags/" prefix usage_Gc=Cleanup unnecessary files and optimize the local repository +usage_GcPackRefs=Pack all refs except symbolic refs, default can be configured by "gc.packRefs" which defaults to true +usage_GcNoPackRefs=Do not pack refs usage_Glog=View commit history as a graph usage_DiffGuiTool=When git-difftool is invoked with the -g or --gui option the default diff tool will be read from the configured diff.guitool variable instead of diff.tool. usage_MergeGuiTool=When git-mergetool is invoked with the -g or --gui option the default merge tool will be read from the configured merge.guitool variable instead of merge.tool.
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java index 35ac7a1..f278e55 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java
@@ -13,6 +13,8 @@ import org.eclipse.jgit.api.GarbageCollectCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.GcConfig; +import org.eclipse.jgit.lib.GcConfig.PackRefsMode; import org.eclipse.jgit.lib.TextProgressMonitor; import org.kohsuke.args4j.Option; @@ -30,6 +32,16 @@ class Gc extends TextBuiltin { @Option(name = "--pack-kept-objects", usage = "usage_PackKeptObjects") private Boolean packKeptObjects; + @Option(name = "--pack-refs", forbids = { + "--no-pack-refs" }, usage = "usage_GcPackRefs") + private Boolean packRefs; + + @Option(name = "--no-pack-refs", forbids = { + "--pack-refs" }, usage = "usage_GcNoPackRefs") + void noPackRefs(@SuppressWarnings("unused") final boolean ignored) { + packRefs = Boolean.FALSE; + } + /** {@inheritDoc} */ @Override protected void run() { @@ -46,6 +58,11 @@ protected void run() { if (packKeptObjects != null) { command.setPackKeptObjects(packKeptObjects.booleanValue()); } + if (packRefs != null) { + command.setGcConfig( + new GcConfig(packRefs.booleanValue() ? PackRefsMode.TRUE + : PackRefsMode.FALSE)); + } command.call(); } catch (GitAPIException e) { throw die(e.getMessage(), e);
diff --git a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF index 21aa80f..d2bf5ae 100644 --- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -8,24 +8,24 @@ Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-SCM: url=https://github.com/eclipse-jgit/jgit, connection=scm:git:https://eclipse.gerrithub.io/eclipse-jgit/jgit.git, developerConnection=scm:git:https://eclipse.gerrithub.io/a/eclipse-jgit/jgit.git -Import-Package: org.apache.sshd.agent;version="[2.16.0,2.17.0)", - org.apache.sshd.certificate;version="[2.16.0,2.17.0)", - org.apache.sshd.client.config.hosts;version="[2.16.0,2.17.0)", - org.apache.sshd.common;version="[2.16.0,2.17.0)", - org.apache.sshd.common.auth;version="[2.16.0,2.17.0)", - org.apache.sshd.common.cipher;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)", - org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)", - org.apache.sshd.common.kex;version="[2.16.0,2.17.0)", - org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)", - org.apache.sshd.common.session;version="[2.16.0,2.17.0)", - org.apache.sshd.common.signature;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.net;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)", - org.apache.sshd.core;version="[2.16.0,2.17.0)", - org.apache.sshd.server;version="[2.16.0,2.17.0)", - org.apache.sshd.server.forward;version="[2.16.0,2.17.0)", +Import-Package: org.apache.sshd.agent;version="[2.17.1,2.18.0)", + org.apache.sshd.certificate;version="[2.17.1,2.18.0)", + org.apache.sshd.client.config.hosts;version="[2.17.1,2.18.0)", + org.apache.sshd.common;version="[2.17.1,2.18.0)", + org.apache.sshd.common.auth;version="[2.17.1,2.18.0)", + org.apache.sshd.common.cipher;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)", + org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)", + org.apache.sshd.common.kex;version="[2.17.1,2.18.0)", + org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)", + org.apache.sshd.common.session;version="[2.17.1,2.18.0)", + org.apache.sshd.common.signature;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.net;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)", + org.apache.sshd.core;version="[2.17.1,2.18.0)", + org.apache.sshd.server;version="[2.17.1,2.18.0)", + org.apache.sshd.server.forward;version="[2.17.1,2.18.0)", org.eclipse.jgit.annotations;version="[7.6.0,7.7.0)", org.eclipse.jgit.api;version="[7.6.0,7.7.0)", org.eclipse.jgit.api.errors;version="[7.6.0,7.7.0)",
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF index 97d5656..7a7d7e1 100644 --- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
@@ -39,58 +39,58 @@ org.apache.sshd.client.keyverifier", org.eclipse.jgit.transport.sshd.agent;version="7.6.0" Import-Package: org.bouncycastle.jce.provider;version="[1.80.0,2.0.0)", - org.apache.sshd.agent;version="[2.16.0,2.17.0)", - org.apache.sshd.client;version="[2.16.0,2.17.0)", - org.apache.sshd.client.auth;version="[2.16.0,2.17.0)", - org.apache.sshd.client.auth.keyboard;version="[2.16.0,2.17.0)", - org.apache.sshd.client.auth.password;version="[2.16.0,2.17.0)", - org.apache.sshd.client.auth.pubkey;version="[2.16.0,2.17.0)", - org.apache.sshd.client.channel;version="[2.16.0,2.17.0)", - org.apache.sshd.client.config.hosts;version="[2.16.0,2.17.0)", - org.apache.sshd.client.config.keys;version="[2.16.0,2.17.0)", - org.apache.sshd.client.future;version="[2.16.0,2.17.0)", - org.apache.sshd.client.keyverifier;version="[2.16.0,2.17.0)", - org.apache.sshd.client.session;version="[2.16.0,2.17.0)", - org.apache.sshd.client.session.forward;version="[2.16.0,2.17.0)", - org.apache.sshd.common;version="[2.16.0,2.17.0)", - org.apache.sshd.common.auth;version="[2.16.0,2.17.0)", - org.apache.sshd.common.channel;version="[2.16.0,2.17.0)", - org.apache.sshd.common.cipher;version="[2.16.0,2.17.0)", - org.apache.sshd.common.compression;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys.loader;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.16.0,2.17.0)", - org.apache.sshd.common.config.keys.u2f;version="[2.16.0,2.17.0)", - org.apache.sshd.common.digest;version="[2.16.0,2.17.0)", - org.apache.sshd.common.forward;version="[2.16.0,2.17.0)", - org.apache.sshd.common.future;version="[2.16.0,2.17.0)", - org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)", - org.apache.sshd.common.io;version="[2.16.0,2.17.0)", - org.apache.sshd.common.kex;version="[2.16.0,2.17.0)", - org.apache.sshd.common.kex.extension;version="[2.16.0,2.17.0)", - org.apache.sshd.common.kex.extension.parser;version="[2.16.0,2.17.0)", - org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)", - org.apache.sshd.common.mac;version="[2.16.0,2.17.0)", - org.apache.sshd.common.random;version="[2.16.0,2.17.0)", - org.apache.sshd.common.session;version="[2.16.0,2.17.0)", - org.apache.sshd.common.session.helpers;version="[2.16.0,2.17.0)", - org.apache.sshd.common.signature;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.buffer.keys;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.closeable;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.io;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.io.der;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.io.functors;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.io.resource;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.logging;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.net;version="[2.16.0,2.17.0)", - org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)", - org.apache.sshd.core;version="[2.16.0,2.17.0)", - org.apache.sshd.server.auth;version="[2.16.0,2.17.0)", - org.apache.sshd.sftp;version="[2.16.0,2.17.0)", - org.apache.sshd.sftp.client;version="[2.16.0,2.17.0)", - org.apache.sshd.sftp.common;version="[2.16.0,2.17.0)", + org.apache.sshd.agent;version="[2.17.1,2.18.0)", + org.apache.sshd.client;version="[2.17.1,2.18.0)", + org.apache.sshd.client.auth;version="[2.17.1,2.18.0)", + org.apache.sshd.client.auth.keyboard;version="[2.17.1,2.18.0)", + org.apache.sshd.client.auth.password;version="[2.17.1,2.18.0)", + org.apache.sshd.client.auth.pubkey;version="[2.17.1,2.18.0)", + org.apache.sshd.client.channel;version="[2.17.1,2.18.0)", + org.apache.sshd.client.config.hosts;version="[2.17.1,2.18.0)", + org.apache.sshd.client.config.keys;version="[2.17.1,2.18.0)", + org.apache.sshd.client.future;version="[2.17.1,2.18.0)", + org.apache.sshd.client.keyverifier;version="[2.17.1,2.18.0)", + org.apache.sshd.client.session;version="[2.17.1,2.18.0)", + org.apache.sshd.client.session.forward;version="[2.17.1,2.18.0)", + org.apache.sshd.common;version="[2.17.1,2.18.0)", + org.apache.sshd.common.auth;version="[2.17.1,2.18.0)", + org.apache.sshd.common.channel;version="[2.17.1,2.18.0)", + org.apache.sshd.common.cipher;version="[2.17.1,2.18.0)", + org.apache.sshd.common.compression;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys.loader;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.17.1,2.18.0)", + org.apache.sshd.common.config.keys.u2f;version="[2.17.1,2.18.0)", + org.apache.sshd.common.digest;version="[2.17.1,2.18.0)", + org.apache.sshd.common.forward;version="[2.17.1,2.18.0)", + org.apache.sshd.common.future;version="[2.17.1,2.18.0)", + org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)", + org.apache.sshd.common.io;version="[2.17.1,2.18.0)", + org.apache.sshd.common.kex;version="[2.17.1,2.18.0)", + org.apache.sshd.common.kex.extension;version="[2.17.1,2.18.0)", + org.apache.sshd.common.kex.extension.parser;version="[2.17.1,2.18.0)", + org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)", + org.apache.sshd.common.mac;version="[2.17.1,2.18.0)", + org.apache.sshd.common.random;version="[2.17.1,2.18.0)", + org.apache.sshd.common.session;version="[2.17.1,2.18.0)", + org.apache.sshd.common.session.helpers;version="[2.17.1,2.18.0)", + org.apache.sshd.common.signature;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.buffer.keys;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.closeable;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.io;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.io.der;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.io.functors;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.io.resource;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.logging;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.net;version="[2.17.1,2.18.0)", + org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)", + org.apache.sshd.core;version="[2.17.1,2.18.0)", + org.apache.sshd.server.auth;version="[2.17.1,2.18.0)", + org.apache.sshd.sftp;version="[2.17.1,2.18.0)", + org.apache.sshd.sftp.client;version="[2.17.1,2.18.0)", + org.apache.sshd.sftp.common;version="[2.17.1,2.18.0)", org.eclipse.jgit.annotations;version="[7.6.0,7.7.0)", org.eclipse.jgit.api.errors;version="[7.6.0,7.7.0)", org.eclipse.jgit.errors;version="[7.6.0,7.7.0)",
diff --git a/org.eclipse.jgit.test/src/org/eclipse/jgit/internal/storage/dfs/MidxTestUtils.java b/org.eclipse.jgit.test/src/org/eclipse/jgit/internal/storage/dfs/MidxTestUtils.java index b34b822..c5210c8 100644 --- a/org.eclipse.jgit.test/src/org/eclipse/jgit/internal/storage/dfs/MidxTestUtils.java +++ b/org.eclipse.jgit.test/src/org/eclipse/jgit/internal/storage/dfs/MidxTestUtils.java
@@ -14,13 +14,20 @@ import static org.junit.Assert.assertEquals; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.zip.Deflater; import org.eclipse.jgit.annotations.Nullable; +import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.revwalk.RevBlob; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.storage.pack.PackConfig; /** * Helpers to write multipack indexes @@ -136,12 +143,44 @@ static DfsPackFileMidx writeSinglePackMidx(DfsRepository db, */ static DfsPackFileMidx writeMultipackIndex(DfsRepository db, DfsPackFile[] packs, DfsPackFileMidx base) throws IOException { + PackConfig packConfig = new PackConfig(db); + packConfig.setBitmapRecentCommitSpan(1); // bitmap every commit! DfsPackDescription desc = DfsMidxWriter.writeMidx( NullProgressMonitor.INSTANCE, db.getObjectDatabase(), Arrays.asList(packs), - base != null ? base.getPackDescription() : null); + base != null ? base.getPackDescription() : null, packConfig); db.getObjectDatabase().commitPack(List.of(desc), null); return DfsPackFileMidx.create(DfsBlockCache.getInstance(), desc, Arrays.asList(packs), base); } + + record CommitObjects(RevCommit commit, RevTree tree, RevBlob blob) { + } + + private static int commitCounter = 1; + + static List<CommitObjects> writeCommitChain(DfsRepository db, + String refname, int length) throws Exception { + List<CommitObjects> co = new ArrayList<>(length); + RevCommit tip = null; + Ref ref = db.getRefDatabase().findRef(refname); + if (ref != null) { + tip = db.parseCommit(ref.getObjectId()); + } + + try (TestRepository<InMemoryRepository> repository = new TestRepository<>( + (InMemoryRepository) db); + DfsInserter ins = (DfsInserter) db.getObjectDatabase() + .newInserter()) { + for (int i = 0; i < length; i++) { + RevBlob blob = repository.blob("blob" + commitCounter); + + tip = repository.branch(refname).commit().parent(tip) + .add("blob" + commitCounter, blob).create(); + commitCounter++; + co.add(new CommitObjects(tip, tip.getTree(), blob)); + } + } + return co; + } }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/GarbageCollectCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/GarbageCollectCommandTest.java index 6090d5e..2954570 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/GarbageCollectCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/GarbageCollectCommandTest.java
@@ -9,12 +9,16 @@ */ package org.eclipse.jgit.api; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.time.Instant; import java.util.Properties; import org.eclipse.jgit.junit.RepositoryTestCase; +import org.eclipse.jgit.lib.GcConfig; +import org.eclipse.jgit.lib.GcConfig.PackRefsMode; import org.eclipse.jgit.util.GitTimeParser; import org.junit.Before; import org.junit.Test; @@ -34,6 +38,22 @@ public void setUp() throws Exception { } @Test + public void testPackRefs() throws Exception { + assertTrue(hasLooseRef(git)); + + // by default, refs should be packed + git.gc().call(); + assertFalse(hasLooseRef(git)); + + // now create a loose ref again + git.branchCreate().setName("foo").call(); + assertTrue(hasLooseRef(git)); + + git.gc().setGcConfig(new GcConfig(PackRefsMode.FALSE)).call(); + assertTrue(hasLooseRef(git)); + } + + @Test public void testGConeCommit() throws Exception { Instant expireNow = GitTimeParser.parseInstant("now"); Properties res = git.gc().setExpire(expireNow).call(); @@ -54,4 +74,10 @@ public void testGCmoreCommits() throws Exception { Properties res = git.gc().setExpire(expireNow).call(); assertTrue(res.size() == 8); } + + private static boolean hasLooseRef(Git git) throws IOException { + return git.getRepository().getRefDatabase().getRefs().stream() + .filter(r -> !r.isSymbolic()) + .anyMatch(r -> r.getStorage().isLoose()); + } }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriterTest.java new file mode 100644 index 0000000..ac89baa --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriterTest.java
@@ -0,0 +1,172 @@ +/* + * Copyright (C) 2026, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.storage.dfs; + +import static org.eclipse.jgit.internal.storage.dfs.MidxTestUtils.writeMultipackIndex; +import static org.eclipse.jgit.internal.storage.dfs.MidxTestUtils.writeSinglePackMidx; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.jgit.internal.storage.dfs.MidxTestUtils.CommitObjects; +import org.eclipse.jgit.internal.storage.file.PackBitmapIndex; +import org.eclipse.jgit.internal.storage.file.PackReverseIndex; +import org.eclipse.jgit.lib.NullProgressMonitor; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import com.googlecode.javaewah.EWAHCompressedBitmap; + +@RunWith(Parameterized.class) +public class DfsMidxWriterTest { + + @Parameterized.Parameters(name = "{0}") + public static Iterable<TestInput> data() throws Exception { + return List.of(setupOneMidxOverOnePack(), setupOneMidxOverNPacks()); + } + + private record TestInput(String testDesc, DfsRepository db, + DfsPackFileMidx midx, List<CommitObjects> commitObjects, + Map<String, CommitObjects> tips, int expectedBitmaps) { + @Override + public String toString() { + return testDesc; + } + } + + private TestInput ti; + + public DfsMidxWriterTest(TestInput ti) { + this.ti = ti; + } + + @Test + public void bitmapIndex_allObjectsHaveBitmapPosition() throws IOException { + try (DfsReader ctx = ti.db().getObjectDatabase().newReader()) { + PackBitmapIndex bi = ti.midx().getBitmapIndex(ctx); + for (int i = 0; i < ti.midx().getObjectCount(ctx); i++) { + PackReverseIndex reverseIdx = ti.midx().getReverseIdx(ctx); + // All objects in the bitmap + ObjectId oidByOffset = reverseIdx.findObjectByPosition(i); + assertEquals(i, bi.findPosition(oidByOffset)); + } + } + } + + @Test + public void bitmapIndex_bitmapHasRightObjects() throws IOException { + try (DfsReader ctx = ti.db().getObjectDatabase().newReader()) { + PackBitmapIndex bi = ti.midx().getBitmapIndex(ctx); + + ObjectId mainTip = ti.tips().get("refs/heads/main").commit(); + ObjectId devTip = ti.tips().get("refs/heads/dev").commit(); + EWAHCompressedBitmap mainBitmap = bi.getBitmap(mainTip); + EWAHCompressedBitmap devBitmap = bi.getBitmap(devTip); + + // main and dev commit chains do not have any commit in common + assertTrue(mainBitmap.and(devBitmap).isEmpty()); + assertEquals(420, ti.midx().getObjectCount(ctx)); + + RevWalk rw = new RevWalk(ti.db()); + rw.markStart(rw.parseCommit(mainTip)); + for (RevCommit c; (c = rw.next()) != null;) { + int bitmapPos = bi.findPosition(c); + assertTrue(mainBitmap.get(bitmapPos)); + assertFalse(devBitmap.get(bitmapPos)); + } + rw.reset(); + + // dev is an independent chain of commits. None of them + // should be in the bitmap of "main" + rw.markStart(rw.parseCommit(devTip)); + for (RevCommit c; (c = rw.next()) != null;) { + int bitmapPos = bi.findPosition(c); + assertTrue(devBitmap.get(bitmapPos)); + assertFalse(mainBitmap.get(bitmapPos)); + } + } + } + + static TestInput setupOneMidxOverNPacks() throws Exception { + InMemoryRepository db = new InMemoryRepository( + new DfsRepositoryDescription("one_midx_n_packs")); + db.getObjectDatabase().getReaderOptions().setUseMidxBitmaps(true); + + List<CommitObjects> mainObjs = MidxTestUtils.writeCommitChain(db, + "refs/heads/main", 100); + List<CommitObjects> devObjs = MidxTestUtils.writeCommitChain(db, + "refs/heads/dev", 40); + + Map<String, CommitObjects> tips = new HashMap<>(); + tips.put("refs/heads/main", last(mainObjs)); + tips.put("refs/heads/dev", last(devObjs)); + + List<CommitObjects> commitObjects = new ArrayList<>(160); + commitObjects.addAll(mainObjs); + commitObjects.addAll(devObjs); + + DfsPackFileMidx midx1 = writeMultipackIndex(db, + db.getObjectDatabase().getPacks(), null); + return new TestInput("one midx - n packs", db, midx1, commitObjects, + tips, tips.size()); + } + + static TestInput setupOneMidxOverOnePack() throws Exception { + InMemoryRepository db = new InMemoryRepository( + new DfsRepositoryDescription("one_midx_n_packs")); + // Mo midx bitmaps in midx over one pack. No need to set useMidxBitmaps. + enableMidxBitmaps(db); + + List<CommitObjects> mainObjs = MidxTestUtils.writeCommitChain(db, + "refs/heads/main", 100); + List<CommitObjects> devObjs = MidxTestUtils.writeCommitChain(db, + "refs/heads/dev", 40); + runGc(db); + + Map<String, CommitObjects> tips = new HashMap<>(); + tips.put("refs/heads/main", last(mainObjs)); + tips.put("refs/heads/dev", last(devObjs)); + + List<CommitObjects> commitObjects = new ArrayList<>(160); + commitObjects.addAll(mainObjs); + commitObjects.addAll(devObjs); + + DfsPackFileMidx midx1 = writeSinglePackMidx(db); + return new TestInput("one midx - one pack", db, midx1, commitObjects, + tips, 0); + } + + private static void enableMidxBitmaps(DfsRepository repo) { + repo.getConfig().setInt(CONFIG_PACK_SECTION, null, + CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN, 1); + } + + private static void runGc(DfsRepository db) throws IOException { + DfsGarbageCollector garbageCollector = new DfsGarbageCollector(db); + garbageCollector.pack(NullProgressMonitor.INSTANCE); + assertEquals(1, garbageCollector.getNewPacks().size()); + } + + private static CommitObjects last(List<CommitObjects> l) { + return l.get(l.size() - 1); + } +}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacksTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacksTest.java index 706bc91..0f0e113 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacksTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacksTest.java
@@ -12,6 +12,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource.GC; import static org.eclipse.jgit.internal.storage.pack.PackExt.PACK; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION; import static org.eclipse.jgit.lib.Constants.OBJ_BLOB; import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT; import static org.eclipse.jgit.lib.Constants.OBJ_TREE; @@ -50,6 +52,7 @@ import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.ProgressMonitor; +import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevBlob; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; @@ -58,6 +61,8 @@ import org.junit.Before; import org.junit.Test; +import com.googlecode.javaewah.EWAHCompressedBitmap; + public class DfsPackFileMidxNPacksTest { private static final ObjectId NOT_IN_PACK = ObjectId @@ -664,7 +669,6 @@ public void midx_getObjectType_withBase() throws Exception { ObjectId commit = writePackWithCommit(); ObjectId blob = writePackWithRandomBlob(200); writePackWithCommit(); - writePackWithCommit(); writePackWithRandomBlob(300); ObjectId newCommit = writePackWithCommit(); @@ -725,8 +729,6 @@ public void midx_getObjectSize_byId_withBase() throws Exception { writePackWithRandomBlob(300); ObjectId blobTwo = writePackWithRandomBlob(100); - System.out.println( - "pack count: " + db.getObjectDatabase().getPacks().length); DfsPackFile[] packs = db.getObjectDatabase().getPacks(); // Packs are in reverse insertion order @@ -865,7 +867,7 @@ public void midx_fillRepresentation_withBase() throws Exception { assertEquals(midxTip.getPackDescription(), rep.pack.getPackDescription()); assertEquals(midxTip.findOffset(ctx, commitInTip), rep.offset); - assertEquals(150, rep.length); + assertEquals(151, rep.length); // Commit in base midx rep = fillRepresentation(midxTip, commitInBase, OBJ_COMMIT); @@ -884,7 +886,7 @@ public void midx_fillRepresentation_withBase() throws Exception { } @Test - public void midx_getBitmapIndex() throws Exception { + public void midx_getBitmapIndex_gc() throws Exception { RevCommit c1 = writePackWithCommit(); RevCommit c2 = writePackWithCommit(); gcWithBitmaps(); @@ -903,6 +905,32 @@ public void midx_getBitmapIndex() throws Exception { } @Test + public void midx_getBitmapIndex_midx() throws Exception { + RevCommit c1 = writePackWithCommit(); + RevCommit c2 = writePackWithCommit(); + gcWithBitmaps(); + + RevCommit c3 = writePackWithCommit(); + DfsPackFileMidx dfsPackFileMidx = writeMultipackIndexWithBitmaps(); + try (DfsReader ctx = db.getObjectDatabase().newReader()) { + ctx.getOptions().setUseMidxBitmaps(true); + PackBitmapIndex bitmapIndex = dfsPackFileMidx.getBitmapIndex(ctx); + assertNotNull(bitmapIndex); + assertEquals(3, bitmapIndex.getBitmapCount()); + // Both commits have same tree and blob + assertEquals(5, bitmapIndex.getObjectCount()); + + assertNotNull(bitmapIndex.getBitmap(c3)); + assertNotNull(bitmapIndex.getBitmap(c2)); + assertNotNull(bitmapIndex.getBitmap(c1)); + + EWAHCompressedBitmap bitmapC3 = bitmapIndex.getBitmap(c3); + EWAHCompressedBitmap bitmapC2 = bitmapIndex.getBitmap(c2); + assertEquals(1, bitmapC3.andNot(bitmapC2).cardinality()); + } + } + + @Test public void midx_getAllCoveredPacks() throws Exception { writePackWithCommit(); writePackWithRandomBlob(300); @@ -915,7 +943,7 @@ public void midx_getAllCoveredPacks() throws Exception { assertEquals(4, midx.getAllCoveredPacks().size()); List<DfsPackDescription> expected = Arrays.stream(packs) - .map(p -> p.getPackDescription()).toList(); + .map(DfsPackFile::getPackDescription).toList(); List<DfsPackDescription> actual = midx.getAllCoveredPacks().stream() .map(DfsPackFile::getPackDescription).toList(); assertEquals(expected, actual); @@ -1215,6 +1243,19 @@ private DfsPackFileMidx writeMultipackIndex() throws IOException { return MidxTestUtils.writeMultipackIndex(db, packs, null); } + private DfsPackFileMidx writeMultipackIndexWithBitmaps() + throws IOException { + enableMidxBitmaps(db); + DfsPackFile[] packs = db.getObjectDatabase().getPacks(); + return MidxTestUtils.writeMultipackIndex(db, packs, + null); + } + + private static void enableMidxBitmaps(DfsRepository repo) { + repo.getConfig().setInt(CONFIG_PACK_SECTION, null, + CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN, 1); + } + private void gcWithBitmaps() throws IOException { DfsGarbageCollector garbageCollector = new DfsGarbageCollector(db); garbageCollector.pack(NullProgressMonitor.INSTANCE); @@ -1223,7 +1264,12 @@ private void gcWithBitmaps() throws IOException { private RevCommit writePackWithCommit() throws Exception { try (TestRepository<InMemoryRepository> repository = new TestRepository<>( db)) { - return repository.branch("/refs/heads/main").commit() + Ref ref = repository.getRepository().getRefDatabase() + .findRef("refs/heads/main"); + RevWalk rw = repository.getRevWalk(); + RevCommit parent = ref != null ? rw.parseCommit(ref.getObjectId()) + : null; + return repository.branch("refs/heads/main").commit().parent(parent) .add("blob1", "blob1").create(); } }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalkTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalkTest.java new file mode 100644 index 0000000..321ea01 --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalkTest.java
@@ -0,0 +1,155 @@ +/* + * Copyright (C) 2026, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.storage.dfs; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.jgit.junit.TestRepository; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.revwalk.RevCommit; +import org.junit.Before; +import org.junit.Test; + +public class RefAdvancerWalkTest { + private static final String MAIN = "refs/heads/main"; + + private InMemoryRepository db; + + private TestRepository<InMemoryRepository> git; + + private Set<RevCommit> commitsInMidx; + + private Map<String, RevCommit> commitByLetter; + + @Before + public void setUp() throws Exception { + db = new InMemoryRepository( + new DfsRepositoryDescription("ref advance")); + git = new TestRepository<>(db); + setupRepo(); + } + + /** + * <pre> + * tipMergeBeforeMidx -> H + * | + * | + * F G <- tipStraight + * |\ | + * | \| + * tipMergeMidxCommits -> D E + * |\ | + * +--------+ + * | B C <-- tipIn + * | | / | + * | |/ | + * | A | + * | midx| + * +--------+ + * </pre> + */ + private void setupRepo() throws Exception { + RevCommit a = commitToMain(); + RevCommit b = commitToMain(); + RevCommit c = commit(a); + RevCommit d = commitToMain(c); + RevCommit e = commit(c); + /* unused */ commitToMain(); + RevCommit g = commit(e); + RevCommit h = commitToMain(); + + commitsInMidx = new HashSet<>(); + commitsInMidx.add(a); + commitsInMidx.add(b); + commitsInMidx.add(c); + + commitByLetter = Map.of("a", a, "b", b, "c", c, "d", d, "e", e, "g", g, + "h", h); + + } + + @Test + public void singleWant_linearHistory() throws Exception { + runTest("g", Set.of("c")); + } + + @Test + public void singleWant_alreadyInMidx() throws Exception { + runTest("c", Set.of("c")); + } + + @Test + public void singleWant_mergeCommitsInMidx() throws Exception { + runTest("d", Set.of("b", "c")); + } + + @Test + public void singleWant_mergeBeforeMidx() throws Exception { + runTest("h", Set.of("b", "c")); + } + + @Test + public void manyWant_mergeBeforeMidx() throws Exception { + runTest(Set.of("h", "c", "d", "g"), Set.of("b", "c")); + } + + private void runTest(String want, Set<String> expectedTips) + throws IOException { + runTest(Set.of(want), expectedTips); + } + + private void runTest(Set<String> want, Set<String> expectedTips) + throws IOException { + RefAdvancerWalk advancer = new RefAdvancerWalk(db, + commitsInMidx::contains); + List<ObjectId> wants = want.stream().map(commitByLetter::get) + .collect(Collectors.toUnmodifiableList()); + Set<RevCommit> tipsInMidx = advancer.advance(wants); + + Set<RevCommit> expected = expectedTips.stream().map(commitByLetter::get) + .collect(Collectors.toUnmodifiableSet()); + assertEquals(expected.size(), tipsInMidx.size()); + assertTrue(tipsInMidx.containsAll(expected)); + } + + private static int commitCounter = 0; + + private RevCommit commitToMain() throws Exception { + int i = commitCounter++; + return git.branch(MAIN).commit() + .add("xx" + i, git.blob("content #" + i)).create(); + } + + private RevCommit commitToMain(RevCommit... extraParent) throws Exception { + int i = commitCounter++; + TestRepository<InMemoryRepository>.CommitBuilder commit = git + .branch(MAIN).commit(); + for (RevCommit p : extraParent) { + commit.parent(p); + } + + return commit.add("xx" + i, git.blob("content #" + i)).create(); + } + + private RevCommit commit(RevCommit parent) throws Exception { + int i = commitCounter++; + return git.commit().parent(parent) + .add("cc" + i, git.blob("out of main content #" + i)).create(); + } + +}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcBasicPackingTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcBasicPackingTest.java index 434f7e4..101feec 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcBasicPackingTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcBasicPackingTest.java
@@ -21,8 +21,11 @@ import java.util.Collection; import java.util.List; +import org.eclipse.jgit.api.Git; import org.eclipse.jgit.junit.TestRepository.BranchBuilder; import org.eclipse.jgit.lib.ConfigConstants; +import org.eclipse.jgit.lib.GcConfig; +import org.eclipse.jgit.lib.GcConfig.PackRefsMode; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.revwalk.RevCommit; @@ -376,4 +379,106 @@ private PackConfig configureGc(GC myGc, boolean aggressive) { myGc.setPackConfig(pconfig); return pconfig; } + + @Test + public void testPackRefs() throws Exception { + tr.branch("refs/heads/master").commit().add("A", "A").add("B", "B") + .create(); + assertHasLooseRef(repo); + + // by default, refs should be packed + gc.gc().get(); + assertHasNoLooseRef(repo); + + // now create a loose ref again + tr.branch("refs/heads/foo").commit().add("C", "C").create(); + assertHasLooseRef(repo); + // and disable packing of refs + gc.setGcConfig(new GcConfig(PackRefsMode.FALSE)); + gc.gc().get(); + assertHasLooseRef(repo); + } + + @Test + public void testPackRefsWithConfig() throws Exception { + tr.branch("refs/heads/master").commit().add("A", "A").add("B", "B") + .create(); + assertHasLooseRef(repo); + + // disable packing of refs via config + FileBasedConfig config = repo.getConfig(); + config.setEnum(ConfigConstants.CONFIG_GC_SECTION, null, + ConfigConstants.CONFIG_KEY_PACK_REFS, PackRefsMode.FALSE); + config.save(); + reloadGcFromRepoConfig(); + + gc.gc().get(); + assertHasLooseRef(repo); + + // now enable packing of refs via API + gc.setGcConfig(new GcConfig(PackRefsMode.TRUE)); + gc.gc().get(); + assertHasNoLooseRef(repo); + } + + @Test + public void testPackRefsWithNotBareConfig() throws Exception { + // non-bare repo + tr.branch("refs/heads/master").commit().add("A", "A").add("B", "B") + .create(); + assertHasLooseRef(repo); + + // configure packing of refs only for non-bare repositories + FileBasedConfig config = repo.getConfig(); + config.setEnum(ConfigConstants.CONFIG_GC_SECTION, null, + ConfigConstants.CONFIG_KEY_PACK_REFS, PackRefsMode.NOTBARE); + config.save(); + reloadGcFromRepoConfig(); + + gc.gc().get(); + assertHasNoLooseRef(repo); + + // bare repo + String repoUri = repo.getDirectory().toURI().toString(); + File dir = createUniqueTestGitDir(true); + try (FileRepository bareRepo = (FileRepository) Git.cloneRepository() + .setBare(true).setURI(repoUri).setDirectory(dir).call() + .getRepository(); Git git = new Git(bareRepo)) { + git.branchCreate().setName("refs/heads/branch-in-bare-repo") + .setStartPoint("refs/heads/master").call(); + assertHasLooseRef(bareRepo); + + // configure packing of refs only for non-bare repositories + FileBasedConfig bareConfig = bareRepo.getConfig(); + bareConfig.setEnum(ConfigConstants.CONFIG_GC_SECTION, null, + ConfigConstants.CONFIG_KEY_PACK_REFS, PackRefsMode.NOTBARE); + bareConfig.save(); + // create a new GC instance to reread the config + gc = new GC(bareRepo); + + gc.gc().get(); + assertHasLooseRef(bareRepo); + } + } + + private static boolean hasLooseRef(FileRepository repository) + throws IOException { + return repository.getRefDatabase().getRefs().stream() + .filter(r -> !r.isSymbolic()) + .anyMatch(r -> r.getStorage().isLoose()); + } + + private void reloadGcFromRepoConfig() { + gc = new GC(repo); + } + + private static void assertHasLooseRef(FileRepository repository) + throws IOException { + assertTrue("should have loose ref", hasLooseRef(repository)); + } + + private static void assertHasNoLooseRef(FileRepository repository) + throws IOException { + assertFalse("should have no loose ref", hasLooseRef(repository)); + } }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java index baa0182..6552bac 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java
@@ -37,6 +37,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.jgit.api.PackRefsCommand; import org.eclipse.jgit.errors.LockFailedException; import org.eclipse.jgit.events.ListenerHandle; import org.eclipse.jgit.events.RefsChangedEvent; @@ -44,6 +45,7 @@ import org.eclipse.jgit.junit.Repeat; import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Ref.Storage; import org.eclipse.jgit.lib.RefDatabase; @@ -1062,6 +1064,60 @@ public void test_repack() throws Exception { } @Test + public void testPackedRefsHeaderWithSorted() throws Exception { + writeLooseRef("refs/heads/master", A); + writeLooseRef("refs/heads/other", B); + writeLooseRef("refs/tags/v1.0", v1_0); + + PackRefsCommand packRefsCommand = new PackRefsCommand(diskRepo); + packRefsCommand.setAll(true); + packRefsCommand.call(); + + File packedRefsFile = new File(diskRepo.getCommonDirectory(), Constants.PACKED_REFS); + assertTrue("packed-refs should exist", packedRefsFile.exists()); + + String content = read(packedRefsFile); + String firstLine = content.split("\n")[0]; + assertTrue("packed-refs should have header with sorted", + firstLine.contains(" sorted")); + + int masterIndex = content.indexOf(A.name() + " refs/heads/master"); + int otherIndex = content.indexOf(B.name() + " refs/heads/other"); + int tagIndex = content.indexOf(v1_0.name() + " refs/tags/v1.0"); + assertTrue("packed-refs should be sorted", + masterIndex < otherIndex && otherIndex < tagIndex); + } + + @Test + public void testPackedRefsUnsortedGetsSorted() throws Exception { + writePackedRefs("# pack-refs with: peeled \n" + // + B.name() + " refs/heads/other\n" + // + v1_0.name() + " refs/tags/v1.0\n" + // + "^" + v1_0.getObject().name() + "\n" + // + A.name() + " refs/heads/master\n"); + + // extra loose-ref to trigger packing + writeLooseRef("refs/heads/loose", A); + + PackRefsCommand packRefsCommand = new PackRefsCommand(diskRepo); + packRefsCommand.setAll(true); + packRefsCommand.call(); + + File packedRefsFile = new File(diskRepo.getCommonDirectory(), Constants.PACKED_REFS); + String content = read(packedRefsFile); + int looseIndex = content.indexOf(v1_0.name() + " refs/tags/loose"); + int masterIndex = content.indexOf(A.name() + " refs/heads/master"); + int otherIndex = content.indexOf(B.name() + " refs/heads/other"); + int tagIndex = content.indexOf(v1_0.name() + " refs/tags/v1.0"); + assertTrue( + "packed-refs should be sorted", + looseIndex < masterIndex && + masterIndex < otherIndex && + otherIndex < tagIndex + ); + } + + @Test public void testFindRef_EmptyDatabase() throws IOException { Ref r;
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MidxIteratorsTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MidxIteratorsTest.java new file mode 100644 index 0000000..065385f --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MidxIteratorsTest.java
@@ -0,0 +1,416 @@ +/* + * Copyright (C) 2026, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.storage.midx; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.IntStream; + +import org.eclipse.jgit.internal.storage.file.PackIndex; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MidxIterator; +import org.eclipse.jgit.junit.FakeIndexFactory; +import org.eclipse.jgit.lib.ObjectId; +import org.junit.Test; + +public class MidxIteratorsTest { + private final static String OID_PREFIX = "0000000000000000000000000000000000"; + + @Test + public void fromPackIndexIterator_basicIteration() { + PackIndex index1 = indexOf(object("000001", 500), + object("000003", 3000), object("000005", 1500)); + + MidxIterator it = MidxIterators.fromPackIndexIterator("index1", index1); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000003", 0, 3000); + assertNextEntry(it, "000005", 0, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void fromPackIndexIterator_peek() { + PackIndex index1 = indexOf(object("000001", 500), + object("000003", 3000), object("000005", 1500)); + + MidxIterator it = MidxIterators.fromPackIndexIterator("index1", index1); + assertPeekEntry(it, "000001", 0, 500); + assertPeekEntry(it, "000001", 0, 500); + assertNextEntry(it, "000001", 0, 500); + + assertPeekEntry(it, "000003", 0, 3000); + assertPeekEntry(it, "000003", 0, 3000); + assertNextEntry(it, "000003", 0, 3000); + + assertPeekEntry(it, "000005", 0, 1500); + assertPeekEntry(it, "000005", 0, 1500); + assertNextEntry(it, "000005", 0, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void fromPackIndexIterator_reset() { + PackIndex index1 = indexOf(object("000001", 500), + object("000003", 3000), object("000005", 1500)); + + MidxIterator it = MidxIterators.fromPackIndexIterator("index1", index1); + while (it.hasNext()) { + it.next(); + } + it.reset(); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000003", 0, 3000); + + it.reset(); + assertPeekEntry(it, "000001", 0, 500); + } + + @Test + public void fromPackIndexIterator_getPackNames() { + PackIndex index1 = indexOf(object("000001", 500), + object("000003", 1500), object("000005", 3000)); + MidxIterator it = MidxIterators.fromPackIndexIterator("index1", index1); + assertEquals(List.of("index1"), it.getPackNames()); + } + + @Test + public void fromPackIndexIterator_empty() { + MidxIterator it = MidxIterators.fromPackIndexIterator("index1", + indexOf()); + assertFalse(it.hasNext()); + } + + @Test + public void join_basicIteration() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000003", 1, 1500))); + + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000002", 0, 500), + new IndexEntry("000004", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000002", 2, 500); + assertNextEntry(it, "000003", 1, 1500); + assertNextEntry(it, "000004", 3, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void join_basicIteration_packIndexIterators() { + PackIndex idxOne = indexOf(object("000001", 500), + object("000003", 1500), object("000005", 3000)); + + PackIndex idxTwo = indexOf(object("000002", 500), + object("000003", 1500), object("000004", 3000)); + + List<MidxIterator> packIts = List.of( + MidxIterators.fromPackIndexIterator("index1", idxOne), + MidxIterators.fromPackIndexIterator("index2", idxTwo)); + MidxIterator it = MidxIterators.join(packIts); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000002", 1, 500); + assertNextEntry(it, "000003", 0, 1500); + assertNextEntry(it, "000003", 1, 1500); + assertNextEntry(it, "000004", 1, 3000); + assertNextEntry(it, "000005", 0, 3000); + assertFalse(it.hasNext()); + } + + @Test + public void join_duplicates_inPackIdOrder() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 501), + new IndexEntry("000003", 1, 1501))); + + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000003", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + assertNextEntry(it, "000001", 0, 501); + assertNextEntry(it, "000001", 2, 500); + assertNextEntry(it, "000003", 1, 1501); + assertNextEntry(it, "000003", 3, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void join_peek() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000003", 1, 1500))); + + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000002", 0, 500), + new IndexEntry("000004", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + assertPeekEntry(it, "000001", 0, 500); + assertPeekEntry(it, "000001", 0, 500); + assertNextEntry(it, "000001", 0, 500); + + assertPeekEntry(it, "000002", 2, 500); + assertPeekEntry(it, "000002", 2, 500); + assertNextEntry(it, "000002", 2, 500); + + assertPeekEntry(it, "000003", 1, 1500); + assertPeekEntry(it, "000003", 1, 1500); + assertNextEntry(it, "000003", 1, 1500); + + assertPeekEntry(it, "000004", 3, 1500); + assertPeekEntry(it, "000004", 3, 1500); + assertNextEntry(it, "000004", 3, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void join_reset() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000003", 1, 1500))); + + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000002", 0, 500), + new IndexEntry("000004", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + while (it.hasNext()) { + it.next(); + } + + it.reset(); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000002", 2, 500); + + it.reset(); + assertPeekEntry(it, "000001", 0, 500); + } + + @Test + public void join_getPackNames() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000003", 1, 1500))); + + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000002", 0, 500), + new IndexEntry("000004", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + assertEquals(List.of("itOne0", "itOne1", "itTwo0", "itTwo1"), + it.getPackNames()); + } + + @Test + public void join_empty_totallyEmpty() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, List.of()); + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, List.of()); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + assertFalse(it.hasNext()); + } + + @Test + public void join_empty_oneSideEmpty() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, List.of()); + FakeMidxIterator itTwo = FakeMidxIterator.from("itTwo", 2, + List.of(new IndexEntry("000002", 0, 500), + new IndexEntry("000004", 1, 1500))); + + MidxIterator it = MidxIterators.join(List.of(itOne, itTwo)); + // Even when empty, the first iterator occupies the packIds + assertNextEntry(it, "000002", 2, 500); + assertNextEntry(it, "000004", 3, 1500); + assertFalse(it.hasNext()); + } + + @Test + public void dedup_basicIteration() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000001", 1, 600), + new IndexEntry("000003", 0, 1500), + new IndexEntry("000003", 1, 1501))); + MidxIterator dedup = MidxIterators.dedup(itOne); + assertNextEntry(dedup, "000001", 0, 500); + assertNextEntry(dedup, "000003", 0, 1500); + assertFalse(dedup.hasNext()); + } + + @Test + public void dedup_peek() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000001", 1, 600), + new IndexEntry("000003", 0, 1500), + new IndexEntry("000003", 1, 1501))); + + MidxIterator it = MidxIterators.dedup(itOne); + assertPeekEntry(it, "000001", 0, 500); + assertPeekEntry(it, "000001", 0, 500); + assertNextEntry(it, "000001", 0, 500); + + assertPeekEntry(it, "000003", 0, 1500); + assertPeekEntry(it, "000003", 0, 1500); + assertNextEntry(it, "000003", 0, 1500); + + assertFalse(it.hasNext()); + } + + @Test + public void dedup_reset() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000001", 1, 600), + new IndexEntry("000003", 0, 1500), + new IndexEntry("000003", 1, 1501), + new IndexEntry("000005", 0, 200), + new IndexEntry("000005", 1, 201))); + + MidxIterator it = MidxIterators.dedup(itOne); + while (it.hasNext()) { + it.next(); + } + it.reset(); + assertNextEntry(it, "000001", 0, 500); + assertNextEntry(it, "000003", 0, 1500); + + it.reset(); + assertPeekEntry(it, "000001", 0, 500); + } + + @Test + public void dedup_reset_sameElement() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 2, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000001", 1, 600), + new IndexEntry("000001", 2, 1500), + new IndexEntry("000001", 3, 1501), + new IndexEntry("000001", 4, 200), + new IndexEntry("000001", 5, 201))); + + MidxIterator it = MidxIterators.dedup(itOne); + while (it.hasNext()) { + it.next(); + } + it.reset(); + assertNextEntry(it, "000001", 0, 500); + + it.reset(); + assertPeekEntry(it, "000001", 0, 500); + } + + @Test + public void dedup_getPackNames() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 4, + List.of(new IndexEntry("000001", 0, 500), + new IndexEntry("000001", 1, 600), + new IndexEntry("000003", 2, 1500), + new IndexEntry("000003", 3, 1501))); + MidxIterator dedup = MidxIterators.dedup(itOne); + assertEquals(List.of("itOne0", "itOne1", "itOne2", "itOne3"), + dedup.getPackNames()); + } + + @Test + public void dedup_getEmpty() { + FakeMidxIterator itOne = FakeMidxIterator.from("itOne", 4, List.of()); + MidxIterator dedup = MidxIterators.dedup(itOne); + assertFalse(dedup.hasNext()); + } + + private static void assertNextEntry(MidxIterator it, String shortOid, + int packId, int offset) { + assertTrue("expected to have more items", it.hasNext()); + MultiPackIndex.MutableEntry e = it.next(); + assertEquals(OID_PREFIX + shortOid, e.getObjectId().name()); + assertEquals(packId, e.getPackId()); + assertEquals(offset, e.getOffset()); + } + + private static void assertPeekEntry(MidxIterator it, String shortOid, + int packId, int offset) { + assertTrue(it.hasNext()); + MultiPackIndex.MutableEntry e = it.peek(); + assertEquals(OID_PREFIX + shortOid, e.getObjectId().name()); + assertEquals(packId, e.getPackId()); + assertEquals(offset, e.getOffset()); + } + + private static PackIndex indexOf(FakeIndexFactory.IndexObject... objs) { + return FakeIndexFactory.indexOf(Arrays.asList(objs)); + } + + private static FakeIndexFactory.IndexObject object(String name, + long offset) { + return new FakeIndexFactory.IndexObject(OID_PREFIX + name, offset); + } + + private static class FakeMidxIterator implements MidxIterator { + private final List<String> packNames; + + private final List<IndexEntry> entries; + + private int position; + + static FakeMidxIterator from(String packNameBase, int packCount, + List<IndexEntry> entries) { + List<String> packNames = IntStream.range(0, packCount) + .mapToObj(i -> packNameBase + i).toList(); + return new FakeMidxIterator(packNames, entries); + } + + private FakeMidxIterator(List<String> packNames, + List<IndexEntry> entries) { + this.entries = entries; + this.packNames = packNames; + } + + @Override + public MultiPackIndex.MutableEntry peek() { + return entries.get(position).asMutableEntry(); + } + + @Override + public List<String> getPackNames() { + return packNames; + } + + @Override + public boolean hasNext() { + return position < entries.size(); + } + + @Override + public MultiPackIndex.MutableEntry next() { + return entries.get(position++).asMutableEntry(); + } + + @Override + public void reset() { + position = 0; + } + } + + record IndexEntry(String shortOid, int packId, int offset) { + MultiPackIndex.MutableEntry asMutableEntry() { + MultiPackIndex.MutableEntry entry = new MultiPackIndex.MutableEntry(); + entry.oid.fromObjectId(ObjectId.fromString(OID_PREFIX + shortOid)); + entry.packOffset.setValues(packId, offset); + return entry; + } + } +}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MultiPackIndexTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MultiPackIndexTest.java index 3a90e21..a2c86f3 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MultiPackIndexTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/MultiPackIndexTest.java
@@ -11,6 +11,7 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -20,6 +21,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; @@ -81,36 +83,7 @@ public void basic_upstream() throws IOException { @Test public void basicMidx() throws IOException { - PackIndex idxOne = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000001", 500), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000005", 12), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000010", 1500))); - PackIndex idxTwo = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000002", 501), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000003", 13), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000015", 1501))); - PackIndex idxThree = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000004", 502), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000007", 14), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000012", 1502))); - - LinkedHashMap<String, PackIndex> packs = orderedMapOf("p1", idxOne, - "p2", idxTwo, "p3", idxThree); - MultiPackIndexWriter writer = new MultiPackIndexWriter(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - writer.write(NullProgressMonitor.INSTANCE, out, packs); - - MultiPackIndex midx = MultiPackIndexLoader - .read(new ByteArrayInputStream(out.toByteArray())); + MultiPackIndex midx = createMultiPackIndex(); assertEquals(3, midx.getPackNames().length); assertInIndex(midx, 0, "0000000000000000000000000000000000000001", 500); assertInIndex(midx, 0, "0000000000000000000000000000000000000005", 12); @@ -253,8 +226,8 @@ public void jgit_resolve_matchLimit() throws IOException { // Match "32fe829a1c000000000000000000000000000010"); - LinkedHashMap<String, PackIndex> packs = orderedMapOf("p1", idxOne, - "p2", idxTwo); + LinkedHashMap<String, PackIndex> packs = orderedMapOf("r1", idxOne, + "r2", idxTwo); MultiPackIndexWriter writer = new MultiPackIndexWriter(); ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.write(NullProgressMonitor.INSTANCE, out, packs); @@ -357,36 +330,7 @@ public void jgit_resolve_empty() throws IOException { @Test public void jgit_findPosition() throws IOException { - PackIndex idxOne = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000001", 500), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000005", 12), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000010", 1500))); - PackIndex idxTwo = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000002", 501), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000003", 13), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000015", 1501))); - PackIndex idxThree = FakeIndexFactory.indexOf(List.of( - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000004", 502), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000007", 14), - new FakeIndexFactory.IndexObject( - "0000000000000000000000000000000000000012", 1502))); - - LinkedHashMap<String, PackIndex> packs = orderedMapOf("p1", idxOne, - "p2", idxTwo, "p3", idxThree); - MultiPackIndexWriter writer = new MultiPackIndexWriter(); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - writer.write(NullProgressMonitor.INSTANCE, out, packs); - - MultiPackIndex midx = MultiPackIndexLoader - .read(new ByteArrayInputStream(out.toByteArray())); + MultiPackIndex midx = createMultiPackIndex(); assertEquals(3, midx.getPackNames().length); assertEquals(0, midx.findPosition(oid("001"))); assertEquals(oid("001"), midx.getObjectAt(0)); @@ -410,8 +354,7 @@ public void jgit_findPosition() throws IOException { assertNull(midx.find(ObjectId.zeroId())); } - @Test - public void jgit_getObjectCount() throws IOException { + private static MultiPackIndex createMultiPackIndex() throws IOException { PackIndex idxOne = FakeIndexFactory.indexOf(List.of( new FakeIndexFactory.IndexObject( "0000000000000000000000000000000000000001", 500), @@ -440,8 +383,13 @@ public void jgit_getObjectCount() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.write(NullProgressMonitor.INSTANCE, out, packs); - MultiPackIndex midx = MultiPackIndexLoader + return MultiPackIndexLoader .read(new ByteArrayInputStream(out.toByteArray())); + } + + @Test + public void jgit_getObjectCount() throws IOException { + MultiPackIndex midx = createMultiPackIndex(); assertEquals(9, midx.getObjectCount()); } @@ -584,6 +532,101 @@ public void jgit_getObjectAtBitmapPosition() throws IOException { midx.getObjectAtBitmapPosition(8)); } + @Test + public void jgit_iterator() throws IOException { + MultiPackIndex midx = createMultiPackIndex(); + assertEquals(3, midx.getPackNames().length); + Iterator<MultiPackIndex.MutableEntry> iterator = midx.iterator(); + assertNextEntry(iterator, "0000000000000000000000000000000000000001", 0, + 500); + assertNextEntry(iterator, "0000000000000000000000000000000000000002", 1, + 501); + assertNextEntry(iterator, "0000000000000000000000000000000000000003", 1, + 13); + assertNextEntry(iterator, "0000000000000000000000000000000000000004", 2, + 502); + assertNextEntry(iterator, "0000000000000000000000000000000000000005", 0, + 12); + assertNextEntry(iterator, "0000000000000000000000000000000000000007", 2, + 14); + assertNextEntry(iterator, "0000000000000000000000000000000000000010", 0, + 1500); + assertNextEntry(iterator, "0000000000000000000000000000000000000012", 2, + 1502); + assertNextEntry(iterator, "0000000000000000000000000000000000000015", 1, + 1501); + assertFalse(iterator.hasNext()); + } + + @Test + public void jgit_iterator_emtpy() throws IOException { + PackIndex idxOne = FakeIndexFactory.indexOf(List.of()); + PackIndex idxTwo = FakeIndexFactory.indexOf(List.of()); + + LinkedHashMap<String, PackIndex> packs = orderedMapOf("p1", idxOne, + "p2", idxTwo); + MultiPackIndexWriter writer = new MultiPackIndexWriter(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + writer.write(NullProgressMonitor.INSTANCE, out, packs); + MultiPackIndex midx = MultiPackIndexLoader + .read(new ByteArrayInputStream(out.toByteArray())); + + assertFalse(midx.iterator().hasNext()); + } + + @Test + public void jgit_iterator_peek() throws IOException { + PackIndex idxOne = FakeIndexFactory.indexOf(List.of( + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000001", 500), + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000005", 12), + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000010", 1500))); + PackIndex idxTwo = FakeIndexFactory.indexOf(List.of( + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000002", 501), + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000003", 13), + new FakeIndexFactory.IndexObject( + "0000000000000000000000000000000000000015", 1501))); + + LinkedHashMap<String, PackIndex> packs = orderedMapOf("p1", idxOne, + "p2", idxTwo); + MultiPackIndexWriter writer = new MultiPackIndexWriter(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + writer.write(NullProgressMonitor.INSTANCE, out, packs); + + MultiPackIndex midx = MultiPackIndexLoader + .read(new ByteArrayInputStream(out.toByteArray())); + assertEquals(2, midx.getPackNames().length); + MultiPackIndex.MidxIterator iterator = midx.iterator(); + assertNextEntry(iterator, "0000000000000000000000000000000000000001", 0, + 500); + assertNextEntry(iterator, "0000000000000000000000000000000000000002", 1, + 501); + assertTrue(iterator.hasNext()); + assertEntry(iterator.peek(), "0000000000000000000000000000000000000003", + 1, 13); + assertEntry(iterator.peek(), "0000000000000000000000000000000000000003", + 1, 13); + assertNextEntry(iterator, "0000000000000000000000000000000000000003", 1, + 13); + assertNextEntry(iterator, "0000000000000000000000000000000000000005", 0, + 12); + assertNextEntry(iterator, "0000000000000000000000000000000000000010", 0, + 1500); + assertNextEntry(iterator, "0000000000000000000000000000000000000015", 1, + 1501); + assertFalse(iterator.hasNext()); + } + + @Test + public void jgit_iterator_getPackNames() throws IOException { + MultiPackIndex midx = createMultiPackIndex(); + assertEquals(3, midx.iterator().getPackNames().size()); + } + private static PackIndex indexWith(String... oids) { List<FakeIndexFactory.IndexObject> idxObjs = new ArrayList<>( oids.length); @@ -605,6 +648,20 @@ private static void assertInIndex(MultiPackIndex midx, int expectedPackId, assertEquals(expectedOffset, packOffset.getOffset()); } + private static void assertNextEntry( + Iterator<MultiPackIndex.MutableEntry> it, String oid, + int expectedPackId, long expectedOffset) { + assertTrue(it.hasNext()); + assertEntry(it.next(), oid, expectedPackId, expectedOffset); + } + + private static void assertEntry(MultiPackIndex.MutableEntry e, String oid, + int expectedPackId, long expectedOffset) { + assertEquals(oid, e.oid.name()); + assertEquals(expectedPackId, e.packOffset.getPackId()); + assertEquals(expectedOffset, e.packOffset.getOffset()); + } + private static LinkedHashMap<String, PackIndex> orderedMapOf(String s1, PackIndex pi1, String s2, PackIndex pi2) { LinkedHashMap<String, PackIndex> map = new LinkedHashMap<>(2); @@ -615,7 +672,7 @@ private static LinkedHashMap<String, PackIndex> orderedMapOf(String s1, private static LinkedHashMap<String, PackIndex> orderedMapOf(String s1, PackIndex pi1, String s2, PackIndex pi2, String s3, PackIndex pi3) { - LinkedHashMap<String, PackIndex> map = new LinkedHashMap<>(2); + LinkedHashMap<String, PackIndex> map = new LinkedHashMap<>(3); map.put(s1, pi1); map.put(s2, pi2); map.put(s3, pi3);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexMergerTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexMergerTest.java index a43992d..9db897c 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexMergerTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexMergerTest.java
@@ -19,6 +19,7 @@ import java.util.LinkedHashMap; import org.eclipse.jgit.internal.storage.file.PackIndex; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MutableEntry; import org.eclipse.jgit.junit.FakeIndexFactory; import org.eclipse.jgit.junit.FakeIndexFactory.IndexObject; import org.junit.Test; @@ -26,103 +27,6 @@ public class PackIndexMergerTest { @Test - public void rawIterator_noDuplicates() { - PackIndex idxOne = indexOf( - oidOffset("0000000000000000000000000000000000000001", 500), - oidOffset("0000000000000000000000000000000000000005", 12), - oidOffset("0000000000000000000000000000000000000010", 1500)); - PackIndex idxTwo = indexOf( - oidOffset("0000000000000000000000000000000000000002", 501), - oidOffset("0000000000000000000000000000000000000003", 13), - oidOffset("0000000000000000000000000000000000000015", 1501)); - PackIndex idxThree = indexOf( - oidOffset("0000000000000000000000000000000000000004", 502), - oidOffset("0000000000000000000000000000000000000007", 14), - oidOffset("0000000000000000000000000000000000000012", 1502)); - PackIndexMerger merger = new PackIndexMerger( - orderedMapOf("p1", idxOne, "p2", idxTwo, "p3", idxThree)); - assertEquals(9, merger.getUniqueObjectCount()); - assertEquals(3, merger.getPackCount()); - assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.rawIterator(); - assertNextEntry(it, "0000000000000000000000000000000000000001", 0, 500); - assertNextEntry(it, "0000000000000000000000000000000000000002", 1, 501); - assertNextEntry(it, "0000000000000000000000000000000000000003", 1, 13); - assertNextEntry(it, "0000000000000000000000000000000000000004", 2, 502); - assertNextEntry(it, "0000000000000000000000000000000000000005", 0, 12); - assertNextEntry(it, "0000000000000000000000000000000000000007", 2, 14); - assertNextEntry(it, "0000000000000000000000000000000000000010", 0, - 1500); - assertNextEntry(it, "0000000000000000000000000000000000000012", 2, - 1502); - assertNextEntry(it, "0000000000000000000000000000000000000015", 1, - 1501); - assertFalse(it.hasNext()); - } - - @Test - public void rawIterator_noDuplicates_honorPackOrder() { - PackIndex idxOne = indexOf( - oidOffset("0000000000000000000000000000000000000001", 500), - oidOffset("0000000000000000000000000000000000000005", 12), - oidOffset("0000000000000000000000000000000000000010", 1500)); - PackIndex idxTwo = indexOf( - oidOffset("0000000000000000000000000000000000000002", 501), - oidOffset("0000000000000000000000000000000000000003", 13), - oidOffset("0000000000000000000000000000000000000015", 1501)); - PackIndex idxThree = indexOf( - oidOffset("0000000000000000000000000000000000000004", 502), - oidOffset("0000000000000000000000000000000000000007", 14), - oidOffset("0000000000000000000000000000000000000012", 1502)); - PackIndexMerger merger = new PackIndexMerger( - orderedMapOf("p3", idxThree, "p2", idxTwo, "p1", idxOne)); - assertEquals(9, merger.getUniqueObjectCount()); - assertEquals(3, merger.getPackCount()); - assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.rawIterator(); - assertNextEntry(it, "0000000000000000000000000000000000000001", 2, 500); - assertNextEntry(it, "0000000000000000000000000000000000000002", 1, 501); - assertNextEntry(it, "0000000000000000000000000000000000000003", 1, 13); - assertNextEntry(it, "0000000000000000000000000000000000000004", 0, 502); - assertNextEntry(it, "0000000000000000000000000000000000000005", 2, 12); - assertNextEntry(it, "0000000000000000000000000000000000000007", 0, 14); - assertNextEntry(it, "0000000000000000000000000000000000000010", 2, - 1500); - assertNextEntry(it, "0000000000000000000000000000000000000012", 0, - 1502); - assertNextEntry(it, "0000000000000000000000000000000000000015", 1, - 1501); - assertFalse(it.hasNext()); - } - - @Test - public void rawIterator_allDuplicates() { - PackIndex idxOne = indexOf( - oidOffset("0000000000000000000000000000000000000001", 500), - oidOffset("0000000000000000000000000000000000000005", 12), - oidOffset("0000000000000000000000000000000000000010", 1500)); - PackIndexMerger merger = new PackIndexMerger( - orderedMapOf("p1", idxOne, "p2", idxOne, "p3", idxOne)); - assertEquals(3, merger.getUniqueObjectCount()); - assertEquals(3, merger.getPackCount()); - assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.rawIterator(); - assertNextEntry(it, "0000000000000000000000000000000000000001", 0, 500); - assertNextEntry(it, "0000000000000000000000000000000000000001", 1, 500); - assertNextEntry(it, "0000000000000000000000000000000000000001", 2, 500); - assertNextEntry(it, "0000000000000000000000000000000000000005", 0, 12); - assertNextEntry(it, "0000000000000000000000000000000000000005", 1, 12); - assertNextEntry(it, "0000000000000000000000000000000000000005", 2, 12); - assertNextEntry(it, "0000000000000000000000000000000000000010", 0, - 1500); - assertNextEntry(it, "0000000000000000000000000000000000000010", 1, - 1500); - assertNextEntry(it, "0000000000000000000000000000000000000010", 2, - 1500); - assertFalse(it.hasNext()); - } - - @Test public void bySha1Iterator_noDuplicates() { PackIndex idxOne = indexOf( oidOffset("0000000000000000000000000000000000000001", 500), @@ -141,7 +45,7 @@ public void bySha1Iterator_noDuplicates() { assertEquals(9, merger.getUniqueObjectCount()); assertEquals(3, merger.getPackCount()); assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.bySha1Iterator(); + Iterator<MutableEntry> it = merger.bySha1Iterator(); assertNextEntry(it, "0000000000000000000000000000000000000001", 0, 500); assertNextEntry(it, "0000000000000000000000000000000000000002", 1, 501); assertNextEntry(it, "0000000000000000000000000000000000000003", 1, 13); @@ -158,6 +62,42 @@ public void bySha1Iterator_noDuplicates() { } @Test + public void bySha1Iterator_withDuplicates() { + PackIndex idxOne = indexOf( + oidOffset("0000000000000000000000000000000000000001", 500), + oidOffset("0000000000000000000000000000000000000010", 1500)); + PackIndex idxTwo = indexOf( + oidOffset("0000000000000000000000000000000000000002", 501), + oidOffset("0000000000000000000000000000000000000003", 13), + oidOffset("0000000000000000000000000000000000000005", 800), + oidOffset("0000000000000000000000000000000000000015", 1501)); + PackIndex idxThree = indexOf( + oidOffset("0000000000000000000000000000000000000004", 502), + oidOffset("0000000000000000000000000000000000000005", 12), + oidOffset("0000000000000000000000000000000000000007", 14), + oidOffset("0000000000000000000000000000000000000012", 1502)); + PackIndexMerger merger = new PackIndexMerger( + orderedMapOf("p1", idxOne, "p2", idxTwo, "p3", idxThree)); + assertEquals(9, merger.getUniqueObjectCount()); + assertEquals(3, merger.getPackCount()); + assertFalse(merger.needsLargeOffsetsChunk()); + Iterator<MutableEntry> it = merger.bySha1Iterator(); + assertNextEntry(it, "0000000000000000000000000000000000000001", 0, 500); + assertNextEntry(it, "0000000000000000000000000000000000000002", 1, 501); + assertNextEntry(it, "0000000000000000000000000000000000000003", 1, 13); + assertNextEntry(it, "0000000000000000000000000000000000000004", 2, 502); + assertNextEntry(it, "0000000000000000000000000000000000000005", 1, 800); + assertNextEntry(it, "0000000000000000000000000000000000000007", 2, 14); + assertNextEntry(it, "0000000000000000000000000000000000000010", 0, + 1500); + assertNextEntry(it, "0000000000000000000000000000000000000012", 2, + 1502); + assertNextEntry(it, "0000000000000000000000000000000000000015", 1, + 1501); + assertFalse(it.hasNext()); + } + + @Test public void bySha1Iterator_allDuplicates() { PackIndex idxOne = indexOf( oidOffset("0000000000000000000000000000000000000001", 500), @@ -168,7 +108,7 @@ public void bySha1Iterator_allDuplicates() { assertEquals(3, merger.getUniqueObjectCount()); assertEquals(3, merger.getPackCount()); assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.bySha1Iterator(); + Iterator<MutableEntry> it = merger.bySha1Iterator(); assertNextEntry(it, "0000000000000000000000000000000000000001", 0, 500); assertNextEntry(it, "0000000000000000000000000000000000000005", 0, 12); assertNextEntry(it, "0000000000000000000000000000000000000010", 0, @@ -192,7 +132,7 @@ public void bySha1Iterator_differentIndexSizes() { assertEquals(6, merger.getUniqueObjectCount()); assertEquals(3, merger.getPackCount()); assertFalse(merger.needsLargeOffsetsChunk()); - Iterator<PackIndexMerger.MidxMutableEntry> it = merger.bySha1Iterator(); + Iterator<MutableEntry> it = merger.bySha1Iterator(); assertNextEntry(it, "0000000000000000000000000000000000000002", 1, 500); assertNextEntry(it, "0000000000000000000000000000000000000003", 1, 12); assertNextEntry(it, "0000000000000000000000000000000000000004", 2, 500); @@ -315,10 +255,9 @@ public void getObjectsPerPack_emptyIndexes() { } private static void assertNextEntry( - Iterator<PackIndexMerger.MidxMutableEntry> it, String oid, - int packId, long offset) { + Iterator<MutableEntry> it, String oid, int packId, long offset) { assertTrue(it.hasNext()); - PackIndexMerger.MidxMutableEntry e = it.next(); + MutableEntry e = it.next(); assertEquals(oid, e.getObjectId().name()); assertEquals(packId, e.getPackId()); assertEquals(offset, e.getOffset());
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexPeekIteratorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexPeekIteratorTest.java deleted file mode 100644 index 0b3ccac..0000000 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/midx/PackIndexPeekIteratorTest.java +++ /dev/null
@@ -1,71 +0,0 @@ -/* - * Copyright (C) 2025, Google LLC - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Distribution License v. 1.0 which is available at - * https://www.eclipse.org/org/documents/edl-v10.php. - * - * SPDX-License-Identifier: BSD-3-Clause - */ -package org.eclipse.jgit.internal.storage.midx; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.util.Arrays; - -import org.eclipse.jgit.internal.storage.file.PackIndex; -import org.eclipse.jgit.junit.FakeIndexFactory; -import org.junit.Test; - -public class PackIndexPeekIteratorTest { - @Test - public void next() { - PackIndex index1 = indexOf( - object("0000000000000000000000000000000000000001", 500), - object("0000000000000000000000000000000000000003", 1500), - object("0000000000000000000000000000000000000005", 3000)); - PackIndexMerger.PackIndexPeekIterator it = new PackIndexMerger.PackIndexPeekIterator(0, index1); - assertEquals("0000000000000000000000000000000000000001", it.next().name()); - assertEquals("0000000000000000000000000000000000000003", it.next().name()); - assertEquals("0000000000000000000000000000000000000005", it.next().name()); - assertNull(it.next()); - } - - @Test - public void peek_doesNotAdvance() { - PackIndex index1 = indexOf( - object("0000000000000000000000000000000000000001", 500), - object("0000000000000000000000000000000000000003", 1500), - object("0000000000000000000000000000000000000005", 3000)); - PackIndexMerger.PackIndexPeekIterator it = new PackIndexMerger.PackIndexPeekIterator(0, index1); - it.next(); - assertEquals("0000000000000000000000000000000000000001", it.peek().name()); - assertEquals("0000000000000000000000000000000000000001", it.peek().name()); - it.next(); - assertEquals("0000000000000000000000000000000000000003", it.peek().name()); - assertEquals("0000000000000000000000000000000000000003", it.peek().name()); - it.next(); - assertEquals("0000000000000000000000000000000000000005", it.peek().name()); - assertEquals("0000000000000000000000000000000000000005", it.peek().name()); - it.next(); - assertNull(it.peek()); - assertNull(it.peek()); - } - - @Test - public void empty() { - PackIndex index1 = indexOf(); - PackIndexMerger.PackIndexPeekIterator it = new PackIndexMerger.PackIndexPeekIterator(0, index1); - assertNull(it.next()); - assertNull(it.peek()); - } - - private static PackIndex indexOf(FakeIndexFactory.IndexObject... objs) { - return FakeIndexFactory.indexOf(Arrays.asList(objs)); - } - - private static FakeIndexFactory.IndexObject object(String name, long offset) { - return new FakeIndexFactory.IndexObject(name, offset); - } -} \ No newline at end of file
diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index e0f593a..8889d75 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -788,6 +788,7 @@ tagAlreadyExists=tag ''{0}'' already exists tagNameInvalid=tag name {0} is invalid tagOnRepoWithoutHEADCurrentlyNotSupported=Tag on repository without HEAD currently not supported +temporaryBufferIsDestroyed=The TemporaryBuffer was destroyed and can't be used anymore. theFactoryMustNotBeNull=The factory must not be null threadInterruptedWhileRunning="Current thread interrupted while running {0}" timeIsUncertain=Time is uncertain
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/GarbageCollectCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/GarbageCollectCommand.java index f6935e1..a16be79 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/GarbageCollectCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/GarbageCollectCommand.java
@@ -26,6 +26,7 @@ import org.eclipse.jgit.internal.storage.file.GC; import org.eclipse.jgit.internal.storage.file.GC.RepoStatistics; import org.eclipse.jgit.lib.ConfigConstants; +import org.eclipse.jgit.lib.GcConfig; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.StoredConfig; @@ -66,6 +67,8 @@ public class GarbageCollectCommand extends GitCommand<Properties> { private Boolean packKeptObjects; + private GcConfig gcConfig; + /** * Constructor for GarbageCollectCommand. * @@ -75,6 +78,7 @@ public class GarbageCollectCommand extends GitCommand<Properties> { protected GarbageCollectCommand(Repository repo) { super(repo); pconfig = new PackConfig(repo); + gcConfig = repo.getConfig().get(GcConfig.KEY); } /** @@ -200,6 +204,19 @@ public GarbageCollectCommand setPrunePreserved(boolean prunePreserved) { return this; } + /** + * Set the gc configuration + * + * @param gcConfig + * the gc configuration + * @return {@code this} + * @since 7.6 + */ + public GarbageCollectCommand setGcConfig(GcConfig gcConfig) { + this.gcConfig = gcConfig; + return this; + } + @Override public Properties call() throws GitAPIException { checkCallable(); @@ -214,6 +231,7 @@ public Properties call() throws GitAPIException { if (this.packKeptObjects != null) { gc.setPackKeptObjects(packKeptObjects.booleanValue()); } + gc.setGcConfig(gcConfig); try { gc.gc().get(); return toProperties(gc.getStatistics());
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java index 539d00e..1f49629 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -818,6 +818,7 @@ public static JGitText get() { /***/ public String tagAlreadyExists; /***/ public String tagNameInvalid; /***/ public String tagOnRepoWithoutHEADCurrentlyNotSupported; + /***/ public String temporaryBufferIsDestroyed; /***/ public String timeoutMeasureFsTimestampResolution; /***/ public String transactionAborted; /***/ public String theFactoryMustNotBeNull;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriter.java index 8302694..654bc30 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsMidxWriter.java
@@ -15,15 +15,27 @@ import static org.eclipse.jgit.internal.storage.pack.PackExt.MULTI_PACK_INDEX; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.function.Function; import org.eclipse.jgit.annotations.Nullable; +import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder; import org.eclipse.jgit.internal.storage.file.PackIndex; import org.eclipse.jgit.internal.storage.midx.MultiPackIndexWriter; +import org.eclipse.jgit.internal.storage.pack.PackBitmapCalculator; +import org.eclipse.jgit.internal.storage.pack.PackBitmapIndexWriter; +import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.NullProgressMonitor; +import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ProgressMonitor; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.storage.pack.PackConfig; /** * Create a pack with a multipack index, setting the required fields in the @@ -35,6 +47,30 @@ private DfsMidxWriter() { } /** + * Create a pack with the multipack index (without bitmaps). + * + * @param pm + * a progress monitor + * @param objdb + * an object database + * @param packs + * the packs to cover + * @param base + * parent of this midx in the chain (if any). + * + * @return a pack (uncommitted) with the multipack index of the packs passed + * as parameter. + * @throws IOException + * an error opening the packs or writing the stream. + */ + public static DfsPackDescription writeMidx(ProgressMonitor pm, + DfsObjDatabase objdb, List<DfsPackFile> packs, + @Nullable DfsPackDescription base) throws IOException { + return writeMidx(pm, objdb, packs, base, + new PackConfig(objdb.getRepository())); + } + + /** * Create a pack with the multipack index * * @param pm @@ -45,6 +81,8 @@ private DfsMidxWriter() { * the packs to cover * @param base * parent of this midx in the chain (if any). + * @param packConfig + * pack config with the parameters to write bitmaps. * @return a pack (uncommitted) with the multipack index of the packs passed * as parameter. * @throws IOException @@ -52,7 +90,8 @@ private DfsMidxWriter() { */ public static DfsPackDescription writeMidx(ProgressMonitor pm, DfsObjDatabase objdb, List<DfsPackFile> packs, - @Nullable DfsPackDescription base) throws IOException { + @Nullable DfsPackDescription base, PackConfig packConfig) + throws IOException { LinkedHashMap<String, PackIndex> inputs = new LinkedHashMap<>( packs.size()); try (DfsReader ctx = objdb.newReader()) { @@ -83,6 +122,52 @@ public static DfsPackDescription writeMidx(ProgressMonitor pm, } } + // TODO(ifrade): At the moment write bitmaps only in the bottom midx. + // A single-pack midx in the base should be covering only GC. No + // need to write midx bitmaps (we will use GC bitmaps). + if (base == null && midxPackDesc.getCoveredPacks().size() > 1) { + createAndAttachBitmaps(objdb.getRepository(), midxPackDesc, + packConfig); + } + return midxPackDesc; } + + private static void createAndAttachBitmaps(DfsRepository db, + DfsPackDescription desc, PackConfig cfg) throws IOException { + + DfsObjDatabase objdb = db.getObjectDatabase(); + // We need a DfsPackFile to reread the contents + DfsPackFileMidx midxPack = db.getObjectDatabase().createDfsPackFileMidx( + DfsBlockCache.getInstance(), desc, new ArrayList<>()); + + // TODO(ifrade): Verify we duplicate the behaviour about tags of regular + // bitmapping + List<ObjectId> allHeads = db.getRefDatabase() + .getRefsByPrefix(Constants.R_HEADS).stream() + .map(r -> r.getObjectId()).filter(Objects::nonNull).toList(); + if (allHeads.isEmpty()) { + return; + } + + try (DfsReader ctx = objdb.newReader()) { + RefAdvancerWalk adv = new RefAdvancerWalk(db, + c -> midxPack.hasObject(ctx, c)); + Set<RevCommit> inPack = adv.advance(allHeads); + + byte[] checksum = midxPack.getChecksum(ctx); + PackBitmapIndexBuilder writeBitmaps = new PackBitmapIndexBuilder( + midxPack.getLocalObjects(ctx)); + int commitCount = writeBitmaps.getCommits().cardinality(); + + PackBitmapCalculator calculator = new PackBitmapCalculator(cfg); + // This will do ctx.getBitmapIndex() to reuse/copy previous bitmaps + calculator.calculate(ctx, NullProgressMonitor.INSTANCE, commitCount, + inPack, new HashSet<>(), writeBitmaps); + PackBitmapIndexWriter pbiWriter = db.getObjectDatabase() + .getPackBitmapIndexWriter(desc); + pbiWriter.write(writeBitmaps, checksum); + } + } + }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidx.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidx.java index ba4d5f6..0582737 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidx.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidx.java
@@ -20,6 +20,7 @@ import org.eclipse.jgit.errors.StoredObjectRepresentationNotAvailableException; import org.eclipse.jgit.internal.storage.file.PackIndex; import org.eclipse.jgit.internal.storage.file.PackReverseIndex; +import org.eclipse.jgit.internal.storage.pack.ObjectToPack; import org.eclipse.jgit.internal.storage.pack.PackOutputStream; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.AnyObjectId; @@ -156,6 +157,23 @@ public final PackIndex getPackIndex(DfsReader ctx) { return new MidxPackIndex(this, ctx); } + /** + * Return all objects in this midx (not recursively) as ObjectToPack + * instances (oid, offset, type). Ordered by sha1. + * <p> + * ObjectToPack is the preferred format for the bitmap builder. This can + * probably be optimized. + * + * @param ctx + * a reader + * @return list of objects in this midx (NOT in its chain) with offset and + * type + * @throws IOException + * an error reading the midx + */ + abstract List<ObjectToPack> getLocalObjects(DfsReader ctx) + throws IOException; + @Override public abstract PackReverseIndex getReverseIdx(DfsReader ctx) throws IOException;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacks.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacks.java index 9bc3cb1..bed7a53 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacks.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxNPacks.java
@@ -196,6 +196,24 @@ public CommitGraph getCommitGraph(DfsReader ctx) throws IOException { } @Override + public List<ObjectToPack> getLocalObjects(DfsReader ctx) + throws IOException { + MultiPackIndex midx = midx(ctx); + int localObjCount = midx(ctx).getObjectCount(); + List<ObjectToPack> otps = new ArrayList<>(localObjCount); + for (int idxPosition = 0; idxPosition < localObjCount; idxPosition++) { + ObjectId oid = midx.getObjectAt(idxPosition); + PackOffset packOffset = midx.find(oid); + long offset = offsetCalculator.encode(packOffset); + int objectType = getObjectType(ctx, offset); + ObjectToPack otp = new ObjectToPack(oid, objectType); + otp.setOffset(offset); + otps.add(otp); + } + return otps; + } + + @Override public PackReverseIndex getReverseIdx(DfsReader ctx) throws IOException { return new MidxReverseIndex(ctx, this, base == null ? 0 : base.getObjectCount(ctx),
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxSingle.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxSingle.java index 72d6998..71ff884 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxSingle.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFileMidxSingle.java
@@ -23,6 +23,7 @@ import org.eclipse.jgit.errors.PackMismatchException; import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph; import org.eclipse.jgit.internal.storage.file.PackBitmapIndex; +import org.eclipse.jgit.internal.storage.file.PackIndex; import org.eclipse.jgit.internal.storage.file.PackReverseIndex; import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.PackOffset; import org.eclipse.jgit.internal.storage.pack.ObjectToPack; @@ -296,6 +297,23 @@ long getIndexedObjectSize(DfsReader ctx, int idxPosition) { } @Override + public List<ObjectToPack> getLocalObjects(DfsReader ctx) + throws IOException { + PackIndex idx = getPackIndex(ctx); + int localObjCount = (int) idx.getObjectCount(); + List<ObjectToPack> otps = new ArrayList<>(localObjCount); + for (int idxPosition = 0; idxPosition < localObjCount; idxPosition++) { + ObjectId oid = idx.getObjectId(idxPosition); + long offset = idx.getOffset(idxPosition); + int objectType = getObjectType(ctx, offset); + ObjectToPack otp = new ObjectToPack(oid, objectType); + otp.setOffset(offset); + otps.add(otp); + } + return otps; + } + + @Override List<DfsObjectToPack> findAllFromPack(DfsReader ctx, Iterable<ObjectToPack> objects, boolean skipFound) throws IOException { @@ -389,11 +407,6 @@ public long getMaxOffset() { */ private static class LocalPackOffset extends PackOffset { - LocalPackOffset() { - super(); - setValues(0, 0); - } - void setOffset(long offset) { super.setValues(0, offset); }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/MidxPackFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/MidxPackFilter.java index 1183306..670950a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/MidxPackFilter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/MidxPackFilter.java
@@ -82,10 +82,6 @@ public static List<DfsPackDescription> useMidx( List<DfsPackDescription> midxs = packs.stream() .filter(desc -> desc.hasFileExt(PackExt.MULTI_PACK_INDEX)) .sorted(midxComparator).toList(); - for (DfsPackDescription d : midxs) { - System.out.println(String.format(" %s - %d - %d", d.getPackName(), - d.getLastModified(), getTotalCoveredObjects(d))); - } if (midxs.isEmpty()) { return packs; }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalk.java new file mode 100644 index 0000000..d0d8056 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/RefAdvancerWalk.java
@@ -0,0 +1,112 @@ +/* + * Copyright (C) 2026, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.storage.dfs; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.jgit.errors.StopWalkException; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevObject; +import org.eclipse.jgit.revwalk.RevSort; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.revwalk.filter.RevFilter; + +/** + * Walk from some commits and find where to they enter a pack + */ +class RefAdvancerWalk { + + private final DfsRepository db; + + private final InPackPredicate includeP; + + /** + * True when the commit is in the pack + */ + @FunctionalInterface + interface InPackPredicate { + boolean test(RevCommit c) throws IOException; + } + + RefAdvancerWalk(DfsRepository db, InPackPredicate include) { + this.db = db; + this.includeP = include; + } + + private RevWalk createRevWalk() { + RevWalk rw = new RevWalk(db); + rw.sort(RevSort.COMMIT_TIME_DESC); + rw.setRevFilter(new FirstInPack(includeP)); + return rw; + } + + /** + * Advance the tips to their first commit inside the pack + * + * @param allTips + * tips of interesting refs + * @return first commit(s) where the tips enter the pack. A tips may + * translate into 0 commits (it doesn't enter the pack in its + * history), 1 commit (a linear history) or n commits (merges lead + * to multiple histories into the pack). A tip already inside the + * pack is returned as it is. + * @throws IOException + * error browsing history + */ + Set<RevCommit> advance(List<ObjectId> allTips) throws IOException { + Set<RevCommit> tipsInMidx = new HashSet<>(allTips.size()); + try (RevWalk rw = createRevWalk()) { + for (ObjectId tip : allTips) { + RevObject tipObject = rw.parseAny(tip); + if (!(tipObject instanceof RevCommit tipCommit)) { + continue; + } + + rw.markStart(tipCommit); + RevCommit inPack; + while ((inPack = rw.next()) != null) { + tipsInMidx.add(inPack); + } + } + } + return tipsInMidx; + } + + private static class FirstInPack extends RevFilter { + + private final InPackPredicate isInPack; + + FirstInPack(InPackPredicate isInPack) { + this.isInPack = isInPack; + } + + @Override + public boolean include(RevWalk walker, RevCommit cmit) + throws StopWalkException, IOException { + if (!isInPack.test(cmit)) { + return false; + } + + for (RevCommit p : cmit.getParents()) { + walker.markUninteresting(p); + } + return true; + } + + @Override + public RevFilter clone() { + return this; + } + } +}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java index 7c6a304..6a78271 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
@@ -82,6 +82,8 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.CoreConfig; import org.eclipse.jgit.lib.FileMode; +import org.eclipse.jgit.lib.GcConfig; +import org.eclipse.jgit.lib.GcConfig.PackRefsMode; import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectIdSet; @@ -171,6 +173,8 @@ public static void setExecutor(ExecutorService e) { private PackConfig pconfig; + private GcConfig gcConfig; + /** * the refs which existed during the last call to {@link #repack()}. This is * needed during {@link #prune(Set)} where we can optimize by looking at the @@ -207,6 +211,7 @@ public GC(FileRepository repo) { this.repo = repo; this.pconfig = new PackConfig(repo); this.pm = NullProgressMonitor.INSTANCE; + this.gcConfig = repo.getConfig().get(GcConfig.KEY); } /** @@ -282,6 +287,18 @@ private ExecutorService executor() { return (executor != null) ? executor : WorkQueue.getExecutor(); } + /** + * Set the gc configuration. + * + * @param gcConfig + * the gc configuration + * @return this instance + */ + public GC setGcConfig(GcConfig gcConfig) { + this.gcConfig = gcConfig; + return this; + } + private Collection<Pack> doGc() throws IOException, ParseException, GitAPIException { if (automatic && !needGc()) { @@ -292,8 +309,13 @@ private Collection<Pack> doGc() return Collections.emptyList(); } pm.start(6 /* tasks */); - new PackRefsCommand(repo).setProgressMonitor(pm).setAll(true) - .call(); + boolean packRefs = gcConfig.getPackRefs() == PackRefsMode.TRUE + || (gcConfig.getPackRefs() == PackRefsMode.NOTBARE + && !repo.isBare()); + if (packRefs) { + new PackRefsCommand(repo).setProgressMonitor(pm).setAll(true) + .call(); + } // TODO: implement reflog_expire(pm, repo); Collection<Pack> newPacks = repack(); prune(Collections.emptySet()); @@ -747,6 +769,15 @@ private long getPackExpireDate() throws ParseException { } /** + * Get the gc configuration. + * + * @return the gc configuration. + */ + public GcConfig getGcConfig() { + return gcConfig; + } + + /** * Remove all entries from a map which key is the id of an object referenced * by the given ObjectWalk *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java index 9c262e9..9fa3ff3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
@@ -121,6 +121,9 @@ public class RefDirectory extends RefDatabase { /** If in the header, denotes the file has peeled data. */ public static final String PACKED_REFS_PEELED = " peeled"; //$NON-NLS-1$ + /** If in the header, denotes the file has sorted data. */ + public static final String PACKED_REFS_SORTED = " sorted"; //$NON-NLS-1$ + @SuppressWarnings("boxing") private static final List<Integer> RETRY_SLEEP_MS = Collections.unmodifiableList(Arrays.asList(0, 100, 200, 400, 800, 1600));
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MidxIterators.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MidxIterators.java new file mode 100644 index 0000000..d1fa881 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MidxIterators.java
@@ -0,0 +1,290 @@ +/* + * Copyright (C) 2026, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.internal.storage.midx; + +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +import org.eclipse.jgit.internal.storage.file.PackIndex; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MidxIterator; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MutableEntry; +import org.eclipse.jgit.lib.MutableObjectId; + +/** + * Helpers for midx iterators + */ +public final class MidxIterators { + + /** + * Wrap a PackIndex iterator so it looks like a midx iterator with a fixed + * packId + * + * @param packName + * pack name this iterator is going over + * @param idx + * a PackIndex + * @return a midx iterator that returns the objects of the pack index in the + * original iterator order + */ + public static MidxIterator fromPackIndexIterator(String packName, + PackIndex idx) { + return new MidxIteratorOverPackIndex(packName, idx); + } + + /** + * Merge results from multiple midx iterators. + * <p> + * This iterator can return duplicates (in ascending packId order). Wrap + * with {@link #dedup(MidxIterator)} to remove duplicates. + * <p> + * This iterator shifts the pack ids in iterator order. If the first + * iterator covers 3 packs, packIds of the second iterator are increased by + * 3. + * + * @param iterators + * midx iterators to combine + * @return a unique iterator that returns the union of the iterators in sha1 + * order. The packIds of the entries are shi + */ + public static MidxIterator join(List<MidxIterator> iterators) { + return new JoinMidxIterator(iterators); + } + + /** + * Dedup consecutive duplicates from a midx iterator + * + * @param source + * a midx iterator emitting entries in sha1 order. In case of + * duplicates, the first one is returned and others skipped. + * @return iterator without duplicates. + */ + public static MidxIterator dedup(MidxIterator source) { + return new DedupMidxIterator(source); + } + + private MidxIterators() { + } + + /** + * Convert a PackIndex iterator into a MidxIterator + */ + private static class MidxIteratorOverPackIndex implements MidxIterator { + + private final List<String> packNames; + + private final PackIndex idx; + + private Iterator<PackIndex.MutableEntry> idxIt; + + private boolean peeked; + + private final MutableEntry entry = new MutableEntry(); + + MidxIteratorOverPackIndex(String packName, + PackIndex idx) { + this.packNames = List.of(packName); + this.idx = idx; + this.idxIt = idx.iterator(); + } + + @Override + public MutableEntry peek() { + if (peeked) { + return entry; + } + + peeked = true; + readNext(); + return entry; + } + + @Override + public List<String> getPackNames() { + return packNames; + } + + @Override + public boolean hasNext() { + if (peeked) { + return true; + } + return idxIt.hasNext(); + } + + @Override + public MutableEntry next() { + if (peeked) { + peeked = false; + return entry; + } + readNext(); + return entry; + } + + private void readNext() { + PackIndex.MutableEntry idx = idxIt.next(); + idx.copyOidTo(entry.oid); + entry.packOffset.setValues(0, idx.getOffset()); + } + + @Override + public void reset() { + this.idxIt = idx.iterator(); + this.entry.clear(); + peeked = false; + } + } + + private static class JoinMidxIterator implements MidxIterator { + + private final List<String> packNames; + + private final List<MidxIterator> indexIterators; + + private final int[] packCountAgg; + + private final MutableEntry local = new MutableEntry(); + + public JoinMidxIterator(List<MidxIterator> indexIterators) { + this.indexIterators = indexIterators; + packCountAgg = new int[indexIterators.size()]; + for (int i = 1; i < indexIterators.size(); i++) { + packCountAgg[i] = indexIterators.get(i - 1).getPackNames() + .size() + packCountAgg[i - 1]; + } + packNames = indexIterators.stream().map(MidxIterator::getPackNames) + .flatMap(List::stream).toList(); + } + + @Override + public MutableEntry peek() { + int p = best(); + MidxIterator it = indexIterators.get(p); + return shiftPackId(it.peek(), packCountAgg[p]); + } + + @Override + public List<String> getPackNames() { + return packNames; + } + + @Override + public boolean hasNext() { + return indexIterators.stream().anyMatch(Iterator::hasNext); + } + + @Override + public MutableEntry next() { + int p = best(); + MidxIterator it = indexIterators.get(p); + return shiftPackId(it.next(), packCountAgg[p]); + } + + private MutableEntry shiftPackId(MutableEntry entry, int shift) { + local.fill(entry, shift); + return local; + } + + private int best() { + int winnerPos = -1; + MidxIterator winner = null; + for (int index = 0; index < indexIterators.size(); index++) { + MidxIterator current = indexIterators.get(index); + if (!current.hasNext()) { + continue; + } + if (winner == null + || current.peek().compareTo(winner.peek()) < 0) { + winner = current; + winnerPos = index; + } + } + + if (winner == null) { + throw new NoSuchElementException(); + } + + return winnerPos; + } + + @Override + public void reset() { + indexIterators.stream().forEach(MidxIterator::reset); + local.clear(); + } + } + + private static class DedupMidxIterator implements MidxIterator { + private final MidxIterator src; + + private final MutableObjectId lastOid = new MutableObjectId(); + + private MutableEntry next; + + private final MutableEntry copy = new MutableEntry(); + + /** + * Iterator over sorted by sha1 entries that removes duplicates choosing + * the first one found. + * + * @param src + * iterator in sha1 order + */ + DedupMidxIterator(MidxIterator src) { + this.src = src; + readNext(); + } + + @Override + public MutableEntry peek() { + return next; + } + + @Override + public List<String> getPackNames() { + return src.getPackNames(); + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public MutableEntry next() { + copy.fill(next, 0); + readNext(); + return copy; + } + + private void readNext() { + while (true) { + if (!src.hasNext()) { + next = null; + return; + } + + next = src.next(); + if (!lastOid.equals(next.oid)) { + lastOid.fromObjectId(next.oid); + return; + } + } + } + + @Override + public void reset() { + lastOid.clear(); + src.reset(); + readNext(); + } + } +}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndex.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndex.java index 31fea79..e31c061 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndex.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndex.java
@@ -10,16 +10,19 @@ package org.eclipse.jgit.internal.storage.midx; +import java.util.Iterator; +import java.util.List; import java.util.Set; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.lib.ObjectId; /** * An index over multiple packs */ -public interface MultiPackIndex { +public interface MultiPackIndex extends Iterable<MultiPackIndex.MutableEntry> { /** * Obtain the array of packfiles in the MultiPackIndex. @@ -133,13 +136,46 @@ public interface MultiPackIndex { long getMemorySize(); /** + * Return an iterator over the <em>local</em> objects in this midx. + * <p> + * In chained midxs, this iterator does not include the base midx. + * + * @return iterator in sha1 order of the objects in this midx + */ + @Override + MidxIterator iterator(); + + /** + * An peekable iterator for the midx + */ + interface MidxIterator extends Iterator<MutableEntry> { + /** + * Like next() but without advancing the iterator. + * + * @return next() element in the iterator without advancing + */ + MutableEntry peek(); + + /** + * Pack names in the order of new packIds emitted by the iterator + * + * @return pack names + */ + List<String> getPackNames(); + + /** + * Restart the iteration from the beginning + */ + void reset(); + } + + /** * (packId, offset) coordinates of an object * <p> * Mutable object to avoid creating many instances while looking for objects * in the pack. Use #copy() to get a new instance with the data. */ class PackOffset implements Comparable<PackOffset> { - private int packId; private long offset; @@ -159,6 +195,9 @@ public static PackOffset create(int packId, long offset) { return new PackOffset().setValues(packId, offset); } + public PackOffset() { + } + public PackOffset setValues(int packId, long offset) { this.packId = packId; this.offset = offset; @@ -187,5 +226,71 @@ public int compareTo(PackOffset packOffset) { return Long.compare(this.offset, packOffset.offset); } + + @Override + public String toString() { + return String.format("PackOffset(packId=%d|offset=%d)", packId, + offset); + + } + } + + /** + * Entry from the midx with object id, pack id, offset (in pack) + * <p> + * Mutable so the iterator can reuse the instance for performance. + */ + class MutableEntry implements Comparable<MutableEntry> { + protected final MutableObjectId oid = new MutableObjectId(); + + protected final PackOffset packOffset = new PackOffset(); + + @Override + public int compareTo(MutableEntry mutableEntry) { + int cmp = oid.compareTo(mutableEntry.oid); + if (cmp != 0) { + return cmp; + } + + return packOffset.getPackId() - mutableEntry.packOffset.getPackId(); + } + + /** + * Copy data from other into this instance, adding the shift to the + * packId + * + * @param other + * another entry + * @param shift + * amount to add to the packid + * @return this instance + */ + public MutableEntry fill(MutableEntry other, int shift) { + oid.fromObjectId(other.oid); + packOffset.setValues(other.getPackId() + shift, other.getOffset()); + return this; + } + + public MutableObjectId getObjectId() { + return oid; + } + + public int getPackId() { + return packOffset.getPackId(); + } + + public long getOffset() { + return packOffset.getOffset(); + } + + public void clear() { + oid.clear(); + packOffset.setValues(0, 0); + } + + @Override + public String toString() { + return String.format("%s,%s", oid.name(), packOffset); + } } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexV1.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexV1.java index 08e4bfc..cfa5c33 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexV1.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexV1.java
@@ -12,6 +12,7 @@ import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.List; import java.util.Set; import org.eclipse.jgit.annotations.NonNull; @@ -20,6 +21,7 @@ import org.eclipse.jgit.internal.storage.midx.MultiPackIndexLoader.MultiPackIndexFormatException; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.util.NB; @@ -120,6 +122,7 @@ public long getMemorySize() { + offsets.getMemorySize() + checksum.length; } + @Override public String toString() { return "MultiPackIndexV1 {idx=" + idx + ", packfileNames=" //$NON-NLS-1$ //$NON-NLS-2$ @@ -128,6 +131,11 @@ public String toString() { + offsets + '}'; } + @Override + public MidxIterator iterator() { + return new LocalMidxIterator(this); + } + private static int byteArrayLengh(byte[] array) { return array == null ? 0 : array.length; } @@ -333,6 +341,62 @@ long getMemorySize() { int getObjectCount() { return fanoutTable[FANOUT - 1]; } + + void readOidAt(int position, MutableObjectId output) { + output.fromRaw(oidLookup, idOffset(position)); + } + } + + /** + * Iterates over a single midx + */ + private static class LocalMidxIterator implements MidxIterator { + + private final MultiPackIndexV1 midx; + + private int position; + + private final MutableEntry entry; + + /** + * Iterator over a single idx (ignoring the bse) + * + * @param midx + * the midx to iterate + */ + LocalMidxIterator(MultiPackIndexV1 midx) { + this.midx = midx; + this.entry = new MutableEntry(); + } + + @Override + public boolean hasNext() { + return position < midx.idx.getObjectCount(); + } + + @Override + public MutableEntry next() { + MutableEntry current = peek(); + position++; + return current; + } + + @Override + public MutableEntry peek() { + midx.idx.readOidAt(position, entry.oid); + midx.offsets.getObjectOffset(position, entry.packOffset); + return entry; + } + + @Override + public List<String> getPackNames() { + return Arrays.asList(midx.getPackNames()); + } + + @Override + public void reset() { + position = 0; + } } private static class ReverseIndex {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexWriter.java index 4d2e580..67163e2 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/MultiPackIndexWriter.java
@@ -37,7 +37,7 @@ import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.storage.file.PackIndex; import org.eclipse.jgit.internal.storage.io.CancellableDigestOutputStream; -import org.eclipse.jgit.internal.storage.midx.PackIndexMerger.MidxMutableEntry; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MutableEntry; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.util.NB; @@ -223,9 +223,9 @@ private void writeChunkLookup(CancellableDigestOutputStream out, private void writeFanoutTable(WriteContext ctx) throws IOException { byte[] tmp = new byte[4]; int[] fanout = new int[256]; - Iterator<MidxMutableEntry> iterator = ctx.data.bySha1Iterator(); + Iterator<MutableEntry> iterator = ctx.data.bySha1Iterator(); while (iterator.hasNext()) { - MidxMutableEntry e = iterator.next(); + MutableEntry e = iterator.next(); fanout[e.getObjectId().getFirstByte() & 0xff]++; } for (int i = 1; i < fanout.length; i++) { @@ -250,9 +250,9 @@ private void writeFanoutTable(WriteContext ctx) throws IOException { private void writeOidLookUp(WriteContext ctx) throws IOException { byte[] tmp = new byte[OBJECT_ID_LENGTH]; - Iterator<MidxMutableEntry> iterator = ctx.data.bySha1Iterator(); + Iterator<MutableEntry> iterator = ctx.data.bySha1Iterator(); while (iterator.hasNext()) { - MidxMutableEntry e = iterator.next(); + MutableEntry e = iterator.next(); e.getObjectId().copyRawTo(tmp, 0); ctx.out.write(tmp, 0, OBJECT_ID_LENGTH); } @@ -272,9 +272,9 @@ private void writeOidLookUp(WriteContext ctx) throws IOException { */ private void writeObjectOffsets(WriteContext ctx) throws IOException { byte[] entry = new byte[8]; - Iterator<MidxMutableEntry> iterator = ctx.data.bySha1Iterator(); + Iterator<MutableEntry> iterator = ctx.data.bySha1Iterator(); while (iterator.hasNext()) { - MidxMutableEntry e = iterator.next(); + MutableEntry e = iterator.next(); NB.encodeInt32(entry, 0, e.getPackId()); if (!ctx.data.needsLargeOffsetsChunk() || fitsIn31bits(e.getOffset())) { @@ -305,10 +305,10 @@ private void writeRidx(WriteContext ctx) throws IOException { // memory. We could also iterate reverse indexes looking up // their position in the midx (and discarding if the pack doesn't // match). - Iterator<MidxMutableEntry> iterator = ctx.data.bySha1Iterator(); + Iterator<MutableEntry> iterator = ctx.data.bySha1Iterator(); int midxPosition = 0; while (iterator.hasNext()) { - MidxMutableEntry e = iterator.next(); + MutableEntry e = iterator.next(); OffsetPosition op = new OffsetPosition(e.getOffset(), midxPosition); midxPosition++; packOffsets.computeIfAbsent(e.getPackId(), k -> new ArrayList<>())
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/PackIndexMerger.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/PackIndexMerger.java index 4a296ee..a6651a5 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/PackIndexMerger.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/midx/PackIndexMerger.java
@@ -9,14 +9,12 @@ */ package org.eclipse.jgit.internal.storage.midx; -import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.NoSuchElementException; import org.eclipse.jgit.internal.storage.file.PackIndex; -import org.eclipse.jgit.lib.AnyObjectId; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MidxIterator; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndex.MutableEntry; import org.eclipse.jgit.lib.MutableObjectId; /** @@ -38,53 +36,7 @@ class PackIndexMerger { private static final long LIMIT_32_BITS = (1L << 32) - 1; - /** - * Object returned by the iterator. - * <p> - * The iterator returns (on each next()) the same instance with different - * values, to avoid allocating many short-lived objects. Callers should not - * keep a reference to that returned value. - */ - static class MidxMutableEntry { - // The object id - private final MutableObjectId oid = new MutableObjectId(); - - // Position of the pack in the ordered list of pack in this merger - private int packId; - - // Offset in its pack - private long offset; - - public AnyObjectId getObjectId() { - return oid; - } - - public int getPackId() { - return packId; - } - - public long getOffset() { - return offset; - } - - /** - * Copy values from another mutable entry - * - * @param packId - * packId - * @param other - * another mutable entry - */ - private void fill(int packId, PackIndex.MutableEntry other) { - other.copyOidTo(oid); - this.packId = packId; - this.offset = other.getOffset(); - } - } - - private final List<String> packNames; - - private final List<PackIndex> indexes; + private final Map<String, PackIndex> packs; private final boolean needsLargeOffsetsChunk; @@ -103,34 +55,30 @@ private void fill(int packId, PackIndex.MutableEntry other) { * map of pack names to indexes, ordered. */ PackIndexMerger(Map<String, PackIndex> packs) { - this.packNames = packs.keySet().stream().toList(); - this.indexes = packs.values().stream().toList(); + this.packs = packs; - objectsPerPack = new int[packNames.size()]; + objectsPerPack = new int[packs.size()]; // Iterate for duplicates int objectCount = 0; boolean hasLargeOffsets = false; int over31bits = 0; MutableObjectId lastSeen = new MutableObjectId(); - MultiIndexIterator it = new MultiIndexIterator(indexes); + MidxIterator it = bySha1Iterator(); while (it.hasNext()) { - MidxMutableEntry entry = it.next(); - if (lastSeen.equals(entry.oid)) { - continue; - } + MutableEntry entry = it.next(); // If there is at least one offset value larger than 2^32-1, then // the large offset chunk must exist, and offsets larger than // 2^31-1 must be stored in it instead - if (entry.offset > LIMIT_32_BITS) { + if (entry.getOffset() > LIMIT_32_BITS) { hasLargeOffsets = true; } - if (entry.offset > LIMIT_31_BITS) { + if (entry.getOffset() > LIMIT_31_BITS) { over31bits++; } lastSeen.fromObjectId(entry.oid); objectCount++; - objectsPerPack[entry.packId]++; + objectsPerPack[entry.getPackId()]++; } uniqueObjectCount = objectCount; offsetsOver31BitsCount = over31bits; @@ -187,7 +135,7 @@ int getOffsetsOver31BitsCount() { * @return List of pack names, in the order used by the merge. */ List<String> getPackNames() { - return packNames; + return packs.keySet().stream().toList(); } /** @@ -196,7 +144,7 @@ List<String> getPackNames() { * @return count of packs merged */ int getPackCount() { - return packNames.size(); + return packs.size(); } /** @@ -207,149 +155,11 @@ int getPackCount() { * * @return an iterator in sha1 order without duplicates. */ - Iterator<MidxMutableEntry> bySha1Iterator() { - return new DedupMultiIndexIterator(new MultiIndexIterator(indexes), - getUniqueObjectCount()); - } - - /** - * For testing. Iterate all entries, not skipping duplicates (stable order) - * - * @return an iterator of all objects in sha1 order, including duplicates. - */ - Iterator<MidxMutableEntry> rawIterator() { - return new MultiIndexIterator(indexes); - } - - /** - * Iterator over n-indexes in ObjectId order. - * <p> - * It returns duplicates if the same object id is in different indexes. Wrap - * it with {@link DedupMultiIndexIterator (Iterator, int)} to avoid - * duplicates. - */ - private static final class MultiIndexIterator - implements Iterator<MidxMutableEntry> { - - private final List<PackIndexPeekIterator> indexIterators; - - private final MidxMutableEntry mutableEntry = new MidxMutableEntry(); - - MultiIndexIterator(List<PackIndex> indexes) { - this.indexIterators = new ArrayList<>(indexes.size()); - for (int i = 0; i < indexes.size(); i++) { - PackIndexPeekIterator it = new PackIndexPeekIterator(i, - indexes.get(i)); - // Position in the first element - if (it.next() != null) { - indexIterators.add(it); - } - } - } - - @Override - public boolean hasNext() { - return !indexIterators.isEmpty(); - } - - @Override - public MidxMutableEntry next() { - PackIndexPeekIterator winner = null; - for (int index = 0; index < indexIterators.size(); index++) { - PackIndexPeekIterator current = indexIterators.get(index); - if (winner == null - || current.peek().compareBySha1To(winner.peek()) < 0) { - winner = current; - } - } - - if (winner == null) { - throw new NoSuchElementException(); - } - - mutableEntry.fill(winner.getPackId(), winner.peek()); - if (winner.next() == null) { - indexIterators.remove(winner); - } - return mutableEntry; - } - } - - private static class DedupMultiIndexIterator - implements Iterator<MidxMutableEntry> { - private final MultiIndexIterator src; - - private int remaining; - - private final MutableObjectId lastOid = new MutableObjectId(); - - DedupMultiIndexIterator(MultiIndexIterator src, int totalCount) { - this.src = src; - this.remaining = totalCount; - } - - @Override - public boolean hasNext() { - return remaining > 0; - } - - @Override - public MidxMutableEntry next() { - MidxMutableEntry next = src.next(); - while (next != null && lastOid.equals(next.oid)) { - next = src.next(); - } - - if (next == null) { - throw new NoSuchElementException(); - } - - lastOid.fromObjectId(next.oid); - remaining--; - return next; - } - } - - /** - * Convenience around the PackIndex iterator to read the current value - * multiple times without consuming it. - * <p> - * This is used to merge indexes in the multipack index, where we need to - * compare the current value between indexes multiple times to find the - * next. - * <p> - * We could also implement this keeping the position (int) and - * MutableEntry#getObjectId, but that would create an ObjectId per entry. - * This implementation reuses the MutableEntry and avoid instantiations. - */ - // Visible for testing - static class PackIndexPeekIterator { - private final Iterator<PackIndex.MutableEntry> it; - - private final int packId; - - PackIndex.MutableEntry current; - - PackIndexPeekIterator(int packId, PackIndex index) { - it = index.iterator(); - this.packId = packId; - } - - PackIndex.MutableEntry next() { - if (it.hasNext()) { - current = it.next(); - } else { - current = null; - } - return current; - } - - PackIndex.MutableEntry peek() { - return current; - } - - int getPackId() { - return packId; - } + MidxIterator bySha1Iterator() { + List<MidxIterator> list = packs.entrySet().stream() + .map(e -> MidxIterators.fromPackIndexIterator(e.getKey(), + e.getValue())) + .toList(); + return MidxIterators.dedup(MidxIterators.join(list)); } }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java index 56b801e..73c7006 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
@@ -1122,4 +1122,11 @@ public final class ConfigConstants { * @since 7.5 */ public static final String CONFIG_KEY_MULTIPACKINDEX = "multiPackIndex"; + + /** + * The "packRefs" key + * + * @since 7.6 + */ + public static final String CONFIG_KEY_PACK_REFS = "packRefs"; }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GcConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GcConfig.java new file mode 100644 index 0000000..7239bd7 --- /dev/null +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GcConfig.java
@@ -0,0 +1,73 @@ +/* + * Copyright (C) 2026, Matthias Sohn <matthias.sohn@sap.com> + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +package org.eclipse.jgit.lib; + +import org.eclipse.jgit.lib.Config.SectionParser; + +/** + * GC configuration settings. + * + * @since 7.6 + */ +public class GcConfig { + /** Key for {@link Config#get(SectionParser)}. */ + public static final Config.SectionParser<GcConfig> KEY = GcConfig::new; + + /** + * Whether to pack refs during gc. + */ + public enum PackRefsMode { + /** + * Pack no refs. + */ + FALSE, + /** + * Pack all refs except symbolic refs. + */ + TRUE, + /** + * Pack all refs except symbolic refs within all non-bare repositories. + */ + NOTBARE + } + + private final PackRefsMode packRefs; + + /** + * Create a new gc configuration from the passed configuration. + * + * @param rc + * git configuration + */ + public GcConfig(Config rc) { + this.packRefs = rc.getEnum(ConfigConstants.CONFIG_GC_SECTION, null, + ConfigConstants.CONFIG_KEY_PACK_REFS, PackRefsMode.TRUE); + } + + /** + * Create a new gc configuration with the given settings. + * + * @param packRefs + * whether to pack refs during gc + */ + public GcConfig(PackRefsMode packRefs) { + this.packRefs = packRefs; + } + + /** + * Get the pack refs mode configuring which refs to pack during gc. + * + * @return the pack refs mode configuring which refs to pack during gc. + */ + public PackRefsMode getPackRefs() { + return packRefs; + } + +}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefWriter.java index 41917f8..58aed82 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RefWriter.java
@@ -139,6 +139,7 @@ public void writePackedRefs() throws IOException { if (peeled) { w.write(RefDirectory.PACKED_REFS_HEADER); w.write(RefDirectory.PACKED_REFS_PEELED); + w.write(RefDirectory.PACKED_REFS_SORTED); w.write('\n'); }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java index ba7573a..8e604ba 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java
@@ -623,7 +623,7 @@ private Set<RevCommit> getCommitsMergedInto(RevCommit needle, Collection<RevComm markStart(c); boolean commitFound = false; RevCommit next; - while ((next = next()) != null) { + while ((next = next()) != null && !monitor.isCancelled()) { if (next.getGeneration() < cutoff) { markUninteresting(next); uninteresting.add(next);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java index fb893a6..0f45162 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java
@@ -52,6 +52,8 @@ public abstract class TemporaryBuffer extends OutputStream { /** If {@link #inCoreLimit} has been reached, remainder goes here. */ private OutputStream overflow; + private boolean destroyed; + /** * Create a new empty temporary buffer. * @@ -85,6 +87,7 @@ protected TemporaryBuffer(int estimatedSize, int limit) { /** {@inheritDoc} */ @Override public void write(int b) throws IOException { + checkDestroyed(); if (overflow != null) { overflow.write(b); return; @@ -106,6 +109,7 @@ public void write(int b) throws IOException { /** {@inheritDoc} */ @Override public void write(byte[] b, int off, int len) throws IOException { + checkDestroyed(); if (overflow == null) { while (len > 0) { Block s = last(); @@ -152,6 +156,7 @@ protected void doFlush() throws IOException { * writing to a local temporary file. */ public void copy(InputStream in) throws IOException { + checkDestroyed(); if (blocks != null) { for (;;) { Block s = last(); @@ -183,6 +188,7 @@ public void copy(InputStream in) throws IOException { * @return total length of the buffer, in bytes. */ public long length() { + checkDestroyedUnchecked(); return inCoreLength(); } @@ -201,6 +207,7 @@ private long inCoreLength() { * an error occurred reading from a local temporary file */ public byte[] toByteArray() throws IOException { + checkDestroyed(); final long len = length(); if (Integer.MAX_VALUE < len) throw new OutOfMemoryError(JGitText.get().lengthExceedsMaximumArraySize); @@ -245,6 +252,7 @@ public String toString(int limit) { * @since 4.2 */ public byte[] toByteArray(int limit) throws IOException { + checkDestroyed(); final long len = Math.min(length(), limit); if (Integer.MAX_VALUE < len) throw new OutOfMemoryError( @@ -281,6 +289,7 @@ public String toString(int limit) { */ public void writeTo(OutputStream os, ProgressMonitor pm) throws IOException { + checkDestroyed(); if (pm == null) pm = NullProgressMonitor.INSTANCE; for (Block b : blocks) { @@ -301,6 +310,7 @@ public void writeTo(OutputStream os, ProgressMonitor pm) * an error occurred opening the temporary file. */ public InputStream openInputStream() throws IOException { + checkDestroyed(); return new BlockInputStream(); } @@ -315,6 +325,7 @@ public InputStream openInputStream() throws IOException { * @since 4.11 */ public InputStream openInputStreamWithAutoDestroy() throws IOException { + checkDestroyed(); return new BlockInputStream() { @Override public void close() throws IOException { @@ -328,13 +339,15 @@ public void close() throws IOException { * Reset this buffer for reuse, purging all buffered content. */ public void reset() { - if (overflow != null) { - destroy(); + if (destroyed) { + return; } - if (blocks != null) + closeOverflow(); + if (blocks != null) { blocks.clear(); - else + } else { blocks = new ArrayList<>(initialBlocks); + } blocks.add(new Block(Math.min(inCoreLimit, Block.SZ))); } @@ -372,24 +385,24 @@ private void switchToOverflow() throws IOException { overflow.write(last.buffer, 0, last.count); } - /** {@inheritDoc} */ @Override public void close() throws IOException { - if (overflow != null) { - try { - overflow.close(); - } finally { - overflow = null; - } + if (destroyed) { + return; } + closeOverflow(); } /** * Clear this buffer so it has no data, and cannot be used again. */ public void destroy() { + destroyed = true; blocks = null; + closeOverflow(); + } + private void closeOverflow() { if (overflow != null) { try { overflow.close(); @@ -401,6 +414,19 @@ public void destroy() { } } + private void checkDestroyed() throws IOException { + if (destroyed) { + throw new IOException(JGitText.get().temporaryBufferIsDestroyed); + } + } + + private void checkDestroyedUnchecked() { + if (destroyed) { + throw new UncheckedIOException( + new IOException(JGitText.get().temporaryBufferIsDestroyed)); + } + } + /** * A fully buffered output stream using local disk storage for large data. * <p> @@ -462,6 +488,7 @@ protected OutputStream overflow() throws IOException { @Override public long length() { + super.checkDestroyedUnchecked(); if (onDiskFile == null) { return super.length(); }
diff --git a/pom.xml b/pom.xml index d8a0b3e..50055da 100644 --- a/pom.xml +++ b/pom.xml
@@ -120,7 +120,7 @@ <jgit-last-release-version>7.5.0.202512021534-r</jgit-last-release-version> <ant-version>1.10.15</ant-version> - <apache-sshd-version>2.16.0</apache-sshd-version> + <apache-sshd-version>2.17.1</apache-sshd-version> <jsch-version>0.1.55</jsch-version> <jzlib-version>1.1.3</jzlib-version> <javaewah-version>1.2.3</javaewah-version> @@ -357,7 +357,7 @@ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> - <version>4.0.1</version> + <version>3.5.10</version> </plugin> <plugin> <groupId>org.eclipse.dash</groupId>