mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 12:03:31 +01:00
127 lines
2.5 KiB
Bash
127 lines
2.5 KiB
Bash
#!/bin/sh
|
|
|
|
log()
|
|
{
|
|
echo $@
|
|
}
|
|
|
|
err()
|
|
{
|
|
log $@
|
|
}
|
|
|
|
fatal()
|
|
{
|
|
err $@
|
|
exit 1
|
|
}
|
|
|
|
marker()
|
|
{
|
|
log "# ============= $@"
|
|
}
|
|
|
|
config()
|
|
{
|
|
# guess pdir
|
|
pdir=`pwd`
|
|
while [ `cat $pdir/CVS/Repository 2>/dev/null` != proj ]; do
|
|
[ "$pdir" = / ] && fatal "didn't find \"proj\" in directory components"
|
|
pdir=`dirname $pdir`
|
|
done
|
|
pdirs=`(cd $pdir; ls -d */.git 2>/dev/null | sed 's%/.git%%')`
|
|
}
|
|
|
|
# ------------- commands
|
|
run()
|
|
{(
|
|
local d
|
|
local cmd=$1
|
|
shift
|
|
config
|
|
cd $pdir
|
|
|
|
#set -e
|
|
for d in $pdirs; do
|
|
marker $d
|
|
git -C $d $cmd "$@"
|
|
done
|
|
)}
|
|
|
|
clone()
|
|
{(
|
|
local p
|
|
config
|
|
cd $pdir
|
|
local fromuser=$PGIT_CLONE_FROM_USER
|
|
local login=$JANWARE_USER
|
|
local projects="$PGIT_CLONE_PROJECTS"
|
|
[ "$login" ] || login=`whoami`
|
|
[ "$fromuser" ] || fromuser=`whoami`
|
|
local git_srv_admin="$SSH $login@git.jannet.de /opt/jw-build/bin/git-srv-admin.sh"
|
|
if [ -z "$projects" ]; then
|
|
projects=`$git_srv_admin -u $fromuser -j list-personal-projects`
|
|
[ "$?" != 0 ] && exit 1
|
|
fi
|
|
set -e
|
|
for p in $projects; do
|
|
local pullurl=ssh://$login@git.jannet.de/srv/git/$fromuser/proj/$p
|
|
local pushurl=ssh://$login@git.jannet.de/srv/git/$login/proj/$p
|
|
marker "pulling $p from user $fromuser"
|
|
if [ "$fromuser" = "$login" ]; then
|
|
if [ -d $p ]; then
|
|
git -C $p pull
|
|
else
|
|
git clone ssh://$login@git.jannet.de/srv/git/$fromuser/proj/$p
|
|
git -C $p submodule init || fatal git submodule init failed in `pwd`
|
|
git -C $p submodule update || fatal git submodule update failed in `pwd`
|
|
fi
|
|
else
|
|
if [ -d $p ]; then
|
|
git -C $p remote | grep -q "^$fromuser$" || {
|
|
git -C $p remote add $fromuser $pullurl
|
|
git -C $p remote set-url --push $fromuser no_push
|
|
}
|
|
git -C $p pull $fromuser master
|
|
else
|
|
set -x
|
|
git clone ssh://$login@git.jannet.de/srv/git/$fromuser/proj/$p
|
|
git -C $p remote rename origin $fromuser || fatal failed to rename remote in `pwd`
|
|
git -C $p remote set-url --push $fromuser no_push
|
|
$git_srv_admin -u $login -j create-personal-project $p
|
|
git -C $p remote add origin $pushurl
|
|
git -C $p push origin master
|
|
git -C $p branch --set-upstream-to origin/master master
|
|
set +x
|
|
fi
|
|
git -C $p submodule init || fatal git submodule init failed in `pwd`
|
|
git -C $p submodule update || fatal git submodule update failed in `pwd`
|
|
fi
|
|
done
|
|
)}
|
|
|
|
diff()
|
|
{(
|
|
local d
|
|
config
|
|
cd $pdir
|
|
for d in $pdirs; do
|
|
marker $d
|
|
git -C $d diff --src-prefix=a/$d/ --dst-prefix=b/$d/ "$@"
|
|
done
|
|
)}
|
|
|
|
SSH=ssh
|
|
[ "$GIT_SSH" ] && SSH=$GIT_SSH
|
|
|
|
cmd=$1
|
|
shift
|
|
case $cmd in
|
|
clone|diff)
|
|
$cmd "$@"
|
|
;;
|
|
*)
|
|
run $cmd "$@"
|
|
;;
|
|
esac
|
|
|