Packages

A gleam Wrapper for Git

Current section

Files

Jump to
ggleam src ggleam.gleam
Raw

src/ggleam.gleam

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("")
}
}