Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/env/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ pub fn run(config: Config, subcommand: Subcommand) -> Result<(), ExitCode> {
Subcommand::Run(args) => run::run(micromamba, args),
Subcommand::Activate(args) => activate::run(micromamba, args),
Subcommand::Deactivate => deactivate::run(),
Subcommand::Pack(args) => pack::run(micromamba, args),
Subcommand::Unpack(args) => unpack::run(micromamba, args),
Subcommand::Pack(args) => pack::run(micromamba, args, &config),
Subcommand::Unpack(args) => unpack::run(micromamba, args, &config),
}
}
5 changes: 3 additions & 2 deletions src/env/pack.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::csmrc::Config;
use crate::env::{CommonArgs, env_name};
use crate::micromamba::Micromamba;

Expand All @@ -19,7 +20,7 @@ pub struct Args {
pub force: bool,
}

pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
pub fn run(micromamba: Micromamba, args: Args, config: &Config) -> Result<(), ExitCode> {
let env_name = env_name(args.common.name, &args.common.env_file)?;
let Some(bin_path) = micromamba.bin_path_for_env(&env_name) else {
error!(
Expand All @@ -34,7 +35,7 @@ pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
"conda-pack"
};
let conda_pack = bin_path.join(binary_name);
if !conda_pack.exists() {
if !config.noop_mode && !conda_pack.exists() {
debug!("Path does not exist: {:?}", conda_pack);
error!(
"conda-pack was not found in the environment. It must be installed to use this command."
Expand Down
30 changes: 17 additions & 13 deletions src/env/unpack.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::csmrc::Config;
use crate::env::dump_micromamba_captured_output_on_error;
use crate::micromamba::Micromamba;

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

pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
pub fn run(micromamba: Micromamba, args: Args, config: &Config) -> Result<(), ExitCode> {
let env_name = match args.name {
Some(name) => name,
None => match archive_name_to_env_name(&args.archive_path) {
Expand Down Expand Up @@ -69,19 +70,22 @@ pub fn run(micromamba: Micromamba, args: Args) -> Result<(), ExitCode> {
})?;
let decompressor = flate2::read::GzDecoder::new(archive_file);
let mut archive = tar::Archive::new(decompressor);
archive.unpack(&target_env_path).map_err(|e| {
error!(
"Could not unpack archive to '{}': {}",
target_env_path.display(),
e
if config.noop_mode {
info!("Prepared to unpack the environment. Not actually extracting, due to no-op mode.");
} else {
archive.unpack(&target_env_path).map_err(|e| {
error!(
"Could not unpack archive to '{}': {}",
target_env_path.display(),
e
);
ExitCode::FAILURE
})?;
info!(
"Successfully unpacked environment to '{}'",
target_env_path.display()
);
ExitCode::FAILURE
})?;
info!(
"Successfully unpacked environment to '{}'",
target_env_path.display()
);

}
info!("Running 'conda-unpack' in the new environment to fix paths...");
let result = micromamba.stream_if_verbose(vec!["run", "--name", &env_name, "conda-unpack"]);
let rc = result.exit_code();
Expand Down
7 changes: 7 additions & 0 deletions src/micromamba/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,9 @@ impl<'a> Micromamba<'a> {

/// Query micromamba to try to determine the path for an environment
pub fn path_for_env(&self, name: &str) -> Option<PathBuf> {
if self.config.noop_mode {
return Some(PathBuf::from("/no-op/mode/path/for/env"));
}
let result = self.capture(vec!["info", "--name", name, "--json"]);
let MicromambaResult::CapturedOutput(output) = result else {
return None;
Expand All @@ -231,6 +234,10 @@ impl<'a> Micromamba<'a> {
///
/// If `force` is true, delete any pre-existing environment/directory at this path.
pub fn create_env_dir(&self, name: &str, force: bool) -> Result<PathBuf, std::io::Error> {
if self.config.noop_mode {
info!("Using fake directory path due to no-op mode");
return Ok(PathBuf::from("/no-op/mode/path/for/env"));
}
let env_path = match self.path_for_env(name) {
Some(path) => path,
None => {
Expand Down