all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
@ 2017-07-05 15:29 John Yates
  2017-07-05 16:15 ` Kaushal Modi
                   ` (4 more replies)
  0 siblings, 5 replies; 136+ messages in thread
From: John Yates @ 2017-07-05 15:29 UTC (permalink / raw)
  To: Richard Stallman
  Cc: jwiegley, jean.christophe.helary, Emacs developers, Yuri Khan

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

On Tue, Jul 4, 2017 at 7:05 PM, Richard Stallman <rms@gnu.org> wrote:

> I wish someone would write a package comparable to Magit that
> we could get legal papers for and include it in Emacs.
>

​Richard,

I cannot let this go without commenting.  Do you understand what
you are advocating?

In Jonas you have someone who is doing just about everything
right per your notion of software freedom including applying gpl v3.
He has made significant personal sacrifices to provide emacs with
a package that is unique among editors and IDEs.  It could emerge
as one of those oh-so-elusive creatures: a true killer app for the
emacs platform.

Jonas has and continues to deliver a steady stream of features,
bug fixes and refinements.  Magit is clearly a work of love that is
wonderfully supported.  Jonas has exhibited admirable project
leadership skill and has published a detailed, credible map to
the future:

  https://github.com/magit/magit/projects/1

Some of us care enough about developers like Jonas and the
value he is delivering to emacs that we have responded to his
plea for financial support via PayPal, Patreon or Bountysource.

Were Jonas' effort invested in a non-GNU project, or at least not
one so dear to you heart as emacs, I suspect that you would
applaud his work.

Instead you seem to advocate undercutting Jonas' efforts with
no good reason to believe that you would get a replacement of
anywhere near the same quality.  Further, were you actually to
mount such a competing effort I am confident that long before it
ever delivered any useful amount of functionality you, the emacs
community, and the gnu effort would harvest significant bad press.

Sometimes community might be more important than copyright
assignment.  Please reconsider you request.

/john

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

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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  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
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 136+ messages in thread
From: Kaushal Modi @ 2017-07-05 16:15 UTC (permalink / raw)
  To: John Yates, Richard Stallman
  Cc: jwiegley, Yuri Khan, Jean-Christophe Helary, Jonas Bernoulli,
	Emacs developers

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

Adding my support.

On Wed, Jul 5, 2017 at 11:30 AM John Yates <john@yates-sheets.org> wrote:

> In Jonas you have someone who is doing just about everything
> right per your notion of software freedom including applying gpl v3.
> He has made significant personal sacrifices to provide emacs with
> a package that is unique among editors and IDEs.  It could emerge
> as one of those oh-so-elusive creatures: a true killer app for the
> emacs platform.
>
> Jonas has and continues to deliver a steady stream of features,
> bug fixes and refinements.  Magit is clearly a work of love that is
> wonderfully supported.  Jonas has exhibited admirable project
> leadership skill and has published a detailed, credible map to
> the future:
>
>   https://github.com/magit/magit/projects/1
>

In addition, the Magit project is an epitome of elisp projects; it has a
wonderful Info manual with source code in Org (yes, I am aware of RMS'
views on Org mode), tests!, active support by Jonas and other key Magit
developers in bug fixing and providing solutions to user-specific flows,
etc.

Some of us care enough about developers like Jonas and the
> value he is delivering to emacs that we have responded to his
> plea for financial support via PayPal, Patreon or Bountysource.
>

Me too.


> Sometimes community might be more important than copyright
> assignment.  Please reconsider you request.
>

+1
-- 

Kaushal Modi

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

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

* Re: In support of Jonas Bernoulli's Magit
  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 ` Óscar Fuentes
  2017-07-05 16:27   ` Kaushal Modi
                     ` (2 more replies)
  2017-07-05 16:29 ` Stefan Monnier
                   ` (2 subsequent siblings)
  4 siblings, 3 replies; 136+ messages in thread
From: Óscar Fuentes @ 2017-07-05 16:22 UTC (permalink / raw)
  To: emacs-devel

I'm afraid that you guys are missing the point. This has no relation
with the maintainer of Magit, but with the fact that Magit cannot be
distributed with Emacs.




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

* Re: In support of Jonas Bernoulli's Magit
  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 23:03   ` Richard Stallman
  2 siblings, 0 replies; 136+ messages in thread
From: Kaushal Modi @ 2017-07-05 16:27 UTC (permalink / raw)
  To: Óscar Fuentes, emacs-devel

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

On Wed, Jul 5, 2017 at 12:24 PM Óscar Fuentes <ofv@wanadoo.es> wrote:

> I'm afraid that you guys are missing the point. This has no relation
> with the maintainer of Magit, but with the fact that Magit cannot be
> distributed with Emacs.
>

So the proposed solution should be to help figure out how to make that
happen instead of proposing a rewrite of the whole project.
-- 

Kaushal Modi

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

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

* Re: In support of Jonas Bernoulli's Magit
  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: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-10 16:16 ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Filipe Silva
  4 siblings, 1 reply; 136+ messages in thread
From: Stefan Monnier @ 2017-07-05 16:29 UTC (permalink / raw)
  To: emacs-devel

>> I wish someone would write a package comparable to Magit that
>> we could get legal papers for and include it in Emacs.
> I cannot let this go without commenting.  Do you understand what
> you are advocating?

FWIW, I fully agree with John that developing a "replacement" for Magit
just because we can't get the copyright paperwork would be harmful at best.

A much more constructive path would be to figure out *how* to get Magit
into GNU ELPA (i.e. start collecting copyright paperwork from the
various contributors, look at the code that's not yet covered to see
what we could about it, consider maybe a subset of Magit, consider
tweaking the policy for GNU ELPA, ...).


        Stefan




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

* Re: In support of Jonas Bernoulli's Magit
  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
  2 siblings, 1 reply; 136+ messages in thread
From: Stefan Monnier @ 2017-07-05 16:38 UTC (permalink / raw)
  To: emacs-devel

> I'm afraid that you guys are missing the point.  This has no relation
> with the maintainer of Magit, but with the fact that Magit cannot be
> distributed with Emacs.

I'm afraid you're missing the point: distributing Magit with Emacs is
not terribly important, compared to fostering good relationships.

BTW, if we want to distribute something like Magit with Emacs, there's
no need to write a replacement: we can simply include Magit itself,
since the license allows us to do so.
The only hurdle is the one *we* (Emacs maintainers) put.


        Stefan




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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  2017-07-05 15:29 In support of Jonas Bernoulli's Magit (was: comparing code on different branches) John Yates
                   ` (2 preceding siblings ...)
  2017-07-05 16:29 ` Stefan Monnier
@ 2017-07-05 18:14 ` Noam Postavsky
  2017-07-06  5:06   ` Paul Michael Reilly
  2017-07-13 16:13   ` Jonas Bernoulli
  2017-07-10 16:16 ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Filipe Silva
  4 siblings, 2 replies; 136+ messages in thread
From: Noam Postavsky @ 2017-07-05 18:14 UTC (permalink / raw)
  To: John Yates
  Cc: Jonas Bernoulli, Richard Stallman, John Wiegley,
	Jean-Christophe Helary, Yuri Khan, Emacs developers

On Wed, Jul 5, 2017 at 11:29 AM, John Yates <john@yates-sheets.org> wrote:
> Jonas has and continues to deliver a steady stream of features,
> bug fixes and refinements.  Magit is clearly a work of love that is
> wonderfully supported.  Jonas has exhibited admirable project
> leadership skill and has published a detailed, credible map to
> the future:

Speaking of, Jonas asked me to let you all know he's planning on
commenting here this weekend.

But in the meantime don't worry: he agrees with the idea of making
Magit into a GNU project in principle.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-05 16:38   ` Stefan Monnier
@ 2017-07-05 18:15     ` Óscar Fuentes
  0 siblings, 0 replies; 136+ messages in thread
From: Óscar Fuentes @ 2017-07-05 18:15 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> I'm afraid that you guys are missing the point.  This has no relation
>> with the maintainer of Magit, but with the fact that Magit cannot be
>> distributed with Emacs.
>
> I'm afraid you're missing the point: distributing Magit with Emacs is
> not terribly important, compared to fostering good relationships.

This is your personal opinion, not the policy exercised by the Emacs
project on recent times (see bzr, clang for two glaring examples).

Besides, "fostering good relations" on this case is a bit of a red
herring, since IIRC the current Magit maintainer is quite collaborative
with the Emacs core maintainers and, anyways, enriching Emacs itself is
more important than having good relations with a single individual.

> BTW, if we want to distribute something like Magit with Emacs, there's
> no need to write a replacement: we can simply include Magit itself,
> since the license allows us to do so.
> The only hurdle is the one *we* (Emacs maintainers) put.

Was that hurdle put by the Emacs maintainer or by the GNU governance?




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-05 16:29 ` Stefan Monnier
@ 2017-07-05 18:37   ` Ingo Lohmar
  0 siblings, 0 replies; 136+ messages in thread
From: Ingo Lohmar @ 2017-07-05 18:37 UTC (permalink / raw)
  To: Stefan Monnier, emacs-devel

I agree with the consensus in this thread, and on reading Richard's mail
this morning, several thoughts along the same lines crossed my mind.

Please let's not undermine a successful *free software* project (by the
strictest FSF definition) by trying to duplicate (presumably badly) the
work, passion, clear vision and eye for quality that Jonas has shown.

Also, from a practical point of view --- why would anybody in his/her
right mind contribute to such a project, instead of contributing to
Magit?  There are no ethical incentives, and any technical curiosity
has to face the *huge* amount of work and refinement that has already
happened in Magit.

Since getting copyright assignments for Magit contributions seems a
rather daunting task (given the longevity and the size of the project),
we could try to encourage technical steps to integrate parts of Magit
into GNU ELPA and/or Emacs.  Jonas has extracted several auxiliary
packages that might qualify, for example because they have been newly
written, rewritten, or have all necessary copyright assignments.  A
rewrite of magit's core using libgit2 (maybe as an Emacs module) is also
on the map --- maybe this could be done in such a way that it could
become part of Emacs?



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

* Re: In support of Jonas Bernoulli's Magit
  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 23:03   ` Richard Stallman
  2017-07-06  0:24     ` Clément Pit-Claudel
                       ` (2 more replies)
  2 siblings, 3 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-05 23:03 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: 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. ]]]

  > I'm afraid that you guys are missing the point. This has no relation
  > with the maintainer of Magit, but with the fact that Magit cannot be
  > distributed with Emacs.

You've hit the nail on the head.  I am not saying anything either good
or bad about Magit as such, because that's not the issue here.

We have a problem in Emacs: it doesn't contain a good interface to
git.  People often recommend something that is not in Emacs.  That's
not a good situation.  I want to fix it.

In principle, we could fix it with Magit.  I would be very glad if we
did.  That would require tracking down lots of people and convincing
them to sign the legal papers, and maybe replacing some pieces of code
whose authors didn't sign.

A year ago, more or less, I asked people if we could do this and I was
told it was impossible.

If we don't fix it with Magit, we need something else to fix it with.
So I asked people to build a suitable something else.

However, if there is now a real possibility of putting Magit into
Emacs, of course I would like to do it that way.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  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-14 14:34       ` Philippe Vaucher
  2017-07-06  1:50     ` Glenn Morris
  2017-07-06 15:24     ` Phillip Lord
  2 siblings, 2 replies; 136+ messages in thread
From: Clément Pit-Claudel @ 2017-07-06  0:24 UTC (permalink / raw)
  To: emacs-devel

On 2017-07-05 19:03, Richard Stallman wrote:
> That would require tracking down lots of people and convincing
> them to sign the legal papers, and maybe replacing some pieces of code
> whose authors didn't sign.

Or we could make a one-time exception to our copyright paper's policy for Magit.  That may not be easy either, but it might be done.

This does not necessarily mean dropping the requirement to get legal papers.  It could mean re-evaluating the legal papers process, instead, to ensure that it can be conducted entirely online.  There was a bit of discussion on that topic in the past, and this push to get legal papers for Magit could be a good occasion to revisit it.

Concretely, the proposal would be to work with the FSF's lawyers to set up an entirely-online copyright assignment process, with no need to email assign@gnu.org.  "Getting legal papers from 100 Magit contributors" sounds a lot more scary than "getting 100 magit contributors to click through the FSF's CLA" (Contributor's License Agreement).



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

* Re: In support of Jonas Bernoulli's Magit
  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-06  2:29         ` Jean-Christophe Helary
  2017-07-14 14:34       ` Philippe Vaucher
  1 sibling, 2 replies; 136+ messages in thread
From: Glenn Morris @ 2017-07-06  1:46 UTC (permalink / raw)
  To: Clément Pit-Claudel; +Cc: emacs-devel

Clément Pit-Claudel wrote:

> It could mean re-evaluating the legal papers process, instead, to
> ensure that it can be conducted entirely online. There was a bit of
> discussion on that topic in the past, and this push to get legal
> papers for Magit could be a good occasion to revisit it.

Do you not imagine that the FSF appreciates that completing the
assignment process is an issue for some people, and have already made it
as simple as the legal system allows?

https://www.fsf.org/blogs/licensing/fsf-to-begin-accepting-gpg-signatures-for-copyright-assignments-from-italy

"We are always working on ways to make assignment itself simpler."



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-05 23:03   ` Richard Stallman
  2017-07-06  0:24     ` Clément Pit-Claudel
@ 2017-07-06  1:50     ` Glenn Morris
  2017-07-06 14:12       ` Ted Zlatanov
  2017-07-06 16:02       ` Richard Stallman
  2017-07-06 15:24     ` Phillip Lord
  2 siblings, 2 replies; 136+ messages in thread
From: Glenn Morris @ 2017-07-06  1:50 UTC (permalink / raw)
  To: rms; +Cc: Óscar Fuentes, emacs-devel

Richard Stallman wrote:

> We have a problem in Emacs: it doesn't contain a good interface to
> git. 

I get on just fine with Emacs VC and git. It enables me to do just what
I did with other VCS in Emacs, and I appreciate the uniformity of
interface. Obviously, many people prefer a more featureful interface to
git's many bells and whistles, and that's fine. But IMO your statement
is an exaggeration.



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

* Re: In support of Jonas Bernoulli's Magit
  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
  1 sibling, 1 reply; 136+ messages in thread
From: Clément Pit-Claudel @ 2017-07-06  2:17 UTC (permalink / raw)
  To: Glenn Morris; +Cc: emacs-devel

On 2017-07-05 21:46, Glenn Morris wrote:
> Do you not imagine that the FSF appreciates that completing the 
> assignment process is an issue for some people,

Which part of my email made you think that I didn't?

> and have already made it as simple as the legal system allows?

No, I don't imagine this, in part because Richard did in the past support the idea of setting up an online form (to let people submit the info normally sent to assign@gnu.org).  Is it silly to imagine that this may not be a top priority item?  Or that volunteer efforts could help streamline the process further?

Clément.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  1:46       ` Glenn Morris
  2017-07-06  2:17         ` Clément Pit-Claudel
@ 2017-07-06  2:29         ` Jean-Christophe Helary
  1 sibling, 0 replies; 136+ messages in thread
From: Jean-Christophe Helary @ 2017-07-06  2:29 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Clément Pit-Claudel, emacs-devel


> On Jul 6, 2017, at 10:46, Glenn Morris <rgm@gnu.org> wrote:
> 
> Clément Pit-Claudel wrote:
> 
>> It could mean re-evaluating the legal papers process, instead, to
>> ensure that it can be conducted entirely online. There was a bit of
>> discussion on that topic in the past, and this push to get legal
>> papers for Magit could be a good occasion to revisit it.
> 
> Do you not imagine that the FSF appreciates that completing the
> assignment process is an issue for some people, and have already made it
> as simple as the legal system allows?
> 
> https://www.fsf.org/blogs/licensing/fsf-to-begin-accepting-gpg-signatures-for-copyright-assignments-from-italy

That was 18 months ago and in the meanwhile I was able to scan a signed document and send it as a PDF. from Japan. There are still lags in the process, mostly because some parts don't seem to be automatized.

Jean-Christophe 


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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  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 18:23     ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Richard Stallman
  2017-07-13 16:13   ` Jonas Bernoulli
  1 sibling, 2 replies; 136+ messages in thread
From: Paul Michael Reilly @ 2017-07-06  5:06 UTC (permalink / raw)
  To: Noam Postavsky, John Yates
  Cc: Jonas Bernoulli, Richard Stallman, John Wiegley,
	Jean-Christophe Helary, Yuri Khan, Emacs developers

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

>
> But in the meantime don't worry: he agrees with the idea of making
> Magit into a GNU project in principle.
>

That is wonderful news! Were Magit a GNU project a few years ago, Richard
would no doubt have a few less gray hairs and I would not have been the
proverbial messenger whom Richard shot when trying to help him grok Git by
using Magit. :-)

There are likely more than a few of us who have learned Git via Magit and
for which we are grateful to Jonas and the Magit contributors.

I would implore the GNU leaders to bend over backwards to include projects
like Magit which exemplify Free Software values and practices.  I would go
so far as to suggest that catalogs of GNU software also include a special
category of software that fails the GNU stamp of approval by virtue of only
missing copyright assignment to GNU.  And I would implore these same
leaders to use such software proudly.
-- 
-pmr

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

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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  5:06   ` Paul Michael Reilly
@ 2017-07-06  8:46     ` Toon Claes
  2017-07-07  1:38       ` 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
  1 sibling, 2 replies; 136+ messages in thread
From: Toon Claes @ 2017-07-06  8:46 UTC (permalink / raw)
  To: Paul Michael Reilly
  Cc: Jonas Bernoulli, Richard Stallman, Noam Postavsky, John Wiegley,
	Jean-Christophe Helary, Yuri Khan, Emacs developers, John Yates

Paul Michael Reilly <pmr@pajato.com> writes:
> That is wonderful news! Were Magit a GNU project a few years ago...
>
> There are likely more than a few of us who have learned Git via Magit
> and for which we are grateful to Jonas and the Magit contributors.

Let me first say, I am not against making Magit a GNU project, in
contrary. But I think Magit would never have gotten such a vibrant
community if the project was hosted on Savannah, rather than on GitHub.

Having a more /modern development platform/, like GitHub/GitLab/Gitea/...,
makes it much easier for new contributors to participate on a project.

So making a project an official GNU project is two-fold. All the legal
paperwork would be in order for all contributors, but I seriously doubt
the Magit project would ever have reach anything close to the current
207 contributors.

I know this discussion has been raised several times before, but I
really would like to see GNU/FSF to adopt a more modern platform.


-- Toon



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

* Re: In support of Jonas Bernoulli's Magit
  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
  1 sibling, 2 replies; 136+ messages in thread
From: Ted Zlatanov @ 2017-07-06 14:12 UTC (permalink / raw)
  To: emacs-devel

On Wed, 05 Jul 2017 21:50:23 -0400 Glenn Morris <rgm@gnu.org> wrote: 

GM> Richard Stallman wrote:
>> We have a problem in Emacs: it doesn't contain a good interface to
>> git. 

GM> I get on just fine with Emacs VC and git. It enables me to do just what
GM> I did with other VCS in Emacs, and I appreciate the uniformity of
GM> interface. Obviously, many people prefer a more featureful interface to
GM> git's many bells and whistles, and that's fine. But IMO your statement
GM> is an exaggeration.

