Skip to content

Commit 9cdbaec

Browse files
authored
Merge pull request #14 from sagiegurari/0.6.3
0.6.3
2 parents e1346f5 + afe499c commit 9cdbaec

5 files changed

Lines changed: 33 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## CHANGELOG
22

3+
### v0.6.3
4+
5+
* Support custom working directory #13
6+
37
### v0.6.2 (2020-02-17)
48

59
* Use fsio crate for file system apis.

src/runner.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ mod runner_test;
1010
use crate::types::{ErrorInfo, IoOptions, ScriptError, ScriptOptions};
1111
use fsio;
1212
use fsio::error::FsIOError;
13+
use fsio::path::from_path::FromPath;
1314
use std::env::current_dir;
1415
use std::process::{Child, Command, ExitStatus, Stdio};
1516

@@ -82,6 +83,12 @@ fn modify_script(script: &String, options: &ScriptOptions) -> Result<String, Scr
8283
// create cd command
8384
let mut cd_command = "cd ".to_string();
8485
cd_command.push_str(cwd);
86+
if let Some(ref working_directory) = options.working_directory {
87+
cd_command.push_str(" && cd ");
88+
let working_directory_string: String =
89+
FromPath::from_path(&working_directory);
90+
cd_command.push_str(&working_directory_string);
91+
}
8592

8693
let mut script_lines: Vec<String> = script
8794
.trim()

src/runner_test.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::*;
22
use std::env::current_dir;
3-
use std::path::Path;
3+
use std::path::{Path, PathBuf};
44

55
#[test]
66
fn create_script_file_and_delete() {
@@ -59,6 +59,22 @@ fn modify_script_exit_on_error() {
5959
assert_eq!(script, expected_script);
6060
}
6161

62+
#[test]
63+
fn modify_script_working_directory() {
64+
let mut options = ScriptOptions::new();
65+
options.working_directory = Some(PathBuf::from("/usr/me/home"));
66+
67+
let cwd = current_dir().unwrap();
68+
let mut expected_script = "".to_string();
69+
expected_script.push_str("cd ");
70+
expected_script.push_str(cwd.to_str().unwrap());
71+
expected_script.push_str(" && cd /usr/me/home\necho test\n\n");
72+
73+
let script = modify_script(&"echo test".to_string(), &options).unwrap();
74+
75+
assert_eq!(script, expected_script);
76+
}
77+
6278
#[test]
6379
fn modify_script_print_commands() {
6480
let mut options = ScriptOptions::new();

src/types.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::error;
1212
use std::fmt;
1313
use std::fmt::Display;
1414
use std::io::Error;
15+
use std::path::PathBuf;
1516

1617
#[derive(Debug)]
1718
/// Holds the error information
@@ -57,6 +58,8 @@ impl Display for ScriptError {
5758
pub struct ScriptOptions {
5859
/// Defines the requested runner (defaults to cmd in windows and sh for other platforms)
5960
pub runner: Option<String>,
61+
/// The working directory of the invocation
62+
pub working_directory: Option<PathBuf>,
6063
/// Default is IoOptions::Inherit
6164
pub input_redirection: IoOptions,
6265
/// Default is IoOptions::Pipe (only pipe enables to capture the output)
@@ -83,6 +86,7 @@ impl ScriptOptions {
8386
pub fn new() -> ScriptOptions {
8487
ScriptOptions {
8588
runner: None,
89+
working_directory: None,
8690
input_redirection: IoOptions::Inherit,
8791
output_redirection: IoOptions::Pipe,
8892
exit_on_error: false,

src/types_test.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ fn script_options_new() {
2121
let options = ScriptOptions::new();
2222

2323
assert!(options.runner.is_none());
24+
assert!(options.working_directory.is_none());
2425
assert_eq!(options.input_redirection, IoOptions::Inherit);
2526
assert_eq!(options.output_redirection, IoOptions::Pipe);
2627
assert!(!options.exit_on_error);

0 commit comments

Comments
 (0)