unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Introducing 'unrecognized and 'ignored
@ 2007-12-28 17:45 Eric S. Raymond
  2007-12-28 23:01 ` Dan Nicolaescu
  2007-12-29  2:48 ` Alexandru Harsanyi
  0 siblings, 2 replies; 70+ messages in thread
From: Eric S. Raymond @ 2007-12-28 17:45 UTC (permalink / raw)
  To: emacs-devel

I've spent the last couple of hours looking at this issue.
A reminder: the payoff for getting it right would be another 
significant speedup in (vc-dired-hook), which would translate to 
a faster C-x v d display.

Remarkably, it looks as if the code does not actually depend
in any significant way on the nil return from (vc-state file) meaning
that FILE is unregistered.  Tests that might have used this method
use vc-backend instead.  So introducing an 'unregistered state 
shouldn't actually break anything.

Alex Harsanyi: A cvs-ignorable-file-p would actually be useful, if
you're still interested. Under later systems it's faster to get this 
by doing a bit of estra parsing of rge status report.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

The kind of charity you can force out of people nourishes about as much as
the kind of love you can buy --- and spreads even nastier diseases.

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

* Re: Introducing 'unrecognized and 'ignored
  2007-12-28 17:45 Introducing 'unrecognized and 'ignored Eric S. Raymond
@ 2007-12-28 23:01 ` Dan Nicolaescu
  2007-12-29  2:48 ` Alexandru Harsanyi
  1 sibling, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2007-12-28 23:01 UTC (permalink / raw)
  To: Eric S. Raymond; +Cc: emacs-devel

"Eric S. Raymond" <esr@snark.thyrsus.com> writes:

  > I've spent the last couple of hours looking at this issue.
  > A reminder: the payoff for getting it right would be another 
  > significant speedup in (vc-dired-hook), which would translate to 
  > a faster C-x v d display.

Thanks for dealing with this!

  > Remarkably, it looks as if the code does not actually depend
  > in any significant way on the nil return from (vc-state file) meaning
  > that FILE is unregistered.  Tests that might have used this method
  > use vc-backend instead.  So introducing an 'unregistered state 
  > shouldn't actually break anything.

vc-hg-registered depended on vc-hg-state returning nil for unregistered
and ignored files. I fixed it.

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

* Re: Introducing 'unrecognized and 'ignored
  2007-12-28 17:45 Introducing 'unrecognized and 'ignored Eric S. Raymond
  2007-12-28 23:01 ` Dan Nicolaescu
@ 2007-12-29  2:48 ` Alexandru Harsanyi
  2007-12-29 11:45   ` Eric S. Raymond
  1 sibling, 1 reply; 70+ messages in thread
From: Alexandru Harsanyi @ 2007-12-29  2:48 UTC (permalink / raw)
  To: Eric S. Raymond; +Cc: emacs-devel


On 29 Dec 2007, at 2:45 AM, Eric S. Raymond wrote:

> I've spent the last couple of hours looking at this issue.
> A reminder: the payoff for getting it right would be another
> significant speedup in (vc-dired-hook), which would translate to
> a faster C-x v d display.
>
> Remarkably, it looks as if the code does not actually depend
> in any significant way on the nil return from (vc-state file) meaning
> that FILE is unregistered.  Tests that might have used this method
> use vc-backend instead.  So introducing an 'unregistered state
> shouldn't actually break anything.
>
> Alex Harsanyi: A cvs-ignorable-file-p would actually be useful, if
> you're still interested. Under later systems it's faster to get this
> by doing a bit of estra parsing of rge status report.
>

I had a look at the problem last night and wrote the code to load a  
cvsignore file and produce a regexp to match the ignored files,  
however the whole mechanism required by `vc-BACKEND-ignorable-file-p'  
is quite tricky to implement corectly (in a way that both Emacs and  
the backend agree 100% on what files are ignored).  Here are two of  
the problems I found when I looked at an implementation for CVS:

  * CVS will ignore a file only if it is unregistered.  For  
example .o files are ignored from a CVS status listing, but if an .o  
file is registered than that file will show up in the listing.  This  
requires checking whether a file is registered or not, a thing which  
we try to avoid.

  * There's a 'per-repository' cvsignore file at $CVSROOT/CVSROOT/ 
cvsignore which Emacs cannot access directly for remote repositories.


With extended vc-state states I don't think there is a need for `vc- 
ignorable-file-p' at all:  `vc-BACKEND-dir-state' should set the  
state for each registered file and for files it can register.  `vc- 
dired-hook' can than simply look for the vc-state property and if it  
is missing it can assume that the file is ignored.

Best Regards,
Alex.

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

* Re: Introducing 'unrecognized and 'ignored
  2007-12-29  2:48 ` Alexandru Harsanyi
@ 2007-12-29 11:45   ` Eric S. Raymond
  2008-01-02  2:02     ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2007-12-29 11:45 UTC (permalink / raw)
  To: Alexandru Harsanyi; +Cc: Eric S. Raymond, emacs-devel

Alexandru Harsanyi <harsanyi@mac.com>:
> I had a look at the problem last night and wrote the code to load a 
> cvsignore file and produce a regexp to match the ignored files, however the 
> whole mechanism required by `vc-BACKEND-ignorable-file-p' is quite tricky 
> to implement corectly (in a way that both Emacs and the backend agree 100% 
> on what files are ignored).  Here are two of the problems I found when I 
> looked at an implementation for CVS:
>
>  * CVS will ignore a file only if it is unregistered.  For example .o files 
> are ignored from a CVS status listing, but if an .o file is registered than 
> that file will show up in the listing.

That is actually sensible behavior.  From CVS, surprisingly so :-)

>                                      This requires checking whether a 
> file is registered or not, a thing which we try to avoid.

Not necessarily.  See below.

>  * There's a 'per-repository' cvsignore file at $CVSROOT/CVSROOT/cvsignore 
> which Emacs cannot access directly for remote repositories.

That, on the other hand, is kind of a showstopper.

> With extended vc-state states I don't think there is a need for 
> `vc-ignorable-file-p' at all:  `vc-BACKEND-dir-state' should set the state 
> for each registered file and for files it can register.  `vc-dired-hook' 
> can than simply look for the vc-state property and if it is missing it can 
> assume that the file is ignored.

Thinking about it, you're right.  We should consider that what
dir-state does is update the state properties for as many files as it
can, which means we can call (vc-state) on every file in the dired
listing and only get expensive operations for the ones dir-state
didn't report a status on.

Then the problem of speeding up vc-dired-hook will reduce to a simpler
one -- how to make the individual directory-status commands in each
VCS return information for as many files as possible? Ideally, we want
them to return status on *all* files beneath the current directory.

Some VCSes will make this easy. Mercurial, for example, has hg status -A,
which is documented to return status flags for all files.  Now that we 
have 'unregistered and 'ignored, this means that the individual
vc-state calls will never have to do their own check.  Mercurial is
going to be really fast.

Some make it hard; CVS, for example.  I don't know any way to make its
dir-state set 'ignored files, and it will set 'unregistered only if the
stay-local-p test fails and dir-state goes down the path that parses
vc-status output (something we want to avoid because it's dog-slow).

Most are in between.  There is probably a way to beat Subversion into
reporting status on all files, but I don't know what it is yet.

I'll tackle this for Subversion -- would you look at making the CVS
dir-state better?  The goal is to get it to somehow set 'ignored 
and 'unregistered whenever appropriate.

There is also a minor can of worms near 'added.  It's not really a
fully-supported state yet.  It should be.  And 'removed, too.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2007-12-29 11:45   ` Eric S. Raymond
@ 2008-01-02  2:02     ` Stefan Monnier
  2008-01-02  2:19       ` Eric S. Raymond
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-02  2:02 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

> Then the problem of speeding up vc-dired-hook will reduce to a simpler
> one -- how to make the individual directory-status commands in each
> VCS return information for as many files as possible? Ideally, we want
> them to return status on *all* files beneath the current directory.

