~ecs/tm

ref: 95cb618f450695312ff6849e7c6e86709e985ae9 tm/tm-resolve-path -rwxr-xr-x 907 bytes
95cb618fEmber Sawady init: use commit instead of commit-tree 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh -eu

. "$(dirname -- "$0")/lib.sh"

field=2
while getopts f: opt; do
	case "$opt" in
	f)
		case "$OPTARG" in
		1|mode)
			field=1;
			;;
		2|hash)
			field=2;
			;;
		3|path)
			field=3;
			;;
		*)
			abort "invalid field, must be one of mode, hash, or path"
			;;
		esac
		;;
	?)
		abort "usage: tm resolve-path [-f <field>] <tree> <path>"
		;;
	esac
done

shift "$((OPTIND - 1))"

[ $# -ne 2 ] &&  abort "usage: tm resolve-path [-f <field>] <tree> <path>"
ref="$(tm resolve-ref "$1")" || abort "error: invalid ref $1"
[ "z$2" = "z/" ] || [ "z$2" = "z." ] && printf "%s\n" "$ref" && exit
dirref="$(tm resolve-path -- "$1" "$(dirname -- "$2")")"
[ "z$(tm object-type "$dirref")" != "ztree" ] && abort "error: not a directory: $2"
line="$(tm cat "$dirref" | postfix " $(basename -- "$2")" | cut -f"$field" -d' ' | head -n1)"
[ -z "$line" ] && abort "error: file $2 not found"
printf "%s\n" "$line"