tagpic

posix tagging gallery
git clone git://kloet.net/tagpic
Download | Log | Files | Refs | LICENSE

commit 428db1df8fb9b5444f05b64a1706ce3a7ebc2b7b
parent 82ff8d9a5ac82cd42661d7ef0b8ffd4256f94713
Author: Andrew Kloet <andrew@kloet.net>
Date:   Thu, 17 Sep 2026 22:53:38 -0400

tagpic: add meta for img to tag links

Diffstat:
Mtagpic | 46++++++++++++++++++++++++++++++++++------------
1 file changed, 34 insertions(+), 12 deletions(-)

diff --git a/tagpic b/tagpic @@ -15,7 +15,6 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set -e # errexit -set -u # nounset IMGDIR="${TAGPIC_IMGDIR:-$HOME/imgdir}" @@ -26,6 +25,7 @@ usage() echo " i, insert <path/to/file> [tag1 tag2 ...]" >&2 echo " d, delete <filename>" >&2 echo " m, modify [-a|--append] <filename> [tag1 tag2 ...]" >&2 + echo " l, lookup <filename>" >&2 exit 1 } @@ -36,17 +36,17 @@ assert_file_exists() delete_symlinks() { - for _tag_dir in "$IMGDIR"/*; do - [ -d "$_tag_dir" ] || continue - case "$_tag_dir" in - */all) continue ;; - esac - - _symlink="$_tag_dir/$1" - if [ -L "$_symlink" ]; then - rm -f "$_symlink" - fi - done + _filename="$1" + _meta_dir="$IMGDIR/meta/$_filename" + + if [ -d "$_meta_dir" ]; then + for _tag_link in "$_meta_dir"/*; do + [ -L "$_tag_link" ] || continue + _tag="${_tag_link##*/}" + rm -f "$IMGDIR/$_tag/$_filename" + done + rm -rf "$_meta_dir" + fi } cmd_insert() @@ -64,10 +64,12 @@ cmd_insert() _filename="${_unixtime}.${_ext}" cp "$_filepath" "$IMGDIR/all/$_filename" + mkdir -p "$IMGDIR/meta/$_filename" for _tag do mkdir -p "$IMGDIR/$_tag" ln -s "../all/$_filename" "$IMGDIR/$_tag/$_filename" + ln -s "$IMGDIR/$_tag" "$IMGDIR/meta/$_filename/$_tag" done } @@ -98,15 +100,35 @@ cmd_modify() assert_file_exists "$IMGDIR/all/$_filename" [ "$_append" -eq 0 ] && delete_symlinks "$_filename" + mkdir -p "$IMGDIR/meta/$_filename" + for _tag do mkdir -p "$IMGDIR/$_tag" ln -s "../all/$_filename" "$IMGDIR/$_tag/$_filename" + ln -s "$IMGDIR/$_tag" "$IMGDIR/meta/$_filename/$_tag" done } +cmd_lookup() +{ + [ "$#" -ne 1 ] && usage + _filename="$1" + + assert_file_exists "$IMGDIR/all/$_filename" + + _meta_dir="$IMGDIR/meta/$_filename" + if [ -d "$_meta_dir" ]; then + for _tag_link in "$_meta_dir"/*; do + [ -L "$_tag_link" ] || continue + printf '%s\n' "${_tag_link##*/}" + done + fi +} + case "$1" in i|insert) shift; cmd_insert "$@" ;; d|delete) shift; cmd_delete "$@" ;; m|modify) shift; cmd_modify "$@" ;; + l|lookup) shift; cmd_lookup "$@" ;; *) usage ;; esac