initial
This commit is contained in:
commit
73101ac33f
22
completions/_repo
Normal file
22
completions/_repo
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#compdef repo
|
||||||
|
|
||||||
|
_arguments -s \
|
||||||
|
'1: :->cmds' \
|
||||||
|
'2: :->args' \
|
||||||
|
'*::options:->opts' && return 0
|
||||||
|
|
||||||
|
cmds=(
|
||||||
|
'get:Clone a repository'
|
||||||
|
'open:Open the repository in a browser'
|
||||||
|
'aur:Clone an AUR repository'
|
||||||
|
'list:List all repositories'
|
||||||
|
'go:Navigate to a repository'
|
||||||
|
'goto:Navigate to a repository'
|
||||||
|
'new:Create a new repository'
|
||||||
|
'create:Create a new repository'
|
||||||
|
'help:Show help message'
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ $state == cmds ]]; then
|
||||||
|
_describe -t commands "repo commands" cmds
|
||||||
|
fi
|
1
functions/aur.zsh
Normal file
1
functions/aur.zsh
Normal file
@ -0,0 +1 @@
|
|||||||
|
repo_aur() { repo_clone "aur" "$1"; }
|
21
functions/clone.zsh
Normal file
21
functions/clone.zsh
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
repo_clone() {
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
echo "Error: Repository path is required"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local repo_prefix="$1"
|
||||||
|
cleaned=$(clean_repo_path "$2")
|
||||||
|
output_path="$REPO_BASE_DIR/$cleaned"
|
||||||
|
suffix=".git"
|
||||||
|
mkdir -p "${output_path%"$suffix"}"
|
||||||
|
|
||||||
|
if [ ! -d "$output_path/.git" ]; then
|
||||||
|
repourl=$(echo "$repo_prefix@$cleaned" | sed -e "s/\//:/1")
|
||||||
|
echo "Cloning $repourl to ${output_path%"$suffix"}..."
|
||||||
|
git clone "$repourl" "${output_path%"$suffix"}"
|
||||||
|
else
|
||||||
|
echo "Repository already exists: ${output_path%"$suffix"}"
|
||||||
|
fi
|
||||||
|
post_repo_clone "${output_path%"$suffix"}"
|
||||||
|
}
|
14
functions/core.zsh
Normal file
14
functions/core.zsh
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
clean_repo_path() {
|
||||||
|
stripped=$1
|
||||||
|
stripped="${stripped#http://}"
|
||||||
|
stripped="${stripped#https://}"
|
||||||
|
stripped="${stripped#git@}"
|
||||||
|
stripped="${stripped#ssh://}"
|
||||||
|
stripped="${stripped#aur@}"
|
||||||
|
stripped=$(echo "$stripped" | sed -e "s/:/\//1")
|
||||||
|
|
||||||
|
if [[ ! "$stripped" =~ "/" ]]; then
|
||||||
|
stripped="github.com/$stripped"
|
||||||
|
fi
|
||||||
|
echo "$stripped"
|
||||||
|
}
|
2
functions/get.zsh
Normal file
2
functions/get.zsh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
repo_get() { repo_clone "git" "$1"; }
|
||||||
|
|
11
functions/goto.zsh
Normal file
11
functions/goto.zsh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
repo_goto() {
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Error: Repository path is required"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cleaned=$(clean_repo_path "$1")
|
||||||
|
output_path="$REPO_BASE_DIR/$cleaned"
|
||||||
|
suffix=".git"
|
||||||
|
post_repo_goto "${output_path%"$suffix"}"
|
||||||
|
}
|
18
functions/help.zsh
Normal file
18
functions/help.zsh
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
repo_help() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: repo <command> <repository>
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
get Clone a repository to the repos directory
|
||||||
|
open Open the current repository in the browser
|
||||||
|
aur Clone an AUR repository
|
||||||
|
list List all repositories
|
||||||
|
go|goto Navigate to a repository
|
||||||
|
new|create Create a new repository
|
||||||
|
help Show this help message
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
repo get github.com/user/repo
|
||||||
|
repo open
|
||||||
|
EOF
|
||||||
|
}
|
6
functions/list.zsh
Normal file
6
functions/list.zsh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
list_repos() {
|
||||||
|
find "$REPO_BASE_DIR" -type d -name ".git" | while read -r git_dir; do
|
||||||
|
parent_dir=$(dirname "$git_dir")
|
||||||
|
echo "${parent_dir##*/}" | sed 's/\./_/g'
|
||||||
|
done
|
||||||
|
}
|
18
functions/new.zsh
Normal file
18
functions/new.zsh
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
repo_new() {
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Error: Repository path is required"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cleaned=$(clean_repo_path "$1")
|
||||||
|
output_path="$REPO_BASE_DIR/$cleaned"
|
||||||
|
mkdir -p "${output_path%.git}"
|
||||||
|
|
||||||
|
if [ ! -d "$output_path/.git" ]; then
|
||||||
|
git init "${output_path%.git}"
|
||||||
|
else
|
||||||
|
echo "Repository already exists: ${output_path%.git}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
post_repo_new "${output_path%.git}"
|
||||||
|
}
|
6
functions/open.zsh
Normal file
6
functions/open.zsh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
repo_open() {
|
||||||
|
remote=$(git remote get-url origin)
|
||||||
|
remote=${remote/git@/https:\/\/}
|
||||||
|
remote=${remote/:/\//}
|
||||||
|
xdg-open "$remote"
|
||||||
|
}
|
11
repo.plugin.zsh
Normal file
11
repo.plugin.zsh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
REPO_BASE_DIR="${REPO_BASE_DIR:-$HOME/repos}"
|
||||||
|
|
||||||
|
for script in "${0:A:h}/functions/"*.zsh; do
|
||||||
|
source "$script"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -d "${0:A:h}/completion" ]]; then
|
||||||
|
fpath=("${0:A:h}/completion" $fpath)
|
||||||
|
autoload -Uz compinit && compinit
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user