From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 702D813800E for ; Thu, 2 Aug 2012 00:09:08 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 13B3321C02F for ; Thu, 2 Aug 2012 00:09:07 +0000 (UTC) Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) by pigeon.gentoo.org (Postfix) with ESMTP id 8371021C00D for ; Wed, 1 Aug 2012 23:33:19 +0000 (UTC) Received: by lagu2 with SMTP id u2so4956756lag.40 for ; Wed, 01 Aug 2012 16:33:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:x-gm-message-state; bh=RP5bkxJ76Nc6/4J5hM38HsDoEbT+OCh+E5MNPWegK/E=; b=ohhAFxcOBO78UXOJ9mAzAnA49WMN5roSt2dF2EMW0Tm6wlIpVX9ano2NAs9ge5BHzP Bj5fuZntkFVgib6rDqj3+rNt7FODZhDbauHnHAmBRSHiVp2AX4L1W9G2JQu2INoZoZRs WfUHhp4wFHfz/emUZDdjDlymV8bFC1isNbgCb7B5/POlsEmcJtEr3zmHP0KYkgQf8F5P Fu3DbzlPRl4mZrUxI9CEsXk+87b4KyzA/UC4m1tJZsaaKAxLAM/fTypUsQ6RgmV6IoLA zY4KkVwcH/Wp3LL6Qu1+PHo1cZ0GiCQfblG1LXGNtF3liyv+FJaeKyuOLrqSXhjnr5XP vZ1Q== Received: by 10.152.147.33 with SMTP id th1mr20012425lab.9.1343863998279; Wed, 01 Aug 2012 16:33:18 -0700 (PDT) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org MIME-Version: 1.0 Received: by 10.112.21.103 with HTTP; Wed, 1 Aug 2012 16:32:57 -0700 (PDT) In-Reply-To: References: From: Mark Kubacki Date: Thu, 2 Aug 2012 01:32:57 +0200 Message-ID: Subject: [gentoo-portage-dev] [PATCH] portage: HTTP if-modified-since and compression To: gentoo-portage-dev@lists.gentoo.org Content-Type: multipart/mixed; boundary=e89a8f22c4113e6ecd04c63cb8b4 X-Gm-Message-State: ALoCoQlebbWg7aEmBXCRr+xAd8F+dddhZSfU9V8VZHs6aMw9XPXCz+34RqIO18Y5Ei+gQDhjnBsM X-Archives-Salt: 9400a51b-9800-40f0-bd39-ad2291546d58 X-Archives-Hash: 1cd6a8fdf4b30941c78183de4a4a86b5 --e89a8f22c4113e6ecd04c63cb8b4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Portage devs, The attached patches fix some issues I've noticed as maintainer and user of Gentoo binhost(s). They're made against master/HEAD and can easily be backported to 2.1*. The first patch enables Portage to skip downloading a remote index if the local copy is recent enough. E.g., the remote index didn't change between to "emerge"-runs. This is done by setting "If-Modified-Since" request-header. The server responds with HTTP code 304 and Portage doesn't even load a single byte of the (large) index file. By the second patch Portage will download remote indices=E2=80=94which are text-files after all=E2=80=94compressed, if the remote server supports that= . Although de-compression introduces a small latency, this will save bandwidth and transmission time. If the index needs to be fetched at all, that is (see the patch above). An index' TIMESTAMP entry is set before the corresponding file gets written. If the difference between TIMESTAMP and modification time ("mtime") is greater than or the times span one second, remote index files will be loaded despite the "If-Modified-Since" header. This is because TIMESTAMP of the local copy is compared with the remote index' "mtime". The third patch fixes that by setting "mtime" =3D TIMESTAMP. --=20 Mark --e89a8f22c4113e6ecd04c63cb8b4 Content-Type: application/octet-stream; name="0001-Use-If-Modified-Since-HTTP-header-and-avoid-download.patch" Content-Disposition: attachment; filename="0001-Use-If-Modified-Since-HTTP-header-and-avoid-download.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5cphmdo0 RnJvbSBhNTI5MjRjZTk1MGZkMmVmYmY5OTk1OWU0ZGQwNDUyYjVmZWI5MmRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBXLU1hcmsgS3ViYWNraSA8d21hcmtAaHVycmlrYW5lLmRlPgpE YXRlOiBXZWQsIDEgQXVnIDIwMTIgMTk6NDk6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvM10g VXNlIElmLU1vZGlmaWVkLVNpbmNlIEhUVFAtaGVhZGVyIGFuZCBhdm9pZCBkb3dubG9hZGluZwog YSByZW1vdGUgaW5kZXggaWYgdGhlIGxvY2FsIGNvcHkgaXMgcmVjZW50IGVub3VnaC4KCi0tLQog cHltL3BvcnRhZ2UvZGJhcGkvYmludHJlZS5weSB8ICAgMjQgKysrKysrKysrKysrKysrKysrKysr LS0tCiBweW0vcG9ydGFnZS91dGlsL191cmxvcGVuLnB5IHwgICAzMyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9weW0vcG9ydGFnZS9kYmFwaS9iaW50cmVlLnB5IGIv cHltL3BvcnRhZ2UvZGJhcGkvYmludHJlZS5weQppbmRleCA5NTI3YjA3Li4xNmFlOGVjIDEwMDY0 NAotLS0gYS9weW0vcG9ydGFnZS9kYmFwaS9iaW50cmVlLnB5CisrKyBiL3B5bS9wb3J0YWdlL2Ri YXBpL2JpbnRyZWUucHkKQEAgLTU0LDYgKzU0LDExIEBAIGlmIHN5cy5oZXh2ZXJzaW9uID49IDB4 MzAwMDAwMDoKIGVsc2U6CiAJX3VuaWNvZGUgPSB1bmljb2RlCiAKK2NsYXNzIFVzZUNhY2hlZENv cHlPZlJlbW90ZUluZGV4KEV4Y2VwdGlvbik6CisJIyBJZiB0aGUgbG9jYWwgY29weSBpcyByZWNl bnQgZW5vdWdoCisJIyB0aGVuIGZldGNoaW5nIHRoZSByZW1vdGUgaW5kZXggY2FuIGJlIHNraXBw ZWQuCisJcGFzcworCiBjbGFzcyBiaW5kYmFwaShmYWtlZGJhcGkpOgogCV9rbm93bl9rZXlzID0g ZnJvemVuc2V0KGxpc3QoZmFrZWRiYXBpLl9rbm93bl9rZXlzKSArIFwKIAkJWyJDSE9TVCIsICJy ZXBvc2l0b3J5IiwgIlVTRSJdKQpAQCAtODUyLDYgKzg1Nyw3IEBAIGNsYXNzIGJpbmFyeXRyZWUo b2JqZWN0KToKIAkJCQlpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKIAkJCQkJcmFpc2UKIAkJ CWxvY2FsX3RpbWVzdGFtcCA9IHBrZ2luZGV4LmhlYWRlci5nZXQoIlRJTUVTVEFNUCIsIE5vbmUp CisJCQlyZW1vdGVfdGltZXN0YW1wID0gTm9uZQogCQkJcm10X2lkeCA9IHNlbGYuX25ld19wa2dp bmRleCgpCiAJCQlwcm9jID0gTm9uZQogCQkJdG1wX2ZpbGVuYW1lID0gTm9uZQpAQCAtODYxLDgg Kzg2NywxMyBAQCBjbGFzcyBiaW5hcnl0cmVlKG9iamVjdCk6CiAJCQkJIyBzbGFzaCwgc28gam9p biBtYW51YWxseS4uLgogCQkJCXVybCA9IGJhc2VfdXJsLnJzdHJpcCgiLyIpICsgIi9QYWNrYWdl cyIKIAkJCQl0cnk6Ci0JCQkJCWYgPSBfdXJsb3Blbih1cmwpCi0JCQkJZXhjZXB0IElPRXJyb3I6 CisJCQkJCWYgPSBfdXJsb3Blbih1cmwsIGlmX21vZGlmaWVkX3NpbmNlPWxvY2FsX3RpbWVzdGFt cCkKKwkJCQkJaWYgaGFzYXR0cihmLCAnaGVhZGVycycpIGFuZCBmLmhlYWRlcnMuZ2V0KCd0aW1l c3RhbXAnLCAnJyk6CisJCQkJCQlyZW1vdGVfdGltZXN0YW1wID0gZi5oZWFkZXJzLmdldCgndGlt ZXN0YW1wJykKKwkJCQlleGNlcHQgSU9FcnJvciBhcyBlcnI6CisJCQkJCWlmIGhhc2F0dHIoZXJy LCAnY29kZScpIGFuZCBlcnIuY29kZSA9PSAzMDQ6ICMgbm90IG1vZGlmaWVkIChzaW5jZSBsb2Nh bF90aW1lc3RhbXApCisJCQkJCQlyYWlzZSBVc2VDYWNoZWRDb3B5T2ZSZW1vdGVJbmRleCgpCisK IAkJCQkJcGF0aCA9IHBhcnNlZF91cmwucGF0aC5yc3RyaXAoIi8iKSArICIvUGFja2FnZXMiCiAK IAkJCQkJaWYgcGFyc2VkX3VybC5zY2hlbWUgPT0gJ3NmdHAnOgpAQCAtOTAzLDcgKzkxNCw4IEBA IGNsYXNzIGJpbmFyeXRyZWUob2JqZWN0KToKIAkJCQkJX2VuY29kaW5nc1sncmVwby5jb250ZW50 J10sIGVycm9ycz0ncmVwbGFjZScpCiAJCQkJdHJ5OgogCQkJCQlybXRfaWR4LnJlYWRIZWFkZXIo Zl9kZWMpCi0JCQkJCXJlbW90ZV90aW1lc3RhbXAgPSBybXRfaWR4LmhlYWRlci5nZXQoIlRJTUVT VEFNUCIsIE5vbmUpCisJCQkJCWlmIG5vdCByZW1vdGVfdGltZXN0YW1wOiAjIGluIGNhc2UgaXQg aGFkIG5vdCBiZWVuIHJlYWQgZnJvbSBIVFRQIGhlYWRlcgorCQkJCQkJcmVtb3RlX3RpbWVzdGFt cCA9IHJtdF9pZHguaGVhZGVyLmdldCgiVElNRVNUQU1QIiwgTm9uZSkKIAkJCQkJaWYgbm90IHJl bW90ZV90aW1lc3RhbXA6CiAJCQkJCQkjIG5vIHRpbWVzdGFtcCBpbiB0aGUgaGVhZGVyLCBzb21l dGhpbmcncyB3cm9uZwogCQkJCQkJcGtnaW5kZXggPSBOb25lCkBAIC05MzEsNiArOTQzLDEyIEBA IGNsYXNzIGJpbmFyeXRyZWUob2JqZWN0KToKIAkJCQkJCXdyaXRlbXNnKCJcblxuISEhICVzXG4i ICUgXAogCQkJCQkJCV8oIlRpbWVkIG91dCB3aGlsZSBjbG9zaW5nIGNvbm5lY3Rpb24gdG8gYmlu aG9zdCIpLAogCQkJCQkJCW5vaXNlbGV2ZWw9LTEpCisJCQlleGNlcHQgVXNlQ2FjaGVkQ29weU9m UmVtb3RlSW5kZXg6CisJCQkJd3JpdGVtc2dfc3Rkb3V0KCJcbiIpCisJCQkJd3JpdGVtc2dfc3Rk b3V0KAorCQkJCQljb2xvcml6ZSgiR09PRCIsIF8oIkxvY2FsIGNvcHkgb2YgcmVtb3RlIGluZGV4 IGlzIHVwLXRvLWRhdGUgYW5kIHdpbGwgYmUgdXNlZC4iKSkgKyBcCisJCQkJCSJcbiIpCisJCQkJ cm10X2lkeCA9IHBrZ2luZGV4CiAJCQlleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgogCQkJ CXdyaXRlbXNnKF8oIlxuXG4hISEgRXJyb3IgZmV0Y2hpbmcgYmluaG9zdCBwYWNrYWdlIiBcCiAJ CQkJCSIgaW5mbyBmcm9tICclcydcbiIpICUgX2hpZGVfdXJsX3Bhc3N3ZChiYXNlX3VybCkpCmRp ZmYgLS1naXQgYS9weW0vcG9ydGFnZS91dGlsL191cmxvcGVuLnB5IGIvcHltL3BvcnRhZ2UvdXRp bC9fdXJsb3Blbi5weQppbmRleCAzMDc2MjRiLi5hNWRiNDExIDEwMDY0NAotLS0gYS9weW0vcG9y dGFnZS91dGlsL191cmxvcGVuLnB5CisrKyBiL3B5bS9wb3J0YWdlL3V0aWwvX3VybG9wZW4ucHkK QEAgLTIsNiArMiw5IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKIAogaW1wb3J0IHN5cworZnJvbSBkYXRldGltZSBp bXBvcnQgZGF0ZXRpbWUKK2Zyb20gdGltZSBpbXBvcnQgbWt0aW1lCitmcm9tIGVtYWlsLnV0aWxz IGltcG9ydCBmb3JtYXRkYXRlLCBwYXJzZWRhdGUKIAogdHJ5OgogCWZyb20gdXJsbGliLnJlcXVl c3QgaW1wb3J0IHVybG9wZW4gYXMgX3VybG9wZW4KQEAgLTE0LDEyICsxNywyNiBAQCBleGNlcHQg SW1wb3J0RXJyb3I6CiAJaW1wb3J0IHVybGxpYjIgYXMgdXJsbGliX3JlcXVlc3QKIAlmcm9tIHVy bGxpYiBpbXBvcnQgc3BsaXR1c2VyIGFzIHVybGxpYl9wYXJzZV9zcGxpdHVzZXIKIAotZGVmIHVy bG9wZW4odXJsKToKKyMgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBUSU1F U1RBTVAgb2YgdGhlIGluZGV4JyBjb250ZW50cworIyAgYW5kIHRoZSBmaWxlLSdtdGltZScKK1RJ TUVTVEFNUF9UT0xFUkFOQ0U9NQorCitkZWYgdXJsb3Blbih1cmwsIGlmX21vZGlmaWVkX3NpbmNl PU5vbmUpOgogCXRyeToKLQkJcmV0dXJuIF91cmxvcGVuKHVybCkKKwkJcmVxdWVzdCA9IHVybGxp Yl9yZXF1ZXN0LlJlcXVlc3QodXJsKQorCQlyZXF1ZXN0LmFkZF9oZWFkZXIoJ1VzZXItQWdlbnQn LCAnR2VudG9vIFBvcnRhZ2UnKQorCQlpZiBpZl9tb2RpZmllZF9zaW5jZToKKwkJCXJlcXVlc3Qu YWRkX2hlYWRlcignSWYtTW9kaWZpZWQtU2luY2UnLCBfdGltZXN0YW1wX3RvX2h0dHAoaWZfbW9k aWZpZWRfc2luY2UpKQorCQlvcGVuZXIgPSB1cmxsaWJfcmVxdWVzdC5idWlsZF9vcGVuZXIoKQor CQloZGwgPSBvcGVuZXIub3BlbihyZXF1ZXN0KQorCQlpZiBoZGwuaGVhZGVycy5nZXQoJ2xhc3Qt bW9kaWZpZWQnLCAnJyk6CisJCQloZGwuaGVhZGVycy5hZGRoZWFkZXIoJ3RpbWVzdGFtcCcsIF9o dHRwX3RvX3RpbWVzdGFtcChoZGwuaGVhZGVycy5nZXQoJ2xhc3QtbW9kaWZpZWQnKSkpCisJCXJl dHVybiBoZGwKIAlleGNlcHQgU3lzdGVtRXhpdDoKIAkJcmFpc2UKLQlleGNlcHQgRXhjZXB0aW9u OgorCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJaWYgaGFzYXR0cihlLCAnY29kZScpIGFuZCBl LmNvZGUgPT0gMzA0OiAjIEhUVFBFcnJvciAzMDQ6IG5vdCBtb2RpZmllZAorCQkJcmFpc2UKIAkJ aWYgc3lzLmhleHZlcnNpb24gPCAweDMwMDAwMDA6CiAJCQlyYWlzZQogCQlwYXJzZV9yZXN1bHQg PSB1cmxsaWJfcGFyc2UudXJscGFyc2UodXJsKQpAQCAtNDAsMyArNTcsMTMgQEAgZGVmIF9uZXdf dXJsb3Blbih1cmwpOgogCWF1dGhfaGFuZGxlciA9IHVybGxpYl9yZXF1ZXN0LkhUVFBCYXNpY0F1 dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCiAJb3BlbmVyID0gdXJsbGliX3JlcXVlc3QuYnVp bGRfb3BlbmVyKGF1dGhfaGFuZGxlcikKIAlyZXR1cm4gb3BlbmVyLm9wZW4odXJsKQorCitkZWYg X3RpbWVzdGFtcF90b19odHRwKHRpbWVzdGFtcCk6CisJZHQgPSBkYXRldGltZS5mcm9tdGltZXN0 YW1wKGZsb2F0KGxvbmcodGltZXN0YW1wKStUSU1FU1RBTVBfVE9MRVJBTkNFKSkKKwlzdGFtcCA9 IG1rdGltZShkdC50aW1ldHVwbGUoKSkKKwlyZXR1cm4gZm9ybWF0ZGF0ZSh0aW1ldmFsPXN0YW1w LCBsb2NhbHRpbWU9RmFsc2UsIHVzZWdtdD1UcnVlKQorCitkZWYgX2h0dHBfdG9fdGltZXN0YW1w KGh0dHBfZGF0ZXRpbWVfc3RyaW5nKToKKwl0dXBsZSA9IHBhcnNlZGF0ZShodHRwX2RhdGV0aW1l X3N0cmluZykKKwl0aW1lc3RhbXAgPSBta3RpbWUodHVwbGUpCisJcmV0dXJuIHN0cihsb25nKHRp bWVzdGFtcCkpCi0tIAoxLjcuOC42Cgo= --e89a8f22c4113e6ecd04c63cb8b4 Content-Type: application/octet-stream; name="0002-Add-support-for-HTTP-compression-bzip2-gzip-and-defl.patch" Content-Disposition: attachment; filename="0002-Add-support-for-HTTP-compression-bzip2-gzip-and-defl.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5cphme21 RnJvbSA4OGEyODliMDc2NDJjYjIwMGI4M2I5OGYwM2Q1MDhkY2JmZDJjZTY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBXLU1hcmsgS3ViYWNraSA8d21hcmtAaHVycmlrYW5lLmRlPgpE YXRlOiBXZWQsIDEgQXVnIDIwMTIgMjA6MzY6MzEgKzAyMDAKU3ViamVjdDogW1BBVENIIDIvM10g QWRkIHN1cHBvcnQgZm9yIEhUVFAgY29tcHJlc3Npb24gKGJ6aXAyLCBnemlwIGFuZAogZGVmbGF0 ZSkuCgotLS0KIHB5bS9wb3J0YWdlL3V0aWwvX3VybG9wZW4ucHkgfCAgIDMyICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystCiAxIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcHltL3BvcnRhZ2UvdXRpbC9fdXJsb3Blbi5w eSBiL3B5bS9wb3J0YWdlL3V0aWwvX3VybG9wZW4ucHkKaW5kZXggYTVkYjQxMS4uNzA1MzVjNSAx MDA2NDQKLS0tIGEvcHltL3BvcnRhZ2UvdXRpbC9fdXJsb3Blbi5weQorKysgYi9weW0vcG9ydGFn ZS91dGlsL191cmxvcGVuLnB5CkBAIC01LDYgKzUsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIGRhdGV0 aW1lIGltcG9ydCBkYXRldGltZQogZnJvbSB0aW1lIGltcG9ydCBta3RpbWUKIGZyb20gZW1haWwu dXRpbHMgaW1wb3J0IGZvcm1hdGRhdGUsIHBhcnNlZGF0ZQorZnJvbSBTdHJpbmdJTyBpbXBvcnQg U3RyaW5nSU8KIAogdHJ5OgogCWZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4gYXMg X3VybG9wZW4KQEAgLTI3LDcgKzI4LDcgQEAgZGVmIHVybG9wZW4odXJsLCBpZl9tb2RpZmllZF9z aW5jZT1Ob25lKToKIAkJcmVxdWVzdC5hZGRfaGVhZGVyKCdVc2VyLUFnZW50JywgJ0dlbnRvbyBQ b3J0YWdlJykKIAkJaWYgaWZfbW9kaWZpZWRfc2luY2U6CiAJCQlyZXF1ZXN0LmFkZF9oZWFkZXIo J0lmLU1vZGlmaWVkLVNpbmNlJywgX3RpbWVzdGFtcF90b19odHRwKGlmX21vZGlmaWVkX3NpbmNl KSkKLQkJb3BlbmVyID0gdXJsbGliX3JlcXVlc3QuYnVpbGRfb3BlbmVyKCkKKwkJb3BlbmVyID0g dXJsbGliX3JlcXVlc3QuYnVpbGRfb3BlbmVyKENvbXByZXNzZWRSZXNwb25zZVByb2Nlc3NvcikK IAkJaGRsID0gb3BlbmVyLm9wZW4ocmVxdWVzdCkKIAkJaWYgaGRsLmhlYWRlcnMuZ2V0KCdsYXN0 LW1vZGlmaWVkJywgJycpOgogCQkJaGRsLmhlYWRlcnMuYWRkaGVhZGVyKCd0aW1lc3RhbXAnLCBf aHR0cF90b190aW1lc3RhbXAoaGRsLmhlYWRlcnMuZ2V0KCdsYXN0LW1vZGlmaWVkJykpKQpAQCAt NjcsMyArNjgsMzIgQEAgZGVmIF9odHRwX3RvX3RpbWVzdGFtcChodHRwX2RhdGV0aW1lX3N0cmlu Zyk6CiAJdHVwbGUgPSBwYXJzZWRhdGUoaHR0cF9kYXRldGltZV9zdHJpbmcpCiAJdGltZXN0YW1w ID0gbWt0aW1lKHR1cGxlKQogCXJldHVybiBzdHIobG9uZyh0aW1lc3RhbXApKQorCitjbGFzcyBD b21wcmVzc2VkUmVzcG9uc2VQcm9jZXNzb3IodXJsbGliX3JlcXVlc3QuQmFzZUhhbmRsZXIpOgor CSMgSGFuZGxlciBmb3IgY29tcHJlc3NlZCByZXNwb25zZXMuCisKKwlkZWYgaHR0cF9yZXF1ZXN0 KHNlbGYsIHJlcSk6CisJCXJlcS5hZGRfaGVhZGVyKCdBY2NlcHQtRW5jb2RpbmcnLCAnYnppcDIs Z3ppcCxkZWZsYXRlJykKKwkJcmV0dXJuIHJlcQorCWh0dHBzX3JlcXVlc3QgPSBodHRwX3JlcXVl c3QKKworCWRlZiBodHRwX3Jlc3BvbnNlKHNlbGYsIHJlcSwgcmVzcG9uc2UpOgorCQlkZWNvbXBy ZXNzZWQgPSBOb25lCisJCWlmIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWVuY29kaW5n JykgPT0gJ2J6aXAyJzoKKwkJCWltcG9ydCBiejIKKwkJCWRlY29tcHJlc3NlZCA9IFN0cmluZ0lP LlN0cmluZ0lPKGJ6Mi5kZWNvbXByZXNzKHJlc3BvbnNlLnJlYWQoKSkpCisJCWVsaWYgcmVzcG9u c2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZW5jb2RpbmcnKSA9PSAnZ3ppcCc6CisJCQlmcm9tIGd6 aXAgaW1wb3J0IEd6aXBGaWxlCisJCQlkZWNvbXByZXNzZWQgPSBHemlwRmlsZShmaWxlb2JqPVN0 cmluZ0lPKHJlc3BvbnNlLnJlYWQoKSksIG1vZGU9J3InKQorCQllbGlmIHJlc3BvbnNlLmhlYWRl cnMuZ2V0KCdjb250ZW50LWVuY29kaW5nJykgPT0gJ2RlZmxhdGUnOgorCQkJaW1wb3J0IHpsaWIK KwkJCXRyeToKKwkJCQlkZWNvbXByZXNzZWQgPSBTdHJpbmdJTy5TdHJpbmdJTyh6bGliLmRlY29t cHJlc3MocmVzcG9uc2UucmVhZCgpKSkKKwkJCWV4Y2VwdCB6bGliLmVycm9yOiAjIHRoZXkgaWdu b3JlZCBSRkMxOTUwCisJCQkJZGVjb21wcmVzc2VkID0gU3RyaW5nSU8uU3RyaW5nSU8oemxpYi5k ZWNvbXByZXNzKHJlc3BvbnNlLnJlYWQoKSwgLXpsaWIuTUFYX1dCSVRTKSkKKwkJaWYgZGVjb21w cmVzc2VkOgorCQkJb2xkX3Jlc3BvbnNlID0gcmVzcG9uc2UKKwkJCXJlc3BvbnNlID0gdXJsbGli X3JlcXVlc3QuYWRkaW5mb3VybChkZWNvbXByZXNzZWQsIG9sZF9yZXNwb25zZS5oZWFkZXJzLCBv bGRfcmVzcG9uc2UudXJsLCBvbGRfcmVzcG9uc2UuY29kZSkKKwkJCXJlc3BvbnNlLm1zZyA9IG9s ZF9yZXNwb25zZS5tc2cKKwkJcmV0dXJuIHJlc3BvbnNlCisJaHR0cHNfcmVzcG9uc2UgPSBodHRw X3Jlc3BvbnNlCi0tIAoxLjcuOC42Cgo= --e89a8f22c4113e6ecd04c63cb8b4 Content-Type: application/octet-stream; name="0003-Fix-index-file-s-mtime-which-can-differ-from-TIMESTA.patch" Content-Disposition: attachment; filename="0003-Fix-index-file-s-mtime-which-can-differ-from-TIMESTA.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5cphmeb2 RnJvbSAyYjdiYTk2YzhjNmU4MTU0MWNmYmEwOTVjMTEzNjM4YWM5YTg0N2Y0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBXLU1hcmsgS3ViYWNraSA8d21hcmtAaHVycmlrYW5lLmRlPgpE YXRlOiBXZWQsIDEgQXVnIDIwMTIgMjE6MTI6MjQgKzAyMDAKU3ViamVjdDogW1BBVENIIDMvM10g Rml4IGluZGV4IGZpbGUncyBtdGltZSwgd2hpY2ggY2FuIGRpZmZlciBmcm9tIFRJTUVTVEFNUC4K ClRoaXMgZW5hYmxlcyBQb3J0YWdlIHRvIHJlbGlhYmx5IHF1ZXJ5IGZvciByZW1vdGUgaW5kaWNl cyB3aXRoCkhUVFAtaGVhZGVyIElmLU1vZGlmaWVkLVNpbmNlLgoKV2l0aG91dCB0aGlzIHBhdGNo IG10aW1lIGlzIGdyZWF0ZXIgdGhhbiBUSU1FU1RBTVAgZm9yIGxhcmdlCmluZGljZXMgYW5kIHNs b3cgc3RvcmFnZXMgLSBiZWNhdXNlIHdyaXRpbmcgYSBsYXJnZSBmaWxlIHRha2VzCnRpbWUuIElm IHRoZSBkaWZmZXJlbmNlIHNwYW5zIGEgc2Vjb25kIChUSU1FU1RBTVAgMDg6MDA6MDAsIG10aW1l CjA4OjAwOjAxKSwgdGhlbiBQb3J0YWdlIHdpbGwgYWx3YXlzIGZldGNoIHRoZSByZW1vdGUgaW5k ZXggYmVjYXVzZQppdCB3aWxsIGFwcGVhciBiZWluZyBtb2RpZmllZCAobXRpbWUgaXMgdXNlZCB0 aGVyZSkgYWZ0ZXIgdGhlIGNvcHkKaGFzIGJlZW4gbWFkZSAobG9jYWwgY29weSdzIFRJTUVTVEFN UCBpcyB1c2VkIGhlcmUpLgotLS0KIHB5bS9wb3J0YWdlL2RiYXBpL2JpbnRyZWUucHkgfCAgICA2 ICsrKysrLQogMSBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvcHltL3BvcnRhZ2UvZGJhcGkvYmludHJlZS5weSBiL3B5bS9wb3J0YWdl L2RiYXBpL2JpbnRyZWUucHkKaW5kZXggMTZhZThlYy4uMDM2NzUwMyAxMDA2NDQKLS0tIGEvcHlt L3BvcnRhZ2UvZGJhcGkvYmludHJlZS5weQorKysgYi9weW0vcG9ydGFnZS9kYmFwaS9iaW50cmVl LnB5CkBAIC0xMTg2LDkgKzExODYsMTMgQEAgY2xhc3MgYmluYXJ5dHJlZShvYmplY3QpOgogCQkJ cGtnaW5kZXgucGFja2FnZXMuYXBwZW5kKGQpCiAKIAkJCXNlbGYuX3VwZGF0ZV9wa2dpbmRleF9o ZWFkZXIocGtnaW5kZXguaGVhZGVyKQotCQkJZiA9IGF0b21pY19vZnN0cmVhbShvcy5wYXRoLmpv aW4oc2VsZi5wa2dkaXIsICJQYWNrYWdlcyIpKQorCQkJcGtnaW5kZXhfZmlsZW5hbWUgPSBvcy5w YXRoLmpvaW4oc2VsZi5wa2dkaXIsICJQYWNrYWdlcyIpCisJCQlmID0gYXRvbWljX29mc3RyZWFt KHBrZ2luZGV4X2ZpbGVuYW1lKQogCQkJcGtnaW5kZXgud3JpdGUoZikKIAkJCWYuY2xvc2UoKQor CQkJIyBzb21lIHNlY29uZHMgbWlnaHQgaGF2ZSBlbGFwc2VkIHNpbmNlIFRJTUVTVEFNUAorCQkJ YXRpbWUgPSBtdGltZSA9IGxvbmcocGtnaW5kZXguaGVhZGVyWyJUSU1FU1RBTVAiXSkKKwkJCW9z LnV0aW1lKHBrZ2luZGV4X2ZpbGVuYW1lLCAoYXRpbWUsIG10aW1lKSkKIAkJZmluYWxseToKIAkJ CWlmIHBrZ2luZGV4X2xvY2s6CiAJCQkJdW5sb2NrZmlsZShwa2dpbmRleF9sb2NrKQotLSAKMS43 LjguNgoK --e89a8f22c4113e6ecd04c63cb8b4--