Agreed. Magit in particular adds a steep learning curve to Git's. It's
good software and fun to use, but it's definitely not a good *general*
interface (which I'm assuming RMS meant).

Ted




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 14:12       ` Ted Zlatanov
@ 2017-07-06 14:47         ` Kaushal Modi
  2017-07-06 17:11         ` Óscar Fuentes
  1 sibling, 0 replies; 136+ messages in thread
From: Kaushal Modi @ 2017-07-06 14:47 UTC (permalink / raw)
  To: emacs-devel, Ted Zlatanov

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

On Thu, Jul 6, 2017 at 10:12 AM Ted Zlatanov <tzz@lifelogs.com> wrote:

> Agreed. Magit in particular adds a steep learning curve to Git's.


I felt just the contrary. I would have never used hunk-based staging,
cherry-picking, interactive rebasing (re-ordering, squashing, amending
commits older than HEAD, etc) had I not come across Magit.

(It's so convenient that I can commit stuff to Org mode repo using Magit on
my phone as ssh port is blocked at work.)


> It's
> good software and fun to use, but it's definitely not a good *general*
> interface (which I'm assuming RMS meant).
>
-- 

Kaushal Modi

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

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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-05 23:03   ` Richard Stallman
  2017-07-06  0:24     ` Clément Pit-Claudel
  2017-07-06  1:50     ` Glenn Morris
@ 2017-07-06 15:24     ` Phillip Lord
  2017-07-10  9:26       ` Richard Stallman
  2 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-06 15:24 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Óscar Fuentes, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > I'm afraid that you guys are missing the point. This has no relation
>   > with the maintainer of Magit, but with the fact that Magit cannot be
>   > distributed with Emacs.
>
> You've hit the nail on the head.  I am not saying anything either good
> or bad about Magit as such, because that's not the issue here.
>
> We have a problem in Emacs: it doesn't contain a good interface to
> git.  People often recommend something that is not in Emacs.  That's
> not a good situation.  I want to fix it.
>
> In principle, we could fix it with Magit.  I would be very glad if we
> did.  That would require tracking down lots of people and convincing
> them to sign the legal papers, and maybe replacing some pieces of code
> whose authors didn't sign.
>
> A year ago, more or less, I asked people if we could do this and I was
> told it was impossible.


It is not impossible, just difficult and time-consuming. I would relate
my experiences with getting copyright assignment for dash (33
contributors vs 200, no dependencies vs 4 dependencies).

Almost everybody I asked about copyright assignment said yes. Those who
did not just did not reply and have disappeared from the web. I
contacted everybody through their emails in git. I had to write out one
function, of about 14 lines.

The problem is that the process is currently blind. I email all the
developers, but I can't tell who already has assignment. Those who do
not, I email information to, but then cannot tell who has sent the
request forms out. Then I email again, to see whether they have
assignment forms, because I get no notification when the process has
completed. Copyright assignment is, per se, a big slow down. But, with
the FSF process, it's even harder. I know that some people can see the
assignments, but AFAICT, there is not notification of when this changes.

Installing some kind of ticket system, and a method for letting people
declare whether they have assignment already would be an enormous help.

As it stood, I think, dash.el took 4 months, because of the necessity
for the to-ing and fro-ing. dash.el in ELPA is now several versions
behind, because it's has some new contributors since, and I haven't been
able to get the energy up to start the process again. We also now have
seq.el, most of whose functionality is covered by dash; an unfortunate
and unnecessary duplication.

The FSF has a donations drive every year. Can you not spend some of that
on making the process easier? Even a public website showing people with
assignment (who are willing to be public) would help. And, another
copyright assignment clerk who can help with the process of emailing
everyone in a project like magit.

After that, getting magit into Emacs or ELPA might be less impossible
after all.

Phil






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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  1:50     ` Glenn Morris
  2017-07-06 14:12       ` Ted Zlatanov
@ 2017-07-06 16:02       ` Richard Stallman
  2017-07-06 16:52         ` Ken Manheimer
  2017-07-06 23:01         ` Dmitry Gutov
  1 sibling, 2 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-06 16:02 UTC (permalink / raw)
  To: Glenn Morris; +Cc: ofv, 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. ]]]

  > > We have a problem in Emacs: it doesn't contain a good interface to
  > > git. 

  > I get on just fine with Emacs VC and git. It enables me to do just what
  > I did with other VCS in Emacs, and I appreciate the uniformity of
  > interface. Obviously, many people prefer a more featureful interface to
  > git's many bells and whistles, and that's fine. But IMO your statement
  > is an exaggeration.

I'm not stating a personal opinion about VC or Magit.  (I don't have
one.)  I'm citing what other people generally say on this list.

When people ask here what they should do to use git with Emacs, the
usual answer posted is "use Magit".  Thus the problem: that the usual
way people recommend to use Emacs with Git is via a package we have
been unable to include in Emacs.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 16:02       ` Richard Stallman
@ 2017-07-06 16:52         ` Ken Manheimer
  2017-07-07 18:23           ` Richard Stallman
  2017-07-06 23:01         ` Dmitry Gutov
  1 sibling, 1 reply; 136+ messages in thread
From: Ken Manheimer @ 2017-07-06 16:52 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Óscar Fuentes, Glenn Morris, emacs-devel@gnu.org

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

On Thu, Jul 6, 2017 at 12:02 PM, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > > We have a problem in Emacs: it doesn't contain a good interface to
>   > > git.
>
>   > I get on just fine with Emacs VC and git. It enables me to do just what
>   > I did with other VCS in Emacs, and I appreciate the uniformity of
>   > interface. Obviously, many people prefer a more featureful interface to
>   > git's many bells and whistles, and that's fine. But IMO your statement
>   > is an exaggeration.
>
> I'm not stating a personal opinion about VC or Magit.  (I don't have
> one.)  I'm citing what other people generally say on this list.
>
> When people ask here what they should do to use git with Emacs, the
> usual answer posted is "use Magit".  Thus the problem: that the usual
> way people recommend to use Emacs with Git is via a package we have
> been unable to include in Emacs.
>

In following this conversation, I'm getting the distinct feeling that Magit
constitutes an interesting and important case, which might warrant
improving the copyright assignment mechanisms.

On one hand, the magnitude of the Magit project, together with the state of
the GNU copyright assignment mechanisms, present a formidable obstacle to
satisfying the copyright assignment requirement.

On the other hand, as many voices are suggesting, the magnitude of the
benefits Magit offers for developers to do their work simply cannot be
disregarded or bypassed. Kaushal Modi's account of ways Magit makes some
git stuff more approachable than git, itself, or other alternatives. My own
experience is similar. This is no small thing, because in some ways git
provides a similar, unbeatable advantage for source code management,
compared to alternatives. So for some developers (including me), Magit is
not just a good option for doing my job, it is irreplaceable.

One conclusion I'm trying to suggest, from all this, is that Magit warrants
extra effort to solve the copyright assignment problem. Phillip Lords
account of his effort to bring Dash into conformance suggests what seem
like crucial prospective improvements to the copyright assignment
machinery. However, they risk not getting enough attention because they
involve improving legally sensitive bureaucratic processes, which requires
a lot of persistence. I hope that effort is invested - Magit really is that
valuable.

Ken

--
> Dr Richard Stallman
> President, Free Software Foundation (gnu.org, fsf.org)
> Internet Hall-of-Famer (internethalloffame.org)
> Skype: No way! See stallman.org/skype.html.
>
>
>

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

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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 14:12       ` Ted Zlatanov
  2017-07-06 14:47         ` Kaushal Modi
@ 2017-07-06 17:11         ` Óscar Fuentes
  1 sibling, 0 replies; 136+ messages in thread
From: Óscar Fuentes @ 2017-07-06 17:11 UTC (permalink / raw)
  To: emacs-devel

Ted Zlatanov <tzz@lifelogs.com> writes:

> On Wed, 05 Jul 2017 21:50:23 -0400 Glenn Morris <rgm@gnu.org> wrote: 
>
> GM> Richard Stallman wrote:
>>> We have a problem in Emacs: it doesn't contain a good interface to
>>> git. 
>
> GM> I get on just fine with Emacs VC and git. It enables me to do just what
> GM> I did with other VCS in Emacs, and I appreciate the uniformity of
> GM> interface. Obviously, many people prefer a more featureful interface to
> GM> git's many bells and whistles, and that's fine. But IMO your statement
> GM> is an exaggeration.
>
> Agreed. Magit in particular adds a steep learning curve to Git's. It's
> good software and fun to use, but it's definitely not a good *general*
> interface (which I'm assuming RMS meant).

My impression is that Magit greatly facilitates the acquisition of Git's
core concepts and saves the user from learning Git's command line
interface.

It is one of those rare instances of a package that is very effective
for novices and experts alike.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 16:02       ` Richard Stallman
  2017-07-06 16:52         ` Ken Manheimer
@ 2017-07-06 23:01         ` Dmitry Gutov
  2017-07-07 18:27           ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-06 23:01 UTC (permalink / raw)
  To: rms, Glenn Morris; +Cc: ofv, emacs-devel

On 7/6/17 7:02 PM, Richard Stallman wrote:

> When people ask here what they should do to use git with Emacs, the
> usual answer posted is "use Magit".  Thus the problem: that the usual
> way people recommend to use Emacs with Git is via a package we have
> been unable to include in Emacs.

Even if we launch a successful GNU project that competes with Magit, 
*and* manage to more or less cover its feature set, it is highly 
unlikely to eclipse Magit by popularity. People will continue 
recommending Magit.

Instead, we should work toward getting Magit into ELPA, and continue 
improving VC and its Git support. It's a decent interface to Git 
already, and it provide a simpler workflow better suited for new users.



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

* Re: In support of Jonas Bernoulli's Magit
  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 18:23       ` In support of Jonas Bernoulli's Magit Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Mike Gerwitz @ 2017-07-07  1:38 UTC (permalink / raw)
  To: Toon Claes
  Cc: Jonas Bernoulli, Richard Stallman, Noam Postavsky,
	Paul Michael Reilly, Jean-Christophe Helary, Yuri Khan,
	John Wiegley, Emacs developers, John Yates

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

On Thu, Jul 06, 2017 at 10:46:18 +0200, Toon Claes wrote:
> Let me first say, I am not against making Magit a GNU project, in
> contrary. But I think Magit would never have gotten such a vibrant
> community if the project was hosted on Savannah, rather than on GitHub.
>
> Having a more /modern development platform/, like GitHub/GitLab/Gitea/...,
> makes it much easier for new contributors to participate on a project.

You're free to use GitLab for GNU projects:

  https://www.gnu.org/software/repo-criteria-evaluation.html

> I know this discussion has been raised several times before, but I
> really would like to see GNU/FSF to adopt a more modern platform.

Yes, a GNU GitLab instance (for example) would be good to have.

-- 
Mike Gerwitz
Free Software Hacker+Activist | GNU Maintainer & Volunteer
GPG: D6E9 B930 028A 6C38 F43B  2388 FEF6 3574 5E6F 6D05
https://mikegerwitz.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

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

* Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-07  1:38       ` Mike Gerwitz
@ 2017-07-07  8:16         ` Nicolas Petton
  2017-07-07  8:27           ` Tino Calancha
  0 siblings, 1 reply; 136+ messages in thread
From: Nicolas Petton @ 2017-07-07  8:16 UTC (permalink / raw)
  To: Mike Gerwitz, Toon Claes
  Cc: John Wiegley, Jonas Bernoulli, Richard Stallman, Emacs developers

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

Mike Gerwitz <mtg@gnu.org> writes:

> You're free to use GitLab for GNU projects:
>
>   https://www.gnu.org/software/repo-criteria-evaluation.html

I'd love it if we used GitLab for the development of Emacs.  IIRC, John
talked about setting up an instance to try it out.

If that's of any interest, I would gladly setup an instance for us to try.

Cheers,
Nico

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  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 16:55             ` Mike Gerwitz
  0 siblings, 2 replies; 136+ messages in thread
From: Tino Calancha @ 2017-07-07  8:27 UTC (permalink / raw)
  To: Nicolas Petton
  Cc: Mike Gerwitz, Jonas Bernoulli, Richard Stallman, John Wiegley,
	Emacs developers, Toon Claes



On Fri, 7 Jul 2017, Nicolas Petton wrote:

> Mike Gerwitz <mtg@gnu.org> writes:
>
>> You're free to use GitLab for GNU projects:
>>
>>   https://www.gnu.org/software/repo-criteria-evaluation.html
>
> I'd love it if we used GitLab for the development of Emacs.  IIRC, John
> talked about setting up an instance to try it out.
>
> If that's of any interest, I would gladly setup an instance for us to try.
He and Ted already set up one:
https://gitlab.com/emacs-ci/emacs




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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-07  8:27           ` Tino Calancha
@ 2017-07-07  8:29             ` Nicolas Petton
  2017-07-07 12:08               ` Ted Zlatanov
  2017-07-07 16:55             ` Mike Gerwitz
  1 sibling, 1 reply; 136+ messages in thread
From: Nicolas Petton @ 2017-07-07  8:29 UTC (permalink / raw)
  To: Tino Calancha
  Cc: Mike Gerwitz, Jonas Bernoulli, Richard Stallman, John Wiegley,
	Emacs developers, Toon Claes

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

Tino Calancha <tino.calancha@gmail.com> writes:

> He and Ted already set up one:
> https://gitlab.com/emacs-ci/emacs

Was this instnace supposed to be used for development, or just GitLab's
CI?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-07  8:29             ` Nicolas Petton
@ 2017-07-07 12:08               ` Ted Zlatanov
  2017-07-08 11:02                 ` Ævar Arnfjörð Bjarmason
  0 siblings, 1 reply; 136+ messages in thread
From: Ted Zlatanov @ 2017-07-07 12:08 UTC (permalink / raw)
  To: emacs-devel

On Fri, 07 Jul 2017 10:29:02 +0200 Nicolas Petton <nicolas@petton.fr> wrote: 

NP> Tino Calancha <tino.calancha@gmail.com> writes:
>> He and Ted already set up one:
>> https://gitlab.com/emacs-ci/emacs

NP> Was this instnace supposed to be used for development, or just GitLab's
NP> CI?

Just CI.

Ted




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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-07  8:27           ` Tino Calancha
  2017-07-07  8:29             ` Nicolas Petton
@ 2017-07-07 16:55             ` Mike Gerwitz
  1 sibling, 0 replies; 136+ messages in thread
From: Mike Gerwitz @ 2017-07-07 16:55 UTC (permalink / raw)
  To: Tino Calancha
  Cc: Jonas Bernoulli, Richard Stallman, John Wiegley, Nicolas Petton,
	Emacs developers, Toon Claes

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

On Fri, Jul 07, 2017 at 17:27:18 +0900, Tino Calancha wrote:
> On Fri, 7 Jul 2017, Nicolas Petton wrote:
>> If that's of any interest, I would gladly setup an instance for us to try.
> He and Ted already set up one:
> https://gitlab.com/emacs-ci/emacs

The use of gitlab.com's instance for hosting is fine, but one of the
issues discussed on this list was that of CI:  Using gitlab.com for CI is
relying on a third party to do your computing, which is
SaaSS.  Howerver, if GNU hosted its own GitLab instance on its own
servers, there would be no such issue.

Having the FSF sysadmins work with GNU to set up a GitLab instance is
what I was referring to.  (I'm not aware of any plans to do so atm.)
Obviously if it's also used for CI for GNU projects then it would need
considerable resources, and I have no idea what is even currently
available.

-- 
Mike Gerwitz
Free Software Hacker+Activist | GNU Maintainer & Volunteer
GPG: D6E9 B930 028A 6C38 F43B  2388 FEF6 3574 5E6F 6D05
https://mikegerwitz.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 818 bytes --]

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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  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 18:23     ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-07 18:23 UTC (permalink / raw)
  To: Paul Michael Reilly
  Cc: jonas, npostavs, jwiegley, jean.christophe.helary, yuri.v.khan,
	emacs-devel, john

[[[ 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. ]]]

  > That is wonderful news! Were Magit a GNU project a few years ago, Richard
  > would no doubt have a few less gray hairs and I would not have been the
  > proverbial messenger whom Richard shot when trying to help him grok Git by
  > using Magit. :-)

I didn't shoot anyone -- I criticized the message.
I still think of you as my friend.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  8:46     ` In support of Jonas Bernoulli's Magit Toon Claes
  2017-07-07  1:38       ` Mike Gerwitz
@ 2017-07-07 18:23       ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-07 18:23 UTC (permalink / raw)
  To: Toon Claes
  Cc: jonas, npostavs, pmr, jean.christophe.helary, yuri.v.khan,
	jwiegley, emacs-devel, john

[[[ 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. ]]]

  > Having a more /modern development platform/, like GitHub/GitLab/Gitea/...,
  > makes it much easier for new contributors to participate on a project.

You are judging these platforms based on convenience.  We have other
ways of judging their practices -- based on ethics and how they affect
free software.  See https://gnu.org/software/repo-criteria.html.

GitHub has done great harm to our whole community by encouraging
people to post programs with no licenses (thus nonfree) and to be
sloppy about indicating licenses.  We grade it as unacceptable.

GitLab is better but still not entirely good.

I have not heard of Gitea before so I have no opinion.  I will ask
the FSF to evaluate it.

As for changing the software on savannah, that can be done
if people volunteer to work on it.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  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
  0 siblings, 2 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-07 18:23 UTC (permalink / raw)
  To: Ken Manheimer; +Cc: ofv, rgm, 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. ]]]

  > which might warrant
  > improving the copyright assignment mechanisms.

I don't think the mechanism, as such, is much of an inconvenience any
more.  Isn't all the commnication is done digitally now?

It could be improved, but that's like speeding up the fast parts
of a program -- not going to make a big difference.

The substantial part of the job is finding those people and asking
them to please sign.  But it's not terribly hard.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 23:01         ` Dmitry Gutov
@ 2017-07-07 18:27           ` Richard Stallman
  2017-07-07 18:52             ` Stefan Monnier
  0 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-07 18:27 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: ofv, rgm, 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. ]]]

  > Even if we launch a successful GNU project that competes with Magit, 
  > *and* manage to more or less cover its feature set, it is highly 
  > unlikely to eclipse Magit by popularity. 

Maybe so.  But it doesn't need to do everything Magit does.  It only
needs to be good enough to make git easy to use in Emacs.

					     People will continue 
  > recommending Magit.

Maybe so.  But if Emacs contains something that is at least adequate,
most users will find it from the manual and other Emacs distro
contents.

  > Instead, we should work toward getting Magit into ELPA, 

I am all in favor of that.  That is the best possible outcome.

However, developing something else should be plan B
if we can't or don't achieve that.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 18:23           ` Richard Stallman
@ 2017-07-07 18:49             ` Stefan Monnier
  2017-07-07 22:08             ` Phillip Lord
  1 sibling, 0 replies; 136+ messages in thread
From: Stefan Monnier @ 2017-07-07 18:49 UTC (permalink / raw)
  To: emacs-devel

>> which might warrant improving the copyright assignment mechanisms.
> I don't think the mechanism, as such, is much of an inconvenience any
> more.  Isn't all the commnication is done digitally now?

I think Phillip's points are very valid: there are still friction
points, *especially* when the one doing the work is not a maintainer.
When I was Emacs maintainer, I'd be advised whenever a new assignment
for Emacs came in and I could easily check existing assignments, so it
was rather painless.  I still have my fencepost.gnu.org account so I can
still easily check existing assignments, but I'm not informed any more
when a new assignment comes in.

In a sense the new process where the communication is all done
electronically has made those remaining friction points more apparent.

> The substantial part of the job is finding those people and asking
> them to please sign.  But it's not terribly hard.

There's also finding who you need to contact, keeping track of the
status, reminding them after a while, ...  maybe it's not *hard* but
it's tedious and it can eat a lot of time.

I really appreciated that Phillip did that work for dash, and
I think in general that's a kind of work that would benefit from being
delegated, but for that we need better access to the copyright.list
database for non-maintainers.


        Stefan




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 18:27           ` Richard Stallman
@ 2017-07-07 18:52             ` Stefan Monnier
  2017-07-08 17:01               ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Stefan Monnier @ 2017-07-07 18:52 UTC (permalink / raw)
  To: emacs-devel

> Maybe so.  But it doesn't need to do everything Magit does.  It only
> needs to be good enough to make git easy to use in Emacs.

Then I think we already have that in VC


        Stefan




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

* Re: In support of Jonas Bernoulli's Magit
  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
                                 ` (2 more replies)
  1 sibling, 3 replies; 136+ messages in thread
From: Phillip Lord @ 2017-07-07 22:08 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, rgm, Ken Manheimer, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > which might warrant
>   > improving the copyright assignment mechanisms.
>
> I don't think the mechanism, as such, is much of an inconvenience any
> more.  Isn't all the commnication is done digitally now?

Only if you live in Italy, Germany, India or the US.

At least according to

https://www.fsf.org/blogs/licensing/fsf-to-begin-accepting-scanned-signatures-for-copyright-assignments-from-india

This post also says the full list is in information for maintainers

https://www.gnu.org/prep/maintain/maintain.html#Copyright-Papers

Although, this only mentions Italy and the US.

> It could be improved, but that's like speeding up the fast parts
> of a program -- not going to make a big difference.
>
> The substantial part of the job is finding those people and asking
> them to please sign.  But it's not terribly hard.

It is terribly hard. The process consists of this:

1) Get list of all contributors
2) Email them all, recording the date
3) Email those who respond instructions
4) Email assign@fsf to find out current status
5) Email those who havent again
6) Reply to people who say "haven't heard anything"
7) Repeat some variation of 4,5, and 6

8) Work out how many are left
9) Once n < 3 or 4 check how big their contributions are
10) Write them out

Now, for dash, this wasn't too bad (of the 40 contributors I had to get
about 10 through the process, and do only one write out). A quick check
of my mailbox suggests it took around 100 emails over the course of
three months. Not too bad, but still painful. Magit has 4-5x as many
contributors, plus dependencies. Assuming linear scaling, we are looking
at ~1000 emails.

So, we can all bitch about the process; here is a suggestion to improve
things using current software that we already use -- debbugs, installed
with non-public archives which I presume it can do.

1) Get list of all contributors/contributor emails
2) Email assign with full list to find out who needs doing
3) Email each person with new debugs ticket
4) One of:
     assign@fsf cc's electronic communication to debbugs
     assign@fsf acknowledges paper communication *in either direction*
     to debbugs. assign would probably need to attach an ID number to
     outgoing assignment forms.

This would allow tracking the status of the current situation with
respect to each author in need of assignment. It would be more work for
assign@fsf, but would reduce their need to respond to "do we have
assignment for x yet" emails. It would work imperfectly: debbugs is
painful; not everyone would keep debbugs in the CC; and debbugs has a
X-Debbugs-CC field, which means the initial request would be CC'd to the
person when really you want X-Debbugs-TO. But it might work okay. And it
would mean that anyone could take on the task for a given package.

If you will get someone to set up debbugs to support this, help with
using it, and get assign@gnu to buy into the process, I will test it out
with the new assignments need to update dash. If you and GNU are bought
into improving the process, we can refine the details overtime.

If you think "it's not terribly hard", that's probably because you're a
very driven individual who has managed to achieve much that I would have
thought is hard to the point of impossibility. I'm not.

Phil






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

* Re: In support of Jonas Bernoulli's Magit
  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-10  9:26               ` Richard Stallman
  2 siblings, 1 reply; 136+ messages in thread
From: Stefan Monnier @ 2017-07-07 22:22 UTC (permalink / raw)
  To: emacs-devel

> So, we can all bitch about the process; here is a suggestion to improve
> things using current software that we already use -- debbugs, installed
> with non-public archives which I presume it can do.

IIUC the FSF already uses a tracking system (RT) for copyright
assignments, so it might be even simpler than that.


        Stefan




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 22:08             ` Phillip Lord
  2017-07-07 22:22               ` Stefan Monnier
@ 2017-07-08  6:57               ` Eli Zaretskii
  2017-07-08  9:05                 ` Phillip Lord
  2017-07-08 17:02                 ` Richard Stallman
  2017-07-10  9:26               ` Richard Stallman
  2 siblings, 2 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08  6:57 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, rms, emacs-devel

> From: phillip.lord@russet.org.uk (Phillip Lord)
> Date: Fri, 07 Jul 2017 23:08:52 +0100
> Cc: ofv@wanadoo.es, rgm@gnu.org, Ken Manheimer <ken.manheimer@gmail.com>,
> 	emacs-devel@gnu.org
> 
> So, we can all bitch about the process; here is a suggestion to improve
> things using current software that we already use -- debbugs, installed
> with non-public archives which I presume it can do.
> 
> 1) Get list of all contributors/contributor emails
> 2) Email assign with full list to find out who needs doing
> 3) Email each person with new debugs ticket
> 4) One of:
>      assign@fsf cc's electronic communication to debbugs
>      assign@fsf acknowledges paper communication *in either direction*
>      to debbugs. assign would probably need to attach an ID number to
>      outgoing assignment forms.

There's no need to rely on the FSF assignment clerk for tracking this
process: you can ask me to do that instead.  I see all the steps of
this process in my email inbox anyway, whether I want it or not.

In general, people who bump into bureaucratic impediments related to
GNU or FSF should ask for help.  Making this better/easier is part of
my and John's duties, and we have access to resources others don't.
You shouldn't need to try to solve these problems alone.

> If you will get someone to set up debbugs to support this, help with
> using it, and get assign@gnu to buy into the process, I will test it out
> with the new assignments need to update dash. If you and GNU are bought
> into improving the process, we can refine the details overtime.

FWIW, I don't want this to be handled via debbugs, as debbugs is
terribly unhelpful in little things that sometimes just make me mad.
Having to cope with it for handling bug reports is bad enough.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 22:22               ` Stefan Monnier
@ 2017-07-08  6:58                 ` Eli Zaretskii
  0 siblings, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08  6:58 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Fri, 07 Jul 2017 18:22:26 -0400
> 
> IIUC the FSF already uses a tracking system (RT) for copyright
> assignments, so it might be even simpler than that.

Yes, each request has an RT number, stated in each email sent about
it.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08  6:57               ` Eli Zaretskii
@ 2017-07-08  9:05                 ` Phillip Lord
  2017-07-08 10:20                   ` Eli Zaretskii
  2017-07-08 17:04                   ` Richard Stallman
  2017-07-08 17:02                 ` Richard Stallman
  1 sibling, 2 replies; 136+ messages in thread
From: Phillip Lord @ 2017-07-08  9:05 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ofv, rgm, rms, emacs-devel, ken.manheimer, Phillip Lord

On Sat, July 8, 2017 6:57 am, Eli Zaretskii wrote:
>> From: phillip.lord@russet.org.uk (Phillip Lord)
>> Date: Fri, 07 Jul 2017 23:08:52 +0100
>> Cc: ofv@wanadoo.es, rgm@gnu.org, Ken Manheimer
>> <ken.manheimer@gmail.com>,
>> emacs-devel@gnu.org
>> 1) Get list of all contributors/contributor emails
>> 2) Email assign with full list to find out who needs doing
>> 3) Email each person with new debugs ticket
>> 4) One of:
>> assign@fsf cc's electronic communication to debbugs assign@fsf
>> acknowledges paper communication *in either direction* to debbugs.
>> assign would probably need to attach an ID number to outgoing assignment
>> forms.
>
> There's no need to rely on the FSF assignment clerk for tracking this
> process: you can ask me to do that instead.  I see all the steps of
> this process in my email inbox anyway, whether I want it or not.

No this is no good. If I am going to do this, I want notifications -- push
not pull. So, there needs to be a way to open this up beyond maintainers.

Having a system to maintain links to the package we are trying to get
assignment for would be good. Currently, we are talking about assignment
for Emacs, of course, but knowing that we are asking for assignment wrt to
magit, rather than any other package, would be helpful.

Having something which handles something like blocking would be nice also.
i.e. we start a bug wrt to magit for assignment, then all the assignment
requests would be blockers. Then we would know when we are finished.




>
> In general, people who bump into bureaucratic impediments related to
> GNU or FSF should ask for help.  Making this better/easier is part of
> my and John's duties, and we have access to resources others don't. You
> shouldn't need to try to solve these problems alone.
>
>> If you will get someone to set up debbugs to support this, help with
>> using it, and get assign@gnu to buy into the process, I will test it out
>>  with the new assignments need to update dash. If you and GNU are
>> bought into improving the process, we can refine the details overtime.
>
> FWIW, I don't want this to be handled via debbugs, as debbugs is
> terribly unhelpful in little things that sometimes just make me mad.
> Having to cope with it for handling bug reports is bad enough.

I would agree. I don't like debbugs either. But, given the length of time,
for example, it has taken to discuss CI or project hosting alternatives,
it has the advantage of already existing.

Phil




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08  9:05                 ` Phillip Lord
@ 2017-07-08 10:20                   ` Eli Zaretskii
  2017-07-08 20:34                     ` Phillip Lord
  2017-07-08 17:04                   ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08 10:20 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, rms, emacs-devel

> Date: Sat, 8 Jul 2017 09:05:18 -0000
> From: "Phillip Lord" <phillip.lord@russet.org.uk>
> Cc: "Phillip Lord" <phillip.lord@russet.org.uk>,
>  ofv@wanadoo.es,
>  rgm@gnu.org,
>  ken.manheimer@gmail.com,
>  rms@gnu.org,
>  emacs-devel@gnu.org
> 
> On Sat, July 8, 2017 6:57 am, Eli Zaretskii wrote:
> >> From: phillip.lord@russet.org.uk (Phillip Lord)
> >> Date: Fri, 07 Jul 2017 23:08:52 +0100
> >> Cc: ofv@wanadoo.es, rgm@gnu.org, Ken Manheimer
> >> <ken.manheimer@gmail.com>,
> >> emacs-devel@gnu.org
> >> 1) Get list of all contributors/contributor emails
> >> 2) Email assign with full list to find out who needs doing
> >> 3) Email each person with new debugs ticket
> >> 4) One of:
> >> assign@fsf cc's electronic communication to debbugs assign@fsf
> >> acknowledges paper communication *in either direction* to debbugs.
> >> assign would probably need to attach an ID number to outgoing assignment
> >> forms.
> >
> > There's no need to rely on the FSF assignment clerk for tracking this
> > process: you can ask me to do that instead.  I see all the steps of
> > this process in my email inbox anyway, whether I want it or not.
> 
> No this is no good. If I am going to do this, I want notifications -- push
> not pull. So, there needs to be a way to open this up beyond maintainers.

Maybe there's a misunderstanding: I'm offering to do this in your
stead.  IOW, "if I'm going to do this" is no longer applicable: if you
ask me, I will do it for you -- you will no longer need to bother
about the process, you will just get a notification when it's done
(and you can query me about the current status, if you wish).

It's entirely up to you whether to take the offer, of course.



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  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:29                   ` Jean-Christophe Helary
  0 siblings, 2 replies; 136+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2017-07-08 11:02 UTC (permalink / raw)
  To: Ted Zlatanov; +Cc: Toon Claes, emacs-devel


On Fri, Jul 07 2017, Ted Zlatanov jotted:

> On Fri, 07 Jul 2017 10:29:02 +0200 Nicolas Petton <nicolas@petton.fr> wrote:
>
> NP> Tino Calancha <tino.calancha@gmail.com> writes:
>>> He and Ted already set up one:
>>> https://gitlab.com/emacs-ci/emacs
>
> NP> Was this instnace supposed to be used for development, or just GitLab's
> NP> CI?
>
> Just CI.

Which makes this rather off-topic from what Toon Claes was mentioning
upthread in enfm2mv8ineau.fsf@iotcl.com, which is that the main benefit
people get from platforms like Github or Gitlab is not that they're just
some dumb web UI or CI system on the side, but that they're the primary
coordination point & way to contribute to the project.

As a datapoint of one: I have ~20 patches in Magit and a bunch more in
various Elisp projects hosted on Github because contributing is so easy.

Usually when I discover bugs in things part of Emacs itself I just work
around them, since starting to contribute to the project would require
signing papers etc., which would be a huge hurdle compared to what I'm
fixing (none of my Magit contributions are major, just small fixes here
& there).



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  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 11:29                   ` Jean-Christophe Helary
  1 sibling, 1 reply; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-08 11:13 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason, Ted Zlatanov
  Cc: Toon Claes, emacs-devel

On 7/8/17 2:02 PM, Ævar Arnfjörð Bjarmason wrote:

> Usually when I discover bugs in things part of Emacs itself I just work
> around them, since starting to contribute to the project would require
> signing papers etc.,

You are not helping our case, unfortunately: even if Emacs switches to 
GitLab or something similar (which I hope it will), contributing will 
still require signing papers.

> which would be a huge hurdle compared to what I'm
> fixing (none of my Magit contributions are major, just small fixes here
> & there).

Small fixes (up to ~15 lines in total) don't require copyright assignment.



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 11:02                 ` Ævar Arnfjörð Bjarmason
  2017-07-08 11:13                   ` Dmitry Gutov
@ 2017-07-08 11:29                   ` Jean-Christophe Helary
  1 sibling, 0 replies; 136+ messages in thread
