aboutsummaryrefslogtreecommitdiff
path: root/admin/sbols
blob: dd64e1b260ed153eb34cfa0fd2af7c20a6d504b3 (plain)
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
96
97
98
99
100
101
#!/bin/sh

VERSION="0.0.1"
SELF="$( basename $0 )"

die() {
  echo "$SELF: fatal: $@" 1>&2
  exit 1
}

warn() {
  echo "$SELF: warning: $@" 1>&2
}

usage() {
  cat <<EOF
$SELF - query SBo git tree for info on builds

Usage: $SELF [-mdrag] [ -M <maintainer> | <build> [<build> ...] ]

Build arguments are build names as used with cdsb: category/build, or
just build, and partial matches are supported. For each one, show the
category/build (and optionally the maintainer, dependencies, and/or
description). Output is one line per argument.

Options:
  -M <maintainer>  Show all builds for given maintainer. If this
      option is used, it must be the last option (this is done to
      avoid the need to quote maintainer names with spaces in them).
  -m  Show maintainer name and email.
  -d  Show description (from top of slack-desc).
  -r  Show REQUIRES.
  -g  Show last git commit date/author/desciption (slow!).
  -x  Show dependees (requires hoorex).
  -a  Same as -mdr (show all info, except git and dependees).
  -A  Same as -mdrgh (show all info).

Environment:
  SBO_GITROOT - set this to the path of the local SBo git clone.
    If not set, the current directory is assumed.
EOF
}

source ~/sbostuff/sbostuff.sh

if [ "$1" = "--help" -o "$1" = "" ]; then
  usage ; exit 0
fi

while getopts ":MmdragxA" OPT; do
  case "$OPT" in
    M) opt_M=1 ;;
    m) opt_m=1 ;;
    d) opt_d=1 ;;
    r) opt_r=1 ;;
    a) opt_m=1 ; opt_d=1 ; opt_r=1 ;;
    g) opt_g=1 ;;
    x) opt_x=1 ;;
    A) opt_m=1 ; opt_d=1 ; opt_r=1 ; opt_g=1 ; opt_x=1 ;;
    *) die "invalid option -$OPTARG, try --help" ;;
  esac
done
shift $(($OPTIND - 1))

[ "$SBO_GITROOT" != "" ] && cd "$SBO_GITROOT"
[ -d .git -a -d system -a -d academic ] || die "not a valid SBo git checkout"

if [ "$opt_M" = "1" ]; then
  cdsb
  builds="$( git grep -l "$*" '*/*/*.info' | cut -d/ -f1,2 )"
  [ "$builds" = "" ] && die "maintainer '$*' not found"
  set $builds
fi

for i; do
  if cdsb $i; then
    i="$( basename $( pwd ) )"
    prgcat="$( pwd | rev | cut -d/ -f1,2 | rev )"
    echo -n $prgcat
    if [ "$opt_m" = "1" ]; then
      source ./$i.info
      echo -n ": $MAINTAINER <$EMAIL>"
    fi
    if [ "$opt_d" = "1" ]; then
      echo -n " $( grep $i: slack-desc | head -1 | cut -d' ' -f3- )"
    fi
    if [ "$opt_r" = "1" ]; then
      echo -n " $( grep ^REQUIRES $i.info | grep -v '""' )"
    fi
    if [ "$opt_g" = "1" ]; then
      echo -n " $( git -P log -n1 --format="%as;%an;%s" . | sed "s,;$prgcat: ,;,")"
    fi
    if [ "$opt_x" = "1" ]; then
      x="$( hoorex -a $i | cut -d' ' -f2- )"
      [ "$x" != "" ] && echo -n " | $x"
    fi
    echo
  else
    warn "$i not found in repo"
  fi
done