diff --git a/git-release b/git-release index 93bc312..1a396b2 100755 --- a/git-release +++ b/git-release @@ -2,20 +2,29 @@ # git-release # https://github.com/obnitram/git-release # ------------------------------------------------- -# Usage: git-release [] +# Usage: git-release [] [-f] # Accepts tags of the form vX.Y.Z or -vX.Y.Z (no prerelease/build). # Interactively bumps patch/minor/major, creates an annotated tag, # and pushes it to origin. # # Requirements: # - The last tag MUST match ^v[0-9]+\.[0-9]+\.[0-9]+$ or ^-v[0-9]+\.[0-9]+\.[0-9]+$ (or none => starts from v0.0.0) -# - Working tree must be clean. +# - Working tree must be clean (unless -f is used). set -euo pipefail trap 'echo "❌ ${0##*/} failed at line $LINENO." >&2; exit 1' ERR -# --- Parse optional project name argument --- -PROJECT_NAME="${1:-}" +# --- Parse arguments --- +FORCE_FLAG=false +PROJECT_NAME="" + +for arg in "$@"; do + if [[ "$arg" == "-f" ]]; then + FORCE_FLAG=true + else + PROJECT_NAME="$arg" + fi +done if [[ -n "$PROJECT_NAME" ]]; then TAG_PREFIX="${PROJECT_NAME}-v" TAG_PATTERN="${PROJECT_NAME}-v[0-9]*.[0-9]*.[0-9]*" @@ -31,10 +40,13 @@ fi # --- Safety: ensure we are inside a Git repository --- git rev-parse --is-inside-work-tree >/dev/null 2>&1 -# --- Safety: require a clean working tree --- -if ! git diff-index --quiet HEAD --; then - echo "⚠️ Uncommitted changes detected. Please commit or stash before releasing." - exit 1 +# --- Safety: require a clean working tree (unless -f flag is used) --- +if [[ "$FORCE_FLAG" == false ]]; then + if ! git diff-index --quiet HEAD --; then + echo "⚠️ Uncommitted changes detected. Please commit or stash before releasing." + echo " Or use -f flag to force the release anyway." + exit 1 + fi fi # --- Get strictly matching tags and pick the highest (lexicographic by version) ---