* [PATCH 26/28] is_refname_available(): query only possibly-conflicting references
From: mhagger @ 2011-10-28 12:28 UTC (permalink / raw)
To: Junio C Hamano
Cc: git, Jeff King, Drew Northup, Jakub Narebski, Heiko Voigt,
Johan Herland, Julian Phillips, Michael Haggerty
In-Reply-To: <1319804921-17545-1-git-send-email-mhagger@alum.mit.edu>
From: Michael Haggerty <mhagger@alum.mit.edu>
Instead of iterating through all of the references, inquire more
pointedly about the references that could conflict with the new name.
This requires checking for a few individual references, plus iterating
through a small subtree of the rest of the references (and usually the
subtree iteration ends without having to recurse). A big benefit is
that populating the whole loose reference cache (which can be very
expensive) can usually be avoided.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
refs.c | 40 +++++++++++++++++++++++++++++++++-------
1 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/refs.c b/refs.c
index 88ef9dd..6a7f9c3 100644
--- a/refs.c
+++ b/refs.c
@@ -658,7 +658,7 @@ static int name_conflict_fn(const char *existingrefname, const unsigned char *sh
int flags, void *cb_data)
{
struct name_conflict_cb *data = (struct name_conflict_cb *)cb_data;
- if (data->oldrefname && !strcmp(data->oldrefname, existingrefname))
+ if (!strcmp(data->oldrefname, existingrefname))
return 0;
if (names_conflict(data->refname, existingrefname)) {
data->conflicting_refname = existingrefname;
@@ -669,22 +669,48 @@ static int name_conflict_fn(const char *existingrefname, const unsigned char *sh
/*
* Return true iff a reference named refname could be created without
- * conflicting with the name of an existing reference. If oldrefname
- * is non-NULL, ignore potential conflicts with oldrefname (e.g.,
- * because oldrefname is scheduled for deletion in the same
+ * conflicting with the name of an existing reference in direntry. If
+ * oldrefname is non-NULL, ignore potential conflicts with oldrefname
+ * (e.g., because oldrefname is scheduled for deletion in the same
* operation).
*/
static int is_refname_available(const char *refname, const char *oldrefname,
struct ref_entry *direntry)
{
+ int prefixlen = strlen(refname);
+ char *prefix;
+ char *slash;
struct name_conflict_cb data;
+
+ assert(direntry->flag & REF_DIR);
+
+ if (!oldrefname)
+ oldrefname = ""; /* invalid; cannot match any existing refname */
+
+ /* Check whether a prefix of refname is an existing reference: */
+ prefix = xmalloc(prefixlen + 2);
+ memcpy(prefix, refname, prefixlen + 1);
+ for (slash = strchr(prefix, '/'); slash; slash = strchr(slash + 1, '/')) {
+ *slash = '\0';
+ if (strcmp(oldrefname, prefix)) {
+ struct ref_entry *entry = find_ref(direntry, prefix);
+ if (entry) {
+ error("'%s' exists; cannot create '%s'", prefix, refname);
+ free(prefix);
+ return 0;
+ }
+ }
+ *slash = '/';
+ }
+
+ /* Check whether refname is a proper prefix of an existing reference: */
+ prefix[prefixlen++] = '/';
+ prefix[prefixlen] = '\0';
data.refname = refname;
data.oldrefname = oldrefname;
data.conflicting_refname = NULL;
- assert(direntry->flag & REF_DIR);
-
- if (do_for_each_ref_in_dir(direntry, 0, "", name_conflict_fn,
+ if (do_for_each_ref_in_dir(direntry, 0, prefix, name_conflict_fn,
0, DO_FOR_EACH_INCLUDE_BROKEN,
&data)) {
error("'%s' exists; cannot create '%s'",
--
1.7.7
^ permalink raw reply related
* Q: "git diff" using tag names
From: Ulrich Windl @ 2011-10-28 12:28 UTC (permalink / raw)
To: git
Hi,
when using a somewhat older git (of SLES11 SP1 SDK), I could not find a way to "git diff" between two tag names; I can only diff between two commit numbers. I can display a changeset using "git show", but that's not what I wanted.
Is it possible to get the diff I want using older versions, and is such a feature implemented in the current version? If so, since when?
As I'm not subscribed to the list, I'd appreciate CC'ed replies. Thank you.
Greeting
Ulrich
^ permalink raw reply
* Re: Q: "git diff" using tag names
From: Alexey Shumkin @ 2011-10-28 12:59 UTC (permalink / raw)
To: Ulrich Windl; +Cc: git
In-Reply-To: <4EAABC15020000A100007D9D@gwsmtp1.uni-regensburg.de>
Tag is a pointer to a commit (if to say simply)
e.g. in my repo
$ git show-ref --tags --abbrev=7
-->8--
676f194 refs/tags/v2.6.7
b23c481 refs/tags/v2.6.8
-->8--
so
$ git diff v2.6.7..v2.6.8
is equivalent to
$ git diff 676f194..b23c481
etc
> Hi,
>
> when using a somewhat older git (of SLES11 SP1 SDK), I could not find
> a way to "git diff" between two tag names; I can only diff between
> two commit numbers. I can display a changeset using "git show", but
> that's not what I wanted. Is it possible to get the diff I want using
> older versions, and is such a feature implemented in the current
> version? If so, since when?
>
> As I'm not subscribed to the list, I'd appreciate CC'ed replies.
> Thank you.
>
> Greeting
> Ulrich
>
>
^ permalink raw reply
* Re: [PATCH 00/28] Store references hierarchically in cache
From: Ramkumar Ramachandra @ 2011-10-28 13:07 UTC (permalink / raw)
To: mhagger
Cc: Junio C Hamano, git, Jeff King, Drew Northup, Jakub Narebski,
Heiko Voigt, Johan Herland, Julian Phillips
In-Reply-To: <1319804921-17545-1-git-send-email-mhagger@alum.mit.edu>
Hi Michael,
Michael Haggerty writes:
> Therefore, this patch series changes the data structure used to store
> the reference cache from a single array of pointers-to-struct into a
> tree-like structure in which each subdirectory of the reference
> namespace is stored as an array of pointers-to-entry and entries can
> be either references or subdirectories containing more references.
Very nice! I like the idea. Can't wait to start reading the series.
> * refs/replace is almost *always* needed even though it often
> doesn't even exist. Thus the presence of many loose references
> slows down *many* git commands for no reason whatsoever.
Was this one of your primary inspirations for writing this series?
> * When a new reference is created, is_refname_available() is called
> to see whether there is another another reference whose name
> conflicts with the new one. Currently this loads and iterates
> through *all* references. But there are only a few refnames that
> can possibly conflict; for example, given the refname
> "refs/heads/foo/bar", the only possible conflicts are with
> "refs/heads/foo" and "refs/heads/foo/bar/*". Therefore it is
> silly to load and iterate through the whole refname hierarchy.
Hm, the original design does sound quite sub-optimal. I suppose it
was written when Git didn't have so many refs in so many
subdirectories.
> * "git for-each-ref" is capable of searching a subtree of the
> references. But currently this causes all references to be
> loaded.
Ah. I was using git for-each-ref to write a filter-branch like thing
earlier, and I was wondering why it was so slow.
> * the time to create a new branch goes from 180 ms to less than 10 ms
> (my test resolution only includes two decimal places) and the time
> to checkout a new branch does the same.
I'm interested in seeing how the callgraph changed. Assuming you used
Valgrind to profile it, could you publish the outputs?
> * the time for a "git filter-branch" of all commits (which used to
> scale like N^2) goes from 4 hours to 13 minutes. (Since
> filter-branch necessarily *creates* lots of loose references, the
> savings are also there if the references are originally packed.)
This is seriously awesome.
> The efficiency gains are such that some operations are now faster with
> loose references than with packed references; however, some operations
> with packed references slow down a bit.
Curiously, why do operations with packed references slow down? (I'll
probably find out in a few minutes after reading the series, but I'm
asking anyway because it it's very non-obvious to me now)
> These changes do not increase the amount of space per reference needed
> for the reference cache, but they do add one similarly-sized entry for
> each subdirectory (for each of loose and packed). I don't think that
> the space increase should be significant in any reasonable situation.
>
> After these changes, there is a benefit to sharding the reference
> namespace, especially for loose references.
Hm, I wonder what this means for Git hosting services.
> Patches 11-24 change most of the internal functions to work with
> "struct ref_entry *" (namely the kind of ref_entry that holds a
> directory of references) instead of "struct ref_dir *". The reason
> for this change it to allow these functions access to the "flag" and
> "name" fields that are stored in ref_entry and thereby avoid having to
> store redundant information in "struct ref_dir" (which would increase
> the size of *every* ref_entry because of its presence in the union).
Hm, I was wondering why the series was looking so intimidating. Is it
not possible to squash all (or atleast some) of these together?
> From: Michael Haggerty <mhagger@alum.mit.edu>
Nit: Can't you configure your email client to put this in the "From: "
header of your emails?
Thanks for the interesting read.
-- Ram
^ permalink raw reply
* Re: Q: "git diff" using tag names
From: Jakub Narebski @ 2011-10-28 13:21 UTC (permalink / raw)
To: Ulrich Windl; +Cc: git, Jakub Narebski
In-Reply-To: <4EAABC15020000A100007D9D@gwsmtp1.uni-regensburg.de>
"Ulrich Windl" <Ulrich.Windl@rz.uni-regensburg.de> writes:
> When using a somewhat older git (of SLES11 SP1 SDK),
Nb. you can check version of git with "git --version".
> I could not
> find a way to "git diff" between two tag names; I can only diff
> between two commit numbers. I can display a changeset using "git
> show", but that's not what I wanted.
>
> Is it possible to get the diff I want using older versions, and is
> such a feature implemented in the current version? If so, since
> when?
From the very beginning in Git you can use tag name where you need
commit identifier; Git would use commit that tag points to (will
dereference or peel a tag).
That is not possible in some [censored] version control systems; I am
looking at you, Subversion!
So if you can do
$ git show v0.9
$ git show v1.0
you can also do
$ git diff v0.9 v1.0
and
$ git log v0.9..v1.0
--
Jakub Narębski
^ permalink raw reply
* Re: git alias and --help
From: Jakub Narebski @ 2011-10-28 13:26 UTC (permalink / raw)
To: Miles Bader; +Cc: Junio C Hamano, Gelonida N, git, Jakub Narebski
In-Reply-To: <buoty6t9937.fsf@dhlpc061.dev.necel.com>
Miles Bader <miles@gnu.org> writes:
> Junio C Hamano <gitster@pobox.com> writes:
> > > > git branch --help
> > >
> > > How about "git help branch"?
> >
> > The reason why we do not do what you seem to be suggesting is because
> > giving the same behaviour to "git b --help" as "git branch --help" is
> > wrong.
>
> I agree with Gelonida's followup: although what you say makes sense,
> it's still pretty annoying behavior for the very common case of a
> simple renaming alias...
>
> E.g., I have "co" aliased to "checkout", and so my fingers are very
> very inclined to say "co" when I mean checkout... including when
> asking for help. I actually end up typing "git co --help", grumbling,
> and retyping with the full command name, quite reguarly.
>
> What I've often wished is that git's help system would output
> something like:
>
> $ git help co
> `git co' is aliased to `checkout'
>
> Here's the help entry for `checkout':
>
> GIT-CHECKOUT(1) Git Manual GIT-CHECKOUT(1)
Wouldn't it be more useful to say something like this:
$ git co --help
`git co' is aliased to `checkout'
You can see help entry for `checkout' with "git checkout --help"
Then help is only copy'n'paste away.
(This helping text probably should be controlled by some advice.*
config variable).
P.S. I wonder if allowing to run command if you specify unambiguous
prefix would be a good replacement for such aliases?
--
Jakub Narębski
^ permalink raw reply
* Re: git alias and --help
From: Jakub Narebski @ 2011-10-28 13:27 UTC (permalink / raw)
To: Gelonida N; +Cc: git, Jakub Narebski
In-Reply-To: <j8ds01$fc7$1@dough.gmane.org>
Gelonida N <gelonida@gmail.com> writes:
[...]
> Another small detail:
>
> Let's assume I have following alias:
>
> log = log --name-status
>
>
> In this case I directly get the help text for git log
> if I typed 'git log --help' (or 'git help log').
> I don't even see, that my log is in reality aliased.
That is because it doesn't work: git does not allow for aliasing its
built-in commands.
--
Jakub Narębski
^ permalink raw reply
* Re: [RFC/PATCH] define the way new representation types are encoded in the pack
From: Jakub Narebski @ 2011-10-28 13:41 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Nicolas Pitre, Shawn O. Pearce, Jeff King
In-Reply-To: <7v62j9veh3.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
> When bit 4-6 encodes type 5, the first byte is used this way:
>
> - Bit 0-3 denotes the real "extended" representation type. Because types
> 0-7 can already be encoded without using the extended format, we can
> offset the type by 8 (i.e. if bit 0-3 says 3, it means representation
> type 11 = 3 + 8);
Why not use third byte for that instead?
--
Jakub Narębski
^ permalink raw reply
* Unused (assigned but not read) option in diff_no_index
From: Piotr Krukowiecki @ 2011-10-28 15:08 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano
Hi,
I noticed that "options" variable in diff-no-index.c:diff_no_index()
is modified when "-q" is passed but not used (not read) at all. So
either it can be removed or it should be used. "-q" is not described
in git-diff man page.
This code was introduced in 0569e9b8 "git diff": do not ignore index
without --no-index" - it was moved from builtin-diff.c (where it was
used) but the code was refactored so I can't say if it should still
be.
$ grep -E -2 '\boptions\b' diff-no-index.c
int i;
int no_index = 0;
unsigned options = 0;
/* Were we asked to do --no-index explicitly? */
--
i++;
else if (!strcmp(argv[i], "-q")) {
options |= DIFF_SILENT_ON_REMOVED;
i++;
}
--
Piotr Krukowiecki
^ permalink raw reply
* Re: [RFC/PATCH] define the way new representation types are encoded in the pack
From: Junio C Hamano @ 2011-10-28 15:24 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git, Nicolas Pitre, Shawn O. Pearce, Jeff King
In-Reply-To: <m3wrbp44kr.fsf@localhost.localdomain>
Jakub Narebski <jnareb@gmail.com> writes:
> Junio C Hamano <gitster@pobox.com> writes:
>
>> When bit 4-6 encodes type 5, the first byte is used this way:
>>
>> - Bit 0-3 denotes the real "extended" representation type. Because types
>> 0-7 can already be encoded without using the extended format, we can
>> offset the type by 8 (i.e. if bit 0-3 says 3, it means representation
>> type 11 = 3 + 8);
>
> Why not use third byte for that instead?
Is it a good enough reason that there is no upside for doing so?
^ permalink raw reply
* [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Sebastian Schuberth @ 2011-10-28 15:28 UTC (permalink / raw)
To: git; +Cc: msysgit
For a plain string where only the length is known, strbuf.alloc needs to
be initialized to the length. Otherwise strbuf.alloc is 0 and a later
call to strbuf_setlen() will fail.
This bug surfaced when calling git blame under Windows on a *.doc file.
The *.doc file is converted to plain text by antiword via the textconv
mechanism. However, the plain text returned by antiword contains DOS line
endings instead of Unix line endings which triggered the strbuf_setlen()
which previous to this patch failed.
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
---
builtin/blame.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/builtin/blame.c b/builtin/blame.c
index 26a5d42..86c0537 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -2113,8 +2113,10 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
switch (st.st_mode & S_IFMT) {
case S_IFREG:
if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
- textconv_object(read_from, mode, null_sha1, &buf.buf, &buf_len))
+ textconv_object(read_from, mode, null_sha1, &buf.buf, &buf_len)) {
+ buf.alloc = buf_len;
buf.len = buf_len;
+ }
else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
die_errno("cannot open or read '%s'", read_from);
break;
--
1.7.7.msysgit.1.4.gcc6bb.dirty
^ permalink raw reply related
* git slow over https
From: Mika Fischer @ 2011-10-28 15:28 UTC (permalink / raw)
To: Git Mailing List
[-- Attachment #1: Type: text/plain, Size: 765 bytes --]
Hi,
I have an apache server that serves git repositories over https. I
have the problem that git is very slow when accessing it, as in 3
seconds for a "git pull" that does nothing.
I tracked the problem down to git sleeping for 50ms using select from
time to time while downloading the response of the server. In my case
this really hurts performance (see attached strace). However, with a
different https server things work quite fine.
If I remove the select in http.c:673 (in run_active_slot), then things
are fast also with my server.
So my questions are:
1) What's the purpose of the select in http.c:673? Can it be removed?
2) If it serves a useful purpose, what can be the reason that it hurts
performance so much in my case?
Best regards,
Mika Fischer
[-- Attachment #2: strace-before-https.txt --]
[-- Type: text/plain, Size: 46013 bytes --]
10519 16:59:48.469266 connect(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("123.123.123.123")}, 16) = -1 EINPROGRESS (Operation now in progress)
10519 16:59:48.469452 poll([{fd=3, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
10519 16:59:48.469548 poll([{fd=3, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
10519 16:59:48.469620 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.519938 poll([{fd=3, events=POLLOUT|POLLWRNORM}], 1, 0) = 1 ([{fd=3, revents=POLLOUT|POLLWRNORM}])
10519 16:59:48.520111 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
10519 16:59:48.520258 getpeername(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("123.123.123.123")}, [16]) = 0
10519 16:59:48.520400 getsockname(3, {sa_family=AF_INET, sin_port=htons(48777), sin_addr=inet_addr("192.168.2.164")}, [16]) = 0
10519 16:59:48.520520 stat("/dev/urandom", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
10519 16:59:48.520634 open("/dev/urandom", O_RDONLY) = 4
10519 16:59:48.520702 read(4, "_\v\262\356S\331q\370>\2408ECd\4x\265\241\207^#G290*0\275\364\f\211\342"..., 1024) = 1024
10519 16:59:48.521289 close(4) = 0
10519 16:59:48.521392 open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 4
10519 16:59:48.521497 fstat(4, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
10519 16:59:48.521589 poll([{fd=4, events=POLLIN}], 1, 10) = 1 ([{fd=4, revents=POLLIN}])
10519 16:59:48.521680 read(4, "\301{V]\5\322f+\177\255\23\26\16\212\10V\f.>\264\223qr\231\30f\346\31t\6\271\323", 32) = 32
10519 16:59:48.521779 close(4) = 0
10519 16:59:48.521847 getuid() = 10001
10519 16:59:48.522133 open("/etc/ssl/certs/ca-certificates.crt", O_RDONLY) = 4
10519 16:59:48.522239 fstat(4, {st_mode=S_IFREG|0644, st_size=240312, ...}) = 0
10519 16:59:48.522326 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8f2c694000
10519 16:59:48.522415 read(4, "-----BEGIN CERTIFICATE-----\nMIIE"..., 4096) = 4096
10519 16:59:48.522761 read(4, "n8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk"..., 4096) = 4096
10519 16:59:48.522988 brk(0x14b0000) = 0x14b0000
10519 16:59:48.523272 read(4, "FhRpZ2NhQHNnZG4ucG0uZ291di5mcjAe"..., 4096) = 4096
10519 16:59:48.523598 read(4, "W64iLgpq0i\n5ALudBF/TP94HTXa5gI06"..., 4096) = 4096
10519 16:59:48.523892 read(4, "WqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhm"..., 4096) = 4096
10519 16:59:48.524390 read(4, "MSEwHwYD\nVQQDExhBZGRUcnVzdCBDbGF"..., 4096) = 4096
10519 16:59:48.524737 read(4, "----\n-----BEGIN CERTIFICATE-----"..., 4096) = 4096
10519 16:59:48.525168 read(4, "gNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwU"..., 4096) = 4096
10519 16:59:48.525581 read(4, "gwUQnV5cGFzcyBBUy05ODMxNjMzMjcxH"..., 4096) = 4096
10519 16:59:48.525960 read(4, "c/c3et6FtzF8LRb+1VvG7q6KR5smzDo+"..., 4096) = 4096
10519 16:59:48.526242 brk(0x14d1000) = 0x14d1000
10519 16:59:48.526450 read(4, "UMI/cjDpwyVV5xnIQFUZot/eZOKjRa3s"..., 4096) = 4096
10519 16:59:48.526925 read(4, "UEBhMCRlIxETAPBgNVBAoTCENlcnRwbH"..., 4096) = 4096
10519 16:59:48.527213 read(4, "\nHSAAMCowKAYIKwYBBQUHAgEWHGh0dHA"..., 4096) = 4096
10519 16:59:48.527673 read(4, "HZGWCwEiwqJH5YZ92IFCokcdmtet4\nYg"..., 4096) = 4096
10519 16:59:48.528119 read(4, "\nbCBSb290MB4XDTA2MTIxNTA4MDAwMFo"..., 4096) = 4096
10519 16:59:48.528486 read(4, "CQYDVQQGEwJE\nRTEcMBoGA1UEChMTRGV"..., 4096) = 4096
10519 16:59:48.528897 read(4, "LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQg"..., 4096) = 4096
10519 16:59:48.529285 read(4, "669VmxMvLz4Bcpk9Ok0oSy1\nc+HCPujI"..., 4096) = 4096
10519 16:59:48.529484 brk(0x14f2000) = 0x14f2000
10519 16:59:48.529680 read(4, "2+z7pnIkPFc4YsIV4IU9rTw76NmfN\nB/"..., 4096) = 4096
10519 16:59:48.530139 read(4, "GA1UdHwRpMGcwZaBjoGGkXzBdMQswCQY"..., 4096) = 4096
10519 16:59:48.530598 read(4, "QGCSqGSIb3DQEJARYXY2FAZmlybWFwcm"..., 4096) = 4096
10519 16:59:48.531061 read(4, "v\n/NgdRN3ggX+d6YvhZJFiCzkIjKx0nV"..., 4096) = 4096
10519 16:59:48.531551 read(4, "zEW\nMBQGA1UEChMNR2VvVHJ1c3QgSW5j"..., 4096) = 4096
10519 16:59:48.531885 read(4, "DVQQLEwdSb290IENBMRswGQYDVQQDExJ"..., 4096) = 4096
10519 16:59:48.532268 read(4, "hbCBDaGFtYmVyc2lnbiBSb290IC0gMjA"..., 4096) = 4096
10519 16:59:48.532623 read(4, "sBCNnLsak3c78QA3xMYV18meMjWCnl3v"..., 4096) = 4096
10519 16:59:48.532772 brk(0x1513000) = 0x1513000
10519 16:59:48.533032 read(4, "ND CERTIFICATE-----\n-----BEGIN C"..., 4096) = 4096
10519 16:59:48.533310 read(4, "DQYJKoZIhvcNAQEFBQADggEBANMTnGZj"..., 4096) = 4096
10519 16:59:48.533796 read(4, "zCCApswEgYDVR0TAQH/BAgwBgEB/wIBB"..., 4096) = 4096
10519 16:59:48.534165 read(4, "JYIZIAYb4\nQgEBBAQDAgAHMIICYAYJYI"..., 4096) = 4096
10519 16:59:48.534608 read(4, "DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6S"..., 4096) = 4096
10519 16:59:48.534936 read(4, "kqhkiG9w0BAQUFAAOCAQEAitQUtf70mp"..., 4096) = 4096
10519 16:59:48.535276 read(4, "p2sNbtrCD2dDQ4iH782CnO11gUyeim/Y"..., 4096) = 4096
10519 16:59:48.535755 read(4, "DExFTVFJvbmxpbmUxLTIwNDgtNTAdBgN"..., 4096) = 4096
10519 16:59:48.536091 brk(0x1534000) = 0x1534000
10519 16:59:48.536256 read(4, "GghAfaReUw132HquHw0L\nURYD7xh8yOO"..., 4096) = 4096
10519 16:59:48.536658 read(4, "STEP\nMA0GA1UEChMGU29uZXJhMRkwFwY"..., 4096) = 4096
10519 16:59:48.536961 read(4, "7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL\nv"..., 4096) = 4096
10519 16:59:48.537276 read(4, "sfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0"..., 4096) = 4096
10519 16:59:48.537747 read(4, "S7twSNC/K5/FqdOxa3L8iYq/6KUFkuoz"..., 4096) = 4096
10519 16:59:48.538081 read(4, "C1rxn9KVuj7QG9YVHaO+htXbD8BJZLsu"..., 4096) = 4096
10519 16:59:48.538524 read(4, "2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA"..., 4096) = 4096
10519 16:59:48.538968 read(4, "BUcnVzdENlbnRlciBDbGFzcyAzIENBMS"..., 4096) = 4096
10519 16:59:48.539306 read(4, "8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6p"..., 4096) = 4096
10519 16:59:48.539505 brk(0x1555000) = 0x1555000
10519 16:59:48.539818 read(4, "sea9P63RPZYLhY3Naye7twWb7LuRqQoH"..., 4096) = 4096
10519 16:59:48.540294 read(4, "dJSGHg91\nyekIYfUGbTBuFRkC6VLAYtt"..., 4096) = 4096
10519 16:59:48.540857 read(4, "MvzX41MPRKA5cOp9wGDMgd8SirwIDAQA"..., 4096) = 4096
10519 16:59:48.541402 read(4, "NTAz\nBgNVBAsTLFZhbGlDZXJ0IENsYXN"..., 4096) = 4096
10519 16:59:48.541855 read(4, "3vjgw2IIPVQT60nKWVSFJuUrjxuf6/Wh"..., 4096) = 4096
10519 16:59:48.542299 read(4, "SqGSIb3DQEB\nAQUAA4GNADCBiQKBgQCq"..., 4096) = 4096
10519 16:59:48.542828 brk(0x1576000) = 0x1576000
10519 16:59:48.542923 read(4, "Gb3IgYXV0aG9yaXplZCB1c2Ugb25seTF"..., 4096) = 4096
10519 16:59:48.543307 read(4, "MIno3Nij7SqAP395ZVc+FSBm\nCC+Vk7+"..., 4096) = 4096
10519 16:59:48.543784 read(4, "AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUT"..., 4096) = 4096
10519 16:59:48.544315 read(4, "hbim1vZZ3RrXYCP\nKZ2GG9mcDZhtdhAo"..., 4096) = 4096
10519 16:59:48.544643 read(4, "w=\n-----END CERTIFICATE-----\n---"..., 4096) = 4096
10519 16:59:48.545178 read(4, "IHogby5vLjEkMCIGA1UECxMbQ2VudHJ1"..., 4096) = 4096
10519 16:59:48.545563 read(4, "3d3cuY2VudHJhc3QucGwwgY4GA1UdIwS"..., 4096) = 4096
10519 16:59:48.546023 read(4, "BTaWduZXQgLSBSb290Q0EwHhcNMDIwND"..., 4096) = 4096
10519 16:59:48.546350 brk(0x1597000) = 0x1597000
10519 16:59:48.546442 read(4, "9XFAUEiO/DtEBs0B7wJGx7lgJeJpQUcG"..., 4096) = 4096
10519 16:59:48.546923 read(4, "1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMS"..., 4096) = 2744
10519 16:59:48.547214 read(4, "", 4096) = 0
10519 16:59:48.547288 close(4) = 0
10519 16:59:48.547341 munmap(0x7f8f2c694000, 4096) = 0
10519 16:59:48.548900 open("/proc/meminfo", O_RDONLY) = 4
10519 16:59:48.549019 fstat(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
10519 16:59:48.549102 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8f2c694000
10519 16:59:48.549161 read(4, "MemTotal: 8152752 kB\nMemF"..., 1024) = 1024
10519 16:59:48.549301 close(4) = 0
10519 16:59:48.549372 munmap(0x7f8f2c694000, 4096) = 0
10519 16:59:48.550334 write(3, "\26\3\1\0\344\1\0\0\340\3\1N\252\303dn\224\f\342\23\25\267\264\t\227\362\262\333\255\223\347\n"..., 233) = 233
10519 16:59:48.550434 read(3, 0x1584800, 7) = -1 EAGAIN (Resource temporarily unavailable)
10519 16:59:48.550512 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
10519 16:59:48.550574 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.600930 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.601151 read(3, "\26\3\1\0U\2\0", 7) = 7
10519 16:59:48.601461 read(3, "\0Q\3\1N\252\303d\222\350\323\235\3519\223Z\344\3401\244\3246c\17\316G\224\256\315E\323\0"..., 83) = 83
10519 16:59:48.601793 read(3, "\26\3\1\4\250", 5) = 5
10519 16:59:48.601933 read(3, "\v\0\4\244\0\4\241\0\4\2360\202\4\2320\202\3\202\240\3\2\1\2\2\1\0010\r\6\t*\206"..., 1192) = 1192
10519 16:59:48.602400 read(3, "\26\3\1\2\r", 5) = 5
10519 16:59:48.602579 read(3, "\f\0\2\t\0\200\326}\344@\313\273\334\0316\326\223\323J\375\n\325\f\204\3229\244_R\v\270\201"..., 525) = 525
10519 16:59:48.603078 read(3, "\26\3\1\0\4", 5) = 5
10519 16:59:48.603169 read(3, "\16\0\0\0", 4) = 4
10519 16:59:48.608864 brk(0x15c7000) = 0x15c7000
10519 16:59:48.609040 brk(0x15f7000) = 0x15f7000
10519 16:59:48.609276 write(3, "\26\3\1\0\206\20\0\0\202\0\200\253|\31\3y}l\323Hj\262\305#\207@\34\21\252\201Ui"..., 198) = 198
10519 16:59:48.609420 read(3, 0x1584803, 5) = -1 EAGAIN (Resource temporarily unavailable)
10519 16:59:48.609521 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.659836 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.660004 read(3, "\24\3\1\0\1", 5) = 5
10519 16:59:48.660164 read(3, "\1", 1) = 1
10519 16:59:48.660371 brk(0x161b000) = 0x161b000
10519 16:59:48.660517 brk(0x163f000) = 0x163f000
10519 16:59:48.660552 read(3, "\26\3\1\0000", 5) = 5
10519 16:59:48.660573 read(3, "GI\0\317<C3\330T\4\341\32S\347\5o\222\240\26z\322\242\207\377\211Y\0!L\t\316\276"..., 48) = 48
10519 16:59:48.660689 write(3, "\27\3\1\0\2602\260\253\272\225\31+I\327\26[\210\6\265\222qB\375\r\250\323\1\302\216Z5\242"..., 181) = 181
10519 16:59:48.660727 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
10519 16:59:48.660885 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.711216 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.711528 read(3, "\27\3\1\1 ", 5) = 5
10519 16:59:48.711750 read(3, "\234\3\2\374\366\355VK\251\212\247\244-\251&\303\343\257\360\250=\35Q\307\210B\241S\17\364\357l"..., 288) = 288
10519 16:59:48.712041 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.762306 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.762488 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:48.762654 read(3, "Y8\23}\32\24\210\202\1\336\21\32\17\5\r\7\202\331\f\357\200\322\r\221F\5M\354\376\255?\35", 32) = 32
10519 16:59:48.762873 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.813193 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.813365 read(3, "\27\3\1\0@", 5) = 5
10519 16:59:48.813529 read(3, "\274\275\314\37\260F\355\374\32\370\306\331\362`3j!\236\277'\217\266<\200\355\272\fG\37\325$H"..., 64) = 64
10519 16:59:48.813748 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.864026 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.864252 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:48.864503 read(3, "\300t\301i\217\311\22\34|4\22F}:\367\347\35\"#2\235\3535\35\330if\362\254B\373\201", 32) = 32
10519 16:59:48.864815 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.915260 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.915581 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:48.915760 read(3, "\220Y\22\247\203\347\373\243\3vR\256\233SJF\373\255H\201~\313{\321\224\310\212:\260\254\276*", 32) = 32
10519 16:59:48.915982 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:48.966342 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:48.966514 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:48.966677 read(3, "\227x\354Z\260\34\254\367\262\20\243z\217\201dP\265\222\23\4\204\277O\37\204|\225&\311\225\230\352", 32) = 32
10519 16:59:48.966905 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.017224 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.017316 read(3, "\27\3\1\0\240", 5) = 5
10519 16:59:49.017383 read(3, "1\236\6<\31\276\36\224\202\261\206(H\210vNz\331#3\333\202\213\360\241\21k\360\320\2516\212"..., 160) = 160
10519 16:59:49.017638 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.068073 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.068362 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.068632 read(3, "\253\232\203\214^mN\247\232`@\30\255}\33s\203u9\250\201m\326,R9=\224!j\331}", 32) = 32
10519 16:59:49.068847 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.119200 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.119374 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.119538 read(3, "\366\376-:\303\\\231\344\4\304\24\326\311A\320K\360\213\273\250\345\r\22\347\320\224\305\311\26\211\302(", 32) = 32
10519 16:59:49.119758 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.170093 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.170273 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.170436 read(3, "A.'\5\n\220\232\r\306Q9\367\355\316$\3703d\375\301,\235DfA\312\331C\v\317\17\357", 32) = 32
10519 16:59:49.170605 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.220950 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.221211 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:49.221366 read(3, "P\36@o5@\16\254a\211\321\255\265jm\334\"v\376~\24 \t\37\254\272;~\22\214S\370"..., 48) = 48
10519 16:59:49.221588 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.271941 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.272170 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.272378 read(3, "\346\231E\373\275\273\27\260\5[#\17\342\337\2071\343n\5\f9\376\226\26\350\251\364\215\237W\356\6", 32) = 32
10519 16:59:49.272591 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.322948 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.323118 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.323287 read(3, "\2\266\366\316x~\323\231\355\370\303\17\2\256\t\215\204\216\5rn\247\331\342\355\373\331\376\204;qS", 32) = 32
10519 16:59:49.323534 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.373886 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.373977 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.374042 read(3, "\204\300:\240\340\246#\10\36\261N\271)\352\246\204Q\323\t\266\205\35\226\210S*\37p\373\264\v\362", 32) = 32
10519 16:59:49.374226 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.424552 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.424732 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:49.424897 read(3, "Qu%\377\335\314\232\345hu\223\315\343\311\303F\305\352\275}\267W\nQ\362\5\326\f\357f}J"..., 48) = 48
10519 16:59:49.425125 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.475529 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.475714 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.475879 read(3, "^\214\222\21W\351\313\354\232H\2556\213\36K\355\234#~fOCR\363\347\275\201\356\352\332<i", 32) = 32
10519 16:59:49.476094 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.526451 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.526627 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.526792 read(3, "\2\210\2=\322uZB\335&8\1\r6\233\265\32\10dU0\370\304\337XX\351\316\1\310\210\200", 32) = 32
10519 16:59:49.527014 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.577326 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.577408 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:49.577605 read(3, "\237\366\226\364\204r\241\263\231\243\235\tvkE\2\5\233O\30\225\20\317\236\375`|\344\347\222uA"..., 48) = 48
10519 16:59:49.577985 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.628514 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.628803 read(3, "\27\3\1\0@", 5) = 5
10519 16:59:49.628975 read(3, "\225\313P\6\354\370\23[\276\311v\322*\341\327\5\7\36\223\353\2048\252\203\332\325\200\203\30\323\242\220"..., 64) = 64
10519 16:59:49.629197 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.679509 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.679685 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.679849 read(3, "\341\314\350H./\337\344W0\5\30\277\n4y C\17$b5+\341\320\210q%=\346\340\206", 32) = 32
10519 16:59:49.680078 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.730399 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.730514 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.730593 read(3, "o\267\243\5<\261\256}\220\3612\10\4\221Jy\3079\245>\342\266\276\215\301|\201\370\1\344\375\371", 32) = 32
10519 16:59:49.730688 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.781142 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.781350 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:49.781468 read(3, "\352\206\236\3714\233I\361\340\245\331!\340\357z\254\350'\303,\321/\326\2\335\203\20\20\214\v\256\32"..., 48) = 48
10519 16:59:49.781821 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.832267 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.832494 read(3, "\27\3\1\0\320", 5) = 5
10519 16:59:49.832664 read(3, "\356(?\216\256\362_\354\252k\322\264}s\305\t~\373\226.\26\350\212\230E\350E\7\243\225\353'"..., 208) = 208
10519 16:59:49.832911 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.883272 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.883462 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.883619 read(3, "LH\324\313\352\342\24\346\21\3270p\303|`kxpW\377\250\376^\217X\313\16x5\362\201\316", 32) = 32
10519 16:59:49.883774 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.934023 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.934146 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.934348 read(3, "WY,\217\307<\200tR\312\337\245\204\376\243\236\211\207\305f\335\347P\240\360\23\361AE\6Vr", 32) = 32
10519 16:59:49.934573 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:49.984976 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:49.985277 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:49.985655 read(3, "\326\214\342\271\262O\26\317&\337\334\375:Z\303l9$&AVv\212Z\361q\327\2455\242\262g", 32) = 32
10519 16:59:49.985926 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.036273 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.036445 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:50.036613 read(3, "W\321\270\234\201AuJ\313c\322\355\v\300\272\260\334\24\320\340}\262k\276E\327\276\5\333\355y\321"..., 48) = 48
10519 16:59:50.036842 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.087201 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.087294 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.087361 read(3, "\20\345\263\33\37;k>Z4\342c\362\242\2l\363\215\2554\375e\235\316\266\351\264\224k%T\263", 32) = 32
10519 16:59:50.087395 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.137705 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.138006 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.138215 read(3, "\323\237\312Vp.wb\370\247ji;5\214|I\322\352\373\17x\35`\312}\334\376\336MS\322", 32) = 32
10519 16:59:50.138443 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.188830 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.188982 read(3, "\27\3\1\0`", 5) = 5
10519 16:59:50.189148 read(3, "\303\207\327\225\232G]+\341h\364:\250\234_F\247Z\31\242\214\260\365H>J_Y\243 9\314"..., 96) = 96
10519 16:59:50.189367 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.239689 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.239897 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.240060 read(3, "k\31\376\300\253\2077\313\233\2417\236u\270\320\312\234\37XmVd\341\f\350Dp\354\330\35_\213", 32) = 32
10519 16:59:50.240285 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.290639 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.290733 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.290986 read(3, "\t'\352\312p\2630\316\3441\216RPLl\236\302\252\n$'\37\343{\35\320\327\347e\233\3\3", 32) = 32
10519 16:59:50.291361 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.341803 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.342016 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:50.342190 read(3, "\24\277\217\330\t^\352\376\273\5w\326E`Z\370\245\7a\321\336w\303\n\373I\324=\331\f\361\272"..., 48) = 48
10519 16:59:50.342410 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.392802 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.392982 read(3, "\27\3\1\0\220", 5) = 5
10519 16:59:50.393151 read(3, "\203N\235x\202D\207C \22/s\3\\3|\355\244w\274,\307!\254@W,\231\323\re7"..., 144) = 144
10519 16:59:50.393383 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.443746 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.443921 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.444001 read(3, "&r\310\305b\220\316\320\16\331\262\333\352c\312\"6\4\255\370\274\374\310\215\247$\242\310\177SU\215", 32) = 32
10519 16:59:50.444200 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.494637 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.494934 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.495209 read(3, "I\371\ts=\22l\244\233\335~\245\205\271\304\360\266J\300\0\322\20\254\306\177e@\3173\316]\23", 32) = 32
10519 16:59:50.495469 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.545826 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.546012 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.546177 read(3, "\21\5\375\262nh_\311\212\315\f\222\3522\204\377\245p\3478\236O\365&PSZ\215\353\312~\4", 32) = 32
10519 16:59:50.546399 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.596762 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.596933 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.597097 read(3, "\200\206\340\307\264\263\366\\?#.P\277\271\17J\303J\26u\252\357=M\247\225.\2\t\2561|", 32) = 32
10519 16:59:50.597237 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.647631 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.647921 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.648166 read(3, "\2069=NDJ/>\30\315\243\177\31\367\r5\26\264\323U\252\2052AJ\264U\231\265\373b\t", 32) = 32
10519 16:59:50.648389 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.698743 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.698975 read(3, "\27\3\1\0p", 5) = 5
10519 16:59:50.699134 read(3, "\207\327\312\310i\366\202\312\267\2146\343@g\375\r\315b.;e\313\354\267\321\252e{\265\n\217\v"..., 112) = 112
10519 16:59:50.699354 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.749679 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.749851 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.750016 read(3, "v\323ge\251\216z\227}\274w\323o&s\321\26\360\275\353\215\243\276c\301\376Y\221Yd\25=", 32) = 32
10519 16:59:50.750240 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.800594 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.800677 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.800749 read(3, "\t\250#\34h\1\r\215\272\330\356:n\3\210\247\350e\315Gt\302\37KqTi=w\24Sk", 32) = 32
10519 16:59:50.801253 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.851690 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.851974 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.852176 read(3, "u\2640\3369\310O\251\0C\332\1\330\224\2007\205\264\352\3076\341\203\262\202u<\362+\340\250\226", 32) = 32
10519 16:59:50.852398 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.902756 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.902929 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.903170 read(3, "\247\245\263\311\24\257\214\3219R\23\220-\5\230\263\0\33\314\03410\220H\312`\225\271\331\342\6\26", 32) = 32
10519 16:59:50.903396 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:50.953755 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:50.953921 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:50.953992 read(3, "\224\v\334rd\205Z\270i\345\353\202\240\4G\r\371\36\324^zI\220\314\370\273\374\232\250 O~", 32) = 32
10519 16:59:50.954083 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.004459 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.004706 read(3, "\27\3\1\0P", 5) = 5
10519 16:59:51.004924 read(3, "\347\307\376b\2179I\203\231\1\251\271\225F\202.\4\3638\302\36~c\221f\211r&*\17\265_"..., 80) = 80
10519 16:59:51.005148 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.055555 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.055739 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.055903 read(3, "\233\16D\371\213\271[4|\315\246\226\3\26\261\343\313\364h7u\7M\255\226\237\0372\317\360\337\271", 32) = 32
10519 16:59:51.056123 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.106493 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.106668 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.106835 read(3, "\3764\26458\340V\335)`v\231\211\237cW_\315\177\10s\312=Y\336\304|\2536ZK\267", 32) = 32
10519 16:59:51.107057 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.157382 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.157621 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.157903 read(3, "m\312\221b \365\177\31V=\276E\177\4\10\312\222\240\253wq\0\257\226\247>\320\277\371\215\16\211", 32) = 32
10519 16:59:51.158149 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.208563 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.208772 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.208940 read(3, "\225\372\344\210\207\33\346\"\373#\243\342g,~J\213\263\rV\330ZBB\201\20\252\376\211{\2521"..., 48) = 48
10519 16:59:51.209159 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.259478 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.259648 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.259812 read(3, "%\213\2\375U\375\254\215\256Xo\221\204\254\22\2072\\+\215\242h\351\33\304L\302f\275\366\314\337", 32) = 32
10519 16:59:51.260035 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.310359 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.310531 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.310615 read(3, "\261\312\0041\t!S\352\371\362\10\30{E\267\nKN\2504C\215\330JX\322\242\226a\30\243p", 32) = 32
10519 16:59:51.310707 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.361113 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.361397 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.361611 read(3, "P\275H\6M\354rv\257\236\1\242\355\271\333O}*\243H\215\345IR\336\242\234\260\3101\313\221"..., 48) = 48
10519 16:59:51.361833 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.412143 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.412393 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.412575 read(3, ",C\314\245!\215\v\375q\2411\273|\233t\353\245$S>+\321B\10\222\240\327\242+S\37\307", 32) = 32
10519 16:59:51.412811 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.463107 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.463279 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.463443 read(3, "\337bP\6\246H\364\32\v\224\301\223\3.{\304\227Rf\256~\263\346=SPj\2015\202\"+", 32) = 32
10519 16:59:51.463667 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.513991 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.514076 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.514242 read(3, "L\224\202Z\371\272\221\256\246\241\272\245\212\330Y\266\345\231\335\360\17\374\261.\234h>\267\0\300-h", 32) = 32
10519 16:59:51.514615 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.564961 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.565143 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.565321 read(3, "\205\351\345\241P\3061\273\323{7\304\273\223I\34\330\373\3\233oC[[\33\271\334\267w\24\347r"..., 48) = 48
10519 16:59:51.565545 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.615903 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.616063 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.616226 read(3, "\345|6\255\273\370r\363\24\26\216E\363\260M\276\215\7eU\345\23\34pL%a\24\370\243\276\223", 32) = 32
10519 16:59:51.616463 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.666783 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.666973 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.667084 read(3, "\31\353\31105\315\2613\272[w\235\241G\276\315\267\300\336\"\305\315\300q\25\371\21~\277\347|z", 32) = 32
10519 16:59:51.667187 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.717588 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.717771 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.717935 read(3, "\243\262\3\245\30\3\4\3727-h\17j\275Z\220t\26\317gG\"\235\207?\244\330\267\313\7\352\270"..., 48) = 48
10519 16:59:51.718178 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.768501 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.768785 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.768962 read(3, "\324\277H\242PT\230\22jI\234\305\245\227\22\211s\365\332V \10\0327p\314\300\242X*Im"..., 48) = 48
10519 16:59:51.769183 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.819540 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.819717 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.819882 read(3, "0\26\276\265/\325\324\16g_F\324.!\313\316\17\33\317p(e\242\207\325S\32c\247(D\250", 32) = 32
10519 16:59:51.820105 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.870403 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.870470 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.870516 read(3, "\322\356\267\256\346\243\302\32j\3\246\320\320\222eM\363'\16\202\3666g\th7q\ry/'\335", 32) = 32
10519 16:59:51.870572 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.920973 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.921241 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:51.921417 read(3, "\360\365<\240\320'\307t\303\321t\304\217L(N\300Z\272o7\275!\251\376\233\346\275\250\355\213<"..., 48) = 48
10519 16:59:51.921649 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:51.972283 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:51.972466 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:51.972629 read(3, "\220e16\276b\207\200%D\246m_\201\204\207Y\224\27\336\233\242\37\10\22\367\361\252\234\7`\247", 32) = 32
10519 16:59:51.972852 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.023211 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.023383 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.023547 read(3, "\n\244U\4P\232@/o\323\232N\0\374h\334\253\3568U\23\353|\334``\36\212\250\243tI", 32) = 32
10519 16:59:52.023722 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.074066 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.074367 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:52.074555 read(3, "\260\3l\217\207T9\2213A\210\25L\207\375\373\326H\3257;F\346\351N\201\243\347\230\320\6n"..., 48) = 48
10519 16:59:52.074687 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.125056 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.125233 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.125359 read(3, "\30\262&)j)j7,\323\356*\366\201\307\262\324\337\322\203\214M\326\225\320\177%\262\266\2050C", 32) = 32
10519 16:59:52.125503 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.175888 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.176112 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.176276 read(3, "vm\243t\262\255\210\254\v\374\233`\377c;\261{\345\234`v\232\0216^M\216p\21]\230\r", 32) = 32
10519 16:59:52.176499 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.226856 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.227037 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.227189 read(3, "\216\331\\\251l\242\t%@\221\\IxL\266\"2\361i\300L\277\363\236w'\311\351\2419\2520", 32) = 32
10519 16:59:52.227289 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.277652 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.277940 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.278223 read(3, "G\202\"\253[KR\351\322\244\303\274r\233\22\260/=,\35\354\3253\334q\16\335\307\257\350F7", 32) = 32
10519 16:59:52.278478 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.328875 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.329055 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:52.329224 read(3, "b\354\227\373X\7\211s[\3611\"\357\375p\254\\eeA\2621nW\35\4\361u\353\276\204\324"..., 48) = 48
10519 16:59:52.329446 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.379807 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.379987 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.380151 read(3, "\0214\342\327Q\361\200\375\326\276\25\325\346\365\252\247\317\316\330\30~4\24\305X\21*\30\207.\374\221", 32) = 32
10519 16:59:52.380374 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.430697 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.430825 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.431099 read(3, "\306\272\352\31\265u\317\213\275\372'Z~\274\263\304E\325\25\31\307'\241\24E7=\227\326MX\350", 32) = 32
10519 16:59:52.431394 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.481822 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.482051 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.482212 read(3, "\252\264O\262\206\232\315z|\233>\327\\\261\247\366^\26<1:d\\l\370\0\330\305,Riw", 32) = 32
10519 16:59:52.482437 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.532775 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.532947 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.533113 read(3, "/Av\373.\2230\276\300j\375\t\311FM\240\10\265\202\345\204-\330?/\346\224\270\307\261\2564", 32) = 32
10519 16:59:52.533335 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.583654 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.583833 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.583936 read(3, "\3607\365\360\253\255\303\210\346\266\206\222\367sH/\207\252\275|\246\376,\236\5\270\267.d_\275*", 32) = 32
10519 16:59:52.584085 open("/home/mfischer/.netrc", O_RDONLY) = 4
10519 16:59:52.584206 fstat(4, {st_mode=S_IFREG|0600, st_size=282, ...}) = 0
10519 16:59:52.584327 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8f2c694000
10519 16:59:52.584425 read(4, "machine localhost login user pas"..., 4096) = 282
10519 16:59:52.584540 close(4) = 0
10519 16:59:52.584609 munmap(0x7f8f2c694000, 4096) = 0
10519 16:59:52.584678 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
10519 16:59:52.584833 write(3, "\27\3\1\0P \230\310\\j&\207\241\234\314\373\240\371\37\347-{.\321\276\r\230\320\262\31\330r"..., 85) = 85
10519 16:59:52.584941 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
10519 16:59:52.585036 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.635410 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.635615 read(3, "\27\3\1\0\260", 5) = 5
10519 16:59:52.635778 read(3, "\2463AQ\224C\204\265\260\336p\343c\303\302*^\263@\336E\315o\254\1\320Y\7\251\275\334y"..., 176) = 176
10519 16:59:52.637289 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.687661 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.687884 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.688065 read(3, "\7\233\21\257\"\310\300p}]C\30\273\0045T\2471^\16\274\232\1\224\313\363\205\26;\265\265\331", 32) = 32
10519 16:59:52.688296 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.738637 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.738922 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:52.739128 read(3, "\373\250+\206\334r\354\201\215\264\223eG\211O\31\3073\304}\5xB\266\267\321\4\317l\246#\20"..., 48) = 48
10519 16:59:52.739349 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.739513 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.739584 read(3, "\232\va\10\223\276l\356\34\367\23,\254\365;\263\306Q\377\250\357\366\306\32\32\252\230Q\320\350\345\\", 32) = 32
10519 16:59:52.739715 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.790035 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.790207 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.790370 read(3, "I\203\263F8\275\30\352\240U\265\322\315h@\10\242\357F\27\307\211\317*\313\3600u\310\323\263\265", 32) = 32
10519 16:59:52.790544 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.841043 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.841329 read(3, "\27\3\1\0\240", 5) = 5
10519 16:59:52.841575 read(3, "\1\254^\260\360\252\263\327ki\325\276\330\204\354f\7\276\201\252\240K\264\277\206\250M\247z\16A\r"..., 160) = 160
10519 16:59:52.841887 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.842058 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.842223 read(3, "F\221\335\321\250\252D\301\254\356\230\236\303\234@\3\216\370Xg6^\237\340C-K\273\363\332w\254", 32) = 32
10519 16:59:52.842371 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.892696 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.892875 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.893039 read(3, "c`\1\254S\273\\\344\315\274\v\321d\266\5\21c\25\370\201\32\237Qv\246\307HIeV\246b", 32) = 32
10519 16:59:52.893262 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.943624 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.943782 read(3, "\27\3\1\0000", 5) = 5
10519 16:59:52.943888 read(3, "H\302\362\35\311\237+@\22M\307\300c]\3306\336_\260\366\330\212\220\\\31\224c}\264\206\7\31"..., 48) = 48
10519 16:59:52.943984 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.944051 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.944127 read(3, "\0163Y\213\270\35\350F:l=\227b\364\310\243\273p3\253\362\352\231\257\336\306<0J\2512\234", 32) = 32
10519 16:59:52.944212 select(0, [], [], [], {0, 50000}) = 0 (Timeout)
10519 16:59:52.994533 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
10519 16:59:52.994810 read(3, "\27\3\1\0 ", 5) = 5
10519 16:59:52.994992 read(3, "y\216\1\321\340\n\236\323\202\16 \3\330g\276\342|\262\17\274B\263\234\31\343g>\341\4\373\253\306", 32) = 32
10519 16:59:52.995249 pipe([4, 5]) = 0
10519 16:59:52.995417 fcntl(5, F_GETFD) = 0
10519 16:59:52.995549 fcntl(5, F_SETFD, FD_CLOEXEC) = 0
10519 16:59:52.995635 clone(child_stack=0x7f8f2ac14ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8f2ac159d0, tls=0x7f8f2ac15700, child_tidptr=0x7f8f2ac159d0) = 10527
10519 16:59:52.995780 read(4, <unfinished ...>
10519 16:59:52.996107 <... read resumed> "00a3", 4) = 4
10519 16:59:52.996163 read(4, "43d3a9b7e0f09c548a4fde8273dde2db"..., 159) = 159
10519 16:59:52.996233 read(4, "003f", 4) = 4
10519 16:59:52.996307 read(4, <unfinished ...>
10519 16:59:52.996422 <... read resumed> "43d3a9b7e0f09c548a4fde8273dde2db"..., 59) = 59
10519 16:59:52.996463 read(4, "0000", 4) = 4
10519 16:59:52.996565 close(4) = 0
10519 16:59:52.996644 write(1, "43d3a9b7e0f09c548a4fde8273dde2db"..., 106) = 106
10519 16:59:52.996790 read(0, <unfinished ...>
10519 16:59:52.996947 <... read resumed> "option followtags true\n", 4096) = 23
10519 16:59:52.996987 write(1, "ok\n", 3) = 3
10519 16:59:52.997052 read(0, <unfinished ...>
10519 16:59:53.060074 <... read resumed> "\n", 4096) = 1
10519 16:59:53.060239 write(3, "\25\3\1\0 `\336\372\272\37:K,\225\357\277\261\345\371\270a\364(\rc\301\322<`\210\31\217"..., 37 <unfinished ...>
10519 16:59:53.060311 <... write resumed> ) = 37
10519 16:59:53.060435 brk(0x15b2000) = 0x15b2000
10519 16:59:53.063024 close(3) = 0
10519 16:59:53.063498 exit_group(0) = ?
^ permalink raw reply
* Re: [RFC/PATCH] define the way new representation types are encoded in the pack
From: Shawn Pearce @ 2011-10-28 15:44 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Nicolas Pitre, Jeff King
In-Reply-To: <7v62j9veh3.fsf@alter.siamese.dyndns.org>
On Thu, Oct 27, 2011 at 23:04, Junio C Hamano <gitster@pobox.com> wrote:
> In addition to four basic types (commit, tree, blob and tag), the pack
> stream can encode a few other "representation" types, such as REF_DELTA
> and OFS_DELTA. As we allocate 3 bits in the first byte for this purpose,
> we do not have much room to add new representation types in place, but we
> do have one value reserved for future expansion.
We have 2 values reserved, 0 and 5.
> When bit 4-6 encodes type 5, the first byte is used this way:
>
> - Bit 0-3 denotes the real "extended" representation type. Because types
> 0-7 can already be encoded without using the extended format, we can
> offset the type by 8 (i.e. if bit 0-3 says 3, it means representation
> type 11 = 3 + 8);
>
> - Bit 4-6 has the value "5";
>
> - Bit 7 is used to signal if the _third_ byte needs to be read for larger
> size that cannot be represented with 8-bit.
This is very complicated. We don't need more complex logic in the pack
encoding. We _especially_ do not need yet another variant of how to
store a variable length integer in the pack file. I'm sorry, but we
already have two different variants and this just adds a third. It is
beyond crazy.
Last time (this is now years ago but whatever) Nico and I discussed
adding a new type to packs it was for the alternate tree encoding in
"pack v4". Trees happen so often that type code 5 is a good value to
use for these. Later you talked about using the extended type to store
a cattree blob thing, which would not appear nearly as often as a
normal directory listing type tree that was encoded using the pack v4
style encoding... I think saving type 5 for a small frequently
occurring type is a good thing.
> As it is unlikely for us to pack things that do not need to record any
> size, the second byte is always used in full to encode the low 8-bit of
> the size.
>
> I haven't started using type=8 and upwards for anything yet, but because
> we have only one "future expansion" value left, I want us to be extremely
> careful in order to avoid painting us into a corner that we cannot get out
> of, so I am sending this out early for a preliminary review.
I would have said something more like:
When bit 4-6 encodes "0", then:
- Bit 0-3 and bit 7 are used normally to encode a variable length
"size" integer. These may be 0 indicating no size information.
- 2nd-nth bytes store remaining "size" information, if bit 7 was set.
- The immediate next byte encodes the extended type. This type is
stored using the OFS_DELTA offset varint encoding, and thus may be
larger than 256 if we ever need it to be.
^ permalink raw reply
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Junio C Hamano @ 2011-10-28 16:00 UTC (permalink / raw)
To: Sebastian Schuberth; +Cc: git, msysgit
In-Reply-To: <4EAACA1C.6020302@gmail.com>
Thanks; do you have no addition to the test suite to demonstrate the
breakage?
^ permalink raw reply
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Sebastian Schuberth @ 2011-10-28 16:32 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, msysgit
In-Reply-To: <7vlis5t8bf.fsf@alter.siamese.dyndns.org>
On Fri, Oct 28, 2011 at 18:00, Junio C Hamano <gitster@pobox.com> wrote:
> Thanks; do you have no addition to the test suite to demonstrate the
> breakage?
Not yet. I'll try to come up with something.
--
Sebastian Schuberth
^ permalink raw reply
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Junio C Hamano @ 2011-10-28 16:44 UTC (permalink / raw)
To: Sebastian Schuberth; +Cc: git, msysgit
In-Reply-To: <CAHGBnuPUGfOe1D_OZ0ga4s8EiS_=GZeBG7WLmyOHt7vNg+w3Fw@mail.gmail.com>
Sebastian Schuberth <sschuberth@gmail.com> writes:
> On Fri, Oct 28, 2011 at 18:00, Junio C Hamano <gitster@pobox.com> wrote:
>
>> Thanks; do you have no addition to the test suite to demonstrate the
>> breakage?
>
> Not yet. I'll try to come up with something.
Let's do this.
diff --git a/t/t8006-blame-textconv.sh b/t/t8006-blame-textconv.sh
index 32ec82a..4ee42f1 100755
--- a/t/t8006-blame-textconv.sh
+++ b/t/t8006-blame-textconv.sh
@@ -15,6 +15,7 @@ EOF
chmod +x helper
test_expect_success 'setup ' '
+ echo "bin: test number 0" >zero.bin &&
echo "bin: test 1" >one.bin &&
echo "bin: test number 2" >two.bin &&
if test_have_prereq SYMLINKS; then
@@ -43,6 +44,7 @@ test_expect_success 'no filter specified' '
test_expect_success 'setup textconv filters' '
echo "*.bin diff=test" >.gitattributes &&
+ echo "zero.bin eol=crlf" >>.gitattributes &&
git config diff.test.textconv ./helper &&
git config diff.test.cachetextconv false
'
@@ -74,6 +76,15 @@ test_expect_success 'blame --textconv going through revisions' '
test_cmp expected result
'
+test_expect_success 'blame --textconv with local changes' '
+ test_when_finished "git checkout zero.bin" &&
+ printf "bin: updated number 0\015" >zero.bin &&
+ git blame --textconv zero.bin >blame &&
+ expect="(Not Committed Yet ....-..-.. ..:..:.. +0000 1)" &&
+ expect="$expect converted: updated number 0" &&
+ expr "$(find_blame <blame)" : "^$expect"
+'
+
test_expect_success 'setup +cachetextconv' '
git config diff.test.cachetextconv true
'
^ permalink raw reply related
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Sebastian Schuberth @ 2011-10-28 17:17 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, msysgit
In-Reply-To: <7vhb2tt6ag.fsf@alter.siamese.dyndns.org>
On Fri, Oct 28, 2011 at 18:44, Junio C Hamano <gitster@pobox.com> wrote:
>>> Thanks; do you have no addition to the test suite to demonstrate the
>>> breakage?
>>
>> Not yet. I'll try to come up with something.
>
> Let's do this.
Thanks, but that does not seem to work for me. The test breaks both
without and with my patch. I'll look into it.
--
Sebastian Schuberth
^ permalink raw reply
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Junio C Hamano @ 2011-10-28 17:20 UTC (permalink / raw)
To: Sebastian Schuberth; +Cc: git, msysgit
In-Reply-To: <CAHGBnuNpwZCpQxZQNRZ-pYpLMHMi1O4d0hsR9MKM3=7Hw5A=zw@mail.gmail.com>
Sebastian Schuberth <sschuberth@gmail.com> writes:
> On Fri, Oct 28, 2011 at 18:44, Junio C Hamano <gitster@pobox.com> wrote:
>
>>>> Thanks; do you have no addition to the test suite to demonstrate the
>>>> breakage?
>>>
>>> Not yet. I'll try to come up with something.
>>
>> Let's do this.
>
> Thanks, but that does not seem to work for me. The test breaks both
> without and with my patch. I'll look into it.
Thanks. I suspect the difference is because you are on a crlf-native
platform while I am not...
^ permalink raw reply
* Re: git alias and --help
From: Junio C Hamano @ 2011-10-28 18:07 UTC (permalink / raw)
To: Jakub Narebski; +Cc: Miles Bader, Gelonida N, git
In-Reply-To: <m362j95jv3.fsf@localhost.localdomain>
Jakub Narebski <jnareb@gmail.com> writes:
>> What I've often wished is that git's help system would output
>> something like:
>>
>> $ git help co
>> `git co' is aliased to `checkout'
>>
>> Here's the help entry for `checkout':
>>
>> GIT-CHECKOUT(1) Git Manual GIT-CHECKOUT(1)
>
> Wouldn't it be more useful to say something like this:
>
> $ git co --help
> `git co' is aliased to `checkout'
>
> You can see help entry for `checkout' with "git checkout --help"
>
> Then help is only copy'n'paste away.
Describe your algorithm to come up with the equivalent to the above
'checkout' in this example:
$ git one --help
`git one' is aliased to `!sh -c 'git show -s --pretty="format:%h (%s, %ai" "$@" | sed -e "s/ [012][0-9]:[0-5][0-9]:[0-5][0-9] [-+][0-9][0-9][0-9][0-9]$/)/"' -'
If we decide to punt on the '! <cmd>' form, i.e. "take the first token and
if it is a git command then do this special thing but otherwise don't make
things worse", then you could improve this example:
$ git lgf --help
'git lgf' is aliased to 'log --oneline --boundary --first-parent'
with "git log --help", but that is aiming too low for my taste.
If you are redesigning the help system, isn't it a shame that you are
discarding other tokens in the alias when giving help? Wouldn't it be
wonderful if you extracted the option descriptions for these three options
specified and showing only that, for example?
You would need to ensure that the manual pages for all commands share the
same structure to make that happen, which goes without saying.
^ permalink raw reply
* What's cooking in git.git (Oct 2011, #11; Fri, 28)
From: Junio C Hamano @ 2011-10-28 18:12 UTC (permalink / raw)
To: git
Here are the topics that have been cooking. Commits prefixed with '-' are
only in 'pu' (proposed updates) while commits prefixed with '+' are in 'next'.
I am hoping to tag 1.7.8-rc0 this weekend. Proposals and patches for
changes that are not regression fixes need to wait until the next
development cycle.
Here are the repositories that have my integration branches:
With maint, master, next, pu, todo:
git://git.kernel.org/pub/scm/git/git.git
git://repo.or.cz/alt-git.git
https://code.google.com/p/git-core/
https://github.com/git/git
With only maint and master:
git://git.sourceforge.jp/gitroot/git-core/git.git
git://git-core.git.sourceforge.net/gitroot/git-core/git-core
With all the topics and integration branches but not todo, html or man:
https://github.com/gitster/git
I will stop pushing the generated documentation branches to the above
repositories, as they are not sources. The only reason the source
repository at k.org has hosted these branches was because it was the only
repository over there that was writable by me; it was an ugly historical
and administrative workaround and not a demonstration of the best
practice.
These branches are pushed to their own separate repositories instead:
git://git.kernel.org/pub/scm/git/git-{htmldocs,manpages}.git/
git://repo.or.cz/git-{htmldocs,manpages}.git/
https://code.google.com/p/git-{htmldocs,manpages}.git/
https://github.com/gitster/git-{htmldocs,manpages}.git/
--------------------------------------------------
[New Topics]
* nd/misc-cleanups (2011-10-27) 6 commits
(merged to 'next' on 2011-10-28 at 2527a49)
+ unpack_object_header_buffer(): clear the size field upon error
+ tree_entry_interesting: make use of local pointer "item"
+ tree_entry_interesting(): give meaningful names to return values
+ read_directory_recursive: reduce one indentation level
+ get_tree_entry(): do not call find_tree_entry() on an empty tree
+ tree-walk.c: do not leak internal structure in tree_entry_len()
These are unquestionably good parts taken out of a larger series, so that
we can focus more on the other changes in later rounds of review.
Will keep in 'next' during this cycle.
* ss/blame-textconv-fake-working-tree (2011-10-28) 2 commits
- (squash) test for previous
- blame.c: Properly initialize strbuf after calling, textconv_object()
A trivial fix for a breakage worth fixing.
Will merge to 'master' before -rc1.
--------------------------------------------------
[Graduated to "master"]
* js/grep-mutex (2011-10-26) 3 commits
(merged to 'next' on 2011-10-26 at 6fac2d6)
+ builtin/grep: simplify lock_and_read_sha1_file()
+ builtin/grep: make lock/unlock into static inline functions
+ git grep: be careful to use mutexes only when they are initialized
* rj/gitweb-clean-js (2011-10-26) 1 commit
(merged to 'next' on 2011-10-26 at db36a24)
+ gitweb/Makefile: Remove static/gitweb.js in the clean target
* rs/maint-estimate-cache-size (2011-10-26) 1 commit
(merged to 'next' on 2011-10-26 at 2f11375)
+ read-cache.c: fix index memory allocation
* sn/complete-bash-wo-process-subst (2011-10-26) 1 commit
(merged to 'next' on 2011-10-26 at 8662ed6)
+ completion: fix issue with process substitution not working on Git for Windows
--------------------------------------------------
[Stalled]
* hv/submodule-merge-search (2011-10-13) 4 commits
- submodule.c: make two functions static
- allow multiple calls to submodule merge search for the same path
- push: Don't push a repository with unpushed submodules
- push: teach --recurse-submodules the on-demand option
What the topic aims to achieve may make sense, but the implementation
looked somewhat suboptimal.
* sr/transport-helper-fix-rfc (2011-07-19) 2 commits
- t5800: point out that deleting branches does not work
- t5800: document inability to push new branch with old content
Perhaps 281eee4 (revision: keep track of the end-user input from the
command line, 2011-08-25) would help.
* jc/lookup-object-hash (2011-08-11) 6 commits
- object hash: replace linear probing with 4-way cuckoo hashing
- object hash: we know the table size is a power of two
- object hash: next_size() helper for readability
- pack-objects --count-only
- object.c: remove duplicated code for object hashing
- object.c: code movement for readability
I do not think there is anything fundamentally wrong with this series, but
the risk of breakage far outweighs observed performance gain in one
particular workload.
* jc/verbose-checkout (2011-10-16) 2 commits
- checkout -v: give full status output after switching branches
- checkout: move the local changes report to the end
This is just to leave a record that the reason why we do not do this not
because we are incapable of coding this, but because it is not a good idea
to do this. I suspect people who are new to git that might think they need
it would soon realize the don't.
Will keep in 'pu' as a showcase for a while and then will drop.
* kk/gitweb-side-by-side-diff (2011-10-17) 2 commits
- gitweb: add a feature to show side-by-side diff
- gitweb: change format_diff_line() to remove leading SP from $diff_class
Fun.
Will keep in 'pu' until the planned re-roll comes.
--------------------------------------------------
[Cooking]
* ef/mingw-upload-archive (2011-10-26) 3 commits
- upload-archive: use start_command instead of fork
- compat/win32/poll.c: upgrade from upstream
- mingw: move poll out of sys-folder
Are msysgit folks OK with this series (I didn't see msysgit list Cc'ed on
these patches)? If so let's move this forward, as the changes to the core
part seem solid.
* rs/allocate-cache-entry-individually (2011-10-26) 2 commits
(merged to 'next' on 2011-10-27 at 2e4acd6)
+ cache.h: put single NUL at end of struct cache_entry
+ read-cache.c: allocate index entries individually
Will keep in 'next' during this cycle.
* nd/pretty-commit-log-message (2011-10-23) 2 commits
(merged to 'next' on 2011-10-27 at 4b61df7)
+ pretty.c: use original commit message if reencoding fails
+ pretty.c: free get_header() return value
Will merge to 'master' before -rc0.
* mh/ref-api-3 (2011-10-19) 11 commits
(merged to 'next' on 2011-10-23 at 92e2d35)
+ is_refname_available(): reimplement using do_for_each_ref_in_array()
+ names_conflict(): simplify implementation
+ names_conflict(): new function, extracted from is_refname_available()
+ repack_without_ref(): reimplement using do_for_each_ref_in_array()
+ do_for_each_ref_in_array(): new function
+ do_for_each_ref(): correctly terminate while processesing extra_refs
+ add_ref(): take a (struct ref_entry *) parameter
+ create_ref_entry(): extract function from add_ref()
+ parse_ref_line(): add a check that the refname is properly formatted
+ repack_without_ref(): remove temporary
+ Rename another local variable name -> refname
(this branch uses mh/ref-api-2.)
Will keep in 'next' during this cycle.
* rr/revert-cherry-pick (2011-10-23) 5 commits
(merged to 'next' on 2011-10-26 at 27b7496)
+ revert: simplify communicating command-line arguments
+ revert: allow mixed pick and revert instructions
+ revert: make commit subjects in insn sheet optional
+ revert: simplify getting commit subject in format_todo()
+ revert: free msg in format_todo()
The internals of "git revert/cherry-pick" has been further refactored to
serve as the basis for the sequencer.
Will keep in 'next' during this cycle.
* jc/check-ref-format-fixup (2011-10-19) 2 commits
(merged to 'next' on 2011-10-19 at 98981be)
+ Revert "Restrict ref-like names immediately below $GIT_DIR"
(merged to 'next' on 2011-10-15 at 8e89bc5)
+ Restrict ref-like names immediately below $GIT_DIR
This became a no-op except for the bottom one which is part of the other
topic now.
Will discard once the other topic graduates to 'master'.
* cb/daemon-permission-errors (2011-10-17) 2 commits
- daemon: report permission denied error to clients
- daemon: add tests
The tip commit might be loosening things a bit too much.
Will keep in 'pu' until hearing a convincing argument for the patch.
* mh/ref-api-2 (2011-10-17) 14 commits
(merged to 'next' on 2011-10-19 at cc89f0e)
+ resolve_gitlink_ref_recursive(): change to work with struct ref_cache
+ Pass a (ref_cache *) to the resolve_gitlink_*() helper functions
+ resolve_gitlink_ref(): improve docstring
+ get_ref_dir(): change signature
+ refs: change signatures of get_packed_refs() and get_loose_refs()
+ is_dup_ref(): extract function from sort_ref_array()
+ add_ref(): add docstring
+ parse_ref_line(): add docstring
+ is_refname_available(): remove the "quiet" argument
+ clear_ref_array(): rename from free_ref_array()
+ refs: rename parameters result -> sha1
+ refs: rename "refname" variables
+ struct ref_entry: document name member
+ cache.h: add comments for git_path() and git_path_submodule()
(this branch is used by mh/ref-api-3.)
Will keep in 'next' during this cycle.
* dm/pack-objects-update (2011-10-20) 4 commits
(merged to 'next' on 2011-10-27 at fa52898)
+ pack-objects: don't traverse objects unnecessarily
+ pack-objects: rewrite add_descendants_to_write_order() iteratively
+ pack-objects: use unsigned int for counter and offset values
+ pack-objects: mark add_to_write_order() as inline
Will merge to 'master' before -rc0.
* jk/git-tricks (2011-10-21) 3 commits
(merged to 'next' on 2011-10-23 at 7c9bf71)
+ completion: match ctags symbol names in grep patterns
+ contrib: add git-jump script
+ contrib: add diff highlight script
As this stuff is in contrib/ I do not care too much about the stability.
Will merge to 'master' unless there is strong objection.
* jc/signed-commit (2011-10-21) 7 commits
(merged to 'next' on 2011-10-23 at 03eec25)
+ pretty: %G[?GS] placeholders
+ parse_signed_commit: really use the entire commit log message
+ test "commit -S" and "log --show-signature"
+ t7004: extract generic "GPG testing" bits
+ log: --show-signature
+ commit: teach --gpg-sign option
+ Split GPG interface into its own helper library
This is to replace the earlier "signed push" experiments.
Will keep in 'next' during this cycle.
* sg/complete-refs (2011-10-21) 9 commits
(merged to 'next' on 2011-10-26 at d65e2b4)
+ completion: remove broken dead code from __git_heads() and __git_tags()
+ completion: fast initial completion for config 'remote.*.fetch' value
+ completion: improve ls-remote output filtering in __git_refs_remotes()
+ completion: query only refs/heads/ in __git_refs_remotes()
+ completion: support full refs from remote repositories
+ completion: improve ls-remote output filtering in __git_refs()
+ completion: make refs completion consistent for local and remote repos
+ completion: optimize refs completion
+ completion: document __gitcomp()
Will keep in 'next' until an Ack or two from completion folks.
* jc/request-pull-show-head-4 (2011-10-15) 11 commits
(merged to 'next' on 2011-10-15 at 7e340ff)
+ fmt-merge-msg.c: Fix an "dubious one-bit signed bitfield" sparse error
(merged to 'next' on 2011-10-10 at 092175e)
+ environment.c: Fix an sparse "symbol not declared" warning
+ builtin/log.c: Fix an "Using plain integer as NULL pointer" warning
(merged to 'next' on 2011-10-07 at fcaeca0)
+ fmt-merge-msg: use branch.$name.description
(merged to 'next' on 2011-10-06 at fa5e0fe)
+ request-pull: use the branch description
+ request-pull: state what commit to expect
+ request-pull: modernize style
+ branch: teach --edit-description option
+ format-patch: use branch description in cover letter
+ branch: add read_branch_desc() helper function
+ Merge branch 'bk/ancestry-path' into jc/branch-desc
Allow setting "description" for branches and use it to help communications
between humans in various workflow elements.
Will keep in 'next' during this cycle.
^ permalink raw reply
* imap-send badly handles commit bodies beginning with "From <"
From: Andrew Eikum @ 2011-10-28 18:00 UTC (permalink / raw)
To: git
Ran into this today. I had a commit message that looked like:
---
Do something
>From <http://url>:
Words
---
I put it through imap-send to email it to my project, and ended up
with this output:
sending 1 messages
200% (2/1) done
On the server side, it was split into two mails on either side of that
commit message's From line with neither mail actually containing the
From line. To fix it, I just changed it to "Copied from <url>:" :-P
Ain't mbox grand?
^ permalink raw reply
* Re: git alias and --help
From: Miles Bader @ 2011-10-28 18:25 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Jakub Narebski, Gelonida N, git
In-Reply-To: <7v62j9t2gj.fsf@alter.siamese.dyndns.org>
2011/10/29 Junio C Hamano <gitster@pobox.com>:
> $ git lgf --help
> 'git lgf' is aliased to 'log --oneline --boundary --first-parent'
>
> with "git log --help", but that is aiming too low for my taste.
>
> If you are redesigning the help system, isn't it a shame that you are
> discarding other tokens in the alias when giving help? Wouldn't it be
> wonderful if you extracted the option descriptions for these three options
> specified and showing only that, for example?
I think that would be the wrong thing in most cases though: an alias
like the above happily allows the user to specify other git-log
options on the command line; when I get help on an aliased option,
it's often precisely because I want to see the _other_ options I can
use...
E.g., I have:
$ git slog --help
`git slog' is aliased to `log --date=short --pretty=tformat:"%h
%ad %s" --abbrev-commit'
But the typical question I want to answer is something like "OK, how
do I reverse the output order of slog?" or "how do I limit the output
of slog to a certain date range?"
-miles
--
Cat is power. Cat is peace.
^ permalink raw reply
* Re: [msysGit] Re: [PATCH/RFC] mingw: implement PTHREAD_MUTEX_INITIALIZER
From: Atsushi Nakagawa @ 2011-10-28 18:35 UTC (permalink / raw)
To: Kyle Moffett; +Cc: kusmabite, Johannes Sixt, msysgit, git, johannes.schindelin
In-Reply-To: <CAGZ=bqKA7P_FJz447AZA5HjWdghKnZqAWGuKAuvjsGp5bAGC1w@mail.gmail.com>
Thanks for the explanation. :)
Kyle Moffett <kyle@moffetthome.net> wrote:
> On Thu, Oct 27, 2011 at 19:00, Atsushi Nakagawa <atnak@chejz.com> wrote:
> > Erik Faye-Lund <kusmabite@gmail.com> wrote:
> >> On Wed, Oct 26, 2011 at 5:44 AM, Kyle Moffett <kyle@moffetthome.net> wrote:
> >> > On Tue, Oct 25, 2011 at 16:51, Erik Faye-Lund <kusmabite@gmail.com> wrote:
> >> >> [...]
> >> >
> >> > No, I'm afraid that won't solve the issue (at least in GCC, not sure about MSVC)
> >> >
> >> > A write barrier in one thread is only effective if it is paired with a
> >> > read barrier in the other thread.
> >> >
> >> > Since there's no read barrier in the "while(mutex->autoinit != 0)",
> >> > you don't have any guaranteed ordering.
> >
> > Out of curiosity, where could re-ordering be a problem here? I'm
> > thinking probably at "EnterCriticalSection(&mutex->cs)" and the contents
> > of "mutex->cs" not being propagated to the waiting thread. However,
> > shouldn't that be a non-problem, as far as compiler reordering goes,
> > because it's an external function call and only the address of mutex->cs
> > is passed?
> >
> > [...]
>
> Ok, so here's the race condition:
>
> Thread1 Thread2
> /* Speculative prefetch */
> prefetch(*mutex);
>
> if (mutex->autoinit) {
> if (ICE(&mutex->autoinit, -1, 1) != -1) {
> /* Now mutex->autoinit == -1 */
> pthread_mutex_init(mutex, NULL);
> /* This forces writes out to memory */
> ICE(&mutex->autoinit, 0, -1);
>
> if (mutex->autoinit) {} /* false */
> /* No read barrier here */
> EnterCriticalSection(&mutex->cs);
> /* Use cached mutex->cs from earlier */
Ok, so there's no way of skimping on that one memory barrier in every
visit to pthread_mutex_lock(). Interesting. Makes me wonder how it
trades off to lazy initialization.
>
> Even though you forced the memory write to be ordered in Thread 1 you
> did not ensure that the read of autoinit occurred before the read of
> mutex->cs in Thread 2. If the first thing that EnterCriticalSection
> does is follow a pointer or read a mutex key value in mutex->cs then
> won't necessarily get the right answer.
>
> The rule of memory barriers is the ALWAYS come in pairs. This simple
> example guarantees that Thread2 will read "tmp_a" == 1 if it
> previously read "tmp_b" == 1, although getting "tmp_a" == 1 and
> "tmp_b" != 1 is still possible.
>
> Thread1:
> a = 1;
> write_barrier();
> b = 1;
>
> Thread2:
> tmp_b = b;
> read_barrier();
> tmp_a = a;
>
> I think there's a Documentation/memory-barriers.txt file in the kernel
> source code with more helpful info.
--
Atsushi Nakagawa
<atnak@chejz.com>
Changes are made when there is inconvenience.
^ permalink raw reply
* Re: [PATCH] blame.c: Properly initialize strbuf after calling, textconv_object()
From: Sebastian Schuberth @ 2011-10-28 18:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, msysgit
In-Reply-To: <7vd3dht4ms.fsf@alter.siamese.dyndns.org>
On 28.10.2011 19:20, Junio C Hamano wrote:
>>>>> Thanks; do you have no addition to the test suite to demonstrate the
>>>>> breakage?
>>>>
>>>> Not yet. I'll try to come up with something.
>>>
>>> Let's do this.
>>
>> Thanks, but that does not seem to work for me. The test breaks both
>> without and with my patch. I'll look into it.
>
> Thanks. I suspect the difference is because you are on a crlf-native
> platform while I am not...
I also didn't have any luck. I've created a test that should fail without my patch, but it succeeds when running the test script. However, if I copy and paste the lines from the test to the command line, the test fails as expected ("blame" is empty). I'm out of ideas right now.
diff --git a/t/t8006-blame-textconv.sh b/t/t8006-blame-textconv.sh
index 32ec82a..4fee5aa 100755
--- a/t/t8006-blame-textconv.sh
+++ b/t/t8006-blame-textconv.sh
@@ -14,6 +14,13 @@ sed 's/^bin: /converted: /' "$1"
EOF
chmod +x helper
+cat >helper-dos-line-endings <<'EOF'
+#!/bin/sh
+grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; }
+sed 's/^bin: \(.*\)$/converted: \1\r/' "$1"
+EOF
+chmod +x helper-dos-line-endings
+
test_expect_success 'setup ' '
echo "bin: test 1" >one.bin &&
echo "bin: test number 2" >two.bin &&
@@ -74,6 +81,14 @@ test_expect_success 'blame --textconv going through revisions' '
test_cmp expected result
'
+test_expect_success 'blame --textconv with DOS line endings' '
+ git config diff.test.textconv ./helper-dos-line-endings &&
+ git blame --textconv two.bin >blame &&
+ git config diff.test.textconv ./helper &&
+ find_blame <blame >result &&
+ test_cmp expected result
+'
+
test_expect_success 'setup +cachetextconv' '
git config diff.test.cachetextconv true
'
--
Sebastian Schuberth
^ permalink raw reply related
* Re: git slow over https
From: Daniel Stenberg @ 2011-10-28 18:28 UTC (permalink / raw)
To: Mika Fischer; +Cc: Git Mailing List
In-Reply-To: <CAOs=hR+K_YZcjdAUq_jaz0wc9k8BRQ2-ny7A=GFaNL4R-W0UBw@mail.gmail.com>
On Fri, 28 Oct 2011, Mika Fischer wrote:
> 1) What's the purpose of the select in http.c:673? Can it be removed?
> 2) If it serves a useful purpose, what can be the reason that it hurts
> performance so much in my case?
The purpose must be to avoid busy-looping in case there's nothing to read.
It should probably use curl_multi_fdset [1] to get a decent set to wait for
instead so that it'll return fast if there is pending data. The timeout for
select can in fact also get extended with the use of curl_multi_timeout [2].
1 = http://curl.haxx.se/libcurl/c/curl_multi_fdset.html
2 = http://curl.haxx.se/libcurl/c/curl_multi_timeout.html
--
/ daniel.haxx.se
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox