]> git.eshelyaron.com Git - emacs.git/commitdiff
Port tramp-adb to various 'touch' platforms
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 16 Feb 2019 08:27:53 +0000 (09:27 +0100)
committerMichael Albinus <michael.albinus@gmx.de>
Sat, 16 Feb 2019 08:27:53 +0000 (09:27 +0100)
* lisp/net/tramp-adb.el (tramp-adb-handle-set-file-times):
Try nanoseconds first, then plain seconds, then touch -t.

lisp/net/tramp-adb.el

index 22f2c5f6bf1410851a5d0831b7e085acf1dbcf42..4fba4e14f3ab099145143a010282d02ecb5255e0 100644 (file)
@@ -677,11 +677,22 @@ But handle the case, if the \"test\" command is not available."
                        (tramp-compat-time-equal-p time tramp-time-doesnt-exist)
                        (tramp-compat-time-equal-p time tramp-time-dont-know))
                    (current-time)
-                 time)))
+                 time))
+         (quoted-name (tramp-shell-quote-argument localname)))
+      ;; Older versions of toybox 'touch' mishandle nanoseconds and/or
+      ;; trailing "Z", so fall back on plain seconds if nanoseconds+Z
+      ;; fails.  Also, fall back on old POSIX 'touch -t' if 'touch -d'
+      ;; (introduced in POSIX.1-2008) fails.
       (tramp-adb-send-command-and-check
-       v (format "touch -d %s %s"
+       v (format (concat "touch -d %s %s 2>/dev/null || "
+                        "touch -d %s %s 2>/dev/null || "
+                        "touch -t %s %s")
+                (format-time-string "%Y-%m-%dT%H:%M:%S.%NZ" time t)
+                quoted-name
                 (format-time-string "%Y-%m-%dT%H:%M:%S" time t)
-                (tramp-shell-quote-argument localname))))))
+                quoted-name
+                (format-time-string "%Y%m%d%H%M.%S" time t)
+                quoted-name)))))
 
 (defun tramp-adb-handle-copy-file
   (filename newname &optional ok-if-already-exists keep-date