unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* A vc wish: vc-timemachine
@ 2022-10-15 20:07 John Yates
  2022-10-15 20:25 ` Manuel Uberti
  2022-10-16  5:30 ` Eli Zaretskii
  0 siblings, 2 replies; 17+ messages in thread
From: John Yates @ 2022-10-15 20:07 UTC (permalink / raw)
  To: Emacs developers

Given the recent up-tick in vc development I would love dearly a vc
equivalent of:
https://github.com/emacsmirror/git-timemachine/blob/master/git-timemachine.el



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

* Re: A vc wish: vc-timemachine
  2022-10-15 20:07 A vc wish: vc-timemachine John Yates
@ 2022-10-15 20:25 ` Manuel Uberti
  2022-10-16  5:30 ` Eli Zaretskii
  1 sibling, 0 replies; 17+ messages in thread
From: Manuel Uberti @ 2022-10-15 20:25 UTC (permalink / raw)
  To: John Yates, Emacs developers

On 15/10/22 22:07, John Yates wrote:
> Given the recent up-tick in vc development I would love dearly a vc
> equivalent of:
> https://github.com/emacsmirror/git-timemachine/blob/master/git-timemachine.el

What a coincidence! This morning I wrote to Peter Stiernström, the 
author of git-timemachine, asking if there is any interest in adding it 
to GNU ELPA or Non-GNU ELPA.

-- 
Manuel Uberti
https://manueluberti.eu




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

* Re: A vc wish: vc-timemachine
  2022-10-15 20:07 A vc wish: vc-timemachine John Yates
  2022-10-15 20:25 ` Manuel Uberti
@ 2022-10-16  5:30 ` Eli Zaretskii
  2022-10-16  8:17   ` [vc-region-history in HG] (was: A vc wish: vc-timemachine) Uwe Brauer
  2022-10-16 11:49   ` A vc wish: vc-timemachine John Yates
  1 sibling, 2 replies; 17+ messages in thread
From: Eli Zaretskii @ 2022-10-16  5:30 UTC (permalink / raw)
  To: John Yates; +Cc: emacs-devel

> From: John Yates <john@yates-sheets.org>
> Date: Sat, 15 Oct 2022 16:07:58 -0400
> 
> Given the recent up-tick in vc development I would love dearly a vc
> equivalent of:
> https://github.com/emacsmirror/git-timemachine/blob/master/git-timemachine.el

Doesn't vc-region-history (C-x v h) fit the bill?



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

* [vc-region-history in HG] (was: A vc wish: vc-timemachine)
  2022-10-16  5:30 ` Eli Zaretskii
@ 2022-10-16  8:17   ` Uwe Brauer
  2022-10-16 10:51     ` [vc-region-history in HG] Daniel Martín
  2022-10-16 11:49   ` A vc wish: vc-timemachine John Yates
  1 sibling, 1 reply; 17+ messages in thread
From: Uwe Brauer @ 2022-10-16  8:17 UTC (permalink / raw)
  To: emacs-devel

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

>>> "EZ" == Eli Zaretskii <eliz@gnu.org> writes:

>> From: John Yates <john@yates-sheets.org>
>> Date: Sat, 15 Oct 2022 16:07:58 -0400
>> 
>> Given the recent up-tick in vc development I would love dearly a vc
>> equivalent of:
>> https://github.com/emacsmirror/git-timemachine/blob/master/git-timemachine.el

> Doesn't vc-region-history (C-x v h) fit the bill?

I just realized that vc-region-history does not work in hg, in the sense
that it just shows the changes in the whole buffer, while it works for
git. I looked briefly at the code and could not find any special calls
to git there.

Any idea what could be the reason (not that there are very many HG users
on this list...)?


-- 
I strongly condemn Putin's war of aggression against the Ukraine.
I support to deliver weapons to Ukraine's military. 
I support the ban of Russia from SWIFT.
I support the EU membership of the Ukraine. 

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5673 bytes --]

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

* Re: [vc-region-history in HG]
  2022-10-16  8:17   ` [vc-region-history in HG] (was: A vc wish: vc-timemachine) Uwe Brauer
@ 2022-10-16 10:51     ` Daniel Martín
  2022-10-16 12:17       ` Uwe Brauer
  2022-10-16 13:58       ` [there is hg log -L] " Uwe Brauer
  0 siblings, 2 replies; 17+ messages in thread
