Skip to content

Commit be26c24

Browse files
ref(sourcemaps): UploadContext always has projects (#2959)
### Description Following #2956, the `UploadContext` struct's `projects` field is always `Some`, indicating we have at least one project. Here, we change the type from `Option<NonEmptySlice>` to `NonEmptySlice` to indicate that we always have a project set.
1 parent e39664f commit be26c24

File tree

6 files changed

+21
-50
lines changed

6 files changed

+21
-50
lines changed

src/commands/react_native/appcenter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
196196

197197
processor.upload(&UploadContext {
198198
org: &org,
199-
projects: Some(projects.as_non_empty_slice()),
199+
projects: projects.as_non_empty_slice(),
200200
release: Some(&release),
201201
dist: None,
202202
note: None,
@@ -214,7 +214,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
214214

215215
processor.upload(&UploadContext {
216216
org: &org,
217-
projects: Some(projects.as_non_empty_slice()),
217+
projects: projects.as_non_empty_slice(),
218218
release: Some(&release),
219219
dist: Some(dist),
220220
note: None,

src/commands/react_native/gradle.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
123123

124124
processor.upload(&UploadContext {
125125
org: &org,
126-
projects: Some(projects.as_non_empty_slice()),
126+
projects: projects.as_non_empty_slice(),
127127
release: Some(version),
128128
dist: Some(dist),
129129
note: None,
@@ -136,7 +136,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
136136
// Debug Id Upload
137137
processor.upload(&UploadContext {
138138
org: &org,
139-
projects: Some(projects.as_non_empty_slice()),
139+
projects: projects.as_non_empty_slice(),
140140
release: None,
141141
dist: None,
142142
note: None,

src/commands/react_native/xcode.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
345345
if dist_from_env.is_err() && release_from_env.is_err() && matches.get_flag("no_auto_release") {
346346
processor.upload(&UploadContext {
347347
org: &org,
348-
projects: Some(projects.as_non_empty_slice()),
348+
projects: projects.as_non_empty_slice(),
349349
release: None,
350350
dist: None,
351351
note: None,
@@ -380,7 +380,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
380380
None => {
381381
processor.upload(&UploadContext {
382382
org: &org,
383-
projects: Some(projects.as_non_empty_slice()),
383+
projects: projects.as_non_empty_slice(),
384384
release: release_name.as_deref(),
385385
dist: dist.as_deref(),
386386
note: None,
@@ -393,7 +393,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
393393
for dist in dists {
394394
processor.upload(&UploadContext {
395395
org: &org,
396-
projects: Some(projects.as_non_empty_slice()),
396+
projects: projects.as_non_empty_slice(),
397397
release: release_name.as_deref(),
398398
dist: Some(dist),
399399
note: None,

src/commands/sourcemaps/upload.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ pub fn execute(matches: &ArgMatches) -> Result<()> {
455455
let max_wait = wait_for_secs.map_or(DEFAULT_MAX_WAIT, Duration::from_secs);
456456
let upload_context = UploadContext {
457457
org: &org,
458-
projects: Some(projects.as_non_empty_slice()),
458+
projects: projects.as_non_empty_slice(),
459459
release: version.as_deref(),
460460
dist: matches.get_one::<String>("dist").map(String::as_str),
461461
note: matches.get_one::<String>("note").map(String::as_str),

src/utils/file_upload.rs

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -40,34 +40,19 @@ pub fn initialize_legacy_release_upload(context: &UploadContext) -> Result<()> {
4040
// if a project is provided which is technically unnecessary for the
4141
// legacy upload though it will unlikely to be what users want.
4242
let chunk_options = context.chunk_upload_options;
43-
if context.projects.is_some()
44-
&& (chunk_options.supports(ChunkUploadCapability::ArtifactBundles)
45-
|| chunk_options.supports(ChunkUploadCapability::ArtifactBundlesV2))
43+
if chunk_options.supports(ChunkUploadCapability::ArtifactBundles)
44+
|| chunk_options.supports(ChunkUploadCapability::ArtifactBundlesV2)
4645
{
4746
return Ok(());
4847
}
4948

50-
// TODO: make this into an error later down the road
51-
if context.projects.is_none() {
52-
eprintln!(
53-
"{}",
54-
style(
55-
"warning: no project specified. \
56-
While this upload will succeed it will be unlikely that \
57-
this is what you wanted. Future versions of sentry will \
58-
require a project to be set."
59-
)
60-
.red()
61-
);
62-
}
63-
6449
if let Some(version) = context.release {
6550
let api = Api::current();
6651
api.authenticated()?.new_release(
6752
context.org,
6853
&NewRelease {
6954
version: version.to_owned(),
70-
projects: context.projects.map(Vec::from).unwrap_or_default(),
55+
projects: context.projects.into(),
7156
..Default::default()
7257
},
7358
)?;
@@ -80,7 +65,7 @@ pub fn initialize_legacy_release_upload(context: &UploadContext) -> Result<()> {
8065
#[derive(Debug, Clone)]
8166
pub struct UploadContext<'a> {
8267
pub org: &'a str,
83-
pub projects: Option<NonEmptySlice<'a, String>>,
68+
pub projects: NonEmptySlice<'a, String>,
8469
pub release: Option<&'a str>,
8570
pub dist: Option<&'a str>,
8671
pub note: Option<&'a str>,
@@ -185,13 +170,11 @@ impl<'a> TryFrom<&'a UploadContext<'_>> for LegacyUploadContext<'a> {
185170
..
186171
} = value;
187172

188-
let project = projects
189-
.map(|projects| match <&[_]>::from(projects) {
190-
[] => unreachable!("NonEmptySlice cannot be empty"),
191-
[project] => Ok(project.as_str()),
192-
[_, _, ..] => Err(LegacyUploadContextError::ProjectMultiple),
193-
})
194-
.transpose()?;
173+
let project = Some(match <&[_]>::from(projects) {
174+
[] => unreachable!("NonEmptySlice cannot be empty"),
175+
[project] => Ok(project.as_str()),
176+
[_, _, ..] => Err(LegacyUploadContextError::ProjectMultiple),
177+
}?);
195178

196179
let release = release.ok_or(LegacyUploadContextError::ReleaseMissing)?;
197180

@@ -536,23 +519,12 @@ fn poll_assemble(
536519
);
537520
}
538521

539-
// We fall back to legacy release upload if server lacks artifact bundle support, or if
540-
// no projects are specified. context.projects has Some(projects) in all cases, besides
541-
// the following:
542-
// - For `files upload`, we can have None projects. We don't need a separate warning,
543-
// because `files upload` is already deprecated.
544-
// - For `debug-files bundle-jvm`, but although that codepath uses the `UploadContext`,
545-
// it does not actually use it to perform an upload, so we never hit this codepath.
546-
let artifact_bundle_projects = server_supports_artifact_bundles
547-
.then_some(context.projects)
548-
.flatten();
549-
550522
let response = loop {
551523
// prefer standalone artifact bundle upload over legacy release based upload
552-
let response = if let Some(projects) = artifact_bundle_projects {
524+
let response = if server_supports_artifact_bundles {
553525
authenticated_api.assemble_artifact_bundle(
554526
context.org,
555-
projects,
527+
context.projects,
556528
checksum,
557529
chunks,
558530
context.release,
@@ -642,7 +614,6 @@ fn upload_files_chunked(
642614
if let Some(projects) = options
643615
.supports(ChunkUploadCapability::ArtifactBundlesV2)
644616
.then_some(context.projects)
645-
.flatten()
646617
{
647618
let api = Api::current();
648619
let response = api.authenticated()?.assemble_artifact_bundle(
@@ -677,7 +648,7 @@ fn print_upload_context_details(context: &UploadContext) {
677648
println!(
678649
"{} {}",
679650
style("> Projects:").dim(),
680-
style(context.projects.as_deref().unwrap_or_default().join(", ")).yellow()
651+
style(context.projects.join(", ")).yellow()
681652
);
682653
println!(
683654
"{} {}",

src/utils/source_bundle.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl<'a> From<&'a UploadContext<'a>> for BundleContext<'a> {
4343
fn from(context: &'a UploadContext<'a>) -> Self {
4444
Self {
4545
org: context.org,
46-
projects: context.projects,
46+
projects: Some(context.projects),
4747
note: context.note,
4848
release: context.release,
4949
dist: context.dist,

0 commit comments

Comments
 (0)