From: Jean-Christophe Helary @ 2017-07-08 11:29 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason
  Cc: Ted Zlatanov, Toon Claes, emacs-devel

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


> On Jul 8, 2017, at 20:02, Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
> 
> Usually when I discover bugs in things part of Emacs itself I just work
> around them, since starting to contribute to the project would require
> signing papers etc., which would be a huge hurdle compared to what I'm
> fixing (none of my Magit contributions are major, just small fixes here
> & there).

That's interesting, because everything I've contributed so far to emacs (2 small code patches and 1 documentation patch, *only*) is trivial and I've signed the papers right away to not be bothered with that anymore.

For one paper signed, you can contribute your fixes that will be used by *all* the emacs community. So a few minutes of your time allow your code to help *everybody* in the emacs community however trivial you think your contribution is.

And conversely, you would not find emacs as useful as it is now if hundreds of people had not taken a few minutes of their time to sign the papers.

Jean-Christophe

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

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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 11:13                   ` Dmitry Gutov
@ 2017-07-08 11:53                     ` Eli Zaretskii
  2017-07-08 12:04                       ` Dmitry Gutov
  2017-07-08 12:43                       ` Ævar Arnfjörð Bjarmason
  0 siblings, 2 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08 11:53 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: avarab, tzz, toon, emacs-devel

> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Sat, 8 Jul 2017 14:13:44 +0300
> Cc: Toon Claes <toon@iotcl.com>, emacs-devel@gnu.org
> 
> On 7/8/17 2:02 PM, Ævar Arnfjörð Bjarmason wrote:
> 
> > Usually when I discover bugs in things part of Emacs itself I just work
> > around them, since starting to contribute to the project would require
> > signing papers etc.,
> 
> You are not helping our case, unfortunately: even if Emacs switches to 
> GitLab or something similar (which I hope it will), contributing will 
> still require signing papers.

It's actually more than that: patches submitted to Emacs need to
conform to our coding and various other standards: include
properly-formatted commit log messages, documentation, and (where
appropriate) tests, etc.  Patch review could require cleanup changes
etc.

People who find this too much of an effort should perhaps describe
their solution without showing any actual code, so that someone else
could implement it.  This way, copyright assignment is not an issue,
and chances are the change will be eventually made.

Of course, it is better to actually sign papers, which is a one-time
hassle.

> > which would be a huge hurdle compared to what I'm
> > fixing (none of my Magit contributions are major, just small fixes here
> > & there).
> 
> Small fixes (up to ~15 lines in total) don't require copyright assignment.

Yes.  But that limit is quickly exhausted.



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 11:53                     ` Eli Zaretskii
@ 2017-07-08 12:04                       ` Dmitry Gutov
  2017-07-08 21:02                         ` Phillip Lord
  2017-07-08 12:43                       ` Ævar Arnfjörð Bjarmason
  1 sibling, 1 reply; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-08 12:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: avarab, tzz, toon, emacs-devel

On 7/8/17 2:53 PM, Eli Zaretskii wrote:

> It's actually more than that: patches submitted to Emacs need to
> conform to our coding and various other standards: include
> properly-formatted commit log messages, documentation, and (where
> appropriate) tests, etc.  Patch review could require cleanup changes
> etc.

That doesn't negate the advantages of integrated solutions like GitLab, 
though. Emacs is not the only project with standards.

We often enforce those via code review, and GitLab helps with that.

> People who find this too much of an effort should perhaps describe
> their solution without showing any actual code, so that someone else
> could implement it.

Relatedly, a friendlier bug tracker would go a long way as well.



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 11:53                     ` Eli Zaretskii
  2017-07-08 12:04                       ` Dmitry Gutov
@ 2017-07-08 12:43                       ` Ævar Arnfjörð Bjarmason
  2017-07-08 12:54                         ` Eli Zaretskii
  1 sibling, 1 reply; 136+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2017-07-08 12:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: tzz, emacs-devel, toon, Dmitry Gutov


On Sat, Jul 08 2017, Eli Zaretskii jotted:

>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sat, 8 Jul 2017 14:13:44 +0300
>> Cc: Toon Claes <toon@iotcl.com>, emacs-devel@gnu.org
>>
>> On 7/8/17 2:02 PM, Ævar Arnfjörð Bjarmason wrote:
>>
>> > Usually when I discover bugs in things part of Emacs itself I just work
>> > around them, since starting to contribute to the project would require
>> > signing papers etc.,
>>
>> You are not helping our case, unfortunately: even if Emacs switches to
>> GitLab or something similar (which I hope it will), contributing will
>> still require signing papers.
>
> It's actually more than that: patches submitted to Emacs need to
> conform to our coding and various other standards: include
> properly-formatted commit log messages, documentation, and (where
> appropriate) tests, etc.  Patch review could require cleanup changes
> etc.
>
> People who find this too much of an effort should perhaps describe
> their solution without showing any actual code, so that someone else
> could implement it.  This way, copyright assignment is not an issue,
> and chances are the change will be eventually made.

   "My project's requirements are so onerous that some find it not worth
   their time to contribute at all, but it's OK because those some
   people can instead describe in prose what their not-good-enough
   contributions should look like instead, surely that'll yield the same
   end result.".

I think that's a fair paraphrasing of the point you made. Of course
everything that adds extra friction to contributing is an issue, and
results in fewer contributions.

Anyway, I'm not trying to get into some flamewar about the relative
merits of FSF's copyright policies or Emacs's contribution policy on
this list. I just wanted to point out that Toon Claes's point that
started this thread had been lost midway through.

Which is that when people talk about having project X on Github or
Gitlab they don't mean so in the narrow sense of having it be mirrored
there in some capacity, or using some narrow subset of features like CI.

They mean that they'd like project X to be as easy to contribute to as
they're used to from contributing to other projects on those platforms.

> Of course, it is better to actually sign papers, which is a one-time
> hassle.
>
>> > which would be a huge hurdle compared to what I'm
>> > fixing (none of my Magit contributions are major, just small fixes here
>> > & there).
>>
>> Small fixes (up to ~15 lines in total) don't require copyright assignment.
>
> Yes.  But that limit is quickly exhausted.



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 12:43                       ` Ævar Arnfjörð Bjarmason
@ 2017-07-08 12:54                         ` Eli Zaretskii
  0 siblings, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08 12:54 UTC (permalink / raw)
  To: Ævar Arnfjörð Bjarmason; +Cc: tzz, emacs-devel, toon, dgutov

> From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> Cc: Dmitry Gutov <dgutov@yandex.ru>, tzz@lifelogs.com, toon@iotcl.com, emacs-devel@gnu.org
> Date: Sat, 08 Jul 2017 14:43:44 +0200
> 
> > It's actually more than that: patches submitted to Emacs need to
> > conform to our coding and various other standards: include
> > properly-formatted commit log messages, documentation, and (where
> > appropriate) tests, etc.  Patch review could require cleanup changes
> > etc.
> >
> > People who find this too much of an effort should perhaps describe
> > their solution without showing any actual code, so that someone else
> > could implement it.  This way, copyright assignment is not an issue,
> > and chances are the change will be eventually made.
> 
>    "My project's requirements are so onerous that some find it not worth
>    their time to contribute at all, but it's OK because those some
>    people can instead describe in prose what their not-good-enough
>    contributions should look like instead, surely that'll yield the same
>    end result.".
> 
> I think that's a fair paraphrasing of the point you made.

No, it isn't fair.  You've added some derogatory adjectives which
weren't there, and that completely distorts the message.  It was meant
to be positive, and propose a practical alternative through which
people could still contribute and have the problems they bumped into
solved, without requiring too much effort.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 18:52             ` Stefan Monnier
@ 2017-07-08 17:01               ` Richard Stallman
  2017-07-08 17:42                 ` raman
  0 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-08 17:01 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 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. ]]]

  > > Maybe so.  But it doesn't need to do everything Magit does.  It only
  > > needs to be good enough to make git easy to use in Emacs.

  > Then I think we already have that in VC

The reason I think this isn't so is that repeatedly I've seen people
post on this list for help dealing with git, and each time people say
to use Magit.

I have not done a scientific study, which would include investigating
whether the recommendation actually helped those people, and what
fraction of Emacs users think VC is just fine for using git.
I have simply supposed that the advice that was given is good advice
since the people who give it are expert Emacs users.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08  6:57               ` Eli Zaretskii
  2017-07-08  9:05                 ` Phillip Lord
@ 2017-07-08 17:02                 ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-08 17:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ofv, rgm, ken.manheimer, emacs-devel, phillip.lord

[[[ 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. ]]]

  > In general, people who bump into bureaucratic impediments related to
  > GNU or FSF should ask for help.  Making this better/easier is part of
  > my and John's duties, and we have access to resources others don't.
  > You shouldn't need to try to solve these problems alone.

I agree.  And the FSF assignments team can help.  There are many
details we can change in whatever way developers would like.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08  9:05                 ` Phillip Lord
  2017-07-08 10:20                   ` Eli Zaretskii
@ 2017-07-08 17:04                   ` Richard Stallman
  2017-07-08 20:52                     ` Phillip Lord
  1 sibling, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-08 17:04 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, emacs-devel, ken.manheimer, eliz, phillip.lord

[[[ 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. ]]]

  > No this is no good. If I am going to do this, I want notifications -- push
  > not pull. So, there needs to be a way to open this up beyond maintainers.

I am working on getting this set up.

  > Having a system to maintain links to the package we are trying to get
  > assignment for would be good.

I am not sure what that means -- could you say it more concretely?

  > Having something which handles something like blocking would be nice also.
  > i.e. we start a bug wrt to magit for assignment, then all the assignment
  > requests would be blockers. Then we would know when we are finished.

How would this be more convenient
than putting a list of the contributors in a file
and making a note when each one comes in?

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 17:01               ` Richard Stallman
@ 2017-07-08 17:42                 ` raman
  2017-07-08 18:58                   ` Eli Zaretskii
                                     ` (3 more replies)
  0 siblings, 4 replies; 136+ messages in thread
From: raman @ 2017-07-08 17:42 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Stefan Monnier, emacs-devel

Richard Stallman <rms@gnu.org> writes:

I use both vc and magit -- so this perspective below might help where
each of vc/magit win:

For simple vc tasks -- and that typically equates to many things one
traditionally did in all VC systems, vc-git is what I use --- examples:

1. Check-in  current file,
2. Diff current version against a given version etc.

Reason: These are all one-shot kbd commands starting with C-x v

Magit:

There are many things that Git lets you do that are at the power-user
end of the spectrum --- and magit actually makes those doable, whereas
the git commandline would never encourage  you to venture even close.

Examples:

1. Selectively commiting  diff hunks in a file with many changes 

2. Selectively reverting specific diff hunks

3. Applying git patches 

4. Examining past log entries -- especially commits with many files,

5. From (4) jumping to a given file/diff hunk

These above I dont even know where I'd start with vc -- they may well be
possible.

Bottom-line: When one is going to perform a bunch of git tasks, magit
wins; when one if focusing on writing code and using the vc system as a
helper that makes sure you dont lose work, pressing C-x v   to invoke
the vc keymap means you dont switch attention away from what you are
doing.

Also -- for users coming to Git, magit may have a slight win since the
magit buffer shows you a bunch of things you can do at a given point --
whereas with VC, you need to have been using Emacs/VC for a while, or at
least have read the info pages in order to know what is possible.

> [[[ whether defending the US Constitution against all enemies,     ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
>   > > Maybe so.  But it doesn't need to do everything Magit does.  It only
>   > > needs to be good enough to make git easy to use in Emacs.
>
>   > Then I think we already have that in VC
>
> The reason I think this isn't so is that repeatedly I've seen people
> post on this list for help dealing with git, and each time people say
> to use Magit.
>
> I have not done a scientific study, which would include investigating
> whether the recommendation actually helped those people, and what
> fraction of Emacs users think VC is just fine for using git.
> I have simply supposed that the advice that was given is good advice
> since the people who give it are expert Emacs users.

-- 



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 17:42                 ` raman
@ 2017-07-08 18:58                   ` Eli Zaretskii
  2017-07-08 20:57                   ` Phillip Lord
                                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-08 18:58 UTC (permalink / raw)
  To: raman; +Cc: emacs-devel, rms, monnier

> From: raman <raman@google.com>
> Date: Sat, 08 Jul 2017 10:42:26 -0700
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org
> 
> 1. Selectively commiting  diff hunks in a file with many changes 
> 
> 2. Selectively reverting specific diff hunks
> 
> 3. Applying git patches 
> 
> 4. Examining past log entries -- especially commits with many files,
> 
> 5. From (4) jumping to a given file/diff hunk

"C-x v L" can do (4) and you can then do (5) by pressing '=' on the
commit line.



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

* Re: In support of Jonas Bernoulli's Magit
  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
  0 siblings, 2 replies; 136+ messages in thread
From: Phillip Lord @ 2017-07-08 20:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: ofv, rgm, ken.manheimer, rms, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:
>> No this is no good. If I am going to do this, I want notifications -- push
>> not pull. So, there needs to be a way to open this up beyond maintainers.
>
> Maybe there's a misunderstanding: I'm offering to do this in your
> stead.  IOW, "if I'm going to do this" is no longer applicable: if you
> ask me, I will do it for you -- you will no longer need to bother
> about the process, you will just get a notification when it's done
> (and you can query me about the current status, if you wish).
>
> It's entirely up to you whether to take the offer, of course.

Eli, this is a kind offer, but it misses the point, really. Having you
do the work doesn't make the work less, especially if, as Stefan says,
there is a ticket system there already. And, having you as a single
point of failure is not that scalable. Even if I get magit done, there
are many other packages out there, and I am not going to do them all.

Phil




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 17:04                   ` Richard Stallman
@ 2017-07-08 20:52                     ` Phillip Lord
  2017-07-10  9:30                       ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-08 20:52 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, rgm, eliz, ken.manheimer, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > No this is no good. If I am going to do this, I want notifications -- push
>   > not pull. So, there needs to be a way to open this up beyond maintainers.
>
> I am working on getting this set up.

Good. From what Stefan says, if there is already a ticket system
involved in copyright assignment, this might be as simple as enabling a
non-maintainer to start a ticket when they email someone a request.


>   > Having a system to maintain links to the package we are trying to get
>   > assignment for would be good.
>
> I am not sure what that means -- could you say it more concretely?

Yes. The copyright assignment process says "I assign copyright for
Emacs"; obviously this makes sense, but if someone is doing this so that
we can get magit into Emacs or ELPA, then we need to know that also, so
we can work out when a new assignment happens which package (i.e. magit)
it has implications for.


>   > Having something which handles something like blocking would be nice also.
>   > i.e. we start a bug wrt to magit for assignment, then all the assignment
>   > requests would be blockers. Then we would know when we are finished.
>
> How would this be more convenient
> than putting a list of the contributors in a file
> and making a note when each one comes in?

Say we have 200 contributors for magit, and 500 people with copyright
assignment for Emacs. New assignment comes in for Emacs, I now have to
check 200 magit contributors to see whether its one of them. To do
magit, we also need to do 5 dependencies, so we need to check against
those lists as well. It's scaling something like quadratically.

It's also worth remembering here: copyright assignment works based on
peoples names, while the list of contributors for magit that I have is
based on their github names, or the email(s) that they used for their
git commits. So making sure that any data that is stored, also includes
peoples aliases.

To re-iterate, this is just my ideas based on my last experience; it's
going to take several attempts and refinements to get the process
working well.

Phil



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

* Re: In support of Jonas Bernoulli's Magit
  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  9:25                   ` Marcin Borkowski
  3 siblings, 0 replies; 136+ messages in thread
From: Phillip Lord @ 2017-07-08 20:57 UTC (permalink / raw)
  To: raman; +Cc: emacs-devel, Richard Stallman, Stefan Monnier

raman <raman@google.com> writes:

> Richard Stallman <rms@gnu.org> writes:
>
> Magit:
>
> There are many things that Git lets you do that are at the power-user
> end of the spectrum --- and magit actually makes those doable, whereas
> the git commandline would never encourage  you to venture even close.


This is certainly true. I've started using these kind of capabilities of
git when I discovered them in magit.

But for me, the key advantage is a very simple one. It's gives you a
project orientated view of git: rather than a file or directory. It
means that I don't accidentally commit two files when I have modified
three. The user interface is also very good and very discoverable.

These are not "power-user" features; magit is good for beginners.

VCs key advantage: it's not Git specific.

Phil



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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 12:04                       ` Dmitry Gutov
@ 2017-07-08 21:02                         ` Phillip Lord
  2017-07-08 23:19                           ` Tim Cross
  0 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-08 21:02 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: tzz, Eli Zaretskii, avarab, toon, emacs-devel

Dmitry Gutov <dgutov@yandex.ru> writes:

> On 7/8/17 2:53 PM, Eli Zaretskii wrote:
>
>> It's actually more than that: patches submitted to Emacs need to
>> conform to our coding and various other standards: include
>> properly-formatted commit log messages, documentation, and (where
>> appropriate) tests, etc.  Patch review could require cleanup changes
>> etc.
>
> That doesn't negate the advantages of integrated solutions like
> GitLab, though. Emacs is not the only project with standards.
>
> We often enforce those via code review, and GitLab helps with that.

And the process is much easier in most projects. Push to feature branch,
get comments, using line-level in diff commenting. Then fix, squash,
force push. Finally, single click merge, PR closes.

Phil




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

* Re: In support of Jonas Bernoulli's Magit
  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
  3 siblings, 1 reply; 136+ messages in thread
From: John Yates @ 2017-07-08 22:57 UTC (permalink / raw)
  To: raman; +Cc: Emacs developers, Richard Stallman, Stefan Monnier

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

On Sat, Jul 8, 2017 at 1:42 PM, raman <raman@google.com> wrote:
>
> There are many things that Git lets you do that are at the power-user
> end of the spectrum --- an
d magit actually makes those doable, whereas
> the git commandline would never encourage  you to venture even close.

I mentioned earlier in this thread that because Magit is so compelling I
use it to induce susceptible colleagues to try emacs. Let me elaborate.

I work at a company that is trying to up its software engineering
practices.  An important part of that effort is mandating code reviews.
That alone though does not result in particularly useful reviews or
feedback.  The main obstacle is that developers work until a task is
complete and then submit all of their changes as a single, overwhelming
review request.

There are developers within the company who are familiar with patch
series culture as exemplified by the Gnu/Linux kernel.  Others, though
having no first hand experience, understand the ideas and acknowledge
that offering code for review as a well groomed patch series would be
a big improvement.  The problem is that in the real world code never
gets designed / authored / debugged such that it emerges naturally as
an intelligible, coherent patch series.  It takes real work to extract
such a series.  And of course most developers have absolutely no idea
idea how they would go about turning a workspace or even a chaotic
series of incremental commits into such a series.

That is where Magit shines.  It allows one to move arbitrary chunks
of code forward and back among a sequence of commits.  As such it
gives a developer a concrete visualization of the emerging commits
and their contents.  Nor is one restricted to moving hunks identified
by a diff tool.  In Magit a chunk can just as easily be an arbitrary
marked region.

When I demo Magit for my colleagues they immediately get excited.
It makes it clear that fostering a patch series culture need not be
a pipe dream.

To date I am unaware of any other tool on any platform offering
similar functionality.

Were an emacs user to ask me to suggest a package (s)he should use
to interact with git I would always plug Magit.  Not that I would
discourage learning VC.  Clearly (as Raman has explained) VC has a
role.  Magit though alters how one thinks about presenting one's
coding efforts to the greater world.

/john​

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

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

* Re: Trying out GitLab (was Re: In support of Jonas Bernoulli's Magit)
  2017-07-08 21:02                         ` Phillip Lord
@ 2017-07-08 23:19                           ` Tim Cross
  0 siblings, 0 replies; 136+ messages in thread
From: Tim Cross @ 2017-07-08 23:19 UTC (permalink / raw)
  To: Phillip Lord
  Cc: Ted Zlatanov, Emacs developers, avarab, Dmitry Gutov,
	Eli Zaretskii, toon

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

I think Phil's point is very important. While I find github/gitlab to be a
nice interface for small projects, I'm not at all convinced that it adds
much for larger or more complex projects. As an example, the bug/issue
tracker really doesn't scale well once you have hundreds of bugs/issues.

Once you have a project with more than ~10k lines of code, multiple
branches and large numbers of contributors and bug reporters,
administration becomes a big issue. I suspect that few except perhaps
casual users will really use the UI's provided by github/gitlab, preferring
instead to use just git. At that point, where the repo is hosted becomes
less relevant.

My experience with github and gitlab issue tracking has been that you need
to either use a different tool or develop custom workflows using the API in
order to manage large numbers of bugs effectively. Again, the web interface
is OK for casual users and smaller projects, but lacks the level of
sophistication necessary for larger teams and larger bug numbers. I'm not
saying that the current bug tracker is great, but I've found few bug
tracking systems to be great and the current one is adequate once you
invest time into it.

I'm certainly not against something like gitlab or the gitlab interface,
but I don't think it will be as beneficial or 'revolutionary' to Emacs'
maintenance or level of contributions as some seem to feel. In most ways,
it is just a little bit of UI sugar and a community is more than just a bit
of sugar.

On 9 July 2017 at 07:02, Phillip Lord <phillip.lord@russet.org.uk> wrote:

> Dmitry Gutov <dgutov@yandex.ru> writes:
>
> > On 7/8/17 2:53 PM, Eli Zaretskii wrote:
> >
> >> It's actually more than that: patches submitted to Emacs need to
> >> conform to our coding and various other standards: include
> >> properly-formatted commit log messages, documentation, and (where
> >> appropriate) tests, etc.  Patch review could require cleanup changes
> >> etc.
> >
> > That doesn't negate the advantages of integrated solutions like
> > GitLab, though. Emacs is not the only project with standards.
> >
> > We often enforce those via code review, and GitLab helps with that.
>
> And the process is much easier in most projects. Push to feature branch,
> get comments, using line-level in diff commenting. Then fix, squash,
> force push. Finally, single click merge, PR closes.
>
> Phil
>
>
>


-- 
regards,

Tim

--
Tim Cross

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

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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 22:57                   ` John Yates
@ 2017-07-09  0:04                     ` raman
  0 siblings, 0 replies; 136+ messages in thread
From: raman @ 2017-07-09  0:04 UTC (permalink / raw)
  To: John Yates; +Cc: Emacs developers, Richard Stallman, Stefan Monnier

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=gb18030, Size: 2607 bytes --]

John Yates <john@yates-sheets.org> writes:

1+-- well said and well explained!> On Sat, Jul 8, 2017 at 1:42 PM, raman <raman@google.com> wrote:
>>
>> There are many things that Git lets you do that are at the power-user
>> end of the spectrum --- an
> d magit actually makes those doable, whereas
>> the git commandline would never encourage  you to venture even close.
>
> I mentioned earlier in this thread that because Magit is so compelling I
> use it to induce susceptible colleagues to try emacs. Let me elaborate.
>
> I work at a company that is trying to up its software engineering
> practices.  An important part of that effort is mandating code reviews.
> That alone though does not result in particularly useful reviews or
> feedback.  The main obstacle is that developers work until a task is
> complete and then submit all of their changes as a single, overwhelming
> review request.
>
> There are developers within the company who are familiar with patch
> series culture as exemplified by the Gnu/Linux kernel.  Others, though
> having no first hand experience, understand the ideas and acknowledge
> that offering code for review as a well groomed patch series would be
> a big improvement.  The problem is that in the real world code never
> gets designed / authored / debugged such that it emerges naturally as
> an intelligible, coherent patch series.  It takes real work to extract
> such a series.  And of course most developers have absolutely no idea
> idea how they would go about turning a workspace or even a chaotic
> series of incremental commits into such a series.
>
> That is where Magit shines.  It allows one to move arbitrary chunks
> of code forward and back among a sequence of commits.  As such it
> gives a developer a concrete visualization of the emerging commits
> and their contents.  Nor is one restricted to moving hunks identified
> by a diff tool.  In Magit a chunk can just as easily be an arbitrary
> marked region.
>
> When I demo Magit for my colleagues they immediately get excited.
> It makes it clear that fostering a patch series culture need not be
> a pipe dream.
>
> To date I am unaware of any other tool on any platform offering
> similar functionality.
>
> Were an emacs user to ask me to suggest a package (s)he should use
> to interact with git I would always plug Magit.  Not that I would
> discourage learning VC.  Clearly (as Raman has explained) VC has a
> role.  Magit though alters how one thinks about presenting one's
> coding efforts to the greater world.
>
> /john6¤6
>

-- 



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 20:34                     ` Phillip Lord
@ 2017-07-09  2:33                       ` Eli Zaretskii
  2017-07-10  9:28                       ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-09  2:33 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, rms, emacs-devel

> From: phillip.lord@russet.org.uk (Phillip Lord)
> Cc: ofv@wanadoo.es,  rgm@gnu.org,  ken.manheimer@gmail.com,  rms@gnu.org,  emacs-devel@gnu.org
> Date: Sat, 08 Jul 2017 21:34:57 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> >> No this is no good. If I am going to do this, I want notifications -- push
> >> not pull. So, there needs to be a way to open this up beyond maintainers.
> >
> > Maybe there's a misunderstanding: I'm offering to do this in your
> > stead.  IOW, "if I'm going to do this" is no longer applicable: if you
> > ask me, I will do it for you -- you will no longer need to bother
> > about the process, you will just get a notification when it's done
> > (and you can query me about the current status, if you wish).
> >
> > It's entirely up to you whether to take the offer, of course.
> 
> Eli, this is a kind offer, but it misses the point, really. Having you
> do the work doesn't make the work less

It makes the work less for you.

> And, having you as a single point of failure is not that scalable.

