Skip to content

Commit 5ed8cbf

Browse files
Added support for backends with arguments
1 parent 683f014 commit 5ed8cbf

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ regex = "0.2.1"
3333
tempdir = "0.3.4"
3434
itertools = "0.7.4"
3535
tempfile = "2.2.0"
36+
shlex = "0.1.1"
3637

3738
# Watch feature
3839
notify = { version = "4.0", optional = true }

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ extern crate serde;
109109
extern crate serde_derive;
110110
#[macro_use]
111111
extern crate serde_json;
112+
extern crate shlex;
112113
extern crate tempdir;
113114
extern crate tempfile;
114115
extern crate toml;

src/renderer/mod.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use std::path::PathBuf;
2020
use std::process::Command;
2121
use serde_json;
2222
use tempfile;
23+
use shlex::Shlex;
2324

2425
use errors::*;
2526
use config::Config;
@@ -126,6 +127,22 @@ impl CmdRenderer {
126127
pub fn new(name: String, cmd: String) -> CmdRenderer {
127128
CmdRenderer { name, cmd }
128129
}
130+
131+
fn compose_command(&self) -> Result<Command> {
132+
let mut words = Shlex::new(&self.cmd);
133+
let executable = match words.next() {
134+
Some(e) => e,
135+
None => bail!("Command string was empty"),
136+
};
137+
138+
let mut cmd = Command::new(executable);
139+
140+
for arg in words {
141+
cmd.arg(arg);
142+
}
143+
144+
Ok(cmd)
145+
}
129146
}
130147

131148
impl Renderer for CmdRenderer {
@@ -145,8 +162,9 @@ impl Renderer for CmdRenderer {
145162
serde_json::to_writer(&mut temp, &ctx)
146163
.chain_err(|| "Unable to serialize the RenderContext")?;
147164

148-
let status = Command::new(&self.cmd)
165+
let status = self.compose_command()?
149166
.stdin(temp)
167+
.current_dir(&ctx.destination)
150168
.status()
151169
.chain_err(|| "Unable to start the renderer")?;
152170

0 commit comments

Comments
 (0)