From 5cf03dd2b5030df60b0b30befb4105d84972b02e Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 30 May 2023 11:33:59 +0300 Subject: [PATCH] Do not overwrite files if they are not changed --- galgen.zsh | 97 +++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/galgen.zsh b/galgen.zsh index 479d421..c8212dd 100755 --- a/galgen.zsh +++ b/galgen.zsh @@ -1,7 +1,7 @@ #!/usr/bin/env zsh # Copyright (C) 2022-2023 Sergey Matveev -VERSION=0.1.0 +VERSION=0.2.0 set -e @@ -35,12 +35,15 @@ imgs=((*.jxl|*.webp~*.preview.webp)($ordering)) pages=$(( ${#imgs} / $pagesize )) [[ $(( $pages * $pagesize )) -lt ${#imgs} ]] && pages=$(( $pages + 1 )) +local tmp=`mktemp` +trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT + for (( i=1 ; i <= ${#imgs} ; i++ )) { local img=${imgs[$i]} echo $i $img local dst=$i.img.html local p=$(( ( $i / $pagesize ) + 1 )) - cat > $dst < $tmp < @@ -52,38 +55,38 @@ for (( i=1 ; i <= ${#imgs} ; i++ )) { EOF [[ $i -eq 1 ]] || - echo "" >> $dst + echo "" >> $tmp [[ $i -eq ${#imgs} ]] || - echo "" >> $dst - cat >> $dst <" >> $tmp + cat >> $tmp < EOF [[ $i -eq 1 ]] || - echo "<<<" >> $dst - echo "^^^" >> $dst + echo "<<<" >> $tmp + echo "^^^" >> $tmp [[ $i -eq ${#imgs} ]] || - echo ">>>" >> $dst - echo "
\"$img\"" >> $dst + echo ">>>" >> $tmp + echo "
\"$img\"" >> $tmp [[ -r ${img}.txt ]] && { - echo "
" >> $dst
-        cat ${img}.txt >> $dst
-        echo "
" >> $dst + echo "
" >> $tmp
+        cat ${img}.txt >> $tmp
+        echo "
" >> $tmp } - [[ -r ${img}.html ]] && cat ${img}.html >> $dst - echo "
" >> $dst + [[ -r ${img}.html ]] && cat ${img}.html >> $tmp + echo "
" >> $tmp if [[ $img:e = jxl ]] ; then - echo "
" >> $dst
+        echo "
" >> $tmp
         jxlinfo $img > $img.info
-        cat $img.info >> $dst
-        echo "
" >> $dst - echo "Alternative formats:" >> $dst + cat $img.info >> $tmp + echo "
" >> $tmp + echo "Alternative formats:" >> $tmp if grep -q "JPEG bitstream reconstruction" $img.info ; then [[ -r $img.jpg ]] || { djxl $img $img.jpg touch -r $img $img.jpg } - echo "JPEG" >> $dst + echo "JPEG" >> $tmp else [[ -r $img.png ]] || { djxl2ppm $img @@ -94,19 +97,19 @@ EOF advpng -z -4 $img.png touch -r $img $img.png } - echo "PNG" >> $dst + echo "PNG" >> $tmp fi rm $img.info [[ -r $img.preview.webp ]] || djxl2ppm $img else - echo "
" >> $dst
-        webpinfo $img >> $dst
-        echo "
" >> $dst + echo "
" >> $tmp
+        webpinfo $img >> $tmp
+        echo "
" >> $tmp [[ -r $img.preview.webp ]] || dwebp $img -ppm -o $img.ppm fi - echo "
" >> $dst + echo "
" >> $tmp exiftool -escapeHTML -htmlFormat -groupHeadings \ - --${=${(j/ --/)exifTagsOmit}} $img >> $dst + --${=${(j/ --/)exifTagsOmit}} $img >> $tmp [[ -r $img.ppm ]] && { pnmscale -w 100 < $img.ppm > $img.ppm.ppm mv $img.ppm.ppm $img.ppm @@ -114,13 +117,16 @@ EOF rm $img.ppm touch -r $img $img.preview.webp } - echo "" >> $dst - touch -r $img $dst + echo "" >> $tmp + cmp -s $tmp $dst || { + cat $tmp > $dst + touch -r $img $dst + } } for (( p=1 ; p <= $pages ; p++ )) { local dst=$p.page.html - cat > $dst < $tmp < @@ -131,40 +137,43 @@ for (( p=1 ; p <= $pages ; p++ )) { EOF [[ $p -eq 1 ]] || - echo "" >> $dst + echo "" >> $tmp [[ $p -eq $pages ]] || - echo "" >> $dst - cat >> $dst <" >> $tmp + cat >> $tmp < EOF [[ $p -eq 1 ]] && { [[ -r .txt ]] && { - echo "
" >> $dst
-            cat .txt >> $dst
-            echo "
" >> $dst + echo "
" >> $tmp
+            cat .txt >> $tmp
+            echo "
" >> $tmp } - [[ -r .html ]] && cat .html >> $dst + [[ -r .html ]] && cat .html >> $tmp } [[ $p -eq 1 ]] || - echo "<<<" >> $dst + echo "<<<" >> $tmp [[ $p -eq $pages ]] || - echo ">>>" >> $dst - echo "| home" >> $dst - echo "| end" >> $dst - echo "
" >> $dst + echo ">>>" >> $tmp + echo "| home" >> $tmp + echo "| end" >> $tmp + echo "
" >> $tmp for (( i=1 ; i <= $pagesize ; i++ )) { img=$(( ( $p - 1 ) * $pagesize + $i )) [[ $img -le ${#imgs} ]] || break - echo "" >> $dst + echo "" >> $tmp alt="preview ${img}" title="" [[ -r ${imgs[$img]}.txt ]] && { alt=`cat ${imgs[$img]}.txt` title="title=\"$alt\"" } - echo "\"$alt\"" >> $dst + echo "\"$alt\"" >> $tmp + } + echo "" >> $tmp + cmp -s $tmp $dst || { + cat $tmp > $dst + echo page $p } - echo "" >> $dst - echo page $p } -- 2.44.0