* Patch to make vc-hg.el work with remote files
@ 2009-10-25 17:56 Bernhard Herzog
2009-10-26 2:00 ` Stefan Monnier
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Herzog @ 2009-10-25 17:56 UTC (permalink / raw
To: emacs-devel
Hi,
vc-hg.el doesn't work properly with remote files accessed via tramp. Emacs
doesn't even recognize correctly whether files are managed by hg in those
cases. The patch below fixes this for me.
Regards,
Bernhard
Index: lisp/vc-hg.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-hg.el,v
retrieving revision 1.104
diff -c -u -r1.104 vc-hg.el
--- lisp/vc-hg.el 19 Oct 2009 05:04:28 -0000 1.104
+++ lisp/vc-hg.el 25 Oct 2009 17:52:46 -0000
@@ -159,6 +159,7 @@
"Hg-specific version of `vc-state'."
(let*
((status nil)
+ (default-directory (file-name-directory file))
(out
(with-output-to-string
(with-current-buffer
@@ -166,8 +167,8 @@
(setq status
(condition-case nil
;; Ignore all errors.
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
+ (process-file
+ "hg" nil t nil
"status" "-A" (file-name-nondirectory file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
@@ -190,6 +191,7 @@
"Hg-specific version of `vc-working-revision'."
(let*
((status nil)
+ (default-directory (file-name-directory file))
(out
(with-output-to-string
(with-current-buffer
@@ -197,8 +199,8 @@
(setq status
(condition-case nil
;; Ignore all errors.
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
+ (process-file
+ "hg" nil t nil
"log" "-l1" (file-name-nondirectory file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
@@ -286,7 +288,6 @@
(setq oldvers working))
(apply #'vc-hg-command (or buffer "*vc-diff*") nil
(mapcar (lambda (file) (file-relative-name file cwd)) files)
- "--cwd" cwd
"diff"
(append
(vc-switches 'hg 'diff)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-25 17:56 Patch to make vc-hg.el work with remote files Bernhard Herzog
@ 2009-10-26 2:00 ` Stefan Monnier
2009-10-27 12:01 ` Bernhard Herzog
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2009-10-26 2:00 UTC (permalink / raw
To: Bernhard Herzog; +Cc: emacs-devel
> + (process-file
> + "hg" nil t nil
> "status" "-A" (file-name-nondirectory file))
The canonical way to use process-file is to pass args of the form
(file-relative-name).
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-26 2:00 ` Stefan Monnier
@ 2009-10-27 12:01 ` Bernhard Herzog
2009-10-28 2:07 ` Stefan Monnier
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Herzog @ 2009-10-27 12:01 UTC (permalink / raw
To: emacs-devel
On 26.10.2009, Stefan Monnier wrote:
> > + (process-file
> > + "hg" nil t nil
> > "status" "-A" (file-name-nondirectory file))
>
> The canonical way to use process-file is to pass args of the form
> (file-relative-name).
Indeed. Here's a new patch.
Regards,
Bernhard
Index: lisp/vc-hg.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-hg.el,v
retrieving revision 1.104
diff -u -r1.104 vc-hg.el
--- lisp/vc-hg.el 19 Oct 2009 05:04:28 -0000 1.104
+++ lisp/vc-hg.el 26 Oct 2009 23:33:04 -0000
@@ -159,6 +159,7 @@
"Hg-specific version of `vc-state'."
(let*
((status nil)
+ (default-directory (file-name-directory file))
(out
(with-output-to-string
(with-current-buffer
@@ -166,9 +167,9 @@
(setq status
(condition-case nil
;; Ignore all errors.
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
- "status" "-A" (file-name-nondirectory file))
+ (process-file
+ "hg" nil t nil
+ "status" "-A" (file-relative-name file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(error nil)))))))
@@ -190,6 +191,7 @@
"Hg-specific version of `vc-working-revision'."
(let*
((status nil)
+ (default-directory (file-name-directory file))
(out
(with-output-to-string
(with-current-buffer
@@ -197,9 +199,9 @@
(setq status
(condition-case nil
;; Ignore all errors.
- (call-process
- "hg" nil t nil "--cwd" (file-name-directory file)
- "log" "-l1" (file-name-nondirectory file))
+ (process-file
+ "hg" nil t nil
+ "log" "-l1" (file-relative-name file))
;; Some problem happened. E.g. We can't find an `hg'
;; executable.
(error nil)))))))
@@ -286,7 +288,6 @@
(setq oldvers working))
(apply #'vc-hg-command (or buffer "*vc-diff*") nil
(mapcar (lambda (file) (file-relative-name file cwd)) files)
- "--cwd" cwd
"diff"
(append
(vc-switches 'hg 'diff)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-27 12:01 ` Bernhard Herzog
@ 2009-10-28 2:07 ` Stefan Monnier
2009-10-28 18:05 ` Bernhard Herzog
2009-11-02 22:00 ` Sam Steingold
0 siblings, 2 replies; 9+ messages in thread
From: Stefan Monnier @ 2009-10-28 2:07 UTC (permalink / raw
To: Bernhard Herzog; +Cc: emacs-devel
> Indeed. Here's a new patch.
Thanks, installed. But I wonder about the last hunk of your patch:
> @@ -286,7 +288,6 @@
> (setq oldvers working))
> (apply #'vc-hg-command (or buffer "*vc-diff*") nil
> (mapcar (lambda (file) (file-relative-name file cwd)) files)
> - "--cwd" cwd
> "diff"
> (append
> (vc-switches 'hg 'diff)
What is the reason for it?
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-28 2:07 ` Stefan Monnier
@ 2009-10-28 18:05 ` Bernhard Herzog
2009-11-02 21:34 ` Bernhard Herzog
2009-11-02 22:00 ` Sam Steingold
1 sibling, 1 reply; 9+ messages in thread
From: Bernhard Herzog @ 2009-10-28 18:05 UTC (permalink / raw
To: emacs-devel; +Cc: Stefan Monnier
On 28.10.2009, Stefan Monnier wrote:
> > Indeed. Here's a new patch.
>
> Thanks, installed.
Great!
> But I wonder about the last hunk of your patch:
> > @@ -286,7 +288,6 @@
> > (setq oldvers working))
> > (apply #'vc-hg-command (or buffer "*vc-diff*") nil
> > (mapcar (lambda (file) (file-relative-name file cwd)) files)
> > - "--cwd" cwd
> > "diff"
> > (append
> > (vc-switches 'hg 'diff)
>
> What is the reason for it?
The reason I changed vc-hg-diff at all was that it doesn't work correctly with
tramp. cwd is the name of the directory containing the file to diff and if
file is on a remote system it's a tramp filename which mercurial doesn't
understand, of course.
I've looked a bit closer at it now and AFAICT vc-hg-diff can be made even
simpler and probably more correct by passing files unmodified to
vc-hg-command. I don't have the time right now to test and produce a better
patch, though. I hope to get around to that tomorrow.
Does anybody know why in vc-hg.el vc-hg-command is sometimes called directly
and sometimes via apply?
Regards
Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-28 18:05 ` Bernhard Herzog
@ 2009-11-02 21:34 ` Bernhard Herzog
2009-11-02 21:58 ` Dan Nicolaescu
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Herzog @ 2009-11-02 21:34 UTC (permalink / raw
To: emacs-devel; +Cc: Stefan Monnier
On 28.10.2009, Bernhard Herzog wrote:
> I've looked a bit closer at it now and AFAICT vc-hg-diff can be made even
> simpler and probably more correct by passing files unmodified to
> vc-hg-command. I don't have the time right now to test and produce a
> better patch, though. I hope to get around to that tomorrow.
It took a while longer, but here's the new patch:
Index: lisp/vc-hg.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc-hg.el,v
retrieving revision 1.105
diff -u -r1.105 vc-hg.el
--- lisp/vc-hg.el 28 Oct 2009 02:05:50 -0000 1.105
+++ lisp/vc-hg.el 2 Nov 2009 21:16:15 -0000
@@ -279,16 +279,12 @@
(defun vc-hg-diff (files &optional oldvers newvers buffer)
"Get a difference report using hg between two revisions of FILES."
(let* ((firstfile (car files))
- (cwd (if firstfile (file-name-directory firstfile)
- (expand-file-name default-directory)))
(working (and firstfile (vc-working-revision firstfile))))
(when (and (equal oldvers working) (not newvers))
(setq oldvers nil))
(when (and (not oldvers) newvers)
(setq oldvers working))
- (apply #'vc-hg-command (or buffer "*vc-diff*") nil
- (mapcar (lambda (file) (file-relative-name file cwd)) files)
- "diff"
+ (apply #'vc-hg-command (or buffer "*vc-diff*") nil files "diff"
(append
(vc-switches 'hg 'diff)
(when oldvers
regards
Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-11-02 21:34 ` Bernhard Herzog
@ 2009-11-02 21:58 ` Dan Nicolaescu
2009-11-02 23:52 ` Bernhard Herzog
0 siblings, 1 reply; 9+ messages in thread
From: Dan Nicolaescu @ 2009-11-02 21:58 UTC (permalink / raw
To: Bernhard Herzog; +Cc: Stefan Monnier, emacs-devel
Bernhard Herzog <bernhard.herzog@intevation.de> writes:
> On 28.10.2009, Bernhard Herzog wrote:
> > I've looked a bit closer at it now and AFAICT vc-hg-diff can be made even
> > simpler and probably more correct by passing files unmodified to
> > vc-hg-command. I don't have the time right now to test and produce a
> > better patch, though. I hope to get around to that tomorrow.
>
> It took a while longer, but here's the new patch:
Was this tested with filesets that contain: multiple files, multiple
directories and a mix of files and directories. And starting
from a subdirectory of the Hg root?
The previous change caused this regression:
http://permalink.gmane.org/gmane.emacs.devel/116585
does this patch fix it?
> Index: lisp/vc-hg.el
> ===================================================================
> RCS file: /sources/emacs/emacs/lisp/vc-hg.el,v
> retrieving revision 1.105
> diff -u -r1.105 vc-hg.el
> --- lisp/vc-hg.el 28 Oct 2009 02:05:50 -0000 1.105
> +++ lisp/vc-hg.el 2 Nov 2009 21:16:15 -0000
> @@ -279,16 +279,12 @@
> (defun vc-hg-diff (files &optional oldvers newvers buffer)
> "Get a difference report using hg between two revisions of FILES."
> (let* ((firstfile (car files))
> - (cwd (if firstfile (file-name-directory firstfile)
> - (expand-file-name default-directory)))
> (working (and firstfile (vc-working-revision firstfile))))
> (when (and (equal oldvers working) (not newvers))
> (setq oldvers nil))
> (when (and (not oldvers) newvers)
> (setq oldvers working))
> - (apply #'vc-hg-command (or buffer "*vc-diff*") nil
> - (mapcar (lambda (file) (file-relative-name file cwd)) files)
> - "diff"
> + (apply #'vc-hg-command (or buffer "*vc-diff*") nil files "diff"
> (append
> (vc-switches 'hg 'diff)
> (when oldvers
>
> regards
>
> Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-10-28 2:07 ` Stefan Monnier
2009-10-28 18:05 ` Bernhard Herzog
@ 2009-11-02 22:00 ` Sam Steingold
1 sibling, 0 replies; 9+ messages in thread
From: Sam Steingold @ 2009-11-02 22:00 UTC (permalink / raw
To: Stefan Monnier; +Cc: Bernhard Herzog, emacs-devel
Stefan Monnier wrote:
>> Indeed. Here's a new patch.
>
> Thanks, installed. But I wonder about the last hunk of your patch:
this broke diff:
vc-hg.el revision 1.105 is broken: "=" in *vc-dir* now results in
"<filename>: No such file or directory"
in *vc-diff* (at least when the filename is located in a subdir, not at the top
level directory).
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Patch to make vc-hg.el work with remote files
2009-11-02 21:58 ` Dan Nicolaescu
@ 2009-11-02 23:52 ` Bernhard Herzog
0 siblings, 0 replies; 9+ messages in thread
From: Bernhard Herzog @ 2009-11-02 23:52 UTC (permalink / raw
To: Dan Nicolaescu; +Cc: Stefan Monnier, emacs-devel
Dan Nicolaescu <dann@ics.uci.edu> writes:
> Bernhard Herzog <bernhard.herzog@intevation.de> writes:
>
> > On 28.10.2009, Bernhard Herzog wrote:
> > > I've looked a bit closer at it now and AFAICT vc-hg-diff can be made even
> > > simpler and probably more correct by passing files unmodified to
> > > vc-hg-command. I don't have the time right now to test and produce a
> > > better patch, though. I hope to get around to that tomorrow.
> >
> > It took a while longer, but here's the new patch:
>
> Was this tested with filesets that contain: multiple files, multiple
> directories and a mix of files and directories. And starting
> from a subdirectory of the Hg root?
> The previous change caused this regression:
> http://permalink.gmane.org/gmane.emacs.devel/116585
> does this patch fix it?
I've tested various combinations of files and directories from vc-dir
and some commands (e.g. C-c v =) from within a buffer visiting a file
managed by mercurial. They all worked correctly. I may have missed
some cases, though. I was able to reproduce the regression reported in
the mail you referred to, but with my patch it's fixed.
Regards
Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-11-02 23:52 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-25 17:56 Patch to make vc-hg.el work with remote files Bernhard Herzog
2009-10-26 2:00 ` Stefan Monnier
2009-10-27 12:01 ` Bernhard Herzog
2009-10-28 2:07 ` Stefan Monnier
2009-10-28 18:05 ` Bernhard Herzog
2009-11-02 21:34 ` Bernhard Herzog
2009-11-02 21:58 ` Dan Nicolaescu
2009-11-02 23:52 ` Bernhard Herzog
2009-11-02 22:00 ` Sam Steingold
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.