refactor: Extract git clean start logic into shared library
This commit is contained in:
parent
aaec7002d7
commit
e0a39d8a15
3 changed files with 37 additions and 1 deletions
18
lib/clean-start.sh
Normal file
18
lib/clean-start.sh
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# =============================================================================
|
||||||
|
# lib/clean-start.sh — single source of truth for the pre-session reset.
|
||||||
|
# Caller must already be INSIDE the genome checkout.
|
||||||
|
# Aligns the working tree to origin/<base>. Never force-pushes a shared branch.
|
||||||
|
# Tolerates a missing remote branch (first-setup scenario).
|
||||||
|
# NOTE: sourced library — no `set -euo pipefail` (would leak into the caller).
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
clean_start() {
|
||||||
|
local base="${INGEST_BASE:-main}"
|
||||||
|
git fetch -q origin || return 1
|
||||||
|
git switch -q "$base" 2>/dev/null || git checkout -q -b "$base" || return 1
|
||||||
|
if git ls-remote --exit-code --heads origin "$base" >/dev/null 2>&1; then
|
||||||
|
git reset -q --hard "origin/${base}" || return 1
|
||||||
|
fi
|
||||||
|
git clean -q -fd || return 1
|
||||||
|
}
|
||||||
18
tests/clean-start.bats
Normal file
18
tests/clean-start.bats
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
setup() {
|
||||||
|
load 'helpers'
|
||||||
|
source "${LIB_DIR}/clean-start.sh" 2>/dev/null || source "${REPO_ROOT}/lib/clean-start.sh"
|
||||||
|
}
|
||||||
|
@test "clean_start: aligns to origin/base, reverts tracked edits, removes untracked" {
|
||||||
|
G="$(make_fixture_genome)"; cd "$G"
|
||||||
|
echo "from origin" >> wiki/index.md
|
||||||
|
git add -A && git commit -q -m "origin ahead" && git push -q
|
||||||
|
git reset --hard HEAD~1 # local BEHIND origin/main
|
||||||
|
echo "local junk" >> wiki/log.md # tracked edit, uncommitted
|
||||||
|
echo "scratch" > scratch.txt # genuinely untracked
|
||||||
|
INGEST_BASE="main" clean_start
|
||||||
|
git diff --quiet origin/main # aligned to origin
|
||||||
|
grep -q "from origin" wiki/index.md # forwarded to origin state
|
||||||
|
! grep -q "local junk" wiki/log.md # tracked edit reverted
|
||||||
|
[ ! -f scratch.txt ] # untracked removed
|
||||||
|
}
|
||||||
|
|
@ -29,7 +29,7 @@ EXECUTABLES=(
|
||||||
|
|
||||||
# Librerie sourced: NON devono essere eseguibili.
|
# Librerie sourced: NON devono essere eseguibili.
|
||||||
LIBRARIES=(
|
LIBRARIES=(
|
||||||
lib/lint.sh lib/output.sh lib/deps.sh lib/git-crypt.sh lib/scaffold.sh lib/structure.sh
|
lib/lint.sh lib/output.sh lib/deps.sh lib/git-crypt.sh lib/scaffold.sh lib/structure.sh lib/clean-start.sh
|
||||||
providers/forgejo.sh providers/github.sh
|
providers/forgejo.sh providers/github.sh
|
||||||
registry.sh globals.env
|
registry.sh globals.env
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue