maj prefixe et meilleur affichage des erreurs
This commit is contained in:
parent
307fa4827a
commit
764dd53bf8
|
@ -1,15 +1,31 @@
|
||||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
|
# Liste de préfixes permettant de taper le nom d'un dépôt plus rapidement e.g
|
||||||
|
# pcrone g/ssi-php/myproj
|
||||||
|
# pcrone v:modules/myproj
|
||||||
|
# sont équivalents à
|
||||||
|
# pcrone https://git.univ-reunion.fr/ssi-php/myproj
|
||||||
|
# pcrone git@vcs.univ.run:modules/myproj
|
||||||
|
# Ces définitions fonctionnent aussi pour pclone
|
||||||
|
# Le format est ALIAS=ACTUAL
|
||||||
|
REPO_PREFIXES=(
|
||||||
|
s:=git@git.univ-reunion.fr:
|
||||||
|
g/=https://git.univ-reunion.fr/
|
||||||
|
v:=git@vcs.univ.run: av/=https://vcs.univ-reunion.fr/anongit/
|
||||||
|
p:=pgit@vcs.univ.run: ap/=https://pvcs.univ-reunion.fr/anongit/
|
||||||
|
)
|
||||||
|
|
||||||
# Définitions des types de dépôt. Le format est NAME:TYPE:PREFIX
|
# Définitions des types de dépôt. Le format est NAME:TYPE:PREFIX
|
||||||
# * NAME est utilisé pour définir des configurations supplémentaires
|
# * NAME est utilisé pour définir des configurations supplémentaires
|
||||||
# * TYPE peut valoir gitolite ou gogs. Le type par défaut est 'gitolite'
|
# * TYPE peut valoir gitolite ou gogs (ou gitea qui est un alias de gogs). Le
|
||||||
|
# type par défaut est 'gitolite'
|
||||||
REPO_TYPES=(
|
REPO_TYPES=(
|
||||||
ur:gogs:https://gogs.univ-reunion.fr/
|
ur:gitea:https://git.univ-reunion.fr/
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configuration de l'accès à l'API gogs
|
# 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
|
# un nom de dépôt est de la forme user/repo. Si user != $GOGS_USER alors on crée
|
||||||
# dans une organisation
|
# dans une organisation
|
||||||
#ur_GOGS_URL=https://gogs.univ-reunion.fr
|
#ur_GOGS_URL=https://git.univ-reunion.fr
|
||||||
#ur_GOGS_USER="$USER"
|
#ur_GOGS_USER="$USER"
|
||||||
#ur_GOGS_KEY=
|
#ur_GOGS_KEY=
|
||||||
|
|
120
uproject
120
uproject
|
@ -241,6 +241,78 @@ done
|
||||||
################################################################################
|
################################################################################
|
||||||
# Traiter les commandes
|
# Traiter les commandes
|
||||||
|
|
||||||
|
function cxone_init() {
|
||||||
|
repourl="${1%.git}"
|
||||||
|
[ -n "$repourl" ] || return
|
||||||
|
rname=
|
||||||
|
rtype=gitolite
|
||||||
|
rprefix=
|
||||||
|
|
||||||
|
REPO_PREFIXES=()
|
||||||
|
REPO_TYPES=()
|
||||||
|
set_defaults pcrone
|
||||||
|
|
||||||
|
# Traduire les aliases éventuels
|
||||||
|
local asrcdest asrc adest
|
||||||
|
for asrcdest in "${REPO_PREFIXES[@]}"; do
|
||||||
|
splitfsep "$asrcdest" = asrc adest
|
||||||
|
if [ "${repourl#$asrc}" != "$repourl" ]; then
|
||||||
|
newurl="$adest${repourl#$asrc}"
|
||||||
|
if [ "$newurl" != "$repourl" ]; then
|
||||||
|
enote "$repourl --> $newurl"
|
||||||
|
repourl="$newurl"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
local rnametypeprefix tmp found
|
||||||
|
for rnametypeprefix in "${REPO_TYPES[@]}"; do
|
||||||
|
splitfsep "$rnametypeprefix" : rname tmp
|
||||||
|
splitfsep "$tmp" : rtype rprefix
|
||||||
|
if [ "${repourl#$rprefix}" != "$repourl" ]; then
|
||||||
|
found=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$found" ]; then
|
||||||
|
rname=
|
||||||
|
rtype=gitolite
|
||||||
|
rprefix=
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function curlto() {
|
||||||
|
local url="$1"; shift
|
||||||
|
local payload="$1"; shift
|
||||||
|
local outfile="$1"; shift
|
||||||
|
local tmpfile
|
||||||
|
if [ -z "$outfile" ]; then
|
||||||
|
ac_set_tmpfile tmpfile
|
||||||
|
outfile="$tmpfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local -a args
|
||||||
|
local r http_code
|
||||||
|
args=(-s -w '%{http_code}' -o "$outfile")
|
||||||
|
[ -n "$payload" ] && args+=(-d "$payload")
|
||||||
|
args+=("$@" "$url")
|
||||||
|
setx http_code=curl "${args[@]}"
|
||||||
|
|
||||||
|
case "$http_code" in
|
||||||
|
2*) r=0;;
|
||||||
|
4*) r=1;;
|
||||||
|
5*) r=3;;
|
||||||
|
*) r=11;;
|
||||||
|
esac
|
||||||
|
if [ -n "$tmpfile" ]; then
|
||||||
|
cat "$tmpfile"
|
||||||
|
ac_clean "$tmpfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
upvar http_code "$http_code"
|
||||||
|
return "$r"
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$CMD" == "grep" ]; then
|
if [ "$CMD" == "grep" ]; then
|
||||||
## grep
|
## grep
|
||||||
if [ $# -eq 1 -a "$1" == "--help" ]; then
|
if [ $# -eq 1 -a "$1" == "--help" ]; then
|
||||||
|
@ -339,9 +411,14 @@ NR <= 2 { next }
|
||||||
-r,--recursive recursive=1 \
|
-r,--recursive recursive=1 \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
|
cxone_init "$@"
|
||||||
|
[ -n "$repourl" ] && set -- "$repourl" "${@:2}"
|
||||||
|
|
||||||
if [ -n "$recursive" ]; then
|
if [ -n "$recursive" ]; then
|
||||||
repobase="$1"
|
repobase="$1"
|
||||||
[ -n "$repobase" ] || die "Vous devez spécifier l'url de base des dépôts à cloner"
|
[ -n "$repobase" ] || die "Vous devez spécifier l'url de base des dépôts à cloner"
|
||||||
|
[ "$rtype" == gitolite ] || die "Le clonage récursif n'est supporté que pour les dépôts de type gitolite"
|
||||||
|
|
||||||
if [ "${repobase#http://}" != "$repobase" -o "${repobase#https://}" != "$repobase" ]; then
|
if [ "${repobase#http://}" != "$repobase" -o "${repobase#https://}" != "$repobase" ]; then
|
||||||
# accès par http
|
# accès par http
|
||||||
mode=http
|
mode=http
|
||||||
|
@ -417,27 +494,10 @@ NR <= 2 { next }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$CMD" == crone ]; then
|
elif [ "$CMD" == crone ]; then
|
||||||
REPO_TYPES=()
|
cxone_init "$@"
|
||||||
set_defaults pcrone
|
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
found=
|
if [ "$rtype" == "gitolite" ]; then
|
||||||
for repo_ntp in "${REPO_TYPES[@]}"; do
|
|
||||||
splitfsep "$repo_ntp" : name tmp
|
|
||||||
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
|
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
||||||
# accès par http
|
# accès par http
|
||||||
mode=gitolite_http
|
mode=gitolite_http
|
||||||
|
@ -455,15 +515,15 @@ elif [ "$CMD" == crone ]; then
|
||||||
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
||||||
userhost="$user@$host"
|
userhost="$user@$host"
|
||||||
fi
|
fi
|
||||||
elif [ "$type" == "gogs" ]; then
|
elif [ "$rtype" == gogs -o "$rtype" == gitea ]; then
|
||||||
mode=gogs_http
|
mode=gogs_http
|
||||||
gogs_url="${name}_GOGS_URL"; gogs_url="${!gogs_url}"
|
gogs_url="${rname}_GOGS_URL"; gogs_url="${!gogs_url}"
|
||||||
gogs_user="${name}_GOGS_USER"; gogs_user="${!gogs_user}"
|
gogs_user="${rname}_GOGS_USER"; gogs_user="${!gogs_user}"
|
||||||
gogs_key="${name}_GOGS_KEY"; gogs_key="${!gogs_key}"
|
gogs_key="${rname}_GOGS_KEY"; gogs_key="${!gogs_key}"
|
||||||
userpath="${repourl#$prefix}"
|
userpath="${repourl#$rprefix}"
|
||||||
splitfsep "$userpath" / user path
|
splitfsep "$userpath" / user path
|
||||||
else
|
else
|
||||||
die "$type: type de dépôt non supporté"
|
die "$rtype: type de dépôt non supporté"
|
||||||
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"
|
||||||
|
|
||||||
|
@ -508,11 +568,13 @@ elif [ "$CMD" == crone ]; then
|
||||||
else
|
else
|
||||||
url="$gogs_url/api/v1/user/repos"
|
url="$gogs_url/api/v1/user/repos"
|
||||||
fi
|
fi
|
||||||
setx result=curl -fs \
|
setx result=curlto "$url" "$payload" "" \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-H "Authorization: token $gogs_key" \
|
-H "Authorization: token $gogs_key" || \
|
||||||
-d "$payload" \
|
die "Une erreur s'est produite lors de la tentative de création du dépôt
|
||||||
"$url" || die "Une erreur s'est produite lors de la tentative de création du dépôt"
|
url: $url
|
||||||
|
payload: $payload
|
||||||
|
result: $result"
|
||||||
echo "$result"
|
echo "$result"
|
||||||
if [ -n "$tmpdestdir" ]; then
|
if [ -n "$tmpdestdir" ]; then
|
||||||
setxx destname=abspath "$destdir" // basename
|
setxx destname=abspath "$destdir" // basename
|
||||||
|
|
Loading…
Reference in New Issue