From: Daniel Martín @ 2022-10-16 10:51 UTC (permalink / raw)
  To: emacs-devel

Uwe Brauer <oub@mat.ucm.es> writes:

>
> I just realized that vc-region-history does not work in hg, in the sense
> that it just shows the changes in the whole buffer, while it works for
> git. I looked briefly at the code and could not find any special calls
> to git there.
>
> Any idea what could be the reason (not that there are very many HG users
> on this list...)?

In a git repository, the function delegates to the backend function
vc-git-region-history, which calls "git log -L" (requires git 1.8.4+).

If this cheatsheet is accurate,
https://hyperpolyglot.org/version-control, there is no direct Mercurial
alternative to git log -L ("commits which touched lines").

But perhaps we can implement the feature for Mercurial in some other
way.



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

* Re: A vc wish: vc-timemachine
  2022-10-16  5:30 ` Eli Zaretskii
  2022-10-16  8:17   ` [vc-region-history in HG] (was: A vc wish: vc-timemachine) Uwe Brauer
@ 2022-10-16 11:49   ` John Yates
  2022-10-16 22:29     ` Dmitry Gutov
  2022-10-18 11:59     ` Richard Stallman
  1 sibling, 2 replies; 17+ messages in thread
From: John Yates @ 2022-10-16 11:49 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On Sun, Oct 16, 2022 at 1:30 AM Eli Zaretskii <eliz@gnu.org> wrote:
>
> Doesn't vc-region-history (C-x v h) fit the bill?

No.  vc-region-history's presents a concatenation of diffs.

git-timemachine is more akin to a non-existent
vc-revision-same-window.  It is a minor mode applied to a buffer
visiting a version controlled file.  It renders that buffer readonly
and then allows one to 'scroll' backward and forward over that file's
linear history, always showing a fully reconstructed revision, reusing
a single buffer.

My druthers would be for a vc-browse command that pops a new buffer
containing the most recently committed revision of the subject file.
It would support operations similar to git-timemachine:
* vc-browse-show-previous
* vc-browse-show-next

git-timemachine style refinements could include:
* vc-browse-show-commit
* vc-browse-show-annotation
* vc-browsw-goto-earlier-commit   (regex search)



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

* Re: [vc-region-history in HG]
  2022-10-16 10:51     ` [vc-region-history in HG] Daniel Martín
@ 2022-10-16 12:17       ` Uwe Brauer
  2022-10-16 15:50         ` [It works] (was: [vc-region-history in HG]) Uwe Brauer
  2022-10-16 13:58       ` [there is hg log -L] " Uwe Brauer
  1 sibling, 1 reply; 17+ messages in thread
From: Uwe Brauer @ 2022-10-16 12:17 UTC (permalink / raw)
  To: emacs-devel

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

>>> "DM" == Daniel Martín <mardani29@yahoo.es> writes:

> Uwe Brauer <oub@mat.ucm.es> writes:
>> 
>> I just realized that vc-region-history does not work in hg, in the sense
>> that it just shows the changes in the whole buffer, while it works for
>> git. I looked briefly at the code and could not find any special calls
>> to git there.
>> 
>> Any idea what could be the reason (not that there are very many HG users
>> on this list...)?

> In a git repository, the function delegates to the backend function
> vc-git-region-history, which calls "git log -L" (requires git 1.8.4+).

> If this cheatsheet is accurate,
> https://hyperpolyglot.org/version-control, there is no direct Mercurial
> alternative to git log -L ("commits which touched lines").

Thanks!
Hm, I see, what is the difference then to annotate?

BTW I just found in vc-hg-region-history-mode



(define-derived-mode vc-hg-region-history-mode
    vc-hg-log-view-mode "Hg-Region-History"
  "Major mode to browse Hg's \"log -p\" output."

But this seems to be a different beast

> But perhaps we can implement the feature for Mercurial in some other
> way.

I try to contact some mercurial guru.


-- 
I strongly condemn Putin's war of aggression against the Ukraine.
I support to deliver weapons to Ukraine's military. 
I support the ban of Russia from SWIFT.
I support the EU membership of the Ukraine. 

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5673 bytes --]

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

* [there is hg log -L] (was: [vc-region-history in HG])
  2022-10-16 10:51     ` [vc-region-history in HG] Daniel Martín
  2022-10-16 12:17       ` Uwe Brauer
@ 2022-10-16 13:58       ` Uwe Brauer
  1 sibling, 0 replies; 17+ messages in thread
