hg2pubsub.lua

changeset 0
5db077e371bf
child 1
09dedb9bd52e
equal deleted inserted replaced
-1:000000000000 0:5db077e371bf
1 -- Command-line arguments
2 local config_file, server, node, branch, base_link = unpack(arg, 1, 5);
3
4 local config = assert(io.open(config_file));
5
6 local jid = assert(config:read("*l"), "no JID in config")
7 local password = assert(config:read("*l"), "no password in config")
8
9 local verse = require "verse";
10 require "verse.client";
11 local xmppstream = require "util.xmppstream";
12
13 local hgstream_handlers = {
14 stream_ns = "";
15 stream_tag = "log";
16 streamopened = function (sess) sess.notopen = nil; end;
17 streamclosed = function () end;
18 };
19
20 function hgstream_handlers.handlestanza(sess, commit)
21 local atom = verse.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" });
22
23 local id = commit.attr.node;
24 atom:tag("id"):text(id):up();
25
26 local author = commit:get_child("author");
27 atom:tag("author")
28 :tag("name"):text(author:get_text()):up()
29 :tag("email"):text(author.attr.email):up()
30 :up();
31
32 atom:tag("published"):text(commit:get_child("date"):get_text()):up();
33
34 atom:tag("title"):text(commit:get_child("msg"):get_text()):up();
35
36 atom:tag("link", { rel = "alternate", href = base_link..id:sub(1,12) }):up();
37
38 sess.conn.pubsub:publish(server, node, branch, atom);
39 end
40
41 local conn = verse.new();
42
43 conn:add_plugin("disco");
44 conn:add_plugin("pubsub");
45
46 conn:hook("stanza", print, 1000);
47 conn:hook("stanza-out", print, 1000);
48
49 conn:hook("ready", function ()
50 local hgstream = xmppstream.new({ notopen = true, conn = conn }, hgstream_handlers);
51 for line in io.lines() do
52 hgstream:feed(line);
53 end
54 conn:close();
55 end);
56
57 conn:hook("disconnected", function ()
58 os.exit();
59 end);
60
61 conn.connect_host = "localhost";
62 conn:connect_client(jid, password);
63
64 verse.loop();

mercurial