X-Git-Url: https://git.madduck.net/code/topgit-ng.git/blobdiff_plain/34bbe7c33ac672f2fc80f639277f9ba750a3d957..dc58ec49df849ec1aef6929cd40c759a6018e056:/tg-datastore.inc?ds=sidebyside diff --git a/tg-datastore.inc b/tg-datastore.inc new file mode 100644 index 0000000..d79f159 --- /dev/null +++ b/tg-datastore.inc @@ -0,0 +1,45 @@ +die() +{ + printf "E: $@\n" >&2 + exit 1 +} + +tg_ds_resolve_commit() +{ + git rev-parse --verify $1 2>/dev/null +} + +. ${0%/*}/tg-datastore-pcommits.inc + +tg_ds_get_value() +{ + local name; name="${1:-}" + local commit; commit="${2:-HEAD}" + + [ -z "$1" ] && die 'tg_ds_get_value: missing first argument (name)' + tg_ds_resolve_commit $commit >/dev/null || die "tg_ds_get_value: invalid commit: $commit" + + local data; data=$(tg_ds_list_data "$commit") || return 1 + printf "$data\n" | sed -rne "s,^${name}: *,,p" +} + +tg_ds_find_value() +{ + local name; name="${1:-}" + local commit; commit="${2:-HEAD}" + + [ -z "$1" ] && die 'tg_ds_find_value: missing first argument (name)' + ref=$(tg_ds_resolve_commit $commit) || die "tg_ds_find_value: invalid commit: $commit" + + while :; do + if [ "$name" = commitref ]; then + tg_ds_list_data "$commit" >/dev/null && printf "$ref\n" && return 0 + else + tg_ds_get_value "$name" $commit && return 0 + fi + commit="${commit}^" + ref=$(tg_ds_resolve_commit "${commit}") || break + done + + return 1 +}