Last active
September 27, 2022 11:21
-
-
Save zoren/371baf6afbc2327832bb86ae70d5c4cd to your computer and use it in GitHub Desktop.
babashka script to git clone repos in to hostname/path subpath
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bb | |
(ns clone | |
"clones a git repo to a path given by its url and opens a new shell at that path | |
clone.clj https://github.com/babashka/sci will clone to ~/github.com/babashka/sci" | |
(:require | |
[clojure.java.io :as io] | |
[clojure.string :as str] | |
[babashka.fs :as fs] | |
[babashka.process :refer [process check shell]])) | |
(def repo-path (System/getenv "HOME")) | |
(let [[url] *command-line-args* | |
_ (when-not url | |
(throw (ex-info "missing url" {}))) | |
_ (shell "git ls-remote" url) | |
{:keys [host file]} (bean (io/as-url url)) | |
file (if (str/ends-with? file ".git") | |
(subs file 0 (- (count file) (count ".git"))) | |
file) | |
destination-dir (fs/path repo-path (str host file))] | |
(when (fs/exists? destination-dir) | |
(throw (ex-info "destination directory already exists, maybe you already cloned this" | |
{:dir destination-dir}))) | |
(fs/create-dirs destination-dir) | |
(-> (process ['git 'clone url destination-dir] {:out :inherit | |
:err :inherit}) | |
check) | |
(shell {:dir (str destination-dir)} (System/getenv "SHELL")) | |
nil) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment