sentry-cli 2.49.0__tar.gz → 2.50.2__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.49.0 → sentry_cli-2.50.2}/Cargo.lock +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/Cargo.toml +3 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/PKG-INFO +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/src/asset_catalog.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/build.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/sentry_cli.egg-info/PKG-INFO +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/connection_manager.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/mod.rs +10 -11
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/bash_hook.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/bundle_jvm.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/check.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/find.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/upload.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/deploys/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/events/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/files/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/files/upload.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/issues/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/mobile_app/mod.rs +7 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/mobile_app/upload.rs +49 -14
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/monitors/list.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/monitors/run.rs +2 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/projects/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/react_native/appcenter.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/react_native/gradle.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/react_native/xcode.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/archive.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/delete.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/finalize.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/info.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/new.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/restore.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/set_commits.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/repos/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_event.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/distribution.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/gauge.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/increment.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/set.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/sourcemaps/explain.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/sourcemaps/mod.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/sourcemaps/upload.rs +6 -10
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/update.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/upload_proguard.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/config.rs +4 -5
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/android.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/appcenter.rs +5 -5
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/args.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/test.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/chunks/upload.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/dif.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/dif_upload/mod.rs +4 -5
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/event.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/file_search.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/file_upload.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/fs.rs +1 -1
- sentry_cli-2.50.2/src/utils/mobile_app/apple.rs +158 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/mobile_app/mod.rs +3 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/mobile_app/validation.rs +14 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/progress.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/releases.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/retry.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/sourcemaps/inject.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/sourcemaps.rs +3 -3
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/system.rs +4 -6
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/update.rs +1 -1
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/vcs.rs +2 -2
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/xcode.rs +2 -2
- sentry_cli-2.49.0/src/utils/mobile_app/apple.rs +0 -29
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/LICENSE +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/MANIFEST.in +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/README.md +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/Cargo.toml +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/build.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Package.swift +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Sources/AssetCatalogParser/AssetCatalogReader.swift +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Sources/ObjcSupport/include/safeValueForKey.h +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Sources/ObjcSupport/safeValueForKey.m +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Tests/AssetCatalogParserTests/AssetCatalogParserTests.swift +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Tests/AssetCatalogParserTests/Resources/test.xcarchive/Info.plist +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/native/swift/AssetCatalogParser/Tests/AssetCatalogParserTests/Resources/test.xcarchive/Products/Applications/DemoApp.app/Assets.car +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/apple-catalog-parsing/src/lib.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/pyproject.toml +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/sentry_cli.egg-info/SOURCES.txt +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/sentry_cli.egg-info/dependency_links.txt +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/sentry_cli.egg-info/top_level.txt +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/setup.cfg +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/setup.py +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/artifact.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/compression.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/dif.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/file_state.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/hash_algorithm.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/mobile_app.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/upload/capability.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/upload/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/chunking/upload/options.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/deploy.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/data_types/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/encoding.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/envelopes_api.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/errors/api_error.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/errors/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/errors/sentry_error.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/api/pagination.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/bashsupport.sh +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/bundle_sources.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/debug_files/print_sources.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/deploys/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/deploys/new.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/derive_parser.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/events/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/files/delete.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/files/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/info.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/issues/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/issues/mute.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/issues/resolve.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/issues/unresolve.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/login.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/monitors/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/organizations/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/organizations/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/projects/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/react_native/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/releases/propose_version.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/repos/list.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_envelope.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/send_metric/common_args.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/sourcemaps/inject.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/sourcemaps/resolve.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/uninstall.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/upload_dif.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/commands/upload_dsym.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/constants.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/main.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/auth_token_impl.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/error.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/org_auth_token.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/redacting.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/auth_token/user_auth_token.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/chunks/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/chunks/options.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/chunks/types.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/cordova.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/dif_upload/error.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/formatting.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/http.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/logging.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/metrics.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/proguard/mapping.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/proguard/mod.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/proguard/upload.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_default_twenty.snap +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_ignore_missing.snap +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_set_base.snap +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/snapshots/sentry_cli__utils__vcs__generate_patch_set_previous_commit.snap +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/snapshots/sentry_cli__utils__vcs__get_commits_from_git.snap +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/ui.rs +0 -0
- {sentry_cli-2.49.0 → sentry_cli-2.50.2}/src/utils/value_parsers.rs +0 -0
|
@@ -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.50.2"
|
|
6
6
|
edition = "2021"
|
|
7
7
|
rust-version = "1.86"
|
|
8
8
|
|
|
@@ -103,6 +103,8 @@ allow-attributes = "warn"
|
|
|
103
103
|
str-to-string = "warn"
|
|
104
104
|
string-to-string = "warn"
|
|
105
105
|
unnecessary-wraps = "warn"
|
|
106
|
+
uninlined-format-args = "warn"
|
|
107
|
+
unused-trait-names = "warn"
|
|
106
108
|
unwrap-used = "warn"
|
|
107
109
|
|
|
108
110
|
[lints]
|
|
@@ -19,13 +19,13 @@ use std::collections::{HashMap, HashSet};
|
|
|
19
19
|
use std::ffi::OsStr;
|
|
20
20
|
use std::fmt;
|
|
21
21
|
use std::fs::File;
|
|
22
|
-
use std::io::{self, Read, Write};
|
|
22
|
+
use std::io::{self, Read as _, Write};
|
|
23
23
|
use std::path::Path;
|
|
24
24
|
use std::rc::Rc;
|
|
25
25
|
use std::sync::Arc;
|
|
26
26
|
|
|
27
|
-
use anyhow::{Context, Result};
|
|
28
|
-
use backoff::backoff::Backoff;
|
|
27
|
+
use anyhow::{Context as _, Result};
|
|
28
|
+
use backoff::backoff::Backoff as _;
|
|
29
29
|
use brotli2::write::BrotliEncoder;
|
|
30
30
|
#[cfg(target_os = "macos")]
|
|
31
31
|
use chrono::Duration;
|
|
@@ -37,7 +37,7 @@ use lazy_static::lazy_static;
|
|
|
37
37
|
use log::{debug, info, warn};
|
|
38
38
|
use parking_lot::Mutex;
|
|
39
39
|
use regex::{Captures, Regex};
|
|
40
|
-
use secrecy::ExposeSecret;
|
|
40
|
+
use secrecy::ExposeSecret as _;
|
|
41
41
|
use sentry::protocol::{Exception, Values};
|
|
42
42
|
use serde::de::DeserializeOwned;
|
|
43
43
|
use serde::{Deserialize, Serialize};
|
|
@@ -52,7 +52,7 @@ use crate::constants::{ARCH, DEFAULT_URL, EXT, PLATFORM, RELEASE_REGISTRY_LATEST
|
|
|
52
52
|
use crate::utils::file_upload::LegacyUploadContext;
|
|
53
53
|
use crate::utils::http::{self, is_absolute_url};
|
|
54
54
|
use crate::utils::progress::{ProgressBar, ProgressBarMode};
|
|
55
|
-
use crate::utils::retry::{get_default_backoff, DurationAsMilliseconds};
|
|
55
|
+
use crate::utils::retry::{get_default_backoff, DurationAsMilliseconds as _};
|
|
56
56
|
use crate::utils::sourcemaps::get_sourcemap_reference_from_headers;
|
|
57
57
|
use crate::utils::ui::{capitalize_string, make_byte_progress_bar};
|
|
58
58
|
|
|
@@ -329,7 +329,7 @@ impl Api {
|
|
|
329
329
|
_ => ARCH,
|
|
330
330
|
};
|
|
331
331
|
|
|
332
|
-
let ref_name = format!("sentry-cli-{}-{}{}", capitalize_string(PLATFORM)
|
|
332
|
+
let ref_name = format!("sentry-cli-{}-{arch}{EXT}", capitalize_string(PLATFORM));
|
|
333
333
|
info!("Looking for file named: {}", ref_name);
|
|
334
334
|
|
|
335
335
|
if resp.status() == 200 {
|
|
@@ -894,10 +894,9 @@ impl<'a> AuthenticatedApi<'a> {
|
|
|
894
894
|
};
|
|
895
895
|
self.put(
|
|
896
896
|
&format!(
|
|
897
|
-
"/projects/{}/{}/issues/?{}",
|
|
897
|
+
"/projects/{}/{}/issues/?{qs}",
|
|
898
898
|
PathArg(org),
|
|
899
|
-
PathArg(project)
|
|
900
|
-
qs
|
|
899
|
+
PathArg(project)
|
|
901
900
|
),
|
|
902
901
|
changes,
|
|
903
902
|
)?
|
|
@@ -1253,7 +1252,7 @@ impl<'a> AuthenticatedApi<'a> {
|
|
|
1253
1252
|
loop {
|
|
1254
1253
|
requests_no += 1;
|
|
1255
1254
|
|
|
1256
|
-
let resp = self.get(&format!("{}cursor={}",
|
|
1255
|
+
let resp = self.get(&format!("{url}cursor={}", QueryArg(&cursor)))?;
|
|
1257
1256
|
|
|
1258
1257
|
if resp.status() == 404 || (resp.status() == 400 && !cursor.is_empty()) {
|
|
1259
1258
|
if rv.is_empty() {
|
|
@@ -1934,7 +1933,7 @@ fn log_headers(is_response: bool, data: &[u8]) {
|
|
|
1934
1933
|
} else {
|
|
1935
1934
|
format!("{}***", &caps[3][..std::cmp::min(caps[3].len(), 8)])
|
|
1936
1935
|
};
|
|
1937
|
-
format!("{}: {} {}", &caps[1], &caps[2]
|
|
1936
|
+
format!("{}: {} {info}", &caps[1], &caps[2])
|
|
1938
1937
|
});
|
|
1939
1938
|
debug!("{} {}", if is_response { ">" } else { "<" }, replaced);
|
|
1940
1939
|
}
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
use crate::api::Api;
|
|
4
4
|
use crate::config::Config;
|
|
5
5
|
use crate::constants::DEFAULT_MAX_WAIT;
|
|
6
|
-
use crate::utils::args::ArgExt;
|
|
6
|
+
use crate::utils::args::ArgExt as _;
|
|
7
7
|
use crate::utils::file_search::ReleaseFileSearch;
|
|
8
8
|
use crate::utils::file_upload::{FileUpload, SourceFile, UploadContext};
|
|
9
9
|
use crate::utils::fs::path_as_url;
|
|
10
|
-
use anyhow::{bail, Context, Result};
|
|
10
|
+
use anyhow::{bail, Context as _, Result};
|
|
11
11
|
use clap::{Arg, ArgMatches, Command};
|
|
12
12
|
use sentry::types::DebugId;
|
|
13
13
|
use std::collections::BTreeMap;
|
|
14
14
|
use std::fs;
|
|
15
15
|
use std::path::PathBuf;
|
|
16
|
-
use std::str::FromStr;
|
|
16
|
+
use std::str::FromStr as _;
|
|
17
17
|
use std::sync::Arc;
|
|
18
18
|
use symbolic::debuginfo::sourcebundle::SourceFileType;
|
|
19
19
|
|
|
@@ -101,7 +101,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
if let Some(prob) = dif.get_problem() {
|
|
104
|
-
println!(" Usable: {} ({})", style("no").red()
|
|
104
|
+
println!(" Usable: {} ({prob})", style("no").red());
|
|
105
105
|
Err(QuietExit(1).into())
|
|
106
106
|
} else {
|
|
107
107
|
println!(" Usable: {}", style("yes").green());
|
|
@@ -4,7 +4,7 @@ use std::ffi::OsStr;
|
|
|
4
4
|
use std::fmt::Debug;
|
|
5
5
|
use std::io;
|
|
6
6
|
use std::path::PathBuf;
|
|
7
|
-
use std::str::FromStr;
|
|
7
|
+
use std::str::FromStr as _;
|
|
8
8
|
|
|
9
9
|
use anyhow::Result;
|
|
10
10
|
use clap::{builder::PossibleValuesParser, Arg, ArgAction, ArgMatches, Command};
|
|
@@ -186,7 +186,7 @@ fn find_ids(
|
|
|
186
186
|
eprintln!();
|
|
187
187
|
eprintln!("missing debug information files:");
|
|
188
188
|
for id in &remaining {
|
|
189
|
-
eprintln!(" {} ({})",
|
|
189
|
+
eprintln!(" {id} ({})", id_hint(id),);
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
use std::collections::BTreeSet;
|
|
2
|
-
use std::str::{self, FromStr};
|
|
2
|
+
use std::str::{self, FromStr as _};
|
|
3
3
|
use std::time::Duration;
|
|
4
4
|
|
|
5
5
|
use anyhow::{bail, format_err, Result};
|
|
6
6
|
use clap::{builder::PossibleValuesParser, Arg, ArgAction, ArgMatches, Command};
|
|
7
7
|
use console::style;
|
|
8
|
-
use itertools::Itertools;
|
|
8
|
+
use itertools::Itertools as _;
|
|
9
9
|
use symbolic::common::DebugId;
|
|
10
10
|
use symbolic::debuginfo::FileFormat;
|
|
11
11
|
|
|
12
12
|
use crate::config::Config;
|
|
13
13
|
use crate::constants::DEFAULT_MAX_WAIT;
|
|
14
|
-
use crate::utils::args::ArgExt;
|
|
14
|
+
use crate::utils::args::ArgExt as _;
|
|
15
15
|
use crate::utils::dif::{DifType, ObjectDifFeatures};
|
|
16
16
|
use crate::utils::dif_upload::{DifFormat, DifUpload};
|
|
17
17
|
use crate::utils::system::QuietExit;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
use std::collections::BTreeMap;
|
|
4
4
|
use std::ffi::OsStr;
|
|
5
5
|
use std::fs;
|
|
6
|
-
use std::io::Read;
|
|
6
|
+
use std::io::Read as _;
|
|
7
7
|
use std::path::Path;
|
|
8
8
|
use std::sync::Arc;
|
|
9
9
|
use std::time::Duration;
|
|
@@ -202,7 +202,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
202
202
|
.iter()
|
|
203
203
|
.map(|source| {
|
|
204
204
|
let local_path = source.path.strip_prefix(&source.base_path).unwrap();
|
|
205
|
-
let url = format!("{}/{}{}",
|
|
205
|
+
let url = format!("{url_prefix}/{}{url_suffix}", path_as_url(local_path));
|
|
206
206
|
|
|
207
207
|
(
|
|
208
208
|
url.clone(),
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
use anyhow::Result;
|
|
4
4
|
use clap::{ArgMatches, Command};
|
|
5
5
|
|
|
6
|
-
use crate::utils::args::ArgExt;
|
|
6
|
+
use crate::utils::args::ArgExt as _;
|
|
7
7
|
|
|
8
8
|
pub mod upload;
|
|
9
9
|
|
|
@@ -35,6 +35,12 @@ pub fn make_command(mut command: Command) -> Command {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
38
|
+
log::warn!(
|
|
39
|
+
"EXPERIMENTAL: The mobile-app subcommand is experimental. \
|
|
40
|
+
The command is subject to breaking changes and may be removed \
|
|
41
|
+
without notice in any release."
|
|
42
|
+
);
|
|
43
|
+
|
|
38
44
|
macro_rules! execute_subcommand {
|
|
39
45
|
($name:ident) => {{
|
|
40
46
|
if let Some(sub_matches) =
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
use std::borrow::Cow;
|
|
2
2
|
#[cfg(not(windows))]
|
|
3
3
|
use std::fs;
|
|
4
|
-
use std::io::Write;
|
|
4
|
+
use std::io::Write as _;
|
|
5
5
|
#[cfg(not(windows))]
|
|
6
|
-
use std::os::unix::fs::PermissionsExt;
|
|
6
|
+
use std::os::unix::fs::PermissionsExt as _;
|
|
7
7
|
use std::path::Path;
|
|
8
8
|
|
|
9
9
|
use anyhow::{anyhow, bail, Context as _, Result};
|
|
10
10
|
use clap::{Arg, ArgAction, ArgMatches, Command};
|
|
11
11
|
use indicatif::ProgressStyle;
|
|
12
|
-
use itertools::Itertools;
|
|
12
|
+
use itertools::Itertools as _;
|
|
13
13
|
use log::{debug, info, warn};
|
|
14
14
|
use sha1_smol::Digest;
|
|
15
15
|
use symbolic::common::ByteView;
|
|
@@ -18,17 +18,23 @@ use zip::{DateTime, ZipWriter};
|
|
|
18
18
|
|
|
19
19
|
use crate::api::{Api, AuthenticatedApi, ChunkUploadCapability};
|
|
20
20
|
use crate::config::Config;
|
|
21
|
-
use crate::utils::args::ArgExt;
|
|
21
|
+
use crate::utils::args::ArgExt as _;
|
|
22
22
|
use crate::utils::chunks::{upload_chunks, Chunk, ASSEMBLE_POLL_INTERVAL};
|
|
23
23
|
use crate::utils::fs::get_sha1_checksums;
|
|
24
|
+
#[cfg(target_os = "macos")]
|
|
25
|
+
use crate::utils::fs::TempDir;
|
|
24
26
|
use crate::utils::fs::TempFile;
|
|
25
27
|
#[cfg(target_os = "macos")]
|
|
26
|
-
use crate::utils::mobile_app::handle_asset_catalogs;
|
|
28
|
+
use crate::utils::mobile_app::{handle_asset_catalogs, ipa_to_xcarchive, is_ipa_file};
|
|
27
29
|
use crate::utils::mobile_app::{is_aab_file, is_apk_file, is_apple_app, is_zip_file};
|
|
28
30
|
use crate::utils::progress::ProgressBar;
|
|
29
31
|
use crate::utils::vcs;
|
|
30
32
|
|
|
31
33
|
pub fn make_command(command: Command) -> Command {
|
|
34
|
+
#[cfg(target_os = "macos")]
|
|
35
|
+
const HELP_TEXT: &str = "The path to the mobile app files to upload. Supported files include Apk, Aab, XCArchive, and IPA.";
|
|
36
|
+
#[cfg(not(target_os = "macos"))]
|
|
37
|
+
const HELP_TEXT: &str = "The path to the mobile app files to upload. Supported files include Apk, Aab, and XCArchive.";
|
|
32
38
|
command
|
|
33
39
|
.about("[EXPERIMENTAL] Upload mobile app files to a project.")
|
|
34
40
|
.org_arg()
|
|
@@ -36,7 +42,7 @@ pub fn make_command(command: Command) -> Command {
|
|
|
36
42
|
.arg(
|
|
37
43
|
Arg::new("paths")
|
|
38
44
|
.value_name("PATH")
|
|
39
|
-
.help(
|
|
45
|
+
.help(HELP_TEXT)
|
|
40
46
|
.num_args(1..)
|
|
41
47
|
.action(ArgAction::Append)
|
|
42
48
|
.required(true),
|
|
@@ -95,12 +101,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
95
101
|
|
|
96
102
|
let normalized_zip = if path.is_file() {
|
|
97
103
|
debug!("Normalizing file: {}", path.display());
|
|
98
|
-
|
|
99
|
-
format!(
|
|
100
|
-
"Failed to generate uploadable bundle for file {}",
|
|
101
|
-
path.display()
|
|
102
|
-
)
|
|
103
|
-
})?
|
|
104
|
+
handle_file(path, &byteview)?
|
|
104
105
|
} else if path.is_dir() {
|
|
105
106
|
debug!("Normalizing directory: {}", path.display());
|
|
106
107
|
normalize_directory(path).with_context(|| {
|
|
@@ -178,6 +179,25 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
178
179
|
Ok(())
|
|
179
180
|
}
|
|
180
181
|
|
|
182
|
+
fn handle_file(path: &Path, byteview: &ByteView) -> Result<TempFile> {
|
|
183
|
+
// Handle IPA files by converting them to XCArchive
|
|
184
|
+
#[cfg(target_os = "macos")]
|
|
185
|
+
if is_zip_file(byteview) && is_ipa_file(byteview)? {
|
|
186
|
+
debug!("Converting IPA file to XCArchive structure");
|
|
187
|
+
let temp_dir = TempDir::create()?;
|
|
188
|
+
return ipa_to_xcarchive(path, byteview, &temp_dir)
|
|
189
|
+
.and_then(|path| normalize_directory(&path))
|
|
190
|
+
.with_context(|| format!("Failed to process IPA file {}", path.display()));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
normalize_file(path, byteview).with_context(|| {
|
|
194
|
+
format!(
|
|
195
|
+
"Failed to generate uploadable bundle for file {}",
|
|
196
|
+
path.display()
|
|
197
|
+
)
|
|
198
|
+
})
|
|
199
|
+
}
|
|
200
|
+
|
|
181
201
|
fn validate_is_mobile_app(path: &Path, bytes: &[u8]) -> Result<()> {
|
|
182
202
|
debug!("Validating mobile app format for: {}", path.display());
|
|
183
203
|
|
|
@@ -186,9 +206,13 @@ fn validate_is_mobile_app(path: &Path, bytes: &[u8]) -> Result<()> {
|
|
|
186
206
|
return Ok(());
|
|
187
207
|
}
|
|
188
208
|
|
|
189
|
-
// Check if the file is a zip file (then AAB or
|
|
209
|
+
// Check if the file is a zip file (then AAB, APK, or IPA)
|
|
190
210
|
if is_zip_file(bytes) {
|
|
211
|
+
#[cfg(target_os = "macos")]
|
|
212
|
+
debug!("File is a zip, checking for AAB/APK/IPA format");
|
|
213
|
+
#[cfg(not(target_os = "macos"))]
|
|
191
214
|
debug!("File is a zip, checking for AAB/APK format");
|
|
215
|
+
|
|
192
216
|
if is_aab_file(bytes)? {
|
|
193
217
|
debug!("Detected AAB file");
|
|
194
218
|
return Ok(());
|
|
@@ -198,11 +222,22 @@ fn validate_is_mobile_app(path: &Path, bytes: &[u8]) -> Result<()> {
|
|
|
198
222
|
debug!("Detected APK file");
|
|
199
223
|
return Ok(());
|
|
200
224
|
}
|
|
225
|
+
|
|
226
|
+
#[cfg(target_os = "macos")]
|
|
227
|
+
if is_ipa_file(bytes)? {
|
|
228
|
+
debug!("Detected IPA file");
|
|
229
|
+
return Ok(());
|
|
230
|
+
}
|
|
201
231
|
}
|
|
202
232
|
|
|
203
233
|
debug!("File format validation failed");
|
|
234
|
+
#[cfg(target_os = "macos")]
|
|
235
|
+
let format_list = "APK, AAB, XCArchive, or IPA";
|
|
236
|
+
#[cfg(not(target_os = "macos"))]
|
|
237
|
+
let format_list = "APK, AAB, or XCArchive";
|
|
238
|
+
|
|
204
239
|
Err(anyhow!(
|
|
205
|
-
"File is not a recognized mobile app format (
|
|
240
|
+
"File is not a recognized mobile app format ({format_list}): {}",
|
|
206
241
|
path.display()
|
|
207
242
|
))
|
|
208
243
|
}
|
|
@@ -117,10 +117,9 @@ fn run_program(args: Vec<&String>, monitor_slug: &str) -> (bool, Option<i32>, Du
|
|
|
117
117
|
Ok(status) => (status.success(), status.code()),
|
|
118
118
|
Err(err) => {
|
|
119
119
|
eprintln!(
|
|
120
|
-
"{} could not invoke program '{}': {}",
|
|
120
|
+
"{} could not invoke program '{}': {err}",
|
|
121
121
|
style("error").red(),
|
|
122
|
-
args[0]
|
|
123
|
-
err
|
|
122
|
+
args[0]
|
|
124
123
|
);
|
|
125
124
|
(false, None)
|
|
126
125
|
}
|
|
@@ -14,7 +14,7 @@ use crate::api::Api;
|
|
|
14
14
|
use crate::config::Config;
|
|
15
15
|
use crate::constants::DEFAULT_MAX_WAIT;
|
|
16
16
|
use crate::utils::appcenter::{get_appcenter_package, get_react_native_appcenter_release};
|
|
17
|
-
use crate::utils::args::{validate_distribution, ArgExt};
|
|
17
|
+
use crate::utils::args::{validate_distribution, ArgExt as _};
|
|
18
18
|
use crate::utils::file_search::ReleaseFileSearch;
|
|
19
19
|
use crate::utils::file_upload::UploadContext;
|
|
20
20
|
use crate::utils::sourcemaps::SourceMapProcessor;
|
|
@@ -209,8 +209,8 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
209
209
|
Some(dists) => {
|
|
210
210
|
for dist in dists {
|
|
211
211
|
println!(
|
|
212
|
-
"Uploading sourcemaps for release {} distribution {}",
|
|
213
|
-
&release
|
|
212
|
+
"Uploading sourcemaps for release {} distribution {dist}",
|
|
213
|
+
&release
|
|
214
214
|
);
|
|
215
215
|
|
|
216
216
|
processor.upload(&UploadContext {
|
|
@@ -12,7 +12,7 @@ use sourcemap::ram_bundle::RamBundle;
|
|
|
12
12
|
use crate::api::Api;
|
|
13
13
|
use crate::config::Config;
|
|
14
14
|
use crate::constants::DEFAULT_MAX_WAIT;
|
|
15
|
-
use crate::utils::args::{validate_distribution, ArgExt};
|
|
15
|
+
use crate::utils::args::{validate_distribution, ArgExt as _};
|
|
16
16
|
use crate::utils::file_search::ReleaseFileSearch;
|
|
17
17
|
use crate::utils::file_upload::{SourceFile, UploadContext};
|
|
18
18
|
use crate::utils::sourcemaps::SourceMapProcessor;
|
|
@@ -18,7 +18,7 @@ use serde_json::Value;
|
|
|
18
18
|
use crate::api::Api;
|
|
19
19
|
use crate::config::Config;
|
|
20
20
|
use crate::constants::DEFAULT_MAX_WAIT;
|
|
21
|
-
use crate::utils::args::{validate_distribution, ArgExt};
|
|
21
|
+
use crate::utils::args::{validate_distribution, ArgExt as _};
|
|
22
22
|
use crate::utils::file_search::ReleaseFileSearch;
|
|
23
23
|
use crate::utils::file_upload::UploadContext;
|
|
24
24
|
use crate::utils::fs::TempFile;
|
|
@@ -361,7 +361,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
361
361
|
// Successfully discovered and parsed Info.plist
|
|
362
362
|
let dist_string = plist.build().to_owned();
|
|
363
363
|
let release_string =
|
|
364
|
-
format!("{}@{}+{}", plist.bundle_id(), plist.version()
|
|
364
|
+
format!("{}@{}+{dist_string}", plist.bundle_id(), plist.version());
|
|
365
365
|
info!("Parse result from Info.plist: {:?}", &plist);
|
|
366
366
|
(Some(dist_string), Some(release_string))
|
|
367
367
|
}
|
|
@@ -4,7 +4,7 @@ use clap::{Arg, ArgMatches, Command};
|
|
|
4
4
|
|
|
5
5
|
use crate::api::{Api, UpdatedRelease};
|
|
6
6
|
use crate::config::Config;
|
|
7
|
-
use crate::utils::args::{get_timestamp, ArgExt};
|
|
7
|
+
use crate::utils::args::{get_timestamp, ArgExt as _};
|
|
8
8
|
|
|
9
9
|
pub fn make_command(command: Command) -> Command {
|
|
10
10
|
command
|
|
@@ -3,7 +3,7 @@ use clap::{Arg, ArgAction, ArgMatches, Command};
|
|
|
3
3
|
|
|
4
4
|
use crate::api::Api;
|
|
5
5
|
use crate::config::Config;
|
|
6
|
-
use crate::utils::args::ArgExt;
|
|
6
|
+
use crate::utils::args::ArgExt as _;
|
|
7
7
|
use crate::utils::formatting::Table;
|
|
8
8
|
use crate::utils::logging::is_quiet_mode;
|
|
9
9
|
use crate::utils::system::QuietExit;
|
|
@@ -7,7 +7,7 @@ use regex::Regex;
|
|
|
7
7
|
|
|
8
8
|
use crate::api::{Api, NewRelease, NoneReleaseInfo, OptionalReleaseInfo, UpdatedRelease};
|
|
9
9
|
use crate::config::Config;
|
|
10
|
-
use crate::utils::args::ArgExt;
|
|
10
|
+
use crate::utils::args::ArgExt as _;
|
|
11
11
|
use crate::utils::formatting::Table;
|
|
12
12
|
use crate::utils::vcs::{
|
|
13
13
|
find_heads, generate_patch_set, get_commits_from_git, get_repo_from_remote, CommitSpec,
|
|
@@ -7,7 +7,7 @@ use anyhow::{anyhow, format_err, Result};
|
|
|
7
7
|
use chrono::{DateTime, Utc};
|
|
8
8
|
use clap::{Arg, ArgAction, ArgMatches, Command};
|
|
9
9
|
use glob::{glob_with, MatchOptions};
|
|
10
|
-
use itertools::Itertools;
|
|
10
|
+
use itertools::Itertools as _;
|
|
11
11
|
use log::warn;
|
|
12
12
|
use sentry::protocol::{Event, Level, LogEntry, User};
|
|
13
13
|
use sentry::types::Uuid;
|
|
@@ -190,7 +190,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
190
190
|
let raw_event = std::fs::read(&path)?;
|
|
191
191
|
|
|
192
192
|
let id = if raw {
|
|
193
|
-
use std::io::Write;
|
|
193
|
+
use std::io::Write as _;
|
|
194
194
|
|
|
195
195
|
// Its a bit unfortunate that we still need to parse the whole JSON,
|
|
196
196
|
// but envelopes need an `event_id`, which we also want to report.
|
|
@@ -213,7 +213,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
|
|
|
213
213
|
send_raw_event(event)?
|
|
214
214
|
};
|
|
215
215
|
|
|
216
|
-
println!("Event from file {} dispatched: {}", path.display()
|
|
216
|
+
println!("Event from file {} dispatched: {id}", path.display());
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
return Ok(());
|