Thu, 21 Apr 2016 22:04:11 -0500 bdiff: balance recursion to avoid quadratic behavior (issue4704) stable
Matt Mackall <mpm@selenic.com> [Thu, 21 Apr 2016 22:04:11 -0500] rev 29014
bdiff: balance recursion to avoid quadratic behavior (issue4704) For highly structured files like JSON or XML dumps with large numbers of duplicate lines (eg braces) and isolated matching lines, bdiff could find large numbers of equally good spans. Because it prefers earlier matches, this would result in pathologically unbalance recursion that resulted in quadratic performance. This patch makes it prefer matches closer to the middle that tend to balance recursion. This change improves the speed of a pathological test case from 1100s to 9s. Included is a smaller test that has a roughly 50x safety margin on the performance it accepts. It's likely to fail on pure builds because difflib also has a recursion-balancing problem.
Thu, 21 Apr 2016 21:05:26 -0500 bdiff: deal better with duplicate lines stable
Matt Mackall <mpm@selenic.com> [Thu, 21 Apr 2016 21:05:26 -0500] rev 29013
bdiff: deal better with duplicate lines The longest_match code compares all the possible positions in two files to find the best match. Given a pair of sequences, it effectively searches a grid like this: a b b b c . d e . f 0 1 2 3 4 5 6 7 8 9 a 1 - - - - - - - - - b - 2 1 1 - - - - - - b - 1 3 2 - - - - - - b - 1 2 4 - - - - - - . - - - - - 1 - - 1 - Here, the 4 in the middle says "the first four lines of the file match", which it can compute be comparing the fourth lines and then adding one to the result found when comparing the third lines in the entry to the upper left. We generally avoid the quadratic worst case by only looking at lines that match, which is precomputed. We also avoid quadratic storage by only keeping a single column vector and then keeping track of the best match. Unfortunately, this can get us into trouble with the sequences above. Because we want to reuse the '3' value when calculating the '4', we need to be careful not to overwrite it with the '2' we calculate immediately before. If we scan left to right, top to bottom, we're going to have a problem: we'll overwrite our 3 before we use it and calculate a suboptimal best match. To address this, we can either keep two column vectors and swap between them (which significantly complicates bookkeeping), or change our scanning order. If we instead scan from left to right, bottom to top, we'll avoid ever overwriting values we'll need in the future. This unfortunately needs several changes to be made simultaneously: - change the order we build the initial hash chains for the b sequence - change the sentinel values from INT_MAX to -1 - change the visit order in the longest_match inner loop - add a tie-breaker preference for earlier matches This last is needed because we previously had an implicit tie-breaker from our visitation order that our test suite relies on. Later matches can also trigger a bug in the normalization code in diff().
Thu, 21 Apr 2016 21:53:18 -0500 bdiff: fix latent normalization bug stable
Matt Mackall <mpm@selenic.com> [Thu, 21 Apr 2016 21:53:18 -0500] rev 29012
bdiff: fix latent normalization bug This bug is hidden by the current bias towards matches at the beginning of the file. When this bias is tweaked later to address recursion balancing, the normalization code could cause the next block to shrink to a negative length, thus creating invalid delta chunks. We add checks here to disallow that. This bug requires test cases that are an awkwardly large size for the test suite, but is very rapidly picked up by the included torture tester.
Thu, 21 Apr 2016 21:46:31 -0500 bdiff: fold in shift calculation in normalize stable
Matt Mackall <mpm@selenic.com> [Thu, 21 Apr 2016 21:46:31 -0500] rev 29011
bdiff: fold in shift calculation in normalize This just makes the code harder to read without any performance advantage. We're going to make the check here more complex, let's make it simpler first.
Thu, 21 Apr 2016 21:37:13 -0500 bdiff: unify duplicate normalize loops stable
Matt Mackall <mpm@selenic.com> [Thu, 21 Apr 2016 21:37:13 -0500] rev 29010
bdiff: unify duplicate normalize loops We're about to make the while loop check more complicated, so let's simplify first.
Mon, 25 Apr 2016 16:34:02 -0700 make: backout changeset 51f5fae84e43 stable
Siddharth Agarwal <sid0@fb.com> [Mon, 25 Apr 2016 16:34:02 -0700] rev 29009
make: backout changeset 51f5fae84e43 Support for '!=' was only added in GNU Make 4.0, and CentOS versions as new as CentOS 7 only carry 3.82. I will leave figuring out compatibility with BSD make as an exercise for interested folks.
Thu, 01 Jan 1970 00:00:00 +0000 tests: test-lock-badness.t message could come later stable
timeless <timeless@mozdev.org> [Thu, 01 Jan 1970 00:00:00 +0000] rev 29008
tests: test-lock-badness.t message could come later I got this on gcc112: @@ -58,8 +58,8 @@ $ hg -R b ci -A -m b --config hooks.precommit="python:`pwd`/hooks.py:sleepone" > stdout & $ hg -R b up -q --config hooks.pre-update="python:`pwd`/hooks.py:sleephalf" waiting for lock on working directory of b held by '*:*' (glob) - got lock after ? seconds (glob) $ wait + got lock after 1 seconds $ cat stdout adding b
Sat, 23 Apr 2016 12:47:57 -0700 dockerdeb: pass the rest of the args to the builder script stable
Sean Farley <sean@farley.io> [Sat, 23 Apr 2016 12:47:57 -0700] rev 29007
dockerdeb: pass the rest of the args to the builder script It seems this was the original intent of the script so this patch passes the remanining arguments to builddeb.
Sat, 23 Apr 2016 12:47:39 -0700 dockerdeb: fix incorrect number of shifts stable
Sean Farley <sean@farley.io> [Sat, 23 Apr 2016 12:47:39 -0700] rev 29006
dockerdeb: fix incorrect number of shifts From the comment, it appears that the original intent was to remove the first two arguments, so this patch does just that.
Thu, 21 Apr 2016 10:11:20 -0400 make: use shell-command assignment instead of $(eval ...) stable
Augie Fackler <augie@google.com> [Thu, 21 Apr 2016 10:11:20 -0400] rev 29005
make: use shell-command assignment instead of $(eval ...) This is portable between BSD and GNU make. As of this change, our Makefile appears to work in both BSD and GNU make, with the caveat that the test-% and testpy-% wildcard rules don't work on BSD make. That said, this still seems worthwhile because it lets the buildbots work more consistently across platforms.
Thu, 21 Apr 2016 10:10:48 -0400 make: do assignment and export in a single statement stable
Augie Fackler <augie@google.com> [Thu, 21 Apr 2016 10:10:48 -0400] rev 29004
make: do assignment and export in a single statement This is portable between GNU and BSD make, whereas doing the export on its own line confuses BSD make.
Thu, 21 Apr 2016 10:05:14 -0400 make: alter how we compute compiler flags for setup.py stable
Augie Fackler <augie@google.com> [Thu, 21 Apr 2016 10:05:14 -0400] rev 29003
make: alter how we compute compiler flags for setup.py This is portable between BSD and GNU make. I'm not thrilled with how it worked out, but it's portable and solves the problem.
Sat, 23 Apr 2016 16:11:05 +0900 revset: unindent "if True" block in sort() stable
Yuya Nishihara <yuya@tcha.org> [Sat, 23 Apr 2016 16:11:05 +0900] rev 29002
revset: unindent "if True" block in sort() It was there to make the previous patch readable.
Sat, 23 Apr 2016 16:09:30 +0900 revset: make sort() do dumb multi-pass sorting for multiple keys (issue5218) stable
Yuya Nishihara <yuya@tcha.org> [Sat, 23 Apr 2016 16:09:30 +0900] rev 29001
revset: make sort() do dumb multi-pass sorting for multiple keys (issue5218) Our invert() function was too clever to not take length into account. I could fix the problem by appending '\xff' as a terminator (opposite to '\0'), but it turned out to be slower than simple multi-pass sorting. New implementation is pretty straightforward, which just calls sort() from the last key. We can do that since Python sort() is guaranteed to be stable. It doesn't sound nice to call sort() multiple times, but actually it is faster. That's probably because we have fewer Python codes in hot loop, and can avoid heavy string and list manipulation. revset #0: sort(0:10000, 'branch') 0) 0.412753 1) 0.393254 revset #1: sort(0:10000, '-branch') 0) 0.455377 1) 0.389191 85% revset #2: sort(0:10000, 'date') 0) 0.408082 1) 0.376332 92% revset #3: sort(0:10000, '-date') 0) 0.406910 1) 0.380498 93% revset #4: sort(0:10000, 'desc branch user date rev') 0) 0.542996 1) 0.486397 89% revset #5: sort(0:10000, '-desc -branch -user -date -rev') 0) 0.965032 1) 0.518426 53%
Thu, 24 Mar 2016 22:55:56 +0900 log: fix status template to list copy source per dest (issue5155) stable
Yuya Nishihara <yuya@tcha.org> [Thu, 24 Mar 2016 22:55:56 +0900] rev 29000
log: fix status template to list copy source per dest (issue5155) Before, copied files were assumed as "A" (added) and listed followed by non-copy added files. This could double entries of a copy if it had "M" (modified) state. So, this patch makes the template check if a file is included in copies dict. This way, entries should never be doubled. The output of "log -Tstatus -C" does not always agree with "status -C --change" due to the bug of "status", which is documented in test-status.t. See also 2963d5c9d90b.
Wed, 20 Apr 2016 16:33:13 +0100 graphmod: disable graph styling when HGPLAIN is set (issue5212) stable
Martijn Pieters <mjpieters@fb.com> [Wed, 20 Apr 2016 16:33:13 +0100] rev 28999
graphmod: disable graph styling when HGPLAIN is set (issue5212) Produce stable output for tools to rely on by hardcoding all edge styles to "|". This ensures that any tool parsing the output of hg log -G still gets the same behaviour as pre-3.8 releases.
Wed, 20 Apr 2016 18:26:29 +0100 graphmod: fix seen state handling for > 2 parents (issue5174) stable
Martijn Pieters <mjpieters@fb.com> [Wed, 20 Apr 2016 18:26:29 +0100] rev 28998
graphmod: fix seen state handling for > 2 parents (issue5174) When there are more than 2 parents for a given node (in a sparse graph), extra dummy nodes are inserted to transition the lines more gradually. However, since the seen state was not updated when yielding the extra nodes, the wrong graph styles were being applied to the nodes.
Wed, 20 Apr 2016 21:33:02 +0000 httpclient: reverse accidental damage from 86db5cb55d46 stable
timeless <timeless@mozdev.org> [Wed, 20 Apr 2016 21:33:02 +0000] rev 28997
httpclient: reverse accidental damage from 86db5cb55d46
Thu, 21 Apr 2016 04:30:18 +0000 tests: tolerate http2 stable
timeless <timeless@mozdev.org> [Thu, 21 Apr 2016 04:30:18 +0000] rev 28996
tests: tolerate http2 You can run tests like this: run-tests.py -l --extra-config-opt ui.usehttp2=true And ideally, no tests should fail...
Sat, 16 Apr 2016 13:02:13 -0700 make: add rule for building an ubuntu ppa stable
Sean Farley <sean@farley.io> [Sat, 16 Apr 2016 13:02:13 -0700] rev 28995
make: add rule for building an ubuntu ppa
Sat, 16 Apr 2016 13:01:47 -0700 builddeb: add flag for a source-only deb stable
Sean Farley <sean@farley.io> [Sat, 16 Apr 2016 13:01:47 -0700] rev 28994
builddeb: add flag for a source-only deb This is required for building a ppa for ubuntu which following patches will use.
Sat, 16 Apr 2016 17:06:11 -0700 builddeb: create source archive for ubuntu stable
Sean Farley <sean@farley.io> [Sat, 16 Apr 2016 17:06:11 -0700] rev 28993
builddeb: create source archive for ubuntu
Fri, 15 Apr 2016 15:44:00 -0700 builddeb: ignore vcs and build results stable
Sean Farley <sean@farley.io> [Fri, 15 Apr 2016 15:44:00 -0700] rev 28992
builddeb: ignore vcs and build results This one is a no-brainer. Previously, if you tried to build a deb on ubuntu, it would try to diff files in the .hg store. These flags prevent that.
Fri, 15 Apr 2016 14:28:26 -0700 builddeb: copy over .gz and .dsc files stable
Sean Farley <sean@farley.io> [Fri, 15 Apr 2016 14:28:26 -0700] rev 28991
builddeb: copy over .gz and .dsc files We were forgetting to copy over the signature (if it exists) and the zipped diff, so let's do that.
Fri, 15 Apr 2016 14:27:42 -0700 builddeb: ignore errors about find not finding files stable
Sean Farley <sean@farley.io> [Fri, 15 Apr 2016 14:27:42 -0700] rev 28990
builddeb: ignore errors about find not finding files The debuild command may output less files than we explicitly list so let's not error out if none exist.
Sat, 16 Apr 2016 12:42:53 -0700 builddeb: use the os codename instead of 'unstable' stable
Sean Farley <sean@farley.io> [Sat, 16 Apr 2016 12:42:53 -0700] rev 28989
builddeb: use the os codename instead of 'unstable' This fixes a lintian error (and indeed, launchpad rejects it) by using the distribution's codename (e.g. xenial, trusty, etc).
Sat, 16 Apr 2016 12:33:21 -0700 builddeb: use sed -i stable
Sean Farley <sean@farley.io> [Sat, 16 Apr 2016 12:33:21 -0700] rev 28988
builddeb: use sed -i Notice that there is no space after '-i'. This makes it work on both GNU and BSD versions of sed.
Sun, 17 Apr 2016 10:36:40 -0700 dockerdeb: redirect 'cd' in export command to /dev/null stable
Sean Farley <sean@farley.io> [Sun, 17 Apr 2016 10:36:40 -0700] rev 28987
dockerdeb: redirect 'cd' in export command to /dev/null This had the unfortunate side effect of causing the environment to have a newline due to the fact that some 'cd' outputs the result of the directory change. So, let's just redirect the meaningless output.
Sat, 26 Mar 2016 18:50:56 +0900 help: avoid using "$n" parameter in revsetalias example stable
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Mar 2016 18:50:56 +0900] rev 28986
help: avoid using "$n" parameter in revsetalias example Because parsing "$n" requires a crafted tokenizer, it exists only for backward compatibility (as documented in revset._tokenizealias.) This patch updates the examples so that users are encouraged to use symbolic names instead of "$n"s. I'm going to implement alias expansion in templater, which won't support "$n" parameters to make my life easier. Templater is more complicated than revset because tokenizer and parser call each other.
Sun, 17 Apr 2016 10:39:17 -0700 debian: add missing netbase dependency stable
Sean Farley <sean@farley.io> [Sun, 17 Apr 2016 10:39:17 -0700] rev 28985
debian: add missing netbase dependency Apparently, some machines don't have this service (launchpad builders are one such example). This adds the correct dependency for test-serve.t.
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip