mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 20:13:32 +01:00
102 lines
1.5 KiB
Bash
102 lines
1.5 KiB
Bash
#!/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
|
|
|