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