pff: ajout de --diff et --infos -l

This commit is contained in:
Jephté Clain 2018-02-07 16:22:50 +04:00
parent ed0659f2a1
commit 70165cb09f
1 changed files with 102 additions and 16 deletions

118
pff
View File

@ -6,6 +6,7 @@ SCRIPT_ALIASES=(
pfa:-a pfa:-a
pfb:-b pfb:-b
pfe:-e pfe:-e
pfd:-d
) )
ORIGEXT=pff ORIGEXT=pff
@ -175,10 +176,10 @@ supportées sont:
Ajouter/Identifier un fichier comme un fichier local pour tous les Ajouter/Identifier un fichier comme un fichier local pour tous les
profils. Le fichier est copié dans le profil Base. profils. Le fichier est copié dans le profil Base.
-L, --locals [WORKDIR] --locals [WORKDIR]
Lister les fichiers locaux Lister les fichiers locaux
-l, --profiles [WORKDIR] --profiles [WORKDIR]
Lister les profils valides Lister les profils valides
-s, --switch PROFILE [WORKDIR] -s, --switch PROFILE [WORKDIR]
@ -190,13 +191,22 @@ supportées sont:
-e, --edit FILES... -e, --edit FILES...
Editer des fichiers, implique --add-local Editer des fichiers, implique --add-local
-d, --diff [DESTP [WORKDIR]]
-d, --diff [SRCP DESTP [WORKDIR]]
Afficher la différence entre entre deux profils. Avec la première
syntaxe, comparer le profil courant au profil DESTP. Avec la deuxième
syntaxe, comparer le profil SRCP au DESTP.
--infos [WORKDIR] --infos [WORKDIR]
Afficher des informations sur le projet courant: profils, fichiers Afficher des informations sur le projet courant: profils, fichiers
locaux, profil courant, etc. C'est la commande par défaut. locaux, profil courant, etc. C'est la commande par défaut.
Les fichiers locaux sont taggés avec les valeurs suivantes Les fichiers locaux sont taggés avec les valeurs suivantes
${COULEUR_ROUGE}P${COULEUR_NORMALE} il existe un patch pour ce fichier dans le profil courant ${COULEUR_ROUGE}P${COULEUR_NORMALE} il existe un patch pour ce fichier dans le profil courant
${COULEUR_BLEUE}*${COULEUR_NORMALE} ce fichier local est spécifique à ce profil ${COULEUR_BLEUE}*${COULEUR_NORMALE} ce fichier local est spécifique à ce profil
${COULEUR_BLEUE}C${COULEUR_NORMALE} ce fichier local est spécifique au profil Common" $(get_color YELLOW)C${COULEUR_NORMALE} ce fichier local est spécifique au profil Common
-l, --details
Afficher tous les fichiers locaux au lieu de se contenter des fichiers
modifiés dans le profil courant."
} }
# Nomenclature pour le nommage des fichiers traités: # Nomenclature pour le nommage des fichiers traités:
@ -210,6 +220,10 @@ supportées sont:
# clink: la destination du lien cfile # clink: la destination du lien cfile
# Plink: la destination du lien Pfile # Plink: la destination du lien Pfile
function flexists() {
[ -e "$1" -o -L "$1" ]
}
function find_pffdir() { function find_pffdir() {
# trouver le répertoire du projet pff à partir du répertoire $2(=.) et # trouver le répertoire du projet pff à partir du répertoire $2(=.) et
# mettre le chemin absolu dans la variable $1(=pffdir) # mettre le chemin absolu dans la variable $1(=pffdir)
@ -353,7 +367,7 @@ function sync_vlfiles() {
rfile="${vlfile%__pv-*__}" rfile="${vlfile%__pv-*__}"
for profile in "${profiles[@]}"; do for profile in "${profiles[@]}"; do
prefix="$pffdir/pff/$profile" prefix="$pffdir/pff/$profile"
[ -e "$prefix/$rfile" ] || continue flexists "$prefix/$rfile" || continue
pfile="$prefix/$vlfile" pfile="$prefix/$vlfile"
setx plink=multiups "$profile/$vlfile" "Base/$vlfile" setx plink=multiups "$profile/$vlfile" "Base/$vlfile"
if [ -L "$pfile" ]; then if [ -L "$pfile" ]; then
@ -785,13 +799,13 @@ function add_global__link() {
local rfile bfile cfile plink clink tmp local rfile bfile cfile plink clink tmp
setx rfile=get_rfile "$pfile" "$pffdir" || return setx rfile=get_rfile "$pfile" "$pffdir" || return
[ -L "$pffdir/$rfile" -o -e "$pffdir/$rfile" ] || touch "$pffdir/$rfile" flexists "$pffdir/$rfile" || touch "$pffdir/$rfile"
setx bfile=get_bfile "$pfile" "$pffdir" setx bfile=get_bfile "$pfile" "$pffdir"
setx cfile=get_cfile "$pfile" "$pffdir" setx cfile=get_cfile "$pfile" "$pffdir"
setx plink=multiups "$rfile" "pff/Current/$rfile" setx plink=multiups "$rfile" "pff/Current/$rfile"
setx clink=multiups "Current/$rfile" "Base/$rfile" setx clink=multiups "Current/$rfile" "Base/$rfile"
if [ -e "$bfile" -a -L "$pfile" -a -L "$cfile" ]; then if flexists "$bfile" && [ -L "$pfile" -a -L "$cfile" ]; then
: # ok pour les liens : # ok pour les liens
else else
# Création des liens pour $rfile # Création des liens pour $rfile
@ -815,7 +829,7 @@ function add_global_cmd() {
if [ -d "$file" ]; then if [ -d "$file" ]; then
ewarn "$file: est un répertoire. argument ignoré" ewarn "$file: est un répertoire. argument ignoré"
continue continue
elif [ -L "$file" -o -e "$file" ]; then elif flexists "$file"; then
: :
else else
ewarn "$file: fichier introuvable" ewarn "$file: fichier introuvable"
@ -878,19 +892,19 @@ function add_local__link() {
local rfile bfile pfile Pfile plink Plink local rfile bfile pfile Pfile plink Plink
# vérifier validité du chemin # vérifier validité du chemin
setx rfile=get_rfile "$pfile" "$pffdir" || return setx rfile=get_rfile "$pfile" "$pffdir" || return
[ -L "$pffdir/$rfile" -o -e "$pffdir/$rfile" ] || touch "$pffdir/$rfile" flexists "$pffdir/$rfile" || touch "$pffdir/$rfile"
# vérifier la présence du lien global # vérifier la présence du lien global
setx bfile=get_bfile "$pfile" "$pffdir" setx bfile=get_bfile "$pfile" "$pffdir"
if [ ! -e "$bfile" ]; then if ! flexists "$bfile"; then
add_global__link "$pfile" "$pffdir" || return add_global__link "$pfile" "$pffdir" || return
fi fi
# vérifier la présence du lien local # vérifier la présence du lien local
setx Pfile=get_pfile "$pfile" "$profile" "$pffdir" setx Pfile=get_pfile "$pfile" "$profile" "$pffdir"
[ -e "$Pfile" ] && return 0 flexists "$Pfile" && return 0
# créer le fichier local # créer le fichier local
setx Cfile=get_Cfile "$pfile" "$pffdir" setx Cfile=get_Cfile "$pfile" "$pffdir"
mkdirof "$Pfile" mkdirof "$Pfile"
if [ -e "$Cfile" ]; then if flexists "$Cfile"; then
# copier depuis le profil Common par défaut # copier depuis le profil Common par défaut
cp "$Cfile" "$Pfile" cp "$Cfile" "$Pfile"
else else
@ -918,7 +932,7 @@ function add_local_cmd() {
if [ -d "$file" ]; then if [ -d "$file" ]; then
ewarn "$file: est un répertoire. argument ignoré" ewarn "$file: est un répertoire. argument ignoré"
continue continue
elif [ -L "$file" -o -e "$file" ]; then elif flexists "$file"; then
: :
else else
ewarn "$file: fichier introuvable" ewarn "$file: fichier introuvable"
@ -976,10 +990,76 @@ function edit_cmd() {
return $r return $r
} }
#===========================================================
# pff --diff
function diff_cmd() {
local pffdir profile srcp destp
case $# in
0)
ensure_pffdir pffdir
setx srcp=get_current_profile "$pffdir"
destp=
;;
1)
if withpath "$1"; then
ensure_pffdir pffdir "$1"
setx srcp=get_current_profile "$pffdir"
destp=
else
ensure_pffdir pffdir
setx srcp=get_current_profile "$pffdir"
destp="$1"
fi
;;
2)
if withpath "$2"; then
ensure_pffdir pffdir "$2"
setx srcp=get_current_profile "$pffdir"
destp="$1"
else
ensure_pffdir pffdir
srcp="$1"
destp="$2"
fi
;;
*)
ensure_pffdir pffdir "$3"
srcp="$1"
destp="$2"
;;
esac
local -a lfiles; local rfile bfile Cfile srcfile destfile
setx -a lfiles=get_local_files "$pffdir"
for rfile in "${lfiles[@]}"; do
setx srcfile=get_pfile "$pffdir/$rfile" "$srcp" "$pffdir"
flexists "$srcfile" || continue
if [ -n "$destp" ]; then
setx destfile=get_pfile "$pffdir/$rfile" "$destp" "$pffdir"
else
setx Cfile=get_Cfile "$pffdir/$rfile" "$pffdir"
setx bfile=get_bfile "$pffdir/$rfile" "$pffdir"
# si on précise pas le profil destination, sélectionner dans l'ordre
# Common ou Base
if [ "$srcp" == Base -o "$srcp" == Common ]; then
destfile="$bfile"
elif flexists "$Cfile"; then
destfile="$Cfile"
else
destfile="$bfile"
fi
fi
diff -ur "$srcfile" "$destfile"
done | page_maybe
}
#=========================================================== #===========================================================
# pff --infos # pff --infos
function infos_cmd() { function infos_cmd() {
local details="$1"; shift
local pffdir="$1" local pffdir="$1"
local -a profiles vlfiles local -a profiles vlfiles
local rfile Pfile flag local rfile Pfile flag
@ -1002,7 +1082,9 @@ function infos_cmd() {
elif [ -f "$Pfile" ]; then elif [ -f "$Pfile" ]; then
flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} " flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "
elif [ "$profile" != Common -a -f "$Cfile" ]; then elif [ "$profile" != Common -a -f "$Cfile" ]; then
flag="${COULEUR_BLEUE}C${COULEUR_NORMALE} " flag="$(get_color YELLOW)C${COULEUR_NORMALE} "
elif [ -z "$details" ]; then
continue
else else
flag=" " flag=" "
fi fi
@ -1044,6 +1126,7 @@ disttype=auto
ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}") ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}")
PROTECTS=("${DEFAULT_PROTECTS[@]}") PROTECTS=("${DEFAULT_PROTECTS[@]}")
unwrap=auto unwrap=auto
details=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-0,--init action=init -0,--init action=init
@ -1060,12 +1143,14 @@ args=(
-E,--unwrap unwrap=1 -E,--unwrap unwrap=1
-p,--patch action=patch -p,--patch action=patch
-a,--add-global action=add-global -a,--add-global action=add-global
-L,--locals action=list-locals --locals action=list-locals
-l,--profiles action=list-profiles --profiles action=list-profiles
-s,--switch action=switch -s,--switch action=switch
-b,--add-local action=add-local -b,--add-local action=add-local
-e,--edit action=edit -e,--edit action=edit
-d,--diff action=diff
--infos action=infos --infos action=infos
-l,--details details=1
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
@ -1081,5 +1166,6 @@ list-profiles) list_profiles_cmd "$@";;
switch) switch_cmd "$@";; switch) switch_cmd "$@";;
add-local) add_local_cmd "$@";; add-local) add_local_cmd "$@";;
edit) edit_cmd "$@";; edit) edit_cmd "$@";;
infos) infos_cmd "$@";; diff) diff_cmd "$@";;
infos) infos_cmd "$details" "$@";;
esac esac