}
attachment_glob(){
- local pattern="${1%/}" IFS=''
+ local pattern="${1}" IFS=''
local glob page pagedir
page="${pattern%/*}"
- [ "$page" = "$pattern" ] && page=.
- [ ! "$page" ] && page=/
+ [ "$page" = "$pattern" ] && page="./" || page="${page}/"
pattern="${pattern##*/}"
[ ! "$pattern" ] && pattern="*"
case $page in
/*)
- for glob in "$_DATA/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done
- for glob in "$_EXEC/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done
+ for glob in "$_DATA/pages${page}#attachments"/$pattern;
+ do [ -e "$glob" ] && printf '%s\n' "${glob#"$_DATA/pages"}"; done
+ for glob in "$_EXEC/pages${page}#attachments"/$pattern;
+ do [ -e "$glob" ] && printf '%s\n' "${glob#"$_EXEC/pages"}"; done
;;
*)
- for glob in "$_DATA/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
- for glob in "$_EXEC/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
+ for glob in "$_DATA/pages/$PATH_INFO/$page#attachments"/$pattern;
+ do [ -e "$glob" ] && printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done
+ # FIXME: ../ cannot resolve if $PATH_INFO does not exist in $_EXEC/pages/
+ # even though the resulting path would be valid (i.e. $_EXEC/pages/NONEXIST/../)
+ for glob in "$_EXEC/pages/$PATH_INFO/$page#attachments"/$pattern;
+ do [ -e "$glob" ] && printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done
;;
esac \
| sort -u \
| while read -r glob; do
- [ -e "$glob" ] || continue
pagedir="$(page_abs "${glob%%/#attachments/*}/")"
[ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \
- && printf '%s\n' "${glob%%/#attachments/*}/${glob#*/#attachments/}"
+ && printf '%s\n' "${glob%%/#attachments/*}/${glob##*/}"
done
}