It doesn't make me a single point of failure, because if I'm not
available, the process can be restarted by someone else using the
information available to the FSF personnel.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 17:42                 ` raman
                                     ` (2 preceding siblings ...)
  2017-07-08 22:57                   ` John Yates
@ 2017-07-09  9:25                   ` Marcin Borkowski
  2017-07-09 14:19                     ` Eli Zaretskii
                                       ` (2 more replies)
  3 siblings, 3 replies; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-09  9:25 UTC (permalink / raw)
  To: raman; +Cc: emacs-devel, Richard Stallman, Stefan Monnier


On 2017-07-08, at 19:42, raman <raman@google.com> wrote:

> For simple vc tasks -- and that typically equates to many things one
> traditionally did in all VC systems, vc-git is what I use --- examples:

FWIW, I sometimes use VC with Mecurial, and the experience is so bad
that the _sole reason_ I switched to Git was the existence of Magit.

The main annoyance is that if I edit _more than one file_, and press C-x
v v, instead of committing my all changes (or at least asking me about
it), it only commits the changes in the currently edited file.  Several
times I made an incomplete commit because of that.  I tried to find an
option to override this, but to no avail.  _That alone_ renders VC
totally unusable, annoying, broken and actively harmful for me.

Now that I think of it, I could have written a bug report (or even try
to implement this myself).  But you know what?  I just switched to Git
and started to use Magit, because it is so much better.

Now, vc-dir seems similar to magit-status.  But it has one _huge_
drawback: it requires me to press RET each time after I invoke it.  (Why
would I want to invoke vc-dir for some other directory than the one I'm
in anyway?  And in such rare cases, C-u would handle that much better.)

Now that I think of it, I could write a trivial wrapper for that (and
I might actually do it, for the sake of legacy Mercurial projects
I have).  But you know what?  If you use Git, then why even bother when
Magit exists?

I guess that Emacs' VC with distributed VCSs is fundamentally broken,
since it was really designed with RCS and its likes in mind, and
imposing that onto DVCSs is awkward.  I suspect that situation (with VC)
is better now than a few years ago (e.g., AFAIK pushing/pulling is now
implemented), but I haven't looked into it too much.

Sorry if that sounds harsh, but I consider VC's utility (with DVCSs) to
be zero _at best_.

Best,

--
Marcin Borkowski



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

* Re: In support of Jonas Bernoulli's Magit
  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  9:29                     ` In support of Jonas Bernoulli's Magit Richard Stallman
  2 siblings, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-09 14:19 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: emacs-devel, rms, monnier, raman

> From: Marcin Borkowski <mbork@mbork.pl>
> Date: Sun, 09 Jul 2017 11:25:28 +0200
> Cc: emacs-devel@gnu.org, Richard Stallman <rms@gnu.org>,
> 	Stefan Monnier <monnier@iro.umontreal.ca>
> 
> The main annoyance is that if I edit _more than one file_, and press C-x
> v v, instead of committing my all changes (or at least asking me about
> it), it only commits the changes in the currently edited file.  Several
> times I made an incomplete commit because of that.  I tried to find an
> option to override this, but to no avail.

You can do what you want with VC by first marking the files you want
to commit in vc-dir buffer.

> I guess that Emacs' VC with distributed VCSs is fundamentally broken,
> since it was really designed with RCS and its likes in mind

You seem to talk only about "C-x v v".  That command doesn't assume
RCS-type VCS, it assumes that there's some more-or-less constant
sequence of actions in your workflow, and attempts to support that
sequence by doing "the next thing".  I think this concept can be
naturally generalized to modern VCSes, except that the number of
different workflows is larger, definitely more than one.  At the time,
I proposed to move in that direction, but people disagreed, so nothing
happened.  I still think it's a good idea, so maybe someone will want
to work on it.

But VC includes more than "C-x v v" alone.  There are commands like
"C-x v D", "C-x v ~" (just recently mentioned as very important and
useful -- with Git, no less!), "C-x v g" with its sub-commands,
"C-x v l", "C-x v L", "C-x v I"/"C-x v O", "V-x v u", and others.  I
see no reasons to ignore these useful commands when talking about VC.

> Sorry if that sounds harsh, but I consider VC's utility (with DVCSs) to
> be zero _at best_.

I think this is at least exaggerated.  I certainly don't see how this
could follow from what VC provides.



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

* In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-09  9:25                   ` Marcin Borkowski
  2017-07-09 14:19                     ` Eli Zaretskii
@ 2017-07-10  1:01                     ` Juliusz Chroboczek
  2017-07-10  7:09                       ` Michael Albinus
  2017-07-10 23:26                       ` Richard Stallman
  2017-07-10  9:29                     ` In support of Jonas Bernoulli's Magit Richard Stallman
  2 siblings, 2 replies; 136+ messages in thread
From: Juliusz Chroboczek @ 2017-07-10  1:01 UTC (permalink / raw)
  To: emacs-devel

>> For simple vc tasks -- and that typically equates to many things one
>> traditionally did in all VC systems, vc-git is what I use --- examples:

I agree.  VC stays out of the way, while Magit is a whole new interface,
and a modal one at that.  That's fine if you're doing complicated stuff
with your repository, but if you're actually programming and wish to
commit your work or check a diff, VC is much more streamlined.

> The main annoyance is that if I edit _more than one file_, and press C-x
> v v, instead of committing my all changes (or at least asking me about
> it), it only commits the changes in the currently edited file.

Yes, that's annoying.  You need to mark all the modified files in the
vc-dir buffer.  And I agree that VC should at least warn that there are
other modified files.  (I think this deserves a bug report.)

> I suspect that situation (with VC) is better now than a few years ago
> (e.g., AFAIK pushing/pulling is now implemented), but I haven't looked
> into it too much.

It's quite useful for everyday tasks -- committing, diffing and browsing
the logs.  For more exotic tasks (partial commits, browsing remotes
repositories, merging), I use Magit or the command line.

-- Juliusz




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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 23:26                       ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Michael Albinus @ 2017-07-10  7:09 UTC (permalink / raw)
  To: Juliusz Chroboczek; +Cc: emacs-devel

Juliusz Chroboczek <jch@irif.fr> writes:

>> The main annoyance is that if I edit _more than one file_, and press C-x
>> v v, instead of committing my all changes (or at least asking me about
>> it), it only commits the changes in the currently edited file.
>
> Yes, that's annoying.  You need to mark all the modified files in the
> vc-dir buffer.  And I agree that VC should at least warn that there are
> other modified files.  (I think this deserves a bug report.)

I regard this as a feature of vc-dir. Usually, I keep several modified
files I don't want to commit immediately. Selecting the files to be
committed by a mark is exactly what fits my workflow.

> -- Juliusz

Just my 2¢.

Best regards, Michael.



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-10  7:09                       ` Michael Albinus
@ 2017-07-10  8:34                         ` Lars Ingebrigtsen
  2017-07-10  8:47                           ` Juliusz Chroboczek
  0 siblings, 1 reply; 136+ messages in thread
From: Lars Ingebrigtsen @ 2017-07-10  8:34 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Juliusz Chroboczek, emacs-devel

Michael Albinus <michael.albinus@gmx.de> writes:

> I regard this as a feature of vc-dir. Usually, I keep several modified
> files I don't want to commit immediately. Selecting the files to be
> committed by a mark is exactly what fits my workflow.

It seems like there's two different workflows here: Some people keep
work in progress going on some files while wanting to commit other
files, while other people only have a single thing going (perhaps over
many files) and always wants to commit all changed files.

This sounds like it should be a user-level switch in vc that would
control whether the default is to commit all changes or just the current
file, I think.

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



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-10  8:34                         ` Lars Ingebrigtsen
@ 2017-07-10  8:47                           ` Juliusz Chroboczek
  2017-07-10  8:59                             ` Yuri Khan
  0 siblings, 1 reply; 136+ messages in thread
From: Juliusz Chroboczek @ 2017-07-10  8:47 UTC (permalink / raw)
  To: emacs-devel

> It seems like there's two different workflows here: Some people keep
> work in progress going on some files while wanting to commit other
> files, while other people only have a single thing going (perhaps over
> many files) and always wants to commit all changed files.

I can only speak for myself, but I fit in both categories at different
times, depending on what I'm doing.

> This sounds like it should be a user-level switch in vc that would
> control whether the default is to commit all changes or just the current
> file, I think.

I think the default behaviour should be as so: if no files are marked,
and there are modified files other than the one that's being committed,
ask whether to commit the other files (if user is unsure, he can C-g and
investigate).

-- Juliusz




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-10  8:47                           ` Juliusz Chroboczek
@ 2017-07-10  8:59                             ` Yuri Khan
  2017-07-10 16:28                               ` Marcin Borkowski
                                                 ` (2 more replies)
  0 siblings, 3 replies; 136+ messages in thread
From: Yuri Khan @ 2017-07-10  8:59 UTC (permalink / raw)
  To: Juliusz Chroboczek; +Cc: Emacs developers

On Mon, Jul 10, 2017 at 3:47 PM, Juliusz Chroboczek <jch@irif.fr> wrote:

> I think the default behaviour should be as so: if no files are marked,
> and there are modified files other than the one that's being committed,
> ask whether to commit the other files (if user is unsure, he can C-g and
> investigate).

If multiple files are modified, the “next action” could be to display
the ‘vc-dir’ buffer for the current repository.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-07 22:08             ` Phillip Lord
  2017-07-07 22:22               ` Stefan Monnier
  2017-07-08  6:57               ` Eli Zaretskii
@ 2017-07-10  9:26               ` Richard Stallman
  2017-07-10 12:47                 ` Phillip Lord
  2017-07-10 16:31                 ` Marcin Borkowski
  2 siblings, 2 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:26 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, 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. ]]]

  > 1) Get list of all contributors
  > 2) Email them all, recording the date
  > 3) Email those who respond instructions
  > 4) Email assign@fsf to find out current status
  > 5) Email those who havent again
  > 6) Reply to people who say "haven't heard anything"
  > 7) Repeat some variation of 4,5, and 6

  > 8) Work out how many are left
  > 9) Once n < 3 or 4 check how big their contributions are
  > 10) Write them out

Step 4 is due to FSF procedures, so I will try to change them to
eliminate it.  I hope the clerk will directly notify the person
managing this process when each package contributor's papers arrive.

The rest, however, has nothing to do with how the FSF operates.  At
least, not that I can see.  It is rather the nature of persuading many
individuals to do something, independent of what the something is.

Do you have any suggestions for how to simplify parts other than step
4?

Step 8 is easy if you make a list of all the contributors, one per
line, and add a * once a contributors's papers are done.  I think that
will be faster and easier than using RT to keep track of them.

We don't have to wait till there are only 4 nonsigning contributors to
start steps 9 and 10.  It would be feasible to do with 10 or 20 or 50
contributors left out, if their code is small.  Thus, I suggest
identifying after a few months those whose code is not too hard to
replace.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06 15:24     ` Phillip Lord
@ 2017-07-10  9:26       ` Richard Stallman
  2017-07-10 13:09         ` Phillip Lord
  0 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:26 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, 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. ]]]

  > Almost everybody I asked about copyright assignment said yes. Those who
  > did not just did not reply and have disappeared from the web.

It is much better to ask people for papers when they make their
contributions.  At that time, it is not hard to find them,
and there is a natural way to persuade them.

When people develop a package and only much later think about
getting legal papers for it, the job becomes a more difficult,
and that is what we see in the case of Magit.

  > As it stood, I think, dash.el took 4 months, because of the necessity
  > for the to-ing and fro-ing. dash.el in ELPA is now several versions
  > behind, because it's has some new contributors since,

The way to avoid this is for the developers of dash.el to ask new
contributors "please sign papers", as we do.

Why is that not happening?

  > The FSF has a donations drive every year. Can you not spend some of that
  > on making the process easier?

We do.  That is one of the things that some of our staff work on.
Alas, there are many other tasks waiting for them.

The best solution for this hassle is to avoid it -- by collecting
legal papers as the package is developed.

  > Even a public website showing people with
  > assignment (who are willing to be public) would help.

That sounds like something feasible to do.  I think we could
easily find 100 Emacs developers who would be happy to agree
to this.

Can you make the idea more precise?  What should this look like?
Also, how would it help?


-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  2:17         ` Clément Pit-Claudel
@ 2017-07-10  9:26           ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:26 UTC (permalink / raw)
  To: Clément Pit-Claudel; +Cc: rgm, 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. ]]]

  > No, I don't imagine this, in part because Richard did in the past
  > support the idea of setting up an online form (to let people
  > submit the info normally sent to assign@gnu.org).

I am in favor of it, in principle, but whether we can do it depends
on legal issues.  Whether the papers are legally valid without a
hand-written signature (physical, or scanned) in a given country,
for instance.

Other kinds of changes in the bureaucracy are easier to make
because they depend only on us.  It might be possible for
volunteers to help with some of the implementation work.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  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
  1 sibling, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:28 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, eliz, ken.manheimer, 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. ]]]

  > And, having you as a single
  > point of failure is not that scalable. Even if I get magit done, there
  > are many other packages out there, and I am not going to do them all.

We don't need a scalable solution for Magit.  It just needs to work
for Magit,

If there are some other packages we would like to get into Emacs,
we can handle them in a scalable way by finding, for each package,
a different few volunteers to manage the process.

The better solution to this problem is to prevent problem cases from
arising any more.  That is what the occasional notice aims to do.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  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  9:29                     ` Richard Stallman
  2017-07-10 16:32                       ` Marcin Borkowski
  2 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:29 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: emacs-devel, monnier, raman

[[[ 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. ]]]

  > The main annoyance is that if I edit _more than one file_, and press C-x
  > v v, instead of committing my all changes (or at least asking me about
  > it), it only commits the changes in the currently edited file.

What do you think it to do?

Should it display a message saying, "Use vc-dir to view the whole project
and make commits?"

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-08 20:52                     ` Phillip Lord
@ 2017-07-10  9:30                       ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-10  9:30 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, eliz, ken.manheimer, 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. ]]]

  > Yes. The copyright assignment process says "I assign copyright for
  > Emacs"; obviously this makes sense, but if someone is doing this so that
  > we can get magit into Emacs or ELPA, then we need to know that also, so
  > we can work out when a new assignment happens which package (i.e. magit)
  > it has implications for.

We have had a system for this for a long time.

  > Say we have 200 contributors for magit, and 500 people with copyright
  > assignment for Emacs. New assignment comes in for Emacs, I now have to
  > check 200 magit contributors to see whether its one of them.

Since the assignment clerk knows which papers are for Magit,
he should be able to inform you of this directly.

  > It's also worth remembering here: copyright assignment works based on
  > peoples names, while the list of contributors for magit that I have is
  > based on their github names, or the email(s) that they used for their
  > git commits.

Doesn't the Magit repository record contributors' official names?

If not, I am sure we can arrange to tell the assignment clerk
each signer's email address and/or repository name,
and include that in the notification message to maintainers.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10  9:26               ` Richard Stallman
@ 2017-07-10 12:47                 ` Phillip Lord
  2017-07-10 23:26                   ` Richard Stallman
  2017-07-10 23:27                   ` Richard Stallman
  2017-07-10 16:31                 ` Marcin Borkowski
  1 sibling, 2 replies; 136+ messages in thread
From: Phillip Lord @ 2017-07-10 12:47 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, rgm, ken.manheimer, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > 1) Get list of all contributors
>   > 2) Email them all, recording the date
>   > 3) Email those who respond instructions
>   > 4) Email assign@fsf to find out current status
>   > 5) Email those who havent again
>   > 6) Reply to people who say "haven't heard anything"
>   > 7) Repeat some variation of 4,5, and 6
>
>   > 8) Work out how many are left
>   > 9) Once n < 3 or 4 check how big their contributions are
>   > 10) Write them out
>
> Step 4 is due to FSF procedures, so I will try to change them to
> eliminate it.  I hope the clerk will directly notify the person
> managing this process when each package contributor's papers arrive.

That will be an excellent addition. Also, it would be good to know when
the FSF forms have gone to the contributor -- assuming assignment is
still a two step process.

The reason for this is that people will say "sent it off, not heard
anything back yet". I don't know how long the assignment process spends
at the FSF end; this could all be postage.


> The rest, however, has nothing to do with how the FSF operates.  At
> least, not that I can see.  It is rather the nature of persuading many
> individuals to do something, independent of what the something is.
>
> Do you have any suggestions for how to simplify parts other than step
> 4?

Having a way to track emails going out on a specific topic would be
helpful; this would make it easier to track when you last emailed some
one about assignment.


> Step 8 is easy if you make a list of all the contributors, one per
> line, and add a * once a contributors's papers are done.  I think that
> will be faster and easier than using RT to keep track of them.

I used org-mode to achieve this, and yes it does help.

If we wish to turn this into a bit more of a factory, though, we might
have a contributor who contributes to more than one package, so getting
a single set of papers might have implications for more than one
project. This is where some sort of tracker might help.

Still, it's a smaller issue than notifications.

> We don't have to wait till there are only 4 nonsigning contributors to
> start steps 9 and 10.  It would be feasible to do with 10 or 20 or 50
> contributors left out, if their code is small.  Thus, I suggest
> identifying after a few months those whose code is not too hard to
> replace.

Actually, I do this at the beginning. Not all contributors actually have
code in the current version, so it's good to know this from the
start. For dash, I just asked everybody, though, on the basis that if
they had code in before, they might do in the future.

Phil



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10  9:26       ` Richard Stallman
@ 2017-07-10 13:09         ` Phillip Lord
  2017-07-11 11:45           ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-10 13:09 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, emacs-devel

Richard Stallman <rms@gnu.org> writes:
>   > As it stood, I think, dash.el took 4 months, because of the necessity
>   > for the to-ing and fro-ing. dash.el in ELPA is now several versions
>   > behind, because it's has some new contributors since,
>
> The way to avoid this is for the developers of dash.el to ask new
> contributors "please sign papers", as we do.
>
> Why is that not happening?


Well, I need to add something to the README file, but I never got around
to it. From a practical POV, though, this also means potentially not
accepting pull requests from people, till the assignment has happened,
which is likely to be weeks to months.


>   > The FSF has a donations drive every year. Can you not spend some
>   > of that on making the process easier?
>
> We do.  That is one of the things that some of our staff work on.
> Alas, there are many other tasks waiting for them.
>
> The best solution for this hassle is to avoid it -- by collecting
> legal papers as the package is developed.

It doesn't avoid the hassle. It just makes it a hassle at the point at
which people first contribute.

>   > Even a public website showing people with
>   > assignment (who are willing to be public) would help.
>
> That sounds like something feasible to do.  I think we could
> easily find 100 Emacs developers who would be happy to agree
> to this.
>
> Can you make the idea more precise?  What should this look like?
> Also, how would it help?

That was step 1 in my protocol. Work out who you need to get copyright
assignment from, given that many people will already have it. It would
also help with working out when peoples assignments run out. I do not
know when mine is out of date, for example.

Being able to get access to this data in a parsable form. Currently, I
get contributor information from git (git log --pretty=format:"%an %ae"
| sort -u). Being able to filter people who already have assignment
would be great.

Phil








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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10  9:28                       ` Richard Stallman
@ 2017-07-10 13:15                         ` Phillip Lord
  2017-07-11 11:45                           ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-10 13:15 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, rgm, eliz, ken.manheimer, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > And, having you as a single
>   > point of failure is not that scalable. Even if I get magit done, there
>   > are many other packages out there, and I am not going to do them all.
>
> We don't need a scalable solution for Magit.  It just needs to work
> for Magit,

No, I think this is wrong. Magit is just indicative of the more general
problem. We had the same discussion several years back about dash.

> If there are some other packages we would like to get into Emacs,
> we can handle them in a scalable way by finding, for each package,
> a different few volunteers to manage the process.

Finding new volunteers until they get tired of the process? We need to
simplify the process, and provide better support. I think we are working
through this, which is good.

> The better solution to this problem is to prevent problem cases from
> arising any more.  That is what the occasional notice aims to do.

There are 1000s of packages in MELPA. Even if the problem never happens
again, and even if we only want 10% of those packages, we still need to
make the process smoother.

Phil



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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  2017-07-05 15:29 In support of Jonas Bernoulli's Magit (was: comparing code on different branches) John Yates
                   ` (3 preceding siblings ...)
  2017-07-05 18:14 ` In support of Jonas Bernoulli's Magit (was: comparing code on different branches) Noam Postavsky
@ 2017-07-10 16:16 ` Filipe Silva
  4 siblings, 0 replies; 136+ messages in thread
From: Filipe Silva @ 2017-07-10 16:16 UTC (permalink / raw)
  To: John Yates
  Cc: jwiegley, Yuri Khan, Jean-Christophe Helary, Richard Stallman,
	Emacs developers

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

​I support this, could not agree more.

On Wed, Jul 5, 2017 at 12:29 PM, John Yates <john@yates-sheets.org> wrote:

> On Tue, Jul 4, 2017 at 7:05 PM, Richard Stallman <rms@gnu.org> wrote:
>
>> I wish someone would write a package comparable to Magit that
>> we could get legal papers for and include it in Emacs.
>>
>
> ​Richard,
>
> I cannot let this go without commenting.  Do you understand what
> you are advocating?
>
> In Jonas you have someone who is doing just about everything
> right per your notion of software freedom including applying gpl v3.
> He has made significant personal sacrifices to provide emacs with
> a package that is unique among editors and IDEs.  It could emerge
> as one of those oh-so-elusive creatures: a true killer app for the
> emacs platform.
>
> Jonas has and continues to deliver a steady stream of features,
> bug fixes and refinements.  Magit is clearly a work of love that is
> wonderfully supported.  Jonas has exhibited admirable project
> leadership skill and has published a detailed, credible map to
> the future:
>
>   https://github.com/magit/magit/projects/1
>
> Some of us care enough about developers like Jonas and the
> value he is delivering to emacs that we have responded to his
> plea for financial support via PayPal, Patreon or Bountysource.
>
> Were Jonas' effort invested in a non-GNU project, or at least not
> one so dear to you heart as emacs, I suspect that you would
> applaud his work.
>
> Instead you seem to advocate undercutting Jonas' efforts with
> no good reason to believe that you would get a replacement of
> anywhere near the same quality.  Further, were you actually to
> mount such a competing effort I am confident that long before it
> ever delivered any useful amount of functionality you, the emacs
> community, and the gnu effort would harvest significant bad press.
>
> Sometimes community might be more important than copyright
> assignment.  Please reconsider you request.
>
> /john
>
>

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

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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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
  2 siblings, 0 replies; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-10 16:28 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Juliusz Chroboczek, Emacs developers


On 2017-07-10, at 10:59, Yuri Khan <yuri.v.khan@gmail.com> wrote:

> On Mon, Jul 10, 2017 at 3:47 PM, Juliusz Chroboczek <jch@irif.fr> wrote:
>
>> I think the default behaviour should be as so: if no files are marked,
>> and there are modified files other than the one that's being committed,
>> ask whether to commit the other files (if user is unsure, he can C-g and
>> investigate).
>
> If multiple files are modified, the “next action” could be to display
> the ‘vc-dir’ buffer for the current repository.

Out of all the suggestions made here, this is probably the best.

I'll file a bug report later.

And I'm sorry for being so harsh.  Apparently many people appreciate VC
and it works for them.  I'll study the relevant chapter in the manual,
then I'll try to use VC for a while to form a better opinion.

Best,

--
Marcin Borkowski



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10  9:26               ` Richard Stallman
  2017-07-10 12:47                 ` Phillip Lord
@ 2017-07-10 16:31                 ` Marcin Borkowski
  2017-07-10 23:30                   ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-10 16:31 UTC (permalink / raw)
  To: rms; +Cc: ofv, rgm, ken.manheimer, emacs-devel, Phillip Lord


On 2017-07-10, at 11:26, Richard Stallman <rms@gnu.org> wrote:

> Step 8 is easy if you make a list of all the contributors, one per
> line, and add a * once a contributors's papers are done.  I think that
> will be faster and easier than using RT to keep track of them.

This looks to me like reinventing Org-mode.

Just my 2 cents,

-- 
Marcin Borkowski



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

* Re: In support of Jonas Bernoulli's Magit
  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
  0 siblings, 1 reply; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-10 16:32 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, monnier, raman


On 2017-07-10, at 11:29, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > The main annoyance is that if I edit _more than one file_, and press C-x
>   > v v, instead of committing my all changes (or at least asking me about
>   > it), it only commits the changes in the currently edited file.
>
> What do you think it to do?
>
> Should it display a message saying, "Use vc-dir to view the whole project
> and make commits?"

As I wrote in another post, it should just launch vc-dir _in the current
directory_.

Best,

--
Marcin Borkowski



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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
  2 siblings, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-10 17:12 UTC (permalink / raw)
  To: Yuri Khan; +Cc: jch, emacs-devel

> From: Yuri Khan <yuri.v.khan@gmail.com>
> Date: Mon, 10 Jul 2017 15:59:04 +0700
> Cc: Emacs developers <emacs-devel@gnu.org>
> 
> On Mon, Jul 10, 2017 at 3:47 PM, Juliusz Chroboczek <jch@irif.fr> wrote:
> 
> > I think the default behaviour should be as so: if no files are marked,
> > and there are modified files other than the one that's being committed,
> > ask whether to commit the other files (if user is unsure, he can C-g and
> > investigate).
> 
> If multiple files are modified, the “next action” could be to display
> the ‘vc-dir’ buffer for the current repository.

I'd encourage people to work on making the workflow (and thus the
"next action") customizable.  We could have several popular workflows
for the user to choose, for example.  We could even have a facility
whereby the user specifies the sequence of the actions in her
workflow.

I think "C-x v v" is a powerful concept, and if done right, is a great
time saver, and also prevents errors.  We shouldn't give up on that so
easily.



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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 23:26                       ` Richard Stallman
  2017-07-11  4:15                         ` Marcin Borkowski
  2017-07-11  7:10                         ` Andreas Schwab
  1 sibling, 2 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-10 23:26 UTC (permalink / raw)
  To: Juliusz Chroboczek; +Cc: 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. ]]]

  > Yes, that's annoying.  You need to mark all the modified files in the
  > vc-dir buffer.

