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
|
||||
|
||||
# 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
|
||||
# * 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=(
|
||||
ur:gogs:https://gogs.univ-reunion.fr/
|
||||
ur:gitea:https://git.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_URL=https://git.univ-reunion.fr
|
||||
#ur_GOGS_USER="$USER"
|
||||
#ur_GOGS_KEY=
|
||||
|
|
120
uproject
120
uproject
|
@ -241,6 +241,78 @@ done
|
|||
################################################################################
|
||||
# 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
|
||||
## grep
|
||||
if [ $# -eq 1 -a "$1" == "--help" ]; then
|
||||
|
@ -339,9 +411,14 @@ NR <= 2 { next }
|
|||
-r,--recursive recursive=1 \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
cxone_init "$@"
|
||||
[ -n "$repourl" ] && set -- "$repourl" "${@:2}"
|
||||
|
||||
if [ -n "$recursive" ]; then
|
||||
repobase="$1"
|
||||
[ -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
|
||||
# accès par http
|
||||
mode=http
|
||||
|
@ -417,27 +494,10 @@ NR <= 2 { next }
|
|||
fi
|
||||
|
||||
elif [ "$CMD" == crone ]; then
|
||||
REPO_TYPES=()
|
||||
set_defaults pcrone
|
||||
|
||||
repourl="${1%.git}"
|
||||
cxone_init "$@"
|
||||
[ -n "$repourl" ] || die "Vous devez spécifier l'url du dépôt git"
|
||||
|
||||
found=
|
||||
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 [ "$rtype" == "gitolite" ]; then
|
||||
if [ "${repourl#http://}" != "$repourl" -o "${repourl#https://}" != "$repourl" ]; then
|
||||
# accès par http
|
||||
mode=gitolite_http
|
||||
|
@ -455,15 +515,15 @@ elif [ "$CMD" == crone ]; then
|
|||
[ -n "$host" ] || die "Vous devez spécifier l'hôte"
|
||||
userhost="$user@$host"
|
||||
fi
|
||||
elif [ "$type" == "gogs" ]; then
|
||||
elif [ "$rtype" == gogs -o "$rtype" == gitea ]; 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}"
|
||||
gogs_url="${rname}_GOGS_URL"; gogs_url="${!gogs_url}"
|
||||
gogs_user="${rname}_GOGS_USER"; gogs_user="${!gogs_user}"
|
||||
gogs_key="${rname}_GOGS_KEY"; gogs_key="${!gogs_key}"
|
||||
userpath="${repourl#$rprefix}"
|
||||
splitfsep "$userpath" / user path
|
||||
else
|
||||
die "$type: type de dépôt non supporté"
|
||||
die "$rtype: type de dépôt non supporté"
|
||||
fi
|
||||
[ -n "$path" ] || die "Vous devez spécifier le chemin du dépôt git"
|
||||
|
||||
|
@ -508,11 +568,13 @@ elif [ "$CMD" == crone ]; then
|
|||
else
|
||||
url="$gogs_url/api/v1/user/repos"
|
||||
fi
|
||||
setx result=curl -fs \
|
||||
setx result=curlto "$url" "$payload" "" \
|
||||
-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"
|
||||
-H "Authorization: token $gogs_key" || \
|
||||
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"
|
||||
if [ -n "$tmpdestdir" ]; then
|
||||
setxx destname=abspath "$destdir" // basename
|
||||
|
|
Loading…
Reference in New Issue