feat: add script to manage worktrees
This commit is contained in:
parent
60c67eecee
commit
ff3f9e4604
@ -88,3 +88,55 @@ export RESTIC_PASSWORD_COMMAND="pass show personal/restic/metabox"
|
|||||||
# pdftoppm -jpeg -r 300 input_document.pdf output_image
|
# pdftoppm -jpeg -r 300 input_document.pdf output_image
|
||||||
# jpegoptim --size=100k output_image*.jpg
|
# jpegoptim --size=100k output_image*.jpg
|
||||||
# img2pdf $(ls -v output_image*.jpg) -o output_document.pdf
|
# img2pdf $(ls -v output_image*.jpg) -o output_document.pdf
|
||||||
|
|
||||||
|
# Create a git worktree for the current repo.
|
||||||
|
# Usage: newtree <branch-name> [<from-ref>]
|
||||||
|
# - If <from-ref> is omitted, defaults to HEAD.
|
||||||
|
# - Worktree path: $HOME/src/worktrees/<repo_name>/<branch_name_sanitised>
|
||||||
|
# (slashes and dashes in the *path component only* are replaced with underscores)
|
||||||
|
newtree() {
|
||||||
|
local branch from_ref repo_root repo_name sanitized dest parent
|
||||||
|
branch="$1"
|
||||||
|
from_ref="${2:-HEAD}"
|
||||||
|
|
||||||
|
if [[ -z "$branch" ]]; then
|
||||||
|
echo "Usage: newtree <branch-name> [<from-ref>]" >&2
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure we're inside a git repo
|
||||||
|
if ! repo_root="$(git rev-parse --show-toplevel 2>/dev/null)"; then
|
||||||
|
echo "Error: not inside a git repository." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
repo_name="$(basename "$repo_root")"
|
||||||
|
|
||||||
|
# Sanitize the branch *for the path only* (keep original branch name for git)
|
||||||
|
sanitized="${branch//[\/-]/_}"
|
||||||
|
dest="$HOME/src/worktrees/$repo_name/$sanitized"
|
||||||
|
parent="$(dirname "$dest")"
|
||||||
|
|
||||||
|
# Create parent dir; git will create the final leaf
|
||||||
|
mkdir -p "$parent" || {
|
||||||
|
echo "Error: unable to create directory: $parent" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Optional: prune stale worktrees to avoid false conflicts
|
||||||
|
git -C "$repo_root" worktree prune >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Does the branch already exist?
|
||||||
|
if git -C "$repo_root" rev-parse --verify --quiet "refs/heads/$branch" >/dev/null; then
|
||||||
|
echo "Branch '$branch' exists; adding worktree at: $dest"
|
||||||
|
# --force in case the branch is already checked out elsewhere
|
||||||
|
git -C "$repo_root" worktree add --force "$dest" "$branch" || return $?
|
||||||
|
else
|
||||||
|
echo "Branch '$branch' does not exist; creating from '$from_ref' at: $dest"
|
||||||
|
git -C "$repo_root" worktree add --force -b "$branch" "$dest" "$from_ref" || return $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Jump into the new worktree
|
||||||
|
cd "$dest" || return $?
|
||||||
|
echo "✔ Worktree ready at: $dest"
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user