#!/bin/sh myname=`basename $0` usage() { cat << EOT | sed 's/^ |//' | | $myname cmd [cmd-arguments] ... | | 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 create_personal_project() { [ -e $dir ] && fatal "$dir already exists" if [ "$UID" = 0 ]; then md /srv/git 750 root jannet md /srv/git/$id 750 root jannet md /srv/git/$id/proj 750 root jannet md /srv/git/$id/proj/$p 770 root $id exit 0 fi /usr/bin/sudo $0 create-personal-project $p || 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 cmd=$1 shift 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" } p=$1 pdir=/srv/git/$id/proj dir=$pdir/$p case $cmd in create-personal-project) create_personal_project "$@" exit 1 ;; list-personal-projects) list_personal_projects "$@" ;; *) usage 1 ;; esac