mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Add Tramp distrobox method
* doc/misc/tramp.texi (Inline methods) <distrobox>: Add. * etc/NEWS: Mention Tramp distrobox method. * lisp/net/tramp-container.el (tramp-distrobox-program): New defcustom. (tramp-distrobox-method): New defconst. (tramp-distrobox--completion-function) (tramp-enable-distrobox-method): New defuns. (Bug#71200) (tramp-docker-method, tramp-dockercp-method) (tramp-podman-method, tramp-podmancp-method) (tramp-kubernetes-method, tramp-flatpak-method) (tramp-apptainer-method, tramp-nspawn-method): Adapt docstring. * test/lisp/net/tramp-tests.el (tramp--test-box-p): Rename from `tramp--test-toolbox-p'. Add distrobox. Adapt callees.
This commit is contained in:
parent
be9de8082e
commit
17c23a46c3
4 changed files with 99 additions and 27 deletions
|
|
@ -1005,15 +1005,19 @@ in a pod is used.
|
|||
This method does not support user names.
|
||||
|
||||
@item @option{toolbox}
|
||||
@item @option{distrobox}
|
||||
@cindex method @option{toolbox}
|
||||
@cindex @option{toolbox} method
|
||||
@cindex method @option{distrobox}
|
||||
@cindex @option{distrobox} method
|
||||
|
||||
Integration of Toolbox system containers. The host name may be either
|
||||
a container's name or ID, as returned by @samp{toolbox list -c}.
|
||||
Without a host name, the default Toolbox container for the host will
|
||||
be used.
|
||||
Integration of Toolbox or Distrobox system containers, respectively.
|
||||
The host name may be either a container's name or ID, as returned by
|
||||
@samp{toolbox list -c} or @samp{distrobox list}. Without a host name,
|
||||
the default Toolbox container for the host will be used. There is no
|
||||
such default for Distrobox.
|
||||
|
||||
This is an optional method, @pxref{Optional methods}. It does not
|
||||
These are optional methods, @pxref{Optional methods}. They do not
|
||||
support user names.
|
||||
|
||||
@item @option{flatpak}
|
||||
|
|
|
|||
13
etc/NEWS
13
etc/NEWS
|
|
@ -1079,7 +1079,7 @@ mode line. 'header' will display in the header line;
|
|||
+++
|
||||
*** New user option 'which-func-update-delay'.
|
||||
This replaces the user option 'idle-update-delay', which was previously
|
||||
used to control the delay before `which-function-mode` updated its
|
||||
used to control the delay before 'which-function-mode' updated its
|
||||
display. The user option 'idle-update-delay', which was only used by
|
||||
Which Function mode, is now obsolete.
|
||||
|
||||
|
|
@ -1108,10 +1108,11 @@ These are the external methods counterparts of "docker" and "podman".
|
|||
|
||||
+++
|
||||
*** New optional connection methods for containers.
|
||||
Tere are new optional connection methods "toolbox", "flatpak",
|
||||
"apptainer" and "nspawn". They allow accessing system containers
|
||||
provided by Toolbox, sandboxes provided by Flatpak, instances managed by
|
||||
Apptainer, or accessing systemd-based light-weight containers..
|
||||
There are new optional connection methods "toolbox", "distrobox",
|
||||
"flatpak", "apptainer" and "nspawn". They allow accessing system
|
||||
containers provided by Toolbox or Distrobox, sandboxes provided by
|
||||
Flatpak, instances managed by Apptainer, or accessing systemd-based
|
||||
light-weight containers..
|
||||
|
||||
+++
|
||||
*** Connection method "kubernetes" supports now optional container name.
|
||||
|
|
@ -2080,7 +2081,7 @@ and 'closure' is the common parent type of 'interpreted-function'
|
|||
and 'byte-code-function'.
|
||||
|
||||
Those new types come with the associated new predicates 'closurep' and
|
||||
`interpreted-function-p' as well as a new constructor
|
||||
'interpreted-function-p' as well as a new constructor
|
||||
'make-interpreted-closure'.
|
||||
|
||||
** New function 'help-fns-function-name'.
|
||||
|
|
|
|||
|
|
@ -76,6 +76,17 @@
|
|||
;;
|
||||
;;
|
||||
;;
|
||||
;; Open a file on an existing Distrobox container:
|
||||
;;
|
||||
;; C-x C-f /distrobox:CONTAINER:/path/to/file
|
||||
;;
|
||||
;; Where:
|
||||
;; CONTAINER is the container to connect to.
|
||||
;;
|
||||
;; If the container is not running, it is started.
|
||||
;;
|
||||
;;
|
||||
;;
|
||||
;; Open a file on a running Flatpak sandbox:
|
||||
;;
|
||||
;; C-x C-f /flatpak:SANDBOX:/path/to/file
|
||||
|
|
@ -153,6 +164,14 @@ If it is nil, the default context will be used."
|
|||
:type '(choice (const "toolbox")
|
||||
(string)))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defcustom tramp-distrobox-program "distrobox"
|
||||
"Name of the Distrobxx client program."
|
||||
:group 'tramp
|
||||
:version "30.1"
|
||||
:type '(choice (const "distrobox")
|
||||
(string)))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defcustom tramp-flatpak-program "flatpak"
|
||||
"Name of the Flatpak client program."
|
||||
|
|
@ -178,41 +197,45 @@ If it is nil, the default context will be used."
|
|||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-docker-method "docker"
|
||||
"Tramp method name to use to connect to Docker containers.")
|
||||
"Tramp method name to connect to Docker containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-dockercp-method "dockercp"
|
||||
"Tramp method name to use to connect to Docker containers.
|
||||
"Tramp method name to connect to Docker containers.
|
||||
This is for out-of-band connections.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-podman-method "podman"
|
||||
"Tramp method name to use to connect to Podman containers.")
|
||||
"Tramp method name to connect to Podman containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-podmancp-method "podmancp"
|
||||
"Tramp method name to use to connect to Podman containers.
|
||||
"Tramp method name to connect to Podman containers.
|
||||
This is for out-of-band connections.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-kubernetes-method "kubernetes"
|
||||
"Tramp method name to use to connect to Kubernetes containers.")
|
||||
"Tramp method name to connect to Kubernetes containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-toolbox-method "toolbox"
|
||||
"Tramp method name to use to connect to Toolbox containers.")
|
||||
"Tramp method name to connect to Toolbox containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-distrobox-method "distrobox"
|
||||
"Tramp method name to connect to Distrobox containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-flatpak-method "flatpak"
|
||||
"Tramp method name to use to connect to Flatpak sandboxes.")
|
||||
"Tramp method name to connect to Flatpak sandboxes.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-apptainer-method "apptainer"
|
||||
"Tramp method name to use to connect to Apptainer instances.")
|
||||
"Tramp method name to connect to Apptainer instances.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defconst tramp-nspawn-method "nspawn"
|
||||
"Tramp method name to use to connect to systemd-nspawn containers.")
|
||||
"Tramp method name to connect to systemd-nspawn containers.")
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defmacro tramp-skeleton-completion-function (method &rest body)
|
||||
|
|
@ -381,6 +404,7 @@ see its function help for a description of the format."
|
|||
(when-let ((raw-list (shell-command-to-string (concat program " list -c")))
|
||||
;; Ignore header line.
|
||||
(lines (cdr (split-string raw-list "\n" 'omit)))
|
||||
;; We do not show container IDs.
|
||||
(names (tramp-compat-seq-keep
|
||||
(lambda (line)
|
||||
(when (string-match
|
||||
|
|
@ -391,6 +415,28 @@ see its function help for a description of the format."
|
|||
lines)))
|
||||
(mapcar (lambda (name) (list nil name)) names))))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defun tramp-distrobox--completion-function (method)
|
||||
"List Distrobox containers available for connection.
|
||||
|
||||
This function is used by `tramp-set-completion-function', please
|
||||
see its function help for a description of the format."
|
||||
(tramp-skeleton-completion-function method
|
||||
(when-let ((raw-list (shell-command-to-string (concat program " list")))
|
||||
;; Ignore header line.
|
||||
(lines (cdr (split-string raw-list "\n" 'omit)))
|
||||
;; We do not show container IDs.
|
||||
(names (tramp-compat-seq-keep
|
||||
(lambda (line)
|
||||
(when (string-match
|
||||
(rx bol (1+ (not space))
|
||||
(1+ space) "|" (1+ space)
|
||||
(group (1+ (not space))) space)
|
||||
line)
|
||||
(match-string 1 line)))
|
||||
lines)))
|
||||
(mapcar (lambda (name) (list nil name)) names))))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defun tramp-flatpak--completion-function (method)
|
||||
"List Flatpak sandboxes available for connection.
|
||||
|
|
@ -595,6 +641,26 @@ see its function help for a description of the format."
|
|||
tramp-toolbox-method
|
||||
`((tramp-toolbox--completion-function ,tramp-toolbox-method))))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defun tramp-enable-distrobox-method ()
|
||||
"Enable connection to Distrobox containers."
|
||||
(add-to-list 'tramp-methods
|
||||
`(,tramp-distrobox-method
|
||||
(tramp-login-program ,tramp-distrobox-program)
|
||||
(tramp-login-args (("enter")
|
||||
("-n" "%h")
|
||||
("--" "%l")))
|
||||
;(tramp-direct-async (,tramp-default-remote-shell "-c"))
|
||||
(tramp-remote-shell ,tramp-default-remote-shell)
|
||||
(tramp-remote-shell-login ("-l"))
|
||||
(tramp-remote-shell-args ("-c"))))
|
||||
|
||||
(add-to-list 'tramp-completion-multi-hop-methods tramp-distrobox-method)
|
||||
|
||||
(tramp-set-completion-function
|
||||
tramp-distrobox-method
|
||||
`((tramp-distrobox--completion-function ,tramp-distrobox-method))))
|
||||
|
||||
;;;###tramp-autoload
|
||||
(defun tramp-enable-flatpak-method ()
|
||||
"Enable connection to Flatpak sandboxes."
|
||||
|
|
|
|||
|
|
@ -7071,6 +7071,13 @@ This is used in tests which we don't want to tag
|
|||
(not (and (tramp--test-adb-p)
|
||||
(string-match-p (rx multibyte) default-directory)))))
|
||||
|
||||
(defun tramp--test-box-p ()
|
||||
"Check, whether the toolbox or distrobox method is used.
|
||||
This does not support `tramp-test45-asynchronous-requests'."
|
||||
(string-match-p
|
||||
(rx bol (| "toolbox" "distrobox") eol)
|
||||
(file-remote-p ert-remote-temporary-file-directory 'method)))
|
||||
|
||||
(defun tramp--test-container-p ()
|
||||
"Check, whether a container method is used.
|
||||
This does not support some special file names."
|
||||
|
|
@ -7221,12 +7228,6 @@ This does not support special file names."
|
|||
(string-equal
|
||||
"telnet" (file-remote-p ert-remote-temporary-file-directory 'method)))
|
||||
|
||||
(defun tramp--test-toolbox-p ()
|
||||
"Check, whether the toolbox method is used.
|
||||
This does not support `tramp-test45-asynchronous-requests'."
|
||||
(string-equal
|
||||
"toolbox" (file-remote-p ert-remote-temporary-file-directory 'method)))
|
||||
|
||||
(defun tramp--test-windows-nt-p ()
|
||||
"Check, whether the locale host runs MS Windows."
|
||||
(eq system-type 'windows-nt))
|
||||
|
|
@ -7715,7 +7716,7 @@ process sentinels. They shall not disturb each other."
|
|||
(skip-unless (not (tramp--test-container-p)))
|
||||
(skip-unless (not (tramp--test-sshfs-p)))
|
||||
(skip-unless (not (tramp--test-telnet-p)))
|
||||
(skip-unless (not (tramp--test-toolbox-p)))
|
||||
(skip-unless (not (tramp--test-box-p)))
|
||||
(skip-unless (not (tramp--test-windows-nt-p)))
|
||||
|
||||
(with-timeout
|
||||
|
|
|
|||
Loading…
Reference in a new issue