On Tue, 18 Oct 2016 11:27:00 +0100, Barry Scott wrote: > > On 16 Oct 2016, at 15:36, Yuya Nishihara <y...@tcha.org> wrote: > > On Thu, 06 Oct 2016 17:52:38 +0100, Barry A. Scott wrote: > >> # HG changeset patch > >> # User Barry A. Scott <ba...@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 _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel