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

Switch to use manifest-path for cargo multi #2

Merged
merged 2 commits into from
Nov 8, 2016
Merged
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
39 changes: 28 additions & 11 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,26 @@ const CARGO: &'static str = "cargo";
const MIN_DEPTH: usize = 1;
const MAX_DEPTH: usize = 1;

fn generate_cargo_cmd(path: &PathBuf, commands: &[String]) -> Command {

let mut cargo_cmd = Command::new(CARGO);

let (command, args) = commands.split_at(1);

cargo_cmd.arg(command[0].clone());

// Insert the manifest-path option so that any logs about files are relative
// to the current directory.
cargo_cmd.arg("--manifest-path".to_string());
cargo_cmd.arg(format!("{}/Cargo.toml", path.to_string_lossy()));

for arg in args {
cargo_cmd.arg(arg);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, can't you just do:

cargo_cmd,arg("--manifest-path");
cargo_cmd.arg(...path sruff...);
for arg in &commands {
    cargo_cmd.arg(arg);
}

Then you don't need to own commands at all.


cargo_cmd
}

fn main() {

let matches = App::new(CARGO)
Expand All @@ -68,21 +88,18 @@ fn main() {
.arg_from_usage("<cmd>... 'cargo command to run'"))
.get_matches();

let mut cargo_cmd = Command::new(CARGO);
let mut banner = String::from("Executing ") + CARGO;
let commands = matches.subcommand_matches("multi")
.and_then(|m| m.values_of("cmd"))
.expect("No cargo commands provided")
.map(|arg| arg.to_string())
.collect::<Vec<_>>();

if let Some(arg_cmd) = matches.subcommand_matches("multi")
.and_then(|m| m.values_of("cmd")) {
for arg in arg_cmd {
cargo_cmd.arg(arg);
banner = banner + " " + arg;
}
}
let banner = format!("Executing {} {}", CARGO, commands.join(" "));

announce(&banner);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't this be wrong? It won't have --manifest-file in it unlike the real deal.

let is_crate = |e: &DirEntry| e.path().join("Cargo.toml").exists();
let display_path = |p: &PathBuf| println!("{}:", p.to_string_lossy());
let execute = |p: PathBuf| cargo_cmd.current_dir(p).output().ok();
let execute = move |p: PathBuf| generate_cargo_cmd(&p, &commands).output().ok();

// First check if there is a Cargo.toml file with a workspace section in.
let mut workspace_members = match File::open("Cargo.toml") {
Expand Down Expand Up @@ -141,7 +158,7 @@ fn main() {

// If there are any failed commands, return the error code of the
// first of them.
if failed_commands.len() > 0 {
if !failed_commands.is_empty() {
exit(failed_commands[0].code().unwrap());
}
}