nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1if [ "$1" != "rev-parse" ]; then
2 echo "$@" >&2
3 exit 1
4fi
5shift
6
7short=0
8shortlen=7
9ref=
10while [ $# -gt 0 ]; do
11 case "$1" in
12 --short)
13 short=1
14 if [ $# -gt 1 ] && [ "$2" -eq "$2" ] 2>/dev/null; then
15 shortlen=$2
16 shift
17 else
18 shortlen=7
19 fi
20 ;;
21 --short=*)
22 short=1
23 shortlen=''${1#--short=}
24 ;;
25 --is-inside-work-tree)
26 echo true
27 exit 0
28 ;;
29 HEAD|HEAD:*)
30 ref=$1
31 ;;
32 *)
33 echo "rev-parse $@" >&2
34 exit 1
35 ;;
36 esac
37 shift
38done
39
40if [ -z "$ref" ]; then
41 echo "rev-parse" >&2
42 exit 1
43fi
44
45case "$ref" in
46 HEAD)
47 path=$(pwd)
48 hash=
49 while [ "$path" != "/" ]; do
50 if [ -f "$path/.gitrev" ]; then
51 hash=$(cat "$path/.gitrev")
52 break
53 fi
54 path=$(dirname "$path")
55 done
56 ;;
57 HEAD:*)
58 subpath=''${ref#HEAD:}
59 if [ -f "$PWD/$subpath/.gitrev" ]; then
60 hash=$(cat "$PWD/$subpath/.gitrev")
61 fi
62 ;;
63esac
64
65if [ -z "$hash" ]; then
66 echo "rev-parse $ref" >&2
67 exit 1
68fi
69
70if [ "$short" -eq 1 ]; then
71 printf '%s\n' "$(printf '%s' "$hash" | cut -c1-"$shortlen")"
72else
73 printf '%s\n' "$hash"
74fi