######################################################################### # The Android timestamp-bug showstopper -- until Oreo. # # Run on 2016's Android 7.0 (Nougat) to demo the former Android # timestamps copy bug that renders Mergeall unusable. # # This first session below copies a file to removable SD card from # USB drive in the Termux shell on Jan 5: content copies work correctly, # but timestamp copies fail (and use copy time for content-only copies). # File explorers simply ignore the timestamp-copy error (or worse, # don't even try to copy timestamps due to the Android bug). # # The second session below copies to internal storage (/sdcard), from # both internal storage and SD card (/storage) on Jan 31. Again, times # cannot be copied, and content-only copies simply use copy time. # # This longstanding Android bug made quick content syncs impossible. # In Mergeall, file updates on Android 7.0 and earlier copied content # correctly but failed to copy modtimes, with errors in the logfile # (the actual error was generated in Python's shutil.copystat()). # This meant that copied files were always out of sync in later runs. # # Happily, this was fixed as of 2017's Android Oreo, which is required # by the Mergeall system. Less happily, older Androids are widespread. # This bug also breaks calendar-file backups in the Frigcal program. ######################################################################### #------------------------------------------------------------------------ # Copy to SD card: content works, times use copy time or fail #------------------------------------------------------------------------ $ cp /storage/8BB9-1202/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html /storage/7FCC-16EC/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html $ cp -p /storage/8BB9-1202/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html /storage/7FCC-16EC/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html cp: can't preserve times of '/storage/7FCC-16EC/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html': Operation not permitted $ ls --full-time /storage/8BB9-1202/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html -rwxr-x--- 1 u0_a215 everybod 21629 2018-12-19 20:31:16 -0800 /storage/8BB9-1202/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html $ ls --full-time /storage/7FCC-16EC/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html -rwxr-x--- 1 u0_a215 everybod 21629 2019-01-05 06:49:46 -0800 /storage/7FCC-16EC/Android/data/com.termux/MY-STUFF/Websites/UNION/about-python.html #------------------------------------------------------------------------ # Copy to internal storage: content works, times use copy time or fail #------------------------------------------------------------------------ $ ls --full-time /sdcard/Download/composite.png -rw-rw---- 1 root everybod 2168778 2018-04-26 08:31:59 -0700 /sdcard/Download/composite.png $ ls --full-time /storage/5C32-5336/test.txt -rwxr-xr-x 1 root everybod 6 2019-01-20 11:18:34 -0800 /storage/5C32-5336/test.txt $ cp /sdcard/Download/composite.png /sdcard $ cp /storage/5C32-5336/test.txt /sdcard $ ls --full-time /sdcard/composite.png -rw-rw---- 1 root everybod 2168778 2019-01-31 06:22:09 -0800 /sdcard/composite.png $ ls --full-time /sdcard/test.txt -rw-rw---- 1 root everybod 6 2019-01-31 06:22:19 -0800 /sdcard/test.txt $ cp -p /sdcard/Download/composite.png /sdcard cp: can't preserve times of '/sdcard/composite.png': Operation not permitted cp: can't preserve ownership of '/sdcard/composite.png': Operation not permitted cp: can't preserve permissions of '/sdcard/composite.png': Operation not permitted $ cp -p /storage/5C32-5336/test.txt /sdcard cp: can't preserve times of '/sdcard/test.txt': Operation not permitted cp: can't preserve ownership of '/sdcard/test.txt': Operation not permitted cp: can't preserve permissions of '/sdcard/test.txt': Operation not permitted