I disagree.  VC should not do any tree traversal itself.  It shouldn't
"call the backend to do tree traversal to fill some data and then do
tree traversal again hoping to only hit files that were already found".
Instead, the `dir-state' function should somehow return the list of
files found and VC-dired should only display those (at first).

By default, I'd suggest that the dir-state function only returns the
"interesting files" (the ones that are not just uptodate or ignored).

I.e. just present the result of "cvs -n update" rather than try to do
something more clever.  The user may want to request the output of "cvs
status" as well, although in any non-trivial project, this is too long
to be of any use, so it needs to be applicable to just a single subdir
(or even a single file).


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  2:02     ` Stefan Monnier
@ 2008-01-02  2:19       ` Eric S. Raymond
  2008-01-02  4:16         ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02  2:19 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> > Then the problem of speeding up vc-dired-hook will reduce to a simpler
> > one -- how to make the individual directory-status commands in each
> > VCS return information for as many files as possible? Ideally, we want
> > them to return status on *all* files beneath the current directory.
> 
> I disagree.  VC should not do any tree traversal itself. 

There's no way to avoid this.

We have a choice between two different sets of circumstances under
which tree traversal will be needed:

1) We can take svn and later systems as a model.  Their status commands
recurse naturally, so none of those backend status commands has to traverse 
trees itself.  If we do this, the CVS and MCVS backend status commands have
to do tree traversal to match the behavior of the SVN and later ones.

2) We can take CVS as the model.  In that case we have to tell the backend 
status commands for later VCSes not to recurse -- and somewhere in the
upper-level calling logic for all backends, *it* has to recurse down
trees.

Right now VC is doing the first alternative.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  2:19       ` Eric S. Raymond
@ 2008-01-02  4:16         ` Stefan Monnier
  2008-01-02  4:45           ` Dan Nicolaescu
  2008-01-02 11:46           ` Eric S. Raymond
  0 siblings, 2 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-02  4:16 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

>> > Then the problem of speeding up vc-dired-hook will reduce to a simpler
>> > one -- how to make the individual directory-status commands in each
>> > VCS return information for as many files as possible? Ideally, we want
>> > them to return status on *all* files beneath the current directory.
>> 
>> I disagree.  VC should not do any tree traversal itself.

> There's no way to avoid this.

Of course there is.

> We have a choice between two different sets of circumstances under
> which tree traversal will be needed:

> 1) We can take svn and later systems as a model.  Their status commands
> recurse naturally, so none of those backend status commands has to traverse 
> trees itself.  If we do this, the CVS and MCVS backend status commands have
> to do tree traversal to match the behavior of the SVN and later ones.

I don't understand: CVS's status command recurses just fine and so does
MetaCVS's (not that it matters since this backend can be dropped any day
AFAICT).

The only backends which might need to do tree traversal manually (AFAIK)
are RCS and SCCS, of course, but I think it's fine for them to do the
traversal by hand in the backend code.

> Right now VC is doing the first alternative.

Maybe we're not talking about the same "tree traversal".  But AFAICT,
vc-dired uses `ls' somewhere, where I think it should neither use `ls'
nor `directory-files' nor anything equivalent in the generic code.
That would also allow us to get rid of vc-directory-exclusion-list.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  4:16         ` Stefan Monnier
@ 2008-01-02  4:45           ` Dan Nicolaescu
  2008-01-02 11:50             ` Eric S. Raymond
  2008-01-03  9:50             ` Richard Stallman
  2008-01-02 11:46           ` Eric S. Raymond
  1 sibling, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-02  4:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: esr, Eric S. Raymond, Alexandru Harsanyi, emacs-devel

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

  > >> > Then the problem of speeding up vc-dired-hook will reduce to a simpler
  > >> > one -- how to make the individual directory-status commands in each
  > >> > VCS return information for as many files as possible? Ideally, we want
  > >> > them to return status on *all* files beneath the current directory.
  > >> 
  > >> I disagree.  VC should not do any tree traversal itself.
  > 
  > > There's no way to avoid this.
  > 
  > Of course there is.
  > 
  > > We have a choice between two different sets of circumstances under
  > > which tree traversal will be needed:
  > 
  > > 1) We can take svn and later systems as a model.  Their status commands
  > > recurse naturally, so none of those backend status commands has to traverse 
  > > trees itself.  If we do this, the CVS and MCVS backend status commands have
  > > to do tree traversal to match the behavior of the SVN and later ones.
  > 
  > I don't understand: CVS's status command recurses just fine and so does
  > MetaCVS's (not that it matters since this backend can be dropped any day
  > AFAICT).
  > 
  > The only backends which might need to do tree traversal manually (AFAIK)
  > are RCS and SCCS, of course, but I think it's fine for them to do the
  > traversal by hand in the backend code.
  > 
  > > Right now VC is doing the first alternative.
  > 
  > Maybe we're not talking about the same "tree traversal".  But AFAICT,
  > vc-dired uses `ls' somewhere, where I think it should neither use `ls'
  > nor `directory-files' nor anything equivalent in the generic code.
  > That would also allow us to get rid of vc-directory-exclusion-list.

I would go one step further: vc-dired should not be based on dired at
all. 99% of the dired key bindings and functionality are not useful in
vc-dired.  Plus that forces use to use the "v" prefix instead of using
simple key bindings.

vc-dired could instead use something based on ewocs. Looking at git.el,
implementing the status display using ewocs looks simple enough.

Sort term using dired is fine because it provide the much needed
multiple file commit functionality. But medium term it should be nuked
and replaced.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  4:16         ` Stefan Monnier
  2008-01-02  4:45           ` Dan Nicolaescu
@ 2008-01-02 11:46           ` Eric S. Raymond
  2008-01-02 20:38             ` Stefan Monnier
  1 sibling, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02 11:46 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> I don't understand: CVS's status command recurses just fine and so does
> MetaCVS's (not that it matters since this backend can be dropped any day
> AFAICT).

Hm.  On inspection, you're right.  Looking at the history, I used to have it
doing tree traversal, then discovered I could get rid of that necessity by 
removing the -l option from the command.

> The only backends which might need to do tree traversal manually (AFAIK)
> are RCS and SCCS, of course, but I think it's fine for them to do the
> traversal by hand in the backend code.

And now they are in fact the only backends doing that.

> Maybe we're not talking about the same "tree traversal".  But AFAICT,
> vc-dired uses `ls' somewhere, where I think it should neither use `ls'
> nor `directory-files' nor anything equivalent in the generic code.

I think this is no longer true.  I looked for directory-files throughout
the VC files; none of the uses are within vc-dired-hook anymore,
except in Arch where they're necessary because of the odd way Arch
represents working-directory state.

So I think we've actually achieved what you want.

> That would also allow us to get rid of vc-directory-exclusion-list.

Not unless we want to wire an equivalent back into speedbar.el.
It's also genuinely needed in vc-next-action.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  4:45           ` Dan Nicolaescu
@ 2008-01-02 11:50             ` Eric S. Raymond
  2008-01-02 17:31               ` Dan Nicolaescu
  2008-01-03  9:50             ` Richard Stallman
  1 sibling, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02 11:50 UTC (permalink / raw)
  To: Dan Nicolaescu
  Cc: Eric S. Raymond, Alexandru Harsanyi, Stefan Monnier, emacs-devel

Dan Nicolaescu <dann@ics.uci.edu>:
> vc-dired could instead use something based on ewocs. Looking at git.el,
> implementing the status display using ewocs looks simple enough.

Where is ewocs?  I don't find anything including that string in the name
in the CVS tree.

> Sort term using dired is fine because it provide the much needed
> multiple file commit functionality. But medium term it should be nuked
> and replaced.

I'm not attached to retaining dired.  But there are other things that need
to happen first.  I still have more speed tuning to do.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 11:50             ` Eric S. Raymond
@ 2008-01-02 17:31               ` Dan Nicolaescu
  0 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-02 17:31 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, Alexandru Harsanyi, Stefan Monnier, emacs-devel

"Eric S. Raymond" <esr@thyrsus.com> writes:

  > Dan Nicolaescu <dann@ics.uci.edu>:
  > > vc-dired could instead use something based on ewocs. Looking at git.el,
  > > implementing the status display using ewocs looks simple enough.
  > 
  > Where is ewocs?  I don't find anything including that string in the name
  > in the CVS tree.

Because you looked for plural "ewocs" :-). See emacs-lisp/ewoc.el

In fact, here's a quick hack that shows how ewocs can be used.

To be minimally usable for vc-dired it would just need code to
mark/unmark files and to return the list of marked entries.


(require 'ewoc)

(defvar my-vc-status-cookie nil "")

(defun my-vc-status-insert-headers ()
  (insert "Repository : Blah Blah\n")
  (insert "Working dir: ~/WORKING DIR\n\n\n"))

(defun my-vc-status-printer (fileentry)
  (insert fileentry))

(defun my-vc-dir-state (dir)
  "The VC dir-state functions should return a list of file+states like this."
  '(("one" . up-to-date) 
    ("two" . added) 
    ("three" . unregistered)))

(defun my-vc-status ()
  "Prototype for a replacement for vc-dired."
  (interactive)
  (let (buffer-read-only)
    (erase-buffer)
    (set (make-local-variable 'my-vc-status-cookie)
         (ewoc-create #'my-vc-status-printer))
    (my-vc-status-insert-headers)
    (dolist (elem (my-vc-dir-state "ignored"))
      (ewoc-enter-last my-vc-status-cookie 
      (format "   %-20s %s" (cdr elem) (car elem)))))
  (goto-char (point-min))
  (setq buffer-read-only t))

  > > Sort term using dired is fine because it provide the much needed
  > > multiple file commit functionality. But medium term it should be nuked
  > > and replaced.
  > 
  > I'm not attached to retaining dired.  But there are other things that need
  > to happen first.  I still have more speed tuning to do.

Understood. Some of the speed tuning would not be needed if not using
dired though...

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 11:46           ` Eric S. Raymond
@ 2008-01-02 20:38             ` Stefan Monnier
  2008-01-02 22:11               ` Eric S. Raymond
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-02 20:38 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

>> Maybe we're not talking about the same "tree traversal".  But AFAICT,
>> vc-dired uses `ls' somewhere, where I think it should neither use `ls'
>> nor `directory-files' nor anything equivalent in the generic code.

> I think this is no longer true.  I looked for directory-files throughout
> the VC files; none of the uses are within vc-dired-hook anymore,

vc-directory calls dired-internal-noselect which does the directory
listing (typically using `ls').

> So I think we've actually achieved what you want.

Not yet.

>> That would also allow us to get rid of vc-directory-exclusion-list.

> Not unless we want to wire an equivalent back into speedbar.el.

That's a good idea in any case: speedbar shouldn't need to rely on VC
for that.

> It's also genuinely needed in vc-next-action.

I don't see it used there.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 20:38             ` Stefan Monnier
@ 2008-01-02 22:11               ` Eric S. Raymond
  2008-01-02 23:06                 ` Stefan Monnier
  2008-01-02 23:13                 ` Dan Nicolaescu
  0 siblings, 2 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02 22:11 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> vc-directory calls dired-internal-noselect which does the directory
> listing (typically using `ls').

Oh, so we can only get rid of that by no longer using dired at all.
Right.  That may be a way to go in the future.  Dan's idea of using
ewoc may work well, I'm going to make time to look into it.

> >> That would also allow us to get rid of vc-directory-exclusion-list.
> 
> > Not unless we want to wire an equivalent back into speedbar.el.
> 
> That's a good idea in any case: speedbar shouldn't need to rely on VC
> for that.

But the alternative is for speedbar and all other modes that have to
be VCS-aware to have their own separate lists of special
version-control directories.  This seems wrong to me, violating what
database people call the SPOT (Single Point Of Truth) rule.  

I think it's better to have that list be in vc-hooks where speedbar.el
and other things can see it.  That way they will automatically get
smarter whenever the code that manages VCSes becomes aware of 
another one.

> > It's also genuinely needed in vc-next-action.
> 
> I don't see it used there.

Sorry, seems I misread a grep hit.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 22:11               ` Eric S. Raymond
@ 2008-01-02 23:06                 ` Stefan Monnier
  2008-01-02 23:29                   ` Eric S. Raymond
  2008-01-02 23:13                 ` Dan Nicolaescu
  1 sibling, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-02 23:06 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

