unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
@ 2020-02-01  0:13 Wolfgang Scherer
  2020-02-01  7:20 ` Dmitry Gutov
  2020-02-01  7:20 ` Dmitry Gutov
  0 siblings, 2 replies; 17+ messages in thread
From: Wolfgang Scherer @ 2020-02-01  0:13 UTC (permalink / raw)
  To: 39380

Here is another per-tree/per-directory bug, I just found:

1. Prepare a Mercurial repository `check-hgs` with sub directories `sub1`
   and `sub2` and the files `sub1/a`, `sub2/x`,

   .. code-block:: sh

      mkdir -p check-hgs/sub1 check-hgs/sub2
      touch check-hgs/sub1/a check-hgs/sub2/x
      cd check-hgs && hg init

2. Find file `check-hgs/sub1/a`.

3. Press `C-x v d RET`, which will show a "Working dir" different from "Root":

   .. code-block:: text

      Working dir: check-hgs/sub1/
      Root       : check-hgs

                           ./
                           sub1/
      unregistered         sub1/a
                           sub2/
      unregistered         sub2/x

4. Go to line

   "unregistered         sub2/x"

   and press `f`.

5. Press `C-x d`.

   The default directory is "check-hgs/sub1/sub2/", which is wrong. It
   should be "check-hgs/sub2/".

The problem results from the call to `expand-file-name` in
`vc-dir-current-file`, which uses the default directory, but
`vc-dir-fileinfo->name` delivers a filename relative to the root
directory.

.. code-block:: elisp

   (defun vc-dir-current-file ()
     (let ((node (ewoc-locate vc-ewoc)))
       (unless node
     (error "No file available"))
       (expand-file-name (vc-dir-fileinfo->name (ewoc-data node)))))


However, modifying `vc-dir-current-file` does not solve the problem,
since all other invocations of `vc-dir-fileinfo->name` ultimately
suffer from the same deficiency.

It is IMHO better to remove the hybrid state of `vc-dir-mode`, where
the default directory is different from the root directory.
“

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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-01  0:13 bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails Wolfgang Scherer
@ 2020-02-01  7:20 ` Dmitry Gutov
  2020-02-02 22:35   ` Wolfgang Scherer
  2020-02-01  7:20 ` Dmitry Gutov
  1 sibling, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-01  7:20 UTC (permalink / raw)
  To: Wolfgang Scherer, 39380

On 01.02.2020 3:13, Wolfgang Scherer wrote:
> 3. Press `C-x v d RET`, which will show a "Working dir" different from "Root":
> 
>     .. code-block:: text
> 
>        Working dir: check-hgs/sub1/
>        Root       : check-hgs
> 
>                             ./
>                             sub1/
>        unregistered         sub1/a
>                             sub2/
>        unregistered         sub2/x

Maybe this should be fixed in vc-hg-status-files by not showing 
"outside" files and using proper relative names.

Compare how VC-Dir works with Git: when you open it in a subdirectory, 
it only shows changed files in that directory, and with proper relative 
names.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-01  0:13 bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails Wolfgang Scherer
  2020-02-01  7:20 ` Dmitry Gutov
