fileset

git mirror of https://ccx.te2000.cz/bzr/fileset
git clone https://ccx.te2000.cz/git/fileset
Log | Files | Refs | README

commit 154cec716e30068774950387a29133774a23b0ee
parent 025c8efa5e9b329fbc52b4fa61b6ece3c71800d2
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Fri, 20 Jun 2014 16:09:59 +0200

support $ROOT and $compact variables in fslist
Diffstat:
Mbin/fslist | 26++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/bin/fslist b/bin/fslist @@ -34,22 +34,36 @@ statement_end() { delim='' } +ROOT=${${${ROOT:-$PWD}:a}%/} +: ${compact:=1} + fnames=( ) -for arg in "${@:-$PWD}"; do +for arg in "${@:-$ROOT}"; do fnames+=( $arg:a ) [[ -d $arg ]] && fnames+=( $arg:a/**/* ) done for fname in $fnames; do + if ! [[ $fname == $ROOT || $fname == $ROOT/* ]]; then + printf "skipping out-of-root file: %s\n" "$fname" >&2 + continue + fi + relname=${${fname#$ROOT}#/} zstat -LH s $fname || continue ftype=$(( [##16] $s[mode] >> 12 )) fmode=$(( [##8] $s[mode] & 8#7777 )) t=$ftypes[$ftype] - if [[ $fname == *$'\t'* || $fname == *$'\n'* ]]; then - statement $'P\t'$fname $'\t' + (($compact)) || printf '\n' + + if [[ $relname == *$'\t'* || $relname == *$'\n'* ]]; then + statement $'P\t'$relname $'\t' else - statement $fname + if (($compact)); then + statement /$relname + else + statement /$relname $'\n' + fi fi if [[ $t != d && $s[nlink] -gt 1 ]]; then @@ -58,7 +72,7 @@ for fname in $fnames; do statement $'H\t'$hardlinks[$id] $'\n' continue else - hardlinks[$id]=$fname + hardlinks[$id]=./$relname fi fi @@ -78,7 +92,7 @@ for fname in $fnames; do else flags+=N fi - if [[ $content == *$'\t'* || $content == *$'\n'* ]]; then + if ! (($compact)) || [[ $content == *$'\t'* || $content == *$'\n'* ]]; then statement C$flags$'\t'$content $'\n' else statement c$flags$'\t'$content