diff --git a/gitattributesdb b/gitattributesdb index 987750d..c35886c 100755 --- a/gitattributesdb +++ b/gitattributesdb @@ -4,6 +4,8 @@ # Darren 'Tadgy' Austin # Licensed under the terms of the GNU General Public License version 3. +# shellcheck disable=SC2317 + # Defaults. DB_FILE=".gitattributesdb" # Database file, relative to the repository root. DB_EXTRA=".gitattributesdb-extra" # List of base64 encoded paths (one per line) to also store/restore attributes for. @@ -173,7 +175,7 @@ store_attributes() { # Function to restore path attributes from the database. restore_attributes() { - local COUNT=0 ID PATHNAME PREV_WARN=0 WARN=0 + local COUNT=0 ID FMT PATHNAME PREV_WARN=0 WARN=0 # Informational message. log "Restoring path attributes from database" @@ -209,11 +211,16 @@ restore_attributes() { # Restore {a,m}times (and ACLs on Linux). if [[ "$PLATFORM" == "Linux" ]]; then - touch -m -d "$(date -d "@${DB_MTIMES[$ID]}" +'%Y-%m-%d %H:%M:%S.%N' 2>/dev/null)0" -- "$PATHNAME" 2>/dev/null || { + # BusyBox touch doesn't support nanosecond accuracy, so work around it. + FMT="%Y-%m-%d %H:%M:%S" + touch --help 2>&1 | grep BusyBox >/dev/null 2>&1 || { + FMT+=".%N" + } + touch -m -d "$(date -d "@${DB_MTIMES[$ID]}" +"$FMT" 2>/dev/null)" -- "$PATHNAME" 2>/dev/null || { warn "Failed to restore mtime: $PATHNAME" (( WARN++ )) } - touch -a -d "$(date -d "@${DB_ATIMES[$ID]}" +'%Y-%m-%d %H:%M:%S.%N' 2>/dev/null)0" -- "$PATHNAME" 2>/dev/null || { + touch -a -d "$(date -d "@${DB_ATIMES[$ID]}" +"$FMT" 2>/dev/null)" -- "$PATHNAME" 2>/dev/null || { warn "Failed to restore atime: $PATHNAME" (( WARN++ )) }