diff --git a/bin/gstack-diff-scope b/bin/gstack-diff-scope index bf1b4af84..38450e6b1 100755 --- a/bin/gstack-diff-scope +++ b/bin/gstack-diff-scope @@ -4,7 +4,15 @@ # Or: gstack-diff-scope main → prints SCOPE_*=... lines set -euo pipefail -BASE="${1:-main}" +# Detect the repo's default branch when no arg is given (#703-class +# platform-agnostic rule): origin/HEAD -> origin/main -> origin/master -> main. +_default_base() { + git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' && return + git rev-parse --verify -q origin/main >/dev/null 2>&1 && { echo "main"; return; } + git rev-parse --verify -q origin/master >/dev/null 2>&1 && { echo "master"; return; } + echo "main" +} +BASE="${1:-$(_default_base)}" # Get changed file list FILES=$(git diff "${BASE}...HEAD" --name-only 2>/dev/null || git diff "${BASE}" --name-only 2>/dev/null || echo "") diff --git a/bin/gstack-next-version b/bin/gstack-next-version index 455dd72f2..6a291d96e 100755 --- a/bin/gstack-next-version +++ b/bin/gstack-next-version @@ -405,7 +405,16 @@ function parseArgs(argv: string[]): { base: string; bump: Bump; current: string; else if (a === "-h" || a === "--help") help = true; } if (help) return { base: "", bump: "micro", current: "", excludePR: null, help: true }; - if (!base) base = "main"; + if (!base) { + // Detect the default branch instead of assuming main (local-only repos + // on trunk/master work like GitHub repos on main). + try { + const head = execFileSync("git", ["symbolic-ref", "refs/remotes/origin/HEAD"], { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim(); + base = head.replace("refs/remotes/origin/", "") || "main"; + } catch { + base = "main"; + } + } if (!bump) { console.error("Error: --bump is required (major|minor|patch|micro)"); process.exit(2);