>>>>> "dmarker" == David Marker <David.Marker at sun.com> writes:

dmarker> Take a look, unless anybody really hates the concept we will
dmarker> start by using this to update hg.os.o

I like the concept.  Here are some comments and questions about the
script itself (which overall looks good):

> Although it could be used for most hooks, any "pre" hook is
> altered. 

What does this mean?

> In addition to passing on "KWARGS" the following environment
> variables are also passed on:
[...]
>     TIP [*] (the tip node at the time bghook() was called)

Nit: something less generic (e.g, HGTIP) would probably be better.

> # And it would probably be a bad thing if the background process could
> # do a rollback.

s/probably//

>     if script.endswith("pyc"):
>         script = script[:-1] # remove that.

The "remove that" comment is unclear.  I'd change it to "remove final
'c'" or "s/pyc/py/".

> # If a problem occurred, go back through {REPO}/.hg/hgrc and
> # handle each [atjobhook] one by one.

What's "atjobhook"?  Is it a historical name for "background hook"?

> It is not recommended to run this standalone at all.
> This script needs a standalone mode for it to re-run itslef
> and thus get "off process" so hg doesn't wait.

Typo: "itslef" -> "itself".

I found the word "needs" to be confusing here.  It appears to be an
explanation for why there's a main method, but it could be read as a
to-do item.

I'd change this text to something like

    This script should not normally be run directly.  Rather, it should
    only be invoked by the bghook method, which should only be invoked
    as a Mercurial hook.

>         rc = True # True means repo.hook() failed.
[...]
>             rc = repo.hook(hooktype, True, **kwargs)
[...]
>         if ok is False or rc is True:

External hooks return an integer exit status, not a boolean true/false.
I would juse use

        if not okay or rc:

>             ebuffer = ui.popbuffer()
>             for line in ebuffer:
>                 wstream.write(line)
>             raise BackgroundException

Possible improvement: some way to capture the contents of ebuffer in the
event that something isn't working right, but nothing is being flagged
as an error or exception.

>         except AssertionError:
>             # These are a subclass of Exception, but have no useful
>             # information and its hard to tell that is what happened
>             # it isn't handled separately.
>             wstream.write("ERROR: hook tripped over assertion\n")
>             ok = False

This doesn't make sense to me.  I thought AssertionError included the
failed assertion; it seems like we should print that.

>     # Otherwise if all was well, no mail need be sent.
>     # m.subject(m.msg["Subject"].replace("FAILED", "TESTING"))
>     # m.send() # XXX just for testing

Possible improvement: some way to enable the mail without having to edit
the script.

cheers,
mike

Reply via email to