@ 2020-02-01  7:20 ` Dmitry Gutov
  1 sibling, 0 replies; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-01  7:20 UTC (permalink / raw)
  To: Wolfgang Scherer, 39380

On 01.02.2020 3:13, Wolfgang Scherer wrote:
> It is IMHO better to remove the hybrid state of `vc-dir-mode`, where
> the default directory is different from the root directory

If you mean to always open VC-Dir in repository roots, I'm not sure we 
can do that.

We had a discussion about that at one point (purely for reasons of 
usability), and turns out some people routinely open VC-Dir in 
subdirectories. To focus on a subset of a project, or whatever.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-01  7:20 ` Dmitry Gutov
@ 2020-02-02 22:35   ` Wolfgang Scherer
  2020-02-03 13:11     ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Wolfgang Scherer @ 2020-02-02 22:35 UTC (permalink / raw)
  To: Dmitry Gutov, 39380


Am 01.02.20 um 08:20 schrieb Dmitry Gutov:
> On 01.02.2020 3:13, Wolfgang Scherer wrote:
>> 3. Press `C-x v d RET`, which will show a "Working dir" different from "Root":
>>
>>     .. code-block:: text
>>
>>        Working dir: check-hgs/sub1/
>>        Root       : check-hgs
>>
>>                             ./
>>                             sub1/
>>        unregistered         sub1/a
>>                             sub2/
>>        unregistered         sub2/x
>
> Maybe this should be fixed in vc-hg-status-files by not showing "outside" files and using proper relative names.
>
> Compare how VC-Dir works with Git: when you open it in a subdirectory, it only shows changed files in that directory, and with proper relative names.

The behavior should be consistent. In Emacs 24/25 vc-dir-mode for Mercurial behaved exactly like Git. Since the behavior for Mercurial changed some time after Emacs 24, I just assumed (probably because of my bias towards `dvc`) that the new behavior was intended.

I really have no preference how the faulty behavior is fixed, since I have long since defined some advice before `vc-dir-prepare-status-buffer`. I have also not checked the documentation to find out what the intended behavior is.


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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-02 22:35   ` Wolfgang Scherer
@ 2020-02-03 13:11     ` Dmitry Gutov
  2020-02-04 16:04       ` Wolfgang Scherer
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-03 13:11 UTC (permalink / raw)
  To: Wolfgang Scherer, 39380

On 03.02.2020 1:35, Wolfgang Scherer wrote:
> 
> Am 01.02.20 um 08:20 schrieb Dmitry Gutov:
>> On 01.02.2020 3:13, Wolfgang Scherer wrote:
>>> 3. Press `C-x v d RET`, which will show a "Working dir" different from "Root":
>>>
>>>      .. code-block:: text
>>>
>>>         Working dir: check-hgs/sub1/
>>>         Root       : check-hgs
>>>
>>>                              ./
>>>                              sub1/
>>>         unregistered         sub1/a
>>>                              sub2/
>>>         unregistered         sub2/x
>>
>> Maybe this should be fixed in vc-hg-status-files by not showing "outside" files and using proper relative names.
>>
>> Compare how VC-Dir works with Git: when you open it in a subdirectory, it only shows changed files in that directory, and with proper relative names.
> 
> The behavior should be consistent.

Right.

> In Emacs 24/25 vc-dir-mode for Mercurial behaved exactly like Git. Since the behavior for Mercurial changed some time after Emacs 24, I just assumed (probably because of my bias towards `dvc`) that the new behavior was intended.

In 25 or 26 Daniel added a Lisp-based faster implementation for some 
commands (de76a167dc09dc695a5acebabb7ab354a6bf556e) since apparently Hg 
itself was too slow.

So this bug must have arrived with that implementation.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-03 13:11     ` Dmitry Gutov
@ 2020-02-04 16:04       ` Wolfgang Scherer
  2020-02-05 15:56         ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Wolfgang Scherer @ 2020-02-04 16:04 UTC (permalink / raw)
  To: Dmitry Gutov, 39380


