From bc512c7e5d82b9accc84217cabdc7c7cf5bf17ba Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Sun, 21 Nov 2021 16:06:21 +0000 Subject: [PATCH] feat(shell): add my-clone command for cloning git repertories When cloning a repo I have all of the repertories structured on the file system by "host" "group" then "name". This command will automatically clone the repo into the correct directory based on the name and the move into the cloned repo directory. An example of a repo to be cloned is the dotfiles repo has the URL of `git@gitlab.com:AdeAttwood/dotfiles.git` so on the file system it will be in the source directory `gitlab.com/AdeAttwood/dotfiles`. This keep all of the repos well structured and searchable. --- .../core/files/oh-my-zsh/custom/git.zsh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/site-modules/core/files/oh-my-zsh/custom/git.zsh b/site-modules/core/files/oh-my-zsh/custom/git.zsh index b1253fe..7f98b5e 100644 --- a/site-modules/core/files/oh-my-zsh/custom/git.zsh +++ b/site-modules/core/files/oh-my-zsh/custom/git.zsh @@ -30,5 +30,24 @@ function grc() { git commit -t "$(git rev-parse --show-toplevel)/.git/COMMIT_TEMPLATE" } +function my-clone() { + local url="$1" + local re="^(https|git)(:\/\/|@)([^\/:]+)[\/:](.*?).git$" + + if [[ -z "$url" ]]; then + echo "ERROR: Invalid url" + return + fi + + if [[ $url =~ $re ]]; then + local protocol="${match[1]}" + local separator="${match[2]}" + local hostname="${match[3]}" + local repo="${match[4]}" + + full_path=~s/$hostname/$repo + + git clone $url ~s/$hostname/$repo + cd ~s/$hostname/$repo fi }