vc-dir shows all the modified files on its own.
The user has to specify which ones to commit.

Should we add a command to specify "mark all the modified files for
this commit"?

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 12:47                 ` Phillip Lord
@ 2017-07-10 23:26                   ` Richard Stallman
  2017-07-11  9:40                     ` Phillip Lord
  2017-07-10 23:27                   ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10 23:26 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, 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. ]]]

  > The reason for this is that people will say "sent it off, not heard
  > anything back yet". I don't know how long the assignment process spends
  > at the FSF end; this could all be postage.

They never need to use the post.  Our clerk emails the papers.
Contributors anywhere in the world can print the papers, sign them,
and fax them to us.  Or scan them and email them.

Since people looking for this information found statements that gave
the wrong idea, I think some of our pages about assignment procedures
need to be updated or clarified.  If you saw an fsf.org URL which
contradicts what it says above, please report the problem to
assign@gnu.org.  If they find out about all the misleading pages, they
will fix them all.

  > > Do you have any suggestions for how to simplify parts other than step
  > > 4?

  > Having a way to track emails going out on a specific topic would be
  > helpful; this would make it easier to track when you last emailed some
  > one about assignment.

I am having trouble understanding that concretely.
Which emails do you mean?  "Going out" how?

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 12:47                 ` Phillip Lord
  2017-07-10 23:26                   ` Richard Stallman
@ 2017-07-10 23:27                   ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-10 23:27 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, 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. ]]]

  > > We don't have to wait till there are only 4 nonsigning contributors to
  > > start steps 9 and 10.  It would be feasible to do with 10 or 20 or 50
  > > contributors left out, if their code is small.  Thus, I suggest
  > > identifying after a few months those whose code is not too hard to
  > > replace.

  > Actually, I do this at the beginning. Not all contributors actually have
  > code in the current version, so it's good to know this from the
  > start. For dash, I just asked everybody, though, on the basis that if
  > they had code in before, they might do in the future.

That's a wise approach.  It can't hurt to invite the
not-actual-contributors to sign -- but there is no need to wait until
they do.

However, I was talking about a point that is slightly broader.
The point is that we can cope with more than 4 nonsigners,
if their contributions are not crucial.

That is important if there are more people we cannot contact.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 16:31                 ` Marcin Borkowski
@ 2017-07-10 23:30                   ` Richard Stallman
  2017-07-11  4:20                     ` Marcin Borkowski
  0 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10 23:30 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: ofv, rgm, ken.manheimer, phillip.lord, 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. ]]]

  > > Step 8 is easy if you make a list of all the contributors, one per
  > > line, and add a * once a contributors's papers are done.  I think that
  > > will be faster and easier than using RT to keep track of them.

  > This looks to me like reinventing Org-mode.

Nothing like Org mode.  Org mode is complicated and I want something
simple.  My method uses only a few general-purpose Emacs commands:
C-p, C-n, C-s, C-a, * and SPC.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 16:32                       ` Marcin Borkowski
@ 2017-07-10 23:30                         ` Richard Stallman
  2017-07-11  4:14                           ` Marcin Borkowski
  0 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-10 23:30 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: raman, monnier, 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. ]]]

  > As I wrote in another post, it should just launch vc-dir _in the current
  > directory_.

Will that do the right thing?  I think it needs to use the main directory
of the project.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 23:30                         ` Richard Stallman
@ 2017-07-11  4:14                           ` Marcin Borkowski
  0 siblings, 0 replies; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-11  4:14 UTC (permalink / raw)
  To: rms; +Cc: raman, monnier, emacs-devel


On 2017-07-11, at 01:30, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > As I wrote in another post, it should just launch vc-dir _in the current
>   > directory_.
>
> Will that do the right thing?  I think it needs to use the main directory
> of the project.

I stand corrected, you are right.

-- 
Marcin Borkowski



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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:37                           ` Eli Zaretskii
  2017-07-11  7:10                         ` Andreas Schwab
  1 sibling, 2 replies; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-11  4:15 UTC (permalink / raw)
  To: rms; +Cc: Juliusz Chroboczek, emacs-devel


On 2017-07-11, at 01:26, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > Yes, that's annoying.  You need to mark all the modified files in the
>   > vc-dir buffer.
>
> vc-dir shows all the modified files on its own.
> The user has to specify which ones to commit.
>
> Should we add a command to specify "mark all the modified files for
> this commit"?

What Magit does is that if you try to commit with nothing staged, it
offers to stage everything that has changed.  This seems reasonable.

-- 
Marcin Borkowski



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 23:30                   ` Richard Stallman
@ 2017-07-11  4:20                     ` Marcin Borkowski
  2017-07-11 11:48                       ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-11  4:20 UTC (permalink / raw)
  To: rms; +Cc: ofv, rgm, ken.manheimer, phillip.lord, emacs-devel


On 2017-07-11, at 01:30, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > > Step 8 is easy if you make a list of all the contributors, one per
>   > > line, and add a * once a contributors's papers are done.  I think that
>   > > will be faster and easier than using RT to keep track of them.
>
>   > This looks to me like reinventing Org-mode.
>
> Nothing like Org mode.  Org mode is complicated and I want something
> simple.  My method uses only a few general-purpose Emacs commands:
> C-p, C-n, C-s, C-a, * and SPC.

What gives you the impression that Org-mode is complicated?

The Org method would use only _one_ basic Org command: apart from C-n,
C-p and C-s, you'd only need C-c C-t (unless you are fine with typing
TODO/DONE manually).  Of course, you'd also be free to use C-c C-n/C-c
C-p, C-c C-f/C-c C-b and above all C-c C-/, which could be tremendously
helpful.

Best,

--
Marcin Borkowski



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-10 23:26                       ` Richard Stallman
  2017-07-11  4:15                         ` Marcin Borkowski
@ 2017-07-11  7:10                         ` Andreas Schwab
  2017-07-11  7:26                           ` Michael Albinus
  2017-07-11 22:55                           ` Richard Stallman
  1 sibling, 2 replies; 136+ messages in thread
From: Andreas Schwab @ 2017-07-11  7:10 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Juliusz Chroboczek, emacs-devel

On Jul 10 2017, Richard Stallman <rms@gnu.org> wrote:

> Should we add a command to specify "mark all the modified files for
> this commit"?

There is no need for such a command, just put point on the enclosing
directory.  A VC command will then operate on all files in that
directory.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11  7:10                         ` Andreas Schwab
@ 2017-07-11  7:26                           ` Michael Albinus
  2017-07-11 22:55                           ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-07-11  7:26 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Richard Stallman, Juliusz Chroboczek, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> On Jul 10 2017, Richard Stallman <rms@gnu.org> wrote:
>
>> Should we add a command to specify "mark all the modified files for
>> this commit"?
>
> There is no need for such a command, just put point on the enclosing
> directory.  A VC command will then operate on all files in that
> directory.

And there is also `vc-dir-mark-all-files', bound to "M" in a vc-dir buffer.

> Andreas.

Best regards, Michael.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 23:26                   ` Richard Stallman
@ 2017-07-11  9:40                     ` Phillip Lord
  2017-07-11 22:56                       ` Richard Stallman
  0 siblings, 1 reply; 136+ messages in thread
From: Phillip Lord @ 2017-07-11  9:40 UTC (permalink / raw)
  To: Richard Stallman; +Cc: ofv, rgm, ken.manheimer, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ 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. ]]]
>
>   > The reason for this is that people will say "sent it off, not heard
>   > anything back yet". I don't know how long the assignment process spends
>   > at the FSF end; this could all be postage.
>
> They never need to use the post.  Our clerk emails the papers.
> Contributors anywhere in the world can print the papers, sign them,
> and fax them to us.  Or scan them and email them.

Okay. I seem to remember an ink requirement, but that's fine.

>
>   > > Do you have any suggestions for how to simplify parts other than step
>   > > 4?
>
>   > Having a way to track emails going out on a specific topic would be
>   > helpful; this would make it easier to track when you last emailed some
>   > one about assignment.
>
> I am having trouble understanding that concretely.
> Which emails do you mean?  "Going out" how?

As we have discussed elsewhere, the developer needs to know when the FSF
has mailed stuff to a contributor. This makes it possible for the
developer to know where an assignment is up to.

Phil



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 13:15                         ` Phillip Lord
@ 2017-07-11 11:45                           ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 11:45 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, eliz, ken.manheimer, 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. ]]]

  > > We don't need a scalable solution for Magit.  It just needs to work
  > > for Magit,

  > No, I think this is wrong. Magit is just indicative of the more general
  > problem. We had the same discussion several years back about dash.

It was necessary to do work to fix the problem for dash.
Now it is necessary to do work to fix the problem for Magit.

We can optimize some aspects of the work, and we're working on that.
(Thanks for helping to do this.)  But I can't envision any more
scalable way of doing the work that we don't optimize away.

A more long-term approach is to prevent other projects from getting
into the same situation.  So I've taken up that issue.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-10 13:09         ` Phillip Lord
@ 2017-07-11 11:45           ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 11:45 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, 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. ]]]

  > Well, I need to add something to the README file, but I never got around
  > to it. From a practical POV, though, this also means potentially not
  > accepting pull requests from people, till the assignment has happened,
  > which is likely to be weeks to months.

Now that everything is done on-line, the process should normally take
a few days, unless the clerk is on vacation for a week.  Would you
please start asking all new dash contributors to sign papers
before you put in their contributions?

  > > The best solution for this hassle is to avoid it -- by collecting
  > > legal papers as the package is developed.

  > It doesn't avoid the hassle. It just makes it a hassle at the point at
  > which people first contribute.

It is much less of a hassle if done at that time.

1. There is no hassle of figuring out who to ask for papers.

2. There is no hassle in finding them.

3. They have a motivation to sign, so it is not hard
to convince them.

4. The task feels like less hassle since it consists of a small
job once in a while.


-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-11  4:20                     ` Marcin Borkowski
@ 2017-07-11 11:48                       ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 11:48 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: ofv, rgm, ken.manheimer, emacs-devel, phillip.lord

[[[ 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. ]]]

  > What gives you the impression that Org-mode is complicated?

I started reading the manual once.

Anyway, discussing Org mode here is a tangent.  The point
is to make a list and check off items on it.  If you find that
easier using Org mode, fine.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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:37                           ` Eli Zaretskii
  1 sibling, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 11:48 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: jch, 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. ]]]

  > > Should we add a command to specify "mark all the modified files for
  > > this commit"?

  > What Magit does is that if you try to commit with nothing staged, it
  > offers to stage everything that has changed.  This seems reasonable.

VC does not know about staging.  For it to what you've suggested here
would mean a large change.

Maybe that change would be useful, so try writing it if you wish.  But
I think what we want here is a simple fix.
-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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
  0 siblings, 2 replies; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-11 14:10 UTC (permalink / raw)
  To: rms; +Cc: jch, emacs-devel


On 2017-07-11, at 13:48, Richard Stallman <rms@gnu.org> wrote:

> [[[ 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. ]]]
>
>   > > Should we add a command to specify "mark all the modified files for
>   > > this commit"?
>
>   > What Magit does is that if you try to commit with nothing staged, it
>   > offers to stage everything that has changed.  This seems reasonable.
>
> VC does not know about staging.  For it to what you've suggested here
> would mean a large change.

Obviously.  What I meant was for VC to do something along the lines of
"if trying to commit with nothing marked to commit, offer to commit
everything that has changed".  Sorry for my poor wording.

> Maybe that change would be useful, so try writing it if you wish.  But
> I think what we want here is a simple fix.

I don't think I'd be able to do that, especially now that I am quite
busy.  And the staging concept might be difficult to fit into the VC
framework anyway.

Best,

-- 
Marcin Borkowski



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11 14:10                             ` Marcin Borkowski
@ 2017-07-11 14:27                               ` Juliusz Chroboczek
  2017-07-11 22:56                               ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Juliusz Chroboczek @ 2017-07-11 14:27 UTC (permalink / raw)
  To: emacs-devel

>> VC does not know about staging.

[...]

>> Maybe that change would be useful, so try writing it if you wish.

[...]

> And the staging concept might be difficult to fit into the VC
> framework anyway.

I agree.

VC shines for everyday operations.  Notice a typo, edit a file, C-x v v,
compose a log message, C-c C-c.  Except for composing the log message,
it feels just like working without a VCS.

Staging is useful for more involved workflows, and so doesn't fit
culturally into VC.  Extending VC to these more involved workflows
without breaking the remarkable simplicity of VC in the simple case
would be a lot of work by somebody with exceedingly good taste, and
duplicated work at that, since Magit works fine in the rare cases when
it's necessary.

(I've been good in this thread until now, so please allow me to indulge
in some trolling.  The good taste requirement excludes git hackers.)

-- Juliusz




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11  4:15                         ` Marcin Borkowski
  2017-07-11 11:48                           ` Richard Stallman
@ 2017-07-11 14:37                           ` Eli Zaretskii
  2017-07-11 16:03                             ` Dmitry Gutov
  1 sibling, 1 reply; 136+ messages in thread
From: Eli Zaretskii @ 2017-07-11 14:37 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: rms, jch, emacs-devel

> From: Marcin Borkowski <mbork@mbork.pl>
> Date: Tue, 11 Jul 2017 06:15:18 +0200
> Cc: Juliusz Chroboczek <jch@irif.fr>, emacs-devel@gnu.org
> 
> > vc-dir shows all the modified files on its own.
> > The user has to specify which ones to commit.
> >
> > Should we add a command to specify "mark all the modified files for
> > this commit"?
> 
> What Magit does is that if you try to commit with nothing staged, it
> offers to stage everything that has changed.  This seems reasonable.

Reasonable for Magit, since it supports only Git.  Not sure about VC:
staging is a Git-only feature, whereas VC tries to abstract the user
from the backend as much as possible.



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11 14:37                           ` Eli Zaretskii
@ 2017-07-11 16:03                             ` Dmitry Gutov
  0 siblings, 0 replies; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-11 16:03 UTC (permalink / raw)
  To: Eli Zaretskii, Marcin Borkowski; +Cc: rms, jch, emacs-devel

On 7/11/17 5:37 PM, Eli Zaretskii wrote:

> Reasonable for Magit, since it supports only Git.  Not sure about VC:
> staging is a Git-only feature, whereas VC tries to abstract the user
> from the backend as much as possible.

Since VC does not offer staging as a feature anyway, for Git and other 
backends it would mean to offer to commit all edited files in the given 
repository.



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11  7:10                         ` Andreas Schwab
  2017-07-11  7:26                           ` Michael Albinus
@ 2017-07-11 22:55                           ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 22:55 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: jch, 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. ]]]

  > > Should we add a command to specify "mark all the modified files for
  > > this commit"?

  > There is no need for such a command, just put point on the enclosing
  > directory.  A VC command will then operate on all files in that
  > directory.

I didn't know this; it is not self-evident.
Perhaps we should display a line as a message in the buffer
to inform users about this option.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-11  9:40                     ` Phillip Lord
@ 2017-07-11 22:56                       ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 22:56 UTC (permalink / raw)
  To: Phillip Lord; +Cc: ofv, rgm, ken.manheimer, 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. ]]]

  > > They never need to use the post.  Our clerk emails the papers.
  > > Contributors anywhere in the world can print the papers, sign them,
  > > and fax them to us.  Or scan them and email them.

  > Okay. I seem to remember an ink requirement, but that's fine.

There IS still a requirement for ink and paper.  The contributor has
to print the papers, sign them and scan or fax them.
But this does not require snail mail.

Actually, it is not enirely a requirement.  The contributor can paste
per signature into the file and thus avoid the need for printing and
scanning.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-11 14:10                             ` Marcin Borkowski
  2017-07-11 14:27                               ` Juliusz Chroboczek
@ 2017-07-11 22:56                               ` Richard Stallman
  1 sibling, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-11 22:56 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: jch, 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. ]]]

  > Obviously.  What I meant was for VC to do something along the lines of
  > "if trying to commit with nothing marked to commit, offer to commit
  > everything that has changed".  Sorry for my poor wording.

That idea makes sense.  It might be a good change.

Thanks.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  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-13 16:13   ` Jonas Bernoulli
  2017-07-14  1:20     ` Richard Stallman
                       ` (2 more replies)
  1 sibling, 3 replies; 136+ messages in thread
From: Jonas Bernoulli @ 2017-07-13 16:13 UTC (permalink / raw)
  To: Noam Postavsky
  Cc: Richard Stallman, John Wiegley, Jean-Christophe Helary, Yuri Khan,
	Emacs developers, John Yates

Hello,

I would like to thank John Yates and others for speaking up and for
sharing some thoughts on the role I have played in making Magit what
it is today.

  Richard Stallman said:
> You've hit the nail on the head.  I am not saying anything either
> good or bad about Magit as such, because that's not the issue here.

To some extend, that rubs me the wrong way.  Lacking public statements
to the contrary, this leaves the impression that you want to include
Magit in Emacs not because you think it is good, but because it is
successful.

That being said, and while I appreciate that...

  Stefan Monnier said:
> I'm afraid you're missing the point: distributing Magit with Emacs
> is not terribly important, compared to fostering good relationships.

...the relationship is still good and I don't see that changing.  It
is not particularly strong though, but that is something that I would
like to change.

Part of Magit's success lays in my efforts to take the needs and ideas
of all of its users seriously and to find satisfactory compromises
even when mutually exclusive opinions exist on some matter.

Usually such disagreements mostly concern design matters, but this
situation is similar.  And here too I want to be able to justify the
outcome, while I realize that it will not be possible to satisfy
everybody, because existing opinions range from "this is something
that absolutely must be done" to "doing this would massively hinder
future development and must absolutely be avoided".

I disagree with both opinions and suspect that most people do too, but
toward what side the majority leans I do not know.  And while this is
not the only factor that will guide my decision, public opinion is one
that I will consider.

I dislike being in a situation where I have no choice but to pick the
worst of the available options in the eyes of some, no matter what I
choose to do, i.e. when my only choice is between whom I disappoint.

As a result I feel put on the spot.  And this is the primary reason
why I have taken so long to respond.

  Richard Stallman said:
> We have a problem in Emacs: it doesn't contain a good interface to
> git.  People often recommend something that is not in Emacs.  That's
> not a good situation.  I want to fix it.

I understand why you would like to integrate Magit into Emacs.

I understand why you want to hold the copyright for all code in Emacs.

I do *not* understand why, in the case that this should not happen,
you take issue with people recommending Magit and why you think that
this is a major issue that needs fixing.

I also do not understand why you personally do not want to -- why you
apparently cannot -- use Magit while it is not part of Emacs.

Magit is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

I understand why you would *rather* have Magit be a part of Emacs, but
I do not understand why that not being the case is a deal breaker --
it is free software released under your preferred license, which you
co-authored.

You will have to provide an answer to that question before I can move
forward with this. It might be that I don't agree with your reasoning.
If so, then that most not necessarily be a deal breaker for me -- but
I think that we as a community can not simply except this premise that
"Magit must be part of Emacs, or else it must be replaced and should
not be recommended" unquestioned.

  Richard Stallman said:
> In principle, we could fix it with Magit.  [...] A year ago, more or
> less, I asked people if we could do this and I was told it was
> impossible.

The last time I replied in a thread such as this one (which might very
well be the conversation you are referring to), I said that I am open
to the idea, but that I have other priorities.  I did not say that it
was impossible, and don't think anybody else did either.

I do prioritize according to my understanding of what will be most
beneficial to Magit's users.  What are the benefits to Magit if it is
integrated into Emacs?  It's not that I don't see any, but I also see
many drawbacks, and I don't really think that I should be the one who
outlines the benefits.

---

I actually want to integrate parts of Magit into Emacs as soon as
possible, because they are useful beyond the Magit/Git use-case and/or
because Magit would benefit from Emacs making some concessions to its
needs.

`with-editor.el' is an existing example.  So are `magit-popup.el' and
`magit-section.el', though I intend to replace those libraries with
better implementations that draw from what I have learned about their
limitations.  (Also `magit-popup.el' is one of, if not the ugliest
part of Magit.  But it is solid never-the-less.)

I should have done that a long time ago, and it is a bit strange to do
so now, shortly before I begin work on the successors.  But I should
probably do so anyway.  I am occasionally being asked to do it, and
even once I have written the replacements, I think that valid reasons
will remain to prefer the old implementations.  (Though it will be a
bit strange that they will continue to be named "magit-*" while Magit
itself will have moved on, maybe the should be renamed once that
happens.)

Could we please start with adding those packages to Elpa?  Baby steps
and all.  It would immensely help me stay motivated to move into this
direction, if Richard could in turn stop treating Magit as a problem
and embrace it, or at least refrain from calling for a replacement
and uttering a warning whenever someone recommends its use.

---

I think that Magit is really good, but also that it could still get a
lot better.  And I have a plan toward that goal -- John Yates called
it a "credible map toward the future".  That plan involves, and to
some extend depends on, contributing large amounts of code to Emacs.

In the long run it would be beneficial for Magit itself to be part of
Emacs.  I just don't think that adding all of Magit to Emacs now, is
the best strategy forward.

---

What I am trying to do is to separate the abstractions from the
concrete uses in the UI and because this has been a major focus all
along I have progressed pretty far already.  I would like to add those
abstractions to Emacs core.

