Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

nushell/tests/git-command-coverage.sh

Raw
#!/usr/bin/env bash
set -euo pipefail

repo_root="$(git rev-parse --show-toplevel)"
real_git="$(command -v git)"
tmp="$(mktemp -d /tmp/dotfiles-git-coverage-XXXXXX)"
trap 'rm -rf "$tmp"' EXIT

log="$tmp/git.log"
wrapper_dir="$tmp/bin"
mkdir -p "$wrapper_dir"

cat >"$wrapper_dir/git" <<'WRAP'
#!/usr/bin/env bash
set -euo pipefail
if [ "${DOTFILES_GIT_TEST_PHASE:-}" = nu ]; then
  for arg in "$@"; do printf '%q ' "$arg" >>"$DOTFILES_GIT_LOG"; done
  printf '\n' >>"$DOTFILES_GIT_LOG"
fi
exec "$DOTFILES_REAL_GIT" "$@"
WRAP
chmod +x "$wrapper_dir/git"

PATH="$wrapper_dir:$PATH" \
DOTFILES_REAL_GIT="$real_git" \
DOTFILES_GIT_LOG="$log" \
bash "$repo_root/nushell/tests/git-worktree-layout.sh" >/tmp/dotfiles-git-coverage-smoke.log

[ -s "$log" ] || { cat /tmp/dotfiles-git-coverage-smoke.log >&2; echo "FAIL: no git invocations logged" >&2; exit 1; }

require() {
  local label="$1"
  local pattern="$2"
  if ! grep -Eq -- "$pattern" "$log"; then
    echo "FAIL: missing git invocation: $label" >&2
    echo "pattern: $pattern" >&2
    echo "--- smoke output ---" >&2
    cat /tmp/dotfiles-git-coverage-smoke.log >&2
    echo "--- git log ---" >&2
    cat "$log" >&2
    exit 1
  fi
}

require 'rev-parse common dir' '^rev-parse --path-format=absolute --git-common-dir $'
require 'rev-parse branch' '^rev-parse --abbrev-ref HEAD $'
require 'rev-parse top-level' '^rev-parse --show-toplevel $'
require 'clone bare' '^clone --bare .+ .+/\.bare $'
require 'config get' '^--git-dir .+ config --get wt\.repo-name $'
require 'config bool get' '^--git-dir .+ config --bool --get core\.bare $'
require 'config set core.bare' '^--git-dir .+ config core\.bare true $'
require 'config unset core.worktree' '^--git-dir .+ config --unset core\.worktree $'
require 'config set relative false' '^--git-dir .+ config worktree\.useRelativePaths false $'
require 'config unset relative extension' '^--git-dir .+ config --unset extensions\.relativeWorktrees $'
require 'symbolic-ref default branch' '^--git-dir .+ symbolic-ref --short HEAD $'
require 'worktree list' '^--git-dir .+ worktree list --porcelain $'
require 'show-ref branch exists' '^--git-dir .+ show-ref --verify --quiet refs/heads/.+ $'
require 'worktree add existing branch' '^--git-dir .+ -c worktree\.useRelativePaths=false worktree add [^-].+ .+ $'
require 'worktree add new branch' '^--git-dir .+ -c worktree\.useRelativePaths=false worktree add -b .+ .+ .+ $'
require 'worktree remove clean' '^--git-dir .+ worktree remove /.+ $'
require 'worktree remove force' '^--git-dir .+ worktree remove --force /.+ $'
require 'branch delete merged' '^--git-dir .+ branch -d .+ $'
require 'branch delete force' '^--git-dir .+ branch -D .+ $'
require 'worktree prune' '^--git-dir .+ worktree prune $'
require 'worktree repair' '^--git-dir .+ -c worktree\.useRelativePaths=false worktree repair.*$'
require 'worktree lock no reason' '^--git-dir .+ worktree lock /.+ $'
require 'worktree lock reason' '^--git-dir .+ worktree lock --reason testing /.+ $'
require 'worktree unlock' '^--git-dir .+ worktree unlock /.+ $'
require 'worktree move' '^--git-dir .+ worktree move /.+ /.+ $'
require 'worktree move absolute wrapper' '^--git-dir .+ -c worktree\.useRelativePaths=false worktree move /.+ /.+ $'
require 'status porcelain' '^-C /.+ status --porcelain=v1 $'
require 'status sanity' '^-C /.+ status $'
require 'stash list' '^-C /.+ stash list $'
require 'diff cached' '^-C /.+ diff --binary --cached $'
require 'diff unstaged' '^-C /.+ diff --binary $'
require 'apply index' '^-C /.+ apply --index /.+staged\.patch $'
require 'apply unstaged' '^-C /.+ apply /.+unstaged\.patch $'

printf 'ok git-command-coverage\n'