#!/usr/bin/env bash # Copyright 2026 Hee-Suk Kim # SPDX-License-Identifier: GPL-3.0-only set -euo pipefail . lib.bash usage() { cat < [] ${NAME} -d ${NAME} -l Save as (default: HEAD) -d Delete -l List saved names -h Show this help EOF } delete= list= while getopts hdl o; do case "$o" in h) usage; exit 0 ;; d) delete=1 ;; l) list=1 ;; *) usage >&2; exit 1 ;; esac done shift $((OPTIND - 1)) [[ -z $delete || -z $list ]] || { echo fatal: -d and -l cannot be used together >&2 usage exit 1 } if [[ -n $list ]]; then # TODO: add pattern matching like git branch -l [] sib ls-refs refs/conv/ | awk '{ sub(/^refs\/conv\//, "", $1); print $1 }' exit fi if [[ -n $delete ]]; then [[ $# -eq 1 ]] || { usage >&2 exit 1 } else [[ $# -ge 1 && $# -le 2 ]] || { usage >&2 exit 1 } fi name="$1" ref="refs/conv/$name" sib git check-ref-format "$ref" || die "invalid name: $name" if [[ -n $delete ]]; then sib update-ref --no-deref -d -m "save: delete $name" "$ref" exit fi # # now save # target="${2:-HEAD}" chain=$(sib rev-parse "$target" 2>/dev/null) || die "invalid chain: $target" sib update-ref -m "save: $name" --no-deref "$ref" "$chain" chain=$(sib git rev-parse --short $chain) echo "Saved $chain to $name" >&2