sentry-cli 2.40.0__tar.gz → 2.41.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/Cargo.lock +15 -15
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/Cargo.toml +2 -2
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/PKG-INFO +2 -2
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/sentry_cli.egg-info/PKG-INFO +2 -2
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/sentry_cli.egg-info/SOURCES.txt +2 -1
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/compression.rs +7 -19
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/mod.rs +2 -3
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/bundle_jvm.rs +2 -1
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/bundle_sources.rs +1 -1
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/files/upload.rs +2 -1
- sentry_cli-2.41.0/src/utils/dif_upload/error.rs +66 -0
- sentry_cli-2.40.0/src/utils/dif_upload.rs → sentry_cli-2.41.0/src/utils/dif_upload/mod.rs +39 -49
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/file_search.rs +1 -1
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/file_upload.rs +6 -4
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/sourcemaps/inject.rs +1 -1
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/sourcemaps.rs +25 -27
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/LICENSE +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/MANIFEST.in +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/README.md +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/build.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/pyproject.toml +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/sentry_cli.egg-info/dependency_links.txt +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/sentry_cli.egg-info/top_level.txt +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/setup.cfg +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/setup.py +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/connection_manager.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/artifact.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/dif.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/file_state.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/hash_algorithm.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/upload/capability.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/upload/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/chunking/upload/options.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/deploy.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/data_types/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/encoding.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/envelopes_api.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/errors/api_error.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/errors/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/errors/sentry_error.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/api/pagination.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/bashsupport.sh +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/bash_hook.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/check.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/find.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/print_sources.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/debug_files/upload.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/deploys/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/deploys/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/deploys/new.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/derive_parser.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/events/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/events/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/files/delete.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/files/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/files/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/info.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/issues/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/issues/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/issues/mute.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/issues/resolve.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/issues/unresolve.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/login.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/monitors/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/monitors/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/monitors/run.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/organizations/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/organizations/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/projects/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/projects/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/react_native/appcenter.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/react_native/gradle.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/react_native/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/react_native/xcode.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/archive.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/delete.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/finalize.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/info.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/new.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/propose_version.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/restore.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/releases/set_commits.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/repos/list.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/repos/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_envelope.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_event.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/common_args.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/distribution.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/gauge.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/increment.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/send_metric/set.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/sourcemaps/explain.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/sourcemaps/inject.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/sourcemaps/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/sourcemaps/resolve.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/sourcemaps/upload.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/uninstall.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/update.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/upload_dif.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/upload_dsym.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/commands/upload_proguard.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/config.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/constants.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/main.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/android.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/appcenter.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/args.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/auth_token_impl.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/error.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/org_auth_token.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/redacting.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/test.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/auth_token/user_auth_token.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/chunks/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/chunks/options.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/chunks/types.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/chunks/upload.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/cordova.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/dif.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/event.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/formatting.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/fs.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/http.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/logging.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/metrics.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/progress.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/proguard/mapping.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/proguard/mod.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/proguard/upload.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/releases.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/retry.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_default_twenty.snap +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_ignore_missing.snap +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_set_base.snap +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_set_previous_commit.snap +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/snapshots/sentry_cli__utils__vcs__get_commits_from_git.snap +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/system.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/ui.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/update.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/value_parsers.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/vcs.rs +0 -0
- {sentry_cli-2.40.0 → sentry_cli-2.41.0}/src/utils/xcode.rs +0 -0
|
@@ -1635,9 +1635,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
|
|
1635
1635
|
|
|
1636
1636
|
[[package]]
|
|
1637
1637
|
name = "memmap2"
|
|
1638
|
-
version = "0.9.
|
|
1638
|
+
version = "0.9.5"
|
|
1639
1639
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1640
|
-
checksum = "
|
|
1640
|
+
checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
|
|
1641
1641
|
dependencies = [
|
|
1642
1642
|
"libc",
|
|
1643
1643
|
]
|
|
@@ -2561,7 +2561,7 @@ dependencies = [
|
|
|
2561
2561
|
|
|
2562
2562
|
[[package]]
|
|
2563
2563
|
name = "sentry-cli"
|
|
2564
|
-
version = "2.
|
|
2564
|
+
version = "2.41.0"
|
|
2565
2565
|
dependencies = [
|
|
2566
2566
|
"anyhow",
|
|
2567
2567
|
"anylog",
|
|
@@ -2900,9 +2900,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|
|
2900
2900
|
|
|
2901
2901
|
[[package]]
|
|
2902
2902
|
name = "symbolic"
|
|
2903
|
-
version = "12.
|
|
2903
|
+
version = "12.13.3"
|
|
2904
2904
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2905
|
-
checksum = "
|
|
2905
|
+
checksum = "691b8bd52ccf372a4cce381e62663530e0b96fb5f10e83477a8ec7d5cf421979"
|
|
2906
2906
|
dependencies = [
|
|
2907
2907
|
"symbolic-common",
|
|
2908
2908
|
"symbolic-debuginfo",
|
|
@@ -2912,9 +2912,9 @@ dependencies = [
|
|
|
2912
2912
|
|
|
2913
2913
|
[[package]]
|
|
2914
2914
|
name = "symbolic-common"
|
|
2915
|
-
version = "12.
|
|
2915
|
+
version = "12.13.3"
|
|
2916
2916
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2917
|
-
checksum = "
|
|
2917
|
+
checksum = "13a4dfe4bbeef59c1f32fc7524ae7c95b9e1de5e79a43ce1604e181081d71b0c"
|
|
2918
2918
|
dependencies = [
|
|
2919
2919
|
"debugid",
|
|
2920
2920
|
"memmap2",
|
|
@@ -2925,9 +2925,9 @@ dependencies = [
|
|
|
2925
2925
|
|
|
2926
2926
|
[[package]]
|
|
2927
2927
|
name = "symbolic-debuginfo"
|
|
2928
|
-
version = "12.
|
|
2928
|
+
version = "12.13.3"
|
|
2929
2929
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2930
|
-
checksum = "
|
|
2930
|
+
checksum = "474423ce25f811471ec4bd826511510df8a8895f6babd98f64524eda4a3978f4"
|
|
2931
2931
|
dependencies = [
|
|
2932
2932
|
"debugid",
|
|
2933
2933
|
"elementtree",
|
|
@@ -2957,9 +2957,9 @@ dependencies = [
|
|
|
2957
2957
|
|
|
2958
2958
|
[[package]]
|
|
2959
2959
|
name = "symbolic-il2cpp"
|
|
2960
|
-
version = "12.
|
|
2960
|
+
version = "12.13.3"
|
|
2961
2961
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2962
|
-
checksum = "
|
|
2962
|
+
checksum = "c69a83048f5c49290be14a65c49eae124e51c175bfb81c75b520827e8bfc7526"
|
|
2963
2963
|
dependencies = [
|
|
2964
2964
|
"indexmap",
|
|
2965
2965
|
"serde_json",
|
|
@@ -2969,9 +2969,9 @@ dependencies = [
|
|
|
2969
2969
|
|
|
2970
2970
|
[[package]]
|
|
2971
2971
|
name = "symbolic-ppdb"
|
|
2972
|
-
version = "12.
|
|
2972
|
+
version = "12.13.3"
|
|
2973
2973
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2974
|
-
checksum = "
|
|
2974
|
+
checksum = "b4af715d3f52faa38f3acb92c33b4de6546c45565d9a5214338e22e040d6141e"
|
|
2975
2975
|
dependencies = [
|
|
2976
2976
|
"flate2",
|
|
2977
2977
|
"indexmap",
|
|
@@ -2985,9 +2985,9 @@ dependencies = [
|
|
|
2985
2985
|
|
|
2986
2986
|
[[package]]
|
|
2987
2987
|
name = "symbolic-symcache"
|
|
2988
|
-
version = "12.
|
|
2988
|
+
version = "12.13.3"
|
|
2989
2989
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2990
|
-
checksum = "
|
|
2990
|
+
checksum = "68bf7bed4c5afea4766625b420a523a071a5142c61c0c7706a098a7b54823345"
|
|
2991
2991
|
dependencies = [
|
|
2992
2992
|
"indexmap",
|
|
2993
2993
|
"symbolic-common",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
authors = ["Armin Ronacher <armin.ronacher@active-4.com>"]
|
|
3
3
|
build = "build.rs"
|
|
4
4
|
name = "sentry-cli"
|
|
5
|
-
version = "2.
|
|
5
|
+
version = "2.41.0"
|
|
6
6
|
edition = "2021"
|
|
7
7
|
rust-version = "1.80"
|
|
8
8
|
|
|
@@ -66,7 +66,7 @@ serde = { version = "1.0.152", features = ["derive"] }
|
|
|
66
66
|
serde_json = "1.0.93"
|
|
67
67
|
sha1_smol = { version = "1.0.0", features = ["serde"] }
|
|
68
68
|
sourcemap = { version = "9.1.2", features = ["ram_bundle"] }
|
|
69
|
-
symbolic = { version = "12.
|
|
69
|
+
symbolic = { version = "12.13.3", features = ["debuginfo-serde", "il2cpp"] }
|
|
70
70
|
thiserror = "1.0.38"
|
|
71
71
|
url = "2.3.1"
|
|
72
72
|
username = "0.2.0"
|
|
@@ -106,7 +106,6 @@ src/utils/appcenter.rs
|
|
|
106
106
|
src/utils/args.rs
|
|
107
107
|
src/utils/cordova.rs
|
|
108
108
|
src/utils/dif.rs
|
|
109
|
-
src/utils/dif_upload.rs
|
|
110
109
|
src/utils/event.rs
|
|
111
110
|
src/utils/file_search.rs
|
|
112
111
|
src/utils/file_upload.rs
|
|
@@ -137,6 +136,8 @@ src/utils/chunks/mod.rs
|
|
|
137
136
|
src/utils/chunks/options.rs
|
|
138
137
|
src/utils/chunks/types.rs
|
|
139
138
|
src/utils/chunks/upload.rs
|
|
139
|
+
src/utils/dif_upload/error.rs
|
|
140
|
+
src/utils/dif_upload/mod.rs
|
|
140
141
|
src/utils/proguard/mapping.rs
|
|
141
142
|
src/utils/proguard/mod.rs
|
|
142
143
|
src/utils/proguard/upload.rs
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
use std::fmt;
|
|
2
2
|
|
|
3
|
-
use serde::
|
|
3
|
+
use serde::Deserialize;
|
|
4
4
|
|
|
5
|
-
#[derive(Debug, Clone, Copy, Ord, PartialOrd, Eq, PartialEq, Default)]
|
|
5
|
+
#[derive(Debug, Clone, Copy, Ord, PartialOrd, Eq, PartialEq, Default, Deserialize)]
|
|
6
|
+
#[serde(rename_all = "lowercase")]
|
|
6
7
|
pub enum ChunkCompression {
|
|
7
|
-
/// No compression should be applied
|
|
8
|
-
#[default]
|
|
9
|
-
Uncompressed = 0,
|
|
10
8
|
/// GZIP compression (including header)
|
|
11
9
|
Gzip = 10,
|
|
12
10
|
/// Brotli compression
|
|
13
11
|
Brotli = 20,
|
|
12
|
+
/// No compression should be applied
|
|
13
|
+
#[default]
|
|
14
|
+
#[serde(other)]
|
|
15
|
+
Uncompressed = 0,
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
impl ChunkCompression {
|
|
@@ -32,17 +34,3 @@ impl fmt::Display for ChunkCompression {
|
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
|
-
|
|
36
|
-
impl<'de> Deserialize<'de> for ChunkCompression {
|
|
37
|
-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
38
|
-
where
|
|
39
|
-
D: Deserializer<'de>,
|
|
40
|
-
{
|
|
41
|
-
Ok(match String::deserialize(deserializer)?.as_str() {
|
|
42
|
-
"gzip" => ChunkCompression::Gzip,
|
|
43
|
-
"brotli" => ChunkCompression::Brotli,
|
|
44
|
-
// We do not know this compression, so we assume no compression
|
|
45
|
-
_ => ChunkCompression::Uncompressed,
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -379,11 +379,10 @@ impl Api {
|
|
|
379
379
|
// Curl stores a raw pointer to the stringified checksum internally. We first
|
|
380
380
|
// transform all checksums to string and keep them in scope until the request
|
|
381
381
|
// has completed. The original iterator is not needed anymore after this.
|
|
382
|
-
let stringified_chunks
|
|
382
|
+
let stringified_chunks = chunks
|
|
383
383
|
.into_iter()
|
|
384
384
|
.map(T::as_ref)
|
|
385
|
-
.map(|&(checksum, data)| (checksum.to_string(), data))
|
|
386
|
-
.collect();
|
|
385
|
+
.map(|&(checksum, data)| (checksum.to_string(), data));
|
|
387
386
|
|
|
388
387
|
let mut form = curl::easy::Form::new();
|
|
389
388
|
for (ref checksum, data) in stringified_chunks {
|
|
@@ -12,6 +12,7 @@ use std::collections::BTreeMap;
|
|
|
12
12
|
use std::fs;
|
|
13
13
|
use std::path::PathBuf;
|
|
14
14
|
use std::str::FromStr;
|
|
15
|
+
use std::sync::Arc;
|
|
15
16
|
use symbolic::debuginfo::sourcebundle::SourceFileType;
|
|
16
17
|
|
|
17
18
|
pub fn make_command(command: Command) -> Command {
|
|
@@ -97,7 +98,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
97
98
|
SourceFile {
|
|
98
99
|
url,
|
|
99
100
|
path: source.path.clone(),
|
|
100
|
-
contents: source.contents.clone(),
|
|
101
|
+
contents: Arc::new(source.contents.clone()),
|
|
101
102
|
ty: SourceFileType::Source,
|
|
102
103
|
headers: BTreeMap::new(),
|
|
103
104
|
messages: vec![],
|
|
@@ -3,6 +3,7 @@ use std::ffi::OsStr;
|
|
|
3
3
|
use std::fs;
|
|
4
4
|
use std::io::Read;
|
|
5
5
|
use std::path::Path;
|
|
6
|
+
use std::sync::Arc;
|
|
6
7
|
use std::time::Duration;
|
|
7
8
|
|
|
8
9
|
use anyhow::{bail, format_err, Result};
|
|
@@ -205,7 +206,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
205
206
|
SourceFile {
|
|
206
207
|
url,
|
|
207
208
|
path: source.path.clone(),
|
|
208
|
-
contents: source.contents.clone(),
|
|
209
|
+
contents: Arc::new(source.contents.clone()),
|
|
209
210
|
ty: SourceFileType::Source,
|
|
210
211
|
headers: headers.clone(),
|
|
211
212
|
messages: vec![],
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//! Error types for the dif_upload module.
|
|
2
|
+
|
|
3
|
+
use anyhow::Result;
|
|
4
|
+
use indicatif::HumanBytes;
|
|
5
|
+
use thiserror::Error;
|
|
6
|
+
|
|
7
|
+
/// Represents an error that makes a DIF invalid.
|
|
8
|
+
#[derive(Debug, Error)]
|
|
9
|
+
pub enum ValidationError {
|
|
10
|
+
#[error("Invalid format")]
|
|
11
|
+
InvalidFormat,
|
|
12
|
+
#[error("Invalid features")]
|
|
13
|
+
InvalidFeatures,
|
|
14
|
+
#[error("Invalid debug ID")]
|
|
15
|
+
InvalidDebugId,
|
|
16
|
+
#[error(
|
|
17
|
+
"Debug file's size ({}) exceeds the maximum allowed size ({})",
|
|
18
|
+
HumanBytes(*size as u64),
|
|
19
|
+
HumanBytes(*max_size)
|
|
20
|
+
)]
|
|
21
|
+
TooLarge { size: usize, max_size: u64 },
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Handles a DIF validation error by logging it to console
|
|
25
|
+
/// at the appropriate log level. Or, if the error should stop
|
|
26
|
+
/// the upload, it will return an error, that can be propagated
|
|
27
|
+
/// to the caller.
|
|
28
|
+
pub fn handle(dif_name: &str, error: &ValidationError) -> Result<()> {
|
|
29
|
+
let message = format!("{}: {}", dif_name, error);
|
|
30
|
+
match error {
|
|
31
|
+
ValidationError::InvalidFormat
|
|
32
|
+
| ValidationError::InvalidFeatures
|
|
33
|
+
| ValidationError::InvalidDebugId => log::debug!("Skipping {message}"),
|
|
34
|
+
ValidationError::TooLarge { .. } => {
|
|
35
|
+
anyhow::bail!("Upload failed due to error in debug file {message}")
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
Ok(())
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#[cfg(test)]
|
|
43
|
+
mod tests {
|
|
44
|
+
use super::*;
|
|
45
|
+
|
|
46
|
+
use rstest::rstest;
|
|
47
|
+
|
|
48
|
+
#[rstest]
|
|
49
|
+
#[case(ValidationError::InvalidFormat)]
|
|
50
|
+
#[case(ValidationError::InvalidFeatures)]
|
|
51
|
+
#[case(ValidationError::InvalidDebugId)]
|
|
52
|
+
fn test_handle_should_not_error(#[case] error: ValidationError) {
|
|
53
|
+
let result = handle("test", &error);
|
|
54
|
+
assert!(result.is_ok());
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#[test]
|
|
58
|
+
fn test_handle_should_error() {
|
|
59
|
+
let error = ValidationError::TooLarge {
|
|
60
|
+
size: 1000,
|
|
61
|
+
max_size: 100,
|
|
62
|
+
};
|
|
63
|
+
let result = handle("test", &error);
|
|
64
|
+
assert!(result.is_err());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
//! Searches, processes and uploads debug information files (DIFs). See
|
|
2
2
|
//! `DifUpload` for more information.
|
|
3
3
|
|
|
4
|
+
mod error;
|
|
5
|
+
|
|
4
6
|
use std::borrow::Cow;
|
|
5
7
|
use std::collections::{BTreeMap, BTreeSet};
|
|
6
8
|
use std::convert::TryInto;
|
|
@@ -18,7 +20,6 @@ use std::time::Duration;
|
|
|
18
20
|
|
|
19
21
|
use anyhow::{bail, format_err, Error, Result};
|
|
20
22
|
use console::style;
|
|
21
|
-
use indicatif::HumanBytes;
|
|
22
23
|
use log::{debug, info, warn};
|
|
23
24
|
use sha1_smol::Digest;
|
|
24
25
|
use symbolic::common::{Arch, AsSelf, ByteView, DebugId, SelfCell, Uuid};
|
|
@@ -32,6 +33,7 @@ use which::which;
|
|
|
32
33
|
use zip::result::ZipError;
|
|
33
34
|
use zip::{write::FileOptions, ZipArchive, ZipWriter};
|
|
34
35
|
|
|
36
|
+
use self::error::ValidationError;
|
|
35
37
|
use crate::api::{Api, ChunkServerOptions, ChunkUploadCapability};
|
|
36
38
|
use crate::config::Config;
|
|
37
39
|
use crate::constants::{DEFAULT_MAX_DIF_SIZE, DEFAULT_MAX_WAIT};
|
|
@@ -589,10 +591,7 @@ fn find_uuid_plists(
|
|
|
589
591
|
// └─ DWARF
|
|
590
592
|
// └─ App
|
|
591
593
|
let plist_name = format!("{:X}.plist", uuid.as_hyphenated());
|
|
592
|
-
let plist =
|
|
593
|
-
Some(plist) => plist,
|
|
594
|
-
None => return None,
|
|
595
|
-
};
|
|
594
|
+
let plist = source.get_relative(format!("../{}", &plist_name))?;
|
|
596
595
|
|
|
597
596
|
let mut plists = BTreeMap::new();
|
|
598
597
|
plists.insert(plist_name, plist);
|
|
@@ -656,14 +655,14 @@ fn search_difs(options: &DifUpload) -> Result<Vec<DifMatch<'static>>> {
|
|
|
656
655
|
|
|
657
656
|
if Archive::peek(&buffer) != FileFormat::Unknown {
|
|
658
657
|
let mut difs =
|
|
659
|
-
collect_object_dif(source, name, buffer, options, &mut age_overrides)
|
|
658
|
+
collect_object_dif(source, name, buffer, options, &mut age_overrides)?;
|
|
660
659
|
collected.append(difs.as_mut());
|
|
661
660
|
} else if BcSymbolMap::test(&buffer) {
|
|
662
|
-
if let Some(dif) = collect_auxdif(name, buffer, options, AuxDifKind::BcSymbolMap) {
|
|
661
|
+
if let Some(dif) = collect_auxdif(name, buffer, options, AuxDifKind::BcSymbolMap)? {
|
|
663
662
|
collected.push(dif);
|
|
664
663
|
}
|
|
665
664
|
} else if buffer.starts_with(b"<?xml") {
|
|
666
|
-
if let Some(dif) = collect_auxdif(name, buffer, options, AuxDifKind::UuidMap) {
|
|
665
|
+
if let Some(dif) = collect_auxdif(name, buffer, options, AuxDifKind::UuidMap)? {
|
|
667
666
|
collected.push(dif);
|
|
668
667
|
}
|
|
669
668
|
};
|
|
@@ -729,7 +728,7 @@ fn collect_auxdif<'a>(
|
|
|
729
728
|
buffer: ByteView<'static>,
|
|
730
729
|
options: &DifUpload,
|
|
731
730
|
kind: AuxDifKind,
|
|
732
|
-
) -> Option<DifMatch<'a
|
|
731
|
+
) -> Result<Option<DifMatch<'a>>> {
|
|
733
732
|
let file_stem = Path::new(&name)
|
|
734
733
|
.file_stem()
|
|
735
734
|
.map(|stem| stem.to_string_lossy())
|
|
@@ -746,7 +745,7 @@ fn collect_auxdif<'a>(
|
|
|
746
745
|
name = name
|
|
747
746
|
);
|
|
748
747
|
}
|
|
749
|
-
return None;
|
|
748
|
+
return Ok(None);
|
|
750
749
|
}
|
|
751
750
|
};
|
|
752
751
|
let dif_result = match kind {
|
|
@@ -762,16 +761,17 @@ fn collect_auxdif<'a>(
|
|
|
762
761
|
name = name,
|
|
763
762
|
err = err
|
|
764
763
|
);
|
|
765
|
-
return None;
|
|
764
|
+
return Ok(None);
|
|
766
765
|
}
|
|
767
766
|
};
|
|
768
767
|
|
|
769
768
|
// Skip this file if we don't want to process it.
|
|
770
|
-
if
|
|
771
|
-
|
|
769
|
+
if let Err(e) = options.validate_dif(&dif) {
|
|
770
|
+
error::handle(&name, &e)?;
|
|
771
|
+
return Ok(None);
|
|
772
772
|
}
|
|
773
773
|
|
|
774
|
-
Some(dif)
|
|
774
|
+
Ok(Some(dif))
|
|
775
775
|
}
|
|
776
776
|
|
|
777
777
|
/// Processes and [`DifSource`] which is expected to be an object file.
|
|
@@ -781,7 +781,7 @@ fn collect_object_dif<'a>(
|
|
|
781
781
|
buffer: ByteView<'static>,
|
|
782
782
|
options: &DifUpload,
|
|
783
783
|
age_overrides: &mut BTreeMap<Uuid, u32>,
|
|
784
|
-
) -> Vec<DifMatch<'a
|
|
784
|
+
) -> Result<Vec<DifMatch<'a>>> {
|
|
785
785
|
let mut collected = Vec::with_capacity(2);
|
|
786
786
|
|
|
787
787
|
// Try to parse a potential object file. If this is not possible,
|
|
@@ -796,7 +796,7 @@ fn collect_object_dif<'a>(
|
|
|
796
796
|
format == FileFormat::Pe && options.valid_format(DifFormat::Object(FileFormat::Pdb));
|
|
797
797
|
|
|
798
798
|
if !should_override_age && !options.valid_format(DifFormat::Object(format)) {
|
|
799
|
-
return collected;
|
|
799
|
+
return Ok(collected);
|
|
800
800
|
}
|
|
801
801
|
|
|
802
802
|
debug!("trying to parse dif {}", name);
|
|
@@ -804,7 +804,7 @@ fn collect_object_dif<'a>(
|
|
|
804
804
|
Ok(archive) => archive,
|
|
805
805
|
Err(e) => {
|
|
806
806
|
warn!("Skipping invalid debug file {}: {}", name, e);
|
|
807
|
-
return collected;
|
|
807
|
+
return Ok(collected);
|
|
808
808
|
}
|
|
809
809
|
};
|
|
810
810
|
|
|
@@ -836,7 +836,9 @@ fn collect_object_dif<'a>(
|
|
|
836
836
|
// If this is a PE file with an embedded Portable PDB, we extract and process the PPDB separately.
|
|
837
837
|
if let Object::Pe(pe) = &object {
|
|
838
838
|
if let Ok(Some(ppdb_dif)) = extract_embedded_ppdb(pe, name.as_str()) {
|
|
839
|
-
if options.validate_dif(&ppdb_dif) {
|
|
839
|
+
if let Err(e) = options.validate_dif(&ppdb_dif) {
|
|
840
|
+
error::handle(&ppdb_dif.name, &e)?;
|
|
841
|
+
} else {
|
|
840
842
|
collected.push(ppdb_dif);
|
|
841
843
|
}
|
|
842
844
|
}
|
|
@@ -878,14 +880,15 @@ fn collect_object_dif<'a>(
|
|
|
878
880
|
};
|
|
879
881
|
|
|
880
882
|
// Skip this file if we don't want to process it.
|
|
881
|
-
if
|
|
883
|
+
if let Err(e) = options.validate_dif(&dif) {
|
|
884
|
+
error::handle(&name, &e)?;
|
|
882
885
|
continue;
|
|
883
886
|
}
|
|
884
887
|
|
|
885
888
|
collected.push(dif);
|
|
886
889
|
}
|
|
887
890
|
|
|
888
|
-
collected
|
|
891
|
+
Ok(collected)
|
|
889
892
|
}
|
|
890
893
|
|
|
891
894
|
/// Resolves BCSymbolMaps and replaces hidden symbols in a `DifMatch` using
|
|
@@ -1691,7 +1694,7 @@ impl<'a> DifUpload<'a> {
|
|
|
1691
1694
|
|
|
1692
1695
|
/// Determines if this file extension matches the search criteria.
|
|
1693
1696
|
fn valid_extension(&self, ext: Option<&OsStr>) -> bool {
|
|
1694
|
-
self.extensions.is_empty() || ext.
|
|
1697
|
+
self.extensions.is_empty() || ext.is_some_and(|e| self.extensions.contains(e))
|
|
1695
1698
|
}
|
|
1696
1699
|
|
|
1697
1700
|
/// Determines if this [`DifFormat`] matches the search criteria.
|
|
@@ -1723,21 +1726,13 @@ impl<'a> DifUpload<'a> {
|
|
|
1723
1726
|
}
|
|
1724
1727
|
|
|
1725
1728
|
/// Checks if a file is too large and logs skip message if so.
|
|
1726
|
-
fn valid_size(&self,
|
|
1729
|
+
fn valid_size(&self, size: usize) -> bool {
|
|
1727
1730
|
let file_size: Result<u64, _> = size.try_into();
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
if too_large {
|
|
1733
|
-
warn!(
|
|
1734
|
-
"Skipping debug file since it exceeds {}: {} ({})",
|
|
1735
|
-
HumanBytes(self.max_file_size),
|
|
1736
|
-
name,
|
|
1737
|
-
HumanBytes(file_size.unwrap_or(u64::MAX)),
|
|
1738
|
-
);
|
|
1731
|
+
|
|
1732
|
+
match file_size {
|
|
1733
|
+
Ok(file_size) => file_size <= self.max_file_size,
|
|
1734
|
+
Err(_) => false, // Definitely too big
|
|
1739
1735
|
}
|
|
1740
|
-
!too_large
|
|
1741
1736
|
}
|
|
1742
1737
|
|
|
1743
1738
|
/// Validates DIF on whether it should be processed.
|
|
@@ -1745,33 +1740,28 @@ impl<'a> DifUpload<'a> {
|
|
|
1745
1740
|
/// This takes all the filters configured in the [`DifUpload`] into account and returns
|
|
1746
1741
|
/// whether a file should be skipped or not. It also takes care of logging such a skip
|
|
1747
1742
|
/// if required.
|
|
1748
|
-
fn validate_dif(&self, dif: &DifMatch) ->
|
|
1749
|
-
// Skip if we didn't want this kind of DIF.
|
|
1743
|
+
fn validate_dif(&self, dif: &DifMatch) -> Result<(), ValidationError> {
|
|
1750
1744
|
if !self.valid_format(dif.format()) {
|
|
1751
|
-
|
|
1752
|
-
return false;
|
|
1745
|
+
return Err(ValidationError::InvalidFormat);
|
|
1753
1746
|
}
|
|
1754
1747
|
|
|
1755
|
-
// Skip if this DIF does not have features we want.
|
|
1756
1748
|
if !self.valid_features(dif) {
|
|
1757
|
-
|
|
1758
|
-
return false;
|
|
1749
|
+
return Err(ValidationError::InvalidFeatures);
|
|
1759
1750
|
}
|
|
1760
1751
|
|
|
1761
|
-
// Skip if this DIF has no DebugId or we are only looking for certain IDs.
|
|
1762
1752
|
let id = dif.debug_id.unwrap_or_default();
|
|
1763
1753
|
if id.is_nil() || !self.valid_id(id) {
|
|
1764
|
-
|
|
1765
|
-
return false;
|
|
1754
|
+
return Err(ValidationError::InvalidDebugId);
|
|
1766
1755
|
}
|
|
1767
1756
|
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1757
|
+
if !self.valid_size(dif.data().len()) {
|
|
1758
|
+
return Err(ValidationError::TooLarge {
|
|
1759
|
+
size: dif.data().len(),
|
|
1760
|
+
max_size: self.max_file_size,
|
|
1761
|
+
});
|
|
1772
1762
|
}
|
|
1773
1763
|
|
|
1774
|
-
|
|
1764
|
+
Ok(())
|
|
1775
1765
|
}
|
|
1776
1766
|
|
|
1777
1767
|
fn into_chunk_options(self, server_options: ChunkServerOptions) -> ChunkOptions<'a> {
|
|
@@ -136,7 +136,7 @@ impl ReleaseFileSearch {
|
|
|
136
136
|
|
|
137
137
|
for result in builder.build() {
|
|
138
138
|
let file = result?;
|
|
139
|
-
if file.file_type().
|
|
139
|
+
if file.file_type().is_some_and(|t| t.is_dir()) {
|
|
140
140
|
continue;
|
|
141
141
|
}
|
|
142
142
|
pb.set_message(&format!("{}", file.path().display()));
|
|
@@ -42,7 +42,7 @@ pub fn initialize_legacy_release_upload(context: &UploadContext) -> Result<()> {
|
|
|
42
42
|
// if a project is provided which is technically unnecessary for the
|
|
43
43
|
// legacy upload though it will unlikely to be what users want.
|
|
44
44
|
if context.project.is_some()
|
|
45
|
-
&& context.chunk_upload_options.
|
|
45
|
+
&& context.chunk_upload_options.is_some_and(|x| {
|
|
46
46
|
x.supports(ChunkUploadCapability::ArtifactBundles)
|
|
47
47
|
|| x.supports(ChunkUploadCapability::ArtifactBundlesV2)
|
|
48
48
|
})
|
|
@@ -119,7 +119,7 @@ impl fmt::Display for LogLevel {
|
|
|
119
119
|
pub struct SourceFile {
|
|
120
120
|
pub url: String,
|
|
121
121
|
pub path: PathBuf,
|
|
122
|
-
pub contents: Vec<u8
|
|
122
|
+
pub contents: Arc<Vec<u8>>,
|
|
123
123
|
pub ty: SourceFileType,
|
|
124
124
|
/// A map of headers attached to the source file.
|
|
125
125
|
///
|
|
@@ -134,7 +134,7 @@ pub struct SourceFile {
|
|
|
134
134
|
impl SourceFile {
|
|
135
135
|
/// Calculates and returns the SHA1 checksum of the file.
|
|
136
136
|
pub fn checksum(&self) -> Result<Digest> {
|
|
137
|
-
get_sha1_checksum(
|
|
137
|
+
get_sha1_checksum(&**self.contents)
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
/// Returns the value of the "debug-id" header.
|
|
@@ -670,7 +670,9 @@ mod tests {
|
|
|
670
670
|
let file = SourceFile {
|
|
671
671
|
url: format!("~/{name}"),
|
|
672
672
|
path: format!("tests/integration/_fixtures/{name}").into(),
|
|
673
|
-
contents: std::fs::read(format!("tests/integration/_fixtures/{name}"))
|
|
673
|
+
contents: std::fs::read(format!("tests/integration/_fixtures/{name}"))
|
|
674
|
+
.unwrap()
|
|
675
|
+
.into(),
|
|
674
676
|
ty: SourceFileType::SourceMap,
|
|
675
677
|
headers: Default::default(),
|
|
676
678
|
messages: Default::default(),
|
|
@@ -284,7 +284,7 @@ pub fn find_matching_paths(candidate_paths: &[String], expected_path: &str) -> V
|
|
|
284
284
|
while candidate_segments
|
|
285
285
|
.peek()
|
|
286
286
|
.zip(expected_segments.peek())
|
|
287
|
-
.
|
|
287
|
+
.is_some_and(|(x, y)| x == y)
|
|
288
288
|
{
|
|
289
289
|
candidate_segments.next();
|
|
290
290
|
expected_segments.next();
|