File src/backend/add.rs changed (mode: 100644) (index 9fe9717..d94694a) |
... |
... |
extern crate serde_json; |
3 |
3 |
use std::result::Result; |
use std::result::Result; |
4 |
4 |
use std::path::PathBuf; |
use std::path::PathBuf; |
5 |
5 |
|
|
6 |
|
pub fn add<I>(args: &mut I) -> Result<String, String> where I: Iterator<Item=String> { |
|
|
6 |
|
pub fn add(args: &Vec<String>) -> Result<String, String> { |
|
7 |
|
let mut it = args.iter().peekable(); |
7 |
8 |
let dep_dir: PathBuf; |
let dep_dir: PathBuf; |
8 |
9 |
|
|
9 |
|
let dep_name = match args.next() { |
|
10 |
|
Some(name) => name, |
|
|
10 |
|
let dep_name: String = match it.next() { |
|
11 |
|
Some(arg) => (*arg).clone(), |
11 |
12 |
None => return Err(String::from("Missing dependency name!")) |
None => return Err(String::from("Missing dependency name!")) |
12 |
13 |
}; |
}; |
13 |
14 |
|
|
|
... |
... |
pub fn add<I>(args: &mut I) -> Result<String, String> where I: Iterator<Item=Str |
23 |
24 |
return Err(String::from("Dependency already exists.")) |
return Err(String::from("Dependency already exists.")) |
24 |
25 |
} |
} |
25 |
26 |
|
|
26 |
|
let mut args: String = args.into_iter().map(|arg| arg + " ").collect(); |
|
|
27 |
|
let mut args_s: String = it.map(|arg| arg.clone() + " ").collect(); |
27 |
28 |
|
|
28 |
|
match args.pop() { |
|
29 |
|
Some(_) => update_module(dep_name, args), |
|
|
29 |
|
match args_s.pop() { |
|
30 |
|
Some(_) => update_module(dep_name, args_s), |
30 |
31 |
None => update_module(dep_name, String::new()) |
None => update_module(dep_name, String::new()) |
31 |
32 |
} |
} |
32 |
33 |
} |
} |
File src/backend/filesystem.rs changed (mode: 100644) (index e7d35ba..3a5e3b9) |
1 |
1 |
use std::{path, env, fs}; |
use std::{path, env, fs}; |
2 |
2 |
use std::io::{Result, Error, ErrorKind}; |
use std::io::{Result, Error, ErrorKind}; |
3 |
3 |
|
|
4 |
|
fn get_root (mut path: path::PathBuf) -> Option<path::PathBuf> { |
|
|
4 |
|
fn get_root(mut path: path::PathBuf) -> Option<path::PathBuf> { |
5 |
5 |
loop { |
loop { |
6 |
6 |
let mut config = path.clone(); |
let mut config = path.clone(); |
7 |
7 |
config.push("beheer.json"); |
config.push("beheer.json"); |
File src/backend/git/exe.rs added (mode: 100644) (index 0000000..3102c93) |
|
1 |
|
use backend; |
|
2 |
|
use backend::system::OS; |
|
3 |
|
use backend::deptree::Node; |
|
4 |
|
use std::process::{Command, Stdio}; |
|
5 |
|
use std::path::PathBuf; |
|
6 |
|
|
|
7 |
|
pub fn exe_rec(args: Vec<String>) -> Result<(), String> { |
|
8 |
|
let tree: Node; |
|
9 |
|
let mut dependency: &Node; |
|
10 |
|
|
|
11 |
|
match backend::filesystem::get_current_project_root() { |
|
12 |
|
Some(path) => { |
|
13 |
|
match backend::deptree::print(&OS::current(), path) { |
|
14 |
|
Ok(node) => { |
|
15 |
|
tree = node; |
|
16 |
|
dependency = &tree; |
|
17 |
|
}, |
|
18 |
|
Err(e) => return Err(e) |
|
19 |
|
} |
|
20 |
|
} |
|
21 |
|
None => return Err(String::from("Not in a project (sub)directory.")) |
|
22 |
|
} |
|
23 |
|
|
|
24 |
|
loop { |
|
25 |
|
match to_shell(&dependency.path, args.clone()) { |
|
26 |
|
Ok(msg) => { |
|
27 |
|
println!("{}", msg); |
|
28 |
|
println!("Module {}: {}\n", dependency.name, "Git command successfully executed!"); |
|
29 |
|
}, |
|
30 |
|
Err(e) => return Err(e) |
|
31 |
|
} |
|
32 |
|
|
|
33 |
|
match dependency.depends_on.iter().next() { |
|
34 |
|
Some(dep) => dependency = dep, |
|
35 |
|
None => break |
|
36 |
|
} |
|
37 |
|
} |
|
38 |
|
Ok(()) |
|
39 |
|
} |
|
40 |
|
|
|
41 |
|
pub fn exe(path: &PathBuf, args: Vec<String>) -> Result<(), String> { |
|
42 |
|
match to_shell(path, args) { |
|
43 |
|
Ok(msg) => { |
|
44 |
|
println!("{}", msg); |
|
45 |
|
println!("Git command successfully executed!"); |
|
46 |
|
Ok(()) |
|
47 |
|
}, |
|
48 |
|
Err(e) => Err(e) |
|
49 |
|
} |
|
50 |
|
} |
|
51 |
|
|
|
52 |
|
fn to_shell<I>(path: &PathBuf, args: I) -> Result<String, String> where I: IntoIterator<Item=String> { |
|
53 |
|
let out = Command::new("git") |
|
54 |
|
.current_dir(path) |
|
55 |
|
.args(args) |
|
56 |
|
.stdin(Stdio::inherit()) |
|
57 |
|
.stdout(Stdio::inherit()) |
|
58 |
|
.output(); |
|
59 |
|
|
|
60 |
|
match out { |
|
61 |
|
Ok(response) => { |
|
62 |
|
match response.status.success() { |
|
63 |
|
true => Ok(String::from_utf8_lossy(&response.stdout).to_string()), |
|
64 |
|
false => Err(String::from_utf8_lossy(&response.stderr).to_string()) |
|
65 |
|
} |
|
66 |
|
}, |
|
67 |
|
Err(e) => { |
|
68 |
|
let mut error = String::from("Git (sub)command failed: command invalid. Details: "); |
|
69 |
|
error.push_str(&e.to_string()); |
|
70 |
|
Err(error) |
|
71 |
|
} |
|
72 |
|
} |
|
73 |
|
} |
File src/backend/git/ignore.rs changed (mode: 100644) (index 2b17844..8f135f3) |
1 |
|
use std::io::Write; |
|
|
1 |
|
use std::io::{ErrorKind, Write}; |
2 |
2 |
use std::path::PathBuf; |
use std::path::PathBuf; |
3 |
3 |
use std::fs::OpenOptions; |
use std::fs::OpenOptions; |
4 |
4 |
|
|
|
... |
... |
pub fn add(path: &mut PathBuf, item: &mut String) -> Result<(), String> { |
8 |
8 |
|
|
9 |
9 |
let file_options = OpenOptions::new() |
let file_options = OpenOptions::new() |
10 |
10 |
.append(true) |
.append(true) |
11 |
|
.open(path); |
|
|
11 |
|
.open(&path); |
12 |
12 |
|
|
13 |
13 |
match file_options { |
match file_options { |
14 |
14 |
Ok(mut file) => { |
Ok(mut file) => { |
|
... |
... |
pub fn add(path: &mut PathBuf, item: &mut String) -> Result<(), String> { |
17 |
17 |
Err(e) => Err(e.to_string()) |
Err(e) => Err(e.to_string()) |
18 |
18 |
} |
} |
19 |
19 |
}, |
}, |
20 |
|
Err(e) => Err(e.to_string()) |
|
|
20 |
|
Err(e) => { |
|
21 |
|
match e.kind() { |
|
22 |
|
ErrorKind::NotFound => { |
|
23 |
|
let mut error = String::from(path.to_str().unwrap()); |
|
24 |
|
error.push_str(" not found"); |
|
25 |
|
Err(error) |
|
26 |
|
}, |
|
27 |
|
ErrorKind::PermissionDenied => Err(String::from("gitignore file unreadable: permission denied.")), |
|
28 |
|
_ => Err(e.to_string()) |
|
29 |
|
} |
|
30 |
|
} |
21 |
31 |
} |
} |
22 |
32 |
} |
} |
File src/backend/git/mod.rs changed (mode: 100644) (index bf699b5..07c06c2) |
1 |
|
mod rec; |
|
2 |
1 |
pub mod status; |
pub mod status; |
3 |
2 |
pub mod ignore; |
pub mod ignore; |
|
3 |
|
mod exe; |
|
4 |
|
|
|
5 |
|
pub fn to_shell<I>(args: &mut I) where I: Iterator<Item=String> { |
|
6 |
|
match args.next() { |
|
7 |
|
Some(ref arg) if arg == "rec" => match exe::exe_rec(args.collect()) { |
|
8 |
|
Ok(_) => {}, |
|
9 |
|
Err(e) => println!("Executing recursive git command failed. Details: {}", e) |
|
10 |
|
}, |
|
11 |
|
Some(git) => { |
|
12 |
|
let path = match super::filesystem::get_current_project_root() { |
|
13 |
|
Some(result) => result, |
|
14 |
|
None => { |
|
15 |
|
println!("Executing git command failed. Details: {}", "Not in a project (sub)directory."); |
|
16 |
|
return; |
|
17 |
|
} |
|
18 |
|
}; |
|
19 |
|
|
|
20 |
|
let mut args: Vec<String> = args.collect(); |
|
21 |
|
args.insert(0, git); |
|
22 |
|
|
|
23 |
|
match exe::exe(&path, args) { |
|
24 |
|
Ok(_) => {}, |
|
25 |
|
Err(e) => println!("Executing git command failed. Details: {}", e) |
|
26 |
|
} |
|
27 |
|
}, |
|
28 |
|
None => {} |
|
29 |
|
} |
|
30 |
|
} |
File src/backend/project.rs changed (mode: 100644) (index 83054f2..7540211) |
... |
... |
pub fn delete<I>(path: &mut I) -> Result<String, String> where I: Iterator<Item= |
95 |
95 |
} |
} |
96 |
96 |
} |
} |
97 |
97 |
|
|
98 |
|
pub fn ignore<I>(args: &mut I) -> Result<(), String> where I: Iterator<Item=String> { |
|
99 |
|
let mut path = match args.next() { |
|
100 |
|
Some(arg) => arg, |
|
|
98 |
|
pub fn add(args: &Vec<String>) -> Result<String, String> { |
|
99 |
|
let mut path: String = match args.get(0) { |
|
100 |
|
Some(arg) => arg.clone(), |
101 |
101 |
None => return Err(String::from("Missing path as argument.")) |
None => return Err(String::from("Missing path as argument.")) |
102 |
102 |
}; |
}; |
103 |
103 |
|
|
104 |
|
match env::current_dir() { |
|
105 |
|
Ok(mut dir) => super::git::ignore::add(&mut dir, &mut path), |
|
|
104 |
|
match super::filesystem::get_current_module_root() { |
|
105 |
|
Some(dir) => { |
|
106 |
|
match super::git::ignore::add(&mut dir.clone(), &mut path) { |
|
107 |
|
Ok(_) => {}, |
|
108 |
|
Err(e) => return Err(e) |
|
109 |
|
} |
|
110 |
|
|
|
111 |
|
match super::add::add(args) { |
|
112 |
|
Ok(msg) => println!("{}", msg), |
|
113 |
|
Err(e) => return Err(e) |
|
114 |
|
} |
|
115 |
|
|
|
116 |
|
match super::config::get_json(dir) { |
|
117 |
|
Ok(json) => { |
|
118 |
|
super::dep::check(json) |
|
119 |
|
}, |
|
120 |
|
Err(e) => return Err(e) |
|
121 |
|
} |
|
122 |
|
}, |
|
123 |
|
None => Err(String::from("Not in a project (sub)directory.")) |
|
124 |
|
} |
|
125 |
|
} |
|
126 |
|
|
|
127 |
|
pub fn ignore(args: &Vec<String>) -> Result<(), String> { |
|
128 |
|
let mut entry: String = args.get(0).unwrap().clone(); |
|
129 |
|
|
|
130 |
|
match super::filesystem::get_current_dep_root() { |
|
131 |
|
Ok(mut dir) => { |
|
132 |
|
dir.push(&entry); |
|
133 |
|
super::git::ignore::add(&mut dir, &mut entry) // entry moet "beheer.json" worden. |
|
134 |
|
}, |
106 |
135 |
Err(e) => Err(e.to_string()) |
Err(e) => Err(e.to_string()) |
107 |
136 |
} |
} |
108 |
137 |
} |
} |
|
... |
... |
pub fn help() { |
128 |
157 |
println!("$ beheer [FLAG] [COMMAND [ARGUMENTS]]"); |
println!("$ beheer [FLAG] [COMMAND [ARGUMENTS]]"); |
129 |
158 |
println!(""); |
println!(""); |
130 |
159 |
|
|
131 |
|
println!("--help -h\t\tShow this message"); |
|
|
160 |
|
println!("--help -h\t\t\t\tShow this message"); |
132 |
161 |
println!(""); |
println!(""); |
133 |
162 |
|
|
134 |
163 |
println!("init [DIRECTORY]\t\t Initialize new project in specified directory. Defaults to current directory."); |
println!("init [DIRECTORY]\t\t Initialize new project in specified directory. Defaults to current directory."); |
File src/parser.rs changed (mode: 100644) (index cca6685..9d1a6ea) |
... |
... |
fn parse<I>(args: &mut I, open_shell: bool) -> bool where I: Iterator<Item=Strin |
43 |
43 |
} |
} |
44 |
44 |
} |
} |
45 |
45 |
else if argument == "add" { |
else if argument == "add" { |
46 |
|
match backend::add::add(args) { |
|
|
46 |
|
match backend::project::add(&args.collect()) { |
47 |
47 |
Ok(msg) => println!("{}", msg), |
Ok(msg) => println!("{}", msg), |
48 |
48 |
Err(e) => println!("Could not add dependency: {}", e) |
Err(e) => println!("Could not add dependency: {}", e) |
49 |
49 |
} |
} |
50 |
50 |
} |
} |
51 |
51 |
else if argument == "hide" { |
else if argument == "hide" { |
52 |
|
let result = match backend::project::ignore(args) { |
|
53 |
|
Ok(_) => backend::add::add(args), |
|
54 |
|
Err(e) => Err(e) |
|
55 |
|
}; |
|
56 |
|
|
|
57 |
|
match result { |
|
|
52 |
|
let args: Vec<String> = args.collect(); |
|
53 |
|
match backend::project::add(&args) { |
58 |
54 |
Ok(msg) => println!("{}", msg), |
Ok(msg) => println!("{}", msg), |
59 |
55 |
Err(e) => println!("Could not add dependency: {}", e) |
Err(e) => println!("Could not add dependency: {}", e) |
60 |
56 |
} |
} |
|
57 |
|
|
|
58 |
|
match backend::project::ignore(&args) { |
|
59 |
|
Ok(_) => println!("DONE! Dependency hidden."), |
|
60 |
|
Err(e) => println!("Could not hide dependency: {}", e) |
|
61 |
|
} |
61 |
62 |
} |
} |
62 |
63 |
else if argument == "delete" { |
else if argument == "delete" { |
63 |
64 |
match backend::project::delete(args) { |
match backend::project::delete(args) { |
|
... |
... |
fn parse<I>(args: &mut I, open_shell: bool) -> bool where I: Iterator<Item=Strin |
71 |
72 |
Err(e) => println!("Could not deduce dependency tree: {}", e) |
Err(e) => println!("Could not deduce dependency tree: {}", e) |
72 |
73 |
} |
} |
73 |
74 |
} |
} |
|
75 |
|
else if argument == "git" { |
|
76 |
|
backend::git::to_shell(args); |
|
77 |
|
} |
74 |
78 |
else { |
else { |
75 |
79 |
return false; |
return false; |
76 |
80 |
} |
} |