Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix installer options usage #502

Merged
merged 1 commit into from
Mar 27, 2023
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
57 changes: 32 additions & 25 deletions src/bin/huak/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ use crate::error::{CliResult, Error};
use clap::{Command, CommandFactory, Parser, Subcommand};
use clap_complete::{self, Shell};
use huak::{
ops::{
self, find_workspace, CleanOptions, OperationConfig, TerminalOptions,
WorkspaceOptions,
},
Error as HuakError, HuakResult, Verbosity,
ops::{self, find_workspace, OperationConfig},
BuildOptions, CleanOptions, Error as HuakError, FormatOptions, HuakResult,
InstallerOptions, LintOptions, PublishOptions, TerminalOptions,
TestOptions, Verbosity, WorkspaceOptions,
};
use std::{
fs::File,
Expand Down Expand Up @@ -182,14 +181,16 @@ impl Cli {
group,
trailing,
} => {
operation_config.trailing_command_parts = trailing;
operation_config.installer_options =
Some(InstallerOptions { args: trailing });
add(dependencies, group, operation_config)
}
Commands::Audit => {
Err(HuakError::UnimplementedError("audit".to_string()))
}
Commands::Build { trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.build_options =
Some(BuildOptions { args: trailing });
build(operation_config)
}
Commands::Clean {
Expand All @@ -207,21 +208,23 @@ impl Cli {
Err(HuakError::UnimplementedError("doc".to_string()))
}
Commands::Fix { trailing } => {
operation_config.trailing_command_parts = trailing;
if let Some(it) =
operation_config.trailing_command_parts.as_mut()
{
it.push("--fix".to_string());
operation_config.lint_options =
Some(LintOptions { args: trailing });
if let Some(it) = operation_config.lint_options.as_mut() {
if let Some(a) = it.args.as_mut() {
a.push("--fix".to_string());
}
}
fix(operation_config)
}
Commands::Fmt { check, trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.format_options =
Some(FormatOptions { args: trailing });
if check {
if let Some(it) =
operation_config.trailing_command_parts.as_mut()
{
it.push("--check".to_string());
if let Some(it) = operation_config.format_options.as_mut() {
if let Some(a) = it.args.as_mut() {
a.push("--check".to_string());
}
}
}
fmt(operation_config)
Expand All @@ -231,16 +234,18 @@ impl Cli {
init(app, lib, operation_config)
}
Commands::Install { groups, trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.installer_options =
Some(InstallerOptions { args: trailing });
install(groups, operation_config)
}
Commands::Lint { fix, trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.lint_options =
Some(LintOptions { args: trailing });
if fix {
if let Some(it) =
operation_config.trailing_command_parts.as_mut()
{
it.push("--fix".to_string());
if let Some(it) = operation_config.lint_options.as_mut() {
if let Some(a) = it.args.as_mut() {
a.push("--fix".to_string());
}
}
}
lint(operation_config)
Expand All @@ -257,7 +262,8 @@ impl Cli {
new(app, lib, operation_config)
}
Commands::Publish { trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.publish_options =
Some(PublishOptions { args: trailing });
publish(operation_config)
}
Commands::Remove {
Expand All @@ -266,7 +272,8 @@ impl Cli {
} => remove(dependencies, group, operation_config),
Commands::Run { command } => run(command, operation_config),
Commands::Test { trailing } => {
operation_config.trailing_command_parts = trailing;
operation_config.test_options =
Some(TestOptions { args: trailing });
test(operation_config)
}
Commands::Update { dependency: _ } => {
Expand Down
38 changes: 36 additions & 2 deletions src/huak/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use std::{
str::FromStr,
};
use sys::Terminal;
pub use sys::Verbosity;
pub use sys::{TerminalOptions, Verbosity};

mod error;
mod fs;
Expand Down Expand Up @@ -546,10 +546,11 @@ impl VirtualEnvironment {
pub fn install_packages(
&self,
packages: &[Package],
install_options: Option<&InstallerOptions>,
terminal: &mut Terminal,
) -> HuakResult<()> {
for package in packages {
self.installer.install(package, terminal)?;
self.installer.install(package, install_options, terminal)?;
}
Ok(())
}
Expand Down Expand Up @@ -682,10 +683,16 @@ impl Installer {
pub fn install(
&self,
package: &Package,
options: Option<&InstallerOptions>,
terminal: &mut Terminal,
) -> HuakResult<()> {
let mut cmd = Command::new(self.config.path.clone());
cmd.arg("install").arg(package.dependency_string());
if let Some(it) = options {
if let Some(args) = it.args.as_ref() {
cmd.args(args.iter().map(|item| item.as_str()));
}
}
terminal.run_command(&mut cmd)
}

Expand Down Expand Up @@ -713,6 +720,10 @@ impl InstallerConfig {
}
}

pub struct InstallerOptions {
pub args: Option<Vec<String>>,
}

/// The python package compliant with packaging.python.og.
/// See <https://peps.python.org/pep-0440/>
/// # Examples
Expand Down Expand Up @@ -924,6 +935,29 @@ pub struct PackageInfo {
pub yanked_reason: serde_json::value::Value,
}

pub struct WorkspaceOptions {
pub uses_git: bool,
}
pub struct BuildOptions {
pub args: Option<Vec<String>>,
}
pub struct FormatOptions {
pub args: Option<Vec<String>>,
}
pub struct LintOptions {
pub args: Option<Vec<String>>,
}
pub struct PublishOptions {
pub args: Option<Vec<String>>,
}
pub struct TestOptions {
pub args: Option<Vec<String>>,
}
pub struct CleanOptions {
pub include_pycache: bool,
pub include_compiled_bytecode: bool,
}

/// Get an iterator over available Python interpreter paths parsed from PATH.
/// Inspired by brettcannon/python-launcher
pub fn find_python_interpreter_paths(
Expand Down
Loading