pcrone: possibilité de créer des dépôts gogs
This commit is contained in:
parent
e3ba5800c0
commit
9d991e2d43
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
# Définitions des types de dépôt. Le format est NAME:TYPE:PREFIX
|
||||||
|
# * NAME est utilisé pour définir des configurations supplémentaires
|
||||||
|
# * TYPE peut valoir gitolite ou gogs. Le type par défaut est 'gitolite'
|
||||||
|
REPO_TYPES=(
|
||||||
|
ur:gogs:https://gogs.univ-reunion.fr/
|
||||||
|
)
|
||||||
|
|
||||||
|
# Configuration de l'accès à l'API gogs
|
||||||
|
# un nom de dépôt est de la forme user/repo. Si user != $GOGS_USER alors on crée
|
||||||
|
# dans une organisation
|
||||||
|
#ur_GOGS_URL=https://gogs.univ-reunion.fr
|
||||||
|
#ur_GOGS_USER="$USER"
|
||||||
|
#ur_GOGS_KEY=
|
98
uproject
98
uproject
|
@ -417,24 +417,53 @@ NR <= 2 { next }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$CMD" == crone ]; then
|
elif [ "$CMD" == crone ]; then
|
||||||
|
REPO_TYPES=()
|
||||||
|
set_defaults pcrone
|
||||||
|
|
||||||
repourl="${1%.git}"
|
repourl="${1%.git}"
|
||||||
[ -n "$repourl" ] || die "Vous devez spécifier l'url du dépôt git"
|
[ -n "$repourl" ] || die "Vous devez spécifier l'url du dépôt git"
|
||||||
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
|
||||||
# accès par http
|
found=
|
||||||
mode=http
|
for repo_ntp in "${REPO_TYPES[@]}"; do
|
||||||
splitfsep "$repourl" :// scheme hostuserpath
|
splitfsep "$repo_ntp" : name tmp
|
||||||
splitfsep "$hostuserpath" / host userpath
|
splitfsep "$tmp" : type prefix
|
||||||
|
if [ "${repourl#$prefix}" != "$repourl" ]; then
|
||||||
|
found=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$found" ]; then
|
||||||
|
name=
|
||||||
|
type=gitolite
|
||||||
|
prefix=
|
||||||
|
fi
|
||||||
|
if [ "$type" == "gitolite" ]; then
|
||||||
|
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
||||||
|
# accès par http
|
||||||
|
mode=gitolite_http
|
||||||
|
splitfsep "$repourl" :// scheme hostuserpath
|
||||||
|
splitfsep "$hostuserpath" / host userpath
|
||||||
|
splitfsep "$userpath" / user path
|
||||||
|
[ -n "$host" -a -n "$user" ] || die "Vous devez spécifier l'hôte e.g http://host/git/repo"
|
||||||
|
hostuser="$scheme://$host/$user"
|
||||||
|
else
|
||||||
|
# accès par ssh
|
||||||
|
mode=gitolite_ssh
|
||||||
|
splitfsep "$repourl" : userhost path
|
||||||
|
splituserhost "$userhost" user host
|
||||||
|
[ -n "$user" ] || user=git
|
||||||
|
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
||||||
|
userhost="$user@$host"
|
||||||
|
fi
|
||||||
|
elif [ "$type" == "gogs" ]; then
|
||||||
|
mode=gogs_http
|
||||||
|
gogs_url="${name}_GOGS_URL"; gogs_url="${!gogs_url}"
|
||||||
|
gogs_user="${name}_GOGS_USER"; gogs_user="${!gogs_user}"
|
||||||
|
gogs_key="${name}_GOGS_KEY"; gogs_key="${!gogs_key}"
|
||||||
|
userpath="${repourl#$prefix}"
|
||||||
splitfsep "$userpath" / user path
|
splitfsep "$userpath" / user path
|
||||||
[ -n "$host" -a -n "$user" ] || die "Vous devez spécifier l'hôte e.g http://host/git/repo"
|
|
||||||
hostuser="$scheme://$host/$user"
|
|
||||||
else
|
else
|
||||||
# accès par ssh
|
die "$type: type de dépôt non supporté"
|
||||||
mode=ssh
|
|
||||||
splitfsep "$repourl" : userhost path
|
|
||||||
splituserhost "$userhost" user host
|
|
||||||
[ -n "$user" ] || user=git
|
|
||||||
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
|
||||||
userhost="$user@$host"
|
|
||||||
fi
|
fi
|
||||||
[ -n "$path" ] || die "Vous devez spécifier le chemin du dépôt git"
|
[ -n "$path" ] || die "Vous devez spécifier le chemin du dépôt git"
|
||||||
|
|
||||||
|
@ -449,7 +478,7 @@ elif [ "$CMD" == crone ]; then
|
||||||
ac_set_tmpdir tmpdestdir
|
ac_set_tmpdir tmpdestdir
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$mode" == http ]; then
|
if [ "$mode" == gitolite_http ]; then
|
||||||
setx result=curl -fs "$hostuser/create?$path" || die
|
setx result=curl -fs "$hostuser/create?$path" || die
|
||||||
echo "$result"
|
echo "$result"
|
||||||
[[ "$result" == FATAL:* ]] && die
|
[[ "$result" == FATAL:* ]] && die
|
||||||
|
@ -461,7 +490,7 @@ elif [ "$CMD" == crone ]; then
|
||||||
else
|
else
|
||||||
git clone "$hostuser/$path" "$destdir" || die
|
git clone "$hostuser/$path" "$destdir" || die
|
||||||
fi
|
fi
|
||||||
elif [ "$mode" == ssh ]; then
|
elif [ "$mode" == gitolite_ssh ]; then
|
||||||
git_annex_use_ssh_wrapper
|
git_annex_use_ssh_wrapper
|
||||||
ssh "$userhost" create "$path" || die
|
ssh "$userhost" create "$path" || die
|
||||||
if [ -n "$tmpdestdir" ]; then
|
if [ -n "$tmpdestdir" ]; then
|
||||||
|
@ -472,19 +501,50 @@ elif [ "$CMD" == crone ]; then
|
||||||
else
|
else
|
||||||
git clone "$userhost:$path" "$destdir" || die
|
git clone "$userhost:$path" "$destdir" || die
|
||||||
fi
|
fi
|
||||||
|
elif [ "$mode" == gogs_http ]; then
|
||||||
|
payload='{"private":true,"name":"'"$path"'"}'
|
||||||
|
if [ "$gogs_user" != "$user" ]; then
|
||||||
|
url="$gogs_url/api/v1/org/$user/repos"
|
||||||
|
else
|
||||||
|
url="$gogs_url/api/v1/user/repos"
|
||||||
|
fi
|
||||||
|
setx result=curl -fs \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-H "Authorization: token $gogs_key" \
|
||||||
|
-d "$payload" \
|
||||||
|
"$url" || die "Une erreur s'est produite lors de la tentative de création du dépôt"
|
||||||
|
echo "$result"
|
||||||
|
if [ -n "$tmpdestdir" ]; then
|
||||||
|
setxx destname=abspath "$destdir" // basename
|
||||||
|
git clone "$repourl" "$tmpdestdir/$destname" || die
|
||||||
|
mv "$tmpdestdir/$destname/.git" "$destdir" || die
|
||||||
|
ac_clean "$tmpdestdir"
|
||||||
|
else
|
||||||
|
git clone "$repourl" "$destdir" || die
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
die "bug: mode non prévu"
|
die "bug: mode non prévu"
|
||||||
fi
|
fi
|
||||||
if ask_yesno "Voulez-vous créer des fichiers .gitignore et .gitattributes initiaux?" O; then
|
if [ ! -f "$destdir/.gitignore" -o ! -f "$destdir/.gitattributes" ]; then
|
||||||
echo >"$destdir/.gitignore" "\
|
if ask_yesno "Voulez-vous créer les fichiers initiaux .gitignore et/ou .gitattributes?" O; then
|
||||||
|
if [ -f "$destdir/.gitignore" ]; then
|
||||||
|
einfo "Refus d'écraser le fichier .gitignore existant"
|
||||||
|
else
|
||||||
|
echo >"$destdir/.gitignore" "\
|
||||||
.~lock*#
|
.~lock*#
|
||||||
.*.swp"
|
.*.swp"
|
||||||
echo >"$destdir/.gitattributes" "\
|
fi
|
||||||
|
if [ -f "$destdir/.gitattributes" ]; then
|
||||||
|
einfo "Refus d'écraser le fichier .gitattributes existant"
|
||||||
|
else
|
||||||
|
echo >"$destdir/.gitattributes" "\
|
||||||
*.zip -delta
|
*.zip -delta
|
||||||
*.gz -delta
|
*.gz -delta
|
||||||
*.bz2 -delta
|
*.bz2 -delta
|
||||||
*.whl -delta
|
*.whl -delta
|
||||||
*.exe -delta"
|
*.exe -delta"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$CMD" == xconfig-export ]; then
|
elif [ "$CMD" == xconfig-export ]; then
|
||||||
|
|
Loading…
Reference in New Issue