From 3f925ca9823cb44f5eb9b39048afef2ce86e1ab3 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 13 Mar 2015 00:15:53 +0400 Subject: [PATCH 01/18] =?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/18] =?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/18] 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/18] =?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 bbbc35af628010488c7c1761c5be262c95353556 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 23 Mar 2015 05:08:09 +0400 Subject: [PATCH 05/18] 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 06/18] 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 07/18] 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 08/18] 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 09/18] =?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 10/18] 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 11/18] 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 12/18] 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 13/18] =?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 14/18] 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 15/18] =?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 16/18] =?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 17/18] =?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 18/18] 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