Skip to content

Commit b33c9e2

Browse files
committed
Refactor the common code for generating an archive member
Signed-off-by: Bruce Guenter <[email protected]>
1 parent 27d54a8 commit b33c9e2

File tree

1 file changed

+28
-43
lines changed

1 file changed

+28
-43
lines changed

src/cargo/ops/cargo_package.rs

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::collections::{BTreeSet, HashMap};
2+
use std::fmt::Display;
23
use std::fs::{self, File};
34
use std::io::prelude::*;
45
use std::io::SeekFrom;
@@ -8,6 +9,7 @@ use std::sync::Arc;
89
use std::time::SystemTime;
910

1011
use flate2::read::GzDecoder;
12+
use flate2::write::GzEncoder;
1113
use flate2::{Compression, GzBuilder};
1214
use log::debug;
1315
use serde_json::{self, json};
@@ -439,22 +441,8 @@ fn tar(
439441
internal(format!("could not archive source file `{}`", relative_str))
440442
})?;
441443

442-
let mut header = Header::new_ustar();
443444
let toml = pkg.to_registry_toml(ws.config())?;
444-
header.set_path(&path)?;
445-
header.set_entry_type(EntryType::file());
446-
header.set_mode(0o644);
447-
header.set_mtime(
448-
SystemTime::now()
449-
.duration_since(SystemTime::UNIX_EPOCH)
450-
.unwrap()
451-
.as_secs(),
452-
);
453-
header.set_size(toml.len() as u64);
454-
header.set_cksum();
455-
ar.append(&header, toml.as_bytes()).chain_err(|| {
456-
internal(format!("could not archive source file `{}`", relative_str))
457-
})?;
445+
add_generated_file(&mut ar, &path, &toml, relative_str)?;
458446
} else {
459447
header.set_cksum();
460448
ar.append(&header, &mut file).chain_err(|| {
@@ -482,20 +470,7 @@ fn tar(
482470
.set_path(&path)
483471
.chain_err(|| format!("failed to add to archive: `{}`", fnd))?;
484472
let json = format!("{}\n", serde_json::to_string_pretty(json)?);
485-
let mut header = Header::new_ustar();
486-
header.set_path(&path)?;
487-
header.set_entry_type(EntryType::file());
488-
header.set_mode(0o644);
489-
header.set_mtime(
490-
SystemTime::now()
491-
.duration_since(SystemTime::UNIX_EPOCH)
492-
.unwrap()
493-
.as_secs(),
494-
);
495-
header.set_size(json.len() as u64);
496-
header.set_cksum();
497-
ar.append(&header, json.as_bytes())
498-
.chain_err(|| internal(format!("could not archive source file `{}`", fnd)))?;
473+
add_generated_file(&mut ar, &path, &json, fnd)?;
499474
}
500475

501476
if pkg.include_lockfile() {
@@ -510,20 +485,7 @@ fn tar(
510485
pkg.version(),
511486
path::MAIN_SEPARATOR
512487
);
513-
let mut header = Header::new_ustar();
514-
header.set_path(&path)?;
515-
header.set_entry_type(EntryType::file());
516-
header.set_mode(0o644);
517-
header.set_mtime(
518-
SystemTime::now()
519-
.duration_since(SystemTime::UNIX_EPOCH)
520-
.unwrap()
521-
.as_secs(),
522-
);
523-
header.set_size(new_lock.len() as u64);
524-
header.set_cksum();
525-
ar.append(&header, new_lock.as_bytes())
526-
.chain_err(|| internal("could not archive source file `Cargo.lock`"))?;
488+
add_generated_file(&mut ar, &path, &new_lock, "Cargo.lock")?;
527489
}
528490

529491
let encoder = ar.into_inner()?;
@@ -805,3 +767,26 @@ fn check_filename(file: &Path) -> CargoResult<()> {
805767
}
806768
Ok(())
807769
}
770+
771+
fn add_generated_file<D: Display>(
772+
ar: &mut Builder<GzEncoder<&File>>,
773+
path: &str,
774+
data: &str,
775+
display: D,
776+
) -> CargoResult<()> {
777+
let mut header = Header::new_ustar();
778+
header.set_path(path)?;
779+
header.set_entry_type(EntryType::file());
780+
header.set_mode(0o644);
781+
header.set_mtime(
782+
SystemTime::now()
783+
.duration_since(SystemTime::UNIX_EPOCH)
784+
.unwrap()
785+
.as_secs(),
786+
);
787+
header.set_size(data.len() as u64);
788+
header.set_cksum();
789+
ar.append(&header, data.as_bytes())
790+
.chain_err(|| internal(format!("could not archive source file `{}`", display)))?;
791+
Ok(())
792+
}

0 commit comments

Comments
 (0)