]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/net/kubed.el (kubed-define-resource): Simplify a bit
authorEshel Yaron <me@eshelyaron.com>
Sat, 27 Jul 2024 20:02:30 +0000 (22:02 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sat, 27 Jul 2024 20:02:30 +0000 (22:02 +0200)
lisp/net/kubed.el

index 6e8f0cf2088a47f5604f571bce6771ced2ad027c..e59810bcc55872421ea41f38d953dac9e406e074 100644 (file)
@@ -428,40 +428,35 @@ of %S, instead of just one." resource plrl-var)
 Optional argument DEFAULT is the minibuffer default argument." resource)
          (,read-fun prompt default t))
 
-       ,(if namespaced
-            `(defun ,desc-fun (,resource &optional k8sns)
-               ,(format "Return buffer describing Kubernetes %S %s"
-                        resource (upcase (symbol-name resource)))
-               (let ((buf (get-buffer-create ,buf-name)))
-                 (with-current-buffer buf
-                   (let ((inhibit-read-only t))
-                     (erase-buffer)
-                     (unless (zerop
-                              (call-process
-                               kubed-kubectl-program nil ,buf-name t "get"
-                               (if k8sns
-                                   (concat "--namespace=" k8sns)
-                                 "--all-namespaces=false")
-                               ,(symbol-name resource) "--output=yaml" ,resource))
-                       (error ,(format "`kubectl get %S' failed" resource))))
-                   (goto-char (point-min))
-                   (run-hooks 'kubed-yaml-setup-hook))
-                 buf))
-          `(defun ,desc-fun (,resource)
-             ,(format "Return buffer with description of Kubernetes %S %s"
-                      resource (upcase (symbol-name resource)))
-             (let ((buf (get-buffer-create ,buf-name)))
-               (with-current-buffer buf
-                 (let ((inhibit-read-only t))
-                   (erase-buffer)
-                   (unless (zerop
-                            (call-process
-                             kubed-kubectl-program nil ,buf-name t "get"
-                             ,(symbol-name resource) "--output=yaml" ,resource))
-                     (error ,(format "`kubectl get %S' failed" resource))))
-                 (goto-char (point-min))
-                 (run-hooks 'kubed-yaml-setup-hook))
-               buf)))
+       (defun ,desc-fun (,resource . ,(when namespaced '(&optional k8sns)))
+         ,(format "Return buffer describing Kubernetes %S %s"
+                  resource (upcase (symbol-name resource)))
+         (let* ((buf (get-buffer-create ,buf-name))
+                (fun (lambda (&optional _ _)
+                       (let ((inhibit-read-only t)
+                             (target (current-buffer)))
+                         (buffer-disable-undo)
+                         (with-temp-buffer
+                           (unless (zerop
+                                    (call-process
+                                     kubed-kubectl-program nil t nil "get"
+                                     ,(symbol-name resource) "--output=yaml" ,resource
+                                     . ,(when namespaced
+                                          '((if k8sns
+                                                (concat "--namespace=" k8sns)
+                                              "--all-namespaces=false")))))
+                             (error ,(format "`kubectl get %S' failed" resource)))
+                           (let ((source (current-buffer)))
+                             (with-current-buffer target
+                               (replace-buffer-contents source)
+                               (set-buffer-modified-p nil)
+                               (buffer-enable-undo))))))))
+           (with-current-buffer buf
+             (funcall fun)
+             (goto-char (point-min))
+             (run-hooks 'kubed-yaml-setup-hook)
+             (setq-local revert-buffer-function fun))
+           buf))
 
        ,(when namespaced
           `(defun ,read-nms (prompt &optional default multi)
@@ -487,19 +482,15 @@ Optional argument DEFAULT is the minibuffer default argument." resource)
                                    (ensure-list choice))))
                (if multi split (car split)))))
 
-       ,(if namespaced
-            `(defun ,dsp-name (,resource &optional k8sns)
-               ,(format "Display Kubernetes %S %s."
-                        resource (upcase (symbol-name resource)))
-               (interactive (if kubed-all-namespaces-mode
+       (defun ,dsp-name (,resource . ,(when namespaced '(&optional k8sns)))
+         ,(format "Display Kubernetes %S %s."
+                  resource (upcase (symbol-name resource)))
+         (interactive ,(if namespaced
+                           `(if kubed-all-namespaces-mode
                                 (,read-nms "Display")
-                              (list (,read-fun "Display"))))
-               (display-buffer (,desc-fun ,resource k8sns)))
-          `(defun ,dsp-name (,resource)
-             ,(format "Display Kubernetes %S %s."
-                      resource (upcase (symbol-name resource)))
-             (interactive (list (,read-fun "Display")))
-             (display-buffer (,desc-fun ,resource))))
+                              (list (,read-fun "Display")))
+                         `(list (,read-fun "Display"))))
+         (display-buffer (,desc-fun ,resource . ,(when namespaced '(k8sns)))))
 
        (add-hook 'kubed-update-hook #',updt-cmd)
 
@@ -509,33 +500,25 @@ Optional argument DEFAULT is the minibuffer default argument." resource)
                        (setq ,list-var nil)
                        (,updt-cmd))))
 
-       ,(if namespaced
-            `(defun ,edt-name (,resource &optional k8sns)
-               ,(format "Edit Kubernetes %S %s."
-                        resource (upcase (symbol-name resource)))
-               (interactive (if kubed-all-namespaces-mode
+       (defun ,edt-name (,resource . ,(when namespaced '(&optional k8sns)))
+         ,(format "Edit Kubernetes %S %s."
+                  resource (upcase (symbol-name resource)))
+         (interactive ,(if namespaced
+                           `(if kubed-all-namespaces-mode
                                 (,read-nms "Edit")
-                              (list (,read-fun "Edit"))))
-               (unless (bound-and-true-p server-process) (server-start))
-               (let ((process-environment
-                      (cons (concat "KUBE_EDITOR=" emacsclient-program-name)
-                            process-environment)))
-                 (start-process ,(format "*kubed-%S-edit*" plrl-var) nil
-                                kubed-kubectl-program "edit"
-                                (if k8sns
-                                    (concat "--namespace=" k8sns)
-                                  "-o=yaml")
-                                ,(symbol-name resource) ,resource)))
-          `(defun ,edt-name (,resource)
-             ,(format "Edit Kubernetes %S %s." resource (upcase (symbol-name resource)))
-             (interactive (list (,read-fun "Edit")))
-             (unless (bound-and-true-p server-process) (server-start))
-             (let ((process-environment
-                    (cons (concat "KUBE_EDITOR=" emacsclient-program-name)
-                          process-environment)))
-               (start-process ,(format "*kubed-%S-edit*" plrl-var) nil
-                              kubed-kubectl-program "edit"
-                              ,(symbol-name resource) ,resource))))
+                              (list (,read-fun "Edit")))
+                         `(list (,read-fun "Edit"))))
+         (unless (bound-and-true-p server-process) (server-start))
+         (let ((process-environment
+                (cons (concat "KUBE_EDITOR=" emacsclient-program-name)
+                      process-environment)))
+           (start-process ,(format "*kubed-%S-edit*" plrl-var) nil
+                          kubed-kubectl-program "edit"
+                          ,(symbol-name resource) ,resource
+                          . ,(when namespaced
+                               `((if k8sns
+                                     (concat "--namespace=" k8sns)
+                                   "-o=yaml"))))))
 
        ,(if namespaced
             `(defun ,dlt-name (,plrl-var)