On 11/28/15 18:09, Dmitry Gutov wrote: > Please try this definition and see if it resolves the problem: > > (defun vc-hg-previous-revision (_file rev) > (let ((newrev (1- (string-to-number rev)))) > (when (>= newrev 0) > (with-temp-buffer > (vc-hg-command t 0 nil > "id" "--hidden" "-n" "-r" > (format "first(%d:0 and not hidden())" newrev)) > ;; Trim the trailing newline. > (buffer-substring (point-min) (1- (point-max))))))) > >> This says to look at all non-hidden revs from X down to zero, choose the >> first one, and print its numeric rev number. If the current rev is X+1, >> that gives the first previous non-hidden rev. But I'm sure there must >> be a better way, without having to examine all previous changesets. > > If you anticipated that we'd have to make one process call per > revision, then I think the above definition does better. I tried this, and it works fine. But I discovered another problem for VC with the changeset evolution features: if a repository has any changesets that are marked 'obsolete', and any mercurial command is issued by a user who hasn't enabled the extension, a warning message is printed to stderr: obsolete feature not enabled but markers found! If VC grabs this output as part of the mercurial response, and uses it in subsequent commands, it (unsurprisingly) fails: hg: parse error at 9: invalid token Looking at mercurial sources, there's no way to suppress this warning. I guess one workaround would be to have vc-hg-command skip over it if it's there. Glenn