Initial commit. Broken.
This commit is contained in:
commit
a0d5b83a80
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
target
|
4
Cargo.lock
generated
Normal file
4
Cargo.lock
generated
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[root]
|
||||||
|
name = "j"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
6
Cargo.toml
Normal file
6
Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[package]
|
||||||
|
name = "j"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Casey Rodarmor <casey@rodarmor.com>"]
|
||||||
|
|
||||||
|
[dependencies]
|
84
src/main.rs
Normal file
84
src/main.rs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
use std::io::prelude::*;
|
||||||
|
|
||||||
|
fn can(command: &str) -> bool {
|
||||||
|
if let Ok(paths) = std::env::var("PATH") {
|
||||||
|
for path in paths.split(":") {
|
||||||
|
let candidate = format!("{}/{}", path, command);
|
||||||
|
if isfile(&candidate) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn isfile(path: &str) -> bool {
|
||||||
|
if let Ok(metadata) = std::fs::metadata(path) {
|
||||||
|
metadata.is_file()
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cwd() -> String {
|
||||||
|
match std::env::current_dir() {
|
||||||
|
Ok(pathbuf) => pathbuf.to_str().unwrap_or_else(|| panic!("cwd: cwd was not a valid utf8 string")).to_string(),
|
||||||
|
Err(err) => panic!("cwd: {}", err),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cd(path: &str) {
|
||||||
|
if let Err(err) = std::env::set_current_dir(path) {
|
||||||
|
panic!("cd: {}", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn say(s: &str) {
|
||||||
|
println!("{}", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn warn(s: &str) {
|
||||||
|
if let Err(err) = std::io::stderr().write(s.as_bytes()) {
|
||||||
|
panic!("warn: could not write to stderr: {}", err);
|
||||||
|
}
|
||||||
|
if let Err(err) = std::io::stderr().write("\n".as_bytes()) {
|
||||||
|
panic!("warn: could not write to stderr: {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn die(s: &str) {
|
||||||
|
warn(s);
|
||||||
|
std::process::exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let can_make = can("make");
|
||||||
|
let can_gmake = can("gmake");
|
||||||
|
if !(can_make || can_gmake) {
|
||||||
|
die("cannot find \"make\" or \"gmake\" in $PATH");
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("can make: {}", can_make);
|
||||||
|
println!("can gmake: {}", can_gmake);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if isfile("justfile") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if cwd() == "/" {
|
||||||
|
die("No justfile found.")
|
||||||
|
}
|
||||||
|
cd("..");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let recipes: Vec<String> = std::env::args().skip(1).take_while(|arg| arg != "--").collect();
|
||||||
|
let arguments: Vec<String> = std::env::args().skip(1 + recipes.len() + 1).collect();
|
||||||
|
|
||||||
|
print!("{:?}", recipes);
|
||||||
|
print!("{:?}", arguments);
|
||||||
|
|
||||||
|
// export as $ARG0 -> ARGX
|
||||||
|
// start at 0 or 1?
|
||||||
|
// exec $MAKE MAKEFLAGS='' --always-make --no-print-directory -f justfile ${RECIPES[*]}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user