diff --git a/ulib/vcs b/ulib/vcs index db7b0aa..7667426 100644 --- a/ulib/vcs +++ b/ulib/vcs @@ -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 - -OPTIONS" + uproject $1 " } 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 - -OPTIONS" + uproject $1 " } 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 - -OPTIONS" + uproject $1 " } 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 - -OPTIONS" + uproject $1 " } 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[@]}" \ diff --git a/uproject b/uproject index 920773a..ae5583e 100755 --- a/uproject +++ b/uproject @@ -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