Skip to content

Commit 236138b

Browse files
committed
env unpack: better no-op handling
1 parent 3d85221 commit 236138b

3 files changed

Lines changed: 22 additions & 14 deletions

File tree

src/env/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,6 @@ pub fn run(config: Config, subcommand: Subcommand) -> Result<(), ExitCode> {
131131
Subcommand::Activate(args) => activate::run(micromamba, args),
132132
Subcommand::Deactivate => deactivate::run(),
133133
Subcommand::Pack(args) => pack::run(micromamba, args, &config),
134-
Subcommand::Unpack(args) => unpack::run(micromamba, args),
134+
Subcommand::Unpack(args) => unpack::run(micromamba, args, &config),
135135
}
136136
}

src/env/unpack.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::csmrc::Config;
12
use crate::env::dump_micromamba_captured_output_on_error;
23
use crate::micromamba::Micromamba;
34

@@ -28,7 +29,7 @@ fn archive_name_to_env_name(archive_path: &Path) -> Option<String> {
2829
.map(String::from)
2930
}
3031

31-
pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
32+
pub fn run(micromamba: Micromamba, args: Args, config: &Config) -> Result<(), ExitCode> {
3233
let env_name = match args.name {
3334
Some(name) => name,
3435
None => match archive_name_to_env_name(&args.archive_path) {
@@ -69,19 +70,22 @@ pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
6970
})?;
7071
let decompressor = flate2::read::GzDecoder::new(archive_file);
7172
let mut archive = tar::Archive::new(decompressor);
72-
archive.unpack(&target_env_path).map_err(|e| {
73-
error!(
74-
"Could not unpack archive to '{}': {}",
75-
target_env_path.display(),
76-
e
73+
if config.noop_mode {
74+
info!("Prepared to unpack the environment. Not actually extracting, due to no-op mode.");
75+
} else {
76+
archive.unpack(&target_env_path).map_err(|e| {
77+
error!(
78+
"Could not unpack archive to '{}': {}",
79+
target_env_path.display(),
80+
e
81+
);
82+
ExitCode::FAILURE
83+
})?;
84+
info!(
85+
"Successfully unpacked environment to '{}'",
86+
target_env_path.display()
7787
);
78-
ExitCode::FAILURE
79-
})?;
80-
info!(
81-
"Successfully unpacked environment to '{}'",
82-
target_env_path.display()
83-
);
84-
88+
}
8589
info!("Running 'conda-unpack' in the new environment to fix paths...");
8690
let result = micromamba.stream_if_verbose(vec!["run", "--name", &env_name, "conda-unpack"]);
8791
let rc = result.exit_code();

src/micromamba/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,10 @@ impl<'a> Micromamba<'a> {
234234
///
235235
/// If `force` is true, delete any pre-existing environment/directory at this path.
236236
pub fn create_env_dir(&self, name: &str, force: bool) -> Result<PathBuf, std::io::Error> {
237+
if self.config.noop_mode {
238+
info!("Using fake directory path due to no-op mode");
239+
return Ok(PathBuf::from("/no-op/mode/path/for/env"));
240+
}
237241
let env_path = match self.path_for_env(name) {
238242
Some(path) => path,
239243
None => {

0 commit comments

Comments
 (0)