Am 03.02.20 um 14:11 schrieb Dmitry Gutov:
> On 03.02.2020 1:35, Wolfgang Scherer wrote:
>>
>> Am 01.02.20 um 08:20 schrieb Dmitry Gutov:
>>> On 01.02.2020 3:13, Wolfgang Scherer wrote:
>>>> 3. Press `C-x v d RET`, which will show a "Working dir" different from "Root":
>>>>
>>>>      .. code-block:: text
>>>>
>>>>         Working dir: check-hgs/sub1/
>>>>         Root       : check-hgs
>>>>
>>>>                              ./
>>>>                              sub1/
>>>>         unregistered         sub1/a
>>>>                              sub2/
>>>>         unregistered         sub2/x
>>>
>>> Maybe this should be fixed in vc-hg-status-files by not showing "outside" files and using proper relative names.
>>>
>>> Compare how VC-Dir works with Git: when you open it in a subdirectory, it only shows changed files in that directory, and with proper relative names.
>>
>> The behavior should be consistent.
>
> Right.
>
>> In Emacs 24/25 vc-dir-mode for Mercurial behaved exactly like Git. Since the behavior for Mercurial changed some time after Emacs 24, I just assumed (probably because of my bias towards `dvc`) that the new behavior was intended.
>
> In 25 or 26 Daniel added a Lisp-based faster implementation for some commands (de76a167dc09dc695a5acebabb7ab354a6bf556e) since apparently Hg itself was too slow.
>
> So this bug must have arrived with that implementation.


Reverting de76a167dc09dc695a5acebabb7ab354a6bf556e does not change anything for me.

I had to revert 06083cf41c473404d246de9b91a0116f38c5485f to restore the correct behavior:

Author: Dmitry Gutov <dgutov@yandex.ru>
Date:   Sat Jan 30 06:55:32 2016 +0300

    Don't pass DIR to 'hg status'
   
    * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
    Don't pass DIR to 'hg status' (bug#22481).






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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-04 16:04       ` Wolfgang Scherer
@ 2020-02-05 15:56         ` Dmitry Gutov
  2020-02-06 13:25           ` Wolfgang Scherer
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-05 15:56 UTC (permalink / raw)
  To: Wolfgang Scherer, 39380

On 04.02.2020 19:04, Wolfgang Scherer wrote:
> Reverting de76a167dc09dc695a5acebabb7ab354a6bf556e does not change anything for me.
> 
> I had to revert 06083cf41c473404d246de9b91a0116f38c5485f to restore the correct behavior:
> 
> Author: Dmitry Gutov<dgutov@yandex.ru>
> Date:   Sat Jan 30 06:55:32 2016 +0300
> 
>      Don't pass DIR to 'hg status'
>     
>      * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
>      Don't pass DIR to 'hg status' (bug#22481).

Good catch, thank you. Could you try this patch?

diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index c9a2cb412e..a91e1f5ad6 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1352,14 +1352,14 @@ vc-hg-after-dir-status
  ;; Follows vc-exec-after.
  (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))

-(defun vc-hg-dir-status-files (_dir files update-function)
+(defun vc-hg-dir-status-files (dir files update-function)
    ;; XXX: We can't pass DIR directly to 'hg status' because that
    ;; returns all ignored files if FILES is non-nil (bug#22481).
-  ;; If honoring DIR ever becomes important, try using '-I DIR/'.
-  (vc-hg-command (current-buffer) 'async files
-                 "status"
-                 (concat "-mardu" (if files "i"))
-                 "-C")
+  (let ((default-directory dir))
+    (vc-hg-command (current-buffer) 'async files
+                   "status" "re:" "-I" "."
+                   (concat "-mardu" (if files "i"))
+                   "-C"))
    (vc-run-delayed
      (vc-hg-after-dir-status update-function)))






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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-05 15:56         ` Dmitry Gutov
@ 2020-02-06 13:25           ` Wolfgang Scherer
  2020-02-06 13:38             ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Wolfgang Scherer @ 2020-02-06 13:25 UTC (permalink / raw)
  To: Dmitry Gutov, 39380


Am 05.02.20 um 16:56 schrieb Dmitry Gutov:
> On 04.02.2020 19:04, Wolfgang Scherer wrote:
>> Reverting de76a167dc09dc695a5acebabb7ab354a6bf556e does not change anything for me.
>>
>> I had to revert 06083cf41c473404d246de9b91a0116f38c5485f to restore the correct behavior:
>>
> Good catch, thank you. Could you try this patch?
>
Works fine. Directory listing in vc-dir-mode is truncated at sub-directory. Files are processed correctly.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-06 13:25           ` Wolfgang Scherer
@ 2020-02-06 13:38             ` Dmitry Gutov
  2020-02-07  9:53               ` Eli Zaretskii
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-06 13:38 UTC (permalink / raw)
  To: Wolfgang Scherer, 39380

