unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset)
@ 2010-03-25 22:42 Kevin Ryde
  2010-03-28 19:43 ` Chong Yidong
  2020-09-14 13:42 ` Lars Ingebrigtsen
  0 siblings, 2 replies; 4+ messages in thread
From: Kevin Ryde @ 2010-03-25 22:42 UTC (permalink / raw)
  To: 5773

[-- Attachment #1: Type: text/plain, Size: 959 bytes --]

If you re-run M-x vc-diff from a *vc-diff* buffer, it doesn't ask you to
save the buffer being diffed the way that it does when operating from
that buffer itself

    C-x C-f /some/file/under/vc/control
    C-x v =
    C-x o
    # edit the file's buffer a bit
    C-x o           # back to the *vc-diff*
    C-x v =

    => doesn't ask about saving the edits

I wonder also if vc-diff might offer to save the whole of its "fileset",
something like below.  Not that I'm not smart enough to diff more than
one file at a time :-)

Maybe `vc-update' could share this `vc-buffer-sync-fileset' too.
I thought to use find-buffer-visiting instead of the way vc-update has
`member' in its save-some-buffers, just in case there's symlinks making
names look different.

2010-03-25  Kevin Ryde  <user42@zip.com.au>

	* vc.el (vc-buffer-sync-fileset): New function.
	(vc-diff): Use it to save all relevant file buffers no matter
	where run (not just the current buffer).


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: vc.el.diff-save.diff --]
[-- Type: text/x-diff, Size: 880 bytes --]

--- vc.el.~1.746.~	2009-12-17 08:25:35.000000000 +1100
+++ vc.el	2010-03-24 10:43:14.000000000 +1100
@@ -1593,9 +1593,17 @@
   (interactive (list current-prefix-arg t))
   (if historic
       (call-interactively 'vc-version-diff)
-    (when buffer-file-name (vc-buffer-sync not-urgent))
-    (vc-diff-internal t (vc-deduce-fileset t) nil nil
-		      (called-interactively-p 'interactive))))
+    (let ((fileset (vc-deduce-fileset t)))
+      (vc-buffer-sync-fileset fileset not-urgent)
+      (vc-diff-internal t fileset nil nil
+			(called-interactively-p 'interactive)))))
+
+(defun vc-buffer-sync-fileset (fileset not-urgent)
+  (dolist (filename (cadr fileset))
+    (let ((buffer (find-buffer-visiting filename)))
+      (if buffer
+	  (with-current-buffer buffer
+	    (vc-buffer-sync not-urgent))))))
 
 ;;;###autoload
 (defun vc-root-diff (historic &optional not-urgent)

[-- Attachment #3: Type: text/plain, Size: 1077 bytes --]




In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.16.5)
 of 2009-09-14 on raven, modified by Debian
configured using `configure  '--build=i486-linux-gnu' '--host=i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim' '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_AU
  value of $XMODIFIERS: nil
  locale-coding-system: iso-latin-1-unix
  default-enable-multibyte-characters: t

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset)
  2010-03-25 22:42 bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset) Kevin Ryde
@ 2010-03-28 19:43 ` Chong Yidong
  2010-03-31  0:36   ` Kevin Ryde
  2020-09-14 13:42 ` Lars Ingebrigtsen
  1 sibling, 1 reply; 4+ messages in thread
From: Chong Yidong @ 2010-03-28 19:43 UTC (permalink / raw)
  To: Kevin Ryde; +Cc: 5773

> If you re-run M-x vc-diff from a *vc-diff* buffer, it doesn't ask you
> to save the buffer being diffed the way that it does when operating
> from that buffer itself
>
> 2010-03-25  Kevin Ryde  <user42 <at> zip.com.au>
>
> * vc.el (vc-buffer-sync-fileset): New function.
> (vc-diff): Use it to save all relevant file buffers no matter
> where run (not just the current buffer).

Thanks, but I think your patch may need to go further.  There are
several other places in VC where vc-buffer-sync is called; could you
check whether they need to use your `vc-buffer-sync-fileset' (which
ought to be in vc-dispatcher.el)?






^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset)
  2010-03-28 19:43 ` Chong Yidong
@ 2010-03-31  0:36   ` Kevin Ryde
  0 siblings, 0 replies; 4+ messages in thread
From: Kevin Ryde @ 2010-03-31  0:36 UTC (permalink / raw)
  To: 5773; +Cc: Chong Yidong

Chong Yidong <cyd@stupidchicken.com> writes:
>
> There are
> several other places in VC where vc-buffer-sync is called; could you
> check whether they need to use your `vc-buffer-sync-fileset'

Apart from vc-update which I mentioned, I can spot

    vc-register
    vc-revert
    vc-rollback

vc-revert and vc-rollback look like they could go straight to
vc-buffer-sync-fileset, but vc-register has extra trickery.

I have to confess I've never used anything more than vc-diff and
vc-next-action :-), so I'd be afraid to touch the rest.  Would you like
to start with vc-diff doing the right thing and take the rest on notice?






^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset)
  2010-03-25 22:42 bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset) Kevin Ryde
  2010-03-28 19:43 ` Chong Yidong
@ 2020-09-14 13:42 ` Lars Ingebrigtsen
  1 sibling, 0 replies; 4+ messages in thread
From: Lars Ingebrigtsen @ 2020-09-14 13:42 UTC (permalink / raw)
  To: Kevin Ryde; +Cc: 5773

Kevin Ryde <user42@zip.com.au> writes:

> If you re-run M-x vc-diff from a *vc-diff* buffer, it doesn't ask you to
> save the buffer being diffed the way that it does when operating from
> that buffer itself
>
>     C-x C-f /some/file/under/vc/control
>     C-x v =
>     C-x o
>     # edit the file's buffer a bit
>     C-x o           # back to the *vc-diff*
>     C-x v =
>
>     => doesn't ask about saving the edits

This bug is still present in Emacs 28, and the ten year old patch
amazingly still applies, and fixes the issue, so I've applied it to the
trunk (with minor stylistic changes).

There was then some discussion about whether other functions could also
do with a similar change, which is true, but that shouldn't preclude us
from fixing this bug.  If somebody sees similar issues in other buffers
that they think should be changed, then they can open new bug reports.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-09-14 13:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-25 22:42 bug#5773: 23.1; vc-diff save buffer when re-diffing (or save whole fileset) Kevin Ryde
2010-03-28 19:43 ` Chong Yidong
2010-03-31  0:36   ` Kevin Ryde
2020-09-14 13:42 ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).