#!/bin/sh myname=`basename $0` usage() { cat << EOT | sed 's/^ |//' | | $myname [global options] cmd [cmd-arguments] ... | | global options are: | | -j : project is a jannet-project (default is a private project) | | commands are: | | create-personal-project name | list-personal-projects | EOT [ "$1" ] && exit $1 } log() { echo $@ } err() { echo $@ >&2 } fatal() { err $@ exit 1 } md() { local dir=$1 local mode=$2 local owner=$3 local group=$4 [ -d $dir ] || { log "creating $dir as $owner.$group with mode $mode" /usr/bin/install -m $mode -o $owner -g $group -d $dir || { fatal "failed to create directory $dir" } } } # ----------------- commands md_p() { if [ -d "$1" ]; then return fi md_p `dirname $1` $2 $3 $4 md $@ } create_project_dir() { if [ "$UID" != 0 ]; then fatal "tried to create directory \"$dir\" as `whoami`, needs to be done as root" fi md_p `dirname $dir` 750 root jannet md_p $dir 770 root $id } create_personal_project() { [ -e $dir ] && fatal "$dir already exists" /usr/bin/sudo `readlink -f $0` create-project-dir $dir || fatal "failed to set root uid" cd $dir || fatal "failed to change to $dir" git init --bare || fatal "git init failed" } list_personal_projects() { cd $pdir ls */HEAD | sed 's%/HEAD%%' 2>/dev/null } # ----------------- here we go id=`whoami` [ "$SUDO_UID" ] && { id=`/opt/ytools/bin/getpwuid $SUDO_UID | sed '/^name *=/ !d; s/^name *= *//'` [ "$id" ] || fatal "failed to find uid $SUDO_UID in user database" } git_home=/srv/git/$id pdir=$git_home/priv OPTIND=1 while getopts jh flag; do case $flag in j) pdir=$git_home/proj;; h) usage 0;; *) usage 1;; esac done shift $(($OPTIND - 1)) cmd=$1 shift p=$1 dir=$pdir/$p case $cmd in create-personal-project) create_personal_project "$@" ;; list-personal-projects) list_personal_projects "$@" ;; create-project-dir) dir=$1 # this is all a horrible variable and usage mess create_project_dir "$@" ;; *) usage 1 ;; esac