combined into a single gitfield script
This commit is contained in:
parent
245e862fb5
commit
a56283ca37
3 changed files with 134 additions and 1 deletions
21
.gitfield/config
Normal file
21
.gitfield/config
Normal file
|
@ -0,0 +1,21 @@
|
|||
[bitbucket]
|
||||
username=mrhavens
|
||||
workspace=thefoldwithin
|
||||
app_password_file=~/.bitbucket_app_password
|
||||
remote=bitbucket
|
||||
web_url=https://bitbucket.org/thefoldwithin/%s
|
||||
|
||||
[github]
|
||||
username=mrhavens
|
||||
remote=github
|
||||
web_url=https://github.com/mrhavens/%s
|
||||
|
||||
[gitlab]
|
||||
username=mrhavens
|
||||
token_file=~/.gitfield_token
|
||||
remote=gitlab
|
||||
web_url=https://gitlab.com/mrhavens/%s
|
||||
|
||||
[radicle]
|
||||
remote=radicle
|
||||
home=~/.radicle
|
|
@ -1 +1 @@
|
|||
ceabc8af9414289cd0e0795f574ca6afc8523032
|
||||
245e862fb584e99bc55590a0cb82f432b841d97e
|
||||
|
|
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