diff --git a/atom b/atom index 44bd4f9..d60b26e 100755 --- a/atom +++ b/atom @@ -231,8 +231,8 @@ do done done -deleted=0 -removed=0 +unset deleted +unset removed echo 'BEGIN TRANSACTION;' >&3 for id in ${!removefile[@]} do @@ -256,9 +256,9 @@ do done echo 'COMMIT;' >&3 (( cron )) || echo -n $'\r' -echo -n "Suppressed $deleted files, $removed removed from database" +echo -n "${deleted+$deleted files deleted${removed:+, }}${removed:+$removed removed from database}" (( cron )) || echo -ne "\033[K" -echo +(( deleted || removed )) && echo unset removecount deleted removed removefile updateTags @@ -272,7 +272,8 @@ do Update destination_files last_change 0 \ <<<"destination_id = $forcedestid" else - echo "Destination $forcedest does not exist!" >&2 + echo "Full rebuild of destination $forcedest was requested," \ + "but it does not exist!" >&2 fi done @@ -441,7 +442,7 @@ do decodefiles+=("$line::AtOM:SQL:Sep::") read -u4 line done -(( cron )) || echo -n 'Creating tasks... ' +(( cron )) || echo -n $'Creating tasks...\033[K' (( textunidecodeneeded )) && ascii @@ -547,8 +548,11 @@ do tmpfile done echo 'COMMIT;' >&3 -(( cron )) || echo -n $'\r' -echo "Created ${count:-0} tasks for $filecount files ${togo:+($togo left) }(${copies:-0} immediate copies)" +(( cron )) || echo -n $'\r\033[K' +(( count )) \ +&& echo "Created $count tasks for $filecount files \ + ${togo:+($togo left) } \ + ${copies:+($copies immediate copies)}" # remove perl unicode to ascii coprocess (( textunidecodeneeded )) && eval exec "${toascii[1]}>&-" @@ -563,7 +567,7 @@ remaining=$taskcount failed=0 echo 'BEGIN TRANSACTION;' >&3 committime=$EPOCHSECONDS -while (( (remaining || ${#workers[@]}) && ! quit )) +while (( remaining || ${#workers[@]} )) do timestamp=$EPOCHSECONDS if (( $timestamp - committime >= 60 )) @@ -577,16 +581,15 @@ do then concurrency="$fixed_workers" else - if [ -z "$quit" ] \ - && (( ! pause )) \ - && (( timestamp - concurrencychange >= loadinterval )) + if (( timestamp - concurrencychange >= loadinterval )) then - if (( concurrency > 1 )) \ - && (( load > maxload )) + if (( concurrency > 1 || allow_zero_running )) \ + && (( load > maxload && concurrency )) then concurrencychange=$timestamp (( --concurrency )) - elif (( load < maxload )) && (( active > concurrency - 1 )) + elif (( load < maxload )) \ + && (( active > concurrency - 1 )) then concurrencychange=$timestamp (( ++concurrency )) @@ -595,16 +598,11 @@ do fi checkworkers cleaner - (( pause )) || master + master if (( ran - failed )) then currenttime=$timestamp - if (( pause )) - then - (( runtime = pausestart - starttime - pausedtime )) - else - (( runtime = currenttime - starttime - pausedtime )) - fi + (( runtime = currenttime - starttime )) avgduration=$(( ( runtime * 1000) / @@ -640,11 +638,7 @@ do fmtprogress="T:%${#taskcount}i/%i (F:%i) %3i%%" fmttime='%2id %2ih%02im%02is (A:%4.1fs/task)' eta="ETA:$( - date -d "${days:-0} days - ${hours:-0} hours - ${minutes:-0} minutes - ${seconds:-0} seconds" \ - +'%d/%m %H:%M:%S' + printf "%(%c)T" "$(( currenttime + secsremaining ))" )" (( cron )) || printf \ "\r$fmtload $fmtworkers $fmtprogress $fmttime $eta\033[K"\ @@ -661,7 +655,7 @@ do ${minutes:-0} \ ${seconds:-0} \ ${avgdsec:-0}.${avgdmsec:-0} - if (( pause )) + if ! (( concurrency )) && ! (( cron )) then if (( active )) then @@ -676,22 +670,25 @@ unset count endtime=$EPOCHSECONDS -(( elapsedseconds = endtime - starttime - pausedtime )) +(( elapsedseconds = endtime - starttime )) (( days = elapsedseconds / ( 24*60*60 ) )) || true +(( days )) || unset days (( hours = ( elapsedseconds - ( days*24*60*60 ) ) / ( 60*60 ) )) || true +(( days && hours )) || unset hours (( minutes = ( elapsedseconds - ( ( days*24 + hours ) *60*60 ) ) / 60 )) || true +(( days && hours && minutes )) || unset minutes (( seconds = elapsedseconds - @@ -699,10 +696,15 @@ endtime=$EPOCHSECONDS )) || true (( cron )) || echo -n $'\r' -echo -n "Ran ${ran:=0} tasks, $failed of which failed, in $days" \ - "days, $hours hours, $minutes minutes and $seconds seconds." +(( ran )) \ +&& echo -n "Ran $ran tasks${failed:+, $failed of which failed,} \ + in ${days:+$days days,} \ + ${hours:+$hours hours,} \ + ${minutes:+$minutes minutes and} \ + $seconds seconds." (( cron )) || echo -en "\033[K" -echo +(( ran )) && echo + if (( failed )) then echo $'\nFailed tasks:\n' @@ -785,17 +787,10 @@ then echo "${line%%::AtOM:SQL:Sep::*}" line="${line#*::AtOM:SQL:Sep::}" line="${line//::AtOM:SQL:Sep::/ }" - echo $'\t'"${line/+( )$/}" - echo + echo $'\t'"${line/+( )$/}"$'\n' done fi -if [ -n "$quit" ] -then - closeDatabase - exit -fi - for destination in "${!destinationpath[@]}" do echo ' @@ -909,7 +904,7 @@ do "${destinationfat32compat["$destination"]}," \ " ascii=" \ "${destinationascii["$destination"]}" \ - "WHERE id=$destfileid;" \ + "WHERE id=$destfileid;" \ >&3 if (( commit )) then @@ -922,9 +917,10 @@ do (( textunidecodeneeded )) && eval exec "${toascii[1]}>&-" echo 'COMMIT;' >&3 (( cron )) || echo -n $'\r' - echo -n "$destination: Renamed ${changedcount:-0} files" + (( changedcount )) \ + && echo -n "$destination: Renamed $changedcount files" (( cron )) || echo -en "\033[K" - echo + (( changedcount )) && echo fi unset count changedcount renamefiles done @@ -945,7 +941,7 @@ echo ' SELECT "AtOM:NoMoreFiles"; ' >&3 -(( cron )) || echo -n 'Removing obsolete files... ' +(( cron )) || echo -n 'Removing obsolete files...'$'\033[K' lines=() read -u4 line while [[ $line != AtOM:NoMoreFiles ]] @@ -972,11 +968,12 @@ do done echo 'COMMIT;' >&3 (( cron )) || echo -n $'\r' -echo -n "Removed ${count:-0} obsolete files." +(( count )) \ +&& echo -n "Removed $count obsolete files." (( cron )) || echo -en "\033[K" -echo +(( count )) && echo -echo "Purging empty directories." +(( debug )) && echo "Purging empty directories..." for path in "${destinationpath[@]}" do find "$path" -type d -empty -delete diff --git a/lib/copy/action b/lib/copy/action index 63e7d75..623d148 100644 --- a/lib/copy/action +++ b/lib/copy/action @@ -1,6 +1,6 @@ #!/bin/bash copyFiles_action() { - (( cron )) || echo -n "Copying files... " + (( cron )) || echo -n $'Copying files...\033[K' echo ' SELECT source_files.filename, @@ -79,15 +79,29 @@ copyFiles_action() { fi fi fi - if cp -al "$sourcepath/$sourcefilename" "$destdir" 2>/dev/null\ - || cp -a "$sourcepath/$sourcefilename" "$destdir" + if cp -a --reflink=always \ + "$sourcepath/$sourcefilename" \ + "$destdir" \ + 2>/dev/null \ + || cp -al \ + "$sourcepath/$sourcefilename" \ + "$destdir" \ + 2>/dev/null \ + || cp -a \ + "$sourcepath/$sourcefilename" \ + "$destdir" then Update destination_files \ - filename "$destdir/${sourcefilename##*/}"\ - rename_pattern "${destinationrenamepath[$destination]}/${destinationrename[$destination]}"\ - fat32compat ${destinationfat32compat["$destination"]}\ - ascii ${destinationascii["$destination"]}\ - last_change $lastchange \ + filename \ + "$destdir/${sourcefilename##*/}"\ + rename_pattern \ + "${destinationrenamepath[$destination]}/${destinationrename[$destination]}"\ + fat32compat \ + ${destinationfat32compat["$destination"]}\ + ascii \ + ${destinationascii["$destination"]}\ + last_change \ + $lastchange \ <<-EOWhere id = $destfileid EOWhere @@ -98,12 +112,12 @@ copyFiles_action() { if (( count )) then (( cron )) || echo -n $'\r' - echo -n "Copied ${done:-0} of $count" \ - "files${postponed+ ($postponed postponed)}." + echo -n "Copied ${done:-0} of $count" \ + "files${postponed+ ($postponed postponed)}." (( cron )) || echo -en "\033[K" echo else - (( cron )) || echo -e "\rNothing to copy.\033[K" + (( cron )) || echo -n $'\r\033[K' fi unset count done } diff --git a/lib/files/getFiles b/lib/files/getFiles index 72a21d8..8dae04f 100644 --- a/lib/files/getFiles +++ b/lib/files/getFiles @@ -67,6 +67,10 @@ getFiles() { ) echo 'COMMIT;' >&3 (( cron )) || echo -n $'\r' - echo "${count:-0} files found, ${new:=0} new or changed."$'\033[K' + if (( count )) + then + echo "$count files found${new:+, $new new or changed}." \ + $'\033[K' + fi unset count } diff --git a/lib/tags/update b/lib/tags/update index 25fef11..3286e26 100644 --- a/lib/tags/update +++ b/lib/tags/update @@ -206,8 +206,8 @@ echo ' done echo 'COMMIT;' >&3 (( cron )) || echo -n $'\r' - echo -n "Read tags from ${count:-0} files." - (( cron )) || echo -ne "\033[K" - echo + (( count )) && echo -n "Read tags from $count files." + (( cron )) || echo -n $'\033[K' + (( count )) && echo unset count tagfiles }