#!/usr/bin/env bash # Copyright 2026 Hee-Suk Kim # SPDX-License-Identifier: GPL-3.0-only set -euo pipefail . lib.bash usage() { cat <] [-n ] [] -n Truncate content to -k Only show 's value on -c Same as \`-k content' -h Show this help EOF } n_lines= key= while getopts rhn:k:c o; do case $o in h) usage; exit 0 ;; n) n_lines="$OPTARG" ;; k) key="$OPTARG" ;; c) key=content ;; *) usage; exit 1 ;; esac done shift $((OPTIND - 1)) truncate_content() { [[ -n $n_lines ]] && head -n "$n_lines" || cat } target="${1:-HEAD}" # On sib-log if [[ -n "${SIB_SHOW_RESOLVED:-}" ]]; then chain="$target" else chain=$(sib rev-parse $target) fi if [[ ! -z $key ]]; then sib ls-trace $chain \ | awk -F'\t' -v k=$key '$2 == k { print $1 }' \ | xargs sib git cat-file blob exit 0 fi # Normal output echo "chain $chain" CONTENT=content lst="$(sib ls-trace $chain)" [[ -z $lst ]] && { echo --- Empty trace --- >&2; echo; exit 0; } # Traverse all key except $CONTENT echo "$lst" \ | awk -F'\t' -v k="$CONTENT" '$2 != k { print }' \ | while IFS=$'\t' read -r value key; do # Should not die here [[ -z $value ]] && die "mallformed ls-tree format $lst" value=$(sib git cat-file blob $value) echo "$key: $value" done echo content=$(echo "$lst" | awk -F'\t' -v k="$CONTENT" '$2 == k { print $1 }') [[ -z $content ]] && { echo No $CONTENT field on $chain >&2; exit 0; } sib git cat-file blob $content | truncate_content echo