I also intend to soon write new low-level functionality, including
`git-handler.el', a file-handler for Git blobs and trees, and a module
for libgit2 (which John Wiegley has offered to co-author).  I am going
to contribute these libraries soon after as they have progressed
beyond the prototyping stage.  My hope is that VC and Git related
third-party packages will use them, to increase interoperability.

I think experimentation and innovation happens primarily outside of
Emacs core.  I am under the impression, that once a package is part
of Emacs, its basic structure is set in stone.  (Just to be clear, I
think a lot of good changes are being made to Emacs itself too.  And
I plan to make heavy use of some of the newer functionality, which I
in many cases am very exited about.)

But I strongly believe that Magit is only what it is today because
I had the liberty to innovate and make far reaching changes without
having to constantly justify in great detail why those changes were
necessary.  Once Magit is part of Emacs core, that won't be possible
anymore, and merely being part of Elpa doesn't really help Magit at
all.

So what I would like to do instead of adding Magit to Emacs/Elpa, is
to add primarily those abstractions to Emacs core, whose essence is
clearly represented in their implementation.  Essentially code that
feels very obvious.  Such code might look trivial, but is the result
of hard work and the willingness to admit that some earlier attempt
was wrong and to discard it while learning from it.  I feel that too
many Emacs packages work around limitations instead of tackling them
head on.

---

Maintaining Magit is a lot of work, probably more than most realize.
I don't just write most of the code, I also write documentation,
provide user support, and generally do everything in my power to make
Magit as useful and easy to use for as many people as I can.

I won't be able to keep this up much longer unless I am being payed to
do so.  But I love doing it, which is why I will start a fundraising
campaign this month.  (I wasn't actually quite ready to announce that
yet, another reason why it took me so long to respond.  Should I just
conceal this rather relevant detail or talk in great length about it?
As so often, I have decided to compromise, in this case by merely
mentioning it.)

  Cheers,
  Jonas
  



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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  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  7:14     ` git-handler.el (was: In support of Jonas Bernoulli's Magit) Michael Albinus
  2 siblings, 1 reply; 136+ messages in thread
From: Richard Stallman @ 2017-07-14  1:20 UTC (permalink / raw)
  To: Jonas Bernoulli
  Cc: npostavs, jwiegley, jean.christophe.helary, yuri.v.khan,
	emacs-devel, john

[[[ 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. ]]]

There are some deep incommensurabilities of premises between your
views as you've just stated them and mine.  We seem to differ on goals
and values.  Your stated concern is for Magit users, whereas my
concern is about Emacs as a part of the GNU project.

I think the best chance of coming to some understanding, and perhaps
agreement, is to talk privately.

I can't communicate any more now, whether publicly or privately.  It
is time for me to go to sleep, and I will spedn the next 24 hours
sleeping and then flying.


-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-13 16:13   ` Jonas Bernoulli
  2017-07-14  1:20     ` Richard Stallman
@ 2017-07-14  3:31     ` 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
  2 siblings, 1 reply; 136+ messages in thread
From: Stefan Monnier @ 2017-07-14  3:31 UTC (permalink / raw)
  To: emacs-devel

> Could we please start with adding those packages to Elpa?

Sounds pretty good.  We usually welcome new packages into GNU ELPA, so
of course libraries that are in actual use by important packages even
more so.

I know nothing about those libraries, but I'd be happy to help bring
them into GNU ELPA.

> I think experimentation and innovation happens primarily outside of
> Emacs core.  I am under the impression, that once a package is part
> of Emacs, its basic structure is set in stone.

"Backward compatibility" tends to impose  restrictions, indeed.  Less so
for end-user facing functionality than for functionality exported as an
Elisp library, but yes.

Note that this doesn't apply to GNU ELPA packages which can break
backward compatibility all they want.


        Stefan




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

* git-handler.el (was: In support of Jonas Bernoulli's Magit)
  2017-07-13 16:13   ` Jonas Bernoulli
  2017-07-14  1:20     ` Richard Stallman
  2017-07-14  3:31     ` In support of Jonas Bernoulli's Magit Stefan Monnier
@ 2017-07-14  7:14     ` Michael Albinus
  2017-07-14 17:57       ` Jonas Bernoulli
  2 siblings, 1 reply; 136+ messages in thread
From: Michael Albinus @ 2017-07-14  7:14 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: Emacs developers

Jonas Bernoulli <jonas@bernoul.li> writes:

> Hello,

Hi Jonas,

> I also intend to soon write new low-level functionality, including
> `git-handler.el', a file-handler for Git blobs and trees, and a module
> for libgit2 (which John Wiegley has offered to co-author).  I am going
> to contribute these libraries soon after as they have progressed
> beyond the prototyping stage.  My hope is that VC and Git related
> third-party packages will use them, to increase interoperability.

The idea of writing a file name handler for versioned files is on my
todo list for years. Alas, I haven't been motivated enough to start, and
I'm also not a specialist in vc in general, or git in special.

But I have 15 years experience in using file name handlers in Emacs. If
you need any help to write such a library, I would be glad to support
you. Just ping me, if you believe it could be useful.

>   Cheers,
>   Jonas

Best regards, Michael.



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-06  0:24     ` Clément Pit-Claudel
  2017-07-06  1:46       ` Glenn Morris
@ 2017-07-14 14:34       ` Philippe Vaucher
  2017-07-16  1:51         ` Richard Stallman
  1 sibling, 1 reply; 136+ messages in thread
From: Philippe Vaucher @ 2017-07-14 14:34 UTC (permalink / raw)
  To: Clément Pit-Claudel; +Cc: Emacs developers

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

>
> This does not necessarily mean dropping the requirement to get legal
> papers.  It could mean re-evaluating the legal papers process, instead, to
> ensure that it can be conducted entirely online.  There was a bit of
> discussion on that topic in the past, and this push to get legal papers for
> Magit could be a good occasion to revisit it.
>

I second this. If the process could have been done entirely online, I would
have contributed *much* earlier. Things need to be "easy", we programmers
are lazy ;-)

Philippe

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

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

* Re: git-handler.el (was: In support of Jonas Bernoulli's Magit)
  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
  0 siblings, 1 reply; 136+ messages in thread
From: Jonas Bernoulli @ 2017-07-14 17:57 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Emacs developers

Hi Michael,

  Michael Albinus <michael.albinus@gmx.de> writes:
> The idea of writing a file name handler for versioned files is on my
> todo list for years.

Same here ;-) But I very much hope I get to it toward the end of August.

> But I have 15 years experience in using file name handlers in Emacs. If
> you need any help to write such a library, I would be glad to support
> you. Just ping me, if you believe it could be useful.

Thanks for the offer.  I will contact you when I actually start working
on this.  If you get to it before I do, then please let me have a look,
to make sure it satisfies Magit's needs.

  Jonas



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-14  3:31     ` In support of Jonas Bernoulli's Magit Stefan Monnier
@ 2017-07-14 18:09       ` Jonas Bernoulli
  0 siblings, 0 replies; 136+ messages in thread
From: Jonas Bernoulli @ 2017-07-14 18:09 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Hi Stefan,

  Stefan Monnier said:
> I know nothing about those libraries, but I'd be happy to help bring
> them into GNU ELPA.

I've already started working on getting them into shape.  I probably
won't be ready before mid-August.  I will contact you and/or this list
then.

>> I think experimentation and innovation happens primarily outside of
>> Emacs core.  I am under the impression, that once a package is part
>> of Emacs, its basic structure is set in stone.
>
> "Backward compatibility" tends to impose  restrictions, indeed.

Just to make sure: this was not meant as criticism.

  Jonas



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

* Re: In support of Jonas Bernoulli's Magit (was: comparing code on different branches)
  2017-07-14  1:20     ` Richard Stallman
@ 2017-07-14 18:24       ` Jonas Bernoulli
  0 siblings, 0 replies; 136+ messages in thread
From: Jonas Bernoulli @ 2017-07-14 18:24 UTC (permalink / raw)
  To: rms
  Cc: npostavs, jwiegley, jean.christophe.helary, yuri.v.khan,
	emacs-devel, john

> There are some deep incommensurabilities of premises between your
> views as you've just stated them and mine.  We seem to differ on goals
> and values. [...]
>
> I think the best chance of coming to some understanding, and perhaps
> agreement, is to talk privately.

The differences may not be as substantial as the impression you got.
Yes, lets talk.

> It is time for me to go to sleep, and I will spedn the next 24 hours
> sleeping and then flying.

I am in no hurry.  So lets talk next week, probably next weekend.

  Jonas



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

* Re: In support of Jonas Bernoulli's Magit
  2017-07-14 14:34       ` Philippe Vaucher
@ 2017-07-16  1:51         ` Richard Stallman
  0 siblings, 0 replies; 136+ messages in thread
From: Richard Stallman @ 2017-07-16  1:51 UTC (permalink / raw)
  To: Philippe Vaucher; +Cc: cpitclaudel, 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. ]]]

  > I second this. If the process could have been done entirely online, I would
  > have contributed *much* earlier. Things need to be "easy", we programmers
  > are lazy ;-)

We have to get a signature that makes for a legally valid contract.
Among the methods that are legally adequate, in any given country, we
try to make it as convenient as possible.

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  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
  2 siblings, 1 reply; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-16 18:01 UTC (permalink / raw)
  To: Yuri Khan, Juliusz Chroboczek; +Cc: Emacs developers

On 7/10/17 11:59 AM, Yuri Khan wrote:

> If multiple files are modified, the “next action” could be to display
> the ‘vc-dir’ buffer for the current repository.

We had an argument about changing `M-x vc-dir' to show the repository 
root right away, instead of prompting. Couldn't reach an agreement.

So I doubt your suggestion would be accepted as the default workflow.



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-16 18:01                               ` Dmitry Gutov
@ 2017-07-16 19:09                                 ` Marcin Borkowski
  2017-07-16 19:17                                   ` Dmitry Gutov
  0 siblings, 1 reply; 136+ messages in thread
From: Marcin Borkowski @ 2017-07-16 19:09 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Emacs developers, Juliusz Chroboczek, Yuri Khan


On 2017-07-16, at 20:01, Dmitry Gutov <dgutov@yandex.ru> wrote:

> On 7/10/17 11:59 AM, Yuri Khan wrote:
>
>> If multiple files are modified, the “next action” could be to display
>> the ‘vc-dir’ buffer for the current repository.
>
> We had an argument about changing `M-x vc-dir' to show the repository
> root right away, instead of prompting. Couldn't reach an agreement.

Out of curiosity: what the arguments for asking?  I can't see any.  (And
in the unlikely case the asking behavior is needed, it could be
triggered by giving a prefix argument.)

Best,

--
Marcin Borkowski



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

* Re: In defense of VC [was: In support of Jonas Bernoulli's Magit]
  2017-07-16 19:09                                 ` Marcin Borkowski
@ 2017-07-16 19:17                                   ` Dmitry Gutov
  0 siblings, 0 replies; 136+ messages in thread
From: Dmitry Gutov @ 2017-07-16 19:17 UTC (permalink / raw)
  To: Marcin Borkowski; +Cc: Emacs developers, Juliusz Chroboczek, Yuri Khan

On 7/16/17 10:09 PM, Marcin Borkowski wrote:

> Out of curiosity: what the arguments for asking?  I can't see any.  (And
> in the unlikely case the asking behavior is needed, it could be
> triggered by giving a prefix argument.)

See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=12492#23. There was 
also a discussion on emacs-devel quite a bit later, but David didn't 
link to it in the commit (f302475471df0553b3ee442112981f9b146e0b55).



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

* Re: git-handler.el
  2017-07-14 17:57       ` Jonas Bernoulli
@ 2017-08-11 10:26         ` Michael Albinus
  2017-08-12 10:48           ` git-handler.el Jonas Bernoulli
  0 siblings, 1 reply; 136+ messages in thread
From: Michael Albinus @ 2017-08-11 10:26 UTC (permalink / raw)
  To: Jonas Bernoulli, Dmitry Gutov; +Cc: Emacs developers

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

Jonas Bernoulli <jonas@bernoul.li> writes:

> Hi Michael,

Hi Jonas, Dmitry,

>> The idea of writing a file name handler for versioned files is on my
>> todo list for years.
>
> Same here ;-) But I very much hope I get to it toward the end of August.
>
>> But I have 15 years experience in using file name handlers in Emacs. If
>> you need any help to write such a library, I would be glad to support
>> you. Just ping me, if you believe it could be useful.
>
> Thanks for the offer.  I will contact you when I actually start working
> on this.  If you get to it before I do, then please let me have a look,
> to make sure it satisfies Magit's needs.

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.

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.

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.

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

Both packages are far from being complete. Performance is terrible (a
proper cache mechanism is needed), my git skill is restricted so I might
not use the best commands, and you will see many TODO comments. It's
just a proof of concept. And I hope it is useful for both magit and vc.

>   Jonas

Best regards, Michael.


[-- Attachment #2: vc-handler.el --]
[-- Type: application/emacs-lisp, Size: 21486 bytes --]

;;; vc-handler.el --- File Name Handler for revisions of version controlled files  -*- lexical-binding:t -*-

;; Copyright (C) 2017 Free Software Foundation, Inc.

;; Author: Michael Albinus <michael.albinus@gmx.de>
;; Keywords: vc tools
;; Package: vc

;; This file is part of GNU Emacs.

;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; This package provides transparent access to revisions of version
;; controlled files.  A revision looks always like
;; "/path/to/file@@/branch/revision-or-label".  The
;; "@@/branch/revision-or-label" syntax depends on the used vc
;; backend.

;; All files or directories with this syntax are handled read-only.
;; It is not intended to modify revisions of such files or
;; directories.

;; For Git, a revision looks like "@@/master/ef7a18a071" or
;; "@@/master/HEAD".  A branch might be "@@/emacs-25/3a34412caa" or
;; "@@/emacs-25/HEAD", and a label is "@@/emacs-25.2"

;; For Cvs, it looks like "@@/2.7" or "@@/V-2-2-6" (a label) or
;; "@@/branch-2-1-stable/2.7.0.2" (a branch).

;; Revisioned file names, which are not complete until the final
;; revision number or label, are regarded as directories.  Files in
;; that directory are the respective revisions.  A directory
;; "@@/emacs-25/" might contain the files "3a34412caa" or
;; "56a4461a48".

;; File name handlers for a magic file operation are declared in
;; `vc-file-name-handler-alist' and vc backend specific
;; `vc-<backend>-file-name-handler-alist' variables.  If a file name
;; handler is declared in both locations, the backend specific one
;; takes precedence.  If no file name handler is declared, the default
;; operation is applied.

;;; Code:

(require 'vc)

;; TODO: This is just temporarily.
(require 'ls-lisp)
(setq ls-lisp-use-insert-directory-program nil
      enable-dir-local-variables nil)

(defconst vc-file-name-regexp "@@[-[:alnum:]._/]*\\'"
  "Regular expression matching revisioned file names.")

;; New handlers should be added here.
(defconst vc-file-name-handler-alist
  '(;; `access-file' performed by default handler.
    (add-name-to-file . ignore)
    ;; `byte-compiler-base-file-name' performed by default handler.
    ;; `copy-directory' performed by default handler.
    (copy-file . vc-handle-copy-file)
    (delete-directory . ignore)
    (delete-file . ignore)
    ;; `diff-latest-backup-file' performed by default handler.
    ;; `directory-file-name' performed by default handler.
    (directory-files . vc-handle-directory-files)
    (directory-files-and-attributes . vc-handle-directory-files-and-attributes)
    (dired-compress-file . ignore)
    ;; `dired-uncache' performed by default handler.
    (expand-file-name . vc-handle-expand-file-name)
    (file-accessible-directory-p . vc-handle-file-accessible-directory-p)
    (file-acl . ignore)
    (file-attributes . vc-handle-file-attributes)
    (file-directory-p . vc-handle-file-directory-p)
    ;; `file-equal-p' performed by default handler.
    (file-executable-p . vc-handle-file-executable-p)
    (file-exists-p . vc-handle-file-exists-p)
    ;; `file-in-directory-p' performed by default handler.
    ;; `file-local-copy' performed by backend specific handler.
    (file-modes . vc-handle-file-modes)
    ;; `file-name-all-completions' performed by backend specific handler.
    ;; `file-name-as-directory' performed by default handler.
    (file-name-case-insensitive-p . vc-handle-file-name-case-insensitive-p)
    (file-name-completion . vc-handle-file-name-completion)
    ;; `file-name-directory' performed by default handler.
    ;; `file-name-nondirectory' performed by default handler.
    ;; `file-name-sans-versions' performed by default handler.
    (file-newer-than-file-p . vc-handle-file-newer-than-file-p)
    (file-notify-add-watch . ignore)
    (file-notify-rm-watch . ignore)
    (file-notify-valid-p . ignore)
    (file-ownership-preserved-p . ignore)
    (file-readable-p . vc-handle-file-readable-p)
    (file-regular-p . vc-handle-file-regular-p)
    (file-remote-p . vc-handle-file-remote-p)
    (file-selinux-context . ignore)
    (file-symlink-p . vc-handle-file-symlink-p)
    (file-truename . vc-handle-file-truename)
    (file-writable-p . ignore)
    ;; `find-backup-file-name' performed by default handler.
    ;; `find-file-noselect' performed by default handler.
    ;; `get-file-buffer' performed by default handler.
    (insert-directory . vc-handle-insert-directory)
    (insert-file-contents . vc-handle-insert-file-contents)
    (load . vc-handle-load)
    (make-auto-save-file-name . ignore)
    (make-directory . ignore)
    (make-nearby-temp-file . vc-handle-make-nearby-temp-file)
    (make-symbolic-link . ignore)
    (process-file . vc-handle-process-file)
    ;; `rename-file' performed by default handler.
    (set-file-acl . ignore)
    (set-file-modes . ignore)
    (set-file-selinux-context . ignore)
    (set-file-times . ignore)
    (set-visited-file-modtime . ignore)
    (shell-command . ignore)
    (start-file-process . ignore)
    (substitute-in-file-name . vc-handle-substitute-in-file-name)
    ;; `temporary-file-directory' performed by default handler.
    (unhandled-file-name-directory . vc-handle-unhandled-file-name-directory)
    (vc-registered . ignore)
    (verify-visited-file-modtime . vc-handle-verify-visited-file-modtime)
    (write-region . ignore))
  "Alist of handler functions.
Operations not mentioned here will be handled by the normal Emacs functions.")

(defun vc-handler-file-name-p (file)
  "Check, whether FILE is a revisioned file name"
  (and (stringp file) (string-match vc-file-name-regexp file)))

(defun vc-handler-file-name-part (file)
  "Return the regular name of FILE, without the revision part."
  (if (vc-handler-file-name-p file)
      (replace-match "" nil nil file)
    file))

(defun vc-handler-file-revision-name (file)
  "Return the revision of FILE, if any."
  (when (vc-handler-file-name-p file)
    (match-string 0 file)))

(defun vc-responsible-handler (operation args)
  "Determine the responsible handler for file name operation ARGS.
One of the elements in ARGS must be a revisioned file name.  This
function checks first whether there is a backend specific
handler, by inspectiong `vc-<backend>-file-name-handler-alist'.
If none is found, `vc-file-name-handler-alist' is inspected."
  ;; Check which element of ARGS is a revisioned file name.
  (setq args (append args `(,default-directory)))
  (while (and (consp args) (not (vc-handler-file-name-p (car args))))
    (setq args (cdr args)))
  ;; Search backend specific handler.
  (when (consp args)
    (let* ((default-directory temporary-file-directory) ;; Avoid recursion.
	   (responsible-backend
	    ;; This check is restricted to `vc-handled-backends'.  But
	    ;; this could be extended to other backends easily, like
	    ;; magit.
	    (ignore-errors
	      (vc-responsible-backend
	       (vc-handler-file-name-part (car args)))))
	   (package
	    (and responsible-backend
		 (concat
		  "vc-"
		  (downcase (symbol-name responsible-backend))
		  "-handler")))
	   (backend-handler-alist
	    (and responsible-backend
		 (intern
		  (concat
		   "vc-"
		   (downcase (symbol-name responsible-backend))
		   "-file-name-handler-alist")))))
      (or (and package
	       (or (featurep (intern package))
		   (load package 'noerror 'nomessage))
	       backend-handler-alist (boundp backend-handler-alist)
	       (assoc operation (symbol-value backend-handler-alist)))
	  (assoc operation vc-file-name-handler-alist)))))