>> vc-directory calls dired-internal-noselect which does the directory
>> listing (typically using `ls').

> Oh, so we can only get rid of that by no longer using dired at all.

Right.

> > That's a good idea in any case: speedbar shouldn't need to rely on VC
> > for that.
> But the alternative is for speedbar and all other modes that have to
> be VCS-aware to have their own separate lists of special
> version-control directories.

speedbar doesn't actually want a list of "admin dirs used by VCS".
Instead it wants a list of "directories not to show in speedbar",
e.g. "dirs used for things like meta-data".  VCS are probably the most
common users of meta-data directories, but not the only ones.
E.g. SML/NJ's "CM" subdirectories are others I've had to live with.

> This seems wrong to me, violating what database people call the SPOT
> (Single Point Of Truth) rule.

Just because it's not in VC doesn't mean it can't be put in a single
spot, right?  ;-)


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 22:11               ` Eric S. Raymond
  2008-01-02 23:06                 ` Stefan Monnier
@ 2008-01-02 23:13                 ` Dan Nicolaescu
  2008-01-02 23:33                   ` Eric S. Raymond
  1 sibling, 1 reply; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-02 23:13 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, Alexandru Harsanyi, Stefan Monnier, emacs-devel

"Eric S. Raymond" <esr@thyrsus.com> writes:

  > Stefan Monnier <monnier@iro.umontreal.ca>:
  > > vc-directory calls dired-internal-noselect which does the directory
  > > listing (typically using `ls').
  > 
  > Oh, so we can only get rid of that by no longer using dired at all.
  > Right.  That may be a way to go in the future.  Dan's idea of using
  > ewoc may work well, I'm going to make time to look into it.
  > 
  > > >> That would also allow us to get rid of vc-directory-exclusion-list.
  > > 
  > > > Not unless we want to wire an equivalent back into speedbar.el.
  > > 
  > > That's a good idea in any case: speedbar shouldn't need to rely on VC
  > > for that.
  > 
  > But the alternative is for speedbar and all other modes that have to
  > be VCS-aware to have their own separate lists of special
  > version-control directories.  This seems wrong to me, violating what
  > database people call the SPOT (Single Point Of Truth) rule.  

Unfortunately we have another violation of that:
grep-find-ignored-directories :-(

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 23:06                 ` Stefan Monnier
@ 2008-01-02 23:29                   ` Eric S. Raymond
  2008-01-03 14:30                     ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02 23:29 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> speedbar doesn't actually want a list of "admin dirs used by VCS".
> Instead it wants a list of "directories not to show in speedbar",
> e.g. "dirs used for things like meta-data".  VCS are probably the most
> common users of meta-data directories, but not the only ones.

Right.  If those other classes of metadata directories have elisp packages
that naturally own them, them I think speedbar ought to refer back to those
packages.

> > This seems wrong to me, violating what database people call the SPOT
> > (Single Point Of Truth) rule.
> 
> Just because it's not in VC doesn't mean it can't be put in a single
> spot, right?  ;-)

Certainly not.  But, since VC needs the information anyway, where else
would you put them?
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 23:13                 ` Dan Nicolaescu
@ 2008-01-02 23:33                   ` Eric S. Raymond
  0 siblings, 0 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-02 23:33 UTC (permalink / raw)
  To: Dan Nicolaescu
  Cc: Eric S. Raymond, Alexandru Harsanyi, Stefan Monnier, emacs-devel

Dan Nicolaescu <dann@ics.uci.edu>:
>   > But the alternative is for speedbar and all other modes that have to
>   > be VCS-aware to have their own separate lists of special
>   > version-control directories.  This seems wrong to me, violating what
>   > database people call the SPOT (Single Point Of Truth) rule.  
> 
> Unfortunately we have another violation of that:
> grep-find-ignored-directories :-(

Thanks for the tip; I'll fix it.

Note to Stefan: this fix is a good idea even if we move 
vc-directory-exclusion-list out of vc-hooks.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02  4:45           ` Dan Nicolaescu
  2008-01-02 11:50             ` Eric S. Raymond
@ 2008-01-03  9:50             ` Richard Stallman
  2008-01-03 18:05               ` Dan Nicolaescu
  1 sibling, 1 reply; 70+ messages in thread
From: Richard Stallman @ 2008-01-03  9:50 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, esr, emacs-devel, monnier, harsanyi

    I would go one step further: vc-dired should not be based on dired at
    all. 99% of the dired key bindings and functionality are not useful in
    vc-dired.

Unifying them is a big advantag

There may be reasons to separate them which outweigh the advantage
of unification, but we should see them presented and weigh them
before going in that direction.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-02 23:29                   ` Eric S. Raymond
@ 2008-01-03 14:30                     ` Stefan Monnier
  2008-01-03 17:41                       ` Eric S. Raymond
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-03 14:30 UTC (permalink / raw)
  To: esr; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

>> speedbar doesn't actually want a list of "admin dirs used by VCS".
>> Instead it wants a list of "directories not to show in speedbar",
>> e.g. "dirs used for things like meta-data".  VCS are probably the most
>> common users of meta-data directories, but not the only ones.

> Right.  If those other classes of metadata directories have elisp packages
> that naturally own them, them I think speedbar ought to refer back to those
> packages.

>> > This seems wrong to me, violating what database people call the SPOT
>> > (Single Point Of Truth) rule.
>> 
>> Just because it's not in VC doesn't mean it can't be put in a single
>> spot, right?  ;-)

> Certainly not.  But, since VC needs the information anyway, where else
> would you put them?

VC doesn't really need the info.  It only uses it because of its
original mistake to use dired (and hence `ls').  Once this mistake is
corrected it won't need it any more.

Where else, then?  In simple.el or subr.el or some other global file.
Then VC backends can add to that variable and so can any other
elisp package.  This way speedbar doesn't need to refer to any of
those packages.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-03 14:30                     ` Stefan Monnier
@ 2008-01-03 17:41                       ` Eric S. Raymond
  2008-01-05  5:54                         ` Richard Stallman
  0 siblings, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-03 17:41 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eric S. Raymond, emacs-devel, Alexandru Harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> VC doesn't really need the info.  It only uses it because of its
> original mistake to use dired (and hence `ls').  Once this mistake is
> corrected it won't need it any more.
> 
> Where else, then?  In simple.el or subr.el or some other global file.
> Then VC backends can add to that variable and so can any other
> elisp package.  This way speedbar doesn't need to refer to any of
> those packages.

I'm not opposed to this, but it's conditional on changing VC so it doesn't use
Dired any more.  RMS is opposed to that; I'd like to know why before I
make a decision.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-03  9:50             ` Richard Stallman
@ 2008-01-03 18:05               ` Dan Nicolaescu
  2008-01-03 18:19                 ` Eric S. Raymond
  2008-01-05  5:54                 ` Richard Stallman
  0 siblings, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-03 18:05 UTC (permalink / raw)
  To: rms; +Cc: esr, esr, emacs-devel, monnier, harsanyi

Richard Stallman <rms@gnu.org> writes:

  >     I would go one step further: vc-dired should not be based on dired at
  >     all. 99% of the dired key bindings and functionality are not useful in
  >     vc-dired.
  > 
  > Unifying them is a big advantag
  > 
  > There may be reasons to separate them which outweigh the advantage
  > of unification, but we should see them presented and weigh them
  > before going in that direction.

The disadvantages or using dired: 
 - performance  -- the difference is HUGE
 - clutter - dired has 4 top level menus that are mostly useless in the
            VC context
 - availability of simple key bindings: dired takes most single key
 bindings, forcing vc-dired to use the "v" prefix

 - display flexibility  -- it is much easier to do custom displays as
   needed by VC using ewocs than to retrofit it into dired.  Just look
   at the PCL-CVS display and compare it with vc-dired.

 - future extensibility - VC systems are evolving at a fast pace
   nowadays, being able to easily make changes to accommodate new
   features is very important. 

So IMO, there's no reason to cling onto dired.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-03 18:05               ` Dan Nicolaescu
@ 2008-01-03 18:19                 ` Eric S. Raymond
  2008-01-05  5:54                 ` Richard Stallman
  1 sibling, 0 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-03 18:19 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, harsanyi, emacs-devel, rms, monnier

Dan Nicolaescu <dann@ics.uci.edu>:
> So IMO, there's no reason to cling onto dired.

I think there are some things pushing in the other direction -- 
consistency of interface, mainly.  I really want to hear RMS's reasons
for wanting to retain VC-Dired; it's possible he has some compelling
argument I haven't thought of.

Myself, I'm pretty near neutral on this one and willing to be 
persuaded either way.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-03 17:41                       ` Eric S. Raymond
@ 2008-01-05  5:54                         ` Richard Stallman
  0 siblings, 0 replies; 70+ messages in thread
From: Richard Stallman @ 2008-01-05  5:54 UTC (permalink / raw)
  To: esr; +Cc: esr, harsanyi, monnier, emacs-devel

    I'm not opposed to this, but it's conditional on changing VC so it doesn't use
    Dired any more.  RMS is opposed to that; I'd like to know why before I
    make a decision.

I'm not dead-set against it.  Dired and VC-Dired are similar in general,
so if the implementations are totally different, that would mean
(1) two different implementations of the same thing, and (2) a tendency
for the user interfaces to become incompatible.

It is possible for sufficiently strong reasons to outweigh that one.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-03 18:05               ` Dan Nicolaescu
  2008-01-03 18:19                 ` Eric S. Raymond
@ 2008-01-05  5:54                 ` Richard Stallman
  2008-01-05  9:01                   ` Dan Nicolaescu
  1 sibling, 1 reply; 70+ messages in thread
From: Richard Stallman @ 2008-01-05  5:54 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, esr, emacs-devel, monnier, harsanyi

    The disadvantages or using dired: 

Several of these are not persuasive (at least based on what
you've said so far).

     - performance  -- the difference is HUGE

What is the connection between using dired and this slowdown?

     - clutter - dired has 4 top level menus that are mostly useless in the
		VC context

That is not a real problem.
It is easy for a variant of Dired to override them.

     - availability of simple key bindings: dired takes most single key
     bindings, forcing vc-dired to use the "v" prefix

That is not a real problem.  vc-dired could rebind some Dired keys,
and still preserve most of the advantage of commonality with Dired.

     - future extensibility - VC systems are evolving at a fast pace
       nowadays, being able to easily make changes to accommodate new
       features is very important. 

I see no point paying the price today for a benefit that may only
possibly develop.  I'd rather pay that price if and when there is a
real benefit to be gained.  It won't be more work then than it is
today.

On the other hand, this could be a significant reason:

     - display flexibility  -- it is much easier to do custom displays as
       needed by VC using ewocs than to retrofit it into dired.  Just look
       at the PCL-CVS display and compare it with vc-dired.

If custom displays are needed, that probably requires splitting off.

Are custom displays needed?  What would you want to use them for?

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-05  5:54                 ` Richard Stallman
@ 2008-01-05  9:01                   ` Dan Nicolaescu
  2008-01-05 14:34                     ` Eric S. Raymond
  2008-01-06  8:09                     ` Richard Stallman
  0 siblings, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-05  9:01 UTC (permalink / raw)
  To: rms; +Cc: esr, esr, emacs-devel, monnier, harsanyi

Richard Stallman <rms@gnu.org> writes:

  >     The disadvantages or using dired: 
  > 
  > Several of these are not persuasive (at least based on what
  > you've said so far).
  > 
  >      - performance  -- the difference is HUGE
  > 
  > What is the connection between using dired and this slowdown?

It is much faster to ask the VCS about the status of the files and just
display those results, rather than what it is done today: ask dired
about all the files in a directory and the ask the VCS about the
status.

  >      - future extensibility - VC systems are evolving at a fast pace
  >        nowadays, being able to easily make changes to accommodate new
  >        features is very important. 
  > 
  > I see no point paying the price today for a benefit that may only
  > possibly develop.  I'd rather pay that price if and when there is a
  > real benefit to be gained.  It won't be more work then than it is
  > today.

It would be, tweaking the dired display is much harder than implementing
a better one from scratch using ewocs. Compare the PCL-CVS display with
vc-dired, IMHO it looks better.

  > On the other hand, this could be a significant reason:
  > 
  >      - display flexibility  -- it is much easier to do custom displays as
  >        needed by VC using ewocs than to retrofit it into dired.  Just look
  >        at the PCL-CVS display and compare it with vc-dired.
  > 
  > If custom displays are needed, that probably requires splitting off.
  > 
  > Are custom displays needed?  What would you want to use them for?

I believe so. One use for displaying no-file related information:
repository name, branch name, the command that is being executed (all
done by PCL-CVS). 

In the future we might want to add some widgets to select the branch to
display. Or to the repository to connect to. Maybe display a short
version of the logs for the last commits in the repository for the files
that need merging. 

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-05  9:01                   ` Dan Nicolaescu
@ 2008-01-05 14:34                     ` Eric S. Raymond
  2008-01-05 22:25                       ` Stefan Monnier
  2008-01-06 10:37                       ` Dan Nicolaescu
  2008-01-06  8:09                     ` Richard Stallman
  1 sibling, 2 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-05 14:34 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, harsanyi, emacs-devel, rms, monnier

Dan Nicolaescu <dann@ics.uci.edu>:
>   > Are custom displays needed?  What would you want to use them for?
> 
> I believe so. One use for displaying no-file related information:
> repository name, branch name, the command that is being executed (all
> done by PCL-CVS). 
> 
> In the future we might want to add some widgets to select the branch to
> display. Or to the repository to connect to. Maybe display a short
> version of the logs for the last commits in the repository for the files
> that need merging. 

Dan, there are parts of the VC design about which I feel some
territoriality, but this is absolutely not one of them. The
performance of the VC-Dired code is not where I want it to be, your
arguments seem sound, and you seem well motivated to do a good job.
If you think you can rip VC-Dired out and replace it with a better and
faster ewoc-based display layer, you may do so with my blessing and
support.

I say this partly because the code structure should make this experiment
easy to back out if it fails.  But I'm not expecting it to.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-05 14:34                     ` Eric S. Raymond
@ 2008-01-05 22:25                       ` Stefan Monnier
  2008-01-06 10:37                       ` Dan Nicolaescu
  1 sibling, 0 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-05 22:25 UTC (permalink / raw)
  To: esr; +Cc: esr, Dan Nicolaescu, emacs-devel, rms, harsanyi

> Dan, there are parts of the VC design about which I feel some
> territoriality, but this is absolutely not one of them. The
> performance of the VC-Dired code is not where I want it to be, your
> arguments seem sound, and you seem well motivated to do a good job.
> If you think you can rip VC-Dired out and replace it with a better and
> faster ewoc-based display layer, you may do so with my blessing and
> support.

Note that there's a middle-way as well: use dired-mode, but fill the
buffer manually from the list of files returned by the backend commands
(probably using code from ls-lisp.el to properly format each lines), so
we don't run `ls' or directory-files at all, but still preserve
everything else.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-05  9:01                   ` Dan Nicolaescu
  2008-01-05 14:34                     ` Eric S. Raymond
@ 2008-01-06  8:09                     ` Richard Stallman
  1 sibling, 0 replies; 70+ messages in thread
From: Richard Stallman @ 2008-01-06  8:09 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, esr, emacs-devel, monnier, harsanyi

      >      - performance  -- the difference is HUGE
      > 
      > What is the connection between using dired and this slowdown?

    It is much faster to ask the VCS about the status of the files and just
    display those results, rather than what it is done today: ask dired
    about all the files in a directory and the ask the VCS about the
    status.

If you don't want VC dired to show non-VCS-managed files, it could
initialize the buffer contents based on the VCS output alone, and that
would get the same speedup.

So I think that speedup is not a factor in dciding whether to
disconnect this from Dired.

I think we concluded that we want to offer the user the option
to show or not show the non-VCS-managed files.

    I believe so. One use for displaying no-file related information:
    repository name, branch name, the command that is being executed (all
    done by PCL-CVS). 

    In the future we might want to add some widgets to select the branch to
    display. Or to the repository to connect to.

Those sound like useful features.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-05 14:34                     ` Eric S. Raymond
  2008-01-05 22:25                       ` Stefan Monnier
@ 2008-01-06 10:37                       ` Dan Nicolaescu
  2008-01-06 15:57                         ` Eric S. Raymond
  2008-01-06 20:00                         ` Tom Tromey
  1 sibling, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-06 10:37 UTC (permalink / raw)
  To: esr; +Cc: harsanyi, emacs-devel, rms, monnier

"Eric S. Raymond" <esr@thyrsus.com> writes:

  > Dan Nicolaescu <dann@ics.uci.edu>:
  > >   > Are custom displays needed?  What would you want to use them for?
  > > 
  > > I believe so. One use for displaying no-file related information:
  > > repository name, branch name, the command that is being executed (all
  > > done by PCL-CVS). 
  > > 
  > > In the future we might want to add some widgets to select the branch to
  > > display. Or to the repository to connect to. Maybe display a short
  > > version of the logs for the last commits in the repository for the files
  > > that need merging. 
  > 
  > Dan, there are parts of the VC design about which I feel some
  > territoriality, but this is absolutely not one of them. The
  > performance of the VC-Dired code is not where I want it to be, your
  > arguments seem sound, and you seem well motivated to do a good job.
  > If you think you can rip VC-Dired out and replace it with a better and
  > faster ewoc-based display layer, you may do so with my blessing and
  > support.
  > 
  > I say this partly because the code structure should make this experiment
  > easy to back out if it fails.  But I'm not expecting it to.

I checked in some code to do that. I whipped it out quickly, so it's not
complete in any way. It provides a M-x vc-status command which is the
replacement for vc-dired. 

It can only be used with Mercurial for now.

You can mark/unmark files, and vc-deduce-fileset knows about them. So
you can run C-x v commands in the *vc status* buffer and they will
take into consideration the selected files. (I only tested vc-diff).

As you see the code is very simple. Adding faces, more key bindings and
more fancy display should be straight forward.

Now, I cannot lead this development, I don't have the time to do it at
the moment.
But I am happy to help further.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 10:37                       ` Dan Nicolaescu
@ 2008-01-06 15:57                         ` Eric S. Raymond
  2008-01-18 23:31                           ` Dan Nicolaescu
  2008-01-06 20:00                         ` Tom Tromey
  1 sibling, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-06 15:57 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: harsanyi, emacs-devel, rms, monnier

Dan Nicolaescu <dann@ics.uci.edu>:
> Now, I cannot lead this development, I don't have the time to do it at
> the moment.
> But I am happy to help further.

Noted.  I'll carve out some time later today or tomorrow to look at it.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 10:37                       ` Dan Nicolaescu
  2008-01-06 15:57                         ` Eric S. Raymond
@ 2008-01-06 20:00                         ` Tom Tromey
  2008-01-06 21:03                           ` Stefan Monnier
                                             ` (2 more replies)
  1 sibling, 3 replies; 70+ messages in thread
From: Tom Tromey @ 2008-01-06 20:00 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, emacs-devel, rms, monnier, harsanyi

>>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:

Dan> I checked in some code to do that. I whipped it out quickly, so it's not
Dan> complete in any way. It provides a M-x vc-status command which is the
Dan> replacement for vc-dired. 

Dan> It can only be used with Mercurial for now.

Appended is a patch to make it work with svn.  This patch is kind of a
hack in that, if vc-status ever wants to support "non-terse" mode,
then the function will have to be rewritten (since "svn status" and
"svn status -v" have different formats).

I don't understand how the 'dir' argument works with the existing
vc-hg-dir-status.  The argument is never used in the function.  When I
tried vc-status on a mercurial working directory, I got results for
the whole tree, not the particular subdirectory I requested, which is
also weird.

The resulting buffer is always called *vc-status*, which is
unfriendly.  Perhaps it should be named after the requested directory.

I think it would be best to make vc-status work asynchronously from the
very beginning.  That is what pcl-cvs and psvn do, and it is nicer to
use on larger trees.  I think this is important to do first because it
is simpler to redesign the back end hooks now, if needed.

Tom

2008-01-06  Tom Tromey  <tromey@redhat.com>

	* vc-svn.el (vc-svn-dir-status): New function.

*** vc-svn.el	02 Jan 2008 12:34:31 -0700	1.59
--- vc-svn.el	06 Jan 2008 12:39:14 -0700	
***************
*** 1,6 ****
  ;;; vc-svn.el --- non-resident support for Subversion version-control
  
! ;; Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
  
  ;; Author:      FSF (see vc.el for full credits)
  ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
--- 1,6 ----
  ;;; vc-svn.el --- non-resident support for Subversion version-control
  
! ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
  
  ;; Author:      FSF (see vc.el for full credits)
  ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
***************
*** 157,162 ****
--- 157,185 ----
        (vc-svn-command t 0 nil "status" (if localp "-v" "-u"))
        (vc-svn-parse-status))))
  
+ (defun vc-svn-dir-status (dir)
+   "Return a list of conses (FILE . STATE) for DIR."
+   (with-temp-buffer
+     (let ((default-directory (file-name-as-directory dir))
+ 	  (state-map '((?A . added)
+ 		       (?C . edited)
+ 		       (?D . removed)
+ 		       (?I . ignored)
+ 		       (?M . edited)
+ 		       (?R . removed)
+ 		       (?? . unregistered)
+ 		       ;; This is what vc-svn-parse-status does.
+ 		       (?~ . edited)))
+ 	  result)
+       (vc-svn-command t 0 nil "status")
+       (goto-char (point-min))
+       (while (re-search-forward "^\\(.\\)..... \\(.*\\)$" nil t)
+ 	(let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
+ 	      (filename (match-string 2)))
+ 	  (when state
+ 	    (setq result (cons (cons filename state) result)))))
+       result)))
+ 
  (defun vc-svn-working-revision (file)
    "SVN-specific version of `vc-working-revision'."
    ;; There is no need to consult RCS headers under SVN, because we

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 20:00                         ` Tom Tromey
@ 2008-01-06 21:03                           ` Stefan Monnier
  2008-01-07  2:59                             ` Dan Nicolaescu
  2008-01-07  3:22                           ` Dan Nicolaescu
  2008-01-18 23:46                           ` Introducing 'unrecognized and 'ignored Dan Nicolaescu
  2 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-06 21:03 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, Dan Nicolaescu, rms, emacs-devel

> Appended is a patch to make it work with svn.  This patch is kind of a
> hack in that, if vc-status ever wants to support "non-terse" mode,
> then the function will have to be rewritten (since "svn status" and
> "svn status -v" have different formats).

If we introduce a new non-dired thingy, I suggest we don't even try to
provide a non-terse mode.  There are so many more important features to
add that we may as well decide from the get go that we'll never get to
that one.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 21:03                           ` Stefan Monnier
@ 2008-01-07  2:59                             ` Dan Nicolaescu
  2008-01-07  3:26                               ` Eric S. Raymond
  0 siblings, 1 reply; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-07  2:59 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Tom Tromey, esr, emacs-devel, rms, harsanyi

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

  > > Appended is a patch to make it work with svn.  This patch is kind of a
  > > hack in that, if vc-status ever wants to support "non-terse" mode,
  > > then the function will have to be rewritten (since "svn status" and
  > > "svn status -v" have different formats).
  > 
  > If we introduce a new non-dired thingy, I suggest we don't even try to
  > provide a non-terse mode.  There are so many more important features to
  > add that we may as well decide from the get go that we'll never get to
  > that one.

100% agreement.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:22                           ` Dan Nicolaescu
@ 2008-01-07  3:03                             ` Tom Tromey
  2008-01-07  4:01                               ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Tom Tromey @ 2008-01-07  3:03 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, harsanyi, rms, monnier, emacs-devel

>>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:

Dan> No opinion here. PCL-CVS calls it *cvs*, and it does not seem like a big
Dan> issue when using it.

FWIW, pcl-cvs isn't super friendly here, but it does make numbered
buffers when you have more than one.

Tom

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 20:00                         ` Tom Tromey
  2008-01-06 21:03                           ` Stefan Monnier
@ 2008-01-07  3:22                           ` Dan Nicolaescu
  2008-01-07  3:03                             ` Tom Tromey
  2008-01-18 23:46                           ` Introducing 'unrecognized and 'ignored Dan Nicolaescu
  2 siblings, 1 reply; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-07  3:22 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, rms, monnier, emacs-devel

Tom Tromey <tromey@redhat.com> writes:

  > I don't understand how the 'dir' argument works with the existing
  > vc-hg-dir-status.  The argument is never used in the function.  When I
  > tried vc-status on a mercurial working directory, I got results for
  > the whole tree, not the particular subdirectory I requested, which is
  > also weird.

It's a bug in vc-hg-dir-status (and in vc-hg-dir-state). I fixed it.
Thanks!

  > The resulting buffer is always called *vc-status*, which is
  > unfriendly.  Perhaps it should be named after the requested directory.

No opinion here. PCL-CVS calls it *cvs*, and it does not seem like a big
issue when using it.

  > I think it would be best to make vc-status work asynchronously from the
  > very beginning.  That is what pcl-cvs and psvn do, and it is nicer to
  > use on larger trees.  I think this is important to do first because it
  > is simpler to redesign the back end hooks now, if needed.

Good idea. Not sure what is the best way to do this. Feel free to change
it.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  2:59                             ` Dan Nicolaescu
@ 2008-01-07  3:26                               ` Eric S. Raymond
  2008-01-07  3:36                                 ` Dan Nicolaescu
                                                   ` (2 more replies)
  0 siblings, 3 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-07  3:26 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: Tom Tromey, emacs-devel, Stefan Monnier, rms, harsanyi

Dan Nicolaescu <dann@ics.uci.edu>:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
> 
>   > > Appended is a patch to make it work with svn.  This patch is kind of a
>   > > hack in that, if vc-status ever wants to support "non-terse" mode,
>   > > then the function will have to be rewritten (since "svn status" and
>   > > "svn status -v" have different formats).
>   > 
>   > If we introduce a new non-dired thingy, I suggest we don't even try to
>   > provide a non-terse mode.  There are so many more important features to
>   > add that we may as well decide from the get go that we'll never get to
>   > that one.
> 
> 100% agreement.

Seems reasonable to me as well, except -- do we really want to show all
uncontrolled files and have no option to suppress them?  

This is sticky, because we need them listed to select for register operations
but typically *don't* want them listed at other times.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:26                               ` Eric S. Raymond
@ 2008-01-07  3:36                                 ` Dan Nicolaescu
  2008-01-07  3:59                                 ` Stefan Monnier
  2008-01-07 11:30                                 ` Richard Stallman
  2 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-07  3:36 UTC (permalink / raw)
  To: esr; +Cc: Tom Tromey, emacs-devel, Stefan Monnier, rms, harsanyi

"Eric S. Raymond" <esr@thyrsus.com> writes:

  > Dan Nicolaescu <dann@ics.uci.edu>:
  > > Stefan Monnier <monnier@iro.umontreal.ca> writes:
  > > 
  > >   > > Appended is a patch to make it work with svn.  This patch is kind of a
  > >   > > hack in that, if vc-status ever wants to support "non-terse" mode,
  > >   > > then the function will have to be rewritten (since "svn status" and
  > >   > > "svn status -v" have different formats).
  > >   > 
  > >   > If we introduce a new non-dired thingy, I suggest we don't even try to
  > >   > provide a non-terse mode.  There are so many more important features to
  > >   > add that we may as well decide from the get go that we'll never get to
  > >   > that one.
  > > 
  > > 100% agreement.
  > 
  > Seems reasonable to me as well, except -- do we really want to show all
  > uncontrolled files and have no option to suppress them?  

IMO we should show them.
We might need to add a new back-end command to add the files to the
ignored list.

This is no different when using the VCS from the command line, as long
as you don't explicitly ignore unregistered files (and they are not
ignored by some default rule), they will should up in the output of many
commands.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:26                               ` Eric S. Raymond
  2008-01-07  3:36                                 ` Dan Nicolaescu
@ 2008-01-07  3:59                                 ` Stefan Monnier
  2008-01-07 12:56                                   ` Eric S. Raymond
  2008-01-07 11:30                                 ` Richard Stallman
  2 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-07  3:59 UTC (permalink / raw)
  To: esr; +Cc: Tom Tromey, Dan Nicolaescu, emacs-devel, rms, harsanyi

> Seems reasonable to me as well, except -- do we really want to show all
> uncontrolled files and have no option to suppress them?  

I don't understand: every VCS I know has some way to label files as "to
be ignored".  So there is always an "option to suppress them".


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:03                             ` Tom Tromey
@ 2008-01-07  4:01                               ` Stefan Monnier
  2008-01-07 21:15                                 ` PCL-CVS buffers (was: Introducing 'unrecognized and 'ignored) Reiner Steib
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-07  4:01 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, Dan Nicolaescu, rms, emacs-devel

Dan> No opinion here. PCL-CVS calls it *cvs*, and it does not seem like a big
Dan> issue when using it.

> FWIW, pcl-cvs isn't super friendly here, but it does make numbered
> buffers when you have more than one.

Actually PCL-CVS makes significant efforts to do better than that,
My PCL-CVS buffers are called "*cvs*" but they get uniquified like file
buffers, so if I have more than 1 they get names like "*cvs* | emacs"
and "*cvs* | haskell-mode" etc...


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:26                               ` Eric S. Raymond
  2008-01-07  3:36                                 ` Dan Nicolaescu
  2008-01-07  3:59                                 ` Stefan Monnier
@ 2008-01-07 11:30                                 ` Richard Stallman
  2008-01-07 12:54                                   ` Eric S. Raymond
  2 siblings, 1 reply; 70+ messages in thread
From: Richard Stallman @ 2008-01-07 11:30 UTC (permalink / raw)
  To: esr; +Cc: tromey, harsanyi, dann, monnier, emacs-devel

    >   > If we introduce a new non-dired thingy, I suggest we don't even try to
    >   > provide a non-terse mode.

What does "non-terse mode" mean in this context?

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07 11:30                                 ` Richard Stallman
@ 2008-01-07 12:54                                   ` Eric S. Raymond
  2008-01-07 15:32                                     ` Stefan Monnier
  2008-01-08 19:06                                     ` Richard Stallman
  0 siblings, 2 replies; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-07 12:54 UTC (permalink / raw)
  To: Richard Stallman; +Cc: tromey, harsanyi, dann, monnier, emacs-devel

Richard Stallman <rms@gnu.org>:
>     >   > If we introduce a new non-dired thingy, I suggest we don't even try to
>     >   > provide a non-terse mode.
> 
> What does "non-terse mode" mean in this context?

Showing unregistred files, basically.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07  3:59                                 ` Stefan Monnier
@ 2008-01-07 12:56                                   ` Eric S. Raymond
  2008-01-07 15:31                                     ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Eric S. Raymond @ 2008-01-07 12:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Tom Tromey, Dan Nicolaescu, emacs-devel, rms, harsanyi

Stefan Monnier <monnier@iro.umontreal.ca>:
> > Seems reasonable to me as well, except -- do we really want to show all
> > uncontrolled files and have no option to suppress them?  
> 
> I don't understand: every VCS I know has some way to label files as "to
> be ignored".  So there is always an "option to suppress them".

Yes, but you sure don't want to have to set an ignore property by hand 
on every member of a huge tree you happen to have in your working
directory and *don't* want to be in the repo.

This case is already annoying me.
-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07 12:56                                   ` Eric S. Raymond
@ 2008-01-07 15:31                                     ` Stefan Monnier
  0 siblings, 0 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-07 15:31 UTC (permalink / raw)
  To: esr; +Cc: Tom Tromey, Dan Nicolaescu, emacs-devel, rms, harsanyi

>> > Seems reasonable to me as well, except -- do we really want to show all
>> > uncontrolled files and have no option to suppress them?  
>> 
>> I don't understand: every VCS I know has some way to label files as "to
>> be ignored".  So there is always an "option to suppress them".

> Yes, but you sure don't want to have to set an ignore property by hand 
> on every member of a huge tree you happen to have in your working
> directory and *don't* want to be in the repo.

I don't see a problem here: you set the "ignore" property on the tree
itself, of course, not on each individual file.

In any case, I don't understand what this has to do with VC: no matter
which front-end you're going to use, you'll hit the same problem, and
the answer is always the same: use the "ignore" property.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07 12:54                                   ` Eric S. Raymond
@ 2008-01-07 15:32                                     ` Stefan Monnier
  2008-01-08 19:06                                     ` Richard Stallman
  1 sibling, 0 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-07 15:32 UTC (permalink / raw)
  To: esr; +Cc: tromey, harsanyi, dann, Richard Stallman, emacs-devel

>> >   > If we introduce a new non-dired thingy, I suggest we don't even try to
>> >   > provide a non-terse mode.
>> 
>> What does "non-terse mode" mean in this context?

> Showing unregistred files, basically.

I thought "non-terse" mostly means to show "all" files, including the
up-to-date ones.


        Stefan

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

* PCL-CVS buffers (was: Introducing 'unrecognized and 'ignored)
  2008-01-07  4:01                               ` Stefan Monnier
@ 2008-01-07 21:15                                 ` Reiner Steib
  2008-01-08  2:33                                   ` PCL-CVS buffers Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Reiner Steib @ 2008-01-07 21:15 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On Mon, Jan 07 2008, Stefan Monnier wrote:

>> FWIW, pcl-cvs isn't super friendly here, but it does make numbered
>> buffers when you have more than one.
>
> Actually PCL-CVS makes significant efforts to do better than that,
> My PCL-CVS buffers are called "*cvs*" but they get uniquified like file
> buffers, so if I have more than 1 they get names like "*cvs* | emacs"
> and "*cvs* | haskell-mode" etc...

Hm, I do this by means of `uniquify-buffer-name-style'.  Is there a
(better?) facility in PCL-CVS for naming buffers?

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

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

* Re: PCL-CVS buffers
  2008-01-07 21:15                                 ` PCL-CVS buffers (was: Introducing 'unrecognized and 'ignored) Reiner Steib
@ 2008-01-08  2:33                                   ` Stefan Monnier
  0 siblings, 0 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-08  2:33 UTC (permalink / raw)
  To: emacs-devel

>>> FWIW, pcl-cvs isn't super friendly here, but it does make numbered
>>> buffers when you have more than one.
>> 
>> Actually PCL-CVS makes significant efforts to do better than that,
>> My PCL-CVS buffers are called "*cvs*" but they get uniquified like file
>> buffers, so if I have more than 1 they get names like "*cvs* | emacs"
>> and "*cvs* | haskell-mode" etc...

> Hm, I do this by means of `uniquify-buffer-name-style'.

So do I.

> Is there a (better?) facility in PCL-CVS for naming buffers?

No, it's the same.  But since PCL-CVS buffers aren't plain old
file-buffers, uniquify needs some help from PCL-CVS.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-07 12:54                                   ` Eric S. Raymond
  2008-01-07 15:32                                     ` Stefan Monnier
@ 2008-01-08 19:06                                     ` Richard Stallman
  2008-01-08 19:34                                       ` Miles Bader
  1 sibling, 1 reply; 70+ messages in thread
From: Richard Stallman @ 2008-01-08 19:06 UTC (permalink / raw)
  To: esr; +Cc: tromey, harsanyi, dann, monnier, emacs-devel

    >     >   > If we introduce a new non-dired thingy, I suggest we don't even try to
    >     >   > provide a non-terse mode.
    > 
    > What does "non-terse mode" mean in this context?

    Showing unregistred files, basically.

If this feature is disconnected from Dired, I guess there is no need
to implement that mode.  It follows there is an advantage in staying
with Dired: continuing to offer that mode.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-08 19:06                                     ` Richard Stallman
@ 2008-01-08 19:34                                       ` Miles Bader
  0 siblings, 0 replies; 70+ messages in thread
From: Miles Bader @ 2008-01-08 19:34 UTC (permalink / raw)
  To: rms; +Cc: tromey, emacs-devel, esr, dann, monnier, harsanyi

Richard Stallman <rms@gnu.org> writes:
>     Showing unregistred files, basically.
>
> If this feature is disconnected from Dired, I guess there is no need
> to implement that mode.  It follows there is an advantage in staying
> with Dired: continuing to offer that mode.

The thing is that purely using a "VCS-centric" view of what files are
available is usually _much_ more efficient.  The VCS usually can
efficiently tell you about an "interesting subset" (non-ignored) of
unregistered files, and I think that's enough -- there's no need to read
the filesystem directly.

[Indeed, reading the filesystem directly would both require a lot more
programming effort, and probably be much, much slower (remember that one
of the big problems with vc-dired historically is that it's so slow as
to be basically unusable for non-trivial projects).]

-Miles

-- 
"Nah, there's no bigger atheist than me.  Well, I take that back.
I'm a cancer screening away from going agnostic and a biopsy away
from full-fledged Christian."  [Adam Carolla]

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 15:57                         ` Eric S. Raymond
@ 2008-01-18 23:31                           ` Dan Nicolaescu
  0 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-18 23:31 UTC (permalink / raw)
  To: esr; +Cc: harsanyi, emacs-devel, rms, monnier

"Eric S. Raymond" <esr@thyrsus.com> writes:

  > Dan Nicolaescu <dann@ics.uci.edu>:
  > > Now, I cannot lead this development, I don't have the time to do it at
  > > the moment.
  > > But I am happy to help further.
  > 
  > Noted.  I'll carve out some time later today or tomorrow to look at it.

Have you had a chance to look at vc-status? 
It's in decent shape now. It needs more UI improvements, and polish, but
the main functionality is there.

Thanks

        --dan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-06 20:00                         ` Tom Tromey
  2008-01-06 21:03                           ` Stefan Monnier
  2008-01-07  3:22                           ` Dan Nicolaescu
@ 2008-01-18 23:46                           ` Dan Nicolaescu
  2008-01-19  0:10                             ` Tom Tromey
  2008-01-19  6:00                             ` Tom Tromey
  2 siblings, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-18 23:46 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, rms, monnier, emacs-devel

Tom Tromey <tromey@redhat.com> writes:

  > 2008-01-06  Tom Tromey  <tromey@redhat.com>
  > 
  > 	* vc-svn.el (vc-svn-dir-status): New function.

Sorry, I was convinced that this was checked in, but it was not. It is
now. 
But it needs to be updated to work with the asynchronous interface. Can
you please do that? 

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-18 23:46                           ` Introducing 'unrecognized and 'ignored Dan Nicolaescu
@ 2008-01-19  0:10                             ` Tom Tromey
  2008-01-19  1:20                               ` Dan Nicolaescu
  2008-01-19  6:00                             ` Tom Tromey
  1 sibling, 1 reply; 70+ messages in thread
From: Tom Tromey @ 2008-01-19  0:10 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, harsanyi, rms, monnier, emacs-devel

>>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:

Dan> Sorry, I was convinced that this was checked in, but it was
Dan> not. It is now.

Thanks.

I've been meaning to ping the list about all the patches I have sent
but that have not been committed or reviewed.  In GCC-land we tell
people to ping after a week... what is the accepted time for Emacs?

Dan> But it needs to be updated to work with the asynchronous
Dan> interface. Can you please do that?

I will try to get to it soon.  BTW I noticed that the new dir-status
back end hook is not documented.

Tom

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19  0:10                             ` Tom Tromey
@ 2008-01-19  1:20                               ` Dan Nicolaescu
  0 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-19  1:20 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, rms, monnier, emacs-devel

Tom Tromey <tromey@redhat.com> writes:

  > >>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:
  > 
  > Dan> Sorry, I was convinced that this was checked in, but it was
  > Dan> not. It is now.
  > 
  > Thanks.
  > 
  > I've been meaning to ping the list about all the patches I have sent
  > but that have not been committed or reviewed.  In GCC-land we tell
  > people to ping after a week... what is the accepted time for Emacs?

No idea if there's an official policy, but 1 week sounds reasonable.

  > BTW I noticed that the new dir-status back end hook is not
  > documented.

Sort of intentional. Given that its still subject to change, just trying
to minimize the effort put into this before the approach is accepted.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-18 23:46                           ` Introducing 'unrecognized and 'ignored Dan Nicolaescu
  2008-01-19  0:10                             ` Tom Tromey
@ 2008-01-19  6:00                             ` Tom Tromey
  2008-01-19 17:05                               ` Dan Nicolaescu
  1 sibling, 1 reply; 70+ messages in thread
From: Tom Tromey @ 2008-01-19  6:00 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: esr, harsanyi, rms, monnier, emacs-devel

>>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:

Dan> But it needs to be updated to work with the asynchronous
Dan> interface. Can you please do that?

Here's a patch.

I'm not really sure about using generate-new-buffer-name here.
Presumably each vc-status buffer should have a single vc "work" buffer
as well.

After trying this a couple times, I think the user needs an indication
of whether anything is running.  pcl-cvs puts this nicely in the
buffer... anyway, if you run vc-status on a directory with no changes,
it can be a little confusing as-is.

Finally, I wonder if it makes sense to call the callback with partial
results, and build up the buffer contents incrementally.  With large
directories, both pcl-cvs and psvn pause noticeably when "rendering".
I suppose this would only help if the underlying tool works this way
itself.

Tom

ChangeLog:
2008-01-19  Tom Tromey  <tromey@redhat.com>

	* vc-svn.el (vc-svn-after-dir-status): New function.
	(vc-svn-dir-status): Run svn asynchronously.

Index: vc-svn.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-svn.el,v
retrieving revision 1.64
diff -u -r1.64 vc-svn.el
--- vc-svn.el	18 Jan 2008 23:45:03 -0000	1.64
+++ vc-svn.el	19 Jan 2008 06:30:23 -0000
@@ -158,28 +158,34 @@
       (vc-svn-command t 0 nil "status" (if localp "-v" "-u"))
       (vc-svn-parse-status))))
 
