From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.142.241.17 with SMTP id o17cs117849wfh; Mon, 16 May 2011 08:04:24 -0700 (PDT) Received: by 10.229.18.77 with SMTP id v13mr3437003qca.56.1305558263525; Mon, 16 May 2011 08:04:23 -0700 (PDT) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id es1si4178527vdb.158.2011.05.16.08.04.23; Mon, 16 May 2011 08:04:23 -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 E89103C807B for ; Mon, 16 May 2011 11:04:22 -0400 (EDT) Received: from mail-vx0-f178.google.com (mail-vx0-f178.google.com [209.85.220.178]) by rubyforge.org (Postfix) with ESMTP id 46CC21858346 for ; Mon, 16 May 2011 11:02:40 -0400 (EDT) Received: by vxc11 with SMTP id 11so4354227vxc.23 for ; Mon, 16 May 2011 08:02:40 -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=tgXJH7iLihvuMZ7ttrME30n3gmOlhT/Lf+EPboGi8TY=; b=bPgODFcOWiTi+6z8TpII3X8cuA8iUq1+9RZXbzuS21Hr3XQyJhab5kHH0ceu0EJieQ a7KufIVvBu6JE//XLK7cFPeYCUCfslyyvvx/urft7Ilxv7hQxMlkTrXRbWm7WAB1r63w ZCw5heYBSruTl0IEHnysr1BGufhbJkCjZ7IM8= 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=f918GTZfVXS5IhNG8R4TEgUUFX6iKB8R6l02WFSjSWW3pGoud4B/s7h0G4Wbt12hez EYLxhndTA14nhyDay7MU0rhwWb6RrD5vsCrU5cfhMaZUxuEWxpGd2AMZhBsWYKOPiip1 hp194Q7LPTXyTUt03U5u8uGLf04BY4yTFyWnQ= MIME-Version: 1.0 Received: by 10.52.108.195 with SMTP id hm3mr4493630vdb.201.1305558159763; Mon, 16 May 2011 08:02:39 -0700 (PDT) Received: by 10.52.112.100 with HTTP; Mon, 16 May 2011 08:02:39 -0700 (PDT) In-Reply-To: <1305471101-sup-6655@masanjin.net> References: <1305471101-sup-6655@masanjin.net> Date: Tue, 17 May 2011 00:02:39 +0900 Message-ID: From: Horacio Sanson To: Sup developer discussion Content-Type: multipart/mixed; boundary=bcaec5489dff58a80504a365f232 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 --bcaec5489dff58a80504a365f232 Content-Type: text/plain; charset=ISO-8859-1 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. RestClient.post "http://localhost:8042/message", :message => body 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 > --bcaec5489dff58a80504a365f232 Content-Type: application/x-ruby; name="gmail.rb" Content-Disposition: attachment; filename="gmail.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnrjhacn0 cmVxdWlyZSAibmV0L2ltYXAiCnJlcXVpcmUgInJ1YnlnZW1zIgpyZXF1aXJlICdyZXN0X2NsaWVu dCcKcmVxdWlyZSAnanNvbicKcmVxdWlyZSAiZmlsZXV0aWxzIgoKIyBNb25rZXlwYXRjaCBOZXQ6 OklNQVAgdG8gc3VwcG9ydCBHTWFpbCBJTUFQIGV4dGVuc2lvbnMuCiMgaHR0cDovL2NvZGUuZ29v Z2xlLmNvbS9hcGlzL2dtYWlsL2ltYXAvCm1vZHVsZSBOZXQKICBjbGFzcyBJTUFQCgogICAgIyBJ bXBsZW1lbnQgR01haWwgWExJU1QgY29tbWFuZAogICAgZGVmIHhsaXN0KHJlZm5hbWUsIG1haWxi b3gpCiAgICAgIHN5bmNocm9uaXplIGRvCiAgICAgICAgc2VuZF9jb21tYW5kKCJYTElTVCIsIHJl Zm5hbWUsIG1haWxib3gpCiAgICAgICAgcmV0dXJuIEByZXNwb25zZXMuZGVsZXRlKCJYTElTVCIp CiAgICAgIGVuZAogICAgZW5kCgogICAgY2xhc3MgUmVzcG9uc2VQYXJzZXIKICAgICAgZGVmIHJl c3BvbnNlX3VudGFnZ2VkCiAgICAgICAgbWF0Y2goVF9TVEFSKQogICAgICAgIG1hdGNoKFRfU1BB Q0UpCiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQKICAgICAgICBpZiB0b2tlbi5zeW1ib2wgPT0g VF9OVU1CRVIKICAgICAgICAgIHJldHVybiBudW1lcmljX3Jlc3BvbnNlCiAgICAgICAgZWxzaWYg dG9rZW4uc3ltYm9sID09IFRfQVRPTQogICAgICAgICAgY2FzZSB0b2tlbi52YWx1ZQogICAgICAg ICAgd2hlbiAvXEEoPzpPS3xOT3xCQUR8QllFfFBSRUFVVEgpXHovbmkKICAgICAgICAgICAgcmV0 dXJuIHJlc3BvbnNlX2NvbmQKICAgICAgICAgIHdoZW4gL1xBKD86RkxBR1MpXHovbmkKICAgICAg ICAgICAgcmV0dXJuIGZsYWdzX3Jlc3BvbnNlCiAgICAgICAgICB3aGVuIC9cQSg/OkxJU1R8TFNV QnxYTElTVClcei9uaSAgIyBBZGRlZCBYTElTVAogICAgICAgICAgICByZXR1cm4gbGlzdF9yZXNw b25zZQogICAgICAgICAgd2hlbiAvXEEoPzpRVU9UQSlcei9uaQogICAgICAgICAgICByZXR1cm4g Z2V0cXVvdGFfcmVzcG9uc2UKICAgICAgICAgIHdoZW4gL1xBKD86UVVPVEFST09UKVx6L25pCiAg ICAgICAgICAgIHJldHVybiBnZXRxdW90YXJvb3RfcmVzcG9uc2UKICAgICAgICAgIHdoZW4gL1xB KD86QUNMKVx6L25pCiAgICAgICAgICAgIHJldHVybiBnZXRhY2xfcmVzcG9uc2UKICAgICAgICAg IHdoZW4gL1xBKD86U0VBUkNIfFNPUlQpXHovbmkKICAgICAgICAgICAgcmV0dXJuIHNlYXJjaF9y ZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEoPzpUSFJFQUQpXHovbmkKICAgICAgICAgICAgcmV0 dXJuIHRocmVhZF9yZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEoPzpTVEFUVVMpXHovbmkKICAg ICAgICAgICAgcmV0dXJuIHN0YXR1c19yZXNwb25zZQogICAgICAgICAgd2hlbiAvXEEoPzpDQVBB QklMSVRZKVx6L25pCiAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5X3Jlc3BvbnNlCiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiB0ZXh0X3Jlc3BvbnNlCiAgICAgICAgICBlbmQK ICAgICAgICBlbHNlCiAgICAgICAgICBwYXJzZV9lcnJvcigidW5leHBlY3RlZCB0b2tlbiAlcyIs IHRva2VuLnN5bWJvbCkKICAgICAgICBlbmQKICAgICAgZW5kCgogICAgICBkZWYgcmVzcG9uc2Vf dGFnZ2VkCiAgICAgICAgdGFnID0gYXRvbQogICAgICAgIG1hdGNoKFRfU1BBQ0UpCiAgICAgICAg dG9rZW4gPSBtYXRjaChUX0FUT00pCiAgICAgICAgbmFtZSA9IHRva2VuLnZhbHVlLnVwY2FzZQog ICAgICAgIG1hdGNoKFRfU1BBQ0UpCiAgICAgICAgI3B1dHMgIkFBQUFBQUFBICAje3RhZ30gI3tu YW1lfSAje3Jlc3BfdGV4dH0gI3tAc3RyfSIKICAgICAgICByZXR1cm4gVGFnZ2VkUmVzcG9uc2Uu bmV3KHRhZywgbmFtZSwgcmVzcF90ZXh0LCBAc3RyKQogICAgICBlbmQKCiAgICAgIGRlZiBtc2df YXR0CiAgICAgICAgbWF0Y2goVF9MUEFSKQogICAgICAgIGF0dHIgPSB7fQogICAgICAgIHdoaWxl IHRydWUKICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkCiAgICAgICAgICBjYXNlIHRva2VuLnN5 bWJvbAogICAgICAgICAgd2hlbiBUX1JQQVIKICAgICAgICAgICAgc2hpZnRfdG9rZW4KICAgICAg ICAgICAgYnJlYWsKICAgICAgICAgIHdoZW4gVF9TUEFDRQogICAgICAgICAgICBzaGlmdF90b2tl bgogICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZAogICAgICAgICAgZW5kCiAgICAgICAgICBj YXNlIHRva2VuLnZhbHVlCiAgICAgICAgICB3aGVuIC9cQSg/OkVOVkVMT1BFKVx6L25pCiAgICAg ICAgICAgIG5hbWUsIHZhbCA9IGVudmVsb3BlX2RhdGEKICAgICAgICAgIHdoZW4gL1xBKD86RkxB R1MpXHovbmkKICAgICAgICAgICAgbmFtZSwgdmFsID0gZmxhZ3NfZGF0YQogICAgICAgICAgd2hl biAvXEEoPzpYLUdNLUxBQkVMUylcei9uaSAgIyBBZGRlZCBYLUdNLUxBQkVMUyBleHRlbnNpb24K ICAgICAgICAgICAgbmFtZSwgdmFsID0gZmxhZ3NfZGF0YQogICAgICAgICAgd2hlbiAvXEEoPzpJ TlRFUk5BTERBVEUpXHovbmkKICAgICAgICAgICAgbmFtZSwgdmFsID0gaW50ZXJuYWxkYXRlX2Rh dGEKICAgICAgICAgIHdoZW4gL1xBKD86UkZDODIyKD86XC5IRUFERVJ8XC5URVhUKT8pXHovbmkK ICAgICAgICAgICAgbmFtZSwgdmFsID0gcmZjODIyX3RleHQKICAgICAgICAgIHdoZW4gL1xBKD86 UkZDODIyXC5TSVpFKVx6L25pCiAgICAgICAgICAgIG5hbWUsIHZhbCA9IHJmYzgyMl9zaXplCiAg ICAgICAgICB3aGVuIC9cQSg/OkJPRFkoPzpTVFJVQ1RVUkUpPylcei9uaQogICAgICAgICAgICBu YW1lLCB2YWwgPSBib2R5X2RhdGEKICAgICAgICAgIHdoZW4gL1xBKD86VUlEKVx6L25pCiAgICAg ICAgICAgIG5hbWUsIHZhbCA9IHVpZF9kYXRhCiAgICAgICAgICB3aGVuIC9cQSg/OlgtR00tTVNH SUQpXHovbmkgICMgQWRkZWQgWC1HTS1NU0dJRCBleHRlbnNpb24KICAgICAgICAgICAgbmFtZSwg dmFsID0gdWlkX2RhdGEKICAgICAgICAgIHdoZW4gL1xBKD86WC1HTS1USFJJRClcei9uaSAgIyBB ZGRlZCBYLUdNLVRIUklEIGV4dGVuc2lvbgogICAgICAgICAgICBuYW1lLCB2YWwgPSB1aWRfZGF0 YQogICAgICAgICAgZWxzZQogICAgICAgICAgICBwYXJzZV9lcnJvcigidW5rbm93biBhdHRyaWJ1 dGUgYCVzJyIsIHRva2VuLnZhbHVlKQogICAgICAgICAgZW5kCiAgICAgICAgICBhdHRyW25hbWVd ID0gdmFsCiAgICAgICAgZW5kCiAgICAgICAgcmV0dXJuIGF0dHIKICAgICAgZW5kCiAgICBlbmQK ICBlbmQKZW5kCgoKY2xhc3MgR01haWwKCiAgQEBtYWlsYm94X2NhY2hlID0gIiN7RU5WWydIT01F J119Ly5nbWFpbC1jYWNoZSIKICBAQGJ1Zl9zaXplICA9IDEwCiAgQEBpZ25vcmVfYXR0ciA9IFs6 QWxsbWFpbCwgOlNwYW0sIDpUcmFzaCwgOk5vc2VsZWN0XQogIEBAaWdub3JlX21haWxib3ggPSBb XQoKICBjbGFzcyBNYWlsYm94CiAgICBhdHRyX2FjY2Vzc29yIDp1aWR2YWxpZGl0eSwgOnVpZG1h eCwgOnVpZG5leHQsIDpuYW1lLCA6bnVtX3NlZW4sIDpudW1faW5kZXhlZCwgOm51bV9iYWQKCiAg ICBkZWYgaW5pdGlhbGl6ZShuYW1lKQogICAgICBAbmFtZSA9IG5hbWUKICAgICAgQG51bV9zZWVu ID0gMAogICAgICBAbnVtX2luZGV4ZWQgPSAwCiAgICAgIEBudW1fYmFkID0gMAogICAgZW5kCiAg ZW5kCgogIGRlZiBpbml0aWFsaXplKHVzZXIsIHBhc3MpCiAgICBwdXRzICJDb25uZWN0aW5nIHRv IEdtYWlsIC4uLiIKICAgIEBpbWFwID0gTmV0OjpJTUFQLm5ldyAiaW1hcC5nbWFpbC5jb20iLCA5 OTMsIDpzc2wgPT4gdHJ1ZQogICAgcHV0cyAiTG9naW4gYXMgI3t1c2VyfSAuLi4iCiAgICBAaW1h cC5sb2dpbiB1c2VyLCBwYXNzCiAgICBwdXRzICJPYnRhaW5pbmcgbGlzdCBvZiBhbGwgbGFiZWxz IgogICAgQG1haWxib3hfbGlzdCA9ICBAaW1hcC54bGlzdCgiIiwgIioiKQogICAgQG1haWxib3hl cyA9IGxvYWRfbWFpbGJveGVzCgogICAgIyBJbnN0YWxsIHJlc3BvbnNlIGhhbmRsZXIgdG8gY2F0 Y2ggVUlEUExVUyByZXBvbnNlIFVJRAogICAgQGltYXAuYWRkX3Jlc3BvbnNlX2hhbmRsZXIgeyB8 cmVzcHwKICAgICMgIHB1dHMgIkRFQlVHOiAje3Jlc3B9IgogICAgICBpZiByZXNwLmtpbmRfb2Y/ KE5ldDo6SU1BUDo6VGFnZ2VkUmVzcG9uc2UpCiAgICAgICBpZiByZXNwLmRhdGEuaXNfYT9OZXQ6 OklNQVA6OlJlc3BvbnNlVGV4dCBhbmQgcmVzcC5kYXRhLmNvZGUgYW5kIHJlc3AuZGF0YS5jb2Rl Lm5hbWUgPT0gIkFQUEVORFVJRCIKICAgICAgICAgcHV0cyAiQXBwZW5kIE1lc3NhZ2UgVUlEICN7 cmVzcC5kYXRhLmNvZGUuZGF0YX0iCiAgICAgICBlbmQKICAgICBlbmQKICAgIH0KCiAgICBAcnVu bmluZyA9IHRydWUKICBlbmQKCiAgZGVmIHN0YXJ0CiAgICBAbWFpbGJveF9saXN0LmVhY2ggeyB8 bWFpbGJveHwKICAgICAgc3luY19uZXcobWFpbGJveCkKICAgIH0KICBlbmQKCiAgZGVmIHN0b3AK ICAgIEBydW5uaW5nID0gZmFsc2UKICBlbmQKCiAgIyBNZXRob2QgdGhhdCBjaGVja3MgYSBtYWls Ym94IGZvciBuZXcgbWVzc2FnZXMgYW5kIAogICMgZmVlZCB0aGVtIHRvIEhlbGlvdHJvcGUuIEFz c3VtZXMgSGVsaW90cm9wZSBzZXJ2aWNlCiAgIyBpcyBydW5uaW5nIGF0IGh0dHA6Ly9sb2NhbGhv c3Q6ODA0MgogIGRlZiBzeW5jX25ldyhtYWlsYm94KQogICAgICAjIFNraXAgYW55IG1haWxib3gg d2l0aCBhdHRyaWJ1dGVzIGluIGlnbm9yZV9hdHRyCiAgICAgIHJldHVybiBpZiAhIChtYWlsYm94 LmF0dHIgJiBAQGlnbm9yZV9hdHRyKS5lbXB0eT8KICAgICAgcmV0dXJuIGlmICFAcnVubmluZwoK ICAgICAgbmFtZSA9IE5ldDo6SU1BUC5kZWNvZGVfdXRmNyhtYWlsYm94Lm5hbWUpCiAgICAgIGNh Y2hlID0gQG1haWxib3hlc1tuYW1lXSB8fCBNYWlsYm94Lm5ldyhuYW1lKQoKICAgICAgcHV0cyAi RXhhbWluaW5nIG1haWxib3ggI3tuYW1lfSIKCiAgICAgIGJlZ2luCiAgICAgICAgQGltYXAuZXhh bWluZShtYWlsYm94Lm5hbWUpCiAgICAgIHJlc2N1ZSA9PiBlCiAgICAgICAgcHV0cyAiRmFpbGVk IHRvIGV4YW1pbmUgbWFpbGJveDogI3tlfSIKICAgICAgICByZXR1cm4KICAgICAgZW5kCgogICAg ICB1aWR2YWxpZGl0eSA9IEBpbWFwLnJlc3BvbnNlc1siVUlEVkFMSURJVFkiXVstMV0KICAgICAg dWlkbmV4dCA9IEBpbWFwLnJlc3BvbnNlc1siVUlETkVYVCJdWy0xXQoKICAgICAgaWYgY2FjaGUu dWlkdmFsaWRpdHkgIT0gdWlkdmFsaWRpdHkKICAgICAgICBwdXRzICJVSURWQUxJRElUWSBkaWZm ZXIsIHJlc2NhbmluZyBhbGwgbWFpbGJveCIKICAgICAgICBpZHMgPSBAaW1hcC5zZWFyY2goWyJO T1QiLCAiREVMRVRFRCJdKQogICAgICBlbHNlCiAgICAgICAgcHV0cyAiVUlEVkFMSURJVFkgbWF0 Y2gsIGdldCBuZXcgbWVzc2FnZXMgb25seSIKICAgICAgICBpZHMgPSAoKGNhY2hlLnVpZG1heCAr IDEpIC4uIGNhY2hlLnVpZG5leHQpLnRvX2EKICAgICAgZW5kCgogICAgICBwdXRzICI7IGdvdCAj e2lkcy5zaXplfSBtZXNzYWdlcyIKCiAgICAgIHdoaWxlKCEoYmxvY2sgPSBpZHMuc2hpZnQoQEBi dWZfc2l6ZSkpLmVtcHR5PykKCiAgICAgICAgYnJlYWsgaWYgISBAcnVubmluZwogICAgICAgIHB1 dHMgIjsgcmVxdWVzdGluZyBtZXNzYWdlcyAje2Jsb2NrLmZpcnN0fS4uI3tibG9jay5sYXN0fSBm cm9tIHNlcnZlciIKCiAgICAgICAgQGltYXAuZmV0Y2goKGJsb2NrLmZpcnN0Li5ibG9jay5sYXN0 KSwgWyJVSUQiLCAiWC1HTS1NU0dJRCIsICJYLUdNLVRIUklEIiwgIlgtR00tTEFCRUxTIiwgIkZM QUdTIiwgIlJGQzgyMiJdKS5lYWNoIHsgfG1zZ3wKICAgICAgICAgIGJyZWFrIGlmICEgQHJ1bm5p bmcKCiAgICAgICAgICBib2R5ID0gbXNnLmF0dHJbIlJGQzgyMiJdCiAgICAgICAgICBib2R5LmZv cmNlX2VuY29kaW5nKCJiaW5hcnkiKSBpZiBib2R5LnJlc3BvbmRfdG8/KDpmb3JjZV9lbmNvZGlu ZykgCiAgICAgICAgICBib2R5LmdzdWIoIlxyXG4iLCAiXG4iKQoKICAgICAgICAgIHJlc3BvbnNl ID0gUmVzdENsaWVudC5wb3N0ICJodHRwOi8vbG9jYWxob3N0OjgwNDIvbWVzc2FnZSIsIDptZXNz YWdlID0+IGJvZHkKICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkKCiAg ICAgICAgICBpZiByZXNwb25zZVsicmVzcG9uc2UiXSA9PSAib2siCiAgICAgICAgICAgIGlmIHJl c3BvbnNlWyJzdGF0dXMiXSA9PSAic2VlbiIKICAgICAgICAgICAgICBjYWNoZS5udW1fc2VlbiAr PSAxCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBjYWNoZS5udW1faW5kZXhlZCArPSAx CiAgICAgICAgICAgIGVuZAogICAgICAgICAgZWxzZQogICAgICAgICAgICBjYWNoZS5udW1fYmFk ICs9IDEKICAgICAgICAgICAgcHV0cyAiRXJyb3IgZm9yIG1lc3NhZ2UgYXQgb2Zmc2V0ICN7b2Zm c2V0fTogIiArIHJlc3BvbnNlWyJlcnJvcl9tZXNzYWdlIl0KICAgICAgICAgIGVuZAoKICAgICAg ICAgIGNhY2hlLnVpZG1heCA9IFtjYWNoZS51aWRtYXggfHwgMCwgbXNnLmF0dHJbIlVJRCJdXS5t YXgKICAgICAgICB9CiAgICAgIGVuZAoKICAgICAgcHV0cyAiU3RvcmUgbWFpbGJveCAje25hbWV9 IGNhY2hlIgogICAgICBjYWNoZS51aWRuZXh0ID0gdWlkbmV4dAogICAgICBjYWNoZS51aWR2YWxp ZGl0eSA9IHVpZHZhbGlkaXR5CiAgICAgIEBtYWlsYm94ZXNbbmFtZV0gPSBjYWNoZQogICAgICBz YXZlX21haWxib3hlcwogIGVuZAoKICBwcml2YXRlCgogIGRlZiBsb2FkX21haWxib3hlcwogICAg aWYgRmlsZS5leGlzdHM/KEBAbWFpbGJveF9jYWNoZSkKICAgICAgIEZpbGUub3BlbihAQG1haWxi b3hfY2FjaGUsInJiIikgeyB8ZmR8CiAgICAgICAgIEBtYWlsYm94ZXMgPSBNYXJzaGFsLmxvYWQo ZmQucmVhZCkKICAgICAgIH0KICAgIGVsc2UKICAgICAgQG1haWxib3hlcyA9IHt9CiAgICBlbmQK ICAgIEBtYWlsYm94ZXMKICBlbmQKCiAgZGVmIHNhdmVfbWFpbGJveGVzCiAgICBGaWxlLm9wZW4o QEBtYWlsYm94X2NhY2hlLCJ3YiIpIHsgfGZkfAogICAgICBmZCA8PCBNYXJzaGFsLmR1bXAoQG1h aWxib3hlcykKICAgIH0KICAgIEBtYWlsYm94ZXMKICBlbmQKCmVuZAoKaWYgX19GSUxFX18gPT0g JDAKCiAgaWYgQVJHVi5zaXplIDwgMgogICAgcHV0cyAiVXNhZ2U6ICBnbWFpbC5yYiAgPHVzZXJu YW1lPiA8cGFzc3dvcmQ+IgogICAgZXhpdCAwCiAgZW5kCgogIGdtYWlsID0gR01haWwubmV3KEFS R1ZbMF0sIEFSR1ZbMV0pCgogIHRyYXAoIlNJR0lOVCIpIHsgICBwdXRzICItLSBTSUdJTlQgU3Rv cHBpbmcgLS0iOyAgIGdtYWlsLnN0b3AgIH0KICB0cmFwKCJTSUdURVJNIikgeyAgIHB1dHMgIi0t IFNJR1RFUk0gU3RvcHBpbmcgLS0iOyAgIGdtYWlsLnN0b3AgIH0KICB0cmFwKCJTSUdQSVBFIikg eyAgIHB1dHMgIi0tIFNJR1BJUEUgU3RvcHBpbmcgLS0iOyAgIGdtYWlsLnN0b3AgIH0KICB0cmFw KCJTSUdIVVAiKSB7ICAgcHV0cyAiLS0gU0lHSFVQIFN0b3BwaW5nIC0tIjsgICBnbWFpbC5zdG9w ICB9CgogIGdtYWlsLnN0YXJ0CgplbmQKCiMgR01haWwgQVBJIGFsbG93cyBzZWFyY2ggdmlhIFgt R00tUkFXIGV4dGVuc2lvbgojcHV0cyAiU2VhcmNoIHZpYSBYLUdNLVJBVyBleHRlbnNpb24iCiNp ZHMgPSBpbWFwLnNlYXJjaChbIlgtR00tUkFXIiwgInRvOiBoc2Fuc29uIl0pCgojIEV4YW1wbGUg aG93IHRvIGFwcGVuZCBhIG1lc3NhZ2UgdG8gR01haWwKI3B1dHMgIlRlc3QgYXBwZW5kIG1lc3Nh Z2UiCiNpbWFwLmFwcGVuZCgiaW5ib3giLCA8PEVPRi5nc3ViKC9cbi8sICJcclxuIiksIFs6U2Vl bl0sIFRpbWUubm93KQojU3ViamVjdDogaGVsbG8KI0Zyb206IHNodWdvQHJ1YnktbGFuZy5vcmcK I1RvOiBzaHVnb0BydWJ5LWxhbmcub3JnCgojaGVsbG8gd29ybGQKI0VPRgoK --bcaec5489dff58a80504a365f232 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 --bcaec5489dff58a80504a365f232--