From 3f925ca9823cb44f5eb9b39048afef2ce86e1ab3 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 13 Mar 2015 00:15:53 +0400 Subject: [PATCH 01/71] =?UTF-8?q?d=C3=A9placer=20le=20code=20de=20pver=20d?= =?UTF-8?q?ans=20ptools?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/ptools | 418 ++++++++++++++++++++++++++++++++++++++++++++---- pver | 327 +------------------------------------ 2 files changed, 392 insertions(+), 353 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index b8f286a..c8b990f 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -6,36 +6,67 @@ uprovide ptools urequire vcs semver -function __get_branch() { - local branch="$1" - [ -n "$branch" ] || branch="$(git_get_branch)" - echo "$branch" -} - -function is_master_branch() { - local branch; branch="$(__get_branch "$1")" || return 2 - [ "$branch" == "master" ] -} -function is_develop_branch() { - local branch; branch="$(__get_branch "$1")" || return 2 - [ "$branch" == "develop" ] -} -function is_release_branch() { - local branch; branch="$(__get_branch "$1")" || return 2 - [[ "$branch" == release-* ]] -} -function is_hotfix_branch() { - local branch; branch="$(__get_branch "$1")" || return 2 - [[ "$branch" == hotfix-* ]] -} -function is_feature_branch() { - local branch; branch="$(__get_branch "$1")" || return 2 - [ "$branch" == "master" ] && return 1 - [ "$branch" == "develop" ] && return 1 - [[ "$branch" == release-* ]] && return 1 - [[ "$branch" == hotfix-* ]] && return 1 - return 0 +function is_any_branch() { + local branch="$1"; shift + if [ -z "$branch" ]; then + branch="$(git_get_branch)" || return 2 + fi + local spec r + for spec in "$@"; do + case "$spec" in + m|master) + [ -n "$r" ] || r=1 + [ "$branch" == "master" ] && return 0 + ;; + d|develop) + [ -n "$r" ] || r=1 + [ "$branch" == "develop" ] && return 0 + ;; + r|release) + [ -n "$r" ] || r=1 + [[ "$branch" == release-* ]] && return 0 + ;; + h|hotfix) + [ -n "$r" ] || r=1 + [[ "$branch" == hotfix-* ]] && return 0 + ;; + f|feature|t|topic) + [ -n "$r" ] || r=1 + [ "$branch" == "master" ] && continue + [ "$branch" == "develop" ] && continue + [[ "$branch" == release-* ]] && continue + [[ "$branch" == hotfix-* ]] && continue + return 0 + ;; + -m|-master) + [ -n "$r" ] || r=0 + [ "$branch" == "master" ] && return 1;; + -d|-develop) + [ -n "$r" ] || r=0 + [ "$branch" == "develop" ] && return 1;; + -r|-release) + [ -n "$r" ] || r=0 + [[ "$branch" == release-* ]] && return 1;; + -h|-hotfix) + [ -n "$r" ] || r=0 + [[ "$branch" == hotfix-* ]] && return 1;; + -f|-feature|-t|-topic) + [ -n "$r" ] || r=0 + [ "$branch" == "master" ] && continue + [ "$branch" == "develop" ] && continue + [[ "$branch" == release-* ]] && continue + [[ "$branch" == hotfix-* ]] && continue + return 1 + ;; + esac + done + return ${r:-1} } +function is_master_branch() { is_any_branch "$1" master; } +function is_develop_branch() { is_any_branch "$1" develop; } +function is_release_branch() { is_any_branch "$1" release; } +function is_hotfix_branch() { is_any_branch "$1" hotfix; } +function is_feature_branch() { is_any_branch "$1" feature; } function list_release_branches() { git_list_branches | grep '^release-' @@ -50,3 +81,332 @@ function list_feature_branches() { grep -v '^release-' | grep -v '^hotfix-' } + +################################################################################ +# Outils de haut niveau + +function pver() { + local DEFAULT_FILE=VERSION.txt + + local -a args + local action=auto + local source=auto + local file= + local git= + local version= + local convert=auto + local operator= + local oversion= + local setversion= + local incversion= + local setprelease= + local setalpha= + local setbeta= + local setrc= + local setrelease= + local setmetadata= + local vcsmetadata= + parse_opts "${PRETTYOPTS[@]}" \ + --help '$exit_with pver_display_help' \ + -f:,--file: '$set@ file; source=file' \ + -F:,--file-string: '$set@ file; source=file-string' \ + -g:,--git-string: '$set@ git; source=git-string' \ + -s:,--string: '$set@ version; source=string' \ + --show action=show \ + --check action=check \ + --convert convert=1 \ + --no-convert convert= \ + --eq: '$action=compare; operator=eq; set@ oversion' \ + --ne: '$action=compare; operator=ne; set@ oversion' \ + --lt: '$action=compare; operator=lt; set@ oversion' \ + --le: '$action=compare; operator=le; set@ oversion' \ + --gt: '$action=compare; operator=gt; set@ oversion' \ + --ge: '$action=compare; operator=ge; set@ oversion' \ + -v:,--set-version: '$action=update; set@ setversion; incversion=' \ + -u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \ + --menu '$action=update; incversion=menu' \ + -x,--major '$action=update; incversion=major' \ + -z,--minor '$action=update; incversion=minor' \ + -p,--patchlevel '$action=update; incversion=patchlevel' \ + -l:,--prelease:,--prerelease: '$action=update; set@ setprelease; [ -z "$setprelease" ] && { setalpha=; setbeta=; setrc=; setrelease=1; }' \ + -a,--alpha '$action=update; setalpha=1; setbeta=; setrc=; setrelease=' \ + -b,--beta '$action=update; setalpha=; setbeta=1; setrc=; setrelease=' \ + -r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \ + -R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \ + -m:,--metadata: '$action=update; set@ setmetadata' \ + -M,--vcs-metadata '$action=update; vcsmetadata=1' \ + @ args -- "$@" && set -- "${args[@]}" || { eerror "$args"; return 1; } + + # Calculer la source + if [ "$source" == auto ]; then + source=file + for i in "$DEFAULT_FILE" version.txt; do + if [ -f "$i" ]; then + file="$i" + break + fi + done + elif [ "$source" == file ]; then + [ "$action" == auto ] && action=update + fi + [ "$source" == file -a -z "$file" ] && file="$DEFAULT_FILE" + [ "$action" == auto ] && action=show + + # Lire la version + if [ "$source" == file ]; then + [ -f "$file" ] && version="$(<"$file")" + elif [ "$source" == file-string ]; then + if [ -z "$file" ]; then + file="$DEFAULT_FILE" + elif [ -d "$file" ]; then + file="$file/$DEFAULT_FILE" + fi + [ -f "$file" ] && version="$(<"$file")" + file= + elif [ "$source" == git-string ]; then + splitfsep2 "$git" : branch name + [ -n "$branch" ] || branch=master + [ -n "$name" ] || name="$DEFAULT_FILE" + if git rev-parse --verify --quiet "$branch:$name" >/dev/null; then + version="$(git cat-file blob "$branch:$name" 2>/dev/null)" + fi + fi + [ -n "$version" ] || version=0.0.0 + + # Conversion éventuelle du numéro de version + psemver_parse "$version" + [ -n "$valid" ] && convert= + if [ "$convert" == auto ]; then + [ -z "$valid" ] && convert=1 + fi + if [ -n "$convert" ]; then + mversion="$(awkrun version="$version" ' +function nbdot(s) { + gsub(/[^.]/, "", s) + return length(s) +} +BEGIN { + if (version ~ /[0-9]+(\.[0-9]+)*(-r[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9])?$/) { + metadata = "" + # traiter release date + pos = length(version) - 12 + if (pos > 0) { + rdate = substr(version, pos + 3) + metadata = substr(rdate, 7, 4) substr(rdate, 4, 2) substr(rdate, 1, 2) + version = substr(version, 1, pos) + } + # traiter metadata + match(version, /[0-9]+(\.[0-9]+(\.[0-9]+)?)?/) + pos = RLENGTH + if (pos < length(version)) { + if (metadata != "") metadata = metadata "." + metadata = metadata substr(version, pos + 2) + } + version = substr(version, 1, pos) + # ajouter les éléments manquants + while (nbdot(version) < 2) { + version = version ".0" + } + # afficher la version migrée au format semver + if (metadata != "") print version "+" metadata + else print version + } +}')" + if [ -n "$mversion" ]; then + version="$mversion" + psemver_parse "$version" + fi + fi + + # Actions + if [ "$action" == show ]; then + if isatty; then + estepi "La version actuelle est $version" + else + echo "$version" + fi + return 0 + fi + + if [ "$action" == check ]; then + [ -n "$valid" ] || { eerror "Numéro de version invalide: $version"; return 1; } + + elif [ "$action" == compare ]; then + psemver_parse "$oversion" o + + case "$operator" in + eq|same) + for var in valid major minor patchlevel; do + ovar="o$var" + [ "${!var}" == "${!ovar}" ] || return 1 + done + array_eq prelease oprelease || return 1 + if [ "$operator" == same ]; then + array_eq metadata ometadata || return 1 + fi + return 0 + ;; + ne|diff) + for var in valid major minor patchlevel; do + ovar="o$var" + [ "${!var}" != "${!ovar}" ] && return 0 + done + ! array_eq prelease oprelease && return 0 + if [ "$operator" == diff ]; then + ! array_eq metadata ometadata && return 0 + fi + return 1 + ;; + lt) + [ -z "$valid" -a -z "$ovalid" ] && return 1 + [ "$major" -lt "$omajor" ] && return 0 + [ "$major" -gt "$omajor" ] && return 1 + [ "$minor" -lt "$ominor" ] && return 0 + [ "$minor" -gt "$ominor" ] && return 1 + [ "$patchlevel" -lt "$opatchlevel" ] && return 0 + [ "$patchlevel" -gt "$opatchlevel" ] && return 1 + case "$(psemver_compare_prelease "" o)" in + lt) return 0;; + esac + return 1 + ;; + le) + [ -z "$valid" -a -z "$ovalid" ] && return 1 + [ "$major" -lt "$omajor" ] && return 0 + [ "$major" -gt "$omajor" ] && return 1 + [ "$minor" -lt "$ominor" ] && return 0 + [ "$minor" -gt "$ominor" ] && return 1 + [ "$patchlevel" -lt "$opatchlevel" ] && return 0 + [ "$patchlevel" -gt "$opatchlevel" ] && return 1 + case "$(psemver_compare_prelease "" o)" in + lt|eq) return 0;; + esac + return 1 + ;; + gt) + [ -z "$valid" -a -z "$ovalid" ] && return 1 + [ "$major" -lt "$omajor" ] && return 1 + [ "$major" -gt "$omajor" ] && return 0 + [ "$minor" -lt "$ominor" ] && return 1 + [ "$minor" -gt "$ominor" ] && return 0 + [ "$patchlevel" -lt "$opatchlevel" ] && return 1 + [ "$patchlevel" -gt "$opatchlevel" ] && return 0 + case "$(psemver_compare_prelease "" o)" in + gt) return 0;; + esac + return 1 + ;; + ge) + [ -z "$valid" -a -z "$ovalid" ] && return 1 + [ "$major" -lt "$omajor" ] && return 1 + [ "$major" -gt "$omajor" ] && return 0 + [ "$minor" -lt "$ominor" ] && return 1 + [ "$minor" -gt "$ominor" ] && return 0 + [ "$patchlevel" -lt "$opatchlevel" ] && return 1 + [ "$patchlevel" -gt "$opatchlevel" ] && return 0 + case "$(psemver_compare_prelease "" o)" in + gt|eq) return 0;; + esac + return 1 + ;; + esac + + elif [ "$action" == update ]; then + [ -n "$valid" ] || { eerror "Numéro de version invalide: $version"; return 1; } + + if [ -n "$file" ]; then + if [ -f "$file" ]; then + if isatty; then + estepi "La version actuelle est $version" + fi + else + if isatty; then + ask_yesno "Le fichier $(ppath "$file") n'existe pas. Faut-il le créer?" O || return 1 + fi + fi + fi + + # forcer le numéro de version + if [ -n "$setversion" ]; then + psemver_setversion "$setversion" "" || { eerror "Numéro de version invalide: $setversion"; return 1; } + fi + + # Calculer metadata + if [ -n "$vcsmetadata" ]; then + setmetadata="$(git rev-parse --short HEAD)" || return 1 + fi + + # incrémenter les numéros de version + if [ "$incversion" == auto ]; then + if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then + incversion= + else + incversion=menu + fi + fi + if [ "$incversion" == menu ]; then + psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setmetadata "$setmetadata" x; psemver_setvar versionx x + psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setmetadata "$setmetadata" z; psemver_setvar versionz z + psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setmetadata "$setmetadata" p; psemver_setvar versionp p + psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setmetadata "$setmetadata" k; psemver_setvar versionk k + nextvs=( + "$versionx : maj incompatibles de l'API (-x)" + "$versionz : maj compatibles de l'API (-z)" + "$versionp : correction de bugs (-p)" + "$versionk : ne pas incrémenter la version" + ) + nextv="${nextvs[1]}" + simple_menu nextv nextvs \ + -t "Incrémenter le numéro de version" \ + -m "Veuillez choisir la prochaine version" + case "${nextv%)}" in + *-x) incversion=major;; + *-z) incversion=minor;; + *-p) incversion=patchlevel;; + *) incversion=;; + esac + fi + if [ -n "$incversion" ]; then + case "$incversion" in + major) psemver_incmajor;; + minor) psemver_incminor;; + patchlevel) psemver_incpatchlevel;; + esac + # Quand on incrémente, réinitialiser la valeur de prérelease et metadata + psemver_setprelease + psemver_setmetadata + fi + + # spécifier prerelease + if [ -n "$setrelease" ]; then + psemver_setprelease "" + elif [ -n "$setprelease" ]; then + psemver_setprelease "$setprelease" || { eerror "Identifiant de pre-release invalide: $setprelease"; return 1; } + fi + if [ -n "$setalpha" ]; then + : #XXX + elif [ -n "$setbeta" ]; then + : #XXX + elif [ -n "$setrc" ]; then + : #XXX + fi + + # spécifier metadata + if [ -n "$setmetadata" ]; then + psemver_setmetadata "$setmetadata" || { eerror "Identifiant de build invalide: $setmetadata"; return 1; } + fi + + # afficher le résultat final + psemver_setvar version + if [ -n "$file" ]; then + echo "$version" >"$file" + fi + if isatty; then + estepn "La nouvelle version est $version" + else + echo "$version" + fi + fi + + return 0 +} diff --git a/pver b/pver index e19fa25..3e43a3b 100755 --- a/pver +++ b/pver @@ -1,9 +1,9 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 -urequire DEFAULTS semver +urequire DEFAULTS ptools -function display_help() { +function pver_display_help() { uecho "$scriptname: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/) USAGE @@ -83,325 +83,4 @@ OPTIONS gestionnaire de version. Note: pour le moment, seul git est supporté." } -DEFAULT_FILE=VERSION.txt - -action=auto -source=auto -file= -git= -version= -convert=auto -operator= -oversion= -setversion= -incversion= -setprelease= -setalpha= -setbeta= -setrc= -setrelease= -setmetadata= -vcsmetadata= -parse_opts "${PRETTYOPTS[@]}" \ - --help '$exit_with display_help' \ - -f:,--file: '$set@ file; source=file' \ - -F:,--file-string: '$set@ file; source=file-string' \ - -g:,--git-string: '$set@ git; source=git-string' \ - -s:,--string: '$set@ version; source=string' \ - --show action=show \ - --check action=check \ - --convert convert=1 \ - --no-convert convert= \ - --eq: '$action=compare; operator=eq; set@ oversion' \ - --ne: '$action=compare; operator=ne; set@ oversion' \ - --lt: '$action=compare; operator=lt; set@ oversion' \ - --le: '$action=compare; operator=le; set@ oversion' \ - --gt: '$action=compare; operator=gt; set@ oversion' \ - --ge: '$action=compare; operator=ge; set@ oversion' \ - -v:,--set-version: '$action=update; set@ setversion; incversion=' \ - -u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \ - --menu '$action=update; incversion=menu' \ - -x,--major '$action=update; incversion=major' \ - -z,--minor '$action=update; incversion=minor' \ - -p,--patchlevel '$action=update; incversion=patchlevel' \ - -l:,--prelease:,--prerelease: '$action=update; set@ setprelease; [ -z "$setprelease" ] && { setalpha=; setbeta=; setrc=; setrelease=1; }' \ - -a,--alpha '$action=update; setalpha=1; setbeta=; setrc=; setrelease=' \ - -b,--beta '$action=update; setalpha=; setbeta=1; setrc=; setrelease=' \ - -r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \ - -R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \ - -m:,--metadata: '$action=update; set@ setmetadata' \ - -M,--vcs-metadata '$action=update; vcsmetadata=1' \ - @ args -- "$@" && set -- "${args[@]}" || die "$args" - -# Calculer la source -if [ "$source" == auto ]; then - source=file - for i in "$DEFAULT_FILE" version.txt; do - if [ -f "$i" ]; then - file="$i" - break - fi - done -elif [ "$source" == file ]; then - [ "$action" == auto ] && action=update -fi -[ "$source" == file -a -z "$file" ] && file="$DEFAULT_FILE" -[ "$action" == auto ] && action=show - -# Lire la version -if [ "$source" == file ]; then - [ -f "$file" ] && version="$(<"$file")" -elif [ "$source" == file-string ]; then - if [ -z "$file" ]; then - file="$DEFAULT_FILE" - elif [ -d "$file" ]; then - file="$file/$DEFAULT_FILE" - fi - [ -f "$file" ] && version="$(<"$file")" - file= -elif [ "$source" == git-string ]; then - splitfsep2 "$git" : branch name - [ -n "$branch" ] || branch=master - [ -n "$name" ] || name="$DEFAULT_FILE" - if git rev-parse --verify --quiet "$branch:$name" >/dev/null; then - version="$(git cat-file blob "$branch:$name" 2>/dev/null)" - fi -fi -[ -n "$version" ] || version=0.0.0 - -# Conversion éventuelle du numéro de version -psemver_parse "$version" -[ -n "$valid" ] && convert= -if [ "$convert" == auto ]; then - [ -z "$valid" ] && convert=1 -fi -if [ -n "$convert" ]; then - mversion="$(awkrun version="$version" ' -function nbdot(s) { - gsub(/[^.]/, "", s) - return length(s) -} -BEGIN { - if (version ~ /[0-9]+(\.[0-9]+)*(-r[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9])?$/) { - metadata = "" - # traiter release date - pos = length(version) - 12 - if (pos > 0) { - rdate = substr(version, pos + 3) - metadata = substr(rdate, 7, 4) substr(rdate, 4, 2) substr(rdate, 1, 2) - version = substr(version, 1, pos) - } - # traiter metadata - match(version, /[0-9]+(\.[0-9]+(\.[0-9]+)?)?/) - pos = RLENGTH - if (pos < length(version)) { - if (metadata != "") metadata = metadata "." - metadata = metadata substr(version, pos + 2) - } - version = substr(version, 1, pos) - # ajouter les éléments manquants - while (nbdot(version) < 2) { - version = version ".0" - } - # afficher la version migrée au format semver - if (metadata != "") print version "+" metadata - else print version - } -}')" - if [ -n "$mversion" ]; then - version="$mversion" - psemver_parse "$version" - fi -fi - -# Actions -if [ "$action" == show ]; then - if isatty; then - estepi "La version actuelle est $version" - else - echo "$version" - fi - exit 0 -fi - -if [ "$action" == check ]; then - [ -n "$valid" ] || die "Numéro de version invalide: $version" - -elif [ "$action" == compare ]; then - psemver_parse "$oversion" o - - case "$operator" in - eq|same) - for var in valid major minor patchlevel; do - ovar="o$var" - [ "${!var}" == "${!ovar}" ] || exit 1 - done - array_eq prelease oprelease || exit 1 - if [ "$operator" == same ]; then - array_eq metadata ometadata || exit 1 - fi - exit 0 - ;; - ne|diff) - for var in valid major minor patchlevel; do - ovar="o$var" - [ "${!var}" != "${!ovar}" ] && exit 0 - done - ! array_eq prelease oprelease && exit 0 - if [ "$operator" == diff ]; then - ! array_eq metadata ometadata && exit 0 - fi - exit 1 - ;; - lt) - [ -z "$valid" -a -z "$ovalid" ] && exit 1 - [ "$major" -lt "$omajor" ] && exit 0 - [ "$major" -gt "$omajor" ] && exit 1 - [ "$minor" -lt "$ominor" ] && exit 0 - [ "$minor" -gt "$ominor" ] && exit 1 - [ "$patchlevel" -lt "$opatchlevel" ] && exit 0 - [ "$patchlevel" -gt "$opatchlevel" ] && exit 1 - case "$(psemver_compare_prelease "" o)" in - lt) exit 0;; - esac - exit 1 - ;; - le) - [ -z "$valid" -a -z "$ovalid" ] && exit 1 - [ "$major" -lt "$omajor" ] && exit 0 - [ "$major" -gt "$omajor" ] && exit 1 - [ "$minor" -lt "$ominor" ] && exit 0 - [ "$minor" -gt "$ominor" ] && exit 1 - [ "$patchlevel" -lt "$opatchlevel" ] && exit 0 - [ "$patchlevel" -gt "$opatchlevel" ] && exit 1 - case "$(psemver_compare_prelease "" o)" in - lt|eq) exit 0;; - esac - exit 1 - ;; - gt) - [ -z "$valid" -a -z "$ovalid" ] && exit 1 - [ "$major" -lt "$omajor" ] && exit 1 - [ "$major" -gt "$omajor" ] && exit 0 - [ "$minor" -lt "$ominor" ] && exit 1 - [ "$minor" -gt "$ominor" ] && exit 0 - [ "$patchlevel" -lt "$opatchlevel" ] && exit 1 - [ "$patchlevel" -gt "$opatchlevel" ] && exit 0 - case "$(psemver_compare_prelease "" o)" in - gt) exit 0;; - esac - exit 1 - ;; - ge) - [ -z "$valid" -a -z "$ovalid" ] && exit 1 - [ "$major" -lt "$omajor" ] && exit 1 - [ "$major" -gt "$omajor" ] && exit 0 - [ "$minor" -lt "$ominor" ] && exit 1 - [ "$minor" -gt "$ominor" ] && exit 0 - [ "$patchlevel" -lt "$opatchlevel" ] && exit 1 - [ "$patchlevel" -gt "$opatchlevel" ] && exit 0 - case "$(psemver_compare_prelease "" o)" in - gt|eq) exit 0;; - esac - exit 1 - ;; - esac - -elif [ "$action" == update ]; then - [ -n "$valid" ] || die "Numéro de version invalide: $version" - - if [ -n "$file" ]; then - if [ -f "$file" ]; then - if isatty; then - estepi "La version actuelle est $version" - fi - else - if isatty; then - ask_yesno "Le fichier $(ppath "$file") n'existe pas. Faut-il le créer?" O || die - fi - fi - fi - - # forcer le numéro de version - if [ -n "$setversion" ]; then - psemver_setversion "$setversion" "" || die "Numéro de version invalide: $setversion" - fi - - # Calculer metadata - if [ -n "$vcsmetadata" ]; then - setmetadata="$(git rev-parse --short HEAD)" || die - fi - - # incrémenter les numéros de version - if [ "$incversion" == auto ]; then - if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then - incversion= - else - incversion=menu - fi - fi - if [ "$incversion" == menu ]; then - psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setmetadata "$setmetadata" x; psemver_setvar versionx x - psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setmetadata "$setmetadata" z; psemver_setvar versionz z - psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setmetadata "$setmetadata" p; psemver_setvar versionp p - psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setmetadata "$setmetadata" k; psemver_setvar versionk k - nextvs=( - "$versionx : maj incompatibles de l'API (-x)" - "$versionz : maj compatibles de l'API (-z)" - "$versionp : correction de bugs (-p)" - "$versionk : ne pas incrémenter la version" - ) - nextv="${nextvs[1]}" - simple_menu nextv nextvs \ - -t "Incrémenter le numéro de version" \ - -m "Veuillez choisir la prochaine version" - case "${nextv%)}" in - *-x) incversion=major;; - *-z) incversion=minor;; - *-p) incversion=patchlevel;; - *) incversion=;; - esac - fi - if [ -n "$incversion" ]; then - case "$incversion" in - major) psemver_incmajor;; - minor) psemver_incminor;; - patchlevel) psemver_incpatchlevel;; - esac - # Quand on incrémente, réinitialiser la valeur de prérelease et metadata - psemver_setprelease - psemver_setmetadata - fi - - # spécifier prerelease - if [ -n "$setrelease" ]; then - psemver_setprelease "" - elif [ -n "$setprelease" ]; then - psemver_setprelease "$setprelease" || die "Identifiant de pre-release invalide: $setprelease" - fi - if [ -n "$setalpha" ]; then - : #XXX - elif [ -n "$setbeta" ]; then - : #XXX - elif [ -n "$setrc" ]; then - : #XXX - fi - - # spécifier metadata - if [ -n "$setmetadata" ]; then - psemver_setmetadata "$setmetadata" || die "Identifiant de build invalide: $setmetadata" - fi - - # afficher le résultat final - psemver_setvar version - if [ -n "$file" ]; then - echo "$version" >"$file" - fi - if isatty; then - estepn "La nouvelle version est $version" - else - echo "$version" - fi -fi - -exit 0 +pver "$@" From 2b2b7f54805fcb3bfba4f1cea41511c5e4683df2 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 13 Mar 2015 00:22:07 +0400 Subject: [PATCH 02/71] =?UTF-8?q?d=C3=A9but=20d'impl=C3=A9mentation=20de?= =?UTF-8?q?=20prel=20-c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 119 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 108 insertions(+), 11 deletions(-) diff --git a/todo/prel b/todo/prel index 9ae6370..bb68715 100755 --- a/todo/prel +++ b/todo/prel @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +source "$(dirname "$0")/../lib/ulib/ulib" || exit 1 +#source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS ptools # XXX ajouter la possibilité de faire des pré-releases, --alpha, --beta, --rc @@ -12,12 +13,18 @@ function display_help() { uecho "$scriptname: basculer sur une branche de release USAGE - $scriptname [options] [SOURCE] + $scriptname -c [RELEASE [SOURCE]] + $scriptname -u [SOURCE] + $scriptname -m|-l|-d [RELEASE] - Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un commit ou un stash. -- Si aucune branche de release n'existe, assumer -u -z pour préparer une release - mineure. Sinon, basculer simplement sur la branche de release. +- Avec l'option -c, s'il existe une branche de release, proposer de basculer + vers elle ou sur la branche master. Sinon, proposer un choix de branche de + release à créer. +- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle + existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui + vaut par défaut develop OPTIONS -C, --projdir PROJDIR @@ -34,21 +41,39 @@ OPTIONS activée si la variable UTOOLS_VCS_OFFLINE est définie. --online Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online + + -c, --checkout + Basculer vers une branche de release existante. C'est l'option par + défaut. Si aucune branche de release n'existe, assumer -u --menu -u, --update - Préparer une release. Utiliser une des options -x, -z ou -p pour - spécifier le type de release à préparer. S'il faut créer une nouvelle - branche, la baser sur la branche SOURCE, qui vaut par défaut develop + Préparer une nouvelle release. Utiliser une des options -x, -z ou -p + pour spécifier le type de release à préparer. Si la branche qui serait + créée pour le type de release existe déjà, basculer vers cette branche. + S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut + develop + --menu -x, --major -z, --minor -p, --patchlevel - Utilisé avec l'option -u, préparer respectivement une release majeure, - mineure (par défaut), et pour correction de bug. + Utilisé avec l'option -u, soit afficher un menu pour choisir la version + de la nouvelle release (par défaut), soit préparer respectivement une + release majeure, mineure, ou pour correction de bug. + -v-OPT + Avec l'option -u, spécifier une option de pver permettant de choisir la + version de la nouvelle release. Les options supportées sont -v, -l, -a, + -b, -r et -R. Par exemple, si la version actuelle sur la branche master + est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release + 0.3.0-beta + En principe, cette option n'a pas à être utilisée, puisque dans une + branche de release, on peut faire vivre les versions de pré-release + jusqu'à la release finale. Ainsi, la branche de release est nommée + d'après la version finale, mais le projet peut recevoir une version de + pré-release incrémentale. + -m, --merge Si la branche actuelle est une branche de release, ou s'il existe une branche de release, la merger dans master, puis dans develop, puis la supprimer. Puis basculer sur la branche master. - Si la branche actuelle est une branche de topic et qu'il n'existe aucune - branche de release, assumer les options -u -z -m -l, --log Afficher les modifications actuellement effectuée dans la branche de release par rapport à develop. @@ -59,12 +84,27 @@ OPTIONS projdir= origin=origin +action=checkout +incversion= +pver_opts=() +log= +diff= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -C:,--projdir: projdir= \ -O:,--origin: origin= \ -o,--offline UTOOLS_VCS_OFFLINE=1 \ --online UTOOLS_VCS_OFFLINE= \ + -c,--checkout '$action=checkout' \ + -u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \ + --menu '$action=update; incversion=menu' \ + -x,--major '$action=update; incversion=major' \ + -z,--minor '$action=update; incversion=minor' \ + -p,--patchlevel '$action=update; incversion=patchlevel' \ + -v: pver_opts \ + -m,--merge action=merge \ + -l,--log '$action=diff; log=1' \ + -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" if [ -n "$projdir" ]; then @@ -72,3 +112,60 @@ if [ -n "$projdir" ]; then fi git_ensure_gitvcs + +setx branch=git_get_branch + +if [ "$action" == checkout ]; then + release="$1" + source="${2:-develop}" + + if [ -z "$release" ]; then + setx -a branches=list_release_branches + + if [ ${#branches[*]} -eq 0 ]; then + # En l'absence de release branch, proposer un choix de nouvelle + # branche à créer + setx major=pver -g "" -ux + setx minor=pver -g "" -uz + setx patchlevel=pver -g "" -up + release="release-$minor" + branches=("release-$major" "release-$minor" "release-$patchlevel" master) + simple_menu release branches \ + -t "Basculer vers une nouvelle release branch" \ + -m "Veuillez choisir la branche à créer" + else + array_add branches master + default_branch="$branch" + array_contains branches "$default_branch" || default_branch="${branches[0]}" + simple_menu release branches -d "$default_branch" \ + -t "Basculer vers une release branch" \ + -m "Veuillez choisir la branche vers laquelle basculer" + fi + fi + + # On est peut-être déjà sur la bonne branche + if git_is_branch "$release"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + git_track_branch "$release" "$origin" + fi + exit 0 + fi + + # Créer/basculer vers une release branch + git_ensure_cleancheckout + is_any_branch "$release" master release || die "$release: ce n'est pas une release branch" + if git_have_branch "$release"; then + git checkout "$release" + else + estepn "\ +Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_NORMALE} +à partir de la branche source ${COULEUR_BLEUE}$source${COULEUR_NORMALE}" + ask_yesno "Voulez-vous continuer?" O || die + + git_ensure_branch "$release" "$source" "$origin" + [ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe" + git checkout "$release" + fi + + exit $? +fi From c5ba03b6692662bf72eeeb94051afb20e883e281 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 13 Mar 2015 07:10:25 +0400 Subject: [PATCH 03/71] ajouter les completions pour prel --- lib/bashrc.d/bash_completion.nutools | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion.nutools index 35ac9a5..dbd9ef7 100644 --- a/lib/bashrc.d/bash_completion.nutools +++ b/lib/bashrc.d/bash_completion.nutools @@ -36,6 +36,17 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then COMPREPLY=($(compgen -W "$(__pdev_branches)" "$cur")) } complete -F _pdev pdev + + function __prel_branches() { + git for-each-ref --format='%(refname:short)' refs/heads | + grep -E '^(master$|release-)' + } + function _prel() { + local cur + _get_comp_words_by_ref cur + COMPREPLY=($(compgen -W "$(__prel_branches)" "$cur")) + } + complete -F _prel prel fi ;; 7*|wheezy*) From bbbe6c46002bf14666e1c16a8581274e5755aa21 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 13 Mar 2015 07:11:05 +0400 Subject: [PATCH 04/71] =?UTF-8?q?l'option=20-c=20ne=20fait=20que=20le=20ba?= =?UTF-8?q?sculement=20ou=20la=20cr=C3=A9ation.=20Le=20choix=20de=20la=20v?= =?UTF-8?q?ersion=20se=20fera=20avec=20-u?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/todo/prel b/todo/prel index bb68715..afef14d 100755 --- a/todo/prel +++ b/todo/prel @@ -13,15 +13,14 @@ function display_help() { uecho "$scriptname: basculer sur une branche de release USAGE - $scriptname -c [RELEASE [SOURCE]] $scriptname -u [SOURCE] + $scriptname -c [RELEASE [SOURCE]] $scriptname -m|-l|-d [RELEASE] - Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un commit ou un stash. - Avec l'option -c, s'il existe une branche de release, proposer de basculer - vers elle ou sur la branche master. Sinon, proposer un choix de branche de - release à créer. + vers elle ou sur la branche master. Sinon, basculer sur la branche master. - Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui vaut par défaut develop @@ -44,7 +43,7 @@ OPTIONS -c, --checkout Basculer vers une branche de release existante. C'est l'option par - défaut. Si aucune branche de release n'existe, assumer -u --menu + défaut. Si aucune branche de release n'existe, basculer vers master -u, --update Préparer une nouvelle release. Utiliser une des options -x, -z ou -p pour spécifier le type de release à préparer. Si la branche qui serait @@ -74,6 +73,9 @@ OPTIONS Si la branche actuelle est une branche de release, ou s'il existe une branche de release, la merger dans master, puis dans develop, puis la supprimer. Puis basculer sur la branche master. + S'il n'existe pas de branche de release, proposer de fusionner les + modifications de la branche develop dans la branche master, sans + préparer de branche de release au préalable. -l, --log Afficher les modifications actuellement effectuée dans la branche de release par rapport à develop. @@ -101,7 +103,7 @@ parse_opts "${PRETTYOPTS[@]}" \ -x,--major '$action=update; incversion=major' \ -z,--minor '$action=update; incversion=minor' \ -p,--patchlevel '$action=update; incversion=patchlevel' \ - -v: pver_opts \ + -v: '$action=update; add@ pver_opts' \ -m,--merge action=merge \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @@ -115,6 +117,18 @@ git_ensure_gitvcs setx branch=git_get_branch +if [ "$action" == branch ]; then + : + #setx major=pver -g "" -ux + #setx minor=pver -g "" -uz + #setx patchlevel=pver -g "" -up + #release="release-$minor" + #branches=("release-$major" "release-$minor" "release-$patchlevel" master) + #simple_menu release branches \ + # -t "Basculer vers une nouvelle release branch" \ + # -m "Veuillez choisir la branche à créer" +fi + if [ "$action" == checkout ]; then release="$1" source="${2:-develop}" @@ -123,17 +137,13 @@ if [ "$action" == checkout ]; then setx -a branches=list_release_branches if [ ${#branches[*]} -eq 0 ]; then - # En l'absence de release branch, proposer un choix de nouvelle - # branche à créer - setx major=pver -g "" -ux - setx minor=pver -g "" -uz - setx patchlevel=pver -g "" -up - release="release-$minor" - branches=("release-$major" "release-$minor" "release-$patchlevel" master) - simple_menu release branches \ - -t "Basculer vers une nouvelle release branch" \ - -m "Veuillez choisir la branche à créer" + # en l'absence de branche de release, basculer sur master + release=master + elif [ ${#branches[*]} -eq 1 ]; then + # s'il n'y en a qu'une, la prendre + release="${branches[0]}" else + # sinon, donner le choix dans un menu array_add branches master default_branch="$branch" array_contains branches "$default_branch" || default_branch="${branches[0]}" From 9c17a60f45c7c1f29ec932c33145c0497aea9bb5 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 18 Mar 2015 16:55:12 +0400 Subject: [PATCH 05/71] =?UTF-8?q?framework=20pour=20la=20compl=C3=A9tion?= =?UTF-8?q?=20automatique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/bash_completion.d/nutools | 16 +++++++ lib/bash_completion.d/ptools | 8 ++++ lib/bashrc.d/bash_completion.nutools | 45 +++++-------------- lib/uinst/conf | 6 +++ .../{bash_completion => bash40/completion} | 0 pdev | 12 +++++ 6 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 lib/bash_completion.d/nutools create mode 100644 lib/bash_completion.d/ptools rename lib/ulib/{bash_completion => bash40/completion} (100%) diff --git a/lib/bash_completion.d/nutools b/lib/bash_completion.d/nutools new file mode 100644 index 0000000..1df64fb --- /dev/null +++ b/lib/bash_completion.d/nutools @@ -0,0 +1,16 @@ +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 + +function __nutools_host_completion() { + local cur prev + _get_comp_words_by_ref cur prev + if [ "$prev" == "-h" -o "$prev" == "-H" ]; then + _known_hosts_real "$cur" + fi +} + +if [ -n "$BASH_COMPLETION_DIR" -a -f "$BASH_COMPLETION_DIR/ssh" ]; then + shopt -u hostcomplete + complete -F _ssh ussh cssh +fi + +complete -F __nutools_host_completion -o default ruinst runs rruns diff --git a/lib/bash_completion.d/ptools b/lib/bash_completion.d/ptools new file mode 100644 index 0000000..41b14d3 --- /dev/null +++ b/lib/bash_completion.d/ptools @@ -0,0 +1,8 @@ +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 + +function __pdev_branches() { + git for-each-ref --format='%(refname:short)' refs/heads | + grep -vF master | + grep -v '^release-' | + grep -v '^hotfix-' +} diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion.nutools index 35ac9a5..2f97b73 100644 --- a/lib/bashrc.d/bash_completion.nutools +++ b/lib/bashrc.d/bash_completion.nutools @@ -5,42 +5,21 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then if [ -f /etc/debian_version ]; then case "$("$bcdir/pdev" +#./prel --nutools-completion >"$bcdir/prel" +#./pfix --nutools-completion >"$bcdir/pfix" + # copier le fichier .nutoolsrc [ -f ~/.nutoolsrc ] || cp lib/nutoolsrc ~/.nutoolsrc diff --git a/lib/ulib/bash_completion b/lib/ulib/bash40/completion similarity index 100% rename from lib/ulib/bash_completion rename to lib/ulib/bash40/completion diff --git a/pdev b/pdev index e050b6b..7fdce59 100755 --- a/pdev +++ b/pdev @@ -1,5 +1,17 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 + +if [ $# -eq 1 -a "$1" == --nutools-completion ]; then + echo ' +function __pdev_completion() { + local cur + _get_comp_words_by_ref cur + COMPREPLY=($(compgen -W "$(__pdev_branches)" "$cur")) +} +complete -F __pdev_completion pdev +' +fi + source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS ptools From 041a830245dc493808111a9b9bc4a945c07eedfa Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 18 Mar 2015 17:26:21 +0400 Subject: [PATCH 06/71] suite du support de bash_completion --- lib/bashrc.d/bash_completion.nutools | 6 ++--- .../bash40/{completion => bash_completion} | 16 +++++++++---- lib/ulib/bash41/bash_completion | 24 +++++++++++++++++++ 3 files changed, 39 insertions(+), 7 deletions(-) rename lib/ulib/bash40/{completion => bash_completion} (99%) create mode 100644 lib/ulib/bash41/bash_completion diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion.nutools index 2f97b73..428db05 100644 --- a/lib/bashrc.d/bash_completion.nutools +++ b/lib/bashrc.d/bash_completion.nutools @@ -7,12 +7,12 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then 6*|squeeze*) # le code suivant n'est compatible qu'avec debian squeeze (plus # exactement, avec bash 4.0) - source "@@dest@@/lib/ulib/bash40/completion" + source "@@dest@@/lib/ulib/bash40/bash_completion" ;; 7*|wheezy*) # le code suivant n'est compatible qu'avec debian wheezy (plus - # exactement, avec bah 4.1) - #source "@@dest@@/lib/ulib/bash41/completion" + # exactement, avec bash 4.1) + source "@@dest@@/lib/ulib/bash41/bash_completion" ;; esac fi diff --git a/lib/ulib/bash40/completion b/lib/ulib/bash40/bash_completion similarity index 99% rename from lib/ulib/bash40/completion rename to lib/ulib/bash40/bash_completion index 8ea7b15..26f73c6 100644 --- a/lib/ulib/bash40/completion +++ b/lib/ulib/bash40/bash_completion @@ -1,12 +1,20 @@ ##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -## Fonctions pour l'autocomplétion bash, si le package bash-completion n'est pas installé -## Attention! Ces fonctions ne sont testées que sur Debian Squeeze. Ce module -## est incompatible avec bash_completion sur Debian Wheezy. +## Fonctions pour l'autocomplétion bash, si le package bash-completion n'est pas +## installé. ATTENTION! Ces fonctions ont été pour la plupart récupérées de +## l'implémentation sous Debian Squeeze, ce qui signifie qu'elles sont conçues +## pour fonctionner avec bash 4.0 ##@cooked nocomments ##@require base uprovide bash_completion -if [ -z "$BASH_COMPLETION" ]; then +function __is_bash_completion_enabled() { + [ -n "$BASH_COMPLETION" ] +} +function __is_bash_completion_module_enabled() { + [ -n "$BASH_COMPLETION_DIR" -a -f "$BASH_COMPLETION_DIR/$1" ] +} + +if ! __is_bash_completion_enabled; then BASH_COMPLETION=1 shopt -s extglob progcomp diff --git a/lib/ulib/bash41/bash_completion b/lib/ulib/bash41/bash_completion new file mode 100644 index 0000000..4cef4a1 --- /dev/null +++ b/lib/ulib/bash41/bash_completion @@ -0,0 +1,24 @@ +##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +## Fonctions pour l'autocomplétion bash, si le package bash-completion n'est pas +## installé. ATTENTION! Ces fonctions ont été pour la plupart récupérées de +## l'implémentation sous Debian Wheezy, ce qui signifie qu'elles sont conçues +## pour fonctionner avec bash 4.1 +##@cooked nocomments +##@require base +uprovide bash_completion + +function __is_bash_completion_enabled() { + [ -n "$BASH_COMPLETION" ] && return 0 + grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' /etc/bash.bashrc && return 0 + grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' ~/.bashrc && return 0 + return 1 +} +function __is_bash_completion_module_enabled() { + [ -f "/usr/share/bash-completion/completions/$1" ] && return 0 + [ -n "$BASH_COMPLETION_COMPAT_DIR" -a -f "$BASH_COMPLETION_COMPAT_DIR/$1" ] +} + +if ! __is_bash_completion_enabled; then + export BASH_COMPLETION=1 + : +fi From e8d683b91a73178c3387497a9558f0fd74291c32 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 18 Mar 2015 17:45:36 +0400 Subject: [PATCH 07/71] bug --- pdev | 1 + 1 file changed, 1 insertion(+) diff --git a/pdev b/pdev index 7fdce59..9cb6af2 100755 --- a/pdev +++ b/pdev @@ -10,6 +10,7 @@ function __pdev_completion() { } complete -F __pdev_completion pdev ' + exit 0 fi source "$(dirname "$0")/lib/ulib/ulib" || exit 1 From 163df888d8b9623ee03e2c876d4f2687a71611e8 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 18 Mar 2015 17:54:45 +0400 Subject: [PATCH 08/71] bug --- lib/bashrc.d/bash_completion.nutools | 2 +- lib/ulib/bash41/bash_completion | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion.nutools index 428db05..aed8e57 100644 --- a/lib/bashrc.d/bash_completion.nutools +++ b/lib/bashrc.d/bash_completion.nutools @@ -17,7 +17,7 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then esac fi if [ -n "$BASH_COMPLETION" ]; then - for i in "$@@dest@@/lib/bash_completion.d/"*; do + for i in "@@dest@@/lib/bash_completion.d/"*; do [ -f "$i" ] || continue source "$i" done diff --git a/lib/ulib/bash41/bash_completion b/lib/ulib/bash41/bash_completion index 4cef4a1..ab79ef5 100644 --- a/lib/ulib/bash41/bash_completion +++ b/lib/ulib/bash41/bash_completion @@ -8,17 +8,18 @@ uprovide bash_completion function __is_bash_completion_enabled() { - [ -n "$BASH_COMPLETION" ] && return 0 + [ -n "$__NUTOOLS_BASH_COMPLETION" ] && return 0 grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' /etc/bash.bashrc && return 0 grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' ~/.bashrc && return 0 return 1 } function __is_bash_completion_module_enabled() { [ -f "/usr/share/bash-completion/completions/$1" ] && return 0 - [ -n "$BASH_COMPLETION_COMPAT_DIR" -a -f "$BASH_COMPLETION_COMPAT_DIR/$1" ] + [ -n "$BASH_COMPLETION_COMPAT_DIR" -a -f "$BASH_COMPLETION_COMPAT_DIR/$1" ] && return 0 + return 1 } if ! __is_bash_completion_enabled; then - export BASH_COMPLETION=1 - : + export __NUTOOLS_BASH_COMPLETION=1 fi +[ -n "$BASH_COMPLETION" ] || export BASH_COMPLETION=1 From bbbc35af628010488c7c1761c5be262c95353556 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 05:08:09 +0400 Subject: [PATCH 09/71] maj api chargement depuis ~/etc/completion.d --- lib/bashrc.d/{bash_completion.nutools => bash_completion} | 0 lib/{bash_completion.d => completion.d}/nutools | 0 lib/{bash_completion.d => completion.d}/ptools | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename lib/bashrc.d/{bash_completion.nutools => bash_completion} (100%) rename lib/{bash_completion.d => completion.d}/nutools (100%) rename lib/{bash_completion.d => completion.d}/ptools (100%) diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion similarity index 100% rename from lib/bashrc.d/bash_completion.nutools rename to lib/bashrc.d/bash_completion diff --git a/lib/bash_completion.d/nutools b/lib/completion.d/nutools similarity index 100% rename from lib/bash_completion.d/nutools rename to lib/completion.d/nutools diff --git a/lib/bash_completion.d/ptools b/lib/completion.d/ptools similarity index 100% rename from lib/bash_completion.d/ptools rename to lib/completion.d/ptools From 9182dcf5ca8996c001d255432b2606f2e3f69c7f Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 05:08:27 +0400 Subject: [PATCH 10/71] maj api chargement depuis ~/etc/completion.d --- lib/bashrc.d/bash_completion | 6 +++++- lib/completion.d/nutools | 5 ++--- lib/uinst/conf | 3 ++- lib/ulib/bash40/bash_completion | 6 +++--- lib/ulib/bash41/bash_completion | 10 +++++----- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/bashrc.d/bash_completion b/lib/bashrc.d/bash_completion index aed8e57..557bb2e 100644 --- a/lib/bashrc.d/bash_completion +++ b/lib/bashrc.d/bash_completion @@ -17,7 +17,11 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then esac fi if [ -n "$BASH_COMPLETION" ]; then - for i in "@@dest@@/lib/bash_completion.d/"*; do + for i in "@@dest@@/lib/completion.d/"*; do + [ -f "$i" ] || continue + source "$i" + done + for i in "$HOME/etc/completion.d/"*; do [ -f "$i" ] || continue source "$i" done diff --git a/lib/completion.d/nutools b/lib/completion.d/nutools index 1df64fb..a96851e 100644 --- a/lib/completion.d/nutools +++ b/lib/completion.d/nutools @@ -7,10 +7,9 @@ function __nutools_host_completion() { _known_hosts_real "$cur" fi } +complete -F __nutools_host_completion -o default ruinst runs rruns -if [ -n "$BASH_COMPLETION_DIR" -a -f "$BASH_COMPLETION_DIR/ssh" ]; then +if __bash_completion_module_enabled ssh; then shopt -u hostcomplete complete -F _ssh ussh cssh fi - -complete -F __nutools_host_completion -o default ruinst runs rruns diff --git a/lib/uinst/conf b/lib/uinst/conf index 514714d..af018ce 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -33,7 +33,8 @@ done ./ulink --nutools-makelinks # complétion programmable -bcdir=lib/bash_completion.d +mkdir -p ~/etc/completion.d +bcdir=lib/completion.d ./pdev --nutools-completion >"$bcdir/pdev" ./todo/prel --nutools-completion >"$bcdir/prel" #./pfix --nutools-completion >"$bcdir/pfix" diff --git a/lib/ulib/bash40/bash_completion b/lib/ulib/bash40/bash_completion index 26f73c6..a3607e0 100644 --- a/lib/ulib/bash40/bash_completion +++ b/lib/ulib/bash40/bash_completion @@ -7,14 +7,14 @@ ##@require base uprovide bash_completion -function __is_bash_completion_enabled() { +function __bash_completion_enabled() { [ -n "$BASH_COMPLETION" ] } -function __is_bash_completion_module_enabled() { +function __bash_completion_module_enabled() { [ -n "$BASH_COMPLETION_DIR" -a -f "$BASH_COMPLETION_DIR/$1" ] } -if ! __is_bash_completion_enabled; then +if ! __bash_completion_enabled; then BASH_COMPLETION=1 shopt -s extglob progcomp diff --git a/lib/ulib/bash41/bash_completion b/lib/ulib/bash41/bash_completion index ab79ef5..050bfe0 100644 --- a/lib/ulib/bash41/bash_completion +++ b/lib/ulib/bash41/bash_completion @@ -7,19 +7,19 @@ ##@require base uprovide bash_completion -function __is_bash_completion_enabled() { +function __bash_completion_enabled() { [ -n "$__NUTOOLS_BASH_COMPLETION" ] && return 0 grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' /etc/bash.bashrc && return 0 grep -qE '^[ \t]*(\.|source)[ \t]*/usr/share/bash-completion/bash_completion' ~/.bashrc && return 0 return 1 } -function __is_bash_completion_module_enabled() { +function __bash_completion_module_enabled() { [ -f "/usr/share/bash-completion/completions/$1" ] && return 0 [ -n "$BASH_COMPLETION_COMPAT_DIR" -a -f "$BASH_COMPLETION_COMPAT_DIR/$1" ] && return 0 return 1 } -if ! __is_bash_completion_enabled; then - export __NUTOOLS_BASH_COMPLETION=1 +if ! __bash_completion_enabled; then + __NUTOOLS_BASH_COMPLETION=1 fi -[ -n "$BASH_COMPLETION" ] || export BASH_COMPLETION=1 +[ -n "$BASH_COMPLETION" ] || BASH_COMPLETION=1 From ffaed8a1d261a22fc840b99a15f42c81c5caddee Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 05:20:27 +0400 Subject: [PATCH 11/71] quelques corrections --- .udir | 2 +- lib/ulib/bash41/bash_completion | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.udir b/.udir index a5c7d43..b8ace89 100644 --- a/.udir +++ b/.udir @@ -18,7 +18,7 @@ kvm_service= openvz_service= configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service) -configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools lib/bashrc.d/bash_completion.nutools lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init) +configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools lib/bashrc.d/bash_completion lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init) config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy) install_profiles=true profiledir=lib/profile.d diff --git a/lib/ulib/bash41/bash_completion b/lib/ulib/bash41/bash_completion index 050bfe0..fb3e290 100644 --- a/lib/ulib/bash41/bash_completion +++ b/lib/ulib/bash41/bash_completion @@ -14,7 +14,16 @@ function __bash_completion_enabled() { return 1 } function __bash_completion_module_enabled() { - [ -f "/usr/share/bash-completion/completions/$1" ] && return 0 + if [ -f "/usr/share/bash-completion/completions/$1" ]; then + local var="__NUTOOLS_BASH_COMPLETION_${1//-/_}" + if [ -z "${!var}" ]; then + # nous ne supportons pas le chargement à la demande: charger le + # module de suite + source "/usr/share/bash-completion/completions/$1" + eval "$var=1" + fi + return 0 + fi [ -n "$BASH_COMPLETION_COMPAT_DIR" -a -f "$BASH_COMPLETION_COMPAT_DIR/$1" ] && return 0 return 1 } From 9235ce12850d71ba765161af56513916390c49d4 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 05:26:34 +0400 Subject: [PATCH 12/71] nettoyage --- lib/uinst/conf | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/uinst/conf b/lib/uinst/conf index af018ce..2c5263b 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -33,6 +33,7 @@ done ./ulink --nutools-makelinks # complétion programmable +rm -f ~/etc/bashrc.d/bash_completion.nutools # renommé mkdir -p ~/etc/completion.d bcdir=lib/completion.d ./pdev --nutools-completion >"$bcdir/pdev" From e5b8b8177741cadcb449aae874c2d47f77c21d42 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 06:21:44 +0400 Subject: [PATCH 13/71] =?UTF-8?q?d=C3=A9but=20d'impl=C3=A9mentation=20de?= =?UTF-8?q?=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/todo/prel b/todo/prel index fb2150e..8b5ae99 100755 --- a/todo/prel +++ b/todo/prel @@ -130,16 +130,40 @@ git_ensure_gitvcs setx branch=git_get_branch -if [ "$action" == branch ]; then - : - #setx major=pver -g "" -ux - #setx minor=pver -g "" -uz - #setx patchlevel=pver -g "" -up - #release="release-$minor" - #branches=("release-$major" "release-$minor" "release-$patchlevel" master) - #simple_menu release branches \ - # -t "Basculer vers une nouvelle release branch" \ - # -m "Veuillez choisir la branche à créer" +if [ "$action" == update ]; then + setx version=pver -g "" + + if [ "$" == auto ]; then + # s'il existe déjà une branche de release, prendre celle-là + : + fi + case "$incversion" in + menu) + setx major=pver -s "$version" -ux "${pver_opts[@]}" + setx minor=pver -s "$version" -uz "${pver_opts[@]}" + setx patchlevel=pver -g "$version" -up "${pver_opts[@]}" + release="release-$minor" + branches=("release-$major" "release-$minor" "release-$patchlevel" master) + simple_menu release branches \ + -t "Basculer vers une nouvelle release branch" \ + -m "Veuillez choisir la branche à créer" + ;; + major) + setx major=pver -s "$version" -ux "${pver_opts[@]}" + release="release-$major" + ;; + minor) + setx minor=pver -s "$version" -uz "${pver_opts[@]}" + release="release-$minor" + ;; + patchlevel) + setx patchlevel=pver -g "$version" -up "${pver_opts[@]}" + release="release-$patchlevel" + ;; + esac + + set -- "$release" "$1" + action=checkout fi if [ "$action" == checkout ]; then From 5862e754d9fdb5dda474cb442596331b79688bfe Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 06:24:22 +0400 Subject: [PATCH 14/71] ne pas charger le fichier s'il n'existe pas --- lib/bashrc.d/bash_completion | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/bashrc.d/bash_completion b/lib/bashrc.d/bash_completion index 557bb2e..534ca89 100644 --- a/lib/bashrc.d/bash_completion +++ b/lib/bashrc.d/bash_completion @@ -2,19 +2,21 @@ ##@before * if [ -n "$UTOOLS_BASH_COMPLETION" ]; then - if [ -f /etc/debian_version ]; then + if [ -z "$BASH_COMPLETION" -a -f /etc/debian_version ]; then case "$( Date: Mon, 23 Mar 2015 06:34:59 +0400 Subject: [PATCH 15/71] finaliser l'option -u --- todo/prel | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/todo/prel b/todo/prel index 8b5ae99..2f27f48 100755 --- a/todo/prel +++ b/todo/prel @@ -133,9 +133,25 @@ setx branch=git_get_branch if [ "$action" == update ]; then setx version=pver -g "" - if [ "$" == auto ]; then + if [ "$incversion" == auto ]; then # s'il existe déjà une branche de release, prendre celle-là - : + setx -a branches=list_release_branches + + if [ ${#branches[*]} -eq 0 ]; then + # en l'absence de branche de release, proposer d'en créer une + incversion=menu + elif [ ${#branches[*]} -eq 1 ]; then + # s'il n'y en a qu'une, la prendre + release="${branches[0]}" + else + # sinon, donner le choix dans un menu + array_add branches master + default_branch="$branch" + array_contains branches "$default_branch" || default_branch="${branches[0]}" + simple_menu release branches -d "$default_branch" \ + -t "Basculer vers une release branch" \ + -m "Veuillez choisir la branche vers laquelle basculer" + fi fi case "$incversion" in menu) From f98c977cde57022f67dc7f1448bb51b735362d2d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 06:42:51 +0400 Subject: [PATCH 16/71] support de -v en mode auto --- todo/prel | 60 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/todo/prel b/todo/prel index 2f27f48..4a864ff 100755 --- a/todo/prel +++ b/todo/prel @@ -134,47 +134,53 @@ if [ "$action" == update ]; then setx version=pver -g "" if [ "$incversion" == auto ]; then - # s'il existe déjà une branche de release, prendre celle-là - setx -a branches=list_release_branches - - if [ ${#branches[*]} -eq 0 ]; then - # en l'absence de branche de release, proposer d'en créer une - incversion=menu - elif [ ${#branches[*]} -eq 1 ]; then - # s'il n'y en a qu'une, la prendre - release="${branches[0]}" + if [ ${#pver_opts[*]} -gt 0 ]; then + # des options ont été spécifiées, les honorer + setx specv=pver -s "$version" "${pver_opts[@]}" + release="release-$specv" else - # sinon, donner le choix dans un menu - array_add branches master - default_branch="$branch" - array_contains branches "$default_branch" || default_branch="${branches[0]}" - simple_menu release branches -d "$default_branch" \ - -t "Basculer vers une release branch" \ - -m "Veuillez choisir la branche vers laquelle basculer" + # sinon, prendre une décision en fonction des branches de release + # qui existent déjà + setx -a branches=list_release_branches + if [ ${#branches[*]} -eq 0 ]; then + # en l'absence de branche de release, proposer d'en créer une + incversion=menu + elif [ ${#branches[*]} -eq 1 ]; then + # s'il n'y en a qu'une, la prendre + release="${branches[0]}" + else + # sinon, donner le choix dans un menu + array_add branches master + default_branch="$branch" + array_contains branches "$default_branch" || default_branch="${branches[0]}" + simple_menu release branches -d "$default_branch" \ + -t "Basculer vers une release branch" \ + -m "Veuillez choisir la branche vers laquelle basculer" + fi fi fi case "$incversion" in menu) - setx major=pver -s "$version" -ux "${pver_opts[@]}" - setx minor=pver -s "$version" -uz "${pver_opts[@]}" - setx patchlevel=pver -g "$version" -up "${pver_opts[@]}" - release="release-$minor" - branches=("release-$major" "release-$minor" "release-$patchlevel" master) + setx majorv=pver -s "$version" -ux "${pver_opts[@]}" + setx minorv=pver -s "$version" -uz "${pver_opts[@]}" + setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" + release="release-$minorv" + branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master) simple_menu release branches \ -t "Basculer vers une nouvelle release branch" \ -m "Veuillez choisir la branche à créer" ;; major) - setx major=pver -s "$version" -ux "${pver_opts[@]}" - release="release-$major" + setx majorv=pver -s "$version" -ux "${pver_opts[@]}" + release="release-$majorv" ;; minor) - setx minor=pver -s "$version" -uz "${pver_opts[@]}" - release="release-$minor" + setx minorv=pver -s "$version" -uz "${pver_opts[@]}" + release="release-$minorv" ;; patchlevel) - setx patchlevel=pver -g "$version" -up "${pver_opts[@]}" - release="release-$patchlevel" + setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" + release="release-$patchlevelv" ;; esac From 8d4d35dde53e8490287e16b33826731c56eb9654 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:33:01 +0400 Subject: [PATCH 17/71] =?UTF-8?q?mettre=20=C3=A0=20jour=20la=20version=20a?= =?UTF-8?q?vec=20pver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 137 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 122 insertions(+), 15 deletions(-) diff --git a/todo/prel b/todo/prel index 4a864ff..ea1bfbc 100755 --- a/todo/prel +++ b/todo/prel @@ -81,6 +81,13 @@ OPTIONS jusqu'à la release finale. Ainsi, la branche de release est nommée d'après la version finale, mais le projet peut recevoir une version de pré-release incrémentale. + -w, --write + Si une nouvelle branche est créée avec -u, mettre à jour le fichier + VERSION.txt avec pver. C'est l'option par défaut. + -n, --no-write + Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le + fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour + du numéro de version doit être faite par manière particulière. -m, --merge Si la branche actuelle est une branche de release, ou s'il existe une @@ -102,6 +109,7 @@ origin=origin action=checkout incversion= pver_opts=() +write=1 log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -117,6 +125,8 @@ parse_opts "${PRETTYOPTS[@]}" \ -z,--minor '$action=update; incversion=minor' \ -p,--patchlevel '$action=update; incversion=patchlevel' \ -v: '$action=update; add@ pver_opts' \ + -w,--write write=1 \ + -n,--no-write write= \ -m,--merge action=merge \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @@ -131,13 +141,14 @@ git_ensure_gitvcs setx branch=git_get_branch if [ "$action" == update ]; then - setx version=pver -g "" + setx oldver=pver -g "" + newver= if [ "$incversion" == auto ]; then if [ ${#pver_opts[*]} -gt 0 ]; then # des options ont été spécifiées, les honorer - setx specv=pver -s "$version" "${pver_opts[@]}" - release="release-$specv" + setx newver=pver -s "$oldver" "${pver_opts[@]}" + release="release-$newver" else # sinon, prendre une décision en fonction des branches de release # qui existent déjà @@ -161,9 +172,9 @@ if [ "$action" == update ]; then fi case "$incversion" in menu) - setx majorv=pver -s "$version" -ux "${pver_opts[@]}" - setx minorv=pver -s "$version" -uz "${pver_opts[@]}" - setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" + setx majorv=pver -s "$oldver" -ux "${pver_opts[@]}" + setx minorv=pver -s "$oldver" -uz "${pver_opts[@]}" + setx patchlevelv=pver -g "$oldver" -up "${pver_opts[@]}" release="release-$minorv" branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master) simple_menu release branches \ @@ -171,19 +182,25 @@ if [ "$action" == update ]; then -m "Veuillez choisir la branche à créer" ;; major) - setx majorv=pver -s "$version" -ux "${pver_opts[@]}" - release="release-$majorv" + setx newver=pver -s "$oldver" -ux "${pver_opts[@]}" + release="release-$newver" ;; minor) - setx minorv=pver -s "$version" -uz "${pver_opts[@]}" - release="release-$minorv" + setx newver=pver -s "$oldver" -uz "${pver_opts[@]}" + release="release-$newver" ;; patchlevel) - setx patchlevelv=pver -g "$version" -up "${pver_opts[@]}" - release="release-$patchlevelv" + setx newver=pver -g "$oldver" -up "${pver_opts[@]}" + release="release-$newver" ;; esac + if [ -z "$newver" ]; then + # le cas échéant, tenter de calculer la version en fonction de la + # release + [[ "$release" == release-* ]] && newver="${release#release-}" + fi + set -- "$release" "$1" action=checkout fi @@ -223,8 +240,9 @@ if [ "$action" == checkout ]; then # Créer/basculer vers une release branch git_ensure_cleancheckout is_any_branch "$release" master release || die "$release: ce n'est pas une release branch" + r=0 if git_have_branch "$release"; then - git checkout "$release" + git checkout "$release"; r=$? else estepn "\ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_NORMALE} @@ -233,8 +251,97 @@ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_N git_ensure_branch "$release" "$source" "$origin" [ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe" - git checkout "$release" + git checkout "$release"; r=$? + + if [ "$r" -eq 0 -a -n "$newver" ]; then + if pver -uv "$newver"; then + git add -A + git commit -m "Initialiser la version $newver" + fi + fi fi - exit $? + exit "$r" +fi + +setx -a branches=list_release_branches +setb have_release_branches=[ ${#branches[*]} -gt 0 ] + +release="$1" +if [ -n "$release" ]; then + if [ -n "$have_release_branches" ]; then + is_release_branch "$release" || die "$release: ce n'est pas une release branch" + elif ! is_develop_branch "$release"; then + die "Aucune branche de release n'existe, vous devez fusionner à partir de develop" + fi + git_have_branch "$release" || die "$release: branche invalide" +elif is_release_branch "$branch"; then + release="$branch" +fi + +if [ "$action" == merge ]; then + confirm= + + if [ -z "$release" ]; then + if [ ${#branches[*]} -eq 0 ]; then + ewarn "Aucune release branch n'a été préparée. +Si vous continuez, la branche develop sera fusionnée directement dans master." + release=develop + confirm=-y + elif [ ${#branches[*]} -eq 1 ]; then + release="${branches[0]}" + estepn "Autosélection de $release" + else + default_release="$branch" + array_contains branches "$default_release" || default_release="${branches[0]}" + simple_menu release branches -d "$default_release" \ + -t "Choix de la release branch" \ + -m "Veuillez choisir la branche" + fi + fi + + estepn "\ +Intégration de la branche ${COULEUR_VERTE}$release${COULEUR_NORMALE} +dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" + ask_yesno $confirm "Voulez-vous continuer?" O || die + + git checkout master + git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + + if [ "$release" != develop ]; then + git checkout develop + git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + + git checkout master + + estepi "Suppression de la branche locale" + git branch -D "$release" + + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$release" + else + eimportant "\ +La branche $release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. +Veuillez le faire manuellement avec la commande suivante: + $(quoted_args git push "$origin" ":$release")" + fi + fi + fi + +elif [ "$action" == diff ]; then + if [ -n "$log" ]; then + if [ -n "$release" ]; then + git log ${diff:+-p} master.."$release" + else + git log ${diff:+-p} master..develop + fi + elif [ -n "$diff" ]; then + if [ -n "$release" ]; then + git diff master.."$release" + else + git diff master..develop + fi + fi fi From 57bf621efd5206376cd62eda5272b3a0901df9c7 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:36:28 +0400 Subject: [PATCH 18/71] cosmetic --- todo/prel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/todo/prel b/todo/prel index ea1bfbc..6636b7b 100755 --- a/todo/prel +++ b/todo/prel @@ -325,7 +325,7 @@ dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" eimportant "\ La branche $release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. Veuillez le faire manuellement avec la commande suivante: - $(quoted_args git push "$origin" ":$release")" + $(qvals git push "$origin" ":$release")" fi fi fi From de618ae39c7d43c226d0148bc36eb050af03bf11 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:40:48 +0400 Subject: [PATCH 19/71] =?UTF-8?q?possibilit=C3=A9=20de=20ne=20pas=20suppri?= =?UTF-8?q?mer=20une=20feature=20branch=20apr=C3=A8s=20son=20int=C3=A9grat?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdev | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/pdev b/pdev index 9cb6af2..95bfd9b 100755 --- a/pdev +++ b/pdev @@ -48,9 +48,14 @@ OPTIONS activée si la variable UTOOLS_VCS_OFFLINE est définie. --online Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online + -m, --merge Si la branche actuelle est une feature branch, la merger dans develop puis la supprimer. Puis basculer sur la branche develop. + -k, --keep + Avec l'option -m, ne pas supprimer une feature branch après l'avoir + fusionnée dans develop. + -l, --log -d, --diff Afficher les modifications entre deux branches. L'option --log affiche @@ -65,6 +70,7 @@ OPTIONS projdir= origin=origin action=branch +merge_delete=1 log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -74,6 +80,7 @@ parse_opts "${PRETTYOPTS[@]}" \ -o,--offline UTOOLS_VCS_OFFLINE=1 \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ + -k,--keep merge_delete= \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -170,18 +177,20 @@ dans la branche de destination ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$feature" -m "Intégration de la feature branch $feature" --no-ff || die - estepi "Suppression de la branche locale" - git branch -d "$feature" + if [ -n "$merge_delete" ]; then + estepi "Suppression de la branche locale" + git branch -D "$feature" - if git_have_remote "$origin"; then - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - estepi "Suppression de la branche distante" - git push "$origin" ":$feature" - else - eimportant "\ + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$feature" + else + eimportant "\ La branche $feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. Veuillez le faire manuellement avec la commande suivante: $(quoted_args git push "$origin" ":$feature")" + fi fi fi From 7c367617582fea8dd484d89a24052488fe9fbe43 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:53:50 +0400 Subject: [PATCH 20/71] =?UTF-8?q?possibilit=C3=A9=20de=20faire=20-u=20et?= =?UTF-8?q?=20-m=20dans=20la=20m=C3=AAme=20commande?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/todo/prel b/todo/prel index 6636b7b..a15b0c2 100755 --- a/todo/prel +++ b/todo/prel @@ -106,7 +106,10 @@ OPTIONS projdir= origin=origin -action=checkout +action=auto +update= +merge= +checkout= incversion= pver_opts=() write=1 @@ -118,20 +121,30 @@ parse_opts "${PRETTYOPTS[@]}" \ -O:,--origin: origin= \ -o,--offline UTOOLS_VCS_OFFLINE=1 \ --online UTOOLS_VCS_OFFLINE= \ - -c,--checkout '$action=checkout' \ - -u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \ - --menu '$action=update; incversion=menu' \ - -x,--major '$action=update; incversion=major' \ - -z,--minor '$action=update; incversion=minor' \ - -p,--patchlevel '$action=update; incversion=patchlevel' \ - -v: '$action=update; add@ pver_opts' \ + -c,--checkout checkout=1 \ + -u,--update '$update=1; [ -z "$incversion" ] && incversion=auto' \ + --menu '$update=1; incversion=menu' \ + -x,--major '$update=1; incversion=major' \ + -z,--minor '$update=1; incversion=minor' \ + -p,--patchlevel '$update=1; incversion=patchlevel' \ + -v: '$update=1; add@ pver_opts' \ -w,--write write=1 \ -n,--no-write write= \ - -m,--merge action=merge \ + -m,--merge merge=1 \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" +if [ "$action" == auto ]; then + if [ -n "$update" ]; then + action=update + elif [ -n "$merge" ]; then + action=merge + elif [ -n "$checkout" ]; then + action=checkout + fi +fi + if [ -n "$projdir" ]; then cd "$projdir" || die fi @@ -261,7 +274,12 @@ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_N fi fi - exit "$r" + if [ "$r" -eq 0 -a -n "$merge" ]; then + set -- "$release" + action=merge + else + exit "$r" + fi fi setx -a branches=list_release_branches @@ -284,8 +302,8 @@ if [ "$action" == merge ]; then if [ -z "$release" ]; then if [ ${#branches[*]} -eq 0 ]; then - ewarn "Aucune release branch n'a été préparée. -Si vous continuez, la branche develop sera fusionnée directement dans master." + ewarn "Aucune release branch n'a été préparée." + ewarn "La branche develop sera fusionnée directement dans master." release=develop confirm=-y elif [ ${#branches[*]} -eq 1 ]; then @@ -306,11 +324,11 @@ dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" ask_yesno $confirm "Voulez-vous continuer?" O || die git checkout master - git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + git merge "$release" -m "Intégration de la branche $release" --no-ff || die if [ "$release" != develop ]; then git checkout develop - git merge "$release" -m "Intégration de la release branch $release" --no-ff || die + git merge "$release" -m "Intégration de la branche $release" --no-ff || die git checkout master From 7647d2d14a78fd8bdef744f68d6ace2535887274 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:56:32 +0400 Subject: [PATCH 21/71] =?UTF-8?q?prel=20est=20pr=C3=AAt=20=C3=A0=20passer?= =?UTF-8?q?=20en=20toplevel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- todo/prel => prel | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) rename todo/prel => prel (96%) diff --git a/todo/prel b/prel similarity index 96% rename from todo/prel rename to prel index a15b0c2..7ab0172 100755 --- a/todo/prel +++ b/prel @@ -13,14 +13,11 @@ complete -F __prel_completion prel exit 0 fi -source "$(dirname "$0")/../lib/ulib/ulib" || exit 1 -#source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS ptools -# XXX ajouter la possibilité de faire des pré-releases, --alpha, --beta, --rc -# les pré-releases restent dans la branche de release, et vivent leur vie, -# jusqu'à la release finale qui est mergée dans master. Il faudrait aussi une -# option pour merger les modifications de la branche de release dans develop +# XXX Ajouter une option pour fusionner les modifications d'une branche de +# pré-release dans develop function display_help() { uecho "$scriptname: basculer sur une branche de release From f60787a795523bb5ad7ec8cf6f853ab22ead526d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 07:57:15 +0400 Subject: [PATCH 22/71] prel est maintenant en topevel --- lib/uinst/conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/uinst/conf b/lib/uinst/conf index 2c5263b..97ec601 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -37,7 +37,7 @@ rm -f ~/etc/bashrc.d/bash_completion.nutools # renommé mkdir -p ~/etc/completion.d bcdir=lib/completion.d ./pdev --nutools-completion >"$bcdir/pdev" -./todo/prel --nutools-completion >"$bcdir/prel" +./prel --nutools-completion >"$bcdir/prel" #./pfix --nutools-completion >"$bcdir/pfix" # copier le fichier .nutoolsrc From 4f0a746d0476bfedf53594f361d5a02c9b2f7f79 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 13:21:56 +0400 Subject: [PATCH 23/71] support des fichiers pom.xml --- lib/ulib/ptools | 72 ++++++++++++++++++++++++++++++++++++++++++++++--- pver | 4 +++ 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index c8b990f..f90af63 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -85,8 +85,48 @@ function list_feature_branches() { ################################################################################ # Outils de haut niveau +function __pom_get_version() { + # obtenir la version dans le pom $1(=pom.xml) + local pom="${1:-pom.xml}" + awk <"$pom" '/^[ \t]*/ { + sub(/^.*/, "") + sub(/<\/version>.*$/, "") + print + exit +}' +} +function __pom_set_version() { + # modifier la version du le fichier $1(=pom.xml) à la valeur + # $2(=1.0.0-SNAPSHOT) + local pom="${1:-pom.xml}" + local version="${2:-1.0.0-SNAPSHOT}" + local tmpfile; ac_set_tmpfile tmpfile + awk <"$pom" >"$tmpfile" ' +BEGIN { + version = '"$(qawk "$version")"' + found = 0 +} +!found && $0 ~ /^[ \t]*/ { + prefix = "" + if (match($0, /^.*/)) { + prefix = substr($0, RSTART, RLENGTH) + } + suffix = "" + if (match($0, /<\/version>.*$/)) { + suffix = substr($0, RSTART, RLENGTH) + } + print prefix version suffix + found = 1 + next +} +{ print }' + cat "$tmpfile" >"$pom" + ac_clean "$tmpfile" +} + function pver() { local DEFAULT_FILE=VERSION.txt + local DEFAULT_POM=pom.xml local -a args local action=auto @@ -109,6 +149,7 @@ function pver() { parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with pver_display_help' \ -f:,--file: '$set@ file; source=file' \ + -e:,--maven:,--pom: '$set@ file; source=pom' \ -F:,--file-string: '$set@ file; source=file-string' \ -g:,--git-string: '$set@ git; source=git-string' \ -s:,--string: '$set@ version; source=string' \ @@ -140,21 +181,38 @@ function pver() { # Calculer la source if [ "$source" == auto ]; then source=file - for i in "$DEFAULT_FILE" version.txt; do + for i in "$DEFAULT_FILE" version.txt "$DEFAULT_POM"; do if [ -f "$i" ]; then - file="$i" - break + case "$i" in + "$DEFAULT_POM") + source=pom + file="$i" + break + ;; + *) + source=file + file="$i" + break + ;; + esac fi done elif [ "$source" == file ]; then [ "$action" == auto ] && action=update fi [ "$source" == file -a -z "$file" ] && file="$DEFAULT_FILE" + [ "$source" == pom -a -z "$file" ] && file="$DEFAULT_POM" [ "$action" == auto ] && action=show # Lire la version if [ "$source" == file ]; then [ -f "$file" ] && version="$(<"$file")" + elif [ "$source" == pom ]; then + [ -f "$file" ] || { + eerror "$file: fichier introuvable" + return 1 + } + version="$(__pom_get_version "$file")" elif [ "$source" == file-string ]; then if [ -z "$file" ]; then file="$DEFAULT_FILE" @@ -319,6 +377,9 @@ BEGIN { if isatty; then estepi "La version actuelle est $version" fi + elif [ "$source" == pom ]; then + eerror "$file: fichier introuvable" + return 1 else if isatty; then ask_yesno "Le fichier $(ppath "$file") n'existe pas. Faut-il le créer?" O || return 1 @@ -399,7 +460,10 @@ BEGIN { # afficher le résultat final psemver_setvar version if [ -n "$file" ]; then - echo "$version" >"$file" + case "$source" in + file) echo "$version" >"$file";; + pom) __pom_set_version "$file" "$version";; + esac fi if isatty; then estepn "La nouvelle version est $version" diff --git a/pver b/pver index 3e43a3b..b5ca3a5 100755 --- a/pver +++ b/pver @@ -14,6 +14,10 @@ OPTIONS Gérer le numéro de version se trouvant dans le fichier spécifié. Le fichier est créé si nécessaire. C'est l'option par défaut si un fichier nommé VERSION.txt se trouve dans le répertoire courant. + -e, --maven POMFILE + Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié. + Le fichier DOIT exister. C'est l'option par défaut si un fichier nommé + pom.xml se trouve dans le répertoire courant. -F, --file-string VERSIONFILE Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui vaut par défaut VERSION.txt) From 22a26d9a81e5fb6af32ad7c7e8b60b9c79b0c1f3 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 13:33:55 +0400 Subject: [PATCH 24/71] =?UTF-8?q?support=20des=20num=C3=A9ros=20style=20ma?= =?UTF-8?q?ven?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/ptools | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index f90af63..f02ce62 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -244,6 +244,7 @@ function nbdot(s) { return length(s) } BEGIN { + ### utools, legacy if (version ~ /[0-9]+(\.[0-9]+)*(-r[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9])?$/) { metadata = "" # traiter release date @@ -268,6 +269,32 @@ BEGIN { # afficher la version migrée au format semver if (metadata != "") print version "+" metadata else print version + + ### maven, pom.xml + } else if (version ~ /[0-9]+(\.[0-9]+)*(-[sS][nN][aA][pP][sS][hH][oO][tT])?$/) { + + prerelease = "" + # traiter prerelease + pos = length(version) - 9 + if (pos > 0) { + prerelease = substr(version, pos + 2) + version = substr(version, 1, pos) + } + # traiter prerelease + match(version, /[0-9]+(\.[0-9]+(\.[0-9]+)?)?/) + pos = RLENGTH + if (pos < length(version)) { + if (prerelease != "") prerelease = prerelease "." + prerelease = prerelease substr(version, pos + 2) + } + version = substr(version, 1, pos) + # ajouter les éléments manquants + while (nbdot(version) < 2) { + version = version ".0" + } + # afficher la version migrée au format semver + if (prerelease != "") print version "-" prerelease + else print version } }')" if [ -n "$mversion" ]; then From f8c4a54e18ee95dfe1bf980adb0726ef2b05fa83 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 13:48:16 +0400 Subject: [PATCH 25/71] calcul de la version avec --prel --- lib/ulib/ptools | 10 ++++++++++ prel | 5 ++++- pver | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index f02ce62..294a42b 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -164,6 +164,7 @@ function pver() { --gt: '$action=compare; operator=gt; set@ oversion' \ --ge: '$action=compare; operator=ge; set@ oversion' \ -v:,--set-version: '$action=update; set@ setversion; incversion=' \ + --prel '$action=update; setversion=prel; incversion=' \ -u,--update '$action=update; [ -z "$incversion" ] && incversion=auto' \ --menu '$action=update; incversion=menu' \ -x,--major '$action=update; incversion=major' \ @@ -416,6 +417,15 @@ BEGIN { # forcer le numéro de version if [ -n "$setversion" ]; then + if [ "$setversion" == prel ]; then + local branch; branch="$(git_get_branch)" || return 2 + if [[ "$branch" == release-* ]]; then + setversion="${branch#release-}" + else + eerror "$branch: n'est pas une release branch" + return 1 + fi + fi psemver_setversion "$setversion" "" || { eerror "Numéro de version invalide: $setversion"; return 1; } fi diff --git a/prel b/prel index 7ab0172..5fa9e0c 100755 --- a/prel +++ b/prel @@ -263,7 +263,7 @@ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_N [ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe" git checkout "$release"; r=$? - if [ "$r" -eq 0 -a -n "$newver" ]; then + if [ "$r" -eq 0 -a -n "$newver" -a -n "$write" ]; then if pver -uv "$newver"; then git add -A git commit -m "Initialiser la version $newver" @@ -324,6 +324,9 @@ dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" git merge "$release" -m "Intégration de la branche $release" --no-ff || die if [ "$release" != develop ]; then + estepn "\ +Intégration de la branche ${COULEUR_VERTE}$release${COULEUR_NORMALE} +dans la branche de destination ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$release" -m "Intégration de la branche $release" --no-ff || die diff --git a/pver b/pver index b5ca3a5..7efbc43 100755 --- a/pver +++ b/pver @@ -54,6 +54,10 @@ OPTIONS Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Cette option ne devrait pas être utilisée en temps normal parce que cela va contre les règles du versionage sémantique. + --prel + Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le + numéro de version est obtenu à partir du nom de la branche git courante, + qui doit être de la forme release-VERSION -u, --update Mettre à jour le numéro de version. From 8deda7495634bbc1b96dbd961661f7834c4ec9d4 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 13:51:06 +0400 Subject: [PATCH 26/71] cosmetic --- pdev | 4 +--- prel | 8 ++------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/pdev b/pdev index 95bfd9b..0cfa33d 100755 --- a/pdev +++ b/pdev @@ -169,9 +169,7 @@ if [ "$action" == merge ]; then fi fi - estepn "\ -Intégration de la feature branch ${COULEUR_VERTE}$feature${COULEUR_NORMALE} -dans la branche de destination ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" + estepn "Intégration ${COULEUR_VERTE}$feature${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die git checkout develop diff --git a/prel b/prel index 5fa9e0c..c0fe171 100755 --- a/prel +++ b/prel @@ -315,18 +315,14 @@ if [ "$action" == merge ]; then fi fi - estepn "\ -Intégration de la branche ${COULEUR_VERTE}$release${COULEUR_NORMALE} -dans la branche de destination ${COULEUR_BLEUE}master${COULEUR_NORMALE}" + estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}master${COULEUR_NORMALE}" ask_yesno $confirm "Voulez-vous continuer?" O || die git checkout master git merge "$release" -m "Intégration de la branche $release" --no-ff || die if [ "$release" != develop ]; then - estepn "\ -Intégration de la branche ${COULEUR_VERTE}$release${COULEUR_NORMALE} -dans la branche de destination ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" + estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$release" -m "Intégration de la branche $release" --no-ff || die From 26aa98f81c61d0f4bcfd2d9a638d0ff7e168830c Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 14:01:18 +0400 Subject: [PATCH 27/71] cosmetic --- prel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prel b/prel index c0fe171..d0cba7e 100755 --- a/prel +++ b/prel @@ -266,7 +266,7 @@ Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_N if [ "$r" -eq 0 -a -n "$newver" -a -n "$write" ]; then if pver -uv "$newver"; then git add -A - git commit -m "Initialiser la version $newver" + git commit -m "Init version $newver" fi fi fi From f90ad4d061ad2072a498827a2295104b12325704 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 14:05:56 +0400 Subject: [PATCH 28/71] bug --- prel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prel b/prel index d0cba7e..3527c85 100755 --- a/prel +++ b/prel @@ -200,7 +200,7 @@ if [ "$action" == update ]; then release="release-$newver" ;; patchlevel) - setx newver=pver -g "$oldver" -up "${pver_opts[@]}" + setx newver=pver -s "$oldver" -up "${pver_opts[@]}" release="release-$newver" ;; esac From 9389fb01e85085d804af37227708ac65a6aace3f Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 14:39:10 +0400 Subject: [PATCH 29/71] autoriser --allow-emptyp pour l'action --show --- lib/ulib/ptools | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index 294a42b..a620fc4 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -134,6 +134,7 @@ function pver() { local file= local git= local version= + local allow_empty= local convert=auto local operator= local oversion= @@ -154,6 +155,7 @@ function pver() { -g:,--git-string: '$set@ git; source=git-string' \ -s:,--string: '$set@ version; source=string' \ --show action=show \ + --allow-empty allow_empty=1 \ --check action=check \ --convert convert=1 \ --no-convert convert= \ @@ -230,7 +232,8 @@ function pver() { version="$(git cat-file blob "$branch:$name" 2>/dev/null)" fi fi - [ -n "$version" ] || version=0.0.0 + [ "$action" == show ] || allow_empty= + [ -n "$version" -o -n "$allow_empty" ] || version=0.0.0 # Conversion éventuelle du numéro de version psemver_parse "$version" @@ -306,12 +309,19 @@ BEGIN { # Actions if [ "$action" == show ]; then - if isatty; then - estepi "La version actuelle est $version" + if [ -n "$version" ]; then + if isatty; then + estepi "La version actuelle est $version" + else + echo "$version" + fi + return 0 else - echo "$version" + if isatty; then + estepi "Il n'y a pas de version définie" + fi + return 1 fi - return 0 fi if [ "$action" == check ]; then From 1e11a57f83a93a8c061ed4793572812e10c157c2 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 14:39:24 +0400 Subject: [PATCH 30/71] ajouter pz pour faire une archive d'un projet --- pz | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ uproject | 10 +++++++--- 2 files changed, 58 insertions(+), 3 deletions(-) create mode 100755 pz diff --git a/pz b/pz new file mode 100755 index 0000000..cfaa9e6 --- /dev/null +++ b/pz @@ -0,0 +1,51 @@ +#!/bin/bash +# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS vcs ptools + +function display_help() { + uecho "$scriptname: faire une archive du projet + +USAGE + $scriptname + +OPTIONS + -C, --projdir PROJDIR + Spécifier le répertoire de base du projet qui est dans git. Par défaut, + on travaille dans le répertoire courant et on laisse git trouver le + répertoire de base du projet. Avec cette option, le répertoire courant + est modifié avant de lancer les commandes git. + -d, --destdir DESTDIR + Spécifier le répertoire dans lequel générer l'archive. Par défaut, + prendre le répertoire parent du répertoire de base du dépôt." +} + +projdir= +destdir= +parse_opts "${PRETTYOPTS[@]}" \ + --help '$exit_with display_help' \ + -C:,--projdir: projdir= \ + -d:,--destdir: destdir= \ + @ args -- "$@" && set -- "${args[@]}" || die "$args" + +if [ -n "$projdir" ]; then + cd "$projdir" || die + git_ensure_gitvcs +else + git_ensure_gitvcs + setx projdir=git rev-parse --show-toplevel + cd "$projdir" || die +fi +setx projdir=pwd + +if [ -z "$destdir" ]; then + setx destdir=dirname -- "$projdir" +fi + +setx name=basename -- "$projdir" +setx version=pver --show --allow-empty +setx branch=git_get_branch +dest="$destdir/$name${version:+-$version}+$branch.tgz" + +estep "Création de $(ppath "$dest")" +git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD diff --git a/uproject b/uproject index 8c2b530..6b22edf 100755 --- a/uproject +++ b/uproject @@ -66,6 +66,9 @@ COMMANDS release, ou de correction de bugs. Lancer chaque commande avec --help pour les détails. Nécessite git. + archive + Créer une archive du projet courant. Nécessite git. + annex [args] Lancer git annex avec les arguments spécifiés. xadd @@ -106,12 +109,12 @@ SCRIPT_ALIASES=( pv:vcs pa:add prm:remove pcp:copy pmv:move pmd:mkdir pci:commit pu:update pp:push pdiff:diff + pclone:clone + pcrone:crone pxx:annex pxa:xadd pxu:xunlock pxc:xcopy pxd:xdrop pxm:xmove pxg:xget pxs:xsync pxw:xwhereis pxinitial:xinitial - pclone:clone - pcrone:crone pnew:new pgr:grep paddml:addml @@ -130,6 +133,7 @@ CMD_ALIASES=( p:push version:pver ver:pver develop:pdev dev:pdev release:prel rel:prel hotfix:pfix fix:pfix + archive:pz arch:pz xx:annex xa:xadd xu:xunlock @@ -144,7 +148,7 @@ CMD_ALIASES=( DEFAULT_CMD=status PY_CMDS=(new) VCS_CMDS=(getvcs getroot getrepos geturl vcs add remove copy move mkdir commit status update push diff tag) -SH_CMDS=(pver pdev prel pfix) +SH_CMDS=(pver pdev prel pfix pz) GITANNEX_CMDS=(annex xadd xunlock xcopy xdrop xmove xget xsync xwhereis xinitial) ML_CMDS=(printml addml) From ac940b819f1f958147643703db1aae9569a1173a Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 14:45:43 +0400 Subject: [PATCH 31/71] ne garder que les infos sur la branche courante dans les metadata --- pz | 1 + 1 file changed, 1 insertion(+) diff --git a/pz b/pz index cfaa9e6..fdd9019 100755 --- a/pz +++ b/pz @@ -44,6 +44,7 @@ fi setx name=basename -- "$projdir" setx version=pver --show --allow-empty +version="${version%+*}" setx branch=git_get_branch dest="$destdir/$name${version:+-$version}+$branch.tgz" From 8d3ab79b39c82aa8c074be8d97c4f21d384b3640 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:04:36 +0400 Subject: [PATCH 32/71] ajout de semver_addmetadata utiliser API moderne pour les perfs --- lib/ulib/semver | 57 +++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/ulib/semver b/lib/ulib/semver index 5c96594..5b04956 100644 --- a/lib/ulib/semver +++ b/lib/ulib/semver @@ -14,12 +14,12 @@ function semver_parse() { local __p_ma="${2:-major}" __p_mi="${3:-minor}" __p_pl="${4:-patchlevel}" local __p_pr="${5:-prelease}" __p_md="${6:-metadata}" __p_va="${7:-valid}" local __p_tmp - set_var "$__p_ma" "" - set_var "$__p_mi" "" - set_var "$__p_pl" "" + setv "$__p_ma" "" + setv "$__p_mi" "" + setv "$__p_pl" "" array_new "$__p_pr" array_new "$__p_md" - set_var "$__p_va" "" + setv "$__p_va" "" # vérifier les caractères valides __semver_check_version "$__p_ver" || return 1 @@ -32,7 +32,7 @@ function semver_parse() { done [ "${__p_ver:0:1}" == . ] || return 1 __p_ver="${__p_ver:1}" - set_var "$__p_ma" "$__p_tmp" + setv "$__p_ma" "$__p_tmp" # extraire minor __p_tmp= @@ -42,7 +42,7 @@ function semver_parse() { done [ "${__p_ver:0:1}" == . ] || return 1 __p_ver="${__p_ver:1}" - set_var "$__p_mi" "$__p_tmp" + setv "$__p_mi" "$__p_tmp" # extraire patchlevel __p_tmp= @@ -51,7 +51,7 @@ function semver_parse() { __p_ver="${__p_ver:1}" done [ -z "$__p_ver" -o "${__p_ver:0:1}" == - -o "${__p_ver:0:1}" == + ] || return 1 - set_var "$__p_pl" "$__p_tmp" + setv "$__p_pl" "$__p_tmp" # extraire prelease if [ "${__p_ver:0:1}" == - ]; then @@ -79,25 +79,25 @@ function semver_parse() { # on doit avoir tout analysé [ -z "$__p_ver" ] || return 1 - set_var "$__p_va" 1 + setv "$__p_va" 1 return 0 } function semver_incmajor() { - set_var "$1" $((${!1} + 1)) - set_var "$2" 0 - set_var "$3" 0 + setv "$1" $((${!1} + 1)) + setv "$2" 0 + setv "$3" 0 array_new "$4" } function semver_incminor() { - set_var "$2" $((${!2} + 1)) - set_var "$3" 0 + setv "$2" $((${!2} + 1)) + setv "$3" 0 array_new "$4" } function semver_incpatchlevel() { - set_var "$3" $((${!3} + 1)) + setv "$3" $((${!3} + 1)) array_new "$4" } @@ -105,9 +105,9 @@ function semver_setversion() { local __sv_ma __sv_mi __sv_svl __sv_svr __sv_md __sv_va semver_parse "$1" __sv_ma __sv_mi __sv_pl __sv_pr __sv_md __sv_va [ -n "$__sv_va" ] || return 1 - set_var "$2" "$__sv_ma" - set_var "$3" "$__sv_mi" - set_var "$4" "$__sv_pl" + setv "$2" "$__sv_ma" + setv "$3" "$__sv_mi" + setv "$4" "$__sv_pl" return 0 } @@ -188,28 +188,38 @@ function semver_setmetadata() { return 0 } +function semver_addmetadata() { + if [ -n "$1" ]; then + __semver_check_metadata "$1" || return 1 + local -a __sam_metadata + array_split __sam_metadata "$1" . + array_extend "$6" __sam_metadata + fi + return 0 +} + function semver_compare_metadata() { # même algo que pour prelease semver_compare_prelease "$@" } function semver_copy() { - set_var "$1" "${!6}" - set_var "$2" "${!7}" - set_var "$3" "${!8}" + setv "$1" "${!6}" + setv "$2" "${!7}" + setv "$3" "${!8}" array_copy "$4" "$9" array_copy "$5" "${10}" } function semver_build() { echo_ "${!1}.${!2}.${!3}" - array_isempty "$4" || rawecho_ "-$(array_join "$4" .)" - array_isempty "$5" || rawecho_ "+$(array_join "$5" .)" + array_isempty "$4" || recho_ "-$(array_join "$4" .)" + array_isempty "$5" || recho_ "+$(array_join "$5" .)" echo "" } function semver_setvar() { - set_var "$1" "$(semver_build "$2" "$3" "$4" "$5" "$6")" + setv "$1" "$(semver_build "$2" "$3" "$4" "$5" "$6")" } ################################################################################ @@ -225,6 +235,7 @@ function psemver_setversion() { semver_setversion "$1" "${2}major" "${2}minor" " function psemver_setprelease() { semver_setprelease "$1" "${2}major" "${2}minor" "${2}patchlevel" "${2}prelease" "${2}metadata"; } function psemver_compare_prelease() { semver_compare_prelease "${1}prelease" "${2}prelease"; } function psemver_setmetadata() { semver_setmetadata "$1" "${2}major" "${2}minor" "${2}patchlevel" "${2}prelease" "${2}metadata"; } +function psemver_addmetadata() { semver_addmetadata "$1" "${2}major" "${2}minor" "${2}patchlevel" "${2}prelease" "${2}metadata"; } function psemver_compare_metadata() { semver_compare_metadata "${1}metadata" "${2}metadata"; } function psemver_copy() { semver_copy "${1}major" "${1}minor" "${1}patchlevel" "${1}prelease" "${1}metadata" "${2}major" "${2}minor" "${2}patchlevel" "${2}prelease" "${2}metadata"; } function psemver_build() { semver_build "${1}major" "${1}minor" "${1}patchlevel" "${1}prelease" "${1}metadata"; } From 259e1be6dcec0be0c51927cb11babdae42383582 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:05:32 +0400 Subject: [PATCH 33/71] ajout de --add-metadata support de --allow-empty pour --update --- lib/ulib/ptools | 63 +++++++++++++++++++++++++++++++++++++++++-------- pver | 9 ++++++- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index a620fc4..8b0db09 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -145,7 +145,7 @@ function pver() { local setbeta= local setrc= local setrelease= - local setmetadata= + local setmetadata= addmetadata= local vcsmetadata= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with pver_display_help' \ @@ -177,7 +177,8 @@ function pver() { -b,--beta '$action=update; setalpha=; setbeta=1; setrc=; setrelease=' \ -r,--rc '$action=update; setalpha=; setbeta=; setrc=1; setrelease=' \ -R,--release,--final '$action=update; setalpha=; setbeta=; setrc=; setrelease=1' \ - -m:,--metadata: '$action=update; set@ setmetadata' \ + -m:,--metadata:,--set-metadata: '$action=update; set@ setmetadata' \ + --add-metadata: '$action=update; set@ addmetadata' \ -M,--vcs-metadata '$action=update; vcsmetadata=1' \ @ args -- "$@" && set -- "${args[@]}" || { eerror "$args"; return 1; } @@ -232,7 +233,6 @@ function pver() { version="$(git cat-file blob "$branch:$name" 2>/dev/null)" fi fi - [ "$action" == show ] || allow_empty= [ -n "$version" -o -n "$allow_empty" ] || version=0.0.0 # Conversion éventuelle du numéro de version @@ -241,7 +241,7 @@ function pver() { if [ "$convert" == auto ]; then [ -z "$valid" ] && convert=1 fi - if [ -n "$convert" ]; then + if [ -n "$convert" -a -n "$version" ]; then mversion="$(awkrun version="$version" ' function nbdot(s) { gsub(/[^.]/, "", s) @@ -408,6 +408,7 @@ BEGIN { esac elif [ "$action" == update ]; then + [ -z "$version" -a -n "$allow_empty" ] && return 1 [ -n "$valid" ] || { eerror "Numéro de version invalide: $version"; return 1; } if [ -n "$file" ]; then @@ -446,17 +447,56 @@ BEGIN { # incrémenter les numéros de version if [ "$incversion" == auto ]; then - if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" ]; then + if [ -n "$setrelease" -o -n "$setprelease" -o -n "$setmetadata" -o -n "$addmetadata" ]; then incversion= else incversion=menu fi fi if [ "$incversion" == menu ]; then - psemver_copy x; psemver_incmajor x; psemver_setprelease "$setprelease" x; psemver_setmetadata "$setmetadata" x; psemver_setvar versionx x - psemver_copy z; psemver_incminor z; psemver_setprelease "$setprelease" z; psemver_setmetadata "$setmetadata" z; psemver_setvar versionz z - psemver_copy p; psemver_incpatchlevel p; psemver_setprelease "$setprelease" p; psemver_setmetadata "$setmetadata" p; psemver_setvar versionp p - psemver_copy k; psemver_setprelease "$setprelease" k; psemver_setmetadata "$setmetadata" k; psemver_setvar versionk k + psemver_copy x; { + psemver_incmajor x + psemver_setprelease "$setprelease" x + if [ -n "$addmetadata" ]; then + [ -n "$setmetadata" ] && psemver_setmetadata "$setmetadata" x + psemver_addmetadata "$addmetadata" x + else + psemver_setmetadata "$setmetadata" x + fi + psemver_setvar versionx x + } + psemver_copy z; { + psemver_incminor z + psemver_setprelease "$setprelease" z + if [ -n "$addmetadata" ]; then + [ -n "$setmetadata" ] && psemver_setmetadata "$setmetadata" z + psemver_addmetadata "$addmetadata" z + else + psemver_setmetadata "$setmetadata" z + fi + psemver_setvar versionz z + } + psemver_copy p; { + psemver_incpatchlevel p + psemver_setprelease "$setprelease" p + if [ -n "$addmetadata" ]; then + [ -n "$setmetadata" ] && psemver_setmetadata "$setmetadata" p + psemver_addmetadata "$addmetadata" p + else + psemver_setmetadata "$setmetadata" p + fi + psemver_setvar versionp p + } + psemver_copy k; { + psemver_setprelease "$setprelease" k + if [ -n "$addmetadata" ]; then + [ -n "$setmetadata" ] && psemver_setmetadata "$setmetadata" k + psemver_addmetadata "$addmetadata" k + else + psemver_setmetadata "$setmetadata" k + fi + psemver_setvar versionk k + } nextvs=( "$versionx : maj incompatibles de l'API (-x)" "$versionz : maj compatibles de l'API (-z)" @@ -482,7 +522,7 @@ BEGIN { esac # Quand on incrémente, réinitialiser la valeur de prérelease et metadata psemver_setprelease - psemver_setmetadata + [ -z "$addmetadata" ] && psemver_setmetadata fi # spécifier prerelease @@ -503,6 +543,9 @@ BEGIN { if [ -n "$setmetadata" ]; then psemver_setmetadata "$setmetadata" || { eerror "Identifiant de build invalide: $setmetadata"; return 1; } fi + if [ -n "$addmetadata" ]; then + psemver_addmetadata "$addmetadata" || { eerror "Identifiant de build invalide: $addmetadata"; return 1; } + fi # afficher le résultat final psemver_setvar version diff --git a/pver b/pver index 7efbc43..cb10543 100755 --- a/pver +++ b/pver @@ -30,6 +30,10 @@ OPTIONS --show Afficher le numéro de version. C'est l'action par défaut + --allow-empty + Supporter que la version puisse ne pas être spécifiée ni trouvée. Dans + ce cas, ne pas assumer que la version effective est 0.0.0 + Avec --show et --update, ne rien afficher si la version est vide. --check Vérifier que le numéro de version est conforme aux règles du versionage sémantique @@ -88,7 +92,10 @@ OPTIONS Spécifier un identifiant de build, à ajouter au numéro de version. -M, --vcs-metadata Spécifier l'identifiant à partir de la révision actuelle dans le - gestionnaire de version. Note: pour le moment, seul git est supporté." + gestionnaire de version. Note: pour le moment, seul git est supporté. + --add-metadata ID + Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la + remplacer. Séparer l'identifiant de la valeur précédente avec un '.'" } pver "$@" From 8ae0a8d770d6849c6f69477356fce28e48c27a9f Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:05:58 +0400 Subject: [PATCH 34/71] utiliser nouvelle API --add-metadata --- pz | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pz b/pz index fdd9019..c8f2762 100755 --- a/pz +++ b/pz @@ -43,10 +43,10 @@ if [ -z "$destdir" ]; then fi setx name=basename -- "$projdir" -setx version=pver --show --allow-empty -version="${version%+*}" -setx branch=git_get_branch -dest="$destdir/$name${version:+-$version}+$branch.tgz" +setx branch=git rev-parse --short HEAD 2>/dev/null +setx version=pver --show --allow-empty --add-metadata "$branch" +[ -n "$version" ] || version="+$branch" +dest="$destdir/$name${version:+-$version}.tgz" estep "Création de $(ppath "$dest")" git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD From 262d12ed2eba9da10162e85c54a9f6000d6e5cab Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:47:12 +0400 Subject: [PATCH 35/71] toujours charger le module --- lib/bashrc.d/bash_completion | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/bashrc.d/bash_completion b/lib/bashrc.d/bash_completion index 534ca89..190e995 100644 --- a/lib/bashrc.d/bash_completion +++ b/lib/bashrc.d/bash_completion @@ -2,7 +2,9 @@ ##@before * if [ -n "$UTOOLS_BASH_COMPLETION" ]; then - if [ -z "$BASH_COMPLETION" -a -f /etc/debian_version ]; then + function __bash_completion_enabled() { return 1; } + function __bash_completion_module_enabled() { return 1; } + if [ -f /etc/debian_version ]; then case "$( Date: Thu, 26 Mar 2015 20:49:32 +0400 Subject: [PATCH 36/71] maj doc --- lib/ulib/bash40/bash_completion | 3 ++- lib/ulib/bash41/bash_completion | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/ulib/bash40/bash_completion b/lib/ulib/bash40/bash_completion index a3607e0..271e2da 100644 --- a/lib/ulib/bash40/bash_completion +++ b/lib/ulib/bash40/bash_completion @@ -4,7 +4,8 @@ ## l'implémentation sous Debian Squeeze, ce qui signifie qu'elles sont conçues ## pour fonctionner avec bash 4.0 ##@cooked nocomments -##@require base +## ATTENTION! Ce module ne doit pas avoir de dépendances externes parce qu'il +## doit pouvoir être chargé depuis ~/etc/bashrc.d uprovide bash_completion function __bash_completion_enabled() { diff --git a/lib/ulib/bash41/bash_completion b/lib/ulib/bash41/bash_completion index fb3e290..a21de3f 100644 --- a/lib/ulib/bash41/bash_completion +++ b/lib/ulib/bash41/bash_completion @@ -4,7 +4,8 @@ ## l'implémentation sous Debian Wheezy, ce qui signifie qu'elles sont conçues ## pour fonctionner avec bash 4.1 ##@cooked nocomments -##@require base +## ATTENTION! Ce module ne doit pas avoir de dépendances externes parce qu'il +## doit pouvoir être chargé depuis ~/etc/bashrc.d uprovide bash_completion function __bash_completion_enabled() { From 2e215cc09f300cdfd614f653c428c03f9b43a46c Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:53:48 +0400 Subject: [PATCH 37/71] utiliser l'api --- lib/bashrc.d/bash_completion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bashrc.d/bash_completion b/lib/bashrc.d/bash_completion index 190e995..7ee52d1 100644 --- a/lib/bashrc.d/bash_completion +++ b/lib/bashrc.d/bash_completion @@ -20,7 +20,7 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then [ -f "$_file" ] && source "$_file" unset _file fi - if [ -n "$BASH_COMPLETION" ]; then + if __bash_completion_enabled; then for i in "@@dest@@/lib/completion.d/"*; do [ -f "$i" ] || continue source "$i" From 1661ee5f480659c306e1222e6e30c5976af27589 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 26 Mar 2015 23:54:43 +0400 Subject: [PATCH 38/71] ajout des fonctions git_is_ancestor(), git_should_ff(), git_should_push(), git_is_merged() --- lib/ulib/vcs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index 1248feb..a1b044c 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -523,6 +523,8 @@ __VCS_GIT_ADVANCED_MAP=( gb:git_get_branch ib:git_is_branch hr:git_have_remote tb:git_track_branch cc:git_check_cleancheckout ec:git_ensure_cleancheckout + ia:git_is_ancestor sff:git_should_ff spu:git_should_push + im:git_is_merged ) __VCS_GIT_ADVANCED=( git_check_gitvcs git_ensure_gitvcs @@ -531,6 +533,8 @@ __VCS_GIT_ADVANCED=( git_get_branch git_is_branch git_have_remote git_track_branch git_check_cleancheckout git_ensure_cleancheckout + git_is_ancestor git_should_ff git_should_push + git_is_merged ) function git_check_gitvcs() { [ "$(_vcs_get_type "$(_vcs_get_dir)")" == git ] @@ -596,6 +600,46 @@ function git_ensure_cleancheckout() { git_check_cleancheckout || die "Vous avez des modifications locales. Enregistrez ces modifications avant de continuer" } +function __git_check_can_ff() { + [ "$1" == "$(git merge-base "$1" "$2")" ] +} +function git_is_ancestor() { + # vérifier que la branche $1 est un ancêtre direct de la branche $2, qui + # vaut par défaut remotes/origin/$1 + # note: cette fonction retourne vrai si $1 et $2 identifient le même commit + local b="$1" o="${2:-remotes/origin/$1}" + b="$(git rev-parse --verify "$b")" || return 1 + o="$(git rev-parse --verify "$o")" || return 1 + __git_check_can_ff "$b" "$o" +} +function git_should_ff() { + # vérifier si la branche $1 devrait être fast-forwardée à partir de la + # branche d'origine $2, qui vaut par défaut remotes/origin/$1 + # note: cette fonction est similaire à git_is_ancestor(), mais retourne + # false si $1 et $2 identifient le même commit + local b="$1" o="${2:-remotes/origin/$1}" + b="$(git rev-parse --verify "$b")" || return 1 + o="$(git rev-parse --verify "$o")" || return 1 + [ "$b" != "$o" ] || return 1 + __git_check_can_ff "$b" "$o" +} +function git_should_push() { + # vérifier si la branche $1 devrait être poussée vers la branche de même nom + # dans l'origine $2(=origin), parce que l'origin peut-être fast-forwardée à + # partir de cette branche. + git_should_ff "remotes/${2:-origin}/$1" "$1" +} + +function git_is_merged() { + # vérifier que les branches $1 et $2 ont un ancêtre commun, et que la + # branche $1 a été complètement fusionnée dans la branche destination $2 + local b="$1" d="$2" + b="$(git rev-parse --verify "$b")" || return 1 + d="$(git rev-parse --verify "$d")" || return 1 + [ -n "$(git merge-base "$b" "$d")" ] || return 1 + [ -z "$(git rev-list "$d..$b")" ] +} + # fonctions pour git annex function git_annex_initial() { # sur le dépôt $1 fraichement cloné, vérifier s'il faut faire git annex From e3e3bbb9eda2f99dec34a93ef98b3216f9715cbb Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 27 Mar 2015 00:15:40 +0400 Subject: [PATCH 39/71] ajout de git_fast_forward --- lib/ulib/vcs | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index a1b044c..54a72e1 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -600,28 +600,31 @@ function git_ensure_cleancheckout() { git_check_cleancheckout || die "Vous avez des modifications locales. Enregistrez ces modifications avant de continuer" } +function __git_init_ff() { + o="${3:-origin}" + b="$1" s="${2:-remotes/$o/$1}" + b="$(git rev-parse --verify "$b")" || return 1 + s="$(git rev-parse --verify "$s")" || return 1 + return 0 +} function __git_check_can_ff() { [ "$1" == "$(git merge-base "$1" "$2")" ] } function git_is_ancestor() { # vérifier que la branche $1 est un ancêtre direct de la branche $2, qui - # vaut par défaut remotes/origin/$1 + # vaut par défaut remotes/${3:-origin}/$1 # note: cette fonction retourne vrai si $1 et $2 identifient le même commit - local b="$1" o="${2:-remotes/origin/$1}" - b="$(git rev-parse --verify "$b")" || return 1 - o="$(git rev-parse --verify "$o")" || return 1 - __git_check_can_ff "$b" "$o" + local o b s; __git_init_ff "$@" || return + __git_can_ff "$b" "$s" } function git_should_ff() { # vérifier si la branche $1 devrait être fast-forwardée à partir de la - # branche d'origine $2, qui vaut par défaut remotes/origin/$1 + # branche d'origine $2, qui vaut par défaut remotes/${3:-origin}/$1 # note: cette fonction est similaire à git_is_ancestor(), mais retourne # false si $1 et $2 identifient le même commit - local b="$1" o="${2:-remotes/origin/$1}" - b="$(git rev-parse --verify "$b")" || return 1 - o="$(git rev-parse --verify "$o")" || return 1 - [ "$b" != "$o" ] || return 1 - __git_check_can_ff "$b" "$o" + local o b s; __git_init_ff "$@" || return + [ "$b" != "$s" ] || return 1 + __git_can_ff "$b" "$o" } function git_should_push() { # vérifier si la branche $1 devrait être poussée vers la branche de même nom @@ -629,6 +632,17 @@ function git_should_push() { # partir de cette branche. git_should_ff "remotes/${2:-origin}/$1" "$1" } +function git_fast_forward() { + # vérifier que la branche courante est bien $1, puis tester s'il faut la + # fast-forwarder à partir de l'origine $2, puis le faire si c'est + # nécessaire. la branche d'origine $2 vaut par défaut remotes/origin/$1 + local o b s; __git_init_ff "$@" || return + [ "$b" != "$s" ] || return 1 + local head="$(git rev-parse HEAD)" + [ "$head" == "$b" ] || return 1 + __git_can_ff "$b" "$s" || return 1 + git merge --ff-only "$s" +} function git_is_merged() { # vérifier que les branches $1 et $2 ont un ancêtre commun, et que la From 743e17ba0fd79124d7f53f5b5793dcd23886c99f Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 27 Mar 2015 00:16:03 +0400 Subject: [PATCH 40/71] fast-forwarder automatiquement la branche vers laquelle on bascule --- pdev | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pdev b/pdev index 0cfa33d..9f9dafd 100755 --- a/pdev +++ b/pdev @@ -123,13 +123,15 @@ if [ "$action" == branch ]; then if [ -z "$UTOOLS_VCS_OFFLINE" ]; then git_track_branch "$feature" "$origin" fi + git_fast_forward "$feature" "" "$origin" exit 0 fi # Créer/basculer vers une feature branch git_ensure_cleancheckout + r=0 if git_have_branch "$feature"; then - git checkout "$feature" + git checkout "$feature" || r=$? else estepn "\ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_NORMALE} @@ -138,7 +140,11 @@ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_N git_ensure_branch "$feature" "$source" "$origin" [ $? -eq 2 ] && die "Impossible de créer la branche $feature. Veuillez vérifier que la branche $source existe" - git checkout "$feature" + git checkout "$feature" || r=$? + fi + if [ "$r" -eq 0 ]; then + # éventuellement fast-forwarder automatiquement + git_fast_forward "$feature" "" "$origin" fi exit $? From c3683a50cd79edae94e11a4c00f545e375ab763a Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 27 Mar 2015 00:17:29 +0400 Subject: [PATCH 41/71] bug --- lib/ulib/vcs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index 54a72e1..8bfc336 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -607,7 +607,7 @@ function __git_init_ff() { s="$(git rev-parse --verify "$s")" || return 1 return 0 } -function __git_check_can_ff() { +function __git_can_ff() { [ "$1" == "$(git merge-base "$1" "$2")" ] } function git_is_ancestor() { From 7c67a7f37aca0f8cd205e25269108710727ba5a7 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:04:57 +0400 Subject: [PATCH 42/71] tenir compte des branches potentielles --- lib/completion.d/ptools | 7 ++++++- lib/ulib/ptools | 9 ++++++--- lib/ulib/vcs | 10 ++++++++++ pdev | 2 +- prel | 20 ++++++++++---------- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/lib/completion.d/ptools b/lib/completion.d/ptools index dd979a4..7b652ef 100644 --- a/lib/completion.d/ptools +++ b/lib/completion.d/ptools @@ -1,7 +1,12 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 function __pdev_branches() { - git for-each-ref --format='%(refname:short)' refs/heads | + local prefix=origin/ + { + git for-each-ref refs/heads/ --format='%(refname:short)' + git for-each-ref "refs/remotes/$prefix" --format='%(refname:short)' | grep -F "$prefix" | cut -c $((${#prefix} + 1))- + } | csort -u | + grep -vF HEAD | grep -vF master | grep -v '^release-' | grep -v '^hotfix-' diff --git a/lib/ulib/ptools b/lib/ulib/ptools index 8b0db09..1083dce 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -69,13 +69,16 @@ function is_hotfix_branch() { is_any_branch "$1" hotfix; } function is_feature_branch() { is_any_branch "$1" feature; } function list_release_branches() { - git_list_branches | grep '^release-' + local p="$1" + git_list_${p:+p}branches | grep '^release-' } function list_hotfix_branches() { - git_list_branches | grep '^hotfix-' + local p="$1" + git_list_${p:+p}branches | grep '^hotfix-' } function list_feature_branches() { - git_list_branches | + local p="$1" + git_list_${p:+p}branches | grep -vF master | grep -vF develop | grep -v '^release-' | diff --git a/lib/ulib/vcs b/lib/ulib/vcs index 8bfc336..075f1e4 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -548,6 +548,16 @@ function git_list_branches() { function git_list_rbranches() { git for-each-ref "refs/remotes/${1:-origin}/" --format='%(refname:short)' | csort } +function git_list_pbranches() { + # lister les branches locales et celles qui existent dans l'origine + # $1(=origin) et qui pourraient devenir une branche locale avec la commande + # git checkout + local prefix="${1:-origin}/" + { + git for-each-ref refs/heads/ --format='%(refname:short)' + git for-each-ref "refs/remotes/$prefix" --format='%(refname:short)' | grep -F "$prefix" | cut -c $((${#prefix} + 1))- + } | grep -vF HEAD | csort -u +} function git_have_branch() { git_list_branches | grep -qF "$1" } diff --git a/pdev b/pdev index 9f9dafd..7ef5f51 100755 --- a/pdev +++ b/pdev @@ -103,7 +103,7 @@ if [ "$action" == branch ]; then source="${2:-develop}" if [ -z "$feature" ]; then - setx -a branches=list_feature_branches + setx -a branches=list_feature_branches p if [ ${#branches[*]} -eq 0 ]; then # En l'absence de feature branch, basculer sur develop diff --git a/prel b/prel index 3527c85..8183e46 100755 --- a/prel +++ b/prel @@ -162,7 +162,7 @@ if [ "$action" == update ]; then else # sinon, prendre une décision en fonction des branches de release # qui existent déjà - setx -a branches=list_release_branches + setx -a branches=list_release_branches p if [ ${#branches[*]} -eq 0 ]; then # en l'absence de branche de release, proposer d'en créer une incversion=menu @@ -175,7 +175,7 @@ if [ "$action" == update ]; then default_branch="$branch" array_contains branches "$default_branch" || default_branch="${branches[0]}" simple_menu release branches -d "$default_branch" \ - -t "Basculer vers une release branch" \ + -t "Basculer vers une branche de release" \ -m "Veuillez choisir la branche vers laquelle basculer" fi fi @@ -188,7 +188,7 @@ if [ "$action" == update ]; then release="release-$minorv" branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master) simple_menu release branches \ - -t "Basculer vers une nouvelle release branch" \ + -t "Basculer vers une nouvelle branche de release" \ -m "Veuillez choisir la branche à créer" ;; major) @@ -220,7 +220,7 @@ if [ "$action" == checkout ]; then source="${2:-develop}" if [ -z "$release" ]; then - setx -a branches=list_release_branches + setx -a branches=list_release_branches p if [ ${#branches[*]} -eq 0 ]; then # en l'absence de branche de release, basculer sur master @@ -234,7 +234,7 @@ if [ "$action" == checkout ]; then default_branch="$branch" array_contains branches "$default_branch" || default_branch="${branches[0]}" simple_menu release branches -d "$default_branch" \ - -t "Basculer vers une release branch" \ + -t "Basculer vers une branche de release" \ -m "Veuillez choisir la branche vers laquelle basculer" fi fi @@ -249,13 +249,13 @@ if [ "$action" == checkout ]; then # Créer/basculer vers une release branch git_ensure_cleancheckout - is_any_branch "$release" master release || die "$release: ce n'est pas une release branch" + is_any_branch "$release" master release || die "$release: ce n'est pas une branche de release" r=0 if git_have_branch "$release"; then git checkout "$release"; r=$? else estepn "\ -Vous allez créer la nouvelle release branch ${COULEUR_VERTE}$release${COULEUR_NORMALE} +Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULEUR_NORMALE} à partir de la branche source ${COULEUR_BLEUE}$source${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die @@ -285,7 +285,7 @@ setb have_release_branches=[ ${#branches[*]} -gt 0 ] release="$1" if [ -n "$release" ]; then if [ -n "$have_release_branches" ]; then - is_release_branch "$release" || die "$release: ce n'est pas une release branch" + is_release_branch "$release" || die "$release: ce n'est pas une branche de release" elif ! is_develop_branch "$release"; then die "Aucune branche de release n'existe, vous devez fusionner à partir de develop" fi @@ -299,7 +299,7 @@ if [ "$action" == merge ]; then if [ -z "$release" ]; then if [ ${#branches[*]} -eq 0 ]; then - ewarn "Aucune release branch n'a été préparée." + ewarn "Aucune branche de release n'a été préparée." ewarn "La branche develop sera fusionnée directement dans master." release=develop confirm=-y @@ -310,7 +310,7 @@ if [ "$action" == merge ]; then default_release="$branch" array_contains branches "$default_release" || default_release="${branches[0]}" simple_menu release branches -d "$default_release" \ - -t "Choix de la release branch" \ + -t "Choix de la branche de release" \ -m "Veuillez choisir la branche" fi fi From 881bcde1e3dd009f1cc563325b02f0f3eff3452e Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:11:24 +0400 Subject: [PATCH 43/71] tenir compte de la valeur de origin --- lib/ulib/ptools | 12 ++++++------ pdev | 2 +- prel | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/ulib/ptools b/lib/ulib/ptools index 1083dce..d1f62fb 100644 --- a/lib/ulib/ptools +++ b/lib/ulib/ptools @@ -69,16 +69,16 @@ function is_hotfix_branch() { is_any_branch "$1" hotfix; } function is_feature_branch() { is_any_branch "$1" feature; } function list_release_branches() { - local p="$1" - git_list_${p:+p}branches | grep '^release-' + local origin="$1" + git_list_${origin:+p}branches "$origin" | grep '^release-' } function list_hotfix_branches() { - local p="$1" - git_list_${p:+p}branches | grep '^hotfix-' + local origin="$1" + git_list_${origin:+p}branches "$origin" | grep '^hotfix-' } function list_feature_branches() { - local p="$1" - git_list_${p:+p}branches | + local origin="$1" + git_list_${origin:+p}branches "$origin" | grep -vF master | grep -vF develop | grep -v '^release-' | diff --git a/pdev b/pdev index 7ef5f51..03309ae 100755 --- a/pdev +++ b/pdev @@ -103,7 +103,7 @@ if [ "$action" == branch ]; then source="${2:-develop}" if [ -z "$feature" ]; then - setx -a branches=list_feature_branches p + setx -a branches=list_feature_branches "$origin" if [ ${#branches[*]} -eq 0 ]; then # En l'absence de feature branch, basculer sur develop diff --git a/prel b/prel index 8183e46..86a37a0 100755 --- a/prel +++ b/prel @@ -162,7 +162,7 @@ if [ "$action" == update ]; then else # sinon, prendre une décision en fonction des branches de release # qui existent déjà - setx -a branches=list_release_branches p + setx -a branches=list_release_branches "$origin" if [ ${#branches[*]} -eq 0 ]; then # en l'absence de branche de release, proposer d'en créer une incversion=menu @@ -220,7 +220,7 @@ if [ "$action" == checkout ]; then source="${2:-develop}" if [ -z "$release" ]; then - setx -a branches=list_release_branches p + setx -a branches=list_release_branches "$origin" if [ ${#branches[*]} -eq 0 ]; then # en l'absence de branche de release, basculer sur master From 89be42e82ea6b9289a716240ade4e66c3190a17b Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:16:04 +0400 Subject: [PATCH 44/71] ne pas utiliser csort --- lib/completion.d/ptools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/completion.d/ptools b/lib/completion.d/ptools index 7b652ef..085c636 100644 --- a/lib/completion.d/ptools +++ b/lib/completion.d/ptools @@ -5,7 +5,7 @@ function __pdev_branches() { { git for-each-ref refs/heads/ --format='%(refname:short)' git for-each-ref "refs/remotes/$prefix" --format='%(refname:short)' | grep -F "$prefix" | cut -c $((${#prefix} + 1))- - } | csort -u | + } | LANG=C sort -u | grep -vF HEAD | grep -vF master | grep -v '^release-' | From d8a3ed4bfce4cb453336901ad5a4e66ee22c6932 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:22:35 +0400 Subject: [PATCH 45/71] =?UTF-8?q?checkout=20par=20d=C3=A9faut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prel | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prel b/prel index 86a37a0..0795ef0 100755 --- a/prel +++ b/prel @@ -139,6 +139,9 @@ if [ "$action" == auto ]; then action=merge elif [ -n "$checkout" ]; then action=checkout + else + # checkout par défaut + action=checkout fi fi From f64117c176fcdf71eb01d0483508be0cb49ce0be Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:18:35 +0400 Subject: [PATCH 46/71] cosmetic --- lib/completion.d/nutools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/completion.d/nutools b/lib/completion.d/nutools index a96851e..f8645e7 100644 --- a/lib/completion.d/nutools +++ b/lib/completion.d/nutools @@ -8,7 +8,7 @@ function __nutools_host_completion() { fi } complete -F __nutools_host_completion -o default ruinst runs rruns - + if __bash_completion_module_enabled ssh; then shopt -u hostcomplete complete -F _ssh ussh cssh From ffa91952c2b7e5eacd9c38ef79c29c7bad004e00 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 28 Mar 2015 01:30:47 +0400 Subject: [PATCH 47/71] fast-forwarder si possible --- pdev | 1 + prel | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/pdev b/pdev index 03309ae..4c2fc30 100755 --- a/pdev +++ b/pdev @@ -129,6 +129,7 @@ if [ "$action" == branch ]; then # Créer/basculer vers une feature branch git_ensure_cleancheckout + is_any_branch "$feature" develop feature || die "$release: ce n'est pas une feature branch" r=0 if git_have_branch "$feature"; then git checkout "$feature" || r=$? diff --git a/prel b/prel index 0795ef0..466b8bc 100755 --- a/prel +++ b/prel @@ -247,6 +247,7 @@ if [ "$action" == checkout ]; then if [ -z "$UTOOLS_VCS_OFFLINE" ]; then git_track_branch "$release" "$origin" fi + git_fast_forward "$release" "" "$origin" exit 0 fi @@ -273,6 +274,10 @@ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULE fi fi fi + if [ "$r" -eq 0 ]; then + # éventuellement fast-forwarder automatiquement + git_fast_forward "$release" "" "$origin" + fi if [ "$r" -eq 0 -a -n "$merge" ]; then set -- "$release" From 7ae9b48245ac98641e8f96c2598ab2789d8a970f Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 15:19:46 +0400 Subject: [PATCH 48/71] ajout de elinedots --- lib/ulib/base | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/ulib/base b/lib/ulib/base index 6edfd17..40c523d 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -3352,6 +3352,34 @@ function eend() { __tlevel="${__tlevel% }" fi } +function __elinedots() { + ebegin "$1" + local line + if show_debug; then + while read line; do + __edoto 1>&2 + __edotd "$line" 1>&2 + done + else + while read line; do + __edoto 1>&2 + done + fi + eend +} +function elinedots() { +# Afficher un message comme avec ebegin "$1", puis afficher un point '.' pour +# chaque ligne lue sur stdin. Cela permet de suivre une opération. En mode +# DEBUG, afficher la ligne affichée plutôt qu'un point. +# Si $2..$* sont spécifiés, lancer la commande et suivre sa sortie. Ainsi, +# 'elinedots msg cmd args' est un raccourci pour 'cmd args | elinedots msg' + local msg="$1"; shift + if [ $# -gt 0 ]; then + "$@" | __elinedots "$msg" + else + __elinedots "$msg" + fi +} function ask_yesno() { # Afficher le message $1 suivi de [oN] ou [On] suivant que $2 vaut O ou N, puis # lire la réponse. Retourner 0 si la réponse est vrai, 1 sinon. From 3e514d53f88de627a59cfaec576065739406bde3 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 15:27:31 +0400 Subject: [PATCH 49/71] maj doc --- lib/ulib/vcs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index 075f1e4..aabd0db 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -644,7 +644,7 @@ function git_should_push() { } function git_fast_forward() { # vérifier que la branche courante est bien $1, puis tester s'il faut la - # fast-forwarder à partir de l'origine $2, puis le faire si c'est + # fast-forwarder à partir de la branche d'origine $2, puis le faire si c'est # nécessaire. la branche d'origine $2 vaut par défaut remotes/origin/$1 local o b s; __git_init_ff "$@" || return [ "$b" != "$s" ] || return 1 From 09c59d86504aeca94007ecd8c486b6511b38d29f Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 15:45:30 +0400 Subject: [PATCH 50/71] ne pas afficher les erreurs --- lib/ulib/vcs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ulib/vcs b/lib/ulib/vcs index aabd0db..c09a66e 100644 --- a/lib/ulib/vcs +++ b/lib/ulib/vcs @@ -613,8 +613,8 @@ function git_ensure_cleancheckout() { function __git_init_ff() { o="${3:-origin}" b="$1" s="${2:-remotes/$o/$1}" - b="$(git rev-parse --verify "$b")" || return 1 - s="$(git rev-parse --verify "$s")" || return 1 + b="$(git rev-parse --verify --quiet "$b")" || return 1 + s="$(git rev-parse --verify --quiet "$s")" || return 1 return 0 } function __git_can_ff() { @@ -658,8 +658,8 @@ function git_is_merged() { # vérifier que les branches $1 et $2 ont un ancêtre commun, et que la # branche $1 a été complètement fusionnée dans la branche destination $2 local b="$1" d="$2" - b="$(git rev-parse --verify "$b")" || return 1 - d="$(git rev-parse --verify "$d")" || return 1 + b="$(git rev-parse --verify --quiet "$b")" || return 1 + d="$(git rev-parse --verify --quiet "$d")" || return 1 [ -n "$(git merge-base "$b" "$d")" ] || return 1 [ -z "$(git rev-list "$d..$b")" ] } From da96f728118de077098215a6348eda87be64560a Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 16:06:05 +0400 Subject: [PATCH 51/71] =?UTF-8?q?ajout=20d'un=20tag=20apr=C3=A8s=20fusion?= =?UTF-8?q?=20de=20la=20branche=20dans=20master?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prel | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/prel b/prel index 466b8bc..49a8ee6 100755 --- a/prel +++ b/prel @@ -329,6 +329,11 @@ if [ "$action" == merge ]; then git checkout master git merge "$release" -m "Intégration de la branche $release" --no-ff || die + if [ -n "$newver" ]; then + estep "Création du tag $newver" + git tag "$newver" || die + fi + if [ "$release" != develop ]; then estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop @@ -343,9 +348,9 @@ if [ "$action" == merge ]; then if [ -z "$UTOOLS_VCS_OFFLINE" ]; then estepi "Suppression de la branche distante" git push "$origin" ":$release" - else + elif git_have_rbranch "$release" "$origin"; then eimportant "\ -La branche $release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. +La branche $origin/$release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer. Veuillez le faire manuellement avec la commande suivante: $(qvals git push "$origin" ":$release")" fi From 523d3f1c6c3cb13bda035ad48c6396bd15769090 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:06:56 +0400 Subject: [PATCH 52/71] =?UTF-8?q?doc=20pour=20nouvelle=20fonctionnalit?= =?UTF-8?q?=C3=A9=20=C3=A0=20impl=C3=A9menter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdev | 3 +++ prel | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/pdev b/pdev index 4c2fc30..06e2f30 100755 --- a/pdev +++ b/pdev @@ -55,6 +55,9 @@ OPTIONS -k, --keep Avec l'option -m, ne pas supprimer une feature branch après l'avoir fusionnée dans develop. + -d, --delete + Supprimer une feature branch, à condition qu'elle aie déjà été + entièrement fusionnée dans la branch develop -l, --log -d, --diff diff --git a/prel b/prel index 49a8ee6..ff4a19c 100755 --- a/prel +++ b/prel @@ -93,6 +93,10 @@ OPTIONS S'il n'existe pas de branche de release, proposer de fusionner les modifications de la branche develop dans la branche master, sans préparer de branche de release au préalable. + -d, --delete + Supprimer une branche de release, à condition qu'elle aie déjà été + entièrement fusionnée dans la branch master + -l, --log Afficher les modifications actuellement effectuée dans la branche de release par rapport à develop. From 38f04ff0468d39070086c0f560d383da22db0298 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 26 Mar 2015 20:08:35 +0400 Subject: [PATCH 53/71] maj doc --- pdev | 3 +++ prel | 3 +++ 2 files changed, 6 insertions(+) diff --git a/pdev b/pdev index 06e2f30..308f2d9 100755 --- a/pdev +++ b/pdev @@ -58,6 +58,9 @@ OPTIONS -d, --delete Supprimer une feature branch, à condition qu'elle aie déjà été entièrement fusionnée dans la branch develop + --force-delete + Supprimer une feature branch, même si elle n'a pas encore été fusionnée + dans la branche develop -l, --log -d, --diff diff --git a/prel b/prel index ff4a19c..bc619ac 100755 --- a/prel +++ b/prel @@ -96,6 +96,9 @@ OPTIONS -d, --delete Supprimer une branche de release, à condition qu'elle aie déjà été entièrement fusionnée dans la branch master + --force-delete + Supprimer une branche de release, même si elle n'a pas encore été + fusionnée dans la branche master -l, --log Afficher les modifications actuellement effectuée dans la branche de From dd2a712b863721e01ed94cb88d0cb6ce32c19c62 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 17:44:21 +0400 Subject: [PATCH 54/71] ajout de -d et --force-delete --- pdev | 56 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/pdev b/pdev index 308f2d9..7987d0c 100755 --- a/pdev +++ b/pdev @@ -77,6 +77,7 @@ projdir= origin=origin action=branch merge_delete=1 +force_delete= log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -87,6 +88,8 @@ parse_opts "${PRETTYOPTS[@]}" \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ -k,--keep merge_delete= \ + -d,--delete action=delete \ + --force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -103,7 +106,6 @@ if ! git_have_branch develop; then fi setx branch=git_get_branch - if [ "$action" == branch ]; then feature="$1" source="${2:-develop}" @@ -154,6 +156,9 @@ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_N git_fast_forward "$feature" "" "$origin" fi + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch + exit $? fi @@ -185,27 +190,44 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$feature${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die - git checkout develop + git checkout develop || die git merge "$feature" -m "Intégration de la feature branch $feature" --no-ff || die - if [ -n "$merge_delete" ]; then - estepi "Suppression de la branche locale" - git branch -D "$feature" + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch - if git_have_remote "$origin"; then - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - estepi "Suppression de la branche distante" - git push "$origin" ":$feature" - else - eimportant "\ -La branche $feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer dans le dépôt distant. -Veuillez le faire manuellement avec la commande suivante: - $(quoted_args git push "$origin" ":$feature")" - fi - fi + [ -n "$merge_delete" ] && action=delete +fi + +if [ "$action" == delete ]; then + if [ -z "$force_delete" ]; then + # vérifier que la branche a été fusionnée + git_is_merged "$feature" develop || die "Refus de supprimer la branche $feature: elle n'a pas été fusionnée dans develop" fi -elif [ "$action" == diff ]; then + if [ "$branch" == "$feature" ]; then + # si on est sur la branche en question, en sortir pour pouvoir la + # supprimer + git checkout develop || die + fi + + estepi "Suppression de la branche locale" + git branch -D "$feature" + + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$feature" + elif git_have_rbranch "$feature" "$origin"; then + eimportant "\ +La branche $origin/$feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer. +Veuillez le faire manuellement avec la commande suivante: + $(quoted_args git push "$origin" ":$feature")" + fi + fi +fi + +if [ "$action" == diff ]; then if [ -n "$log" ]; then if [ -n "$feature" ]; then git log ${diff:+-p} develop.."$feature" From 18bb5108807df29925fc93700d140114f39b01bd Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 17:46:31 +0400 Subject: [PATCH 55/71] =?UTF-8?q?supprimer=20l'option=20courte=20-d=20qui?= =?UTF-8?q?=20est=20d=C3=A9j=C3=A0=20utilis=C3=A9e=20pour=20diff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdev | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pdev b/pdev index 7987d0c..0ca4cc8 100755 --- a/pdev +++ b/pdev @@ -55,7 +55,7 @@ OPTIONS -k, --keep Avec l'option -m, ne pas supprimer une feature branch après l'avoir fusionnée dans develop. - -d, --delete + --delete Supprimer une feature branch, à condition qu'elle aie déjà été entièrement fusionnée dans la branch develop --force-delete @@ -88,7 +88,7 @@ parse_opts "${PRETTYOPTS[@]}" \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ -k,--keep merge_delete= \ - -d,--delete action=delete \ + --delete action=delete \ --force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @@ -165,7 +165,7 @@ fi feature="$1" if [ -n "$feature" ]; then is_feature_branch "$feature" || die "$feature: ce n'est pas une feature branch" - git_have_branch "$feature" || die "$feature: branche invalide" + git_have_branch "$feature" || die "$feature: branche introuvable" elif is_feature_branch "$branch"; then feature="$branch" fi From 5f6d5bb1eae94ac43386379f7d9585b9b2655f23 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 17:47:16 +0400 Subject: [PATCH 56/71] ajout des options courtes -z et -Z --- pdev | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pdev b/pdev index 0ca4cc8..a30e0de 100755 --- a/pdev +++ b/pdev @@ -55,10 +55,10 @@ OPTIONS -k, --keep Avec l'option -m, ne pas supprimer une feature branch après l'avoir fusionnée dans develop. - --delete + -z, --delete Supprimer une feature branch, à condition qu'elle aie déjà été entièrement fusionnée dans la branch develop - --force-delete + -Z, --force-delete Supprimer une feature branch, même si elle n'a pas encore été fusionnée dans la branche develop @@ -88,8 +88,8 @@ parse_opts "${PRETTYOPTS[@]}" \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ -k,--keep merge_delete= \ - --delete action=delete \ - --force-delete '$action=delete; force_delete=1' \ + -z,--delete action=delete \ + -Z,--force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" From 2f41de35b773f8e8eac6db5b47530584df186dbf Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 17:59:21 +0400 Subject: [PATCH 57/71] cosmetic --- pdev | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pdev b/pdev index a30e0de..e0239c7 100755 --- a/pdev +++ b/pdev @@ -156,9 +156,6 @@ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_N git_fast_forward "$feature" "" "$origin" fi - # mettre à jour la branche sur laquelle on se trouve - setx branch=git_get_branch - exit $? fi @@ -191,7 +188,7 @@ if [ "$action" == merge ]; then ask_yesno "Voulez-vous continuer?" O || die git checkout develop || die - git merge "$feature" -m "Intégration de la feature branch $feature" --no-ff || die + git merge "$feature" -m "Intégration de la branche $feature" --no-ff || die # mettre à jour la branche sur laquelle on se trouve setx branch=git_get_branch From 6c8e750d318bbb69d396bb2e37ec480c8bc30f81 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 17:59:47 +0400 Subject: [PATCH 58/71] =?UTF-8?q?impl=C3=A9mener=20-z=20et=20-Z?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prel | 59 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/prel b/prel index bc619ac..f45e032 100755 --- a/prel +++ b/prel @@ -93,10 +93,10 @@ OPTIONS S'il n'existe pas de branche de release, proposer de fusionner les modifications de la branche develop dans la branche master, sans préparer de branche de release au préalable. - -d, --delete + -z, --delete Supprimer une branche de release, à condition qu'elle aie déjà été entièrement fusionnée dans la branch master - --force-delete + -Z, --force-delete Supprimer une branche de release, même si elle n'a pas encore été fusionnée dans la branche master @@ -111,12 +111,13 @@ OPTIONS projdir= origin=origin action=auto -update= -merge= checkout= +update= incversion= pver_opts=() write=1 +merge= +force_delete= log= diff= parse_opts "${PRETTYOPTS[@]}" \ @@ -135,6 +136,8 @@ parse_opts "${PRETTYOPTS[@]}" \ -w,--write write=1 \ -n,--no-write write= \ -m,--merge merge=1 \ + -z,--delete action=delete \ + -Z,--force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -287,6 +290,9 @@ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULE fi if [ "$r" -eq 0 -a -n "$merge" ]; then + # mettre à jour la branche sur laquelle on se trouve + setx branch=git_get_branch + set -- "$release" action=merge else @@ -304,7 +310,7 @@ if [ -n "$release" ]; then elif ! is_develop_branch "$release"; then die "Aucune branche de release n'existe, vous devez fusionner à partir de develop" fi - git_have_branch "$release" || die "$release: branche invalide" + git_have_branch "$release" || die "$release: branche introuvable" elif is_release_branch "$branch"; then release="$branch" fi @@ -333,7 +339,7 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}master${COULEUR_NORMALE}" ask_yesno $confirm "Voulez-vous continuer?" O || die - git checkout master + git checkout master || die git merge "$release" -m "Intégration de la branche $release" --no-ff || die if [ -n "$newver" ]; then @@ -345,26 +351,45 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$release${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" git checkout develop git merge "$release" -m "Intégration de la branche $release" --no-ff || die + fi - git checkout master + # mettre à jour la branche sur laquelle on se trouve + git checkout master || die + setx branch=git_get_branch - estepi "Suppression de la branche locale" - git branch -D "$release" + [ -n "$merge_delete" ] && action=delete +fi - if git_have_remote "$origin"; then - if [ -z "$UTOOLS_VCS_OFFLINE" ]; then - estepi "Suppression de la branche distante" - git push "$origin" ":$release" - elif git_have_rbranch "$release" "$origin"; then - eimportant "\ +if [ "$action" == delete ]; then + if [ -z "$force_delete" ]; then + # vérifier que la branche a été fusionnée + git_is_merged "$release" master || die "Refus de supprimer la branche $release: elle n'a pas été fusionnée dans master" + git_is_merged "$release" develop || die "Refus de supprimer la branche $release: elle n'a pas été fusionnée dans develop" + fi + + if [ "$branch" == "$release" ]; then + # si on est sur la branche en question, en sortir pour pouvoir la + # supprimer + git checkout master || die + fi + + estepi "Suppression de la branche locale" + git branch -D "$release" + + if git_have_remote "$origin"; then + if [ -z "$UTOOLS_VCS_OFFLINE" ]; then + estepi "Suppression de la branche distante" + git push "$origin" ":$release" + elif git_have_rbranch "$release" "$origin"; then + eimportant "\ La branche $origin/$release n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer. Veuillez le faire manuellement avec la commande suivante: $(qvals git push "$origin" ":$release")" - fi fi fi +fi -elif [ "$action" == diff ]; then +if [ "$action" == diff ]; then if [ -n "$log" ]; then if [ -n "$release" ]; then git log ${diff:+-p} master.."$release" From 10152b4a3f89241b6e236f6c364323fd08425c69 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 31 Mar 2015 18:53:32 +0400 Subject: [PATCH 59/71] calcul de newver action delete --- prel | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/prel b/prel index f45e032..0a598dd 100755 --- a/prel +++ b/prel @@ -218,12 +218,6 @@ if [ "$action" == update ]; then ;; esac - if [ -z "$newver" ]; then - # le cas échéant, tenter de calculer la version en fonction de la - # release - [[ "$release" == release-* ]] && newver="${release#release-}" - fi - set -- "$release" "$1" action=checkout fi @@ -342,8 +336,13 @@ if [ "$action" == merge ]; then git checkout master || die git merge "$release" -m "Intégration de la branche $release" --no-ff || die + if [ -z "$newver" ]; then + # le cas échéant, tenter de calculer la version en fonction de la release + is_release_branch "$release" && newver="${release#release-}" + fi + if [ -n "$newver" ]; then - estep "Création du tag $newver" + estepn "Création du tag $newver" git tag "$newver" || die fi @@ -357,7 +356,7 @@ if [ "$action" == merge ]; then git checkout master || die setx branch=git_get_branch - [ -n "$merge_delete" ] && action=delete + action=delete fi if [ "$action" == delete ]; then From 5b0715efe4ed80796b0dce3926b0ebd90bb494a1 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 1 Apr 2015 08:30:28 +0400 Subject: [PATCH 60/71] =?UTF-8?q?v=C3=A9rifier=20la=20pr=C3=A9sence=20dans?= =?UTF-8?q?=20le=20d=C3=A9p=C3=B4t=20distant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pdev | 2 ++ prel | 2 ++ 2 files changed, 4 insertions(+) diff --git a/pdev b/pdev index e0239c7..fb0561b 100755 --- a/pdev +++ b/pdev @@ -141,6 +141,8 @@ if [ "$action" == branch ]; then r=0 if git_have_branch "$feature"; then git checkout "$feature" || r=$? + elif git_have_rbranch "$feature" "$origin"; then + git checkout "$feature" || r=$? else estepn "\ Vous allez créer la nouvelle feature branch ${COULEUR_VERTE}$feature${COULEUR_NORMALE} diff --git a/prel b/prel index 0a598dd..7ca7073 100755 --- a/prel +++ b/prel @@ -261,6 +261,8 @@ if [ "$action" == checkout ]; then r=0 if git_have_branch "$release"; then git checkout "$release"; r=$? + elif git_have_rbranch "$release"; then + git checkout "$release"; r=$? else estepn "\ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULEUR_NORMALE} From fc35a053669cf063cf69a5638dfc1144ce25b38e Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 1 Apr 2015 09:08:35 +0400 Subject: [PATCH 61/71] inclure la liste des modifications dans le log --- pdev | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pdev b/pdev index fb0561b..1476bb1 100755 --- a/pdev +++ b/pdev @@ -189,8 +189,15 @@ if [ "$action" == merge ]; then estepn "Intégration ${COULEUR_VERTE}$feature${COULEUR_NORMALE} --> ${COULEUR_BLEUE}develop${COULEUR_NORMALE}" ask_yesno "Voulez-vous continuer?" O || die + # calculer la suite des modifications + mergemsg="Intégration de la branche $feature" + setx mergebase=git merge-base develop "$feature" + setx modifs=git log --oneline "$mergebase..$feature" + [ -n "$modifs" ] && mergemsg="$mergemsg +$modifs" + git checkout develop || die - git merge "$feature" -m "Intégration de la branche $feature" --no-ff || die + git merge "$feature" -m "$mergemsg" --no-ff || die # mettre à jour la branche sur laquelle on se trouve setx branch=git_get_branch From 2bc314c85aa5ba2e2b63a0d349539820b1243244 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 1 Apr 2015 10:13:59 +0400 Subject: [PATCH 62/71] ajout de --merge-log supprimer les options courtes -z et -Z --- pdev | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pdev b/pdev index 1476bb1..63a2924 100755 --- a/pdev +++ b/pdev @@ -52,13 +52,16 @@ OPTIONS -m, --merge Si la branche actuelle est une feature branch, la merger dans develop puis la supprimer. Puis basculer sur la branche develop. + --merge-log + Ajouter un résumé des modifications sur la feature branch dans le + message du merge -k, --keep Avec l'option -m, ne pas supprimer une feature branch après l'avoir fusionnée dans develop. - -z, --delete + --delete Supprimer une feature branch, à condition qu'elle aie déjà été entièrement fusionnée dans la branch develop - -Z, --force-delete + --force-delete Supprimer une feature branch, même si elle n'a pas encore été fusionnée dans la branche develop @@ -76,6 +79,7 @@ OPTIONS projdir= origin=origin action=branch +merge_log= merge_delete=1 force_delete= log= @@ -87,9 +91,10 @@ parse_opts "${PRETTYOPTS[@]}" \ -o,--offline UTOOLS_VCS_OFFLINE=1 \ --online UTOOLS_VCS_OFFLINE= \ -m,--merge action=merge \ + --merge-log merge_log=1 \ -k,--keep merge_delete= \ - -z,--delete action=delete \ - -Z,--force-delete '$action=delete; force_delete=1' \ + --delete action=delete \ + --force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -191,10 +196,12 @@ if [ "$action" == merge ]; then # calculer la suite des modifications mergemsg="Intégration de la branche $feature" - setx mergebase=git merge-base develop "$feature" - setx modifs=git log --oneline "$mergebase..$feature" - [ -n "$modifs" ] && mergemsg="$mergemsg + if [ -n "$merge_log" ]; then + setx mergebase=git merge-base develop "$feature" + setx modifs=git log --oneline "$mergebase..$feature" + [ -n "$modifs" ] && mergemsg="$mergemsg $modifs" + fi git checkout develop || die git merge "$feature" -m "$mergemsg" --no-ff || die From ce050dbaae0063ba0a7690bb3b658ea67cb0f267 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 1 Apr 2015 10:14:31 +0400 Subject: [PATCH 63/71] =?UTF-8?q?ajout=20d'un=20changelog=20possibilit?= =?UTF-8?q?=C3=A9=20d'=C3=A9diter=20le=20changelog=20avec=20-e=20supprimer?= =?UTF-8?q?=20les=20options=20courtes=20-z=20et=20-Z?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prel | 55 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/prel b/prel index 7ca7073..8bda889 100755 --- a/prel +++ b/prel @@ -85,6 +85,11 @@ OPTIONS Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour du numéro de version doit être faite par manière particulière. + -e, --edit + Editer le fichier CHANGES.txt autogénéré par -u -w + Cette option est surtout utile si -m est utilisé avec -u, pour donner la + possibilité de corriger la liste des modifications avant leur + enregistrement définitif. -m, --merge Si la branche actuelle est une branche de release, ou s'il existe une @@ -93,10 +98,10 @@ OPTIONS S'il n'existe pas de branche de release, proposer de fusionner les modifications de la branche develop dans la branche master, sans préparer de branche de release au préalable. - -z, --delete + --delete Supprimer une branche de release, à condition qu'elle aie déjà été entièrement fusionnée dans la branch master - -Z, --force-delete + --force-delete Supprimer une branche de release, même si elle n'a pas encore été fusionnée dans la branche master @@ -116,6 +121,7 @@ update= incversion= pver_opts=() write=1 +edit_changes= merge= force_delete= log= @@ -135,9 +141,10 @@ parse_opts "${PRETTYOPTS[@]}" \ -v: '$update=1; add@ pver_opts' \ -w,--write write=1 \ -n,--no-write write= \ + -e,--edit edit_changes=1 \ -m,--merge merge=1 \ - -z,--delete action=delete \ - -Z,--force-delete '$action=delete; force_delete=1' \ + --delete action=delete \ + --force-delete '$action=delete; force_delete=1' \ -l,--log '$action=diff; log=1' \ -d,--diff '$action=diff; diff=1' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" @@ -273,11 +280,41 @@ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULE [ $? -eq 2 ] && die "Impossible de créer la branche $release. Veuillez vérifier que la branche $source existe" git checkout "$release"; r=$? - if [ "$r" -eq 0 -a -n "$newver" -a -n "$write" ]; then - if pver -uv "$newver"; then - git add -A - git commit -m "Init version $newver" + if [ -z "$newver" ]; then + # le cas échéant, tenter de calculer la version en fonction de la release + is_release_branch "$release" && newver="${release#release-}" + fi + + if [ "$r" -eq 0 -a -n "$write" ]; then + commitmsg="Init changelog" + if [ -n "$newver" ]; then + pver -uv "$newver" && commitmsg="Init changelog & version $newver" fi + + changelog="## Version $release du $(date +%d/%m/%Y-%H:%M)" + setx mergebase=git merge-base master "$release" + setxp modifs=git log --oneline "$mergebase..$release" // grep -v "Intégration de la branche release-" + [ -n "$modifs" ] && changelog="$changelog + +$modifs" + + ac_set_tmpfile tmpchanges + echo "$changelog" >>"$tmpchanges" + + if [ -n "$edit_changes" ]; then + estep "Lancement d'un éditeur pour vérifier la liste des modifications" + "${EDITOR:-vi}" "$tmpchanges" + fi + + if [ -f CHANGES.txt ]; then + echo >>"$tmpchanges" + cat CHANGES.txt >>"$tmpchanges" + fi + cat "$tmpchanges" >CHANGES.txt + ac_clean "$tmpchanges" + + git add -A + git commit -m "$commitmsg" fi fi if [ "$r" -eq 0 ]; then @@ -345,7 +382,7 @@ if [ "$action" == merge ]; then if [ -n "$newver" ]; then estepn "Création du tag $newver" - git tag "$newver" || die + git tag --force "$newver" || die fi if [ "$release" != develop ]; then From cd928328a95f28dd7b33909b3611715d25c74228 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 1 Apr 2015 12:34:02 +0400 Subject: [PATCH 64/71] ne pas supprimer la branche develop --- prel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prel b/prel index 8bda889..baae0c2 100755 --- a/prel +++ b/prel @@ -398,7 +398,7 @@ if [ "$action" == merge ]; then action=delete fi -if [ "$action" == delete ]; then +if [ "$action" == delete -a "$release" != develop ]; then if [ -z "$force_delete" ]; then # vérifier que la branche a été fusionnée git_is_merged "$release" master || die "Refus de supprimer la branche $release: elle n'a pas été fusionnée dans master" From 55893145dc8bd2d3d834368ded3675219d8b7e9e Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sun, 12 Apr 2015 12:30:12 +0400 Subject: [PATCH 65/71] bug --- prel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prel b/prel index baae0c2..b91f5ea 100755 --- a/prel +++ b/prel @@ -204,7 +204,7 @@ if [ "$action" == update ]; then menu) setx majorv=pver -s "$oldver" -ux "${pver_opts[@]}" setx minorv=pver -s "$oldver" -uz "${pver_opts[@]}" - setx patchlevelv=pver -g "$oldver" -up "${pver_opts[@]}" + setx patchlevelv=pver -s "$oldver" -up "${pver_opts[@]}" release="release-$minorv" branches=("release-$majorv" "release-$minorv" "release-$patchlevelv" master) simple_menu release branches \ From 6258a6ba76f61a863ea6f8add88c8d93369cd1bd Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sun, 12 Apr 2015 12:45:49 +0400 Subject: [PATCH 66/71] utiliser la version au lieu de la release --- prel | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/prel b/prel index b91f5ea..d7e2841 100755 --- a/prel +++ b/prel @@ -210,6 +210,7 @@ if [ "$action" == update ]; then simple_menu release branches \ -t "Basculer vers une nouvelle branche de release" \ -m "Veuillez choisir la branche à créer" + [ "$release" != master ] && newver="${release#release-}" ;; major) setx newver=pver -s "$oldver" -ux "${pver_opts[@]}" @@ -291,7 +292,10 @@ Vous allez créer la nouvelle branche de release ${COULEUR_VERTE}$release${COULE pver -uv "$newver" && commitmsg="Init changelog & version $newver" fi - changelog="## Version $release du $(date +%d/%m/%Y-%H:%M)" + version="$newver" + [ -n "$version" ] || version="$release" + + changelog="## Version $version du $(date +%d/%m/%Y-%H:%M)" setx mergebase=git merge-base master "$release" setxp modifs=git log --oneline "$mergebase..$release" // grep -v "Intégration de la branche release-" [ -n "$modifs" ] && changelog="$changelog From cd50646173906b2831fd3729e039542a79e58d4d Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Mon, 13 Apr 2015 10:54:25 +0400 Subject: [PATCH 67/71] =?UTF-8?q?ne=20pas=20mettre=20=C3=A0=20jour=20le=20?= =?UTF-8?q?fichier=20local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pz | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pz b/pz index c8f2762..9c69165 100755 --- a/pz +++ b/pz @@ -44,7 +44,8 @@ fi setx name=basename -- "$projdir" setx branch=git rev-parse --short HEAD 2>/dev/null -setx version=pver --show --allow-empty --add-metadata "$branch" +setx version=pver --show --allow-empty +[ -n "$version" ] && setx version=pver --show --string "$version" --add-metadata "$branch" [ -n "$version" ] || version="+$branch" dest="$destdir/$name${version:+-$version}.tgz" From 6890d30aef01efc3ff95280e0349c3cdb82ea460 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 13 Apr 2015 15:37:13 +0400 Subject: [PATCH 68/71] workaround pour le bug sous debian squeeze --- pz | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pz b/pz index 9c69165..12a6864 100755 --- a/pz +++ b/pz @@ -47,7 +47,18 @@ setx branch=git rev-parse --short HEAD 2>/dev/null setx version=pver --show --allow-empty [ -n "$version" ] && setx version=pver --show --string "$version" --add-metadata "$branch" [ -n "$version" ] || version="+$branch" -dest="$destdir/$name${version:+-$version}.tgz" + +if check_sysinfos -d debian -v squeeze-; then + # git archive sous debian squeeze a un bug: il génère un fichier tar au lieu + # d'un fichier tar compressé. Nous ferons donc la compression nous même. + dest="$destdir/$name${version:+-$version}.tar" + gzip=1 +else + dest="$destdir/$name${version:+-$version}.tar.gz" + gzip= +fi estep "Création de $(ppath "$dest")" -git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD +git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD || die +[ -n "$gzip" ] || exit 0 +gzip "$dest" From 8f6a32be539a78aa9155fcd45c8fba8ddf1fa07e Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 13 Apr 2015 15:40:16 +0400 Subject: [PATCH 69/71] =?UTF-8?q?forcer=20la=20cr=C3=A9ation=20de=20la=20d?= =?UTF-8?q?estination.=20afficher=20un=20message=20informatif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pz | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pz b/pz index 12a6864..c8622d5 100755 --- a/pz +++ b/pz @@ -61,4 +61,6 @@ fi estep "Création de $(ppath "$dest")" git archive -o "$dest" --prefix="$name${version:+-$version}/" HEAD || die [ -n "$gzip" ] || exit 0 -gzip "$dest" + +estep "Compression de l'archive" +gzip -f "$dest" From f5aeff7e6856d18c357bd2fc95b8dd6c79fd3940 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 14 Apr 2015 10:04:40 +0400 Subject: [PATCH 70/71] maj de ulib --- lib/ulib/.ulibver | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ulib/.ulibver b/lib/ulib/.ulibver index d04675c..469f5f8 100644 --- a/lib/ulib/.ulibver +++ b/lib/ulib/.ulibver @@ -1 +1 @@ -007022000 +008000000 From 9cf20279d833a888988811fec17e262bfb338f6a Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Tue, 14 Apr 2015 10:06:48 +0400 Subject: [PATCH 71/71] Init changelog & version 1.0.0 --- CHANGES.txt | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ VERSION.txt | 1 + 2 files changed, 92 insertions(+) create mode 100644 CHANGES.txt create mode 100644 VERSION.txt diff --git a/CHANGES.txt b/CHANGES.txt new file mode 100644 index 0000000..fa64818 --- /dev/null +++ b/CHANGES.txt @@ -0,0 +1,91 @@ +## Version 1.0.0 du 14/04/2015-10:05 + +commencer à suivre les versions de nutools: cette release est la première de +la série + +66bbf23 Intégration de la branche update-ulibver +f5aeff7 maj de ulib +073e7b0 Intégration de la branche ptools +8f6a32b forcer la création de la destination. afficher un message informatif +48d9104 Intégration de la branche ptools +6890d30 workaround pour le bug sous debian squeeze +91de409 Intégration de la branche ptools +cd50646 ne pas mettre à jour le fichier local +f321f1c Intégration de la branche ptools +6258a6b utiliser la version au lieu de la release +5589314 bug +10a7d4e Intégration de la branche ptools +cd92832 ne pas supprimer la branche develop +3f1dc3e Intégration de la branche ptools +ce050db ajout d'un changelog possibilité d'éditer le changelog avec -e supprimer les options courtes -z et -Z +2bc314c ajout de --merge-log supprimer les options courtes -z et -Z +fc35a05 inclure la liste des modifications dans le log +4578219 Intégration de la branche ptools +5b0715e vérifier la présence dans le dépôt distant +0e6e94c Intégration de la feature branch ptools +10152b4 calcul de newver action delete +6c8e750 implémener -z et -Z +2f41de3 cosmetic +5f6d5bb ajout des options courtes -z et -Z +18bb510 supprimer l'option courte -d qui est déjà utilisée pour diff +dd2a712 ajout de -d et --force-delete +38f04ff maj doc +523d3f1 doc pour nouvelle fonctionnalité à implémenter +13dfb9a Intégration de la feature branch prel-tag +da96f72 ajout d'un tag après fusion de la branche dans master +2a71a51 Intégration de la feature branch prel-tag +09c59d8 ne pas afficher les erreurs +3e514d5 maj doc +f9d4556 Intégration de la feature branch linedots +7ae9b48 ajout de elinedots +ffa9195 fast-forwarder si possible +f64117c cosmetic +d8a3ed4 checkout par défaut +89be42e ne pas utiliser csort +881bcde tenir compte de la valeur de origin +7c67a7f tenir compte des branches potentielles +b757ca1 Intégration de la feature branch git-opts +c3683a5 bug +743e17b fast-forwarder automatiquement la branche vers laquelle on bascule +e3e3bbb ajout de git_fast_forward +1661ee5 ajout des fonctions git_is_ancestor(), git_should_ff(), git_should_push(), git_is_merged() +2e215cc utiliser l'api +b975724 maj doc +262d12e toujours charger le module +8ae0a8d utiliser nouvelle API --add-metadata +259e1be ajout de --add-metadata support de --allow-empty pour --update +8d3ab79 ajout de semver_addmetadata utiliser API moderne pour les perfs +ac940b8 ne garder que les infos sur la branche courante dans les metadata +1e11a57 ajouter pz pour faire une archive d'un projet +9389fb0 autoriser --allow-emptyp pour l'action --show +f90ad4d bug +26aa98f cosmetic +8deda74 cosmetic +f8c4a54 calcul de la version avec --prel +22a26d9 support des numéros style maven +4f0a746 support des fichiers pom.xml +6d85330 Intégration de la feature branch ptools +f60787a prel est maintenant en topevel +7647d2d prel est prêt à passer en toplevel +7c36761 possibilité de faire -u et -m dans la même commande +de618ae possibilité de ne pas supprimer une feature branch après son intégration +57bf621 cosmetic +8d4d35d mettre à jour la version avec pver +f98c977 support de -v en mode auto +4b64305 finaliser l'option -u +5862e75 ne pas charger le fichier s'il n'existe pas +e5b8b81 début d'implémentation de update +9235ce1 nettoyage +ffaed8a quelques corrections +9182dcf maj api chargement depuis ~/etc/completion.d +bbbc35a maj api chargement depuis ~/etc/completion.d +d2133c7 intégrer les modifications faites à l'ur +90772f0 Intégration de la feature branch completion +163df88 bug +e8d683b bug +041a830 suite du support de bash_completion +9c17a60 framework pour la complétion automatique +bbbe6c4 l'option -c ne fait que le basculement ou la création. Le choix de la version se fera avec -u +c5ba03b ajouter les completions pour prel +2b2b7f5 début d'implémentation de prel -c +3f925ca déplacer le code de pver dans ptools diff --git a/VERSION.txt b/VERSION.txt new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/VERSION.txt @@ -0,0 +1 @@ +1.0.0