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
pfb:-b
pfe:-e
pfd:-d
)
ORIGEXT=pff
@ -175,10 +176,10 @@ supportées sont:
Ajouter/Identifier un fichier comme un fichier local pour tous les
profils. Le fichier est copié dans le profil Base.
-L, --locals [WORKDIR]
--locals [WORKDIR]
Lister les fichiers locaux
-l, --profiles [WORKDIR]
--profiles [WORKDIR]
Lister les profils valides
-s, --switch PROFILE [WORKDIR]
@ -190,13 +191,22 @@ supportées sont:
-e, --edit FILES...
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]
Afficher des informations sur le projet courant: profils, fichiers
locaux, profil courant, etc. C'est la commande par défaut.
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_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:
@ -210,6 +220,10 @@ supportées sont:
# clink: la destination du lien cfile
# Plink: la destination du lien Pfile
function flexists() {
[ -e "$1" -o -L "$1" ]
}
function find_pffdir() {
# trouver le répertoire du projet pff à partir du répertoire $2(=.) et
# mettre le chemin absolu dans la variable $1(=pffdir)
@ -353,7 +367,7 @@ function sync_vlfiles() {
rfile="${vlfile%__pv-*__}"
for profile in "${profiles[@]}"; do
prefix="$pffdir/pff/$profile"
[ -e "$prefix/$rfile" ] || continue
flexists "$prefix/$rfile" || continue
pfile="$prefix/$vlfile"
setx plink=multiups "$profile/$vlfile" "Base/$vlfile"
if [ -L "$pfile" ]; then
@ -785,13 +799,13 @@ function add_global__link() {
local rfile bfile cfile plink clink tmp
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 cfile=get_cfile "$pfile" "$pffdir"
setx plink=multiups "$rfile" "pff/Current/$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
else
# Création des liens pour $rfile
@ -815,7 +829,7 @@ function add_global_cmd() {
if [ -d "$file" ]; then
ewarn "$file: est un répertoire. argument ignoré"
continue
elif [ -L "$file" -o -e "$file" ]; then
elif flexists "$file"; then
:
else
ewarn "$file: fichier introuvable"
@ -878,19 +892,19 @@ function add_local__link() {
local rfile bfile pfile Pfile plink Plink
# vérifier validité du chemin
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
setx bfile=get_bfile "$pfile" "$pffdir"
if [ ! -e "$bfile" ]; then
if ! flexists "$bfile"; then
add_global__link "$pfile" "$pffdir" || return
fi
# vérifier la présence du lien local
setx Pfile=get_pfile "$pfile" "$profile" "$pffdir"
[ -e "$Pfile" ] && return 0
flexists "$Pfile" && return 0
# créer le fichier local
setx Cfile=get_Cfile "$pfile" "$pffdir"
mkdirof "$Pfile"
if [ -e "$Cfile" ]; then
if flexists "$Cfile"; then
# copier depuis le profil Common par défaut
cp "$Cfile" "$Pfile"
else
@ -918,7 +932,7 @@ function add_local_cmd() {
if [ -d "$file" ]; then
ewarn "$file: est un répertoire. argument ignoré"
continue
elif [ -L "$file" -o -e "$file" ]; then
elif flexists "$file"; then
:
else
ewarn "$file: fichier introuvable"
@ -976,10 +990,76 @@ function edit_cmd() {
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
function infos_cmd() {
local details="$1"; shift
local pffdir="$1"
local -a profiles vlfiles
local rfile Pfile flag
@ -1002,7 +1082,9 @@ function infos_cmd() {
elif [ -f "$Pfile" ]; then
flag="${COULEUR_BLEUE}*${COULEUR_NORMALE} "
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
flag=" "
fi
@ -1044,6 +1126,7 @@ disttype=auto
ORIGEXTS=("${DEFAULT_ORIGEXTS[@]}")
PROTECTS=("${DEFAULT_PROTECTS[@]}")
unwrap=auto
details=
args=(
--help '$exit_with display_help'
-0,--init action=init
@ -1060,12 +1143,14 @@ args=(
-E,--unwrap unwrap=1
-p,--patch action=patch
-a,--add-global action=add-global
-L,--locals action=list-locals
-l,--profiles action=list-profiles
--locals action=list-locals
--profiles action=list-profiles
-s,--switch action=switch
-b,--add-local action=add-local
-e,--edit action=edit
-d,--diff action=diff
--infos action=infos
-l,--details details=1
)
parse_args "$@"; set -- "${args[@]}"
@ -1081,5 +1166,6 @@ list-profiles) list_profiles_cmd "$@";;
switch) switch_cmd "$@";;
add-local) add_local_cmd "$@";;
edit) edit_cmd "$@";;
infos) infos_cmd "$@";;
diff) diff_cmd "$@";;
infos) infos_cmd "$details" "$@";;
esac