aboutsummaryrefslogtreecommitdiff
path: root/admin/sbols
blob: 9de8d560ebd553c7c106722d5775abcd89cbf7f2 (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
102
103
104
105
106
107
108
109
110
#!/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 [-onsdchaA] [ -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).
  -o  Same as -m "orphaned - no maintainer"; lists orphans.
  -n  Show maintainer name and email.
  -s  Show short description (from top of slack-desc).
  -r  Show REQUIRES.
  -c  Show last git commit date/author/description (slow!).
  -d  Show dependees (requires hoorex).
  -a  Same as -nsr (show all info, except last commit and dependees).
  -A  Same as -nsrch (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 ":monsracdA" OPT; do
  case "$OPT" in
    m) opt_m=1 ;;
    o) opt_o=1 ;;
    n) opt_n=1 ;;
    s) opt_s=1 ;;
    r) opt_r=1 ;;
    a) opt_n=1 ; opt_s=1 ; opt_r=1 ;;
    c) opt_c=1 ;;
    d) opt_d=1 ;;
    A) opt_n=1 ; opt_s=1 ; opt_r=1 ; opt_c=1 ; opt_d=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_o" = "1" ]; then
  opt_m=1
  set "orphaned - no maintainer"
fi

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

[ "$*" = "" ] && usage && exit 1

for i; do
  if cdsb $i; then
    i="$( basename $( pwd ) )"
    prgcat="$( pwd | rev | cut -d/ -f1,2 | rev )"
    echo -n $prgcat
    if [ "$opt_n" = "1" ]; then
      source ./$i.info
      echo -n ": $MAINTAINER <$EMAIL>"
    fi
    if [ "$opt_s" = "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_c" = "1" ]; then
      echo -n " $( git -P log -n1 --format="%as;%an;%s" . | sed "s,;$prgcat: ,;,")"
    fi
    if [ "$opt_d" = "1" ]; then
      x="$( hoorex -a $i | cut -d' ' -f2- )"
      [ "$x" != "" ] && echo -n " | $x"
    fi
    echo
  else
    warn "$i not found in repo"
  fi
done