From: Uwe Brauer @ 2022-10-16 13:58 UTC (permalink / raw)
  To: emacs-devel

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

>>> "DM" == Daniel Martín <mardani29@yahoo.es> writes:

> Uwe Brauer <oub@mat.ucm.es> writes:
>> 
>> I just realized that vc-region-history does not work in hg, in the sense
>> that it just shows the changes in the whole buffer, while it works for
>> git. I looked briefly at the code and could not find any special calls
>> to git there.
>> 
>> Any idea what could be the reason (not that there are very many HG users
>> on this list...)?

> In a git repository, the function delegates to the backend function
> vc-git-region-history, which calls "git log -L" (requires git 1.8.4+).

> If this cheatsheet is accurate,
> https://hyperpolyglot.org/version-control, there is no direct Mercurial
> alternative to git log -L ("commits which touched lines").


I just learned, that at least for mercurial version => 5.2

 hg help log --verbose 

Tells me


-L --line-range FILE,RANGE [+] follow line range of specified file
                                (EXPERIMENTAL)

So it should work, shouldn't it?

Regards




-- 
I strongly condemn Putin's war of aggression against the Ukraine.
I support to deliver weapons to Ukraine's military. 
I support the ban of Russia from SWIFT.
I support the EU membership of the Ukraine. 

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5673 bytes --]

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

* [It works] (was: [vc-region-history in HG])
  2022-10-16 12:17       ` Uwe Brauer
@ 2022-10-16 15:50         ` Uwe Brauer
  0 siblings, 0 replies; 17+ messages in thread
From: Uwe Brauer @ 2022-10-16 15:50 UTC (permalink / raw)
  To: emacs-devel

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





> Thanks!
> Hm, I see, what is the difference then to annotate?

Ok, I tested it again, starting from scratch, I can confirm that it
works, but it displays also the diff as in


,----
| changeset:   1:bc59feefdcfb
| user:        Uwe Brauer <oub@mat.ucm.es>
| date:        Sun Oct 16 17:38:59 2022 +0200
| summary:     second commit subsection
| 
| diff --git a/new.org b/new.org
| --- a/new.org
| +++ b/new.org
| @@ -1,3 +1,8 @@
|  * Introduction
|  
|  A bit of more stuff
| +
| +** New subsection
| +
| +We add a new subsection
| +
| 
| changeset:   0:1302ad3dd1fd
| user:        Uwe Brauer <oub@mat.ucm.es>
| date:        Sun Oct 16 17:38:38 2022 +0200
| summary:     First commit section
| 
| diff --git a/new.org b/new.org
| new file mode 100755
| --- /dev/null
| +++ b/new.org
| @@ -0,0 +1,3 @@
| +* Introduction
| +
| +A bit of more stuff
`----


so the hg command line command would be

hg log --follow --patch -L new.org,1:9 

While sometimes a 

hg log --follow  -L new.org,1:9 

Might be more appropriate.

Any change to disable optionally the --patch option?


[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5673 bytes --]

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

* Re: A vc wish: vc-timemachine
  2022-10-16 11:49   ` A vc wish: vc-timemachine John Yates
@ 2022-10-16 22:29     ` Dmitry Gutov
  2022-10-17  1:26       ` John Yates
  2022-10-18 11:59     ` Richard Stallman
  1 sibling, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2022-10-16 22:29 UTC (permalink / raw)
  To: John Yates, Eli Zaretskii; +Cc: emacs-devel

On 16.10.2022 14:49, John Yates wrote:
> My druthers would be for a vc-browse command that pops a new buffer
> containing the most recently committed revision of the subject file.
> It would support operations similar to git-timemachine:
> * vc-browse-show-previous
> * vc-browse-show-next
> 
> git-timemachine style refinements could include:
> * vc-browse-show-commit
> * vc-browse-show-annotation
> * vc-browsw-goto-earlier-commit   (regex search)

Is vc-annotate missing much of these features?

The navigation is there (n, p, d, l, a), the panel is togglable. I 
suppose we could tune the colors and/or the absence of font-lock.



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

* Re: A vc wish: vc-timemachine
  2022-10-16 22:29     ` Dmitry Gutov
