all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Jonas Bernoulli <jonas@bernoul.li>
To: Michael Albinus <michael.albinus@gmx.de>
Cc: Emacs developers <emacs-devel@gnu.org>, Dmitry Gutov <dgutov@yandex.ru>
Subject: Re: git-handler.el
Date: Sat, 12 Aug 2017 12:48:22 +0200	[thread overview]
Message-ID: <877ey9cb9l.fsf@bernoul.li> (raw)
In-Reply-To: <87o9rmiems.fsf@detlef>


Michael Albinus <michael.albinus@gmx.de> writes:
> As a warmup, I have written vc-handler.el and vc-git-handler.el. They
> are far from being complete, but they'll show what's possible.

Great!  I didn't have a change to look at this much yet, hope to get to
it in a week or so.

> A revisioned filename is something like "/path/to/file@@revision".
> "revision" could be a revision like "81656add81", a branch like
> "scratch/kqueue", or a tag like "emacs-19.34". Of course, the syntax
> could be changed.

I would prefer /path/to/repo/@git:REVISION:path/to/file.  I don't have
a strong opinion about what the magic cookie should look like, but I
think it should be inserted at the root of the working tree.

> vc-handler.el is the common part. There is the alist
> `vc-file-name-handler-alist', which lists for every magic file name
> function the responsible handler function. The majority of them is also
> implemented in vc-handler.el, because they don't need any vcs specific
> handling.
>
> For every different backend, there could be a respective backend
> package. I've implemented vc-git-handler.el, because I know more about
> vc-git than magit. But there's no problem to implement vc-magit.el, for
> example. I plan also to write at least vc-cvs.el.

As I said I haven't looked at the code much yet, so I don't know what
the implications of having alternative handlers for the same vc would
be.  But I fear that it would reduce interoperability.  But packages
other than VC should be able to customize the behavior to some extend
and that could probably be implemented using a few hooks and *-function
variables.

> You might play a little bit to see how it looks like. Maybe the most
> simple start is to enter dired, because it uses many of the magic file
> name operations. Just do "C-x d ~/src/emacs/src/emacs.c@@" (supposed
> your Emacs git is located at ~/src/emacs, as in my case).

Speaking of Dired, trees (directories) should be supported in addition
to blobs (files), among other things that would allow visiting them in
Dired.

> Both packages are far from being complete. Performance is terrible (a
> proper cache mechanism is needed),

In what way is performance terrible?  I would have expected that asking
git for information about one blob would not be that much more expensive
than asking the file-system for the same information about one file.
(I.e. the the difference would only become relevant if you needed
information about many files.)

> my git skill is restricted so I might
> not use the best commands, and you will see many TODO comments.

I will try to help with that, but I am a little busy right now.

> It's
> just a proof of concept. And I hope it is useful for both magit and vc.

I am sure we can get it there.  Some more thoughts:

What happens when you visit say HEAD:file and then HEAD is updated?  I
think this should behave much the same as for files that are modified on
disk.  The user could then use `revert-buffer' to update the buffer.

