From c756c5f622bcb0dd182c77dbe890575718d39da5 Mon Sep 17 00:00:00 2001 From: amery Date: Tue, 3 Jul 2007 16:44:56 +0000 Subject: [PATCH] * improved adtree -l to skip files from adtree -d --- adtree | 117 ++++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 44 deletions(-) diff --git a/adtree b/adtree index 9b9fce4..9995e4c 100755 --- a/adtree +++ b/adtree @@ -19,11 +19,10 @@ root= base=/ home=home - adtree_usage() { cat < [-o ] [OPTIONS] [locations...] options: -v|--verbose verbose @@ -37,13 +36,11 @@ usage: $progname [-V|--version] modes: * navigation (-n) + * formats: plain, html * list (-l) + * formats: plain, html * deps (-d) - - output formats: - * plain simple plain text - * html HTML - * makefile Makefile rules + * formats: plain html format options: -B|--base relative path to this location (/) @@ -56,7 +53,7 @@ adtree_warn() { echo -e "WARN: $@" >&2 ; } adtree_error() { echo -e "ERROR: $@" >&2 ; } # analyse the given options -shortopts='?Vvqnldm:o:R:b:h:' +shortopts='Vvqnldm:o:R:b:h:' longopts='version,verbose,quiet,mode:,output:,root:,base:,home:' options=$( getopt -o "$shortopts" -l "$longopts" -- "$@" ) @@ -101,13 +98,29 @@ while [ $# -gt 0 ]; do -o|--output) shift; - case "$1" in - plain|html|makefile) - output="$1" ;; - *) adtree_error "unknown output format '$1'" - adtree_usage - exit -1 - ;; + case "$mode" in + deps) case "$1" in + plain) + output="$1" ;; + *) adtree_error "unknown output format '$1'" + adtree_usage + exit -1 ;; + esac ;; + list) case "$1" in + html|plain) + output="$1" ;; + *) adtree_error "unknown output format '$1'" + adtree_usage + exit -1 ;; + esac ;; + navigation) + case "$1" in + html|plain) + output="$1" ;; + *) adtree_error "unknown output format '$1'" + adtree_usage + exit -1 ;; + esac ;; esac ;; -R|--root) @@ -144,42 +157,57 @@ else fi root=$( cd "$root"; pwd -P ) +tmpfile=$( mktemp ) +trap 'echo "Got SIGINT (Crtl-C). Aborting." >&2 ; rm -rf '$tmpfile'; exit 1' INT + adtree_list() { - local source="$1" target= + local source="$1" target= name= local filename= folder= path= - filename="${source##*/}"; name="${filename%.txt}" - path="${source%/*}"; folder="${path##*/}" - - case "$output" in - html|makefile) - if [ "$name" == "$folder" ]; then - target="$path/index.html" - else - target="$path/$name.html" - fi - ;; - plain) - target="$source" - ;; - esac - + name="${source#$root/}" + if ! grep -q "^$name\$" $tmpfile; then + echo "$name" >> $tmpfile + + filename="${source##*/}"; name="${filename%.txt}" + path="${source%/*}"; folder="${path##*/}" + + case "$output" in + html) + if [ "$name" == "$folder" ]; then + target="$path/index.html" + else + target="$path/$name.html" + fi ;; + plain) + target="$source" + ;; + esac - case "$output" in - html|plain) - echo "${target#$root/}" ;; - makefile) - echo -e "${target#$root/}:\t${source#$root/}\n" - ;; - esac + echo "${target#$root/}" + fi } adtree_deps() { - local source="$1" path= - path="${source%/*}" + local source="$1" path= name= dep= + + name="${source#$root/}" + if ! grep -q "^$name\$" $tmpfile; then + echo "$name" >> $tmpfile - adtree_echo "$source: list of dependencies" - sed -n -e "s,^\(include\|include1\)::\(.*\)\[.*\],${path#$root/}/\2,p" "$source" + if [ -r "$source" ]; then + path="${source%/*}" + adtree_echo "$name: list of dependencies" + + sed -n -e "s,^\(include\|include1\)::\(.*\)\[\(.*\)\].*$,\2,p" "$source" | while read dep; do + dep="$path/$dep" + echo "${dep#$root/}" + + adtree_deps "$dep" + done + else + adtree_warn "$name: include file not found" + fi + fi } for x; do @@ -194,7 +222,7 @@ for x; do fi case "$mode" in - list) + list) $0 -dR "$root" -- "$x" >> "$tmpfile" find "$x" -type f -name '*.txt' | while read f; do adtree_list "$f" done ;; @@ -206,3 +234,4 @@ for x; do fi done +rm -f "$tmpfile" -- 2.11.4.GIT