commit 1880cd0aa544fa77bdbd1bb1870d8f8458b2b79c Author: Paul Eggert Date: Sat Dec 13 21:32:07 2025 -0800 Use GCC warning -Wunused-const-variable=2 * configure.ac: Stop suppresssing -Wunused-const-variable=2 when configured --with-gcc-warnings. Suppressing no longer seems to be needed with current GCC and src/lisp.h. diff --git a/configure.ac b/configure.ac index 80991f3866c..9d113be88d5 100644 --- a/configure.ac +++ b/configure.ac @@ -1798,7 +1798,6 @@ AS_IF([test $gl_gcc_warnings = no], nw="$nw -Wformat-overflow=2" # False alarms due to GCC bug 110333 nw="$nw -Woverlength-strings" # Not a problem these days nw="$nw -Wvla" # Emacs uses . - nw="$nw -Wunused-const-variable=2" # lisp.h declares const objects. nw="$nw -Winline" # OK to ignore 'inline' nw="$nw -Wstrict-overflow" # OK to optimize assuming that # signed overflow has undefined behavior commit f8cf01134b19f15941d6a915d5d5513d27cbb0c4 Author: Dmitry Gutov Date: Sun Dec 14 04:34:16 2025 +0200 project-files: Add the 'else' case to the previous change * lisp/progmodes/project.el (project-files): Add the 'else' case to the previous change (for DIRS outside of project root). diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 66f4021e186..d543f183216 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -691,7 +691,10 @@ See `project-vc-extra-root-markers' for the marker value format.") (vc-not-supported (project--files-in-directory dir - (project--dir-ignores project dir))))))) + (project--dir-ignores project dir)))) + (project--files-in-directory + dir + (project--dir-ignores project dir))))) (or dirs (list (project-root project))))) commit 583856c43702fbcc4fbcc629183eaf832039f0d6 Author: Dmitry Gutov Date: Sun Dec 14 03:50:11 2025 +0200 Make project--vc-list-files extensible * lisp/progmodes/project.el (project--vc-list-files): Call backend function 'project-list-files'. (project-files): Catch 'vc-not-supported' and default to 'project--files-in-directory' using the current project. (vc-git-project-list-files, vc-hg-project-list-files): New functions, extracted from 'project--vc-list-files'. (https://lists.gnu.org/archive/html/emacs-devel/2025-12/msg00290.html) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index d2bac95aaea..66f4021e186 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -72,8 +72,14 @@ ;; customization group `project-vc' for other options that control its ;; behavior. ;; -;; If the repository is using any other VCS than Git or Hg, the file -;; listing uses the default mechanism based on `find-program'. +;; The file listing uses the VC backend function `project-list-files'. +;; If the current VC backend does not implement it, the default +;; mechanism based on `find-program' is used as fallback. +;; +;; project-list-files (dir extra-ignores) +;; +;; DIR is a directory inside the repository. +;; EXTRA-IGNORES is a list of globs in the format of `project-ignores'. ;; ;; This project type can also be used for non-VCS controlled ;; directories, see the variable `project-vc-extra-root-markers'. @@ -679,17 +685,13 @@ See `project-vc-extra-root-markers' for the marker value format.") (backend (cadr project))) (when backend (require (intern (concat "vc-" (downcase (symbol-name backend)))))) - (if (and (file-in-directory-p dir (nth 2 project)) - (cond - ((eq backend 'Hg)) - ((and (eq backend 'Git) - (or - (not ignores) - (version<= "1.9" (vc-git--program-version))))))) - (project--vc-list-files dir backend ignores) - (project--files-in-directory - dir - (project--dir-ignores project dir))))) + (if (file-in-directory-p dir (nth 2 project)) + (condition-case nil + (project--vc-list-files dir backend ignores) + (vc-not-supported + (project--files-in-directory + dir + (project--dir-ignores project dir))))))) (or dirs (list (project-root project))))) @@ -698,108 +700,109 @@ See `project-vc-extra-root-markers' for the marker value format.") (declare-function vc-hg-command "vc-hg") (defun project--vc-list-files (dir backend extra-ignores) + (vc-call-backend backend 'project-list-files dir extra-ignores)) + +(defun vc-git-project-list-files (dir extra-ignores) (defvar vc-git-use-literal-pathspecs) - (pcase backend - (`Git - (let* ((default-directory (expand-file-name (file-name-as-directory dir))) - (args '("-z" "-c" "--exclude-standard")) - (vc-git-use-literal-pathspecs nil) - (include-untracked (project--value-in-dir - 'project-vc-include-untracked - dir)) - (submodules (project--git-submodules)) - files) - (setq args (append args - (and (<= 31 emacs-major-version) - (version<= "2.35" (vc-git--program-version)) - '("--sparse")) - (and include-untracked '("-o")))) - (when extra-ignores - (setq args (append args - (cons "--" - (mapcar - (lambda (i) - (format - ":(exclude,glob,top)%s" - (if (string-match "\\*\\*" i) - ;; Looks like pathspec glob - ;; format already. - i - (if (string-match "\\./" i) - ;; ./abc -> abc - (setq i (substring i 2)) - ;; abc -> **/abc - (setq i (concat "**/" i)) - ;; FIXME: '**/abc' should also - ;; match a directory with that - ;; name, but doesn't (git 2.25.1). - ;; Maybe we should replace - ;; such entries with two. - (if (string-match "/\\'" i) - ;; abc/ -> abc/** - (setq i (concat i "**")))) - i))) - extra-ignores))))) - (setq files - (delq nil - (mapcar - (lambda (file) - (unless (or (member file submodules) - ;; Should occur for sparse directories - ;; only, when sparse index is enabled. - (directory-name-p file)) - (if project-files-relative-names - file - (concat default-directory file)))) - (split-string - (with-output-to-string - (apply #'vc-git-command standard-output 0 nil "ls-files" args)) - "\0" t)))) - (when (project--vc-merge-submodules-p default-directory) - ;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'. - (let ((sub-files + (let* ((default-directory (expand-file-name (file-name-as-directory dir))) + (args '("-z" "-c" "--exclude-standard")) + (vc-git-use-literal-pathspecs nil) + (include-untracked (project--value-in-dir + 'project-vc-include-untracked + dir)) + (submodules (project--git-submodules)) + files) + (setq args (append args + (and (<= 31 emacs-major-version) + (version<= "2.35" (vc-git--program-version)) + '("--sparse")) + (and include-untracked '("-o")))) + (when extra-ignores + (setq args (append args + (cons "--" + (mapcar + (lambda (i) + (format + ":(exclude,glob,top)%s" + (if (string-match "\\*\\*" i) + ;; Looks like pathspec glob + ;; format already. + i + (if (string-match "\\./" i) + ;; ./abc -> abc + (setq i (substring i 2)) + ;; abc -> **/abc + (setq i (concat "**/" i)) + ;; FIXME: '**/abc' should also + ;; match a directory with that + ;; name, but doesn't (git 2.25.1). + ;; Maybe we should replace + ;; such entries with two. + (if (string-match "/\\'" i) + ;; abc/ -> abc/** + (setq i (concat i "**")))) + i))) + extra-ignores))))) + (setq files + (delq nil (mapcar - (lambda (module) - (when (file-directory-p module) - (let ((sub-files - (project--vc-list-files - (concat default-directory module) - backend - extra-ignores))) - (if project-files-relative-names - (mapcar (lambda (file) - (concat (file-name-as-directory module) file)) - sub-files) - sub-files)))) - submodules))) - (setq files - (apply #'nconc files sub-files)))) - ;; 'git ls-files' returns duplicate entries for merge conflicts. - ;; XXX: Better solutions welcome, but this seems cheap enough. - (delete-consecutive-dups files))) - (`Hg - (let* ((default-directory (expand-file-name (file-name-as-directory dir))) - (include-untracked (project--value-in-dir - 'project-vc-include-untracked - dir)) - (args (list (concat "-mcard" (and include-untracked "u")) - "--no-status" - "-0")) - files) - (when extra-ignores - (setq args (nconc args - (mapcan - (lambda (i) - (list "--exclude" i)) - extra-ignores)))) - (with-temp-buffer - (apply #'vc-hg-command t 0 "." "status" args) - (setq files (split-string (buffer-string) "\0" t)) - (unless project-files-relative-names - (setq files (mapcar - (lambda (s) (concat default-directory s)) - files))) - files))))) + (lambda (file) + (unless (or (member file submodules) + ;; Should occur for sparse directories + ;; only, when sparse index is enabled. + (directory-name-p file)) + (if project-files-relative-names + file + (concat default-directory file)))) + (split-string + (with-output-to-string + (apply #'vc-git-command standard-output 0 nil "ls-files" args)) + "\0" t)))) + (when (project--vc-merge-submodules-p default-directory) + ;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'. + (let ((sub-files + (mapcar + (lambda (module) + (when (file-directory-p module) + (let ((sub-files + (vc-git-project-list-files + (concat default-directory module) + extra-ignores))) + (if project-files-relative-names + (mapcar (lambda (file) + (concat (file-name-as-directory module) file)) + sub-files) + sub-files)))) + submodules))) + (setq files + (apply #'nconc files sub-files)))) + ;; 'git ls-files' returns duplicate entries for merge conflicts. + ;; XXX: Better solutions welcome, but this seems cheap enough. + (delete-consecutive-dups files))) + +(defun vc-hg-project-list-files (dir extra-ignores) + (let* ((default-directory (expand-file-name (file-name-as-directory dir))) + (include-untracked (project--value-in-dir + 'project-vc-include-untracked + dir)) + (args (list (concat "-mcard" (and include-untracked "u")) + "--no-status" + "-0")) + files) + (when extra-ignores + (setq args (nconc args + (mapcan + (lambda (i) + (list "--exclude" i)) + extra-ignores)))) + (with-temp-buffer + (apply #'vc-hg-command t 0 "." "status" args) + (setq files (split-string (buffer-string) "\0" t)) + (unless project-files-relative-names + (setq files (mapcar + (lambda (s) (concat default-directory s)) + files))) + files))) (defun project--vc-merge-submodules-p (dir) (project--value-in-dir commit 48a4444977555321d99fa00892fbebfe6752f84f Author: Dmitry Gutov Date: Sun Dec 14 02:25:45 2025 +0200 Relax the condition on the values of DIRS in project-files * lisp/progmodes/project.el (project-files): Use 'file-in-directory-p' to dispatch to 'project--vc-list-files' when listing subdirectory files too (bug#79809). diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 8a128df0d16..d2bac95aaea 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -369,8 +369,8 @@ the user.") (cl-defgeneric project-files (project &optional dirs) "Return a list of files in directories DIRS in PROJECT. -DIRS is a list of absolute directories; it should be some -subset of the project root and external roots. +DIRS is a list of absolute directories; the values can be some of the +project roots or external roots or subdirectories of those. The default implementation uses `find-program'. PROJECT is used to find the list of ignores for each directory." @@ -679,7 +679,7 @@ See `project-vc-extra-root-markers' for the marker value format.") (backend (cadr project))) (when backend (require (intern (concat "vc-" (downcase (symbol-name backend)))))) - (if (and (file-equal-p dir (nth 2 project)) + (if (and (file-in-directory-p dir (nth 2 project)) (cond ((eq backend 'Hg)) ((and (eq backend 'Git) diff --git a/test/lisp/progmodes/project-tests.el b/test/lisp/progmodes/project-tests.el index cbc0bd1e8b9..947ad94a385 100644 --- a/test/lisp/progmodes/project-tests.el +++ b/test/lisp/progmodes/project-tests.el @@ -157,6 +157,20 @@ When `project-ignores' includes a name matching project dir." (should (equal '(".dir-locals.el" "foo") (mapcar #'file-name-nondirectory (project-files project)))))) +(ert-deftest project-vc-supports-files-in-subdirectory () + "Check that it lists only files from subdirectory." + (skip-unless (eq (vc-responsible-backend default-directory) 'Git)) + (let* ((dir (ert-resource-directory)) + (_ (vc-file-clearprops dir)) + (project-vc-extra-root-markers '("project-tests.el")) + (project (project-current nil dir))) + (should-not (null project)) + (should (string-match-p "/test/lisp/progmodes/\\'" (project-root project))) + (should (equal '(".dir-locals.el" "etc" "foo") + (mapcar #'file-name-nondirectory + (project-files project + (list dir))))))) + (ert-deftest project-vc-nonexistent-directory-no-error () "Check that is doesn't error out when the current dir does not exist." (skip-unless (eq (vc-responsible-backend default-directory) 'Git)) commit 223dffabd8f601b70452998c1cf4c845c4ecbf15 Author: Michael Albinus Date: Sat Dec 13 17:58:50 2025 +0100 Mention tramp-hlo in Tramp's documentation * doc/misc/tramp.texi (Frequently Asked Questions) (New operations): Mention tramp-hlo, again. diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 286f3d42ddb..72f8bde47cf 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -5522,12 +5522,12 @@ Disable excessive traces. Set @code{tramp-verbose} to 3 or lower, default being 3. Increase trace levels temporarily when hunting for bugs. -@c @item -@c Use a package with @value{tramp} specific implementation of high-level -@c operations. For example, the GNU ELPA package @file{tramp-hlo} -@c implements specialized versions of @code{dir-locals--all-files}, -@c @code{locate-dominating-file} and @code{dir-locals-find-file} for -@c @value{tramp}'s @code{tramp-sh} backend (@pxref{New operations}). +@item +Use a package with @value{tramp} specific implementation of high-level +operations. For example, the GNU ELPA package @file{tramp-hlo} +implements specialized versions of @code{dir-locals--all-files}, +@code{locate-dominating-file} and @code{dir-locals-find-file} for +@value{tramp}'s @code{tramp-sh} backend (@pxref{New operations}). @end itemize @@ -6877,6 +6877,12 @@ Shell scripts intended for the @code{tramp-sh} backend are used as a format string. They must observe the restrictions for format specifiers, as documented in @code{tramp-expand-script}. +An example implementing this mechanism is the GNU ELPA package +@file{tramp-hlo}. It implements specialized versions of +@code{dir-locals--all-files}, @code{locate-dominating-file} and +@code{dir-locals-find-file} for @value{tramp}'s @code{tramp-sh} +backend. + @node Traces and Profiles @chapter How to Customize Traces commit 7089c1fd6953f646da2308dc12a9738659b68c3e Author: Michael Albinus Date: Sat Dec 13 17:58:03 2025 +0100 Implement process STDERR file in tramp-smb.el * lisp/net/tramp-smb.el (tramp-smb-handle-make-process) (tramp-smb-handle-process-file): Handle STDERR file. (tramp-smb-call-winexe): Regroup sent commands. * test/lisp/net/tramp-tests.el (tramp-test28-process-file) (tramp-test30-make-process): Adapt tests. diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 7805db7a6b7..8e385913004 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -1294,8 +1294,19 @@ will be used." (apply #'tramp-handle-make-process args) (tramp-skeleton-make-process args nil t (let* ((command (string-join command " ")) + ;; STDERR can also be a file name. + (tmpstderr + (and stderr + (tramp-unquote-file-local-name + (if (stringp stderr) + stderr (tramp-make-tramp-temp-name v))))) + ;; (remote-tmpstderr + ;; (and tmpstderr (tramp-make-tramp-file-name v tmpstderr))) (bmp (and (buffer-live-p buffer) (buffer-modified-p buffer))) p) + (if tmpstderr + (setq command (format "%s 2>//%s%s" command host tmpstderr))) + (with-tramp-saved-connection-properties v '(" process-name" " process-buffer") (unwind-protect @@ -1360,25 +1371,29 @@ will be used." (defun tramp-smb-handle-process-file (program &optional infile destination display &rest args) "Like `process-file' for Tramp files." - ;; STDERR is not impelmemted. - (when (consp destination) - (setcdr destination `(,tramp-cache-undefined))) (tramp-skeleton-process-file program infile destination display args (let ((name (string-replace "*tramp" "*tramp process" (tramp-buffer-name v)))) - ;; Transform input into a filename powershell does understand. + ;; Transform input and stderr into a filename powershell does understand. (when input (setq input (and (not (string-equal input (tramp-get-remote-null-device v))) - (format "//%s%s" host input)))) + (format + "//%s%s" host (tramp-smb-shell-quote-argument input))))) + (when stderr + (setq stderr + (and (not (string-equal stderr (tramp-get-remote-null-device v))) + (format + "//%s%s" host (tramp-smb-shell-quote-argument stderr))))) ;; Construct command. (setq command (string-join (cons program args) " ") + command (if stderr + (format "%s 2>%s" command stderr) + command) command (if input - (format - "Get-Content %s | & %s" - (tramp-smb-shell-quote-argument input) command) - (format "%s" command))) + (format "Get-Content %s | & %s" input command) + command)) ;; Call it. (condition-case nil @@ -2149,16 +2164,10 @@ Removes smb prompt. Returns nil if an error message has appeared." ;; Enable UTF-8 encoding. Suppress "^M". ;; (set-process-coding-system (tramp-get-connection-process vec) 'utf-8-dos) ;; (tramp-smb-send-command vec "$PSDefaultParameterValues['*:Encoding'] = 'utf8'") - ;; Set width to 128 ($bufsize.Width) or 102 ($winsize.Width), - ;; respectively. $winsize.Width cannot be larger. This avoids - ;; mixing prompt and long error messages. + ;; This avoids mixing prompt and long error messages. (tramp-smb-send-command vec "$rawui = (Get-Host).UI.RawUI") - (tramp-smb-send-command vec "$bufsize = $rawui.BufferSize") - (tramp-smb-send-command vec "$winsize = $rawui.WindowSize") - (tramp-smb-send-command vec "$bufsize.Width = 128") - (tramp-smb-send-command vec "$winsize.Width = 102") - (tramp-smb-send-command vec "$rawui.BufferSize = $bufsize") - (tramp-smb-send-command vec "$rawui.WindowSize = $winsize") + (tramp-smb-send-command vec "$rawui.WindowSize = $rawui.MaxWindowSize") + (tramp-smb-send-command vec "$rawui.BufferSize.Width = 1024") ;; Goto `default-directory'. (tramp-smb-send-command vec (format diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el index cbc083a1fe0..6e59a877e16 100644 --- a/lisp/net/tramp-sshfs.el +++ b/lisp/net/tramp-sshfs.el @@ -253,7 +253,7 @@ arguments to pass to the OPERATION." (defun tramp-sshfs-handle-process-file (program &optional infile destination display &rest args) "Like `process-file' for Tramp files." - ;; STDERR is not impelmemted. + ;; STDERR is not implemented. (when (consp destination) (setcdr destination `(,tramp-cache-undefined))) (tramp-skeleton-process-file program infile destination display args diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 5edb2c703b8..b9b582a66bc 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3978,7 +3978,7 @@ BODY is the backend specific code." ((null (cadr ,destination)) (setq stderr (tramp-get-remote-null-device v))) ((eq (cadr ,destination) tramp-cache-undefined) - ;; stderr is not impelmemted. + ;; stderr is not implemented. (tramp-warning v "%s" "STDERR not supported")))) ;; t (,destination diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index b2caa3ebdf1..c01766b9653 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -5463,8 +5463,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; (delete-file tmp-name))) ;; Check remote and local STDERR. - ;; FIXME: tramp-smb.el should implement this. - (unless (or (tramp--test-sshfs-p) (tramp--test-smb-p)) + (unless (tramp--test-sshfs-p) (dolist (local '(nil t)) (setq tmp-name (tramp--test-make-temp-name local quoted)) (should-not @@ -5474,7 +5473,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (insert-file-contents tmp-name) (should (string-match-p - (rx "cat:" (* nonl) " No such file or directory") + (rx (| (: "cat:" (* nonl) "No such file or directory") + ;; MS Windows. + (: "cat : Cannot find path"))) (buffer-string))) (should-not (get-buffer-window (current-buffer) t)) (delete-file tmp-name))))) @@ -5873,8 +5874,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (ignore-errors (kill-buffer stderr))))) ;; Process with stderr file. - ;; FIXME: tramp-smb.el should implement this. - (unless (or (tramp--test-smb-p) (tramp-direct-async-process-p)) + (unless (tramp-direct-async-process-p) (unwind-protect (with-temp-buffer (setq command '("cat" "/does-not-exist") @@ -5886,13 +5886,19 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (should (equal (process-get proc 'remote-command) command)) ;; Read stderr. (with-timeout (10 (tramp--test-timeout-handler)) - (while (accept-process-output proc nil nil t))) + (let ((remote-file-name-inhibit-cache t)) + (while + (or (not (file-exists-p tmp-name)) + (zerop + (file-attribute-size (file-attributes tmp-name))))))) (delete-process proc) (with-temp-buffer (insert-file-contents tmp-name) (should (string-match-p - (rx "cat:" (* nonl) " No such file or directory") + (rx (| (: "cat:" (* nonl) "No such file or directory") + ;; MS Windows. + (: "cat : Cannot find path"))) (buffer-string))))) ;; Cleanup. commit 08bd8fdbb4cafda8604b062903618724d2aeb973 Author: Sean Whitton Date: Sat Dec 13 14:26:29 2025 +0000 vc-diff-internal: Call into backend after setting up the major mode This means the backend can, for example, enable a minor mode, without our changing the major mode immediately wiping that out. * lisp/vc/vc.el (vc-diff-internal): Set up the major mode before calling into the backend. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 52792fc0ff3..f210d440b69 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2794,7 +2794,6 @@ Return t if the buffer had changes, nil otherwise." (if async 'async 1) "diff" file (append (vc-switches nil 'diff) `(,(null-device))))))) (setq files (nreverse filtered)))) - (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async) (set-buffer buffer) ;; Make the *vc-diff* buffer read only, the diff-mode key ;; bindings are nicer for read only buffers. pcl-cvs does the @@ -2806,6 +2805,7 @@ Return t if the buffer had changes, nil otherwise." (setq-local revert-buffer-function (lambda (_ignore-auto _noconfirm) (vc-diff-internal async vc-fileset rev1 rev2 verbose))) + (vc-call-backend (car vc-fileset) 'diff files rev1 rev2 buffer async) (if (and (zerop (buffer-size)) (not (get-buffer-process (current-buffer)))) ;; Treat this case specially so as not to pop the buffer. commit 2d96fdc3b7dc63744fe8c4a1a76c10d09d2b2aee Author: Sean Whitton Date: Sat Dec 13 14:13:15 2025 +0000 vc-git-dir-status-goto-stage: Accept exit 128 from git-add * lisp/vc/vc-git.el (vc-git-dir-status-goto-stage): Accept an exit code of 128 from 'git add --refresh' (bug#79999). diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index ad70202724e..0bcd0bcf1e4 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -718,12 +718,17 @@ or an empty string if none." (defun vc-git-dir-status-goto-stage (git-state) ;; TODO: Look into reimplementing this using `git status --porcelain=v2'. - (let ((files (vc-git-dir-status-state->files git-state))) + (let ((files (vc-git-dir-status-state->files git-state)) + (allowed-exit 1)) (erase-buffer) (pcase (vc-git-dir-status-state->stage git-state) ('update-index (if files - (vc-git-command (current-buffer) 'async files "add" "--refresh" "--") + (progn (vc-git-command (current-buffer) 'async files + "add" "--refresh" "--") + ;; git-add exits 128 if some of FILES are untracked; + ;; we can ignore that (bug#79999). + (setq allowed-exit 128)) (vc-git-command (current-buffer) 'async nil "update-index" "--refresh"))) ('ls-files-added @@ -749,7 +754,7 @@ or an empty string if none." ('diff-index (vc-git-command (current-buffer) 'async files "diff-index" "--relative" "-z" "-M" "HEAD" "--"))) - (vc-run-delayed-success 1 + (vc-run-delayed-success allowed-exit (vc-git-after-dir-status-stage git-state)))) (defun vc-git-dir-status-files (_dir files update-function) commit b7f2ccac1e6fbb8615431f96dd94128b27146985 Merge: 242ee957f95 948c4f7f64f Author: Eli Zaretskii Date: Sat Dec 13 05:43:15 2025 -0500 Merge from origin/emacs-30 948c4f7f64f ; * admin/authors.el (authors-aliases): Add Rudolf Adamko... commit 242ee957f95ba2a35a8f49a50e9dcc1c7fb59bbe Author: Daniel Semyonov Date: Sat Apr 5 01:29:44 2025 +0300 nnatom: Fix parsing of empty articles * lisp/gnus/nnatom.el (nnatom--read-parts): Fix typo (bug#77539). diff --git a/lisp/gnus/nnatom.el b/lisp/gnus/nnatom.el index 9eb766f5d51..8fdb62c7770 100644 --- a/lisp/gnus/nnatom.el +++ b/lisp/gnus/nnatom.el @@ -270,7 +270,7 @@ return the subject. Otherwise, return nil." (or st (push summary parts))) ((setq content (or summary content)) (push (append content '(links)) parts)) - (t (push '((nil (Content-Type . "text/html") links)) parts))) + (t (push '(nil (Content-Type . "text/html") links) parts))) parts)) (defvoo nnatom-read-parts-function #'nnatom--read-parts nil nnfeed-read-parts-function) commit 948c4f7f64fb9e662dfcccc609b2e02269c7ebe8 Author: Eli Zaretskii Date: Fri Dec 12 14:15:54 2025 +0200 ; * admin/authors.el (authors-aliases): Add Rudolf Adamkovič (bug#79987). diff --git a/admin/authors.el b/admin/authors.el index 96a102b3f67..bab5478da84 100644 --- a/admin/authors.el +++ b/admin/authors.el @@ -249,6 +249,7 @@ files.") ("Rodney J. Whitby" "Rod Whitby") ("Roland B. Roberts" "Roland B Roberts" "Roland Roberts") ("Ron Schnell" "Ronnie Schnell") + ("Rudolf Adamkovič" "rudolf@adamkovic\\.org" "salutis@me\\.com") ("Rudolf Schlatte" "Rudi Schlatte") ("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}") ("Ryan Thompson" "Ryan .*rct@thompsonclan")