Commit b88ef926ea60a9a670436205644b6a7e24599cf0

Thomas de Grivel 2018-07-10T12:41:24

linux

diff --git a/adams.asd b/adams.asd
index 8e064b3..391f660 100644
--- a/adams.asd
+++ b/adams.asd
@@ -62,6 +62,7 @@
 	    ((:file "commands")
 	     (:file "debian" :depends-on ("commands" "defs" "syntaxes"))
 	     (:file "defs")
+	     (:file "linux" :depends-on ("commands" "defs"))
 	     (:file "openbsd" :depends-on ("commands" "defs"))
 	     (:file "freebsd" :depends-on ("commands" "defs"))
 	     (:file "operations" :depends-on ("commands" "defs"))
diff --git a/unix/linux.lisp b/unix/linux.lisp
new file mode 100644
index 0000000..1727036
--- /dev/null
+++ b/unix/linux.lisp
@@ -0,0 +1,45 @@
+;;
+;;  adams  -  Remote system administration tools
+;;
+;;  Copyright 2013,2014 Thomas de Grivel <thomas@lowh.net>
+;;
+;;  Permission to use, copy, modify, and distribute this software for any
+;;  purpose with or without fee is hereby granted, provided that the above
+;;  copyright notice and this permission notice appear in all copies.
+;;
+;;  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;;  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;;  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;;  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;;  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;;  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;;  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;;
+
+(in-package :adams)
+
+(in-re-readtable)
+
+(define-syntax ls<1>-l--full-time (mode
+                                   (#'sh-parse-integer links)
+                                   owner
+                                   group
+                                   (#'sh-parse-integer size)
+                                   (#'chronicity:parse time)
+                                   name)
+  #~|^([-a-zA-Z]{10})\s+([0-9]+)\s+(\S+)\s+(\S+)\s+([0-9]+)\s+(\S+ \S+ \S+)\s+(.+)$|
+  "Syntax for `ls -l --full-time` output. See ls(1).")
+
+(defmethod probe-vnode-using-ls ((vnode vnode) (os os-linux))
+  (let ((id (resource-id vnode))
+        (ensure :absent))
+    (multiple-value-bind (mode links owner group size mtime)
+        (with-ls<1>-l--full-time (mode links owner group size mtime name)
+            (ls "-ld --full-time" id)
+          (when (and name (string= id (the string name)))
+            (setq mode (mode (mode-permissions mode))
+                  owner (resource 'user owner)
+                  group (resource 'group group)
+                  ensure :present)
+            (return (values mode links owner group size mtime))))
+      (properties* ensure mode links owner group size mtime))))