Commit graph

2282 commits

Author SHA1 Message Date
Sean Whitton
28a13b01c7 vc-refresh-state: Override default-directory for backend functions
I ran into the issue described in the comment with the current
code in project-find-file-in and project-find-dir, when using
'C-x p p' to switch between projects.

* lisp/vc/vc-hooks.el (vc-refresh-state): When calling into the
backend, override any let-bindings of default-directory.
2026-05-18 22:15:29 +01:00
Sean Whitton
9bc04b001a vc-next-action: Call vc-delete-file on FILESET-ONLY-FILES
* lisp/vc/vc.el (vc-next-action): Call vc-delete-file on
FILESET-ONLY-FILES, not FILES (bug#80998).
2026-05-13 13:15:23 +01:00
Sean Whitton
07f2bbc905 vc-dir-resynch-file: Pass down non-truename'd FILE
* lisp/vc/vc-dir.el (vc-dir-recompute-file-state): Delete
recently introduced TRUENAME parameter.
(vc-dir-resynch-file): Pass the file name from before calling
file-truename to vc-dir-recompute-file-state.
2026-05-12 09:49:53 +01:00
Dmitry Gutov
f94637749a vc-switch-working-tree: Use project-current again
* lisp/vc/vc.el (vc-switch-working-tree): Use project-current
instead of manually constructing VC project objects.
2026-05-08 12:25:49 +01:00
João Távora
48b064a2aa Fix 'vc-dir-resynch-file' again (bug#80967)
This unbreak project-vc-dir for dirs under non-truename
hierarchies.

The following commit presumably makes 'M-x vc-dir' usable again
for versioned directories inside non-truename hierarchies,

   commit e05fab5775
   Author: Stephen Berman <stephen.berman@gmx.net>
   Date:   Sat May 2 15:11:37 2026 +0200

       Fix 'vc-dir-resynch-file' (bug#80803)

       * lisp/vc/vc-dir.el (vc-dir-resynch-file): Apply 'file-truename'
       instead of 'expand-file-name' to FNAME argument to prevent
       spurious display of symlinked files in *vc-dir* buffer.

However the similar command 'M-x project-vc-dir' was broken and made
unusable in similar circumstances.

This relatively simple fix addresses both situations touching only the
problematic 'vc-resynch-file' and one of its callees,
'vc-dir-recompute-file-state', which now discerns clearly between the
short/familiar name to present in the list and the "fname" to use to
call into the backend to gather the VC state.  Since this function is
also called from another context, where the requirements are less clear,
keeping current smenatics in that situation seemed prudent, so the new
behaviour is activate with a new optional parameter.

* lisp/vc/vc-dir.el (vc-dir-resynch-file): Call
vc-dir-recompute-file-state with truename=t.
(vc-dir-recompute-file-state): Accept optional truename param.
2026-05-07 22:15:42 +01:00
Sean Whitton
283b47ab2e vc-switch-working-tree: Don't find non-VC projects
* lisp/vc/vc.el (project-current-directory-override):
Delete declaration.
(project-find-matching-buffer-function): Declare.
(vc-switch-working-tree):
Don't find non-VC projects (bug#80939).
2026-05-05 12:17:53 +01:00
Sean Whitton
8f9607d532 vc-finish-logentry: Skip displaying async command buffer sometimes
* lisp/vc/vc-dispatcher.el (vc-finish-logentry): Don't display
the async command buffer if vc-display-failed-async-commands is
non-nil.
2026-05-05 11:00:52 +01:00
Stephen Berman
e05fab5775 Fix 'vc-dir-resynch-file' (bug#80803)
* lisp/vc/vc-dir.el (vc-dir-resynch-file): Apply 'file-truename'
instead of 'expand-file-name' to FNAME argument to prevent
spurious display of symlinked files in *vc-dir* buffer.
2026-05-02 15:11:37 +02:00
Sean Whitton
4795e83a69 Project prompters always default to current project, if any
* lisp/progmodes/project.el (project-prompter)
(project-prompt-project-dir, project-prompt-project-name):
Delete ALLOW-EMPTY parameter.  Default to the current project if
there is one.
* lisp/vc/vc.el (project-root): Declare.
(vc--prompt-other-working-tree): Replace ALLOW-EMPTY parameter
with new ALLOW-CURRENT parameter.
(vc-working-tree-switch-project): Allow selecting the current
working tree, for symmetry with project-switch-project.
* etc/NEWS: Update.
2026-05-02 09:38:04 +01:00
Paul Eggert
4fcc8a473a ; Spelling fixes. 2026-04-29 22:45:51 -07:00
Sean Whitton
7d9dad4241 New VC commands for remote unintegrated changes
* lisp/vc/vc.el (vc--outgoing-base, vc--outgoing-base-mergebase):
New FORCE-TOPIC parameter.
(vc--maybe-read-outgoing-base): New NO-DOUBLE parameter.
(vc-root-diff-remote-unintegrated, vc-diff-remote-unintegrated)
(vc-log-remote-unintegrated, vc-root-log-remote-unintegrated):
New commands (bug#80434).
* lisp/vc/vc-dir.el (vc-dir-mode-map):
* lisp/vc/vc-hooks.el (vc-prefix-map): Bind them.
* doc/emacs/vc1-xtra.texi (Unintegrated Changes):
* etc/NEWS: Document them.
2026-04-29 14:54:40 +01:00
Sean Whitton
ae40c3a438 New commands to report diffs of all local changes
* lisp/vc/vc.el (vc-root-diff-outgoing-and-edited)
(vc-diff-outgoing-and-edited): New commands (bug#80434).
* lisp/vc/vc-dir.el (vc-dir-mode-map):
* lisp/vc/vc-hooks.el (vc-prefix-map): Bind them.
* doc/emacs/maintaining.texi (VC Change Log):
* etc/NEWS: Document them.
2026-04-29 14:46:37 +01:00
Eli Zaretskii
fb559a8507 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2026-04-27 15:42:45 +03:00
Eli Zaretskii
8d4c47c880 Fix vc-tests for SRC
* lisp/vc/vc-src.el (vc-src-register): Support "registering"
directories in FILES.
(vc-src-rename-file): Fix implementation and support renaming
directories.

* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-file)
(vc-test-src-version-diff): Skip parts that don't work with SRC.
(Bug#80862)
2026-04-27 15:41:27 +03:00
Sean Whitton
525b7b1424 Rename outstanding changes commands to "unintegrated changes"
* doc/emacs/vc1-xtra.texi (Outstanding Changes): Rename node
from this ...
(Unintegrated Changes): ... to this (bug#80434).  References
changed.
* etc/NEWS: Document the change.
* lisp/vc/vc-git.el (vc-git-topic-outgoing-base)
(vc-git-log-view-mode):
* lisp/vc/vc-hg.el (vc-hg-print-log, vc-hg-log-view-mode):
* lisp/vc/vc.el (vc-root-diff-outstanding, vc-diff-outstanding)
(vc-log-outstanding, vc-root-log-outstanding):
Rename from these ...
(vc-root-diff-unintegrated, vc-diff-unintegrated)
(vc-log-unintegrated, vc-root-log-unintegrated):
... to these (bug#80434).  All uses changed.
(vc-log-view-type): Rename 'log-outstanding' type to
'log-unintegrated'.  All uses changed.
2026-04-27 13:35:31 +01:00
Sean Whitton
91db34868a VC Annotate for Mercurial repositories shows changeset hashes
* lisp/vc/vc-hg.el (vc-hg-annotate-show-revision-numbers): New
option.
(vc-hg-annotate-command): If it's nil, show changeset hashes not
revision numbers by passing "-c" not "-n" to 'hg annotate'.
(vc-hg-annotate-re): Update.
* etc/NEWS: Document the change.
2026-04-27 13:23:30 +01:00
Eli Zaretskii
99b0199253 diff-kill-creations-deletions: Look for /dev/null on all platforms
* lisp/vc/diff-mode.el (diff-kill-creations-deletions): Look for
/dev/null on platforms when null-device is something else.
2026-04-27 10:25:48 +01:00
Eli Zaretskii
bbdab523b4 Fix renaming files and directories under RCS
* lisp/vc/vc-rcs.el (vc-rcs-register): Filter out directories from
FILES.
(vc-rcs-rename-file): Support OLD being a directory.

* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-file)
(vc-test--rename-directory): Re-enable these tests for RCS.
(vc-test--rename-directory): Disable 'yes-or-no-p' questions that
RCS asks when it needs to create the RCS/ subdirectory: this lets
the test run without user interaction.
2026-04-26 14:20:56 +03:00
Sean Whitton
cdaf550bb3 vc-delete-file: Narrow binding of default-directory
* lisp/vc/vc.el (vc-delete-file): In the delete-file branch,
narrow the binding of default-directory to cover only the call
into the backend.
Suggested by Aaron L. Zeng <azeng@janestreet.com> in bug#80875.
2026-04-26 11:13:11 +01:00
Sean Whitton
3f06d73a49 VC: Support deleting directories
* lisp/vc/vc.el (delete-files): Specify that implementations of
this should handle deleting directories.
* lisp/vc/vc-git.el (vc-git-delete-files):
* lisp/vc/vc-hg.el (vc-hg-delete-files):
* lisp/vc/vc.el (vc-delete-file): Handle deleting directories.
2026-04-26 10:53:46 +01:00
Sean Whitton
0a04a4bc7a vc-hg-after-dir-status: Rewrite to handle current 'hg status' output
* lisp/vc/vc-hg.el (vc-hg-after-dir-status): Rewrite to handle
renames where the "R" line comes arbitrarily later in the
output.
* test/lisp/vc/vc-hg-tests.el
(vc-hg-test--after-dir-status-expect): New function.
(vc-hg-after-dir-status): New test.
2026-04-23 15:27:20 +01:00
Martin Rudalics
b7eb715a13 Fix control window setup in 'ediff-setup-windows-plain-compare' (Bug#80809)
* lisp/vc/ediff-wind.el (ediff-setup-windows-plain-compare): Do
not call 'display-buffer-in-direction' directly (Bug#80809).
2026-04-20 10:33:55 +02:00
Sean Whitton
a236442581 vc-hg--checkin: Use vc-hg--active-bookmark-internal
* lisp/vc/vc-hg.el (vc-hg--active-bookmark-internal): Make it
work when default-directory is not the repository root.
(vc-hg--checkin): Use vc-hg--active-bookmark-internal instead of
vc-hg--working-branch.
2026-04-17 14:39:03 -04:00
Aaron L. Zeng
c92354d190 vc-hg--checkin: When committing a patch, advance active hg bookmark
* lisp/vc/vc-hg.el (vc-hg--checkin): When committing a patch,
advance any active hg bookmark (bug#80848).

Copyright-paperwork-exempt: yes
2026-04-17 12:31:14 -04:00
Sean Whitton
f6bb77270f vc-file-tree-walk: Stop emitting messages
* lisp/vc/vc.el (vc-file-tree-walk, vc-file-tree-walk-internal):
Stop emitting messages about traversing directories.
2026-04-16 16:50:32 -04:00
Sean Whitton
2259c116ae vc-file-tree-walk-internal: Use vc-registered
* lisp/vc/vc.el (vc-file-tree-walk-internal): Use vc-registered
not vc-backend, for robustness.
2026-04-16 16:49:56 -04:00
Sean Whitton
c93a6bd5d8 ; Fix formatting. 2026-04-16 16:10:02 -04:00
Sean Whitton
75fd526980 ; Fix last change. 2026-04-16 16:08:36 -04:00
Sean Whitton
792fef0583 vc-rename-file: Fix skipping calling into the backend
* lisp/vc/vc.el (vc-rename-file): Replace broken attempted use
of vc-dir-status-files with walking OLD using vc-file-tree-walk.
* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-directory):
Assert that the files are registered or not as appropriate.  New
test case in which there are only registered files.
2026-04-16 14:36:45 -04:00
Sean Whitton
5045394694 vc-rename-file: Fix case of directory with only untracked files
* lisp/vc/vc.el (vc-rename-file): Don't call into the backend if
moving a directory containing only untracked files.
* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-directory):
New test for this case.
2026-04-15 17:59:10 -04:00
Sean Whitton
43f0da207e Fix renaming whole directories with Mercurial
* lisp/vc/vc-hg.el (vc-hg-rename-file): Use 'hg mv --after'.
* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-directory):
New test.
2026-04-15 10:06:48 -04:00
Sean Whitton
0ea1c0d831 ; * lisp/vc/vc.el (vc-rename-file): Delete old FIXME. 2026-04-15 10:06:20 -04:00
Sean Whitton
5347b221da vc-rename-file: New OK-IF-ALREADY-EXISTS parameter
* lisp/vc/vc.el (vc-delete-file): New NOCONFIRM parameter.
(vc-rename-file): New OK-IF-ALREADY-EXISTS parameter.
* lisp/dired-aux.el (dired-rename-file): Pass it.
* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-file): Test
it.  Also test moving files into an existing directory.
2026-04-15 10:06:20 -04:00
Sean Whitton
5a5801fc24 ; * lisp/vc/vc.el: Note about different file name kinds (bug#80722). 2026-04-13 09:24:44 -04:00
Stefan Monnier
dcae106214 lisp/vc/vc.el (vc-checkin): Use vc-dir-buffers like we do everywhere else 2026-04-09 12:57:44 -04:00
Sean Whitton
1d2c3cb5bb * lisp/vc/vc.el (vc-checkin): Don't assume vc-dir is loaded. 2026-04-09 16:22:39 +01:00
Sean Whitton
49420f7033 with-vc-properties: Don't substitute in a global value
* lisp/vc/vc.el (with-vc-properties): Don't substitute in the
value vc-touched-properties happens to have at macro expansion
time.  This was left over from when vc-touched-properties was
bound to a local gensym.
2026-04-09 16:22:20 +01:00
Sean Whitton
7ce60be53e vc-hg-working-revision: Return changeset hashes
* lisp/vc/vc-hg.el (vc-hg-working-revision): Return changeset
hashes instead of revision numbers.  Respect
vc-use-short-revision.
* etc/NEWS: Document the change.
2026-04-06 13:02:06 +01:00
Sean Whitton
7679855281 ; * lisp/vc/vc.el (checkin): Specify the async case (bug#80723). 2026-04-06 12:26:08 +01:00
Sean Whitton
02ad0183f2 ; * lisp/vc/vc.el (dir-status-files): Clarifications (bug#80722). 2026-04-06 12:16:56 +01:00
Sean Whitton
bd4b876e9b Fix vc-default-checkin-patch for vc-async-checkin non-nil
* lisp/vc/vc.el (vc-default-checkin-patch): Fix for
vc-async-checkin non-nil (bug#80746).
2026-04-05 16:24:52 +01:00
Sean Whitton
3289886f84 * lisp/vc/vc-dir.el (vc-dir-update): Remove empty directory entries. 2026-04-05 15:51:31 +01:00
Sean Whitton
d604445954 New option vc-dir-auto-hide-up-to-date
* lisp/vc/vc-dir.el (vc-dir-hide-up-to-date-on-revert): Delete.
(vc-dir-auto-hide-up-to-date): New option.
(vc-dir-update, vc-dir-revert-buffer-function): Use it.
* etc/NEWS: Document it.
2026-04-05 15:50:46 +01:00
Sean Whitton
af69eb2f27 VC-Dir next action: Offer to hide up-to-date items
* lisp/vc/vc-dir.el (vc-dir--up-to-date-states): New constant.
(vc-dir-hide-state): Use it.
(vc-dir--only-files-state-and-model): New function.
(vc-dir-root-next-action, vc-dir-deduce-fileset): Use it.
* lisp/vc/vc.el (vc-only-files-state-and-model): Improve error
message readability.
2026-04-05 14:58:55 +01:00
Sean Whitton
859e0622ae * lisp/vc/diff-mode.el (diff-mode-read-only-map): Bind 'v'. 2026-04-05 13:50:35 +01:00
Basil L. Contovounesios
d780007283 Add predicate for initial_terminal
This introduces the predicate frame-initial-p, which uses
struct frame.output_method or struct terminal.type to detect
initial_terminal without relying on its name (bug#80629).
For some prior discussion, see:
https://lists.gnu.org/r/emacs-devel/2019-12/msg00480.html
https://lists.gnu.org/r/emacs-devel/2020-01/msg00120.html

* doc/lispref/frames.texi (Frames): Document frame-initial-p.
(Finding All Frames): Fix grammar.
* etc/NEWS (Lisp Changes in Emacs 31.1): Announce frame-initial-p.
* lisp/desktop.el (desktop--check-dont-save):
* lisp/emacs-lisp/debug.el (debug):
* lisp/frameset.el (frameset-restore):
* lisp/menu-bar.el (menu-bar-update-buffers):
* lisp/xt-mouse.el (turn-on-xterm-mouse-tracking-on-terminal):
Use frame-initial-p instead of checking the "initial_terminal" name.
* lisp/emacs-lisp/byte-opt.el: Mark frame-initial-p as error-free.

* src/pgtkterm.c (pgtk_focus_changed): Use IS_DAEMON in place of
Fdaemonp, thus also accepting a named daemon session.
* src/terminal.c (decode_tty_terminal): Clarify commentary.
(Fframe_initial_p): New function.
(syms_of_terminal): Expose it.
(init_initial_terminal): Update commentary now that
menu-bar-update-buffers uses frame-initial-p (bug#53740).

* test/lisp/xt-mouse-tests.el (with-xterm-mouse-mode): Simulate the
lack of an initial terminal by overriding frame-initial-p now
that turn-on-xterm-mouse-tracking-on-terminal uses it.
* test/src/terminal-tests.el: New file.
2026-03-26 15:19:56 +01:00
Stefan Monnier
89b40650da diff-mode.el: Don't recompute the position of Git preamble/footer
On some profiles (after disabling syntax and refined
fontification), this was taking >90% of the time to fontify a buffer.

* lisp/vc/diff-mode.el (diff--git-preamble-overlay)
(diff--git-footer-overlay): New variables.
(diff--git-preamble-end, diff--git-footer-start): Use them to cache
the result.
2026-03-20 16:53:42 -04:00
Stefan Monnier
e2004eb56f Merge remote-tracking branch 'origin/scratch/error-API' 2026-03-15 17:17:21 -04:00
Stefan Monnier
3ed7ac4e66 (smerge--refine-prepare-regions): Reduce number of args and retvals
* lisp/vc/smerge-mode.el (smerge--refine-set-overlay-props):
New function, extracted from `smerge--refine-prepare-regions`.
(smerge--refine-prepare-regions): Take overlays rather than beg/end
arguments and remove all overlay property manipulation.
(smerge-refine-regions): Create the overlays and pass them to those
two functions.
2026-03-14 02:14:13 -04:00
Stefan Monnier
771ab21367 lisp/vc/smerge-mode.el (smerge--refine-apply-diff): Typo 2026-03-11 12:16:10 -04:00