On 06.02.2020 16:25, Wolfgang Scherer wrote:
> 
> Am 05.02.20 um 16:56 schrieb Dmitry Gutov:
>> On 04.02.2020 19:04, Wolfgang Scherer wrote:
>>> Reverting de76a167dc09dc695a5acebabb7ab354a6bf556e does not change anything for me.
>>>
>>> I had to revert 06083cf41c473404d246de9b91a0116f38c5485f to restore the correct behavior:
>>>
>> Good catch, thank you. Could you try this patch?
>>
> Works fine. Directory listing in vc-dir-mode is truncated at sub-directory. Files are processed correctly.

Very good.

Eli, I'd like to get it into emacs-27. OK?





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-06 13:38             ` Dmitry Gutov
@ 2020-02-07  9:53               ` Eli Zaretskii
  2020-02-07 11:03                 ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2020-02-07  9:53 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 39380, Wolfgang.Scherer

> Cc: Eli Zaretskii <eliz@gnu.org>
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Thu, 6 Feb 2020 16:38:54 +0300
> 
> >> Good catch, thank you. Could you try this patch?
> >>
> > Works fine. Directory listing in vc-dir-mode is truncated at sub-directory. Files are processed correctly.
> 
> Very good.
> 
> Eli, I'd like to get it into emacs-27. OK?

I'll have to ask you to walk me through the change and explain how it
solves the original issue.

I tried to figure that out myself, but it's too hard: the patch has no
log message, the function being changed has no doc string which could
describe its contract, and the Mercurial documentation I've read seems
to contradict what you are doing (e.g., it says "re:" should be
immediately followed by a regexp).  Sorry, I cannot make up my mind
whether this is a safe change without understanding it better.

Thanks.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-07  9:53               ` Eli Zaretskii
@ 2020-02-07 11:03                 ` Dmitry Gutov
  2020-02-07 14:00                   ` Eli Zaretskii
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-07 11:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 39380, Wolfgang.Scherer

On 07.02.2020 12:53, Eli Zaretskii wrote:
> I'll have to ask you to walk me through the change and explain how it
> solves the original issue.

There are two changes:

1. Having the returned file names relative to the working dir instead of 
the repository root. For that, we change 'hg status' to 'hg status re:'.

2. Only including the files inside the working dir in the output. That 
happens by adding '-I .' to the arguments. Otherwise, Mercurial adds, in 
the presented scenario, an entry like '../sub2/x', which is extraneous.

> the Mercurial documentation I've read seems
> to contradict what you are doing (e.g., it says "re:" should be
> immediately followed by a regexp).

You can search the manual for "hg status re:".

I agree it's a bit unclear (it also mentions "hg help patterns" for some 
reason), but here's an SO answer that got me this far: 
https://stackoverflow.com/a/46743585/615245





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-07 11:03                 ` Dmitry Gutov
@ 2020-02-07 14:00                   ` Eli Zaretskii
  2020-02-08  1:20                     ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2020-02-07 14:00 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 39380, Wolfgang.Scherer

> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Fri, 7 Feb 2020 14:03:21 +0300
> 
> On 07.02.2020 12:53, Eli Zaretskii wrote:
> > I'll have to ask you to walk me through the change and explain how it
> > solves the original issue.
> 
> There are two changes:
> 
> 1. Having the returned file names relative to the working dir instead of 
> the repository root. For that, we change 'hg status' to 'hg status re:'.

Why do we want the file names to be relative?  If default-directory of
the buffer is set correctly, that shouldn't be necessary, and if the
file names are absolute, then the default-directory doesn't even
matter much.

> 2. Only including the files inside the working dir in the output. That 
> happens by adding '-I .' to the arguments. Otherwise, Mercurial adds, in 
> the presented scenario, an entry like '../sub2/x', which is extraneous.

This change should be in NEWS, IMO.

> > the Mercurial documentation I've read seems
> > to contradict what you are doing (e.g., it says "re:" should be
> > immediately followed by a regexp).
> 
> You can search the manual for "hg status re:".

Which only finds a single example, where this notation is not
explained at all (and which I already saw).

> I agree it's a bit unclear (it also mentions "hg help patterns" for some 
> reason), but here's an SO answer that got me this far: 
> https://stackoverflow.com/a/46743585/615245

Isn't it disturbing that we are using a feature that doesn't seem to
be documented?

But to get to the issue at hand: you are saying that "C-x v d" in a
subdirectory of the root of a Mercurial repository became broken in
Emacs 25.1?

Also, is DIR guaranteed to be the directory where FILES live?





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-07 14:00                   ` Eli Zaretskii
@ 2020-02-08  1:20                     ` Dmitry Gutov
  2020-02-08  8:04                       ` Eli Zaretskii
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-08  1:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 39380, Wolfgang.Scherer

