import gleam/io import gleam/list import argv import gleam/erlang/charlist import simplifile import gleam/result.{is_ok, unwrap} @external(erlang, "os", "cmd") fn execute(cmd: charlist.Charlist) -> String pub fn main() { let repo_dir = "/Users/taradruffel/.workspace/repos" case argv.load().arguments { ["clone", repo] -> clone_repo(repo, repo_dir) ["pull"] -> pull_all(repo_dir) ["delete", name] -> delete_repo(name, repo_dir) _ -> io.print("test") } } pub fn clone_repo(repo: String, repo_dir: String) -> Nil { execute(charlist.from_string("git " <> "clone " <> repo_dir <> repo)) |> io.println() } pub fn pull_all(repo_dir: String){ let res = simplifile.read_directory(at: repo_dir) let dirs = unwrap(res, []) list.each(dirs, fn(x) { let path = repo_dir <> "/" <> x simplifile.read_directory(path) |> unwrap([]) |> list.each(fn(y) { case y { ".git" -> execute(charlist.from_string("git -C " <> path <> " pull")) |> io.println() _ -> io.print("") } }) }) } pub fn delete_repo(name: String, repo_dir: String) -> Nil { let okay = simplifile.delete(file_or_dir_at: repo_dir <> name) case okay { _is_ok -> io.print("") } }