(defun vc-run-real-handler (operation args)
  "Invoke normal file name handler for OPERATION.
First arg specifies the OPERATION, second arg is a list of arguments to
pass to the OPERATION."
  (let* ((inhibit-file-name-handlers
	  `(vc-file-name-handler
	    .
	    ,(and (eq inhibit-file-name-operation operation)
		  inhibit-file-name-handlers)))
	 (inhibit-file-name-operation operation))
    (apply operation args)))

(defun vc-file-name-handler (operation &rest args)
  "Invoke revisioned file name handler.
Falls back to normal file name handler if it doesn't exists."
  (let ((fn (vc-responsible-handler operation args)))
    (if fn
	(save-match-data (apply (cdr fn) args))
      (vc-run-real-handler operation args))))

;; Activate the handler.
(add-to-list 'file-name-handler-alist
	     (cons vc-file-name-regexp
		   'vc-file-name-handler))
(put 'vc-file-name-handler 'safe-magic t)
;; Mark `operations' the handler is responsible for.
(put 'vc-file-name-handler 'operations
     (cl-union
      (get 'vc-file-name-handler 'operations)
      (mapcar 'car vc-file-name-handler-alist)))

;; The handlers.

(defun vc-handle-copy-file
  (filename newname &optional ok-if-already-exists keep-date
   preserve-uid-gid preserve-extended-attributes)
  "Like `copy-file' for revisioned files."
  (setq filename (expand-file-name filename)
	newname (expand-file-name newname))
  (if (vc-handler-file-name-p filename)
      (rename-file (file-local-copy filename) newname ok-if-already-exists)
    (vc-run-real-handler
     'copy-file
     (list filename newname ok-if-already-exists keep-date
	   preserve-uid-gid preserve-extended-attributes))))

(defun vc-handle-directory-files (directory &optional full match nosort)
  "Like `directory-files' for revisioned files."
  (when (file-directory-p directory)
    (setq directory (file-name-as-directory (expand-file-name directory)))
    (let ((temp (nreverse (file-name-all-completions "" directory)))
 	  result item)
      (while temp
 	(setq item (directory-file-name (pop temp)))
 	(when (or (null match) (string-match match item))
 	  (push (if full (concat directory item) item)
 		result)))
      (if nosort result (sort result 'string<)))))

(defun vc-handle-directory-files-and-attributes
    (directory &optional full match nosort id-format)
  "Like `directory-files-and-attributes' for revisioned files."
  (mapcar
   (lambda (x)
     (cons x (file-attributes
 	      (if full x (expand-file-name x directory)) id-format)))
   (directory-files directory full match nosort)))

(defun vc-handle-expand-file-name (filename &optional dir)
  "Like `expand-file-name' for revisioned files."
  (if (not (file-name-absolute-p filename))
      (expand-file-name
       (concat (file-name-as-directory (or dir default-directory)) filename))
    (let* ((default-directory (or dir default-directory))
	   (revision-name
	    (or (vc-handler-file-revision-name filename)
		));(vc-handler-file-revision-name default-directory)))
	   (default-directory
	     (unhandled-file-name-directory default-directory)))
      (when (and revision-name
		 (string-equal (file-name-nondirectory revision-name) "."))
	(setq revision-name (file-name-directory revision-name)))
      (concat
       (expand-file-name (vc-handler-file-name-part filename)) revision-name))))

(defun vc-handle-file-accessible-directory-p (filename)
  "Like `file-accessible-directory-p' for revisioned files."
  (and (file-directory-p filename)
       (file-readable-p filename)))

(defun vc-handle-file-attributes (filename &optional id-format)
  "Like `file-attributes' for revisioned files."
  ;; This is the default implementation.  Shall be superseded by
  ;; backend specific specific implementation. Time, owner, branches
  ;; being directories, ...
  (let ((default-directory (unhandled-file-name-directory default-directory)))
    (file-attributes (vc-handler-file-name-part filename) id-format)))

(defun vc-handle-file-directory-p (filename)
  "Like `file-directory-p' for revisioned files."
  (eq (car (file-attributes filename)) t))

(defun vc-handle-file-executable-p (filename)
  "Like `file-executable-p' for revisioned files."
  (or (file-directory-p filename)
      (file-executable-p (vc-handler-file-name-part filename))))

(defun vc-handle-file-exists-p (filename)
  "Like `file-exists-p' for revisioned files."
  (not (null (file-attributes filename))))

;; This function is stolen from `tramp-mode-string-to-int'.  Maybe a
;; common Emacs function would serve?
(defun vc-handler-mode-string-to-int (mode-string)
  "Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits."
  (let* (case-fold-search
	 (mode-chars (string-to-vector mode-string))
         (owner-read (aref mode-chars 1))
         (owner-write (aref mode-chars 2))
         (owner-execute-or-setid (aref mode-chars 3))
         (group-read (aref mode-chars 4))
         (group-write (aref mode-chars 5))
         (group-execute-or-setid (aref mode-chars 6))
         (other-read (aref mode-chars 7))
         (other-write (aref mode-chars 8))
         (other-execute-or-sticky (aref mode-chars 9)))
    (save-match-data
      (logior
       (cond
	((char-equal owner-read ?r) (string-to-number "00400" 8))
	((char-equal owner-read ?-) 0)
	(t (error "Second char `%c' must be one of `r-'" owner-read)))
       (cond
	((char-equal owner-write ?w) (string-to-number "00200" 8))
	((char-equal owner-write ?-) 0)
	(t (error "Third char `%c' must be one of `w-'" owner-write)))
       (cond
	((char-equal owner-execute-or-setid ?x) (string-to-number "00100" 8))
	((char-equal owner-execute-or-setid ?S) (string-to-number "04000" 8))
	((char-equal owner-execute-or-setid ?s) (string-to-number "04100" 8))
	((char-equal owner-execute-or-setid ?-) 0)
	(t (error "Fourth char `%c' must be one of `xsS-'"
		  owner-execute-or-setid)))
       (cond
	((char-equal group-read ?r) (string-to-number "00040" 8))
	((char-equal group-read ?-) 0)
	(t (error "Fifth char `%c' must be one of `r-'" group-read)))
       (cond
	((char-equal group-write ?w) (string-to-number "00020" 8))
	((char-equal group-write ?-) 0)
	(t (error "Sixth char `%c' must be one of `w-'" group-write)))
       (cond
	((char-equal group-execute-or-setid ?x) (string-to-number "00010" 8))
	((char-equal group-execute-or-setid ?S) (string-to-number "02000" 8))
	((char-equal group-execute-or-setid ?s) (string-to-number "02010" 8))
	((char-equal group-execute-or-setid ?-) 0)
	(t (error "Seventh char `%c' must be one of `xsS-'"
		  group-execute-or-setid)))
       (cond
	((char-equal other-read ?r) (string-to-number "00004" 8))
	((char-equal other-read ?-) 0)
	(t (error "Eighth char `%c' must be one of `r-'" other-read)))
       (cond
	((char-equal other-write ?w) (string-to-number "00002" 8))
	((char-equal other-write ?-) 0)
	(t (error "Ninth char `%c' must be one of `w-'" other-write)))
       (cond
	((char-equal other-execute-or-sticky ?x) (string-to-number "00001" 8))
	((char-equal other-execute-or-sticky ?T) (string-to-number "01000" 8))
	((char-equal other-execute-or-sticky ?t) (string-to-number "01001" 8))
	((char-equal other-execute-or-sticky ?-) 0)
	(t (error "Tenth char `%c' must be one of `xtT-'"
		  other-execute-or-sticky)))))))

(defun vc-handle-file-modes (filename)
  "Like `file-modes' for revisioned files."
  (let ((truename (or (file-truename filename) filename)))
    (when (file-exists-p truename)
      (vc-handler-mode-string-to-int
       (file-attribute-modes (file-attributes truename))))))

(defun vc-handle-file-name-case-insensitive-p (filename)
  "Like `file-name-case-insensitive-p' for revisioned files."
  (let ((default-directory (unhandled-file-name-directory default-directory)))
    (file-name-case-insensitive-p (vc-handler-file-name-part filename))))

(defun vc-handle-file-name-completion (filename directory &optional predicate)
  "Like `file-name-completion' for revisioned files."
  (let (hits-ignored-extensions)
    (or
     (try-completion
      filename (file-name-all-completions filename directory)
      (lambda (x)
 	(when (funcall (or predicate 'identity) (expand-file-name x directory))
 	  (not
 	   (and
 	    completion-ignored-extensions
 	    (string-match
 	     (concat (regexp-opt completion-ignored-extensions 'paren) "$") x)
 	    ;; We remember the hit.
 	    (push x hits-ignored-extensions))))))
     ;; No match.  So we try again for ignored files.
     (try-completion filename hits-ignored-extensions))))

(defun vc-handle-file-newer-than-file-p (file1 file2)
  "Like `file-newer-than-file-p' for revisioned files."
  (cond
   ((not (file-exists-p file1)) nil)
   ((not (file-exists-p file2)) t)
   (t (time-less-p (file-attribute-modification-time
 		    (file-attributes file2))
 		   (file-attribute-modification-time
 		    (file-attributes file1))))))

(defalias 'vc-handle-file-readable-p 'vc-handle-file-exists-p
  "Like `file-readable-p' for revisioned.")

(defun vc-handle-file-regular-p (filename)
  "Like `file-regular-p' for revisioned files."
  (and (file-exists-p filename)
       (eq ?- (aref (file-attribute-modes (file-attributes filename)) 0))))

;; Of course, no revisioned file is remote per se.  But packages use
;; `file-remote-p' as indication, whether a file name could be used
;; literally.  So we return a non-nil value for handled file names.
(defun vc-handle-file-remote-p (filename &optional _identification _connected)
  "Like `file-remote-p' for revisioned files."
  (vc-handler-file-name-part filename))

(defun vc-handle-file-symlink-p (filename)
  "Like `file-symlink-p' for revisioned files."
  (let ((x (file-attribute-type (file-attributes filename))))
    (and (stringp x) x)))

(defun vc-handle-file-truename (filename)
  "Like `file-truename' for revisioned files."
  (if (file-symlink-p filename)
      (file-truename
       (concat
	(vc-handler-file-name-part filename) "@@/"
	(file-symlink-p filename)))
    (concat
     (file-truename (vc-handler-file-name-part filename))
     (vc-handler-file-revision-name filename))))

(defun vc-handle-insert-directory
    (filename switches &optional wildcard full-directory-p)
  "Like `insert-directory' for versioned files."
  (unless switches (setq switches ""))
  ;; Mark trailing "/".
  (when (and (zerop (length (file-name-nondirectory filename)))
 	     (not full-directory-p))
    (setq switches (concat switches "F")))
  (require 'ls-lisp)
  (let (ls-lisp-use-insert-directory-program start)
    (vc-run-real-handler
     'insert-directory
     (list filename switches wildcard full-directory-p))))

(defun vc-handle-insert-file-contents
    (filename &optional visit beg end replace)
  "Like `insert-file-contents' for revisioned files."
  (let* ((tmpfile (file-local-copy (file-truename filename)))
	 (result (insert-file-contents tmpfile visit beg end replace)))
    (when visit
      (setq buffer-file-name filename)
      (setq buffer-read-only (not (file-writable-p filename)))
      (set-visited-file-modtime)
      (set-buffer-modified-p nil))
    (delete-file tmpfile)
    (list (expand-file-name filename)
 	  (cadr result))))

(defun vc-handle-load (file &optional noerror nomessage nosuffix must-suffix)
  "Like `load' for revisioned files."
  (load (file-local-copy file) noerror nomessage nosuffix must-suffix))

(defun vc-handle-make-nearby-temp-file (prefix &optional dir-flag suffix)
  "Like `make-nearby-temp-file' for revisioned files."
  (let ((default-directory (unhandled-file-name-directory default-directory)))
    (make-nearby-temp-file (vc-handler-file-name-part prefix) dir-flag suffix)))

(defun vc-handle-process-file
    (program &optional infile buffer display &rest args)
  "Like `process-file' for revisioned files."
  (let ((default-directory (unhandled-file-name-directory default-directory)))
    (unless (file-directory-p default-directory)
      (setq default-directory
	    (file-name-directory (directory-file-name default-directory))))
    (apply 'process-file program infile buffer display args)))

(defun vc-handle-substitute-in-file-name (filename)
  "Like `substitute-in-file-name' for revisioned files."
  (concat
   (substitute-in-file-name (vc-handler-file-name-part filename))
   (vc-handler-file-revision-name filename)))

(defun vc-handle-verify-visited-file-modtime (&optional buf)
  "Like `verify-visited-file-modtime' for revisioned files."
  ;; Since all files are read-only, we check whether buffer has been modified.
  (not (buffer-modified-p (or buf (current-buffer)))))

(defun vc-handle-unhandled-file-name-directory (filename)
  "Like `unhandled-file-name-directory' for revisioned files."
  (vc-handler-file-name-part filename))

;; Debug.
(dolist (elt (all-completions "vc-handle-" obarray 'functionp))
  (trace-function-background (intern elt)))

(provide 'vc-handler)

;;; vc-handler.el ends here

;; Local Variables:
;; mode: Emacs-Lisp
;; coding: utf-8
;; End:

[-- Attachment #3: vc-git-handler.el --]
[-- Type: application/emacs-lisp, Size: 12566 bytes --]

;;; vc-git-handler.el --- File Name Handler for revisions of Git versioned files  -*- lexical-binding:t -*-

;; Copyright (C) 2017 Free Software Foundation, Inc.

;; Author: Michael Albinus <michael.albinus@gmx.de>
;; Keywords: vc tools
;; Package: vc

;; This file is part of GNU Emacs.

;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; This package provides file name handlers specific for Git.

;; A revision looks like "@@/master/ef7a18a071" or "@@/master/HEAD".
;; Branches are subdirectories, a revision in a branch might be
;; "@@/emacs-25/3a34412caa" or "@@/emacs-25/HEAD", and a label is a
;; symlink like "@@/emacs-25.2".  The element "HEAD" is always a
;; symlink to either the head of a branch, or to the current branch on
;; top level.

;;; Code:

(require 'vc-git)

;; New handlers should be added here.
(defconst vc-git-file-name-handler-alist
  '((file-attributes . vc-git-handle-file-attributes)
    (file-name-all-completions . vc-git-handle-file-name-all-completions)
    ;; TODO: Wouldn't it be better, to have `copy-file' here?
    (file-local-copy . vc-git-handle-file-local-copy))
  "Alist of Git specific handler functions.
Operations not mentioned here will be handled by vc-handler.el or
the default file name functions.")

;; Mark `operations' the handler is responsible for.
(put 'vc-file-name-handler 'operations
     (cl-union
      (get 'vc-file-name-handler 'operations)
      (mapcar 'car vc-git-file-name-handler-alist)))

;; Internal variables and functions.

(defvar vc-git-handler-branches nil
  "Cached local branch names.
The car of the list is the current branch.")

(defun vc-git-handler-branches ()
  "Return a list of local branches.
The car of the list is the current branch."
  (setq vc-git-handler-branches
	(vc-git-branches)))

(defvar vc-git-handler-tags nil
  "Cached tag names.")

(defun vc-git-handler-tags ()
  "Return a list of all tags."
  (setq vc-git-handler-tags
	(or vc-git-handler-tags
	    (split-string
	     (vc-git--run-command-string nil "tag") nil 'omit-nulls))))

(defvar vc-git-handler-heads nil
  "Cached alist of (OBJECT SHA1) tupels.
OBJECT is a branch name, a tag name, or \"HEAD\".")

(defun vc-git-handler-heads ()
  "Return an alist (OBJECT SHA1) tupels.
OBJECT is a branch name, a tag name, or \"HEAD\"."
  (setq vc-git-handler-heads
	(or vc-git-handler-heads
	    (mapcar
	     (lambda (x)
	       (list
		(replace-regexp-in-string
		 "refs/\\(tags\\|heads\\)/" "" (cadr x))
		(car x)))
	     (mapcar
	      ;; Hash object.
	      'split-string
	      ;; Lines.
	      (split-string
	       (vc-git--run-command-string
		nil "show-ref" "--heads" "--tags" "--head" "--abbrev")
	       "[\f\n]+" 'omit-nulls))))))

(defun vc-git-handler-head (object)
  "Return SHA1 of OBJECT.
OBJECT is a branch name, a tag name, or \"HEAD\"."
  (cadr (assoc object (vc-git-handler-heads))))

(defvar vc-git-handler-file-attributes (make-hash-table :test 'equal)
  "Cached file attributes.
It is a hash, the key is the revisioned file name, and the value
is the result of `file-attributes'.")

;; TODO: We shall add also functions to expire the caches.  Best would
;; be file notification, which watches respectice git files (indexes).

(defun vc-git-handler-object-exists-for-file-p (object filename)
  "Check, whether OBJECT (branch or tag) exists for FILE."
  ;; This is a sledge-hammer approach.  There must be something more
  ;; efficient.  For the time being, we simply return t.
  ;; (not
  ;;  (zerop
  ;;   (length
  ;;    (vc-git--run-command-string
  ;;     (vc-handler-file-name-part filename)
  ;;     "log" "--max-count=1" "--oneline" object "--")))))
  t)

;; The handlers.

(defun vc-git-handler-file-attributes-of-head (filename &optional id-format)
  "Like `file-attributes' for HEAD."
  (setq filename (expand-file-name filename))
  (let* ((file-name (vc-handler-file-name-part filename))
	 (revision (vc-handler-file-revision-name filename))
	 attr)
    ;; Revision is @@/branch/name/HEAD.
    (string-match "\\`@@\\(?:/\\(.*\\)\\)?/HEAD\\'" revision)
    (setq revision (match-string 1 revision)
	  attr
	  (file-attributes
	   (concat file-name "@@/" (vc-git-handler-head (or revision "HEAD")))
	   id-format))
    ;; Modify symlink.
    (if (zerop (length revision))
	(setcar attr (car (vc-git-handler-branches))) ;; Current branch.
      (setcar attr (vc-git-handler-head revision))) ;; Head of branch.
    (aset (nth 8 attr) 0 ?l)
    attr))

(defun vc-git-handle-file-attributes (filename &optional id-format)
  "Like `file-attributes' for revisioned files."
  (let ((cache-key (concat filename "@@" (symbol-name (or id-format 'integer))))
	attr)
    (cond
     ;; Cached value.
     ((setq attr (gethash cache-key vc-git-handler-file-attributes)))

     ;; Determine HEAD.
     ((string-equal (file-name-nondirectory filename) "HEAD")
      (setq attr (vc-git-handler-file-attributes-of-head filename id-format)))

     (t
      (setq filename (expand-file-name filename))
      (let* ((default-directory temporary-file-directory) ;; Avoid recursion.
             (file-name (vc-handler-file-name-part filename))
             (root (vc-git-root file-name))
             (default-directory (expand-file-name root))
	     (revision (vc-handler-file-revision-name filename))
	     git-log hash time author)
	(setq attr (file-attributes file-name id-format))
	;; Determine revision.
	(string-match "\\`@@/\\(.+\\)\\'" revision)
	(when (and (setq revision (match-string 1 revision))
		   ;; It could be branch/name/nnnnnnnnnn.
		   (file-name-directory revision)
		   (member
		    (directory-file-name (file-name-directory revision))
		    (vc-git-handler-branches)))
	  (setq revision (file-name-nondirectory revision)
		revision (unless (zerop (length revision)) revision)))

	;; Determine hash, commit time and commit author.
	(ignore-errors
	  (when (and (setq git-log
			   (vc-git--run-command-string
			    (unless (member revision (vc-git-handler-tags))
			      file-name)
			    "log" "--no-color" "--format=%h %at %an"
			    "--max-count=1" revision "--"))
		     (string-match
		      (concat
		       "\\`\\([[:alnum:]]+\\)[[:space:]]"
		       "\\([[:digit:]]+\\)[[:space:]]"
		       "\\(.+\\)\n?\\'")
		      git-log))
	    (setq hash (match-string 1 git-log)
		  time (string-to-number (match-string 2 git-log))
		  author (match-string 3 git-log))))

	;; Modify directory indicator.
	(when (or (null revision) (member revision (vc-git-handler-branches)))
	  (setcar attr t)
	  (aset (nth 8 attr) 0 ?d))

	;; Modify symlink.
	(when (member revision (vc-git-handler-tags))
	  (setcar attr hash)
	  (aset (nth 8 attr) 0 ?l))

	;; Modify uid and gid string.
	(when (and author (eq id-format 'string))
	  (setcar (nthcdr 2 attr) author)
	  (setcar (nthcdr 3 attr) "UNKNOWN"))

	;; Modify last access time, last modification time, and last
	;; status change time.
	(when time
	  (setcar
	   (nthcdr 4 attr) (list (floor time 65536) (floor (mod time 65536))))
	  (setcar
	   (nthcdr 5 attr) (list (floor time 65536) (floor (mod time 65536))))
	  (setcar
	   (nthcdr 6 attr) (list (floor time 65536) (floor (mod time 65536)))))

	;; Modify file size.
	(ignore-errors
	  (and revision
	       (setq git-log
		     (vc-git--run-command-string
		      nil "cat-file" "-s"
		      (format
		       "%s:%s" revision (file-relative-name file-name))))
	       (string-match "\\`\\([[:digit:]]+\\)\n?\\'" git-log)
	       (setcar
		(nthcdr 7 attr) (string-to-number (match-string 1 git-log)))))

	;; Modify mode string.  Remove write bit, and add execute bit
	;; for directories.
	(aset (nth 8 attr) 2 ?-)
	(aset (nth 8 attr) 5 ?-)
	(aset (nth 8 attr) 8 ?-)
	(when (char-equal (aref (nth 8 attr) 0) ?d)
	  (when (char-equal (aref (nth 8 attr) 1) ?r)
	    (aset (nth 8 attr) 3 ?x))
	  (when (char-equal (aref (nth 8 attr) 4) ?r)
	    (aset (nth 8 attr) 6 ?x))
	  (when (char-equal (aref (nth 8 attr) 7) ?r)
	    (aset (nth 8 attr) 9 ?x))))))

    ;; TODO: we need also to modify inode, device-number.

    ;; Result.
    (puthash cache-key attr vc-git-handler-file-attributes)))

;; This function should return "foo/" for directories and "bar" for files.
(defun vc-git-handle-file-name-all-completions (filename directory)
  "Like `file-name-all-completions' for revisioned files."
  (let* ((file-name (vc-handler-file-name-part directory))
	 (branch (vc-handler-file-revision-name directory))
	 (default-directory (unhandled-file-name-directory file-name))
	 base all-revisions all-tags all-branches)
    (unless (file-directory-p default-directory)
      (setq default-directory
	    (file-name-directory (directory-file-name default-directory))))
    ;; Read branch specific revisions.
    ;; TODO: This yields all revisions reachable from the branch head.
    ;; It might be better to return only revisions starting when the
    ;; branch was created, but I don't know how to determine this.
    ;; "git merge-base --fork-point <branch>" sounds like a good
    ;; candidate, but it doesn't work as expected.
    (string-match "\\`@@/\\(.+\\)\\'" branch)
    (when (and (setq branch (match-string 1 branch))
	       (setq branch (directory-file-name branch)))
      (ignore-errors
	(with-temp-buffer
	  (and
	   (vc-git-command
	    (current-buffer) nil file-name
	    "log" "--no-color" "--format=%h" branch "--")
	   (goto-char (point-min))
	   (while (< (point) (point-max))
	     (push
	      (buffer-substring-no-properties (point) (line-end-position))
	      all-revisions)
	     (forward-line 1))))))
    ;; Every branch has a virtual HEAD.
    (setq all-revisions (cons "HEAD" all-revisions))

    ;; Read tags.
    (setq all-tags
	  (mapcar
	   (lambda (x)
	     (and
	      (if branch
		  ;; Mention only tags belonging to branch.
		  (member (vc-git-handler-head x) all-revisions)
		;; All existing tags for that file.
		(vc-git-handler-object-exists-for-file-p x file-name))
	      x))
	   (vc-git-handler-tags)))

    ;; Read branches in top level for that file.  Add trailing "/".
    (unless branch
      (setq all-branches
	    (mapcar
	     (lambda (x)
	       (and (vc-git-handler-object-exists-for-file-p x file-name)
		    (file-name-as-directory x)))
	     (vc-git-handler-branches))))

    ;; Result.
    (all-completions
     filename (delq nil (append all-revisions all-tags all-branches)))))

(defun vc-git-handle-file-local-copy (filename)
  "Like `file-local-copy' for revisioned files."
  (setq filename (expand-file-name filename))
  (let* ((default-directory temporary-file-directory) ;; Avoid recursion.
         (file-name (vc-handler-file-name-part filename))
         (root (vc-git-root file-name))
         (default-directory (expand-file-name root))
	 (revision (vc-handler-file-revision-name filename))
	 (result
	  (make-temp-file "vc-" nil (file-name-extension file-name 'period))))
    ;; Determine revision.
    (string-match "\\`@@/\\(.+\\)\\'" revision)
    (when (setq revision (match-string 1 revision))
      (setq revision (file-name-nondirectory revision))
      (with-temp-buffer
        (and
	 (vc-git-command
	  (current-buffer) nil nil
	  "show" (format "%s:%s" revision (file-relative-name file-name)))
	 (write-region nil nil result)))
      ;; Set attributes.
      (set-file-times
       result (file-attribute-modification-time (file-attributes filename)))
      (set-file-modes result (file-modes filename))
      result)))

;; Debug.
(dolist (elt (all-completions "vc-git-" obarray 'functionp))
  (trace-function-background (intern elt)))

(provide 'vc-git-handler)

;;; vc-git-handler.el ends here

;; Local Variables:
;; mode: Emacs-Lisp
;; coding: utf-8
;; End:

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

* Re: git-handler.el
  2017-08-11 10:26         ` git-handler.el Michael Albinus
@ 2017-08-12 10:48           ` Jonas Bernoulli
  2017-08-12 12:01             ` git-handler.el Eli Zaretskii
                               ` (2 more replies)
  0 siblings, 3 replies; 136+ messages in thread
From: Jonas Bernoulli @ 2017-08-12 10:48 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Emacs developers, Dmitry Gutov


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.



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

* Re: git-handler.el
  2017-08-12 10:48           ` git-handler.el Jonas Bernoulli
@ 2017-08-12 12:01             ` Eli Zaretskii
  2017-08-12 17:26               ` git-handler.el Jonas Bernoulli
  2017-08-12 18:22             ` git-handler.el John Wiegley
  2017-08-12 19:17             ` git-handler.el Michael Albinus
  2 siblings, 1 reply; 136+ messages in thread
From: Eli Zaretskii @ 2017-08-12 12:01 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: dgutov, michael.albinus, emacs-devel

> From: Jonas Bernoulli <jonas@bernoul.li>
> Date: Sat, 12 Aug 2017 12:48:22 +0200
> Cc: Emacs developers <emacs-devel@gnu.org>, Dmitry Gutov <dgutov@yandex.ru>
> 
> > 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.

That doesn't scale to VCSes which keep separate versions for
individual files.  Michael's scheme does support such VCSes.  For a
VCS like Git or Bazaar, Michael's scheme shouldn't get in the way, I
think.  If you disagree, please show some use cases where this could
cause trouble.



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

* Re: git-handler.el
  2017-08-12 12:01             ` git-handler.el Eli Zaretskii
@ 2017-08-12 17:26               ` Jonas Bernoulli
  2017-08-12 17:43                 ` git-handler.el Eli Zaretskii
  2017-08-12 19:32                 ` git-handler.el Michael Albinus
  0 siblings, 2 replies; 136+ messages in thread
From: Jonas Bernoulli @ 2017-08-12 17:26 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dgutov, michael.albinus, emacs-devel


Eli Zaretskii <eliz@gnu.org> writes:

>> From: Jonas Bernoulli <jonas@bernoul.li>
>> Date: Sat, 12 Aug 2017 12:48:22 +0200
>> Cc: Emacs developers <emacs-devel@gnu.org>, Dmitry Gutov <dgutov@yandex.ru>
>>
>> > 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.
>
> That doesn't scale to VCSes which keep separate versions for
> individual files.

How so?  Wouldn't my scheme just look like:

  /path/to/dir-containing-closest-control-file/<vcs>@<rev>:<file>

instead of

  /path/to/dir-containing-closest-control-file/<vcs>@<file>/<rev>

when trying to stay as close the internals of that <vcs>?

Also isn't that an implementation detail and users of <vcs> still
think of "/path/to/top" as "the repository"?  If that is so then
what should it matter that <vcs> spreads the history files across
the repository instead of putting them into a dedicated control
directory?

Using such a <vcs> and given:

  /path/to/top/
  |- fileA
  |- .fileA.history
  `- subdir/
     |- fileB
     `- .fileB.history

I don't know whether its users would prefer

  A1) /path/to/top/<vcs>@<rev>:<subdir>/<fileB>
  A2) /path/to/top/<vcs>@<subdir>/<fileB>/<rev>

or

  B1) /path/to/top/subdir/<vcs>@<rev>:<fileB>
  B2) /path/to/top/subdir/<vcs>@<fileB>/<rev>

But even if to users of <vcs> (B) is preferable to (A), I don't see
how (B2) is superior to (B1), or how (B1) is even incompatible.

But I never used such a vcs, so probably I am missing something.

> Michael's scheme does support such VCSes.  For a
> VCS like Git or Bazaar, Michael's scheme shouldn't get in the way, I
> think.

Maybe we could use different schemes for different vc systems.

> If you disagree, please show some use cases where this could
> cause trouble.

I care more about the conceptual consistency than use cases at this
point, because I think that even if we cannot think of any concrete
issues now, we are sure to eventually run into.

The revision is part of a virtual directory structure and it should
appear in the correct (i.e. hierarchic) place.  People have come to
expect a hierarchic structure when dealing with files, and if we break
that consistency (just for compatibility with legacy vc systems), then
that will cause confusion.

This is one way of accessing <blob> as stored in <branch>:

  cd /tmp/repo
  git worktree add ../repo_<branch> <branch>
  find-file /tmp/repo_<branch>/<blob>

And with a file handler instead of a worktree checkout:

  cd /tmp/repo
  find-file /tmp/repo/git@<branch>:<blob>
    or
  find-file /tmp/repo/@@<blob>/<branch

Clearly only the scheme I suggested is consistent with the expectation
of a hierarchic directory structure.

One example use case where the scheme that I propose would be nicer than
the non-hierarchic one is "using find-file to open another blob from the
same revision/tree".



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

* Re: git-handler.el
  2017-08-12 17:26               ` git-handler.el Jonas Bernoulli
@ 2017-08-12 17:43                 ` Eli Zaretskii
  2017-08-12 19:32                 ` git-handler.el Michael Albinus
  1 sibling, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-08-12 17:43 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: dgutov, michael.albinus, emacs-devel

> From: Jonas Bernoulli <jonas@bernoul.li>
> Cc: michael.albinus@gmx.de, emacs-devel@gnu.org, dgutov@yandex.ru
> Date: Sat, 12 Aug 2017 19:26:15 +0200
> 
> >> > 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.
> >
> > That doesn't scale to VCSes which keep separate versions for
> > individual files.
> 
> How so?  Wouldn't my scheme just look like:
> 
>   /path/to/dir-containing-closest-control-file/<vcs>@<rev>:<file>
> 
> instead of
> 
>   /path/to/dir-containing-closest-control-file/<vcs>@<file>/<rev>
> 
> when trying to stay as close the internals of that <vcs>?

Well, for starters, it will defeat the completion machinery, or at
least make it much more complicated.

> Also isn't that an implementation detail and users of <vcs> still
> think of "/path/to/top" as "the repository"?  If that is so then
> what should it matter that <vcs> spreads the history files across
> the repository instead of putting them into a dedicated control
> directory?

FILE@@revision is not a history file, it is FILE as it looked like at
given VERSION.  Where that information is kept is beside the point.
As I'm sure you understand, so I guess I don't really see the point
you are making here.

> > Michael's scheme does support such VCSes.  For a
> > VCS like Git or Bazaar, Michael's scheme shouldn't get in the way, I
> > think.
> 
> Maybe we could use different schemes for different vc systems.

That would be undesirable, I think.

> The revision is part of a virtual directory structure

Sorry, you lost me.  What is that "virtual directory structure", and
how is it relevant to this issue?

> This is one way of accessing <blob> as stored in <branch>:

We are talking about abstractions, not about their Git implementation.
So why do we have to consider blobs?

> One example use case where the scheme that I propose would be nicer than
> the non-hierarchic one is "using find-file to open another blob from the
> same revision/tree".

I guess I'm so Git-ignorant that I don't even understand what that
means.  Maybe I shouldn't be part of this discussion.



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

* Re: git-handler.el
  2017-08-12 10:48           ` git-handler.el Jonas Bernoulli
  2017-08-12 12:01             ` git-handler.el Eli Zaretskii
@ 2017-08-12 18:22             ` John Wiegley
  2017-08-12 18:28               ` git-handler.el Michael Albinus
  2017-08-12 19:52               ` git-handler.el Jonas Bernoulli
  2017-08-12 19:17             ` git-handler.el Michael Albinus
  2 siblings, 2 replies; 136+ messages in thread
From: John Wiegley @ 2017-08-12 18:22 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: Dmitry Gutov, Michael Albinus, Emacs developers

>>>>> "JB" == Jonas Bernoulli <jonas@bernoul.li> writes:

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

I would prefer having both: sometimes I want to "browse into the Git tree at a
revision", and sometimes I'm already in a deep directory within a project, and
I want to think in terms of "browse into the many past versions of a given
file". Both make sense from different points of views.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



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

* Re: git-handler.el
  2017-08-12 18:22             ` git-handler.el John Wiegley
@ 2017-08-12 18:28               ` Michael Albinus
  2017-08-12 19:52               ` git-handler.el Jonas Bernoulli
  1 sibling, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-08-12 18:28 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: Dmitry Gutov, Emacs developers

John Wiegley <jwiegley@gmail.com> writes:

> JB> I would prefer /path/to/repo/@git:REVISION:path/to/file. I don't have a
> JB> strong opinion about what the magic cookie should look like, but I think
> JB> it should be inserted at the root of the working tree.
>
> I would prefer having both: sometimes I want to "browse into the Git tree at a
> revision", and sometimes I'm already in a deep directory within a project, and
> I want to think in terms of "browse into the many past versions of a given
> file". Both make sense from different points of views.

Same here. I'm just writing an extension of the specification, covering
both cases. Not sure, whether I'll finish tonight.

Best regards, Michael.



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

* Re: git-handler.el
  2017-08-12 10:48           ` git-handler.el Jonas Bernoulli
  2017-08-12 12:01             ` git-handler.el Eli Zaretskii
  2017-08-12 18:22             ` git-handler.el John Wiegley
@ 2017-08-12 19:17             ` Michael Albinus
  2017-08-12 19:46               ` git-handler.el Yuri Khan
  2 siblings, 1 reply; 136+ messages in thread
From: Michael Albinus @ 2017-08-12 19:17 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: Emacs developers, Dmitry Gutov

Jonas Bernoulli <jonas@bernoul.li> writes:

Hi Jonas,

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

No, we are speaking about file name handlers. So we must give the syntax
a chance to address just one file. As Eli said, think about other VCSes,
like CVS. Your syntax wouldn't match.

I believe we should not use the VCS name, like "git", in the file name
syntax. There is no need for it, because we could offer a variable
`vc-handler-backend' or so, in which a user could tell us the preferred
backend. It could be one of the values of `vc-handled-backends' like
`Git', or it could be something different like the symbol `Magit'.

If this variable is declared directory-local at project root, the user
don't need to think about ever. If that variable is nil, the fallback
would be the vc mechanism via the `vc-responsible-backend' call, as I
have already implemented. Or something else.

I would also recommend to avoid using ":" in the file name. Although we
haven't the case yet, I fear that we would clash some day with Tramp
file name syntax.

So I'm back to the syntax "/path/to/file@@<backend specific>" or
"/path/to/directory@@<backend specific>". Note the /path/to/directory
case I haven't mentioned before, and which isn't implemented yet in the
code. There's no need to use the slash prior the cookie @@, because this
will be detected by ordinary file operations. About the
/path/to/directory@@... semantics more below.

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

I don't see yet what you have in mind. Implementing all magic file name
operations is sufficient in my understanding. vc-handler.el shall be
the common part for all VCSes, and vc-<backend>-handler.el shall be the
backend specific part. Beside the `vc-responsible-backend' call I've
mentioned above, there is no vc*.el functionality used in
vc-handler.el. Maybe the name is misleading here.

I have established a mechanism, allowing backend specific handlers to
overrule common ones. `vc-git-handle-file-attributes' takes priority
over `vc-handle-file-attributes' in my implementation. So could
(vc-)magit-handle-* functions.

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

Dired itself doesn't matter too much for the file name handler
business. It is just a proper UI in order to explore the possibilities.

In my previous mail I have described how a file oriented view would
look like. Take the Emacs source tree, and file
lisp/display-line-numbers.el as example (I take it, because it has a
short commit history :-) In dired, there exists then

--8<---------------cut here---------------start------------->8---
  /home/albinus/src/emacs/lisp/display-line-numbers.el@@:
  total 12
  lr--r--r--  1 Paul Eggert     UNKNOWN 3922 08-03 04:46 emacs23 -> a8a81df8da
  lr--r--r--  1 Michael Albinus UNKNOWN 3922 08-01 10:13 HEAD -> master
  dr-xr-xr-x  1 Michael Albinus UNKNOWN 3922 08-01 10:13 master

  /home/albinus/src/emacs/lisp/display-line-numbers.el@@/master:
  total 23
  -r--r--r--  1 Michael Albinus   UNKNOWN 3846 07-23 09:28 012487bc41
  -r--r--r--  1 Mark Oteiza       UNKNOWN 3937 07-25 02:17 32daa3cb54
  -r--r--r--  1 Alexander Gramiak UNKNOWN 3831 07-22 11:16 ebb78a7bfa
  -r--r--r--  1 Michael Albinus   UNKNOWN 3922 08-01 10:13 ef7a18a071
  -r--r--r--  1 Mark Oteiza       UNKNOWN 3960 07-23 21:41 f57c710772
  lr--r--r--  1 Michael Albinus   UNKNOWN 3922 08-01 10:13 HEAD -> 81e22163eb
--8<---------------cut here---------------end--------------->8---

The file belongs only to the master branch so far; if it would belong to
other branches, there would be respective subdirectories. And there is
only one label on that file so far, emacs23. (Btw, where does it come from?)

A revision oriented view would start with a directory, and not with a
file. Let's use lisp/, and revision ef7a18a071

--8<---------------cut here---------------start------------->8---
  /home/albinus/src/emacs/lisp@@:
  total 12
  lr--r--r--  1 Paul Eggert     UNKNOWN 3922 08-03 04:46 emacs23 -> a8a81df8da
  lr--r--r--  1 Michael Albinus UNKNOWN 3922 08-01 10:13 HEAD -> master
  dr-xr-xr-x  1 Michael Albinus UNKNOWN 3922 08-01 10:13 master
  [... Other branches] 
  dr-xr-xr-x  1 Michael Albinus   UNKNOWN 3922 08-01 10:13 ef7a18a071
  [... Other revisions] 

  /home/albinus/src/emacs/lisp@@/ef7a18a071:
  total 23
  -r--r--r--  1 Michael Albinus   UNKNOWN   3922 08-01 10:13 display-line-numbers.el
  -r--r--r--  1 Michael Albinus   UNKNOWN 109714 08-01 10:13 menu-bar.el
--8<---------------cut here---------------end--------------->8---

(This example I have written manually, it is not implemented yet).

You see the difference. In the file oriented view, we have
"/home/albinus/src/emacs/lisp/display-line-numbers.el@@/master" being a
directory, containing all revisions and labels as regulary files.

In the revision oriented view, we have
"/home/albinus/src/emacs/lisp@@/ef7a18a071" being a directory,
containing the files which have been modified by this commit.

This is just the basic idea, and it would work for other backends as
well. For CVS, the revision oriented view would just offer one file for
a given commit, and likely several files for a given label (which is a
directory or a symlink to a directory).

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

For one blob it might perform better. But I have implemented the file
oriented view first, which asks information for every file containing to
a blob again and again. `vc-git-handle-file-attributes', for example,
raises two process calls. Much place for improvement, of course.

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

Yep. See the comment in vc-git-handler.el:

;; TODO: We shall add also functions to expire the caches.  Best would
;; be file notification, which watches respective git files (indexes).

Once the cache expires the information of a file, let's say the
`file-attributes' information, new information is retrieved next time
`file-attributes' is called. Emacs will warn you then that the buffer
contents is not current. You could revert.

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

I don't understand. What do you need, which is not handled by basic file
operations, like `verify-visited-file-modtime'?

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

I have no plan yet for committing something, because I don't know where
it shall go. Emacs core? ELPA?

>   Cheers,
>   Jonas
>
> Ps: I'll probably be unavailable for a few days.

No problem, take your time.

Best regards, Michael.



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

* Re: git-handler.el
  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                 ` Michael Albinus
  1 sibling, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-08-12 19:32 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: Eli Zaretskii, dgutov, emacs-devel

Jonas Bernoulli <jonas@bernoul.li> writes:

Hi Jonas,

> How so?  Wouldn't my scheme just look like:
>
>   /path/to/dir-containing-closest-control-file/<vcs>@<rev>:<file>
>
> instead of
>
>   /path/to/dir-containing-closest-control-file/<vcs>@<file>/<rev>
>
> when trying to stay as close the internals of that <vcs>?

First, we have to agree the file name *syntax*. There shall be a cookie
which delimits the regular file name from the vcs specific part. And the
vcs name shall not be part of the whole file name, this is not
necessary.

I have proposed "@@" as cookie at the end of the regular file or
directory name, a directory indication like a slash prior this cookie is
not needed I believe. I have decided for the double "@@" because it
gives a user more attention. People who have used ClearCase might know
where I have taken this from, but this doesn't matter for the decision.

Could you live with that proposal?

The vcs specific part shall also look the same for all involved
VCSes. It would be great if the semantics is always the same as well (in
the file oriented view, branches are directories, revisions are files,
and labels are symlinks), but I don't know whether we could keep this.

Best regards, Michael.



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

* Re: git-handler.el
  2017-08-12 19:17             ` git-handler.el Michael Albinus
@ 2017-08-12 19:46               ` Yuri Khan
  2017-08-13  9:14                 ` git-handler.el Michael Albinus
  0 siblings, 1 reply; 136+ messages in thread
From: Yuri Khan @ 2017-08-12 19:46 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Jonas Bernoulli, Dmitry Gutov, Emacs developers

On Sun, Aug 13, 2017 at 2:17 AM, Michael Albinus <michael.albinus@gmx.de> wrote:

> A revision oriented view would start with a directory, and not with a
> file. Let's use lisp/, and revision ef7a18a071
>
> --8<---------------cut here---------------start------------->8---
>   /home/albinus/src/emacs/lisp@@/ef7a18a071:
>   total 23
>   -r--r--r--  1 Michael Albinus   UNKNOWN   3922 08-01 10:13 display-line-numbers.el
>   -r--r--r--  1 Michael Albinus   UNKNOWN 109714 08-01 10:13 menu-bar.el
> --8<---------------cut here---------------end--------------->8---
>
> (This example I have written manually, it is not implemented yet).
>
> In the revision oriented view, we have
> "/home/albinus/src/emacs/lisp@@/ef7a18a071" being a directory,
> containing the files which have been modified by this commit.

This will not be sufficient. As a Git user, I frequently want to
browse the whole repository as of a specific revision. Use case: “Two
months ago, function foo was changed to call function bar. How did bar
look at that point?”

Also, in a dired buffer showing src/emacs/lisp@@/ef7a18a071, will
dired-jump jump to src/emacs@@/ef7a18a071?



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

* Re: git-handler.el
  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               ` Jonas Bernoulli
  2017-08-13  9:26                 ` git-handler.el Michael Albinus
  1 sibling, 1 reply; 136+ messages in thread
From: Jonas Bernoulli @ 2017-08-12 19:52 UTC (permalink / raw)
  To: John Wiegley; +Cc: Dmitry Gutov, Michael Albinus, Emacs developers


John Wiegley <jwiegley@gmail.com> writes:

>>>>>> "JB" == Jonas Bernoulli <jonas@bernoul.li> writes:
>
> JB> I would prefer /path/to/repo/@git:REVISION:path/to/file. I don't have a
> JB> strong opinion about what the magic cookie should look like, but I think
> JB> it should be inserted at the root of the working tree.
>
> I would prefer having both: sometimes I want to "browse into the Git tree at a
> revision", and sometimes I'm already in a deep directory within a project, and
> I want to think in terms of "browse into the many past versions of a given
> file". Both make sense from different points of views.

Yes of course.  Unfortunately we cannot have both without making an
additional effort. (*)

When using the REV:PATH scheme "another file from the same revision"
works exactly the same as "another file from the same directory", but
even when using the PATH:REV scheme the "same file, another revision"
use-case only (loosely) corresponds to an operation on regular files:
"same file, from this other revision whose human readable name I know".

So if you are visiting "/path/to/@@file/some-feature", it would be nice
if `find-file' gave you "Find file: /path/to/@@file/" and you could type
"ma TAB RET" to visit "/path/to/@@file/master".  But that's only one
variant of "same file, another revision" and probably not even the most
common one.

Another variant would be "same file, next/previous revision" where
next/previous could have different meanings.  A common one is "the
next/previous revision which touched this line".  Currently there's even
exists a package just for that use case: `git-timemachine'.

(Magit also provides that same feature but the implementations are not
compatible.  `git-timemachine' reuses the same buffer to visit different
version of the file (which has the benefit that no buffers have to be
cleaned up later), while Magit uses a new buffer (which allows you to
look at different versions of the same file at once).)

Anyway, I don't think it makes sense to teach `find-file' about going to
the next/previous revision.  Instead that use-case should be handled by
separate commands, which would likely be bound to "<some-prefix> n" and
"<some-prefix> p" (that's what `git-timemachine' and Magit currently do).

The point I am trying to make here is that `find-file' cannot possibly
the right command to handle all cases of "same file, another revision"
with ease, while it is completely suitable for "same revision, another
revision", with no extra effort.  But only if we go with the REV:PATH
scheme.

(*) If we go with the REV:FILE scheme then I propose that we make the
    "same file, another *named* revision" use-case easy by adding a
    separate command just for that.  The user would be presented with
    "Find revision of file /path/to/: ".  And if the user already
    invoked `find-file' or a variant thereof, then there should be
    a key binding to abort that and switch to the "change revision"
    command instead.



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

* Re: git-handler.el
  2017-08-12 19:46               ` git-handler.el Yuri Khan
@ 2017-08-13  9:14                 ` Michael Albinus
  2017-08-13 10:08                   ` git-handler.el Yuri Khan
  0 siblings, 1 reply; 136+ messages in thread
From: Michael Albinus @ 2017-08-13  9:14 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Jonas Bernoulli, Dmitry Gutov, Emacs developers

Yuri Khan <yuri.v.khan@gmail.com> writes:

Hi Yuri,

>> A revision oriented view would start with a directory, and not with a
>> file. Let's use lisp/, and revision ef7a18a071
>>
>> --8<---------------cut here---------------start------------->8---
>>   /home/albinus/src/emacs/lisp@@/ef7a18a071:
>>   total 23
>>   -r--r--r-- 1 Michael Albinus UNKNOWN 3922 08-01 10:13
>> display-line-numbers.el
>>   -r--r--r--  1 Michael Albinus   UNKNOWN 109714 08-01 10:13 menu-bar.el
>> --8<---------------cut here---------------end--------------->8---
>>
>> (This example I have written manually, it is not implemented yet).
>>
>> In the revision oriented view, we have
>> "/home/albinus/src/emacs/lisp@@/ef7a18a071" being a directory,
>> containing the files which have been modified by this commit.
>
> This will not be sufficient. As a Git user, I frequently want to
> browse the whole repository as of a specific revision. Use case: “Two
> months ago, function foo was changed to call function bar. How did bar
> look at that point?”

You know, that function bar is declared in file baz.el. So you could
inspect the revisions of baz.el by looking into directory
"/home/albinus/src/emacs/lisp/baz.el@@/master" (given you're interested
in branch master).

> Also, in a dired buffer showing src/emacs/lisp@@/ef7a18a071, will
> dired-jump jump to src/emacs@@/ef7a18a071?

Could be, yes. Likely, it needs some adaption of dired-jump (it uses
file-name-directory for traversing the directory path), but why not.

Best regards, Michael.



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

* Re: git-handler.el
  2017-08-12 19:52               ` git-handler.el Jonas Bernoulli
@ 2017-08-13  9:26                 ` Michael Albinus
  0 siblings, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-08-13  9:26 UTC (permalink / raw)
  To: Jonas Bernoulli; +Cc: John Wiegley, Dmitry Gutov, Emacs developers

Jonas Bernoulli <jonas@bernoul.li> writes:

Hi Jonas,

> So if you are visiting "/path/to/@@file/some-feature", it would be nice
> if `find-file' gave you "Find file: /path/to/@@file/" and you could type
> "ma TAB RET" to visit "/path/to/@@file/master".  But that's only one
> variant of "same file, another revision" and probably not even the most
> common one.

That shall work out-of-the-box, file-name-all-completions knows of branches.

> Another variant would be "same file, next/previous revision" where
> next/previous could have different meanings.  A common one is "the
> next/previous revision which touched this line".  Currently there's even
> exists a package just for that use case: `git-timemachine'.
>
> (Magit also provides that same feature but the implementations are not
> compatible.  `git-timemachine' reuses the same buffer to visit different
> version of the file (which has the benefit that no buffers have to be
> cleaned up later), while Magit uses a new buffer (which allows you to
> look at different versions of the same file at once).)

That's not possible with magic file name handler operations as they are
defined now. They don't give you the ability to say something about the
file contents.

> Anyway, I don't think it makes sense to teach `find-file' about going to
> the next/previous revision.  Instead that use-case should be handled by
> separate commands, which would likely be bound to "<some-prefix> n" and
> "<some-prefix> p" (that's what `git-timemachine' and Magit currently do).

I agree. New commands in dired would serve, indeed. But that would be
backend specific.

> The point I am trying to make here is that `find-file' cannot possibly
> the right command to handle all cases of "same file, another revision"
> with ease, while it is completely suitable for "same revision, another
> revision", with no extra effort.  But only if we go with the REV:PATH
> scheme.

Isn't my proposal what you have in mind? Both
/home/albinus/src/emacs/lisp@@/ef7a18a071/display-line-numbers.el and
/home/albinus/src/emacs@@/ef7a18a071/lisp/display-line-numbers.el would
point to the same revision ef7a18a071 of lisp/display-line-numbers.el.

Best regards, Michael.



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

* Re: git-handler.el
  2017-08-13  9:14                 ` git-handler.el Michael Albinus
@ 2017-08-13 10:08                   ` Yuri Khan
  2017-08-13 14:31                     ` git-handler.el Eli Zaretskii
  2017-08-14 16:40                     ` git-handler.el Michael Albinus
  0 siblings, 2 replies; 136+ messages in thread
From: Yuri Khan @ 2017-08-13 10:08 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Jonas Bernoulli, Dmitry Gutov, Emacs developers

On Sun, Aug 13, 2017 at 4:14 PM, Michael Albinus <michael.albinus@gmx.de> wrote:

>> As a Git user, I frequently want to
>> browse the whole repository as of a specific revision. Use case: “Two
>> months ago, function foo was changed to call function bar. How did bar
>> look at that point?”
>
> You know, that function bar is declared in file baz.el.

Not necessarily. It is today, but two months ago it could have resided
in any of baz.el, quux.el or xyzzy.el.

> So you could
> inspect the revisions of baz.el by looking into directory
> "/home/albinus/src/emacs/lisp/baz.el@@/master" (given you're interested
> in branch master).

In the use case being discussed, I’m not interested in master. Or,
more specifically, not in its current position, and not in the whole
set of its commits that modify baz.el. I am interested in one specific
commit, say ef7a18a071, that does not modify baz.el. Presented by a
list of commits modifying baz.el, I will literally be unable to find
the revision I’m interested in. (No, making a note of the commit
timestamp and bisecting the other commit list for that will not work.
In Git, chronological order is not guaranteed within a branch.)

(Because Emacs is all about custom and idiosyncratic workflows[1], here’s mine:

* I never use find-file interactively except to create a new file or
jump to a directory on a remote server (via Tramp).
* I navigate from a file to its containing directory or from a
directory to its parent using dired-jump, and from a directory to a
file using dired-find-file.

[1]: https://xkcd.com/1172/ )

>> Also, in a dired buffer showing src/emacs/lisp@@/ef7a18a071, will
>> dired-jump jump to src/emacs@@/ef7a18a071?
>
> Could be, yes. Likely, it needs some adaption of dired-jump (it uses
> file-name-directory for traversing the directory path), but why not.



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

* Re: git-handler.el
  2017-08-13 10:08                   ` git-handler.el Yuri Khan
@ 2017-08-13 14:31                     ` Eli Zaretskii
  2017-08-13 15:08                       ` git-handler.el Yuri Khan
  2017-08-14 16:40                     ` git-handler.el Michael Albinus
  1 sibling, 1 reply; 136+ messages in thread
From: Eli Zaretskii @ 2017-08-13 14:31 UTC (permalink / raw)
  To: Yuri Khan; +Cc: emacs-devel, jonas, michael.albinus, dgutov

> From: Yuri Khan <yuri.v.khan@gmail.com>
> Date: Sun, 13 Aug 2017 17:08:35 +0700
> Cc: Jonas Bernoulli <jonas@bernoul.li>, Dmitry Gutov <dgutov@yandex.ru>,
> 	Emacs developers <emacs-devel@gnu.org>
> 
> On Sun, Aug 13, 2017 at 4:14 PM, Michael Albinus <michael.albinus@gmx.de> wrote:
> 
> >> As a Git user, I frequently want to
> >> browse the whole repository as of a specific revision. Use case: “Two
> >> months ago, function foo was changed to call function bar. How did bar
> >> look at that point?”
> >
> > You know, that function bar is declared in file baz.el.
> 
> Not necessarily. It is today, but two months ago it could have resided
> in any of baz.el, quux.el or xyzzy.el.

If you don't know its file, how will you find it?

> > So you could
> > inspect the revisions of baz.el by looking into directory
> > "/home/albinus/src/emacs/lisp/baz.el@@/master" (given you're interested
> > in branch master).
> 
> In the use case being discussed, I’m not interested in master. Or,
> more specifically, not in its current position, and not in the whole
> set of its commits that modify baz.el. I am interested in one specific
> commit, say ef7a18a071, that does not modify baz.el.

Then you should look inside src/emacs/lisp@@/ef7a18a071, I think.  Why
is that a problem?

> * I never use find-file interactively except to create a new file or
> jump to a directory on a remote server (via Tramp).
> * I navigate from a file to its containing directory or from a
> directory to its parent using dired-jump, and from a directory to a
> file using dired-find-file.

This just means Dired will need to be taught about these special file
names.



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

* Re: git-handler.el
  2017-08-13 14:31                     ` git-handler.el Eli Zaretskii
@ 2017-08-13 15:08                       ` Yuri Khan
  2017-08-13 15:26                         ` git-handler.el Eli Zaretskii
  2017-08-14 16:42                         ` git-handler.el Michael Albinus
  0 siblings, 2 replies; 136+ messages in thread
From: Yuri Khan @ 2017-08-13 15:08 UTC (permalink / raw)
  To: Eli Zaretskii
  Cc: Emacs developers, Jonas Bernoulli, Michael Albinus, Dmitry Gutov

On Sun, Aug 13, 2017 at 9:31 PM, Eli Zaretskii <eliz@gnu.org> wrote:

>> >> As a Git user, I frequently want to
>> >> browse the whole repository as of a specific revision. Use case: “Two
>> >> months ago, function foo was changed to call function bar. How did bar
>> >> look at that point?”
>> >
>> > You know, that function bar is declared in file baz.el.
>>
>> Not necessarily. It is today, but two months ago it could have resided
>> in any of baz.el, quux.el or xyzzy.el.
>
> If you don't know its file, how will you find it?

By trial and error. Find the directory at revision, L1: choose the
next most probable file, look in there. Repeat from L1 until found.

>> > So you could
>> > inspect the revisions of baz.el by looking into directory
>> > "/home/albinus/src/emacs/lisp/baz.el@@/master" (given you're interested
>> > in branch master).
>>
>> In the use case being discussed, I’m not interested in master. Or,
>> more specifically, not in its current position, and not in the whole
>> set of its commits that modify baz.el. I am interested in one specific
>> commit, say ef7a18a071, that does not modify baz.el.
>
> Then you should look inside src/emacs/lisp@@/ef7a18a071, I think.  Why
> is that a problem?

I got the impression that, in the proposed scheme, <path>@@<revision>
only shows files under <path> that are modified by the commit
<revision>. There is no problem for me if it shows *all* files under
<path> that existed at that <revision>.



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

* Re: git-handler.el
  2017-08-13 15:08                       ` git-handler.el Yuri Khan
@ 2017-08-13 15:26                         ` Eli Zaretskii
  2017-08-14 16:42                         ` git-handler.el Michael Albinus
  1 sibling, 0 replies; 136+ messages in thread
From: Eli Zaretskii @ 2017-08-13 15:26 UTC (permalink / raw)
  To: Yuri Khan; +Cc: emacs-devel, jonas, michael.albinus, dgutov

> From: Yuri Khan <yuri.v.khan@gmail.com>
> Date: Sun, 13 Aug 2017 22:08:55 +0700
> Cc: Michael Albinus <michael.albinus@gmx.de>, Jonas Bernoulli <jonas@bernoul.li>, 
> 	Dmitry Gutov <dgutov@yandex.ru>, Emacs developers <emacs-devel@gnu.org>
> 
> >> Not necessarily. It is today, but two months ago it could have resided
> >> in any of baz.el, quux.el or xyzzy.el.
> >
> > If you don't know its file, how will you find it?
> 
> By trial and error. Find the directory at revision, L1: choose the
> next most probable file, look in there. Repeat from L1 until found.

Then going to a directory @VERSION should be fine for your use case,
AFAIU.

> >> In the use case being discussed, I’m not interested in master. Or,
> >> more specifically, not in its current position, and not in the whole
> >> set of its commits that modify baz.el. I am interested in one specific
> >> commit, say ef7a18a071, that does not modify baz.el.
> >
> > Then you should look inside src/emacs/lisp@@/ef7a18a071, I think.  Why
> > is that a problem?
> 
> I got the impression that, in the proposed scheme, <path>@@<revision>
> only shows files under <path> that are modified by the commit
> <revision>. There is no problem for me if it shows *all* files under
> <path> that existed at that <revision>.

I think it's the latter (for a VCS where a version marks the entire
tree), but maybe I misunderstood what Michael meant.



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

* Re: git-handler.el
  2017-08-13 10:08                   ` git-handler.el Yuri Khan
  2017-08-13 14:31                     ` git-handler.el Eli Zaretskii
@ 2017-08-14 16:40                     ` Michael Albinus
  1 sibling, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-08-14 16:40 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Jonas Bernoulli, Dmitry Gutov, Emacs developers

Yuri Khan <yuri.v.khan@gmail.com> writes:

> On Sun, Aug 13, 2017 at 4:14 PM, Michael Albinus <michael.albinus@gmx.de> wrote:
>
>>> As a Git user, I frequently want to
>>> browse the whole repository as of a specific revision. Use case: “Two
>>> months ago, function foo was changed to call function bar. How did bar
>>> look at that point?”
>>
>> You know, that function bar is declared in file baz.el.
>
> Not necessarily. It is today, but two months ago it could have resided
> in any of baz.el, quux.el or xyzzy.el.

I fear this cannot be followed easily with file name handlers. As the
feature says, file name handlers work on file level, not on function
level. Even "git log -L :<function>:<file>" does not return results for
other files.

>> So you could
>> inspect the revisions of baz.el by looking into directory
>> "/home/albinus/src/emacs/lisp/baz.el@@/master" (given you're interested
>> in branch master).
>
> In the use case being discussed, I’m not interested in master.

You could always use another branch.

> Or, more specifically, not in its current position, and not in the
> whole set of its commits that modify baz.el. I am interested in one
> specific commit, say ef7a18a071, that does not modify
> baz.el. Presented by a list of commits modifying baz.el, I will
> literally be unable to find the revision I’m interested in. (No,
> making a note of the commit timestamp and bisecting the other commit
> list for that will not work.  In Git, chronological order is not
> guaranteed within a branch.)

So you could go to "/home/albinus/src/emacs@@/ef7a18a071", as said
somewhere else. You will see all files which have been changed by this
commit.

> (Because Emacs is all about custom and idiosyncratic workflows[1],
> here’s mine:
>
> * I never use find-file interactively except to create a new file or
> jump to a directory on a remote server (via Tramp).
> * I navigate from a file to its containing directory or from a
> directory to its parent using dired-jump, and from a directory to a
> file using dired-find-file.

I haven't played with this, but it might be possible to support this
workflow. And yes, such revisioned file names shall work also remotely,
for Tramp files.

> [1]: https://xkcd.com/1172/ )

:-)

I like this workflow there. Maybe we find a way to reenable it.

Best regards, Michael.



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

* Re: git-handler.el
  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                         ` Michael Albinus
  1 sibling, 0 replies; 136+ messages in thread
From: Michael Albinus @ 2017-08-14 16:42 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Eli Zaretskii, Jonas Bernoulli, Emacs developers, Dmitry Gutov

Yuri Khan <yuri.v.khan@gmail.com> writes:

>> Then you should look inside src/emacs/lisp@@/ef7a18a071, I think.  Why
>> is that a problem?
>
> I got the impression that, in the proposed scheme, <path>@@<revision>
> only shows files under <path> that are modified by the commit
> <revision>. There is no problem for me if it shows *all* files under
> <path> that existed at that <revision>.

Both approaches make sense. Maybe we shall spend an option to control
what is shown.

Best regards, Michael.



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

end of thread, other threads:[~2017-08-14 16:42 UTC | newest]

Thread overview: 136+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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           ` git-handler.el Jonas Bernoulli
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

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.