Summary:
* The CIA hooks for git are presently dusty and somewhat broken.
* I am requesting that they be given a home in git contrib/.
* I am supplying working, updated versions.
* I will accept maintainance responsibility if required.
Many listmembers will be aware of CIA.vc, a useful service that echoes
commits from open-source projects to IRC channels and maintains
various interesting statistics on commit activity. Under git, it is
supported by one of two hook scripts: ciabot.pl and ciabot.pl.
In the course of migrating the GPSD project from Subversion to git, I
discovered that the 2006 version of ciabot.sh available from CIA.vc is
broken. It requires, but does not have, a PATH adjustment to cope
with the fact that various git tools it uses now go in a commands
directory private to git. The 2008 version of ciabot.sh made
available on the git wiki also has no PATH adjustment.
Upon investigating further, I find that ciabot.sh seems to be a
derivative of ciabot.pl, which is a dangling bit of the moribund
Cogito project. I have been unable to get responses from the authors
of either ciabot.sh or ciabot.pl.
A fixed and working version in shell is enclosed. It has some advantages
over the 2006 and 2008 versions:
* It uses only POSIX features. Thus, it will work with Debian/Ubuntu
dash and BSD's non-bash shells.
* It's faster, because it uses a lighter-weight shell.
* It's much closer to being autoconfiguring. In the normal case, all
the person installing an instance need supply is the project name.
* It is considerably better documented.
* It can support cgit as well as gitweb installations.
I am also enclosing a rewrite in Python. This has a serious functional
advantage over either Perl or sh; the batteries-included effect of the
Python libraries means it's not dependent on things like the path
location of sendmail or whether the hosting site will allow it to
run wget.
I think the broad usage of CIA.vc justifies adding one of these as an
official ciabot hook to git contrib/, and am so proposing. Should it
be required, I will accept maintainance responsibility; I expect the
amount of effort involved to be minimal.
Both versions have been live-tested on the GPSD project repo. The
Python version is now in production use there.
Code is enclosed.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
Hi!
On Sat, Mar 27, 2010 at 06:26:32AM -0400, Eric Raymond wrote:
Upon investigating further, I find that ciabot.sh seems to be a
derivative of ciabot.pl, which is a dangling bit of the moribund
Cogito project. I have been unable to get responses from the authors
of either ciabot.sh or ciabot.pl.
Strange, I received no mail from you. When did you send it?
A fixed and working version in shell is enclosed.
It would have been easier to review if it was quotable. ;-)
(I have also looked at the current checked in version.)
I'm happy that someone resurrected the hook script, thanks for that!
By the way, you seem to drop support for XML::RPC altogether while the
original ciabot.pl could use both. While XML::RPC requires another
dependency (not sure if plain Python installation can do it) and it can
time out in case of CIA server trouble (not sure how common these are
nowadays), the distinct advantage is that the commits will always end up
in correct order, while it seemed to be common that by mail, push of
multiple commits would reorder them randomly.
# update: You have to call it once per merged commit:
#
# refname=$1
# oldhead=$2
# newhead=$3
# for merged in $(git rev-list ${oldhead}..${newhead} | tac) ; do
# /path/to/ciabot.bash ${refname} ${merged}
^^^^^^^^^^^^^^^^^^^^
Obsolete .bash reference.
rev=$(git describe ${merged} 2>/dev/null)
# ${merged:0:12} was the only bashism left in the 2008 version of this
# script, according to checkbashisms. Replace it with ${merged} here
# because it was just a fallback anyway, and it's worth taking accepting
# a longer fallback for faster execution and removing the bash deoendency.
[ -z ${rev} ] && rev=${merged}
I personally find git-describe'd revspecs extremely ugly, unreadable and
less practical than plain hex ids (maybe I'm weird?), it would be really
nice to get a configuration choice between git describe and just:
rev=$(echo "$merged" | cut -c 1-12)
(Not sure about the bashism rant since you can trivially just replace it
with the cut.)
# This discards the part of the author's address after @.
# Might be nice to ship the full email address, if not
# for spammers' address harvesters - getting this wrong
# would make the freenode #commits channel into harvester heaven.
The comment is not accurate since that code seems to be doing a lot of
other things as well.
I would personally prefer to have this configurable; I consider trying
to protect your e-mail address against harvesters is a lost fight anyway
and you'd be much better off just getting a good spam filter, rather
than making yours and others' life harder by trying to fight in vain.
But it's not too important for me since I can just disable this easily.
rawcommit=$(git cat-file commit ${merged})
author=$(echo "$rawcommit" | sed -n -e '/^author .*<\([^@]*\).*$/s--\1-p')
logmessage=$(echo "$rawcommit" | sed -e '1,/^$/d' | head -n 1)
logmessage=$(echo "$logmessage" | sed 's/\&/&\;/g; s/</<\;/g; s/>/>\;/g')
ts=$(echo "$rawcommit" | sed -n -e '/^author .*> \([0-9]\+\).*$/s--\1-p')
Your life would be much easier in both the shell and python script if
you used something like:
git log -1 '--pretty=format:%an <%ae>%n%at%n%s'
You would also get <ts> in the correct format, incl. timezone correction.
Kind regards,
--
Petr "Pasky" Baudis
http://pasky.or.cz/ | "Ars longa, vita brevis." -- Hippocrates
Petr Baudis [off-list ref]:
On Sat, Mar 27, 2010 at 06:26:32AM -0400, Eric Raymond wrote:
quoted
Upon investigating further, I find that ciabot.sh seems to be a
derivative of ciabot.pl, which is a dangling bit of the moribund
Cogito project. I have been unable to get responses from the authors
of either ciabot.sh or ciabot.pl.
Strange, I received no mail from you. When did you send it?
About three weeks ago now. Sorry, it appears I fat-fingered your
address. I did eventually hear from the author of the 2008 sh
version; he passed me the maintainer's baton on that one.
I'm happy that someone resurrected the hook script, thanks for that!
By the way, you seem to drop support for XML::RPC altogether while the
original ciabot.pl could use both. While XML::RPC requires another
dependency (not sure if plain Python installation can do it) and it can
time out in case of CIA server trouble (not sure how common these are
nowadays), the distinct advantage is that the commits will always end up
in correct order, while it seemed to be common that by mail, push of
multiple commits would reorder them randomly.
Ah, I did not know of that advantage, it wasn't documented anywhere.
It's a sufficient reason to bring back XML-RPC support...and I
have just done so in the Python version.
quoted
# update: You have to call it once per merged commit:
#
# refname=$1
# oldhead=$2
# newhead=$3
# for merged in $(git rev-list ${oldhead}..${newhead} | tac) ; do
# /path/to/ciabot.bash ${refname} ${merged}
^^^^^^^^^^^^^^^^^^^^
Obsolete .bash reference.
Fixed, thanks.
I personally find git-describe'd revspecs extremely ugly, unreadable and
less practical than plain hex ids (maybe I'm weird?), it would be really
nice to get a configuration choice between git describe and just:
rev=$(echo "$merged" | cut -c 1-12)
(Not sure about the bashism rant since you can trivially just replace it
with the cut.)
Good point about use of cut; I'll do that.
I've implemented a revformat variable, but defaulted it to 'describe'.
I would personally prefer to have this configurable; I consider trying
to protect your e-mail address against harvesters is a lost fight anyway
and you'd be much better off just getting a good spam filter, rather
than making yours and others' life harder by trying to fight in vain.
But it's not too important for me since I can just disable this easily.
But email name collisions within projects are vanishingly rare, so I
don't see a lot of benefit in publishing the FQDN.
Your life would be much easier in both the shell and python script if
you used something like:
git log -1 '--pretty=format:%an <%ae>%n%at%n%s'
You would also get <ts> in the correct format, incl. timezone correction.
Good point. I inherited that nasty code; perhaps this facility did not
exist when it was written.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
Thanks for doing all the changes!
On Wed, Apr 21, 2010 at 11:51:49AM -0400, Eric Raymond wrote:
Petr Baudis [off-list ref]:
quoted
I would personally prefer to have this configurable; I consider trying
to protect your e-mail address against harvesters is a lost fight anyway
and you'd be much better off just getting a good spam filter, rather
than making yours and others' life harder by trying to fight in vain.
But it's not too important for me since I can just disable this easily.
But email name collisions within projects are vanishingly rare, so I
don't see a lot of benefit in publishing the FQDN.
That's a good point, I guess I was just ranting in general. ;-)
quoted
Your life would be much easier in both the shell and python script if
you used something like:
git log -1 '--pretty=format:%an <%ae>%n%at%n%s'
You would also get <ts> in the correct format, incl. timezone correction.
Good point. I inherited that nasty code; perhaps this facility did not
exist when it was written.
It most probably wasn't, the original perl script in particular was
written at the very dawn of time from git history perspective.
--
Petr "Pasky" Baudis
http://pasky.or.cz/ | "Ars longa, vita brevis." -- Hippocrates
Petr Baudis [off-list ref]:
Thanks for doing all the changes!
Thanks for the review. You pushed me into doing two things I was
naggingly aware I ought to do but hadn't gotten around to: (1) XML-RPC
support from the Python version (alas, it's too hard from shell), and
(2) fixing the scripts so that they can be entirely informed by config
variables, no modifications or command-line switches required.
You can read about the current state of play at
<http://www.catb.org/esr/ciabot/>.
I've spent the last couple of hours testing
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
Eric Raymond [off-list ref]:
I've spent the last couple of hours testing
Sentence truncated...
I've spent the last couple of hours testing and epect to mail a patch
to the list shortly. Well, after I get dinner, now.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>