From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.142.241.17 with SMTP id o17cs15359wfh; Tue, 17 May 2011 08:16:58 -0700 (PDT) Received: by 10.229.27.193 with SMTP id j1mr556594qcc.82.1305645417491; Tue, 17 May 2011 08:16:57 -0700 (PDT) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id k5si1127261qcu.61.2011.05.17.08.16.57; Tue, 17 May 2011 08:16:57 -0700 (PDT) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org; dkim=neutral (body hash did not verify) header.i=@gmail.com Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 5A2E9167832B for ; Tue, 17 May 2011 11:16:55 -0400 (EDT) Received: from mail-vw0-f50.google.com (mail-vw0-f50.google.com [209.85.212.50]) by rubyforge.org (Postfix) with ESMTP id 022C7185838A for ; Tue, 17 May 2011 11:00:36 -0400 (EDT) Received: by vws14 with SMTP id 14so543513vws.23 for ; Tue, 17 May 2011 07:59:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=IwVNhmnLrS2kvScT35M6xYUhncmMBCb2HmJW1LGk8UI=; b=BZ5jxvwK3uSRgPlnKm5v6Tsu2c07K0xT0D3/4R9aKMP4hsY/zr1uYgNSQ6+uzvO1C7 oC+Edo6e8b9qgRBWckIMF0uAgPLw12/vLJwlvnsNf6sraXYIwr2sQdXtpTkFZdasnIl1 rZPoJz4YZG+dlrSw3Ewm0ep+5jVXZc8Pz6Yq4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=Svo2kX4tQGM/bNMthzIwqKUt2mo5j1iwtlJAKxd4Rca1I089F6s1KQWkiPUemCqB9m pCG1oPB8FIP1aERZbLMYD9NUymtKhAcht35aOlACoJMSb8vhxNyfLGTLob1jdn/4duaJ LllYS2jtJvYrljWaOjQqHRdMzYHGFKAURv4zo= MIME-Version: 1.0 Received: by 10.52.173.176 with SMTP id bl16mr1012069vdc.41.1305644374135; Tue, 17 May 2011 07:59:34 -0700 (PDT) Received: by 10.52.112.100 with HTTP; Tue, 17 May 2011 07:59:34 -0700 (PDT) In-Reply-To: References: <1305471101-sup-6655@masanjin.net> Date: Tue, 17 May 2011 23:59:34 +0900 Message-ID: From: Horacio Sanson To: Sup developer discussion Content-Type: multipart/mixed; boundary=bcaec51ba4771f92c104a37a05c6 Subject: Re: [sup-devel] Query for largest msg_id? X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org --bcaec51ba4771f92c104a37a05c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I implemented a new version of the GMail -> Heliotrope sync script and attach it here in hopes someone will test it and provide some feedback/comments. This is by no means ready for general use so don't use for anything else than experimentation. But since this script only opens mailboxes in read only mode (examine) there should not be any problems with you emails on the server. This script is GMail specific and has these features: - Downloads emails from all mailboxes (except All, Trash and Spam) automatically using the XLIST GMail IMAP extension and feeds them to Heliotrope via REST interface. - Remembers the last email downloaded so it does not start from the begin= ning every time. - Synchronizes GMail labels using the X-GM-LABELS IMAP extension. - Synchronizes GMail flags with Heliotrope state flags. - Adds a new mailbox property to messages. This may allow later to implem= ent Heliotrope -> GMail synchronization. Things to check and do: - I am seeing some negative thread_id's in the response. Need to check if this is normal or a bug in Heliotrope or my script. - GMail inbox is with a capital "I" (e.g. Inbox) while heliotrope uses a small "i". Shall I down case all labels? or make a special treatment for Inbox? - Refactor the script into something more modular and elegant. To use this script I had to modify heliotrope-server.rb to allow setting labels and states when posting new messages (see attached patch). regards, Horacio On Tue, May 17, 2011 at 12:02 AM, Horacio Sanson wrote: > On Mon, May 16, 2011 at 12:01 AM, William Morgan > wrote: >> Reformatted excerpts from Horacio Sanson's message of 2011-05-10: >>> Is there a way to query Heliotrope what is the largest msg_id >>> currently in the index? >> >> Sort of---it's a hack, but if you search for e.g. "a OR -a" you'll get >> every message in the index, and the first result will be the message >> with the highest id thanks to Whistlepig's search semantics. >> > > Indeed I have been trying to wrap my head around the IMAP spec and > still don't get a lot of things. For now I will just keep the max UID > read from IMAP server somewhere on disk. > >>> I am trying to improve the imap-dumper.rb so >>> it does not download all my emails every time but only the new ones. >> >> Sounds great. Unfortunately the Heliotrope message id and the IMAP >> message id / message uid are completely different things, and >> maintaining a cross-session mapping of them is impossible for generic >> IMAP servers, because the uid of every message can change every time you >> connect to an IMAP server---see the section on IMAP's 'uidvalidity' >> variable. So you'll have to rescan the inbox every time and rebuild the >> mapping. Welcome to hell. >> > > When UIDVALIDITY differs I will simply re-scan the whole mailbox and > feed it to Heliotrope. I trust Heliotrope won't add duplicates. > >>> Also while looking at the code I see that messages are stored in the >>> index using the msg_id as parsed by RMail. There is no further >>> association with the source or mailbox from where the messages were >>> downloaded. This I think may cause collisions if we use one Heliotrope >>> server with more than one email account. Not sure what is the >>> probability of two messages from two different IMAP servers having the >>> same msg_id but nothing in the standard rules out that possibility. >> >> This is yet another id: the Message-Id header of the email. This is only >> needed to build up the thread structure and should otherwise be ignored. > > I am attaching my first small hack for GMail <-> Heliotrope > synchronization. For now it only downloads mail from GMail and injects > them to Heliotrope just as the imap-dumper.rb does. The difference is > that I keep track of the last message UID and UIDVALIDITY values to > avoid re-scanning the whole folder every time. > > Now I wan't to take advantage of GMail IMAP extensions (e.g. > X-GM-LABELS, X-GM-THRID) to allow labels/threads synchronization. But > have some doubts about how to correctly use the Heliotrope REST API. > For example in the Heliotrope::Index the add_message method allows to > insert a message and assign it labels, flags and extra parameters at > the same time. How can I do this with the REST API? The only example I > see only adds a message body. > > =A0 =A0RestClient.post "http://localhost:8042/message", :message =3D> bod= y > > Also for what purpose are the ext array used for? Can I use it to add > an account/mailbox property to each message so I can latter retrieve > all messages associated to a mailbox/account pair? > > regards, > Horacio > >> -- >> William >> _______________________________________________ >> Sup-devel mailing list >> Sup-devel@rubyforge.org >> http://rubyforge.org/mailman/listinfo/sup-devel >> > --bcaec51ba4771f92c104a37a05c6 Content-Type: application/x-ruby; name="gmail.rb" Content-Disposition: attachment; filename="gmail.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnsyxowc1 IyBlbmNvZGluZzogVVRGLTgKcmVxdWlyZSAibmV0L2ltYXAiCnJlcXVpcmUgInJ1YnlnZW1zIgpy ZXF1aXJlICdyZXN0X2NsaWVudCcKcmVxdWlyZSAnanNvbicKcmVxdWlyZSAiZmlsZXV0aWxzIgoK IyBNb25rZXlwYXRjaCBOZXQ6OklNQVAgdG8gc3VwcG9ydCBHTWFpbCBJTUFQIGV4dGVuc2lvbnMu CiMgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL2dtYWlsL2ltYXAvCm1vZHVsZSBOZXQKICBj bGFzcyBJTUFQCgogICAgIyBJbXBsZW1lbnQgR01haWwgWExJU1QgY29tbWFuZAogICAgZGVmIHhs aXN0KHJlZm5hbWUsIG1haWxib3gpCiAgICAgIHN5bmNocm9uaXplIGRvCiAgICAgICAgc2VuZF9j b21tYW5kKCJYTElTVCIsIHJlZm5hbWUsIG1haWxib3gpCiAgICAgICAgcmV0dXJuIEByZXNwb25z ZXMuZGVsZXRlKCJYTElTVCIpCiAgICAgIGVuZAogICAgZW5kCgogICAgY2xhc3MgUmVzcG9uc2VQ YXJzZXIKICAgICAgZGVmIHJlc3BvbnNlX3VudGFnZ2VkCiAgICAgICAgbWF0Y2goVF9TVEFSKQog ICAgICAgIG1hdGNoKFRfU1BBQ0UpCiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQKICAgICAgICBp ZiB0b2tlbi5zeW1ib2wgPT0gVF9OVU1CRVIKICAgICAgICAgIHJldHVybiBudW1lcmljX3Jlc3Bv bnNlCiAgICAgICAgZWxzaWYgdG9rZW4uc3ltYm9sID09IFRfQVRPTQogICAgICAgICAgY2FzZSB0 b2tlbi52YWx1ZQogICAgICAgICAgd2hlbiAvXEEoPzpPS3xOT3xCQUR8QllFfFBSRUFVVEgpXHov bmkKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlX2NvbmQKICAgICAgICAgIHdoZW4gL1xBKD86 RkxBR1MpXHovbmkKICAgICAgICAgICAgcmV0dXJuIGZsYWdzX3Jlc3BvbnNlCiAgICAgICAgICB3 aGVuIC9cQSg/OkxJU1R8TFNVQnxYTElTVClcei9uaSAgIyBBZGRlZCBYTElTVAogICAgICAgICAg ICByZXR1cm4gbGlzdF9yZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEoPzpRVU9UQSlcei9uaQog ICAgICAgICAgICByZXR1cm4gZ2V0cXVvdGFfcmVzcG9uc2UKICAgICAgICAgIHdoZW4gL1xBKD86 UVVPVEFST09UKVx6L25pCiAgICAgICAgICAgIHJldHVybiBnZXRxdW90YXJvb3RfcmVzcG9uc2UK ICAgICAgICAgIHdoZW4gL1xBKD86QUNMKVx6L25pCiAgICAgICAgICAgIHJldHVybiBnZXRhY2xf cmVzcG9uc2UKICAgICAgICAgIHdoZW4gL1xBKD86U0VBUkNIfFNPUlQpXHovbmkKICAgICAgICAg ICAgcmV0dXJuIHNlYXJjaF9yZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEoPzpUSFJFQUQpXHov bmkKICAgICAgICAgICAgcmV0dXJuIHRocmVhZF9yZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEo PzpTVEFUVVMpXHovbmkKICAgICAgICAgICAgcmV0dXJuIHN0YXR1c19yZXNwb25zZQogICAgICAg ICAgd2hlbiAvXEEoPzpDQVBBQklMSVRZKVx6L25pCiAgICAgICAgICAgIHJldHVybiBjYXBhYmls aXR5X3Jlc3BvbnNlCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiB0ZXh0X3Jlc3Bv bnNlCiAgICAgICAgICBlbmQKICAgICAgICBlbHNlCiAgICAgICAgICBwYXJzZV9lcnJvcigidW5l eHBlY3RlZCB0b2tlbiAlcyIsIHRva2VuLnN5bWJvbCkKICAgICAgICBlbmQKICAgICAgZW5kCgog ICAgICBkZWYgcmVzcG9uc2VfdGFnZ2VkCiAgICAgICAgdGFnID0gYXRvbQogICAgICAgIG1hdGNo KFRfU1BBQ0UpCiAgICAgICAgdG9rZW4gPSBtYXRjaChUX0FUT00pCiAgICAgICAgbmFtZSA9IHRv a2VuLnZhbHVlLnVwY2FzZQogICAgICAgIG1hdGNoKFRfU1BBQ0UpCiAgICAgICAgI3B1dHMgIkFB QUFBQUFBICAje3RhZ30gI3tuYW1lfSAje3Jlc3BfdGV4dH0gI3tAc3RyfSIKICAgICAgICByZXR1 cm4gVGFnZ2VkUmVzcG9uc2UubmV3KHRhZywgbmFtZSwgcmVzcF90ZXh0LCBAc3RyKQogICAgICBl bmQKCiAgICAgIGRlZiBtc2dfYXR0CiAgICAgICAgbWF0Y2goVF9MUEFSKQogICAgICAgIGF0dHIg PSB7fQogICAgICAgIHdoaWxlIHRydWUKICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkCiAgICAg ICAgICBjYXNlIHRva2VuLnN5bWJvbAogICAgICAgICAgd2hlbiBUX1JQQVIKICAgICAgICAgICAg c2hpZnRfdG9rZW4KICAgICAgICAgICAgYnJlYWsKICAgICAgICAgIHdoZW4gVF9TUEFDRQogICAg ICAgICAgICBzaGlmdF90b2tlbgogICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZAogICAgICAg ICAgZW5kCiAgICAgICAgICBjYXNlIHRva2VuLnZhbHVlCiAgICAgICAgICB3aGVuIC9cQSg/OkVO VkVMT1BFKVx6L25pCiAgICAgICAgICAgIG5hbWUsIHZhbCA9IGVudmVsb3BlX2RhdGEKICAgICAg ICAgIHdoZW4gL1xBKD86RkxBR1MpXHovbmkKICAgICAgICAgICAgbmFtZSwgdmFsID0gZmxhZ3Nf ZGF0YQogICAgICAgICAgd2hlbiAvXEEoPzpYLUdNLUxBQkVMUylcei9uaSAgIyBBZGRlZCBYLUdN LUxBQkVMUyBleHRlbnNpb24KICAgICAgICAgICAgbmFtZSwgdmFsID0gZmxhZ3NfZGF0YQogICAg ICAgICAgd2hlbiAvXEEoPzpJTlRFUk5BTERBVEUpXHovbmkKICAgICAgICAgICAgbmFtZSwgdmFs ID0gaW50ZXJuYWxkYXRlX2RhdGEKICAgICAgICAgIHdoZW4gL1xBKD86UkZDODIyKD86XC5IRUFE RVJ8XC5URVhUKT8pXHovbmkKICAgICAgICAgICAgbmFtZSwgdmFsID0gcmZjODIyX3RleHQKICAg ICAgICAgIHdoZW4gL1xBKD86UkZDODIyXC5TSVpFKVx6L25pCiAgICAgICAgICAgIG5hbWUsIHZh bCA9IHJmYzgyMl9zaXplCiAgICAgICAgICB3aGVuIC9cQSg/OkJPRFkoPzpTVFJVQ1RVUkUpPylc ei9uaQogICAgICAgICAgICBuYW1lLCB2YWwgPSBib2R5X2RhdGEKICAgICAgICAgIHdoZW4gL1xB KD86VUlEKVx6L25pCiAgICAgICAgICAgIG5hbWUsIHZhbCA9IHVpZF9kYXRhCiAgICAgICAgICB3 aGVuIC9cQSg/OlgtR00tTVNHSUQpXHovbmkgICMgQWRkZWQgWC1HTS1NU0dJRCBleHRlbnNpb24K ICAgICAgICAgICAgbmFtZSwgdmFsID0gdWlkX2RhdGEKICAgICAgICAgIHdoZW4gL1xBKD86WC1H TS1USFJJRClcei9uaSAgIyBBZGRlZCBYLUdNLVRIUklEIGV4dGVuc2lvbgogICAgICAgICAgICBu YW1lLCB2YWwgPSB1aWRfZGF0YQogICAgICAgICAgZWxzZQogICAgICAgICAgICBwYXJzZV9lcnJv cigidW5rbm93biBhdHRyaWJ1dGUgYCVzJyIsIHRva2VuLnZhbHVlKQogICAgICAgICAgZW5kCiAg ICAgICAgICBhdHRyW25hbWVdID0gdmFsCiAgICAgICAgZW5kCiAgICAgICAgcmV0dXJuIGF0dHIK ICAgICAgZW5kCiAgICBlbmQKICBlbmQKZW5kCgoKY2xhc3MgR01haWwKCiAgQEBtYWlsYm94X2Nh Y2hlID0gIiN7RU5WWydIT01FJ119Ly5nbWFpbC1jYWNoZSIKICBAQGJ1Zl9zaXplICA9IDEwCiAg QEBpZ25vcmVfYXR0ciA9IFs6QWxsbWFpbCwgOlNwYW0sIDpUcmFzaCwgOk5vc2VsZWN0XQogIEBA aWdub3JlX21haWxib3ggPSBbXQoKICBjbGFzcyBNYWlsYm94CiAgICBhdHRyX2FjY2Vzc29yIDp1 aWR2YWxpZGl0eSwgOnVpZG1heCwgOnVpZG5leHQsIDpuYW1lLCA6bnVtX3NlZW4sIDpudW1faW5k ZXhlZCwgOm51bV9iYWQKCiAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQogICAgICBAbmFtZSA9IG5h bWUKICAgICAgQHVpZG1heCA9IC0xMDAKICAgICAgQG51bV9zZWVuID0gMAogICAgICBAbnVtX2lu ZGV4ZWQgPSAwCiAgICAgIEBudW1fYmFkID0gMAogICAgZW5kCiAgZW5kCgogIGRlZiBpbml0aWFs aXplKHVzZXIsIHBhc3MpCiAgICBwdXRzICJDb25uZWN0aW5nIHRvIEdtYWlsIC4uLiIKICAgIEBp bWFwID0gTmV0OjpJTUFQLm5ldyAiaW1hcC5nbWFpbC5jb20iLCA5OTMsIDpzc2wgPT4gdHJ1ZQog ICAgcHV0cyAiTG9naW4gYXMgI3t1c2VyfSAuLi4iCiAgICBAaW1hcC5sb2dpbiB1c2VyLCBwYXNz CiAgICBwdXRzICJPYnRhaW5pbmcgbGlzdCBvZiBhbGwgbGFiZWxzIgogICAgQG1haWxib3hfbGlz dCA9ICBAaW1hcC54bGlzdCgiIiwgIioiKQogICAgQG1haWxib3hlcyA9IGxvYWRfbWFpbGJveGVz CgogICAgIyBJbnN0YWxsIHJlc3BvbnNlIGhhbmRsZXIgdG8gY2F0Y2ggVUlEUExVUyByZXBvbnNl IFVJRAogICAgQGltYXAuYWRkX3Jlc3BvbnNlX2hhbmRsZXIgeyB8cmVzcHwKICAgICAjIHB1dHMg IkRFQlVHOiAje3Jlc3B9IgogICAgICBpZiByZXNwLmtpbmRfb2Y/KE5ldDo6SU1BUDo6VGFnZ2Vk UmVzcG9uc2UpCiAgICAgICBpZiByZXNwLmRhdGEuaXNfYT9OZXQ6OklNQVA6OlJlc3BvbnNlVGV4 dCBhbmQgcmVzcC5kYXRhLmNvZGUgYW5kIHJlc3AuZGF0YS5jb2RlLm5hbWUgPT0gIkFQUEVORFVJ RCIKICAgICAgICAgcHV0cyAiQXBwZW5kIE1lc3NhZ2UgVUlEICN7cmVzcC5kYXRhLmNvZGUuZGF0 YX0iCiAgICAgICBlbmQKICAgICBlbmQKICAgIH0KCiAgICBAcnVubmluZyA9IHRydWUKICBlbmQK CiAgZGVmIHN0YXJ0CiAgICBAbWFpbGJveF9saXN0LmVhY2ggeyB8bWFpbGJveHwKICAgICAgc3lu Y19uZXcobWFpbGJveCkKICAgIH0KICBlbmQKCiAgZGVmIHN0b3AKICAgIEBydW5uaW5nID0gZmFs c2UKICBlbmQKCiAgIyBNZXRob2QgdGhhdCBjaGVja3MgYSBtYWlsYm94IGZvciBuZXcgbWVzc2Fn ZXMgYW5kIAogICMgZmVlZCB0aGVtIHRvIEhlbGlvdHJvcGUuIEFzc3VtZXMgSGVsaW90cm9wZSBz ZXJ2aWNlCiAgIyBpcyBydW5uaW5nIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODA0MgogIGRlZiBzeW5j X25ldyhtYWlsYm94KQogICAgICAjIFNraXAgYW55IG1haWxib3ggd2l0aCBhdHRyaWJ1dGVzIGlu IGlnbm9yZV9hdHRyCiAgICAgIHJldHVybiBpZiAhIChtYWlsYm94LmF0dHIgJiBAQGlnbm9yZV9h dHRyKS5lbXB0eT8KICAgICAgcmV0dXJuIGlmICFAcnVubmluZwoKICAgICAgbmFtZSA9IE5ldDo6 SU1BUC5kZWNvZGVfdXRmNyhtYWlsYm94Lm5hbWUpCiAgICAgIGNhY2hlID0gQG1haWxib3hlc1tu YW1lXSB8fCBNYWlsYm94Lm5ldyhuYW1lKQoKICAgICAgcHV0cyAiRXhhbWluaW5nIG1haWxib3gg I3tuYW1lfSIKCiAgICAgIGJlZ2luCiAgICAgICAgQGltYXAuZXhhbWluZShtYWlsYm94Lm5hbWUp CiAgICAgIHJlc2N1ZSA9PiBlCiAgICAgICAgcHV0cyAiRmFpbGVkIHRvIGV4YW1pbmUgbWFpbGJv eDogI3tlfSIKICAgICAgICByZXR1cm4KICAgICAgZW5kCgogICAgICB1aWR2YWxpZGl0eSA9IEBp bWFwLnJlc3BvbnNlc1siVUlEVkFMSURJVFkiXVstMV0KICAgICAgdWlkbmV4dCA9IEBpbWFwLnJl c3BvbnNlc1siVUlETkVYVCJdWy0xXQoKICAgICAgaWYgY2FjaGUudWlkdmFsaWRpdHkgIT0gdWlk dmFsaWRpdHkKICAgICAgICBwdXRzICJVSURWQUxJRElUWSBkaWZmZXIsIHJlc2NhbmluZyBhbGwg bWFpbGJveCIKICAgICAgICBpZHMgPSBAaW1hcC5zZWFyY2goWyJOT1QiLCAiREVMRVRFRCJdKQog ICAgICBlbHNlCiAgICAgICAgaWYgKGNhY2hlLnVpZG1heCArIDEgPT0gdWlkbmV4dCkKICAgICAg ICAgIHB1dHMgIk5vIG5ldyBtZXNzYWdlcyIKICAgICAgICAgIHJldHVybgogICAgICAgIGVuZAog ICAgICAgIHB1dHMgIlVJRFZBTElESVRZIG1hdGNoLCBnZXQgbmV3IG1lc3NhZ2VzIG9ubHkiCiAg ICAgICAgaWRzID0gKChjYWNoZS51aWRtYXggKyAxKSAuLiB1aWRuZXh0KS50b19hCiAgICAgIGVu ZAoKICAgICAgcHV0cyAiOyBnb3QgI3tpZHMuc2l6ZX0gbWVzc2FnZXMiCgogICAgICB3aGlsZSgh KGJsb2NrID0gaWRzLnNoaWZ0KEBAYnVmX3NpemUpKS5lbXB0eT8pCgogICAgICAgIGJyZWFrIGlm ICEgQHJ1bm5pbmcKICAgICAgICBwdXRzICI7IHJlcXVlc3RpbmcgbWVzc2FnZXMgI3tibG9jay5m aXJzdH0uLiN7YmxvY2subGFzdH0gZnJvbSBzZXJ2ZXIiCgogICAgICAgIG1zZ3MgPSBAaW1hcC5m ZXRjaCgoYmxvY2suZmlyc3QuLmJsb2NrLmxhc3QpLCBbIlVJRCIsICJYLUdNLU1TR0lEIiwgIlgt R00tVEhSSUQiLCAiWC1HTS1MQUJFTFMiLCAiRkxBR1MiLCAiUkZDODIyIl0pCgogICAgICAgIGlm ICEgbXNncwogICAgICAgICAgcHV0cyBtc2dzCiAgICAgICAgICBuZXh0CiAgICAgICAgZW5kCgog ICAgICAgIG1zZ3MuZWFjaCB7IHxtc2d8CiAgICAgICAgICBicmVhayBpZiAhIEBydW5uaW5nCgog ICAgICAgICAgYm9keSA9IG1zZy5hdHRyWyJSRkM4MjIiXQogICAgICAgICAgYm9keS5mb3JjZV9l bmNvZGluZygiYmluYXJ5IikgaWYgYm9keS5yZXNwb25kX3RvPyg6Zm9yY2VfZW5jb2RpbmcpIAog ICAgICAgICAgYm9keS5nc3ViKCJcclxuIiwgIlxuIikKCiAgICAgICAgICBsYWJlbHMgPSBtc2cu YXR0clsiWC1HTS1MQUJFTFMiXS5wdXNoKG5hbWUpLmNvbGxlY3QgeyB8bGFiZWx8IE5ldDo6SU1B UC5kZWNvZGVfdXRmNyhsYWJlbC50b19zKSB9CgogICAgICAgICAgc3RhdGUgPSBtc2cuYXR0clsi RkxBR1MiXS5jb2xsZWN0IHsgfGZsYWd8IGZsYWcudG9fcy5kb3duY2FzZS50b19zeW0gfQogICAg ICAgICAgcHV0cyBzdGF0ZQoKICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIHJlc3BvbnNlID0g UmVzdENsaWVudC5wb3N0ICJodHRwOi8vbG9jYWxob3N0OjgwNDIvbWVzc2FnZS5qc29uIiwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDpib2R5ID0+IGJvZHksIDpsYWJl bHMgPT4gbGFiZWxzLCA6c3RhdGUgPT4gc3RhdGUsIDptYWlsYm94ID0+IG5hbWUgfSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgOmNvbnRlbnRfdHlwZSA9PiA6anNvbiwg OmFjY2VwdCA9PiA6anNvbn0KICAgICAgICAgIHJlc2N1ZSBSZXN0Q2xpZW50OjpSZXNvdXJjZU5v dEZvdW5kID0+IGUKICAgICAgICAgICAgcHV0cyAiV2FybmluZzogcmVzb3VyY2Ugbm90IGZvdW5k IgogICAgICAgICAgICBuZXh0CiAgICAgICAgICByZXNjdWUgPT4gZQogICAgICAgICAgICBwdXRz ICJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBoZWxpb3Ryb3BlIDogI3tlLmNsYXNzfSIKICAg ICAgICAgICAgQHJ1bm5pbmcgPSBmYWxzZQogICAgICAgICAgICBicmVhawogICAgICAgICAgZW5k CgogICAgICAgICAgcHV0cyByZXNwb25zZSAKICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJz ZShyZXNwb25zZSkKCiAgICAgICAgICBpZiByZXNwb25zZVsicmVzcG9uc2UiXSA9PSAib2siCiAg ICAgICAgICAgIGlmIHJlc3BvbnNlWyJzdGF0dXMiXSA9PSAic2VlbiIKICAgICAgICAgICAgICBj YWNoZS5udW1fc2VlbiArPSAxCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBjYWNoZS5u dW1faW5kZXhlZCArPSAxCiAgICAgICAgICAgIGVuZAogICAgICAgICAgZWxzZQogICAgICAgICAg ICBjYWNoZS5udW1fYmFkICs9IDEKICAgICAgICAgICAgcHV0cyAiRXJyb3IgZm9yIG1lc3NhZ2U6 ICIgKyByZXNwb25zZVsiZXJyb3JfbWVzc2FnZSJdCiAgICAgICAgICBlbmQKCiAgICAgICAgICBj YWNoZS51aWRtYXggPSBbY2FjaGUudWlkbWF4IHx8IDAsIG1zZy5hdHRyWyJVSUQiXV0ubWF4CiAg ICAgICAgfQogICAgICBlbmQKCiAgICAgIHB1dHMgIlN0b3JlIG1haWxib3ggI3tuYW1lfSBjYWNo ZSIKICAgICAgY2FjaGUudWlkbmV4dCA9IHVpZG5leHQKICAgICAgY2FjaGUudWlkdmFsaWRpdHkg PSB1aWR2YWxpZGl0eQogICAgICBAbWFpbGJveGVzW25hbWVdID0gY2FjaGUKICAgICAgc2F2ZV9t YWlsYm94ZXMKICBlbmQKCiAgcHJpdmF0ZQoKICBkZWYgbG9hZF9tYWlsYm94ZXMKICAgIGlmIEZp bGUuZXhpc3RzPyhAQG1haWxib3hfY2FjaGUpCiAgICAgICBGaWxlLm9wZW4oQEBtYWlsYm94X2Nh Y2hlLCJyYiIpIHsgfGZkfAogICAgICAgICBAbWFpbGJveGVzID0gTWFyc2hhbC5sb2FkKGZkLnJl YWQpCiAgICAgICB9CiAgICBlbHNlCiAgICAgIEBtYWlsYm94ZXMgPSB7fQogICAgZW5kCiAgICBA bWFpbGJveGVzCiAgZW5kCgogIGRlZiBzYXZlX21haWxib3hlcwogICAgRmlsZS5vcGVuKEBAbWFp bGJveF9jYWNoZSwid2IiKSB7IHxmZHwKICAgICAgZmQgPDwgTWFyc2hhbC5kdW1wKEBtYWlsYm94 ZXMpCiAgICB9CiAgICBAbWFpbGJveGVzCiAgZW5kCgplbmQKCmlmIF9fRklMRV9fID09ICQwCgog IGlmIEFSR1Yuc2l6ZSA8IDIKICAgIHB1dHMgIlVzYWdlOiAgZ21haWwucmIgIDx1c2VybmFtZT4g PHBhc3N3b3JkPiIKICAgIGV4aXQgMAogIGVuZAoKICBnbWFpbCA9IEdNYWlsLm5ldyhBUkdWWzBd LCBBUkdWWzFdKQoKICB0cmFwKCJTSUdJTlQiKSB7ICAgcHV0cyAiLS0gU0lHSU5UIFN0b3BwaW5n IC0tIjsgICBnbWFpbC5zdG9wICB9CiAgdHJhcCgiU0lHVEVSTSIpIHsgICBwdXRzICItLSBTSUdU RVJNIFN0b3BwaW5nIC0tIjsgICBnbWFpbC5zdG9wICB9CiAgdHJhcCgiU0lHUElQRSIpIHsgICBw dXRzICItLSBTSUdQSVBFIFN0b3BwaW5nIC0tIjsgICBnbWFpbC5zdG9wICB9CiAgdHJhcCgiU0lH SFVQIikgeyAgIHB1dHMgIi0tIFNJR0hVUCBTdG9wcGluZyAtLSI7ICAgZ21haWwuc3RvcCAgfQoK ICBnbWFpbC5zdGFydAoKZW5kCgojIEdNYWlsIEFQSSBhbGxvd3Mgc2VhcmNoIHZpYSBYLUdNLVJB VyBleHRlbnNpb24KI3B1dHMgIlNlYXJjaCB2aWEgWC1HTS1SQVcgZXh0ZW5zaW9uIgojaWRzID0g aW1hcC5zZWFyY2goWyJYLUdNLVJBVyIsICJ0bzogaHNhbnNvbiJdKQoKIyBFeGFtcGxlIGhvdyB0 byBhcHBlbmQgYSBtZXNzYWdlIHRvIEdNYWlsCiNwdXRzICJUZXN0IGFwcGVuZCBtZXNzYWdlIgoj aW1hcC5hcHBlbmQoImluYm94IiwgPDxFT0YuZ3N1YigvXG4vLCAiXHJcbiIpLCBbOlNlZW5dLCBU aW1lLm5vdykKI1N1YmplY3Q6IGhlbGxvCiNGcm9tOiBzaHVnb0BydWJ5LWxhbmcub3JnCiNUbzog c2h1Z29AcnVieS1sYW5nLm9yZwoKI2hlbGxvIHdvcmxkCiNFT0YKCg== --bcaec51ba4771f92c104a37a05c6 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Implement-post-message.json.patch" Content-Disposition: attachment; filename="0001-Implement-post-message.json.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnsyxwk62 RnJvbSA1NTA0ZDU3MzJlYmUzYzhiODZiOTQyYjliODk4MjIxYTUyMGQyODNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3JhY2lvIFNhbnNvbiA8aHNhbnNvbkBnbWFpbC5jb20+CkRh dGU6IFR1ZSwgMTcgTWF5IDIwMTEgMjM6MzQ6MTQgKzA5MDAKU3ViamVjdDogW1BBVENIXSBJbXBs ZW1lbnQgcG9zdCAvbWVzc2FnZS5qc29uLgoKTm93IHdlIGNhbiAgYWRkIG1lc3NhZ2VzIHRvIGhl bGlvdHJvcGUgd2l0aCBsYWJlbHMsIHN0YXRlIGFuZCBtYWlsYm94CmluZm9ybWF0aW9uIGluIGEg c2luZ2xlIFBPU1QgcmVxdWVzdC4gVGhlIHJlcXVlc3QgYm9keSBoYXMgdG8gYmUgSlNPTgp3aXRo IGEgZm9ybWF0IGxpa2U6Cgp7CiAgYm9keTogPHJmYzgyMiByYXcgbWVzc2FnZSBzdHJpbmc+LAog IGxhYmVsczogWyJpbmJveCIsICJzY2hvb2wiLCAiaG9tZSJdLAogIHN0YXRlOiBbInNlZW4iLCAi b2xkIl0sCiAgbWFpbGJveDogImluYm94Igp9Ci0tLQogYmluL2hlbGlvdHJvcGUtc2VydmVyIHwg ICAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIDEgZmlsZXMgY2hhbmdlZCwgMjcg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9iaW4vaGVsaW90cm9w ZS1zZXJ2ZXIgYi9iaW4vaGVsaW90cm9wZS1zZXJ2ZXIKaW5kZXggZDcxOTg5ZC4uOTNiMDQ5MCAx MDA2NDQKLS0tIGEvYmluL2hlbGlvdHJvcGUtc2VydmVyCisrKyBiL2Jpbi9oZWxpb3Ryb3BlLXNl cnZlcgpAQCAtMzAyLDEwICszMDIsMzQgQEAgY2xhc3MgSGVsaW90cm9wZVNlcnZlciA8IFNpbmF0 cmE6OkJhc2UKICAgZW5kCiAKICAgcG9zdCAiL21lc3NhZ2UuanNvbiIgZG8KLSAgICBib2R5ID0g cGFyYW1zWyJib2R5Il0gb3IgcmFpc2UgUmVxdWVzdEVycm9yLCAibmVlZCBhICdib2R5JyBwYXJh bSIKLSAgICBwdXRzIGJvZHkKKyAgICBjb250ZW50X3R5cGUgOmpzb24KKyAgICBiZWdpbgorICAg ICAgcmF3Ym9keSA9IHBhcmFtc1siYm9keSJdIG9yIHJhaXNlIFJlcXVlc3RFcnJvciwgIm5lZWQg YSAnYm9keScgcGFyYW0iCisgICAgICByYXdib2R5LmZvcmNlX2VuY29kaW5nICJiaW5hcnkiIGlm IHJhd2JvZHkucmVzcG9uZF90bz8oOmZvcmNlX2VuY29kaW5nKSAjIHNpZ2guLi4KIAotICAgIHs6 c3RhdHVzID0+ICJvayJ9LnRvX2pzb24KKyAgICAgIG1lc3NhZ2UgPSBIZWxpb3Ryb3BlOjpNZXNz YWdlLm5ldyhyYXdib2R5KS5wYXJzZSEKKworICAgICAgbWJveCA9IHBhcmFtc1sibWFpbGJveCJd IHx8ICJpbmJveCIKKyAgICAgIGRvY19pZCA9IG5pbAorICAgICAgdGhyZWFkX2lkID0gbmlsCisg ICAgICBzdGF0ZSA9IG5pbAorICAgICAgbGFiZWxzID0gW21ib3hdCisgICAgICBpZiBAaW5kZXgu Y29udGFpbnNfbXNnaWQ/IG1lc3NhZ2UubXNnaWQKKyAgICAgICAgbWVzc2FnZWluZm8gPSBnZXRf bWVzc2FnZV9zdW1tYXJ5IG1lc3NhZ2UubXNnaWQKKyAgICAgICAgZG9jX2lkID0gIG1lc3NhZ2Vp bmZvWzptZXNzYWdlX2lkXQorICAgICAgICB0aHJlYWRfaWQgPSBtZXNzYWdlaW5mb1s6dGhyZWFk X2lkXQorICAgICAgICB7IDpyZXNwb25zZSA9PiA6b2ssIDpzdGF0dXMgPT4gOnNlZW4sIDpkb2Nf aWQgPT4gZG9jX2lkLCA6dGhyZWFkX2lkID0+IHRocmVhZF9pZCB9CisgICAgICBlbHNlCisgICAg ICAgICMgU2V0IHN0YXRlCisgICAgICAgIHN0YXRlIHBhcmFtc1sic3RhdGUiXSB8fCBbInVuc2Vl biJdCisgICAgICAgIGxhYmVscy5wdXNoKHBhcmFtc1sibGFiZWxzIl0pLmZsYXR0ZW4hLnVuaXEh IGlmIHBhcmFtc1sibGFiZWxzIl0KKyAgICAgICAgbG9jID0gQHN0b3JlLmFkZCByYXdib2R5Cisg ICAgICAgIGRvY19pZCwgdGhyZWFkX2lkID0gQGluZGV4LmFkZF9tZXNzYWdlIG1lc3NhZ2UsIHN0 YXRlLCBsYWJlbHMsIHsgOmxvYyA9PiBsb2MsIDptYm94ID0+IG1ib3ggfQorICAgICAgICB7IDpy ZXNwb25zZSA9PiA6b2ssIDpzdGF0dXMgPT4gc3RhdGUsIDpkb2NfaWQgPT4gZG9jX2lkLCA6dGhy ZWFkX2lkID0+IHRocmVhZF9pZCwgOmxhYmVscyA9PiBsYWJlbHMgfQorICAgICAgZW5kCisgICAg cmVzY3VlIEhlbGlvdHJvcGU6OkludmFsaWRNZXNzYWdlRXJyb3IgPT4gZQorICAgICAgeyA6cmVz cG9uc2UgPT4gOmVycm9yLCA6ZXJyb3JfbWVzc2FnZSA9PiBlLm1lc3NhZ2UgfQorICAgIGVuZC50 b19qc29uCiAgIGVuZAogCiBwcml2YXRlCi0tIAoxLjcuNC4xCgo= --bcaec51ba4771f92c104a37a05c6 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel --bcaec51ba4771f92c104a37a05c6--