@ 2022-10-17  1:26       ` John Yates
  2022-10-17 19:12         ` Juri Linkov
  0 siblings, 1 reply; 17+ messages in thread
From: John Yates @ 2022-10-17  1:26 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Eli Zaretskii, emacs-devel

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

I grant you that these capabilities are present in a vc-annotate buffer.

That said, vc-annotate is a jarring presentation.  As I browse through
different revisions I want the major mode to remain that of the original
(non-annotated) file.  I want syntax-based highlighting, lsp support, etc.

On Sun, Oct 16, 2022 at 6:29 PM Dmitry Gutov <dgutov@yandex.ru> wrote:

> On 16.10.2022 14:49, John Yates wrote:
> > My druthers would be for a vc-browse command that pops a new buffer
> > containing the most recently committed revision of the subject file.
> > It would support operations similar to git-timemachine:
> > * vc-browse-show-previous
> > * vc-browse-show-next
> >
> > git-timemachine style refinements could include:
> > * vc-browse-show-commit
> > * vc-browse-show-annotation
> > * vc-browsw-goto-earlier-commit   (regex search)
>
> Is vc-annotate missing much of these features?
>
> The navigation is there (n, p, d, l, a), the panel is togglable. I
> suppose we could tune the colors and/or the absence of font-lock.
>


-- 
John Yates
505 Tremont St, #803
Boston, MA 02116

