Compare commits

..

No commits in common. "87b8d5b5b095cd25950c0c272defeb77163e8845" and "ef1c8f2996a9f8bd86408c7d308fefbf29065e8d" have entirely different histories.

2 changed files with 19 additions and 86 deletions

View File

@ -2,30 +2,10 @@
<?php # -*- coding: utf-8 mode: php -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8 <?php # -*- coding: utf-8 mode: php -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
function fix_value($value) { function fix_value($value) {
if ($value === "true") return true; if ($value === "true") return true;
elseif ($value === "false") return false; elseif ($value === "false") return false;
elseif ($value === "null") return null; elseif ($value === "null") return null;
else return $value; else return $value;
}
function setp(&$array, $keys, $value) {
if (is_array($keys)) $keys = implode(".", $keys);
$keys = explode(".", $keys);
$last = count($keys) - 1;
$i = 0;
if ($array === null) $array = array();
$current =& $array;
foreach ($keys as $key) {
if ($i == $last) break;
if (!array_key_exists($key, $current)) $current[$key] = array();
if (!is_array($current[$key])) $current[$key] = array($current[$key]);
$current =& $current[$key];
$i++;
}
if ($key === "") {
$current[] = $value;
} else {
$current[$key] = $value;
}
} }
$data = array(); $data = array();
@ -35,10 +15,9 @@ for ($i = 1; $i < $argc; $i++) {
if (preg_match('/(.*?)=(.*)/', $namevalue, $ms)) { if (preg_match('/(.*?)=(.*)/', $namevalue, $ms)) {
$name = $ms[1]; $name = $ms[1];
$value = fix_value($ms[2]); $value = fix_value($ms[2]);
setp($data, $name, $value); $data[$name] = $value;
} else { } else {
$value = fix_value($namevalue); $data[] = fix_value($namevalue);
$data[] = $value;
} }
$empty = false; $empty = false;
} }

72
repoctl
View File

@ -21,22 +21,12 @@ ACTIONS
VARs est une liste de variables à afficher pour chaque dépôt, séparés VARs est une liste de variables à afficher pour chaque dépôt, séparés
par le caractère tabulation. La valeur par défaut est full_name par le caractère tabulation. La valeur par défaut est full_name
get URL [VARs...]
Afficher les propriétés du dépôt spécifié. VARs est une liste de
variables à afficher pour le dépôt, séparés par le caractère tabulation.
edit URL var=value...
Modifier les propriétés du dépôt. Consulter l'API pour la liste exacte
des propriétés pouvant être modifiées. Avec gitea 1.9.3, il y a au moins
celles-là:
name
description
website
private
default_branch
delete URL delete URL
Supprimer le dépôt spécifié" Supprimer le dépôt spécifié"
# pas encore possible d'implémenter pour le moment:
#move URL ORG[/NAME]
# Déplacer le dépôt spécifié dans l'organisation spécifiée. Le cas
# échéant, le dépôt est renommé
} }
function json_build() { function json_build() {
@ -201,60 +191,26 @@ result: $result"
} }
################################################################################ ################################################################################
#XXX à implémenter. ça ne semble pas encore possible pour le moment. peut-être
# uniquement le renommage?!
function get_action() { function move_action() {
case "$rtype" in case "$rtype" in
#gitolite) ;; #gitolite) ;;
gogs|gitea) gogs|gitea)
gogs_setvars gogs_setvars
gogs_get_action "$@" gogs_move_action "$@"
;; ;;
*) die "$rtype: type de dépôt non supporté";; *) die "$rtype: type de dépôt non supporté";;
esac esac
} }
function gogs_get_action() { function gogs_move_action() {
local url payload result local url payload result
local -a vars local -a vars
setx payload=json_build name="$new_name"
url="$gogs_url/api/v1/repos/$user/$path" url="$gogs_url/api/v1/repos/$user/$path"
setx payload=json_build owner="$user" repo="$path"
[ $# -gt 0 ] && vars=("$@") || vars=("")
local HTTP_METHOD=GET
setx result=curlto "$url" "$payload" "" \
-H 'Content-Type: application/json' \
-H "Authorization: token $gogs_key" || \
die "Une erreur s'est produite lors de la tentative de déplacement du dépôt
url: $url
payload: $payload
result: $result"
echo "$result" | json_get "${vars[@]}"
}
################################################################################
function edit_action() {
case "$rtype" in
#gitolite) ;;
gogs|gitea)
gogs_setvars
gogs_edit_action "$@"
;;
*) die "$rtype: type de dépôt non supporté";;
esac
}
function gogs_edit_action() {
local url payload result
local -a vars
url="$gogs_url/api/v1/repos/$user/$path"
vars=(owner="$user" repo="$path")
while [[ "$1" == *=* ]]; do
vars+=("$1")
shift
done
setx payload=json_build "${vars[@]}"
[ $# -gt 0 ] && vars=("$@") || vars=("")
local HTTP_METHOD=PATCH local HTTP_METHOD=PATCH
[ $# -gt 0 ] && vars=("$@") || vars=("")
setx result=curlto "$url" "$payload" "" \ 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" || \
@ -301,8 +257,7 @@ args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-c,--create action=create -c,--create action=create
-l,--list action=list -l,--list action=list
-g,--get action=get #-m,--move action=move
-e,--edit action=edit
-d,--delete action=delete -d,--delete action=delete
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
@ -318,7 +273,6 @@ repoctl_init "$1"; shift
case "$action" in case "$action" in
c|create) create_action "$@";; c|create) create_action "$@";;
l|list) list_action "$@";; l|list) list_action "$@";;
g|get|s|show) get_action "$@";; #m|move) move_action "$@";;
e|edit) edit_action "$@";;
d|del|delete|rm|remove) delete_action "$@";; d|del|delete|rm|remove) delete_action "$@";;
esac esac