Skip to content

Commit db54ece

Browse files
runningcodeclaude
andcommitted
refactor(build): Extract version metadata writing to shared function
Extract the CLI version metadata generation logic to a shared `write_version_metadata` function to ensure consistency across both directory and file upload paths. This also fixes a compression inconsistency where the metadata file was using Deflated in normalize.rs but Stored in upload.rs. Now both paths consistently use Deflated compression for the metadata file. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 4ab69c4 commit db54ece

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

src/commands/build/upload.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ use crate::api::{
1414
Api, AuthenticatedApi, ChunkUploadCapability, ChunkedBuildRequest, ChunkedFileState, VcsInfo,
1515
};
1616
use crate::config::Config;
17-
use crate::constants::VERSION;
1817
use crate::utils::args::ArgExt as _;
1918
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
2019
use crate::utils::build::{handle_asset_catalogs, ipa_to_xcarchive, is_apple_app, is_ipa_file};
21-
use crate::utils::build::{is_aab_file, is_apk_file, is_zip_file, normalize_directory};
20+
use crate::utils::build::{
21+
is_aab_file, is_apk_file, is_zip_file, normalize_directory, write_version_metadata,
22+
};
2223
use crate::utils::chunks::{upload_chunks, Chunk};
2324
use crate::utils::fs::get_sha1_checksums;
2425
use crate::utils::fs::TempDir;
@@ -456,8 +457,7 @@ fn normalize_file(path: &Path, bytes: &[u8]) -> Result<TempFile> {
456457
zip.start_file(file_name, options)?;
457458
zip.write_all(bytes)?;
458459

459-
zip.start_file(".sentry-cli-metadata.txt", options)?;
460-
writeln!(zip, "sentry-cli-version: {VERSION}")?;
460+
write_version_metadata(&mut zip)?;
461461

462462
zip.finish()?;
463463
debug!("Successfully created normalized zip for file");

src/utils/build/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ mod validation;
55

66
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
77
pub use self::apple::{handle_asset_catalogs, ipa_to_xcarchive};
8-
pub use self::normalize::normalize_directory;
8+
pub use self::normalize::{normalize_directory, write_version_metadata};
99
pub use self::validation::{is_aab_file, is_apk_file, is_zip_file};
1010
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
1111
pub use self::validation::{is_apple_app, is_ipa_file};

src/utils/build/normalize.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,23 @@ fn add_entries_to_zip(
7777
Ok(file_count)
7878
}
7979

80+
/// Creates file options with consistent compression and timestamp settings for metadata files.
81+
/// Uses Deflated compression to match other files in the archive.
82+
fn metadata_file_options() -> SimpleFileOptions {
83+
SimpleFileOptions::default()
84+
.compression_method(zip::CompressionMethod::Deflated)
85+
.last_modified_time(DateTime::default())
86+
}
87+
88+
/// Writes the CLI version metadata to a zip archive.
89+
pub fn write_version_metadata<W: std::io::Write + std::io::Seek>(
90+
zip: &mut ZipWriter<W>,
91+
) -> Result<()> {
92+
zip.start_file(".sentry-cli-metadata.txt", metadata_file_options())?;
93+
writeln!(zip, "sentry-cli-version: {VERSION}")?;
94+
Ok(())
95+
}
96+
8097
// For XCArchive directories, we'll zip the entire directory
8198
// It's important to not change the contents of the directory or the size
8299
// analysis will be wrong and the code signature will break.
@@ -109,11 +126,7 @@ pub fn normalize_directory(path: &Path, parsed_assets_path: &Path) -> Result<Tem
109126
)?;
110127
}
111128

112-
let options = SimpleFileOptions::default()
113-
.compression_method(zip::CompressionMethod::Deflated)
114-
.last_modified_time(DateTime::default());
115-
zip.start_file(".sentry-cli-metadata.txt", options)?;
116-
writeln!(zip, "sentry-cli-version: {VERSION}")?;
129+
write_version_metadata(&mut zip)?;
117130

118131
zip.finish()?;
119132
debug!("Successfully created normalized zip for directory with {file_count} files");

0 commit comments

Comments
 (0)