combined into a single gitfield script
This commit is contained in:
parent
245e862fb5
commit
a56283ca37
3 changed files with 134 additions and 1 deletions
112
gitfield
Executable file
112
gitfield
Executable file
|
@ -0,0 +1,112 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# ╭───────────────────────────────╮
|
||||
# │ Configuration │
|
||||
# ╰───────────────────────────────╯
|
||||
CONFIG_DIR="$HOME/.gitfield"
|
||||
CONFIG_FILE="$CONFIG_DIR/config"
|
||||
REPO_NAME=$(basename "$(pwd)")
|
||||
DEFAULT_NAME="Mark Randall Havens"
|
||||
DEFAULT_EMAIL="mark.r.havens@gmail.com"
|
||||
|
||||
# ╭───────────────────────────────╮
|
||||
# │ Logging Utils │
|
||||
# ╰───────────────────────────────╯
|
||||
info() { echo -e "\e[1;34m[INFO]\e[0m $*"; }
|
||||
warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; }
|
||||
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
||||
|
||||
# ╭───────────────────────────────╮
|
||||
# │ Shared Functions │
|
||||
# ╰───────────────────────────────╯
|
||||
setup_git() {
|
||||
command -v git >/dev/null || { sudo apt update && sudo apt install -y git || error "Git install failed"; }
|
||||
git config --global user.name "$DEFAULT_NAME"
|
||||
git config --global user.email "$DEFAULT_EMAIL"
|
||||
[ -d .git ] || { git init; git add .; git commit -m "Initial commit" || warn "Nothing to commit"; }
|
||||
}
|
||||
|
||||
setup_ssh() {
|
||||
[ -f ~/.ssh/id_ed25519 ] || {
|
||||
ssh-keygen -t ed25519 -C "$DEFAULT_EMAIL" -f ~/.ssh/id_ed25519 -N ""
|
||||
eval "$(ssh-agent -s)"
|
||||
ssh-add ~/.ssh/id_ed25519
|
||||
}
|
||||
}
|
||||
|
||||
commit_changes() {
|
||||
if ! git diff --quiet || ! git diff --cached --quiet; then
|
||||
git add . && git commit -m "Update: $(date '+%Y-%m-%d %H:%M:%S')" || warn "Nothing to commit"
|
||||
else
|
||||
info "No uncommitted changes."
|
||||
fi
|
||||
}
|
||||
|
||||
# ╭───────────────────────────────╮
|
||||
# │ Platform Functions │
|
||||
# ╰───────────────────────────────╯
|
||||
bitbucket_init() {
|
||||
local user workspace app_pass_file remote web_url
|
||||
user=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "username" | cut -d'=' -f2)
|
||||
workspace=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "workspace" | cut -d'=' -f2)
|
||||
app_pass_file=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "app_password_file" | cut -d'=' -f2)
|
||||
remote=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "remote" | cut -d'=' -f2)
|
||||
web_url=$(grep -A4 "\[bitbucket\]" "$CONFIG_FILE" | grep "web_url" | cut -d'=' -f2)
|
||||
# Bitbucket-specific setup (e.g., app password, repo creation)
|
||||
# ...
|
||||
info "Bitbucket: $(git remote get-url "$remote" 2>/dev/null || echo "Not set")"
|
||||
info "Web: $(printf "$web_url" "$REPO_NAME")"
|
||||
}
|
||||
|
||||
github_init() {
|
||||
# Similar setup for GitHub
|
||||
# ...
|
||||
}
|
||||
|
||||
gitlab_init() {
|
||||
# Similar setup for GitLab
|
||||
# ...
|
||||
}
|
||||
|
||||
radicle_init() {
|
||||
# Similar setup for Radicle
|
||||
# ...
|
||||
}
|
||||
|
||||
# ╭───────────────────────────────╮
|
||||
# │ Main Logic │
|
||||
# ╰───────────────────────────────╯
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
[ -f "$CONFIG_FILE" ] || { echo "[bitbucket]\n...\n[github]\n...\n[gitlab]\n...\n[radicle]\n..." > "$CONFIG_FILE"; }
|
||||
|
||||
case "${1:-status}" in
|
||||
status)
|
||||
setup_git
|
||||
info "Git Repository Status"
|
||||
git status --short
|
||||
info "Branch: $(git rev-parse --abbrev-ref HEAD)"
|
||||
info "Configured Remotes"
|
||||
bitbucket_init
|
||||
github_init
|
||||
gitlab_init
|
||||
radicle_init
|
||||
;;
|
||||
push)
|
||||
setup_git
|
||||
setup_ssh
|
||||
commit_changes
|
||||
bitbucket_push
|
||||
github_push
|
||||
gitlab_push
|
||||
radicle_push
|
||||
info "All remotes synced."
|
||||
;;
|
||||
configure)
|
||||
# Prompt for credentials and update $CONFIG_FILE
|
||||
;;
|
||||
*)
|
||||
error "Usage: gitfield [status|push|configure]"
|
||||
;;
|
||||
esac
|
Loading…
Add table
Add a link
Reference in a new issue