implémenter l'action push

This commit is contained in:
Jephte CLAIN 2014-02-12 05:18:57 +04:00
parent 423d971a13
commit 6353686d4a
2 changed files with 95 additions and 28 deletions

118
ulib/vcs
View File

@ -6,7 +6,7 @@ uprovide vcs
urequire base
################################################################################
# Général
# Général
function __vcs_get_type() {
# Afficher le type de vcs du répertoire $1. L'arborescence n'est pas
@ -196,9 +196,7 @@ function vcs_add_help() {
uecho "uproject $1: Ajouter les fichiers spécifiés dans le gestionnaire de version
USAGE
uproject $1 <files...>
OPTIONS"
uproject $1 <files...>"
}
function vcs_add() {
# le répertoire de référence est le répertoire du premier fichier ajouté
@ -210,9 +208,7 @@ function vcs_remove_help() {
uecho "uproject $1: Suppprimer les fichiers versionnés spécifiés du gestionaire de version
USAGE
uproject $1 <files...>
OPTIONS"
uproject $1 <files...>"
}
function vcs_remove() {
# le répertoire de référence est le répertoire du premier fichier supprimé
@ -224,9 +220,7 @@ function vcs_copy_help() {
uecho "uproject $1: Copier les fichiers versionnés spécifiés
USAGE
uproject $1 <sources...> <dest>
OPTIONS"
uproject $1 <sources...> <dest>"
}
function vcs_copy() {
# le répertoire de référence est le répertoire de destination
@ -239,9 +233,7 @@ function vcs_move_help() {
uecho "uproject $1: Déplacer les fichiers versionnés spécifiés
USAGE
uproject $1 <sources...> <dest>
OPTIONS"
uproject $1 <sources...> <dest>"
}
function vcs_move() {
# le répertoire de référence est le répertoire de destination
@ -254,9 +246,7 @@ function vcs_mkdir_help() {
uecho "uproject $1: Créer un nouveau répertoire versionné
USAGE
uproject $1
OPTIONS"
uproject $1"
}
function vcs_mkdir() {
# le répertoire de référence est le répertoire du premier répertoire créé
@ -275,7 +265,7 @@ Si files n'est pas spécifié, prendre tous les fichiers modifiés actuellement
OPTIONS
-a Enregistrer les modifications sur tous les fichiers modifiés.
-c Enregistrer uniquement les modifications de l'index. (si applicable)
-l Garder le commit local, i.e. les modifications ne sont pas pushées sur
-l Garder le commit local, i.e. les modifications ne sont pas poussées sur
le serveur. (si applicable)"
}
function vcs_commit() {
@ -307,6 +297,17 @@ function vcs_update() {
_vcs_dispatch "" update "$@"
}
########################################
function vcs_push_help() {
local OENC="$UTF8"
uecho "uproject $1: Pousser les modifications locales sur le serveur
USAGE
uproject $1"
}
function vcs_push() {
_vcs_dispatch "" push "$@"
}
########################################
function vcs_diff_help() {
local OENC="$UTF8"
uecho "uproject $1: Afficher les différences
@ -362,12 +363,13 @@ function git_mkdir() {
git mkdir "$@"
}
function git_commit() {
local all=auto nopush args
local all=auto push=auto args
normyesval nopush "$NOPUSH"
parse_opts + "${PRETTYOPTS[@]}" \
-a all=1 \
-c all= \
-l nopush=1 \
-a,--all all=1 \
-c,--cached all= \
-p,--push push=1 \
-l,--local push= \
@ args -- "$@" && set -- "${args[@]}" || {
eerror "$args"
return 1
@ -392,12 +394,17 @@ function git_commit() {
fi
else
[ -n "$all" ] && cmd=("${cmd[@]}" -a)
fi
"${cmd[@]}" "$@"
if [ -z "$nopush" ]; then
[ -n "$(git config --get remote.origin.url)" ] &&
git push origin master
fi
if ! "${cmd[@]}" "$@"; then
[ "$push" == auto ] && return 1
fi
if [ "$push" == auto ]; then
git_push --auto || return
elif [ -n "$push" ]; then
git_push --force || return
fi
return 0
}
function git_status() {
git status "$@"
@ -413,6 +420,49 @@ function git_update() {
git pull "$@"
}
function git_push() {
local auto force args
parse_opts + "${PRETTYOPTS[@]}" \
-a,--auto auto=1 \
-f,--force force=1 \
@ args -- "$@" && set -- "${args[@]}" || {
eerror "$args"
return 1
}
if [ $# -gt 0 ]; then
# si des arguments sont spécifiés, les passer à git sans modification
git push "$@"
return $?
fi
# sinon on push vers origin. vérifier la présence du remote
[ -n "$(git config --get remote.origin.url)" ] || {
if [ -n "$auto" ]; then
# en mode automatique, ignorer l'absence de remote
return 0
else
eerror "Aucun remote origin n'est défini"
return 1
fi
}
# puis calculer la branche à pusher
local branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"
local origin="$(git config --get "branch.$branch.remote")"
if [ -n "$branch" -a "$origin" == origin ]; then
if [ -n "$auto" ]; then
# en mode automatique, ne pousser que la branche courante
git push origin "$branch" || return
else
# pousser toutes les branches
git push || return
fi
elif [ -n "$force" ]; then
git push || return
fi
return 0
}
function git_diff() {
local dummy cached args
parse_opts + "${PRETTYOPTS[@]}" \
@ -477,6 +527,14 @@ function svn_update() {
svn update ${ignore_externals:+--ignore-externals} "$@"
}
function svn_push() {
local args
parse_opts + "${PRETTYOPTS[@]}" \
@ args -- "$@" && set -- "${args[@]}" || {
eerror "$args"
return 1
}
}
function svn_diff() {
local dummy revision args tmpfile0 tmpfile
parse_opts + "${PRETTYOPTS[@]}" \
@ -592,6 +650,14 @@ function cvs_update() {
cvs update "$@"
}
function cvs_push() {
local args
parse_opts + "${PRETTYOPTS[@]}" \
@ args -- "$@" && set -- "${args[@]}" || {
eerror "$args"
return 1
}
}
function cvs_diff() {
local dummy revision args tmpfile
parse_opts + "${PRETTYOPTS[@]}" \

View File

@ -72,7 +72,7 @@ COMMANDS
SCRIPT_ALIASES=(
pv:vcs
pa:add prm:remove pcp:copy pmv:move pmd:mkdir
pci:commit pu:update pdiff:diff
pci:commit pu:update pp:push pdiff:diff
pnew:new
pgr:grep
paddml:addml
@ -88,12 +88,13 @@ CMD_ALIASES=(
ci:commit
s:status st:status
u:update upd:update
p:push
gr:grep
)
DEFAULT_CMD=status
PY_CMDS=(new)
VCS_CMDS=(getvcs getroot getrepos geturl vcs add remove copy move mkdir commit status update push diff tag)
ML_CMDS=(printml addml)
VCS_CMDS=(getvcs getroot getrepos geturl vcs add remove copy move mkdir commit status update diff tag)
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
# créer les liens