[PATCH python-hglib] Add feature to allow hglib user to get call backs for prompts and output
Yuya Nishihara
yuya at tcha.org
Tue Oct 18 09:11:13 EDT 2016
On Tue, 18 Oct 2016 11:27:00 +0100, Barry Scott wrote:
> > On 16 Oct 2016, at 15:36, Yuya Nishihara <yuya at tcha.org> wrote:
> > On Thu, 06 Oct 2016 17:52:38 +0100, Barry A. Scott wrote:
> >> # HG changeset patch
> >> # User Barry A. Scott <barry at barrys-emacs.org>
> >> # Date 1475772736 -3600
> >> # Thu Oct 06 17:52:16 2016 +0100
> >> # Branch hglib-gui-features
> >> # Node ID 1ac3819a61527836d47f7cd6a113b194c307ffeb
> >> # Parent efc527cc43d7394a5bd0deb1d29c4307592f7528
> >> Add feature to allow hglib user to get call backs for prompts and output.
> >
> >> The cb prefix was choosen to avoid matching a hg long option name.
> >
> > That seems fine. merge() already has "cb" argument.
> >
> >> - def rawcommand(self, args, eh=None, prompt=None, input=None):
> >> + def rawcommand(self, args, eh=None, prompt=None, input=None, cbout=None,
> >> + cberr=None):
> >> """
> >> args is the cmdline (usually built using util.cmdbuilder)
> >>
> >> @@ -173,9 +174,29 @@
> >>
> >> input is used to reply to bulk data requests by the server
> >> It receives the max number of bytes to return
> >> +
> >> + cbout is a function that will be called with the stdout data of the command
> >> + as it runs.
> >> +
> >> + cberr is a function that will be called with the stderr data of the command
> >> + as it runs.
> >> """
> >
> > Do they need to be separate callbacks? I think prompt() can be extended to
> > take "err" value as an optional third argument.
>
> There are 2 reasons to have the cbout and cberr call backs. For a push/pull that
> does not prompt it provides the GUI with progress information clearly marked as
> normal, cdout, and error, cberr. The output is also timely, no need to wait for the
> command to complete.
In that case, it'd be nice if we have a generic callback interface like your
another patch. Progress messages aren't limited to push/pull commands.
> When a prompt event happens I found that I cannot rely on figuring out what
> the last prompt was without a timeline of calls to cdout and cderr.
or inspect the last lines of both out/err channels? Anyway it's unreliable to
read the prompt line, so we'll need a better channel protocol in future.
> For example cdout gets the “user:” prompt but cderr gets the “password:”.
> (Why is “password:” sent to stderr? Bug? Feature?)
That is considered a feature of hg, but isn't nice in command-server session.
I made an extension to send more information over the pipe. It's just a hack.
My current plan is to add an option to send prompt, progress, and status
messages to a separate (e.g. 'C'-ontrol) channel.
https://bitbucket.org/tortoisehg/thg/src/3.9.2/tortoisehg/util/pipeui.py
More information about the Mercurial-devel
mailing list