branch: externals/dtache
commit c57f57a49e46abdb802868f10069021b0cf200d3
Author: Niklas Eklund <niklas.ekl...@posteo.net>
Commit: Niklas Eklund <niklas.ekl...@posteo.net>

    Update host property
    
    This patch updates the host property to a property list instead of
    just a name. The name of the localhost is therefore not shown as
    localhost anymore but as its real name.
    
    This patch can potentially break user configurations if they have
    customized the dtache-annotation-format.
---
 README.org          |  2 +-
 dtache-consult.el   | 26 ++++++++++++--------------
 dtache-eshell.el    |  4 ++--
 dtache-shell.el     |  4 ++--
 dtache.el           | 41 +++++++++++++++++++++++------------------
 test/dtache-test.el | 29 ++++++++++++++++-------------
 6 files changed, 56 insertions(+), 50 deletions(-)

diff --git a/README.org b/README.org
index d49eb98337..1df5519e32 100644
--- a/README.org
+++ b/README.org
@@ -274,7 +274,7 @@ Users can customize the appearance of annotations in 
=dtache-open-session= by mo
   (defvar dtache-annotation-format
     `((:width 3 :function dtache--state-str :face dtache-state-face)
       (:width 3 :function dtache--status-str :face dtache-failure-face)
-      (:width 10 :function dtache--session-host :face dtache-host-face)
+      (:width 10 :function dtache--host-str :face dtache-host-face)
       (:width 40 :function dtache--working-dir-str :face 
dtache-working-dir-face)
       (:width 30 :function dtache--metadata-str :face dtache-metadata-face)
       (:width 10 :function dtache--duration-str :face dtache-duration-face)
diff --git a/dtache-consult.el b/dtache-consult.el
index 8550d4fd15..0eefdfce7c 100644
--- a/dtache-consult.el
+++ b/dtache-consult.el
@@ -126,12 +126,11 @@ See `consult-multi' for a description of the source 
values."
     :action (lambda (x) (dtache-open-session (dtache--decode-session x)))
     :items
     ,(lambda ()
-       (let ((host "localhost"))
-         (mapcar #'car
-                 (seq-filter
-                  (lambda (x)
-                    (string= (dtache--session-host (cdr x)) host))
-                  (dtache-session-candidates (dtache-get-sessions))))))
+       (mapcar #'car
+               (seq-filter
+                (lambda (x)
+                  (eq 'local (plist-get (dtache--session-host (cdr x)) :type)))
+                (dtache-session-candidates (dtache-get-sessions)))))
     "Local host `dtache' sessions as a source for `consult'."))
 
 (defvar dtache-consult--source-remote-session
@@ -142,12 +141,11 @@ See `consult-multi' for a description of the source 
values."
     :action (lambda (x) (dtache-open-session (dtache--decode-session x)))
     :items
     ,(lambda ()
-       (let ((host "localhost"))
-         (mapcar #'car
-                 (seq-remove
-                  (lambda (x)
-                    (string= (dtache--session-host (cdr x)) host))
-                  (dtache-session-candidates (dtache-get-sessions)))))))
+       (mapcar #'car
+               (seq-filter
+                (lambda (x)
+                  (eq 'remote (plist-get (dtache--session-host (cdr x)) 
:type)))
+                (dtache-session-candidates (dtache-get-sessions))))))
   "Remote host `dtache' sessions as a source for `consult'.")
 
 (defvar dtache-consult--source-current-session
@@ -158,10 +156,10 @@ See `consult-multi' for a description of the source 
values."
     :action (lambda (x) (dtache-open-session (dtache--decode-session x)))
     :items
     ,(lambda ()
-       (let ((host (dtache--host)))
+       (let ((host-name (plist-get (dtache--host) :name)))
          (mapcar #'car (seq-filter
                         (lambda (x)
-                          (string= (dtache--session-host (cdr x)) host))
+                          (string= (plist-get (dtache--session-host (cdr x)) 
:name) host-name))
                         (dtache-session-candidates (dtache-get-sessions)))))))
   "Current host `dtache' sessions as a source for `consult'.")
 
diff --git a/dtache-eshell.el b/dtache-eshell.el
index 1f4e09dd9a..160432f51c 100644
--- a/dtache-eshell.el
+++ b/dtache-eshell.el
@@ -51,11 +51,11 @@
 
 (defun dtache-eshell-select-session ()
   "Return selected session."
-  (let* ((current-host (dtache--host))
+  (let* ((host-name (plist-get (dtache--host) :name))
          (sessions
           (thread-last (dtache-get-sessions)
                        (seq-filter (lambda (it)
-                                     (string= (dtache--session-host it) 
current-host)))
+                                     (string= (plist-get (dtache--session-host 
it) :name) host-name)))
                        (seq-filter #'dtache--determine-session-state))))
     (dtache-completing-read sessions)))
 
diff --git a/dtache-shell.el b/dtache-shell.el
index c560be4f55..6bb6fbaed2 100644
--- a/dtache-shell.el
+++ b/dtache-shell.el
@@ -53,11 +53,11 @@
 
 (defun dtache-shell-select-session ()
   "Return selected session."
-  (let* ((current-host (dtache--host))
+  (let* ((host-name (plist-get (dtache--host) :name))
          (sessions
           (thread-last (dtache-get-sessions)
                        (seq-filter (lambda (it)
-                                     (string= (dtache--session-host it) 
current-host)))
+                                     (string= (plist-get (dtache--session-host 
it) :name) host-name)))
                        (seq-filter (lambda (it) (eq 'active 
(dtache--determine-session-state it)))))))
     (dtache-completing-read sessions)))
 
diff --git a/dtache.el b/dtache.el
index 2ada2599db..73d6e97351 100644
--- a/dtache.el
+++ b/dtache.el
@@ -83,7 +83,7 @@
 (defcustom dtache-annotation-format
   '((:width 3 :function dtache--state-str :face dtache-state-face)
     (:width 3 :function dtache--status-str :face dtache-failure-face)
-    (:width 10 :function dtache--session-host :face dtache-host-face)
+    (:width 10 :function dtache--host-str :face dtache-host-face)
     (:width 40 :function dtache--working-dir-str :face dtache-working-dir-face)
     (:width 30 :function dtache--metadata-str :face dtache-metadata-face)
     (:width 10 :function dtache--duration-str :face dtache-duration-face)
@@ -139,7 +139,7 @@ Valid values are: create, new and attach")
 (defvar dtache-metadata-annotators-alist nil
   "An alist of annotators for metadata.")
 
-(defconst dtache-session-version "0.3.1"
+(defconst dtache-session-version "0.3.2"
   "The version of `dtache-session'.
 This version is encoded as [package-version].[revision].")
 
@@ -489,11 +489,11 @@ compilation or `shell-command' the command will also kill 
the window."
 (defun dtache-delete-sessions (&optional all-hosts)
   "Delete `dtache' sessions on current host, unless ALL-HOSTS."
   (interactive "P")
-  (let* ((host (dtache--host))
+  (let* ((host-name (plist-get (dtache--host) :name))
          (sessions (if all-hosts
                        (dtache-get-sessions)
                      (seq-filter (lambda (it)
-                                   (string= (dtache--session-host it) host))
+                                   (string= (plist-get (dtache--session-host 
it) :name) host-name))
                                  (dtache-get-sessions)))))
     (seq-do #'dtache--db-remove-entry sessions)))
 
@@ -588,12 +588,12 @@ Optionally SUPPRESS-OUTPUT."
     (dtache--db-initialize)
     (seq-do (lambda (session)
               ;; Remove missing local sessions
-              (if (and (string= "localhost" (dtache--session-host session))
+              (if (and (eq 'local (plist-get (dtache--session-host session) 
:type))
                        (dtache--session-missing-p session))
                   (dtache--db-remove-entry session)
 
                 ;; Update local active sessions
-                (when (and (string= "localhost" (dtache--session-host session))
+                (when (and (eq 'local (plist-get (dtache--session-host 
session) :type))
                            (eq 'active (dtache--session-state session)))
                   (dtache--update-session session))))
             (dtache--db-get-sessions))
@@ -619,7 +619,7 @@ If session is not valid trigger an automatic cleanup on 
SESSION's host."
     (if (not (dtache--session-missing-p session))
         t
       (let ((host (dtache--session-host session)))
-        (message "Session does not exist. Initiate sesion cleanup on host %s" 
host)
+        (message "Session does not exist. Initiate sesion cleanup on host %s" 
(plist-get host :name))
         (dtache--cleanup-host-sessions host)
         nil))))
 
@@ -804,7 +804,7 @@ Optionally CONCAT the command return command into a string."
    #'identity
    `(,(format "Command: %s" (dtache--session-command session))
      ,(format "Working directory: %s" (dtache--working-dir-str session))
-     ,(format "Host: %s" (dtache--session-host session))
+     ,(format "Host: %s" (plist-get (dtache--session-host session) :name))
      ,(format "Id: %s" (symbol-name (dtache--session-id session)))
      ,(format "Status: %s" (dtache--session-status session))
      ,(format "Metadata: %s" (dtache--metadata-str session))
@@ -836,10 +836,10 @@ Optionally CONCAT the command return command into a 
string."
   "Update `dtache' sessions.
 
 Sessions running on  current host or localhost are updated."
-  (let ((current-host (dtache--host)))
+  (let ((host-name (plist-get (dtache--host) :name)))
     (seq-do (lambda (it)
-              (if (and (or (string= current-host (dtache--session-host it))
-                           (string= "localhost" (dtache--session-host it)))
+              (if (and (or (string= host-name (plist-get (dtache--session-host 
it) :name))
+                           (eq 'local (plist-get (dtache--session-host it) 
:name)))
                        (or (eq 'active (dtache--session-state it))
                            (dtache--state-transition-p it)))
                   (dtache--update-session it)))
@@ -879,10 +879,11 @@ Optionally make the path LOCAL to host."
 
 (defun dtache--cleanup-host-sessions (host)
   "Run cleanuup on HOST sessions."
-  (thread-last (dtache--db-get-sessions)
-               (seq-filter (lambda (it) (string= host (dtache--session-host 
it))))
-               (seq-filter #'dtache--session-missing-p)
-               (seq-do #'dtache--db-remove-entry)))
+  (let ((host-name (plist-get host :name)))
+    (thread-last (dtache--db-get-sessions)
+                 (seq-filter (lambda (it) (string= host-name (plist-get 
(dtache--session-host it) :name))))
+                 (seq-filter #'dtache--session-missing-p)
+                 (seq-do #'dtache--db-remove-entry))))
 
 (defun dtache--session-output (session)
   "Return content of SESSION's output."
@@ -1050,9 +1051,9 @@ If SESSION is nonattachable fallback to a command that 
doesn't rely on tee."
 
 (defun dtache--host ()
   "Return name of host."
-  (or
-   (file-remote-p default-directory 'host)
-   "localhost"))
+  (let ((remote (file-remote-p default-directory)))
+    `(:type ,(if remote 'remote 'local)
+            :name ,(if remote (file-remote-p default-directory 'host) 
(system-name)))))
 
 (defun dtache--update-session-time (session &optional approximate)
   "Update SESSION's time property.
@@ -1187,6 +1188,10 @@ session and trigger a state transition."
         (string-remove-prefix remote working-directory)
       working-directory)))
 
+(defun dtache--host-str (session)
+  "Return host name of SESSION."
+  (plist-get (dtache--session-host session) :name))
+
 ;;;; Minor modes
 
 ;;;###autoload
diff --git a/test/dtache-test.el b/test/dtache-test.el
index 2534647c5f..ae0e91b96c 100644
--- a/test/dtache-test.el
+++ b/test/dtache-test.el
@@ -46,6 +46,7 @@
   "Create session with COMMAND running on HOST."
   (cl-letf* (((symbol-function #'dtache--host) (lambda () host))
              ((symbol-function #'dtache-metadata) (lambda () nil))
+             ((symbol-function #'dtache--watch-session-directory) #'ignore)
              (session (dtache-create-session command)))
     (dtache-test--change-session-state session 'activate)
     session))
@@ -139,20 +140,21 @@
                       (dtache--session-create :command "12345678"))))))
 
 (ert-deftest dtache-test-host ()
-  (should (string= "localhost" (dtache--host)))
+  (cl-letf (((symbol-function #'system-name) (lambda () "localhost")))
+    (should (equal '(:type local :name "localhost") (dtache--host))))
   (let ((default-directory "/ssh:remotehost:/home/user/git"))
-    (should (string= "remotehost" (dtache--host)))))
+    (should (equal '(:type remote :name "remotehost") (dtache--host)))))
 
 (ert-deftest dtache-test-session-active-p ()
   (dtache-test--with-temp-database
-   (let ((session (dtache-test--create-session :command "foo" :host 
"localhost")))
+   (let ((session (dtache-test--create-session :command "foo" :host '(:type 
local :name "bar"))))
      (should (eq 'active (dtache--determine-session-state session)))
      (dtache-test--change-session-state session 'deactivate)
      (should (eq 'inactive (dtache--determine-session-state session))))))
 
 (ert-deftest dtache-test-session-dead-p ()
   (dtache-test--with-temp-database
-   (let ((session (dtache-test--create-session :command "foo" :host 
"localhost")))
+   (let ((session (dtache-test--create-session :command "foo" :host '(:type 
local :name "bar"))))
      (should (not (dtache--session-missing-p session)))
      (dtache-test--change-session-state session 'deactivate)
      (should (not (dtache--session-missing-p session)))
@@ -161,15 +163,16 @@
 
 (ert-deftest dtache-test-cleanup-host-sessions ()
   (dtache-test--with-temp-database
-   (cl-letf* ((session1 (dtache-test--create-session :command "foo" :host 
"remotehost"))
-              (session2 (dtache-test--create-session :command "bar" :host 
"localhost"))
-              (session3 (dtache-test--create-session :command "baz" :host 
"localhost"))
-              (host "localhost")
+   (cl-letf* ((session1 (dtache-test--create-session :command "foo" :host 
'(:type remote :name "remotehost")))
+              (session2 (dtache-test--create-session :command "bar" :host 
'(:type local :name "localhost")))
+              (session3 (dtache-test--create-session :command "baz" :host 
'(:type local :name "localhost")))
+              (host '(:type local :name "localhost"))
               ((symbol-function #'dtache--host) (lambda () host)))
      ;; One inactive, one missing, one active
      (dtache-test--change-session-state session1 'deactivate)
      (dtache-test--change-session-state session2 'kill)
      (dtache--cleanup-host-sessions host)
+     (dtache--db-get-sessions)
      (should (seq-set-equal-p
               (dtache--db-get-sessions)
               `(,session1 ,session3))))))
@@ -188,21 +191,21 @@
 
 (ert-deftest dtache-test-db-insert-session ()
   (dtache-test--with-temp-database
-   (let* ((session (dtache-test--create-session :command "foo" :host 
"localhost")))
+   (let* ((session (dtache-test--create-session :command "foo" :host '(:type 
local :name "localhost"))))
      (should (equal (dtache--db-get-sessions) `(,session))))))
 
 (ert-deftest dtache-test-db-remove-session ()
   (dtache-test--with-temp-database
-   (let* ((host "localhost")
-          (session1 (dtache-test--create-session :command "foo" :host host))
-          (session2 (dtache-test--create-session :command "bar" :host host)))
+   (let* ((host '(:type local :name "host"))
+          (session1 (dtache-test--create-session :command "foo" :host '(:type 
local :name "host")))
+          (session2 (dtache-test--create-session :command "bar" :host '(:type 
local :name "host"))))
      (should (seq-set-equal-p `(,session1 ,session2) 
(dtache--db-get-sessions)))
      (dtache--db-remove-entry session1)
      (should (seq-set-equal-p `(,session2) (dtache--db-get-sessions))))))
 
 (ert-deftest dtache-test-db-update-session ()
   (dtache-test--with-temp-database
-   (let* ((session (dtache-test--create-session :command "foo" :host 
"localhost"))
+   (let* ((session (dtache-test--create-session :command "foo" :host '(:type 
local :name "host")))
           (id (dtache--session-id session))
           (copy))
      (setq copy (copy-dtache-session session))

Reply via email to