File: stg-gitk

package info (click to toggle)
stgit 0.18-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,728 kB
  • ctags: 1,741
  • sloc: python: 10,106; sh: 4,939; lisp: 2,678; makefile: 130; perl: 42
file content (95 lines) | stat: -rwxr-xr-x 2,295 bytes parent folder | download | duplicates (5)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/sh
set -e

# stg-gitk - helper script to graphically display an StGIT stack

# Displays given branches and stacks, without getting disturbed by
# patch logs.

# LIMITATIONS:
# - no support for spaces in branch names

# Copyright (c) 2007 Yann Dirson <ydirson@altern.org>
# Subject to the GNU GPL, version 2.

helptext="Usage: $(basename $0) [--refs] [<branches>|--all] [-- <gitk args>]"

usage()
{
    echo >&2 "$helptext"
    exit 1
}

allbranches=0
refsonly=0
branches=''
while [ "$#" -gt 0 ]; do
    case "$1" in
	--refs) refsonly=1 ;;
	--all) allbranches=1 ;;
	--help) echo "$helptext"; exit 0 ;;
	--) shift; break ;;
	--*) usage ;;
	*) branches="$branches $1" ;;
    esac
    shift
done
# Now any remaining stuff in $@ are additional options for gitk

if [ $allbranches = 1 ] && [ "$branches" != "" ]; then
    usage
fi

GIT_DIR=$(git rev-parse --git-dir)
GIT_DIR_SPKIPLEN=$(printf "$GIT_DIR/X" | wc -c)

refdirs=''
if [ $allbranches = 1 ]; then
    refdirs="$GIT_DIR/refs"
else
    # default to current branch
    if [ "$branches" = "" ]; then
	branches="$(stg branch)"
    fi
    if [ "$branches" = "" ]; then
	echo >&2 "ERROR: cannot find current branch."
	exit 1
    fi

    # expand patches for each named branch
    for b in $branches; do
	if [ -e "$GIT_DIR/refs/patches/$b" ]; then
	    # StGIT branch: show all patches
	    refdirs="$refdirs $GIT_DIR/refs/heads/$b $GIT_DIR/refs/patches/$b"
	elif [ -e "$GIT_DIR/refs/heads/$b" ]; then
	    # other GIT branch
	    refdirs="$refdirs $GIT_DIR/refs/heads/$b"
	elif [ $(git for-each-ref "refs/$b" | wc -l) != 0 ]; then
	    # other ref
	    refdirs="$refdirs $(git for-each-ref --format="$GIT_DIR/%(refname)" "refs/$b")"
	else
	    echo >&2 "ERROR: no such ref '$b'"
	    usage
	fi
    done
fi

printrefs()
{
    find $refdirs -type f -not -name '*.log' | cut -c${GIT_DIR_SPKIPLEN}-
}

if [ $refsonly = 1 ]; then
    printrefs
elif grep -q -- --argscmd $(which gitk); then
    # This gitk supports --argscmd.
    # Let's use a hack to pass --all, which was consumed during command-line parsing
    if [ $allbranches = 1 ]; then
	gitk --argscmd="$0 --refs --all" "$@"
    else
	gitk --argscmd="$0 --refs $branches" "$@"
    fi
else
    # This gitk does not support --argscmd, just compute refs onces
    gitk $(printrefs) "$@"
fi