-(defun vc-svn-dir-status (dir)
-  "Return a list of conses (FILE . STATE) for DIR."
-  (with-temp-buffer
-    (let ((default-directory (file-name-as-directory dir))
-	  (state-map '((?A . added)
-		       (?C . edited)
-		       (?D . removed)
-		       (?I . ignored)
-		       (?M . edited)
-		       (?R . removed)
-		       (?? . unregistered)
-		       ;; This is what vc-svn-parse-status does.
-		       (?~ . edited)))
-	  result)
-      (vc-svn-command t 0 nil "status")
-      (goto-char (point-min))
-      (while (re-search-forward "^\\(.\\)..... \\(.*\\)$" nil t)
-	(let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
-	      (filename (match-string 2)))
-	  (when state
-	    (setq result (cons (cons filename state) result)))))
-      result)))
+(defun vc-svn-after-dir-status (callback buffer)
+  (let ((state-map '((?A . added)
+		     (?C . edited)
+		     (?D . removed)
+		     (?I . ignored)
+		     (?M . edited)
+		     (?R . removed)
+		     (?? . unregistered)
+		     ;; This is what vc-svn-parse-status does.
+		     (?~ . edited)))
+	result)
+    (goto-char (point-min))
+    (while (re-search-forward "^\\(.\\)..... \\(.*\\)$" nil t)
+      (let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
+	    (filename (match-string 2)))
+	(when state
+	  (setq result (cons (cons filename state) result)))))
+    (funcall callback result buffer)))
+
+(defun vc-svn-dir-status (dir callback buffer)
+  "Run 'svn status' for DIR and update BUFFER via CALLBACK.
+CALLBACK is called as (CALLBACK RESULT BUFFER), where
+RESULT is a list of conses (FILE . STATE) for directory DIR."
+  (with-current-buffer (get-buffer-create
+			(generate-new-buffer-name " *vc svn status*"))
+    (vc-svn-command (current-buffer) 'async nil "status")
+    (vc-exec-after
+     `(vc-svn-after-dir-status (quote ,callback) ,buffer))))
 
 (defun vc-svn-working-revision (file)
   "SVN-specific version of `vc-working-revision'."

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19  6:00                             ` Tom Tromey
@ 2008-01-19 17:05                               ` Dan Nicolaescu
  2008-01-19 19:40                                 ` Stefan Monnier
  2008-01-19 20:03                                 ` Thien-Thi Nguyen
  0 siblings, 2 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-19 17:05 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, rms, monnier, emacs-devel

Tom Tromey <tromey@redhat.com> writes:

  > >>>>> "Dan" == Dan Nicolaescu <dann@ics.uci.edu> writes:
  > 
  > Dan> But it needs to be updated to work with the asynchronous
  > Dan> interface. Can you please do that?
  > 
  > Here's a patch.

Thanks, checked in.

  > I'm not really sure about using generate-new-buffer-name here.
  > Presumably each vc-status buffer should have a single vc "work" buffer
  > as well.

IMO yes. I did it that way for vc-hg. But it still needs some
management: warn if the buffer already exist and refuse to start a new
status command, remove the buffer after it has been processed.

  > After trying this a couple times, I think the user needs an indication
  > of whether anything is running.  pcl-cvs puts this nicely in the
  > buffer... anyway, if you run vc-status on a directory with no changes,
  > it can be a little confusing as-is.

Yep. vc-status-refresh and vc-update-vc-status-buffer can insert some
start/end messages similar to PCL-CVS.

It would be nice if we had something more general that is easily
visible for buffers that use VC async commands. 

Something like changing the background of a mode-line entry for VC
buffers that are waiting for a command to compile. This should make it
very easy to spot a buffer that is still executing some command.

log, diff and annotate could all use this functionality.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 17:05                               ` Dan Nicolaescu
@ 2008-01-19 19:40                                 ` Stefan Monnier
  2008-01-19 21:01                                   ` Thien-Thi Nguyen
                                                     ` (2 more replies)
  2008-01-19 20:03                                 ` Thien-Thi Nguyen
  1 sibling, 3 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-19 19:40 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: Tom Tromey, esr, harsanyi, rms, emacs-devel

>> I'm not really sure about using generate-new-buffer-name here.
>> Presumably each vc-status buffer should have a single vc "work" buffer
>> as well.

> IMO yes. I did it that way for vc-hg. But it still needs some
> management: warn if the buffer already exist and refuse to start a new
> status command, remove the buffer after it has been processed.

Yes, maybe Tom is right, sorry for telling you to always use
a new buffer.  Part of the PCL-CVS could probably be reused here because
it shouldn't have any CVS dependency, but then again, it may not be
worth the trouble.

>> After trying this a couple times, I think the user needs an indication
>> of whether anything is running.  pcl-cvs puts this nicely in the
>> buffer... anyway, if you run vc-status on a directory with no changes,
>> it can be a little confusing as-is.

> Yep. vc-status-refresh and vc-update-vc-status-buffer can insert some
> start/end messages similar to PCL-CVS.

> It would be nice if we had something more general that is easily
> visible for buffers that use VC async commands. 

> Something like changing the background of a mode-line entry for VC
> buffers that are waiting for a command to compile. This should make it
> very easy to spot a buffer that is still executing some command.

There's the mode-line-process entry, but it's not visible enough.
Also the PCL-CVS way of putting the actual command in the buffer turned
out to be very useful to double-check what it is doing (and even more
so when several commands are running at the same time).

> log, diff and annotate could all use this functionality.

Indeed, they could use `mode-line-process'.

As for on-the-fly updating rather than updating in the end.  It's been
on my todo list for PCL-CVS, but I never got to it.  It'd probably be
a good idea to add this from the beginning because it substantially
changes the way things work: you have to use a process filter rather than
a sentinel, you have to check whether the partial output you have is
enough to parse it reliably or whether we need to way for more output,
and you have to be able to update the display incrementally.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 17:05                               ` Dan Nicolaescu
  2008-01-19 19:40                                 ` Stefan Monnier
@ 2008-01-19 20:03                                 ` Thien-Thi Nguyen
  2008-01-20 19:24                                   ` Stefan Monnier
  1 sibling, 1 reply; 70+ messages in thread
From: Thien-Thi Nguyen @ 2008-01-19 20:03 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: emacs-devel

() Dan Nicolaescu <dann@ics.uci.edu>
() Sat, 19 Jan 2008 09:05:24 -0800

   It would be nice if we had something more general that is
   easily visible for buffers that use VC async commands.

we can use `mode-line-process'.  below is a sketch.  works for me.
(would need to be adapted to latest vc.el, of course.)

thi


________________________________________________________
*** vc.el.~1.513.~	Mon Jan 14 18:53:10 2008
--- vc.el	Sat Jan 19 21:00:42 2008
***************
*** 958,963 ****
--- 958,967 ----
  
  (defun vc-process-sentinel (p s)
    (let ((previous (process-get p 'vc-previous-sentinel)))
+     (setq mode-line-process
+           (let ((status (process-status p)))
+             (unless (eq 'exit status)
+               (format " (%s)" status))))
      (if previous (funcall previous p s))
      (with-current-buffer (process-buffer p)
        (let (vc-sentinel-movepoint)
***************
*** 998,1003 ****
--- 1002,1008 ----
        (eval code))
       ;; If a process is running, add CODE to the sentinel
       ((eq (process-status proc) 'run)
+       (setq mode-line-process " (background)")
        (let ((previous (process-sentinel proc)))
          (unless (eq previous 'vc-process-sentinel)
            (process-put proc 'vc-previous-sentinel previous))

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 19:40                                 ` Stefan Monnier
@ 2008-01-19 21:01                                   ` Thien-Thi Nguyen
  2008-01-20 17:18                                     ` Dan Nicolaescu
  2008-01-20 17:08                                   ` Dan Nicolaescu
  2008-01-20 19:08                                   ` Tom Tromey
  2 siblings, 1 reply; 70+ messages in thread
From: Thien-Thi Nguyen @ 2008-01-19 21:01 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

() Stefan Monnier <monnier@iro.umontreal.ca>
() Sat, 19 Jan 2008 14:40:20 -0500

   There's the mode-line-process entry, but it's not visible enough.

with this, it is quite visibile (to me):

      (setq mode-line-process
            (propertize " (incomplete / in progress)"
                        'face 'compilation-warning))


(in vc-exec-after, see my other message in this thread.)

thi

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 19:40                                 ` Stefan Monnier
  2008-01-19 21:01                                   ` Thien-Thi Nguyen
@ 2008-01-20 17:08                                   ` Dan Nicolaescu
  2008-01-20 19:08                                   ` Tom Tromey
  2 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-20 17:08 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Tom Tromey, esr, harsanyi, rms, emacs-devel

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

  > > log, diff and annotate could all use this functionality.
  > 
  > Indeed, they could use `mode-line-process'.
  > 
  > As for on-the-fly updating rather than updating in the end.  It's been
  > on my todo list for PCL-CVS, but I never got to it.  It'd probably be
  > a good idea to add this from the beginning because it substantially
  > changes the way things work: you have to use a process filter rather than
  > a sentinel, you have to check whether the partial output you have is
  > enough to parse it reliably or whether we need to way for more output,
  > and you have to be able to update the display incrementally.

For doing incremental updates the needed changes for vc.el changes are
quite small. Just pass to the `dir-status' backend function another
function that is called when the asynchronous process finishes.
AFAICT vc-update-vc-status-buffer can work incrementally, the backend
just needs to call it with partial results when they are available.

Like this:

--- vc.el.~1.516.~      Fri Jan 18 15:05:37 2008
+++ vc.el               Sun Jan 20 08:52:48 2008
@@ -2627,6 +2627,11 @@
                  (vc-status-create-fileinfo (cdr entry) (car entry))))
     (ewoc-goto-node vc-status (ewoc-nth vc-status 0))))
 