[-- Attachment #2: Type: text/html, Size: 1852 bytes --]

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

* Re: A vc wish: vc-timemachine
  2022-10-17  1:26       ` John Yates
@ 2022-10-17 19:12         ` Juri Linkov
  2022-10-17 21:03           ` John Yates
  0 siblings, 1 reply; 17+ messages in thread
From: Juri Linkov @ 2022-10-17 19:12 UTC (permalink / raw)
  To: John Yates; +Cc: Dmitry Gutov, Eli Zaretskii, emacs-devel

> That said, vc-annotate is a jarring presentation.  As I browse through
> different revisions I want the major mode to remain that of the original
> (non-annotated) file.  I want syntax-based highlighting, lsp support, etc.

This looks rather like the Log-View buffer where revisions are navigated
with `n' and `p', and visited with `f' (log-view-find-revision).



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

* Re: A vc wish: vc-timemachine
  2022-10-17 19:12         ` Juri Linkov
@ 2022-10-17 21:03           ` John Yates
  2022-10-17 21:51             ` John Yates
  0 siblings, 1 reply; 17+ messages in thread
From: John Yates @ 2022-10-17 21:03 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Dmitry Gutov, Eli Zaretskii, emacs-devel

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

Agreed.  The basic bits of functionality are latent in vc.  Or, put another
way, timemachine is mostly a ui optimization.

That said, that optimization can be significant when looking for a
revision, if the subject code has been heavily edited.

On Mon, Oct 17, 2022 at 3:18 PM Juri Linkov <juri@linkov.net> wrote:

> > That said, vc-annotate is a jarring presentation.  As I browse through
> > different revisions I want the major mode to remain that of the original
> > (non-annotated) file.  I want syntax-based highlighting, lsp support,
> etc.
>
> This looks rather like the Log-View buffer where revisions are navigated
> with `n' and `p', and visited with `f' (log-view-find-revision).
>


-- 
John Yates
505 Tremont St, #803
Boston, MA 02116

[-- Attachment #2: Type: text/html, Size: 1472 bytes --]

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

* Re: A vc wish: vc-timemachine
  2022-10-17 21:03           ` John Yates
@ 2022-10-17 21:51             ` John Yates
  0 siblings, 0 replies; 17+ messages in thread
From: John Yates @ 2022-10-17 21:51 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Dmitry Gutov, Eli Zaretskii, emacs-devel

On Mon, Oct 17, 2022 at 5:03 PM John Yates <john@yates-sheets.org> wrote:
>
> That said, that optimization can be significant when looking for a revision, if the subject code has been heavily edited.

To make that more concrete...

My backup scheme records an RCS revision everytime I save a file:
https://github.com/jsyjr/bostr   (A save is non-interaction and hence
records no meaningful commit comment.)

When something goes wrong I want to browse the various previous saved
states, searching for one that "looks right".  Here "looks right" is
based on what I remember the code looking like at some point in the
past.  The image in my memory is emphatically not a diff, nor a blame
display.  Typically it was some prog-mode buffer with font-locking.

Having to drive my search process from some alternate revision
enumeration and having to separately bring up a view of each revision
is just a painful amount of friction.

Re: scratching my own itch...

I am trying to prototype something based on Peter Stiernström's
git-timemachine.  Initially it will only support git, so, initially,
not a solution for my itch.  But it will help me get my feet wet with
vc and will provide a means for others to "kick the ui tires".



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

* Re: A vc wish: vc-timemachine
  2022-10-16 11:49   ` A vc wish: vc-timemachine John Yates
  2022-10-16 22:29     ` Dmitry Gutov
@ 2022-10-18 11:59     ` Richard Stallman
  2022-10-18 14:46       ` John Yates
  1 sibling, 1 reply; 17+ messages in thread
From: Richard Stallman @ 2022-10-18 11:59 UTC (permalink / raw)
  To: John Yates; +Cc: eliz, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > git-timemachine is more akin to a non-existent
  > vc-revision-same-window.  It is a minor mode applied to a buffer
  > visiting a version controlled file.  It renders that buffer readonly
  > and then allows one to 'scroll' backward and forward over that file's
  > linear history, always showing a fully reconstructed revision, reusing
  > a single buffer.

That is a nice feature, but it should not be limited to git repos.
Can you use the existing repo-sw-independent VC primitives to do this
job?

-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





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

* Re: A vc wish: vc-timemachine
  2022-10-18 11:59     ` Richard Stallman
@ 2022-10-18 14:46       ` John Yates
  2022-10-21 19:42         ` Richard Stallman
  0 siblings, 1 reply; 17+ messages in thread
From: John Yates @ 2022-10-18 14:46 UTC (permalink / raw)
  To: rms; +Cc: eliz, emacs-devel

On Tue, Oct 18, 2022 at 7:59 AM Richard Stallman <rms@gnu.org> wrote:
>
> That is a nice feature, but it should not be limited to git repos.
> Can you use the existing repo-sw-independent VC primitives to do this
> job?

This is my first exposure to the vc architecture so there is learning
to be had.  My initial prototype will be based on the existing
git-centric git-timemachine code.

As I explained in a subsequent post, my personal itch is to have this
functionality available for RCS.  So, indeed, I will stick with the
project until it is properly integrated into the vc framework.



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

* Re: A vc wish: vc-timemachine
  2022-10-18 14:46       ` John Yates
@ 2022-10-21 19:42         ` Richard Stallman
  0 siblings, 0 replies; 17+ messages in thread
From: Richard Stallman @ 2022-10-21 19:42 UTC (permalink / raw)
  To: John Yates; +Cc: eliz, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > This is my first exposure to the vc architecture so there is learning
  > to be had.  My initial prototype will be based on the existing
  > git-centric git-timemachine code.

It's fine to do that as a first try, if it helps you reach the goal.
But please don't release or install it until you've redone it to
be VCS-independent.


-- 
Dr Richard Stallman (https://stallman.org)
Chief GNUisance of the GNU Project (https://gnu.org)
Founder, Free Software Foundation (https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)





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

end of thread, other threads:[~2022-10-21 19:42 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-15 20:07 A vc wish: vc-timemachine John Yates
2022-10-15 20:25 ` Manuel Uberti
2022-10-16  5:30 ` Eli Zaretskii
2022-10-16  8:17   ` [vc-region-history in HG] (was: A vc wish: vc-timemachine) Uwe Brauer
2022-10-16 10:51     ` [vc-region-history in HG] Daniel Martín
2022-10-16 12:17       ` Uwe Brauer
2022-10-16 15:50         ` [It works] (was: [vc-region-history in HG]) Uwe Brauer
2022-10-16 13:58       ` [there is hg log -L] " Uwe Brauer
2022-10-16 11:49   ` A vc wish: vc-timemachine John Yates
2022-10-16 22:29     ` Dmitry Gutov
2022-10-17  1:26       ` John Yates
2022-10-17 19:12         ` Juri Linkov
2022-10-17 21:03           ` John Yates
2022-10-17 21:51             ` John Yates
2022-10-18 11:59     ` Richard Stallman
2022-10-18 14:46       ` John Yates
2022-10-21 19:42         ` Richard Stallman

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).