You mentioned in another message that this is read-only.  While that's a
good default, I think it should be possible for Magit or something else
to provide a `modified-p' and a `save-file' function by setting some
`*-function' variables.

It would help me and others that are not very familiar with VC's
internals to understand the file-handler parts if you could create one
commit that implements those parts without taking advantage of any
caching provided by VC and then add that caching in a separate commit.

  Cheers,
  Jonas

Ps: I'll probably be unavailable for a few days.



  reply	other threads:[~2017-08-12 10:48 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-05 15:29 In support of Jonas Bernoulli's Magit (was: comparing code on different branches) John Yates
2017-07-05 16:15 ` Kaushal Modi
2017-07-05 16:22 ` In support of Jonas Bernoulli's Magit Óscar Fuentes
2017-07-05 16:27   ` Kaushal Modi
2017-07-05 16:38   ` Stefan Monnier
2017-07-05 18:15     ` Óscar Fuentes
2017-07-05 23:03   ` Richard Stallman
2017-07-06  0:24     ` Clément Pit-Claudel
2017-07-06  1:46       ` Glenn Morris
2017-07-06  2:17         ` Clément Pit-Claudel
2017-07-10  9:26           ` Richard Stallman
2017-07-06  2:29         ` Jean-Christophe Helary
2017-07-14 14:34       ` Philippe Vaucher
2017-07-16  1:51         ` Richard Stallman
2017-07-06  1:50     ` Glenn Morris
2017-07-06 14:12       ` Ted Zlatanov
2017-07-06 14:47         ` Kaushal Modi
2017-07-06 17:11         ` Óscar Fuentes
2017-07-06 16:02       ` Richard Stallman
2017-07-06 16:52         ` Ken Manheimer
2017-07-07 18:23           ` Richard Stallman
2017-07-07 18:49             ` Stefan Monnier
2017-07-07 22:08             ` Phillip Lord
2017-07-07 22:22               ` Stefan Monnier
2017-07-08  6:58                 ` Eli Zaretskii
2017-07-08  6:57               ` Eli Zaretskii
2017-07-08  9:05                 ` Phillip Lord
2017-07-08 10:20                   ` Eli Zaretskii
2017-07-08 20:34                     ` Phillip Lord
2017-07-09  2:33                       ` Eli Zaretskii
2017-07-10  9:28                       ` Richard Stallman
2017-07-10 13:15                         ` Phillip Lord
2017-07-11 11:45                           ` Richard Stallman
2017-07-08 17:04                   ` Richard Stallman
2017-07-08 20:52                     ` Phillip Lord
2017-07-10  9:30                       ` Richard Stallman
2017-07-08 17:02                 ` Richard Stallman
2017-07-10  9:26               ` Richard Stallman
2017-07-10 12:47                 ` Phillip Lord
2017-07-10 23:26                   ` Richard Stallman
2017-07-11  9:40                     ` Phillip Lord
2017-07-11 22:56                       ` Richard Stallman
2017-07-10 23:27                   ` Richard Stallman
2017-07-10 16:31                 ` Marcin Borkowski
2017-07-10 23:30                   ` Richard Stallman
2017-07-11  4:20                     ` Marcin Borkowski
2017-07-11 11:48                       ` Richard Stallman
2017-07-06 23:01         ` Dmitry Gutov
2017-07-07 18:27           ` Richard Stallman
2017-07-07 18:52             ` Stefan Monnier
2017-07-08 17:01               ` Richard Stallman
2017-07-08 17:42                 ` raman
2017-07-08 18:58                   ` Eli Zaretskii
2017-07-08 20:57                   ` Phillip Lord
2017-07-08 22:57                   ` John Yates
2017-07-09  0:04                     ` raman
2017-07-09  9:25                   ` Marcin Borkowski
2017-07-09 14:19                     ` Eli Zaretskii
2017-07-10  1:01                     ` In defense of VC [was: In support of Jonas Bernoulli's Magit] Juliusz Chroboczek
2017-07-10  7:09                       ` Michael Albinus
2017-07-10  8:34                         ` Lars Ingebrigtsen
2017-07-10  8:47                           ` Juliusz Chroboczek
2017-07-10  8:59                             ` Yuri Khan
2017-07-10 16:28                               ` Marcin Borkowski
2017-07-10 17:12                               ` Eli Zaretskii
2017-07-16 18:01                               ` Dmitry Gutov
2017-07-16 19:09                                 ` Marcin Borkowski
2017-07-16 19:17                                   ` Dmitry Gutov
2017-07-10 23:26                       ` Richard Stallman
2017-07-11  4:15                         ` Marcin Borkowski
2017-07-11 11:48                           ` Richard Stallman
2017-07-11 14:10                             ` Marcin Borkowski
2017-07-11 14:27                               ` Juliusz Chroboczek
2017-07-11 22:56                               ` Richard Stallman
2017-07-11 14:37                           ` Eli Zaretskii
2017-07-11 16:03                             ` Dmitry Gutov
2017-07-11  7:10                         ` Andreas Schwab
2017-07-11  7:26                           ` Michael Albinus
2017-07-11 22:55                           ` Richard Stallman
2017-07-10  9:29                     ` In support of Jonas Bernoulli's Magit Richard Stallman
2017-07-10 16:32                       ` Marcin Borkowski
2017-07-10 23:30                         ` Richard Stallman
2017-07-11  4:14                           ` Marcin Borkowski
2017-07-06 15:24     ` Phillip Lord
2017-07-10  9:26       ` Richard Stallman
2017-07-10 13:09         ` Phillip Lord
2017-07-11 11:45           ` Richard Stallman
2017-07-05 16:29 ` Stefan Monnier
2017-07-05 18:37   ` Ingo Lohmar
2017-07-05 18:14 ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Noam Postavsky
2017-07-06  5:06   ` Paul Michael Reilly
2017-07-06  8:46     ` In support of Jonas Bernoulli's Magit Toon Claes
2017-07-07  1:38       ` Mike Gerwitz
2017-07-07  8:16         ` Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit) Nicolas Petton
2017-07-07  8:27           ` Tino Calancha
2017-07-07  8:29             ` Nicolas Petton
2017-07-07 12:08               ` Ted Zlatanov
2017-07-08 11:02                 ` Ævar Arnfjörð Bjarmason
2017-07-08 11:13                   ` Dmitry Gutov
2017-07-08 11:53                     ` Eli Zaretskii
2017-07-08 12:04                       ` Dmitry Gutov
2017-07-08 21:02                         ` Phillip Lord
2017-07-08 23:19                           ` Tim Cross
2017-07-08 12:43                       ` Ævar Arnfjörð Bjarmason
2017-07-08 12:54                         ` Eli Zaretskii
2017-07-08 11:29                   ` Jean-Christophe Helary
2017-07-07 16:55             ` Mike Gerwitz
2017-07-07 18:23       ` In support of Jonas Bernoulli's Magit Richard Stallman
2017-07-07 18:23     ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Richard Stallman
2017-07-13 16:13   ` Jonas Bernoulli
2017-07-14  1:20     ` Richard Stallman
2017-07-14 18:24       ` Jonas Bernoulli
2017-07-14  3:31     ` In support of Jonas Bernoulli's Magit Stefan Monnier
2017-07-14 18:09       ` Jonas Bernoulli
2017-07-14  7:14     ` git-handler.el (was: In support of Jonas Bernoulli's Magit) Michael Albinus
2017-07-14 17:57       ` Jonas Bernoulli
2017-08-11 10:26         ` git-handler.el Michael Albinus
2017-08-12 10:48           ` Jonas Bernoulli [this message]
2017-08-12 12:01             ` git-handler.el Eli Zaretskii
2017-08-12 17:26               ` git-handler.el Jonas Bernoulli
2017-08-12 17:43                 ` git-handler.el Eli Zaretskii
2017-08-12 19:32                 ` git-handler.el Michael Albinus
2017-08-12 18:22             ` git-handler.el John Wiegley
2017-08-12 18:28               ` git-handler.el Michael Albinus
2017-08-12 19:52               ` git-handler.el Jonas Bernoulli
2017-08-13  9:26                 ` git-handler.el Michael Albinus
2017-08-12 19:17             ` git-handler.el Michael Albinus
2017-08-12 19:46               ` git-handler.el Yuri Khan
2017-08-13  9:14                 ` git-handler.el Michael Albinus
2017-08-13 10:08                   ` git-handler.el Yuri Khan
2017-08-13 14:31                     ` git-handler.el Eli Zaretskii
2017-08-13 15:08                       ` git-handler.el Yuri Khan
2017-08-13 15:26                         ` git-handler.el Eli Zaretskii
2017-08-14 16:42                         ` git-handler.el Michael Albinus
2017-08-14 16:40                     ` git-handler.el Michael Albinus
2017-07-10 16:16 ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Filipe Silva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877ey9cb9l.fsf@bernoul.li \
    --to=jonas@bernoul.li \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=michael.albinus@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.