+(defun vc-status-command-finished (successp buffer)
+  ;; This is called when dir-status finished processing the
+  ;; asynchronous output from the status command.
+  )
+
 (defun vc-status-refresh ()
   "Refresh the contents of the VC status buffer."
   (interactive)
@@ -2639,7 +2644,8 @@
     ;; the results.
     (vc-call-backend 
      backend 'dir-status default-directory 
-     #'vc-update-vc-status-buffer (current-buffer))))
+     #'vc-update-vc-status-buffer #'vc-status-command-finished
+     (current-buffer))))
 
 (defun vc-status-next-line (arg)
   "Go to the next line.

The backend changes to use a process filter are probably a bit more
complex, patches showing how to do that would be most welcome!

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 21:01                                   ` Thien-Thi Nguyen
@ 2008-01-20 17:18                                     ` Dan Nicolaescu
  2008-01-20 20:24                                       ` Thien-Thi Nguyen
  0 siblings, 1 reply; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-20 17:18 UTC (permalink / raw)
  To: Thien-Thi Nguyen; +Cc: Stefan Monnier, emacs-devel

Thien-Thi Nguyen <ttn@gnuvola.org> writes:

  > () Stefan Monnier <monnier@iro.umontreal.ca>
  > () Sat, 19 Jan 2008 14:40:20 -0500
  > 
  >    There's the mode-line-process entry, but it's not visible enough.
  > 
  > with this, it is quite visibile (to me):
  > 
  >       (setq mode-line-process
  >             (propertize " (incomplete / in progress)"
  >                         'face 'compilation-warning))
  > 
  > 
  > (in vc-exec-after, see my other message in this thread.)

Thanks Thi, this seems to be the right thing to do. If it works, why not
check it in?

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 19:40                                 ` Stefan Monnier
  2008-01-19 21:01                                   ` Thien-Thi Nguyen
  2008-01-20 17:08                                   ` Dan Nicolaescu
@ 2008-01-20 19:08                                   ` Tom Tromey
  2008-01-20 20:14                                     ` Stefan Monnier
  2 siblings, 1 reply; 70+ messages in thread
From: Tom Tromey @ 2008-01-20 19:08 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: esr, harsanyi, Dan Nicolaescu, rms, emacs-devel

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

Stefan> There's the mode-line-process entry, but it's not visible enough.
Stefan> Also the PCL-CVS way of putting the actual command in the buffer turned
Stefan> out to be very useful to double-check what it is doing (and even more
Stefan> so when several commands are running at the same time).

Yes, I agree.  I rather like the PCL-CVS approach.  I've got a patch
to do this for vc-status, I'll send it after I test it a bit more.  I
hook into vc-do-command... I'm not sure if that is really a good idea.
I guess that's why we have patch review :-)

Stefan> As for on-the-fly updating rather than updating in the end.
Stefan> It's been on my todo list for PCL-CVS, but I never got to it.
Stefan> It'd probably be a good idea to add this from the beginning
Stefan> because it substantially changes the way things work: you have
Stefan> to use a process filter rather than a sentinel, you have to
Stefan> check whether the partial output you have is enough to parse
Stefan> it reliably or whether we need to way for more output, and you
Stefan> have to be able to update the display incrementally.

Yeah.  I think it is probably worth doing -- we know it is a potential
problem, and we have few dependencies to rewrite right now.

It is also worth considering if we really want to clear the ewoc
before re-running 'status' (or, eventually, 'update').  I suspect we
don't want to.  This seems to be what PCL-CVS does, and it has the
nice effect of preserving the user's marks and point during
operations.

I think that means we need a nice way to insert a new element into the
proper position in the ewoc; maybe a new ewoc method is needed.  (This
is different than updating the display incrementally, since right now
we just assume the back end hook provides the files in the right order
and we just insert them into the ewoc in that order.)

Tom

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-19 20:03                                 ` Thien-Thi Nguyen
@ 2008-01-20 19:24                                   ` Stefan Monnier
  2008-01-20 20:30                                     ` Thien-Thi Nguyen
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-20 19:24 UTC (permalink / raw)
  To: Thien-Thi Nguyen; +Cc: Dan Nicolaescu, emacs-devel

>   (defun vc-process-sentinel (p s)
>     (let ((previous (process-get p 'vc-previous-sentinel)))
> +     (setq mode-line-process
> +           (let ((status (process-status p)))
> +             (unless (eq 'exit status)
> +               (format " (%s)" status))))

This can't be right: we have no idea what buffer we're in at this point.

> +       (setq mode-line-process " (background)")

The problem with this is that it's not necessarily clear that we're
changing mode-line-process in the right buffer either, here.  Also the
habit is to use something like ":run" or ":%s".


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 20:14                                     ` Stefan Monnier
@ 2008-01-20 19:45                                       ` Tom Tromey
  2008-01-22  1:35                                         ` Dan Nicolaescu
  0 siblings, 1 reply; 70+ messages in thread
From: Tom Tromey @ 2008-01-20 19:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: esr, harsanyi, Dan Nicolaescu, rms, emacs-devel

>> I hook into vc-do-command... I'm not sure if that is really a good idea.
>> I guess that's why we have patch review :-)

Stefan> I general it doesn't sound like a bad idea, but I'll reserve
Stefan> my judgment until I see the code.

Here's the patch I've got.

Note there is a bug fix to vc-update-vc-status-buffer in here... this
should go in even if the rest of the patch does not.  You can see this
bug by running vc-status in a directory with no modifications and no
unrecognized files.

Stefan> PCL-CVS used to clear the ewoc, so I obviously believe it's
Stefan> worth the effort to not clear it, so as to preserve mark and
Stefan> such.

Yeah.  In general I think vc-status should follow PCL-CVS unless there
is a really good reason to be different.

Tom

2008-01-20  Tom Tromey  <tromey@redhat.com>

	* vc.el (vc-status-report-buffer): New variable.
	(vc-do-command): Display command in vc-status buffer.
	(vc-status-headers): Add 'command' argument.
	(vc-status-footers): New function.
	(vc-status-mode): Create footer.
	(vc-status-refresh): Bind vc-status-report-buffer.
	(vc-status-start-command): New function.
	(vc-status-command-finished): Likewise.
	(vc-update-vc-status-buffer): Avoid error if no nodes in ewoc.

Index: vc.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc.el,v
retrieving revision 1.516
diff -u -c -r1.516 vc.el
cvs diff: conflicting specifications of output style
*** vc.el	18 Jan 2008 23:32:57 -0000	1.516
--- vc.el	20 Jan 2008 20:11:34 -0000
***************
*** 1020,1025 ****
--- 1020,1028 ----
    ;; FIXME what about file names with spaces?
    (if (not filelist) "."  (mapconcat 'identity filelist " ")))
  
+ ;; This is let-bound when vc-do-command should report the command.
+ (defvar vc-status-report-buffer nil)
+ 
  ;;;###autoload
  (defun vc-do-command (buffer okstatus command file-or-list &rest flags)
    "Execute a VC command, notifying user and checking for errors.
***************
*** 1050,1055 ****
--- 1053,1064 ----
  		  " "
  		  (vc-delistify (mapcar (lambda (s) (if (> (length s) 20) (concat (substring s 0 2) "...")  s)) flags))
  		  " " (vc-delistify files))))
+     ;; Update the vc-status buffer, if requested.  Only do this for
+     ;; async commands; for synchronous commands the normal message is
+     ;; enough.
+     (if (and vc-status-report-buffer (eq okstatus 'async))
+ 	(with-current-buffer vc-status-report-buffer
+ 	  (vc-status-start-command full-command)))
      (save-current-buffer
        (unless (or (eq buffer t)
  		  (and (stringp buffer)
***************
*** 1091,1097 ****
  		(set-process-filter proc 'vc-process-filter)
  		(vc-exec-after
  		 `(if vc-command-messages
! 		      (message "Running %s in background... done" ',full-command))))
  	    ;; Run synchrously
  	    (if vc-command-messages
  		(message "Running %s in foreground..." full-command))
--- 1100,1110 ----
  		(set-process-filter proc 'vc-process-filter)
  		(vc-exec-after
  		 `(if vc-command-messages
! 		      (message "Running %s in background... done" ',full-command)))
! 		(if vc-status-report-buffer
! 		    (vc-exec-after
! 		     `(with-current-buffer ,vc-status-report-buffer
! 			(vc-status-command-finished)))))
  	    ;; Run synchrously
  	    (if vc-command-messages
  		(message "Running %s in foreground..." full-command))
***************
*** 2543,2553 ****
  
  (defvar vc-status nil)
  
! (defun vc-status-headers (backend dir)
    (concat
     (format "VC backend : %s\n" backend)
     "Repository : The repository goes here\n"
!    (format "Working dir: %s\n" dir)))
  
  (defun vc-status-printer (fileentry)
    "Pretty print FILEENTRY."
--- 2558,2579 ----
  
  (defvar vc-status nil)
  
! (defun vc-status-headers (backend dir command)
    (concat
     (format "VC backend : %s\n" backend)
     "Repository : The repository goes here\n"
!    (format "Working dir: %s\n" dir)
!    "\n"
!    (if command (concat "-- Running: " command " ...")
!      "")
!    "\n"))
! 
! (defun vc-status-footers (command)
!   (concat
!    "\n--------------------- End ---------------------\n"
!    (if command (concat "-- Last command: " command " --")
!      "")
!    "\n"))
  
  (defun vc-status-printer (fileentry)
    "Pretty print FILEENTRY."
***************
*** 2615,2621 ****
      (erase-buffer)
      (set (make-local-variable 'vc-status)
  	 (ewoc-create #'vc-status-printer
! 		      (vc-status-headers backend default-directory)))
      (vc-status-refresh)))
  
  (put 'vc-status-mode 'mode-class 'special)
--- 2641,2648 ----
      (erase-buffer)
      (set (make-local-variable 'vc-status)
  	 (ewoc-create #'vc-status-printer
! 		      (vc-status-headers backend default-directory nil)
! 		      (vc-status-footers nil)))
      (vc-status-refresh)))
  
  (put 'vc-status-mode 'mode-class 'special)
***************
*** 2625,2638 ****
      (dolist (entry entries)
        (ewoc-enter-last vc-status
  		       (vc-status-create-fileinfo (cdr entry) (car entry))))
!     (ewoc-goto-node vc-status (ewoc-nth vc-status 0))))
  
  (defun vc-status-refresh ()
    "Refresh the contents of the VC status buffer."
    (interactive)
    ;; This is not very efficient; ewoc could use a new function here.
    (ewoc-filter vc-status (lambda (node) nil))
!   (let ((backend (vc-responsible-backend default-directory)))
      ;; Call the dir-status backend function. dir-status is supposed to
      ;; be asynchronous.  It should compute the results and call the
      ;; function passed as a an arg to update the vc-status buffer with
--- 2652,2668 ----
      (dolist (entry entries)
        (ewoc-enter-last vc-status
  		       (vc-status-create-fileinfo (cdr entry) (car entry))))
!     (let ((node (ewoc-nth vc-status 0)))
!       (if node
! 	  (ewoc-goto-node vc-status node)))))
  
  (defun vc-status-refresh ()
    "Refresh the contents of the VC status buffer."
    (interactive)
    ;; This is not very efficient; ewoc could use a new function here.
    (ewoc-filter vc-status (lambda (node) nil))
!   (let ((backend (vc-responsible-backend default-directory))
! 	(vc-status-report-buffer (current-buffer)))
      ;; Call the dir-status backend function. dir-status is supposed to
      ;; be asynchronous.  It should compute the results and call the
      ;; function passed as a an arg to update the vc-status buffer with
***************
*** 2641,2646 ****
--- 2671,2691 ----
       backend 'dir-status default-directory 
       #'vc-update-vc-status-buffer (current-buffer))))
  
+ (defun vc-status-start-command (command)
+   "Update the vc-status header with the current back-end command."
+   (let ((backend (vc-responsible-backend default-directory)))
+     (set (make-local-variable 'vc-running-command) command)
+     (ewoc-set-hf vc-status
+ 		 (vc-status-headers backend default-directory command)
+ 		 (vc-status-footers nil))))
+ 
+ (defun vc-status-command-finished ()
+   "Update the vc-status footer with previous command, and clear the header."
+   (let ((backend (vc-responsible-backend default-directory)))
+     (ewoc-set-hf vc-status
+ 		 (vc-status-headers backend default-directory nil)
+ 		 (vc-status-footers vc-running-command))))
+ 
  (defun vc-status-next-line (arg)
    "Go to the next line.
  If a prefix argument is given, move by that many lines."

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 19:08                                   ` Tom Tromey
@ 2008-01-20 20:14                                     ` Stefan Monnier
  2008-01-20 19:45                                       ` Tom Tromey
  0 siblings, 1 reply; 70+ messages in thread
From: Stefan Monnier @ 2008-01-20 20:14 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, Dan Nicolaescu, rms, emacs-devel

> I hook into vc-do-command... I'm not sure if that is really a good idea.
> I guess that's why we have patch review :-)

I general it doesn't sound like a bad idea, but I'll reserve my judgment
until I see the code.

> It is also worth considering if we really want to clear the ewoc
> before re-running 'status' (or, eventually, 'update').  I suspect we
> don't want to.  This seems to be what PCL-CVS does, and it has the
> nice effect of preserving the user's marks and point during
> operations.

PCL-CVS used to clear the ewoc, so I obviously believe it's worth the
effort to not clear it, so as to preserve mark and such.  Also because
you want to work on parts of a vc-status display (some backends don't
like it as much as CVS, but it's still pretty common).

> I think that means we need a nice way to insert a new element into the
> proper position in the ewoc; maybe a new ewoc method is needed.  (This
> is different than updating the display incrementally, since right now
> we just assume the back end hook provides the files in the right order
> and we just insert them into the ewoc in that order.)

Can't remember how I do it in PCL-CVS.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 17:18                                     ` Dan Nicolaescu
@ 2008-01-20 20:24                                       ` Thien-Thi Nguyen
  0 siblings, 0 replies; 70+ messages in thread
From: Thien-Thi Nguyen @ 2008-01-20 20:24 UTC (permalink / raw)
  To: emacs-devel

() Dan Nicolaescu <dann@ics.uci.edu>
() Sun, 20 Jan 2008 09:18:04 -0800

   seems to be the right thing to do.
   If it works, why not check it in?

i have now checked it in.

thi

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 19:24                                   ` Stefan Monnier
@ 2008-01-20 20:30                                     ` Thien-Thi Nguyen
  2008-01-21 15:18                                       ` Stefan Monnier
  0 siblings, 1 reply; 70+ messages in thread
From: Thien-Thi Nguyen @ 2008-01-20 20:30 UTC (permalink / raw)
  To: emacs-devel

() Stefan Monnier <monnier@iro.umontreal.ca>
() Sun, 20 Jan 2008 14:24:57 -0500

   This can't be right: we have no idea what buffer we're in at this point.

you're right.  i have just installed a `with-current-buffer' wrapper.

   > +       (setq mode-line-process " (background)")

   The problem with this is that it's not necessarily clear that we're
   changing mode-line-process in the right buffer either, here.

PROC is taken from (current-buffer).  is that not reliable?

thi

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 20:30                                     ` Thien-Thi Nguyen
@ 2008-01-21 15:18                                       ` Stefan Monnier
  2008-01-21 15:30                                         ` Dan Nicolaescu
  2008-01-21 15:34                                         ` Thien-Thi Nguyen
  0 siblings, 2 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-21 15:18 UTC (permalink / raw)
  To: Thien-Thi Nguyen; +Cc: emacs-devel

>    This can't be right: we have no idea what buffer we're in at this point.

> you're right.  i have just installed a `with-current-buffer' wrapper.

>> +       (setq mode-line-process " (background)")

>    The problem with this is that it's not necessarily clear that we're
>    changing mode-line-process in the right buffer either, here.

> PROC is taken from (current-buffer).  is that not reliable?

It's reliable in that we know which buffer it is, but that doesn't mean
it's the right buffer.  Isn't it often a hidden buffer like *vc* rather
than the vc-status buffer itself?


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-21 15:18                                       ` Stefan Monnier
@ 2008-01-21 15:30                                         ` Dan Nicolaescu
  2008-01-21 15:56                                           ` Stefan Monnier
  2008-01-21 15:34                                         ` Thien-Thi Nguyen
  1 sibling, 1 reply; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-21 15:30 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Thien-Thi Nguyen, emacs-devel

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

  > >    This can't be right: we have no idea what buffer we're in at this point.
  > 
  > > you're right.  i have just installed a `with-current-buffer' wrapper.
  > 
  > >> +       (setq mode-line-process " (background)")
  > 
  > >    The problem with this is that it's not necessarily clear that we're
  > >    changing mode-line-process in the right buffer either, here.
  > 
  > > PROC is taken from (current-buffer).  is that not reliable?
  > 
  > It's reliable in that we know which buffer it is, but that doesn't mean
  > it's the right buffer.  Isn't it often a hidden buffer like *vc* rather
  > than the vc-status buffer itself?

Yep, this seems to work for things like log, diff, annotate, but for
vc-status it does not, because as you say, the status command does not
run in vc-status buffer, but in a hidden temporary buffer.
It seems that a different mechanism is needed for that case.

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-21 15:18                                       ` Stefan Monnier
  2008-01-21 15:30                                         ` Dan Nicolaescu
@ 2008-01-21 15:34                                         ` Thien-Thi Nguyen
  1 sibling, 0 replies; 70+ messages in thread
From: Thien-Thi Nguyen @ 2008-01-21 15:34 UTC (permalink / raw)
  To: emacs-devel

() Stefan Monnier <monnier@iro.umontreal.ca>
() Mon, 21 Jan 2008 10:18:02 -0500

   It's reliable in that we know which buffer it is, but that doesn't
   mean it's the right buffer.  Isn't it often a hidden buffer like *vc*
   rather than the vc-status buffer itself?

I don't know.  I tested w/ vc.el using `C-x v g' so there was no
vc-status buffer.  (Am i missing something?)

What is the scenario where there is a vc-status buffer to worry about?
The change is checked in; please try it and let me know w/ a concrete
(non-hypothetical) test case, for problems you encounter.

Note that the most recent change (checking liveness in then sentinel)
should have nothing to do w/ the original setq mode-line-process.

thi

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-21 15:30                                         ` Dan Nicolaescu
@ 2008-01-21 15:56                                           ` Stefan Monnier
  0 siblings, 0 replies; 70+ messages in thread
From: Stefan Monnier @ 2008-01-21 15:56 UTC (permalink / raw)
  To: Dan Nicolaescu; +Cc: Thien-Thi Nguyen, emacs-devel

>> >    This can't be right: we have no idea what buffer we're in at this point.
>> 
>> > you're right.  i have just installed a `with-current-buffer' wrapper.
>> 
>> >> +       (setq mode-line-process " (background)")
>> 
>> >    The problem with this is that it's not necessarily clear that we're
>> >    changing mode-line-process in the right buffer either, here.
>> 
>> > PROC is taken from (current-buffer).  is that not reliable?
>> 
>> It's reliable in that we know which buffer it is, but that doesn't mean
>> it's the right buffer.  Isn't it often a hidden buffer like *vc* rather
>> than the vc-status buffer itself?

> Yep, this seems to work for things like log, diff, annotate, but for
> vc-status it does not, because as you say, the status command does not
> run in vc-status buffer, but in a hidden temporary buffer.
> It seems that a different mechanism is needed for that case.

Yes, I guess the change is fine, and just needs to be supplemented with
some special code for vc-status.


        Stefan

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

* Re: Introducing 'unrecognized and 'ignored
  2008-01-20 19:45                                       ` Tom Tromey
@ 2008-01-22  1:35                                         ` Dan Nicolaescu
  0 siblings, 0 replies; 70+ messages in thread
From: Dan Nicolaescu @ 2008-01-22  1:35 UTC (permalink / raw)
  To: Tom Tromey; +Cc: esr, harsanyi, Stefan Monnier, rms, emacs-devel

Tom Tromey <tromey@redhat.com> writes:

  > >> I hook into vc-do-command... I'm not sure if that is really a good idea.
  > >> I guess that's why we have patch review :-)
  > 
  > Stefan> I general it doesn't sound like a bad idea, but I'll reserve
  > Stefan> my judgment until I see the code.
  > 
  > Here's the patch I've got.
  > 
  > Note there is a bug fix to vc-update-vc-status-buffer in here... this
  > should go in even if the rest of the patch does not.  You can see this
  > bug by running vc-status in a directory with no modifications and no
  > unrecognized files.
  > 
  > Stefan> PCL-CVS used to clear the ewoc, so I obviously believe it's
  > Stefan> worth the effort to not clear it, so as to preserve mark and
  > Stefan> such.
  > 
  > Yeah.  In general I think vc-status should follow PCL-CVS unless there
  > is a really good reason to be different.

IMHO displaying the command that is running is overkill.  I don't think
VC users would care about it, they just want to see that something is
happening. Generic messages like Updating/Committing/Reading Status
should be enough. (PCL-CVS does print the command, but I personally
never payed attention to what it prints there...).  
Coupled with something that displays the running status in the mode-line
(like it is now done for diff/log/annotate).

About the footer message: I am afraid that it would get the same
opposition as the text at the end of vc-diff recently got.

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

end of thread, other threads:[~2008-01-22  1:35 UTC | newest]

Thread overview: 70+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-28 17:45 Introducing 'unrecognized and 'ignored Eric S. Raymond
2007-12-28 23:01 ` Dan Nicolaescu
2007-12-29  2:48 ` Alexandru Harsanyi
2007-12-29 11:45   ` Eric S. Raymond
2008-01-02  2:02     ` Stefan Monnier
2008-01-02  2:19       ` Eric S. Raymond
2008-01-02  4:16         ` Stefan Monnier
2008-01-02  4:45           ` Dan Nicolaescu
2008-01-02 11:50             ` Eric S. Raymond
2008-01-02 17:31               ` Dan Nicolaescu
2008-01-03  9:50             ` Richard Stallman
2008-01-03 18:05               ` Dan Nicolaescu
2008-01-03 18:19                 ` Eric S. Raymond
2008-01-05  5:54                 ` Richard Stallman
2008-01-05  9:01                   ` Dan Nicolaescu
2008-01-05 14:34                     ` Eric S. Raymond
2008-01-05 22:25                       ` Stefan Monnier
2008-01-06 10:37                       ` Dan Nicolaescu
2008-01-06 15:57                         ` Eric S. Raymond
2008-01-18 23:31                           ` Dan Nicolaescu
2008-01-06 20:00                         ` Tom Tromey
2008-01-06 21:03                           ` Stefan Monnier
2008-01-07  2:59                             ` Dan Nicolaescu
2008-01-07  3:26                               ` Eric S. Raymond
2008-01-07  3:36                                 ` Dan Nicolaescu
2008-01-07  3:59                                 ` Stefan Monnier
2008-01-07 12:56                                   ` Eric S. Raymond
2008-01-07 15:31                                     ` Stefan Monnier
2008-01-07 11:30                                 ` Richard Stallman
2008-01-07 12:54                                   ` Eric S. Raymond
2008-01-07 15:32                                     ` Stefan Monnier
2008-01-08 19:06                                     ` Richard Stallman
2008-01-08 19:34                                       ` Miles Bader
2008-01-07  3:22                           ` Dan Nicolaescu
2008-01-07  3:03                             ` Tom Tromey
2008-01-07  4:01                               ` Stefan Monnier
2008-01-07 21:15                                 ` PCL-CVS buffers (was: Introducing 'unrecognized and 'ignored) Reiner Steib
2008-01-08  2:33                                   ` PCL-CVS buffers Stefan Monnier
2008-01-18 23:46                           ` Introducing 'unrecognized and 'ignored Dan Nicolaescu
2008-01-19  0:10                             ` Tom Tromey
2008-01-19  1:20                               ` Dan Nicolaescu
2008-01-19  6:00                             ` Tom Tromey
2008-01-19 17:05                               ` Dan Nicolaescu
2008-01-19 19:40                                 ` Stefan Monnier
2008-01-19 21:01                                   ` Thien-Thi Nguyen
2008-01-20 17:18                                     ` Dan Nicolaescu
2008-01-20 20:24                                       ` Thien-Thi Nguyen
2008-01-20 17:08                                   ` Dan Nicolaescu
2008-01-20 19:08                                   ` Tom Tromey
2008-01-20 20:14                                     ` Stefan Monnier
2008-01-20 19:45                                       ` Tom Tromey
2008-01-22  1:35                                         ` Dan Nicolaescu
2008-01-19 20:03                                 ` Thien-Thi Nguyen
2008-01-20 19:24                                   ` Stefan Monnier
2008-01-20 20:30                                     ` Thien-Thi Nguyen
2008-01-21 15:18                                       ` Stefan Monnier
2008-01-21 15:30                                         ` Dan Nicolaescu
2008-01-21 15:56                                           ` Stefan Monnier
2008-01-21 15:34                                         ` Thien-Thi Nguyen
2008-01-06  8:09                     ` Richard Stallman
2008-01-02 11:46           ` Eric S. Raymond
2008-01-02 20:38             ` Stefan Monnier
2008-01-02 22:11               ` Eric S. Raymond
2008-01-02 23:06                 ` Stefan Monnier
2008-01-02 23:29                   ` Eric S. Raymond
2008-01-03 14:30                     ` Stefan Monnier
2008-01-03 17:41                       ` Eric S. Raymond
2008-01-05  5:54                         ` Richard Stallman
2008-01-02 23:13                 ` Dan Nicolaescu
2008-01-02 23:33                   ` Eric S. Raymond

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

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

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