On 07.02.2020 17:00, Eli Zaretskii wrote:
>> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Fri, 7 Feb 2020 14:03:21 +0300
>>
>> On 07.02.2020 12:53, Eli Zaretskii wrote:
>>> I'll have to ask you to walk me through the change and explain how it
>>> solves the original issue.
>>
>> There are two changes:
>>
>> 1. Having the returned file names relative to the working dir instead of
>> the repository root. For that, we change 'hg status' to 'hg status re:'.
> 
> Why do we want the file names to be relative?  If default-directory of
> the buffer is set correctly, that shouldn't be necessary, and if the
> file names are absolute, then the default-directory doesn't even
> matter much.

They are already relative, but against the repository root.

And people want to open vc-dir buffers in any directory, not just in 
repository roots.

We could force the file names to be absolute, and then pipe them through 
file-relative-name, but that's just extra work.

>> 2. Only including the files inside the working dir in the output. That
>> happens by adding '-I .' to the arguments. Otherwise, Mercurial adds, in
>> the presented scenario, an entry like '../sub2/x', which is extraneous.
> 
> This change should be in NEWS, IMO.

It's a bugfix for an older, unintended change. It's not a new behavior.

>>> the Mercurial documentation I've read seems
>>> to contradict what you are doing (e.g., it says "re:" should be
>>> immediately followed by a regexp).
>>
>> You can search the manual for "hg status re:".
> 
> Which only finds a single example, where this notation is not
> explained at all (and which I already saw).

Not my fault.

>> I agree it's a bit unclear (it also mentions "hg help patterns" for some
>> reason), but here's an SO answer that got me this far:
>> https://stackoverflow.com/a/46743585/615245
> 
> Isn't it disturbing that we are using a feature that doesn't seem to
> be documented?

It's been there for enough years, and it's the best choice I've found so 
far.

> But to get to the issue at hand: you are saying that "C-x v d" in a
> subdirectory of the root of a Mercurial repository became broken in
> Emacs 25.1?
> 
> Also, is DIR guaranteed to be the directory where FILES live?

Yes, see the description of dir-status-files in the top commentary in vc.el.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-08  1:20                     ` Dmitry Gutov
@ 2020-02-08  8:04                       ` Eli Zaretskii
  2020-02-08  9:36                         ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2020-02-08  8:04 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 39380, Wolfgang.Scherer

> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Sat, 8 Feb 2020 04:20:26 +0300
> 
> On 07.02.2020 17:00, Eli Zaretskii wrote:
> >> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
> >> From: Dmitry Gutov <dgutov@yandex.ru>
> >> Date: Fri, 7 Feb 2020 14:03:21 +0300
> >>
> >> On 07.02.2020 12:53, Eli Zaretskii wrote:
> >>> I'll have to ask you to walk me through the change and explain how it
> >>> solves the original issue.
> >>
> >> There are two changes:
> >>
> >> 1. Having the returned file names relative to the working dir instead of
> >> the repository root. For that, we change 'hg status' to 'hg status re:'.
> > 
> > Why do we want the file names to be relative?  If default-directory of
> > the buffer is set correctly, that shouldn't be necessary, and if the
> > file names are absolute, then the default-directory doesn't even
> > matter much.
> 
> They are already relative, but against the repository root.
> 
> And people want to open vc-dir buffers in any directory, not just in 
> repository roots.

If I say "hg status" in a subdirectory, I by default get file names
relative to the root.  Wouldn't Mercurial users be surprised that
Emacs produces a different display?  (I understand that there's a
recent tendency to make it easier to produce relative file names, and
there's even a config option to make that the default, but I'm asking
whether we should force this behavior on users even if their
preference is not to.)

> We could force the file names to be absolute, and then pipe them through 
> file-relative-name, but that's just extra work.

I'm more bothered by the user-facing changes in this respect than by
algorithmic details.  Would it work to set the default-directory of
the buffer to the repository's root instead? would that solve the
original problem?

If setting the default-directory could be a solution, I'd prefer doing
that on the release branch, so that user-facing behavior is unchanged.
We could then make changes on master to offer a defcustom that is
parallel to the commands.status.relative config setting, and if that's
set to prefer relative names, use your modified code.  WDYT?

> > This change should be in NEWS, IMO.
> 
> It's a bugfix for an older, unintended change. It's not a new behavior.

It changes how files are presented to the user, so I think it has
user-visible effects that should be mentioned in NEWS.

> > Also, is DIR guaranteed to be the directory where FILES live?
> 
> Yes, see the description of dir-status-files in the top commentary in vc.el.

Thanks.

What about this question:

> you are saying that "C-x v d" in a subdirectory of the root of a
> Mercurial repository became broken in Emacs 25.1?





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-08  8:04                       ` Eli Zaretskii
@ 2020-02-08  9:36                         ` Dmitry Gutov
  2020-02-08 10:11                           ` Eli Zaretskii
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-08  9:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 39380, Wolfgang.Scherer

On 08.02.2020 11:04, Eli Zaretskii wrote:

>> And people want to open vc-dir buffers in any directory, not just in
>> repository roots.
> 
> If I say "hg status" in a subdirectory, I by default get file names
> relative to the root.  Wouldn't Mercurial users be surprised that
> Emacs produces a different display?  (I understand that there's a
> recent tendency to make it easier to produce relative file names, and
> there's even a config option to make that the default, but I'm asking
> whether we should force this behavior on users even if their
> preference is not to.)

VC is intended to provide a unified interface across backends, even if 
it's at times different from the "native" behaviors.

Anyway, it's very easy to get the names against the root anyway: just 
open VC-Dir there. And it's the default input: M-x vc-dir RET.

>> We could force the file names to be absolute, and then pipe them through
>> file-relative-name, but that's just extra work.
> 
> I'm more bothered by the user-facing changes in this respect than by
> algorithmic details.  Would it work to set the default-directory of
> the buffer to the repository's root instead? would that solve the
> original problem?

Again, it's a bugfix. VC-Dir expects this, other backends work like 
this, and vc-hg worked like this until Emacs 24 or 25.

And the present behavior makes VC-Dir have broken behavior.

There are only two possible reasons the buggy behavior wasn't noticed: 
a) Hg users are a minority among our users, b) most people open VC-Dir 
in repository root anyway. IOW, the difference wasn't triggered/seen.

>>> This change should be in NEWS, IMO.
>>
>> It's a bugfix for an older, unintended change. It's not a new behavior.
> 
> It changes how files are presented to the user, so I think it has
> user-visible effects that should be mentioned in NEWS.

I don't mind adding some NEWS entry, but, like said above, the users 
likely didn't see the change.

> What about this question:
> 
>> you are saying that "C-x v d" in a subdirectory of the root of a
>> Mercurial repository became broken in Emacs 25.1?

Yes. :-(





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-08  9:36                         ` Dmitry Gutov
@ 2020-02-08 10:11                           ` Eli Zaretskii
  2020-02-11 22:36                             ` Dmitry Gutov
  0 siblings, 1 reply; 17+ messages in thread
