History

support for multiple arguments with shell-script support (#450)

Sebastian Thiel committed 4 years ago

Commit d8e8b541 parent 1cb2e962 files · +44 −2Browse files

Showing the changes to git-command/src (1 of 2 files). Show all

Unified · Split

git-command/src/lib.rs+17−2
@@ -10,6 +10,7 @@ pub struct Prepare { · 9 unmodified lines
10 stdin: std::process::Stdio,10 stdin: std::process::Stdio,
11 stdout: std::process::Stdio,11 stdout: std::process::Stdio,
12 stderr: std::process::Stdio,12 stderr: std::process::Stdio,
13 args: Vec<OsString>,
13 use_shell: bool,14 use_shell: bool,
14}15}
15 16
@@ -43,6 +44,12 @@ mod prepare { · 27 unmodified lines
43 self.stderr = stdio;44 self.stderr = stdio;
44 self45 self
45 }46 }
47
48 /// Add `arg` to the list of arguments to call the command with.
49 pub fn arg(mut self, arg: impl Into<std::ffi::OsString>) -> Self {
50 self.args.push(arg.into());
51 self
52 }
46 }53 }
47 54
48 /// Finalization55 /// Finalization
@@ -55,16 +62,23 @@ mod prepare { · 6 unmodified lines
55 }62 }
56 63
57 impl Into<Command> for Prepare {64 impl Into<Command> for Prepare {
58 fn into(self) -> Command {65 fn into(mut self) -> Command {
59 let mut cmd = if self.use_shell {66 let mut cmd = if self.use_shell {
60 let mut cmd = Command::new(if cfg!(windows) { "sh" } else { "/bin/sh" });67 let mut cmd = Command::new(if cfg!(windows) { "sh" } else { "/bin/sh" });
61 cmd.arg("-c");68 cmd.arg("-c");
69 if !self.args.is_empty() {
70 self.command.push(" \"$@\"")
71 }
62 cmd.arg(self.command);72 cmd.arg(self.command);
73 cmd.arg("--");
63 cmd74 cmd
64 } else {75 } else {
65 Command::new(self.command)76 Command::new(self.command)
66 };77 };
67 cmd.stdin(self.stdin).stdout(self.stdout).stderr(self.stderr);78 cmd.stdin(self.stdin)
79 .stdout(self.stdout)
80 .stderr(self.stderr)
81 .args(self.args);
68 cmd82 cmd
69 }83 }
70 }84 }
@@ -83,6 +97,7 @@ pub fn prepare(cmd: impl Into<OsString>) -> Prepare { · 12 unmodified lines
83 stdin: std::process::Stdio::null(),97 stdin: std::process::Stdio::null(),
84 stdout: std::process::Stdio::piped(),98 stdout: std::process::Stdio::piped(),
85 stderr: std::process::Stdio::null(),99 stderr: std::process::Stdio::null(),
100 args: Vec::new(),
86 use_shell: false,101 use_shell: false,
87 }102 }
88}103}