mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 20:13:32 +01:00
113 lines
1.4 KiB
Bash
113 lines
1.4 KiB
Bash
#!/bin/sh
|
|
|
|
log()
|
|
{
|
|
echo $@
|
|
}
|
|
|
|
err()
|
|
{
|
|
log $@
|
|
}
|
|
|
|
fatal()
|
|
{
|
|
err $@
|
|
exit 1
|
|
}
|
|
|
|
marker()
|
|
{
|
|
log "# ============= $@"
|
|
}
|
|
|
|
config()
|
|
{
|
|
pdir=`pwd`
|
|
while [ `basename $pdir` != proj ]; do
|
|
[ "$pdir" = / ] && fatal "didn't find \"proj\" in directory components"
|
|
pdir=`dirname $pdir`
|
|
done
|
|
pdirs=`(cd $pdir; ls -d */.git | sed 's%/.git%%')`
|
|
}
|
|
|
|
# ------------- commands
|
|
clone()
|
|
{(
|
|
local p
|
|
config
|
|
cd $pdir
|
|
local id=$PGIT_CLONE_FROM_USER
|
|
local projects="$PGIT_CLONE_PROJECTS"
|
|
[ "$id" ] || id=`whoami`
|
|
[ "$projects" ] || projects=`ssh git.jannet.de /opt/ytools/bin/git-srv-admin.sh -u $id -j list-personal-projects`
|
|
for p in $projects; do
|
|
[ -d $p ] && {
|
|
marker "skipping existing $p"
|
|
continue
|
|
}
|
|
marker "cloning $p"
|
|
git clone ssh://$id@git.jannet.de/srv/git/$id/proj/$p
|
|
done
|
|
)}
|
|
|
|
pull()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
for d in $pdirs; do
|
|
marker "$d"
|
|
(cd $d; git pull "$@")
|
|
done
|
|
)}
|
|
|
|
branch()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
for d in $pdirs; do
|
|
marker "$d"
|
|
(cd $d; git branch "$@")
|
|
done
|
|
)}
|
|
|
|
diff()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
for d in $pdirs; do
|
|
marker $d
|
|
(cd $d; git diff --src-prefix=a/$d/ --dst-prefix=b/$d/ "$@")
|
|
done
|
|
)}
|
|
|
|
commit()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
|
|
for d in $pdirs; do
|
|
marker $d
|
|
(cd $d; git commit "$@")
|
|
done
|
|
)}
|
|
|
|
push()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
for d in $pdirs; do
|
|
marker $d
|
|
(cd $d; git push "$@")
|
|
done
|
|
)}
|
|
|
|
cmd=$1
|
|
shift
|
|
$cmd "$@"
|
|
|