From: Eli Zaretskii @ 2020-02-08 10:11 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: 39380, Wolfgang.Scherer

> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
> From: Dmitry Gutov <dgutov@yandex.ru>
> Date: Sat, 8 Feb 2020 12:36:46 +0300
> 
> > If I say "hg status" in a subdirectory, I by default get file names
> > relative to the root.  Wouldn't Mercurial users be surprised that
> > Emacs produces a different display?  (I understand that there's a
> > recent tendency to make it easier to produce relative file names, and
> > there's even a config option to make that the default, but I'm asking
> > whether we should force this behavior on users even if their
> > preference is not to.)
> 
> VC is intended to provide a unified interface across backends, even if 
> it's at times different from the "native" behaviors.
> 
> Anyway, it's very easy to get the names against the root anyway: just 
> open VC-Dir there. And it's the default input: M-x vc-dir RET.

OK.





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

* bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails
  2020-02-08 10:11                           ` Eli Zaretskii
@ 2020-02-11 22:36                             ` Dmitry Gutov
  0 siblings, 0 replies; 17+ messages in thread
From: Dmitry Gutov @ 2020-02-11 22:36 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 39380-done, Wolfgang.Scherer

Version: 27.1

On 08.02.2020 12:11, Eli Zaretskii wrote:
>> Cc: 39380@debbugs.gnu.org, Wolfgang.Scherer@gmx.de
>> From: Dmitry Gutov <dgutov@yandex.ru>
>> Date: Sat, 8 Feb 2020 12:36:46 +0300
>>
>>> If I say "hg status" in a subdirectory, I by default get file names
>>> relative to the root.  Wouldn't Mercurial users be surprised that
>>> Emacs produces a different display?  (I understand that there's a
>>> recent tendency to make it easier to produce relative file names, and
>>> there's even a config option to make that the default, but I'm asking
>>> whether we should force this behavior on users even if their
>>> preference is not to.)
>>
>> VC is intended to provide a unified interface across backends, even if
>> it's at times different from the "native" behaviors.
>>
>> Anyway, it's very easy to get the names against the root anyway: just
>> open VC-Dir there. And it's the default input: M-x vc-dir RET.
> 
> OK.

Taking this as the approval of the patch, pushed.

Using "re:" adds a bit of a performance overhead, but it's probably not 
really noticeable on small-to-medium projects (and on a big one it was 
~100ms where without it dir-status-files takes ~1s).





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

end of thread, other threads:[~2020-02-11 22:36 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-01  0:13 bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails Wolfgang Scherer
2020-02-01  7:20 ` Dmitry Gutov
2020-02-02 22:35   ` Wolfgang Scherer
2020-02-03 13:11     ` Dmitry Gutov
2020-02-04 16:04       ` Wolfgang Scherer
2020-02-05 15:56         ` Dmitry Gutov
2020-02-06 13:25           ` Wolfgang Scherer
2020-02-06 13:38             ` Dmitry Gutov
2020-02-07  9:53               ` Eli Zaretskii
2020-02-07 11:03                 ` Dmitry Gutov
2020-02-07 14:00                   ` Eli Zaretskii
2020-02-08  1:20                     ` Dmitry Gutov
2020-02-08  8:04                       ` Eli Zaretskii
2020-02-08  9:36                         ` Dmitry Gutov
2020-02-08 10:11                           ` Eli Zaretskii
2020-02-11 22:36                             ` Dmitry Gutov
2020-02-01  7:20 ` Dmitry Gutov

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