Compare commits

...

10 Commits

Author SHA1 Message Date
Vincent Riquer
de63477ede small fixes 2025-11-10 00:57:37 +01:00
Vincent Riquer
3c8e0241b1 updateTags: Refactor progress info 2025-11-10 00:57:37 +01:00
Vincent Riquer
3a4e43475a getFiles: Refactor progress info 2025-11-10 00:57:37 +01:00
Vincent Riquer
e50bf63f16 copyFiles_action: Refactor progress info 2025-11-10 00:57:37 +01:00
Vincent Riquer
c5ad92f587 atom: Refactor progress info 2025-11-10 00:57:37 +01:00
ScriptFanix
1d8ef90968 Revert "Merge branch '27-script-is-uselessly-verbose' into 'dev'"
This reverts merge request !34
2025-11-10 00:53:37 +01:00
ScriptFanix
a44fc069fe Merge branch '29-many-error-codes-are-not-defined' into 'dev'
Use predictable exit codes

Resolve "Many error codes are not defined"

See merge request atom/AtOM!35
2025-11-09 06:56:37 +01:00
ScriptFanix
6e1a85199c Resolve "Many error codes are not defined" 2025-11-09 06:56:37 +01:00
ScriptFanix
cb64b5749c Merge branch '27-script-is-uselessly-verbose' into 'dev'
Resolve "Script is uselessly verbose"

See merge request atom/AtOM!34
2025-11-09 06:18:26 +01:00
ScriptFanix
fb35fea3e0 Resolve "Script is uselessly verbose" 2025-11-09 06:18:26 +01:00
14 changed files with 207 additions and 157 deletions

127
atom
View File

@ -1,15 +1,17 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
# General config errors [10-19]
ELOAD=10
EINTERVAL=11
ENOCFG=19
# Source cofig errors [20-29]
# Destination config errors [30-49]
EFORMAT=30
ECHANNEL=31
EFMTINVPARM=49
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
@ -36,21 +38,11 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob
source $SHAREDIR/id3genres
source "$SHAREDIR"/id3genres
for function in "$LIBDIR"/*/*
do
@ -125,12 +117,12 @@ do
:)
echo "-$OPTARG requires an argument"
help
exit 127
exit $EINVARG
;;
*)
echo "Unrecognized option: -$OPTARG"
help
exit 127
exit $EINVARG
;;
esac
done
@ -239,8 +231,8 @@ do
done
done
deleted=0
removed=0
unset deleted
unset removed
echo 'BEGIN TRANSACTION;' >&3
for id in ${!removefile[@]}
do
@ -264,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
@ -280,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
@ -449,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
@ -555,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]}>&-"
@ -571,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 ))
@ -585,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 ))
@ -603,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)
/
@ -648,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"\
@ -669,7 +655,7 @@ do
${minutes:-0} \
${seconds:-0} \
${avgdsec:-0}.${avgdmsec:-0}
if (( pause ))
if ! (( concurrency )) && ! (( cron ))
then
if (( active ))
then
@ -684,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
-
@ -707,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'
@ -793,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 '
@ -917,7 +904,7 @@ do
"${destinationfat32compat["$destination"]}," \
" ascii=" \
"${destinationascii["$destination"]}" \
"WHERE id=$destfileid;" \
"WHERE id=$destfileid;" \
>&3
if (( commit ))
then
@ -930,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
@ -953,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 ]]
@ -980,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

View File

@ -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
}

View File

@ -18,7 +18,7 @@ checkDatabaseVersion() {
echo "Database schema version $dbversion is higher than
that of this version of AtOM
($currentdbversion). Bailing out." >&2
exit 1
exit $EDBVERSION
fi
else
Insert atom 1 <<<"version $currentdbversion"

View File

@ -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
}

View File

@ -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
}

View File

@ -220,7 +220,7 @@ master() {
echo "Waiting for children to come back home..."
wait
echo $'\nGood luck!'
exit 1
exit $ETASKLEFT
elif (( ready == 0 ))
then
sleep 0.1

24
share/errorcodes Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
## Define exit codes
# General config errors [10-19]
EDBVERSION=10
ELOAD=11
EINTERVAL=12
ELOAD=13
EIONICE=14
ENOCFG=19
# Source cofig errors [20-29]
# Destination config errors [30-49]
EFORMAT=30
ECHANNEL=31
EQUALITY=32
EMAXBPS=33
EINVDEST=34
EFMTINVPARM=49
# Tasks
ETASKLEFT=50
# Sanity
ESANITY=60
# Invalid arguments
EINVARG=127

View File

@ -8,6 +8,19 @@ EOWarn
read -p "Press Enter to continue or Ctrl-C to abort"
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -30,16 +43,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,5 +1,18 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -22,16 +35,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,5 +1,18 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -22,16 +35,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,5 +1,18 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -22,16 +35,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,6 +1,17 @@
#!/usr/bin/env bash
#!/bin/bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
@ -24,16 +35,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,5 +1,18 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -22,16 +35,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob

View File

@ -1,5 +1,18 @@
#!/usr/bin/env bash
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
## Define exit codes
source "$SHAREDIR"/errorcodes
# config structures
declare -A \
destinationchannels \
@ -23,16 +36,6 @@ declare -A \
exit $EBASHVERS
}
declare -r \
DOCDIR=%DOCDIR% \
LIBDIR=%LIBDIR% \
SHAREDIR=%SHAREDIR%
declare -r \
exampleconf=$DOCDIR/example.cfg \
schema=$SHAREDIR/schema.sql \
\
oldIFS="$IFS"
LC_ALL=C
shopt -s extglob