[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Review wanted for method for accessing Mock chroots
From: |
Tim Landscheidt |
Subject: |
Re: Review wanted for method for accessing Mock chroots |
Date: |
Wed, 13 Mar 2024 10:09:41 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) |
Michael Albinus <michael.albinus@gmx.de> wrote:
>> Is there anything blatantly wrong/not backward-compatible/
>> not foreward-compatible about it? I saved on (customizable)
>> variables as it is hard to predict what other users might
>> want/need to change. Any advice is appreciated.
> Some few comments below.
> However: I don't know Mock chroots in detail, but it looks to me like it
> is something what could live in tramp-container.el. What do you think a bout?
It probably fits quite nicely, but due to my preference for
sticking to distribution packages, I'd need an interim solu-
tion until Emacs 30 makes its way to my system. :-)
> Here are some few comments from roughly scanning the code:
>> ;;; mock-tramp.el --- TRAMP integration for Mock chroots -*-
>> lexical-binding: t; -*-
> Tramp is spelled out “Tramp”. See the manual.
Ha! In "my" manual (2.5.4-pre) it is spelled "TRAMP" be-
cause 079625d3c618188fc76b89f8d942f0e7004d0312 was not com-
mitted yet. :-)
>> ;; Package-Requires: ((tramp "2.7.1-pre"))
> Why "2.7.1-pre"? This isn't a released version; I would depend on "2.7.1".
Because I copied the version string from the wrong file; I
changed it to "2.5.4-pre" (as that is what was and is
shipped on Fedora 38).
>> ;;;###autoload
>> (defcustom mock-tramp-method "mock"
>> "TRAMP method to connect to Mock chroots."
>> :type 'string
>> :group 'mock-tramp)
> You can keep the :group out; the last declared defgroup is taken by
> default.
Thanks.
>> ;;;###autoload
>> (defun mock-tramp--list-chroots (directory)
>> "Return a list of chroots defined in DIRECTORY.
> Why ;;;###autoload?
>> ;;;###autoload
>> (with-eval-after-load 'tramp
>> (add-to-list 'tramp-methods
> Same here.
To mimic docker-tramp's (IMHO sensible) behaviour:
Installing the package sets up the Tramp method.
>> (tramp-login-program "mock")
> I would declare and use `mock-tramp-program'.
I'd rather not. Mock is very specialized, and it is unlike-
ly that a regular user will ever want or need to change
tramp-login-program, but nothing else. If I introduce a
customization for this now, it is thus unlikely that is
(ever) used, but it takes screen/mental space nonetheless.
>> (tramp-login-args (("-r") ("%h")
>> ("--shell"
>> "--"
>> "/usr/bin/env"
>> "PROMPT_COMMAND="
>> "/bin/sh"
> I would use `tramp-default-remote-shell'.
>> "-l")))
>> (tramp-remote-shell "/bin/sh")
> Same here.
Thanks.
I have attached a new revision of the package.
Tim
;;; mock-tramp.el --- Tramp integration for Mock chroots -*- lexical-binding:
t; -*-
;; Copyright (C) 2024 Tim Landscheidt
;; Author: Tim Landscheidt <tim@tim-landscheidt.de>
;; Version: 1.0rc7
;; Package-Requires: ((tramp "2.5.4-pre"))
;; Keywords: comm, processes
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; This package provides a Tramp method to access Mock chroots
;; (https://rpm-software-management.github.io/mock/). For example,
;; after running "fedpkg mockbuild --no-cleanup-after", one can edit
;; the files in the chroot by visiting "/mock:default:/path/to/file"
;; and execute commands in this chroot with M-x shell-command RET.
;;; Code:
(require 'subr-x)
(require 'tramp)
(defgroup mock-tramp nil
"Tramp integration for Mock chroots."
:prefix "mock-tramp-"
:group 'applications
:link '(emacs-commentary-link "mock-tramp"))
;;;###autoload
(defcustom mock-tramp-method "mock"
"Tramp method to connect to Mock chroots."
:type 'string
:package-version '(mock-tramp . "1.0rc2"))
;;;###autoload
(defun mock-tramp--list-chroots (directory)
"Return a list of chroots defined in DIRECTORY.
The list consists of (\"\" chroot) sublists suitable for Tramp
completion."
;; Unfortunately, mock provides no machine-readable list of chroots,
;; therefore here the logic in mock/py/mockbuild/config.py and
;; mock/etc/bash_completion.d/mock needs to be duplicated. An RFE
;; for such an option to mock is tracked at
;; https://github.com/rpm-software-management/mock/issues/1294.
(if (file-directory-p directory)
(seq-reduce
(lambda (r filename)
(if (not (and (string= directory "/etc/mock")
(member filename '("chroot-aliases.cfg"
"site-defaults.cfg"))))
(append (list (list nil (string-remove-suffix ".cfg" filename))) r)
r))
(directory-files directory nil "^.*\\.cfg$" t)
'())))
;;;###autoload
(with-eval-after-load 'tramp
(add-to-list 'tramp-methods
`(,mock-tramp-method
(tramp-login-program "mock")
(tramp-login-args (("-r") ("%h")
("--shell"
"--"
"/usr/bin/env"
"PROMPT_COMMAND="
,tramp-default-remote-shell
"-l")))
(tramp-remote-shell ,tramp-default-remote-shell)
(tramp-remote-shell-args ("-i" "-c"))))
(tramp-set-completion-function
mock-tramp-method
'((mock-tramp--list-chroots "/etc/mock")
(mock-tramp--list-chroots "~/.config/mock"))))
(provide 'mock-tramp)
;;; mock-tramp.el ends here
- Re: Review wanted for method for accessing Mock chroots,
Tim Landscheidt <=