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
1010 stdin: std::process::Stdio,
1111 stdout: std::process::Stdio,
1212 stderr: std::process::Stdio,
13+ args: Vec<OsString>,
1314 use_shell: bool,
1415 }
1516
@@ -43,6 +44,12 @@ mod prepare { · 27 unmodified lines
4344 self.stderr = stdio;
4445 self
4546 }
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+ }
4653 }
4754
4855 /// Finalization
@@ -55,16 +62,23 @@ mod prepare { · 6 unmodified lines
5562 }
5663
5764 impl Into<Command> for Prepare {
58− fn into(self) -> Command {
65+ fn into(mut self) -> Command {
5966 let mut cmd = if self.use_shell {
6067 let mut cmd = Command::new(if cfg!(windows) { "sh" } else { "/bin/sh" });
6168 cmd.arg("-c");
69+ if !self.args.is_empty() {
70+ self.command.push(" \"$@\"")
71+ }
6272 cmd.arg(self.command);
73+ cmd.arg("--");
6374 cmd
6475 } else {
6576 Command::new(self.command)
6677 };
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);
6882 cmd
6983 }
7084 }
@@ -83,6 +97,7 @@ pub fn prepare(cmd: impl Into<OsString>) -> Prepare { · 12 unmodified lines
8397 stdin: std::process::Stdio::null(),
8498 stdout: std::process::Stdio::piped(),
8599 stderr: std::process::Stdio::null(),
100+ args: Vec::new(),
86101 use_shell: false,
87102 }
88103 }