Wed, 14 Jan 2015 15:57:57 -0800 bundle2.unbundlepart: tell() implementation
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 15:57:57 -0800] rev 24036
bundle2.unbundlepart: tell() implementation Keep track of how many bytes we've returned from read(); fairly straightforward.
Wed, 14 Jan 2015 14:46:23 -0800 bundle2.unbundlepart: keep an index of chunks and their locations
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 14:46:23 -0800] rev 24035
bundle2.unbundlepart: keep an index of chunks and their locations In order to make unbundlepart seekable, we need to keep a record of where the chunks are so that we can go back to the correct point.
Wed, 14 Jan 2015 14:32:22 -0800 bundle2.unbundlepart: raise payloadchunks from a closure to a method
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 14:32:22 -0800] rev 24034
bundle2.unbundlepart: raise payloadchunks from a closure to a method In a future patch, seek() will need to make a new chunk iterator for the stream; this places it somewhere it can be called multiple times.
Fri, 23 Jan 2015 17:06:03 -0800 manifest: make lru size configurable
Durham Goode <durham@fb.com> [Fri, 23 Jan 2015 17:06:03 -0800] rev 24033
manifest: make lru size configurable On machines with lots of ram, it's beneficial to increase the lru size of the manifest cache. On a large repo, configuring the lru to be size 10 can shave a large rebase (~12 commits) down from 95s to 70s.
Wed, 04 Feb 2015 11:38:30 -0500 parsers: use k instead of n for PyArg_ParseTuple because python 2.4 is awful
Augie Fackler <augie@google.com> [Wed, 04 Feb 2015 11:38:30 -0500] rev 24032
parsers: use k instead of n for PyArg_ParseTuple because python 2.4 is awful
Wed, 04 Feb 2015 21:37:06 +0900 revset: have rev() validate input by repo.changelog.__contains__()
Yuya Nishihara <yuya@tcha.org> [Wed, 04 Feb 2015 21:37:06 +0900] rev 24031
revset: have rev() validate input by repo.changelog.__contains__() fullreposet.__contains__() will be rewritten in order to support "null" revision, and "rev()" won't be possible to rely on it. This backs out eb763217152a, but there is no performance regression now. revisions: 0) e1dbe0b215ae "l not in fullreposet(repo)" 1) this patch "l not in repo.changelog" revset #0: rev(210000) 0) wall 0.000056 comb 0.000000 user 0.000000 sys 0.000000 (best of 48036) 1) wall 0.000049 comb 0.000000 user 0.000000 sys 0.000000 (best of 54969)
Wed, 04 Feb 2015 21:25:57 +0900 revlog: add __contains__ for fast membership test
Yuya Nishihara <yuya@tcha.org> [Wed, 04 Feb 2015 21:25:57 +0900] rev 24030
revlog: add __contains__ for fast membership test Because revlog implements __iter__, "rev in revlog" works but does silly O(n) lookup unexpectedly. So it seems good to add fast version of __contains__. This allows "rev in repo.changelog" in the next patch.
Mon, 02 Feb 2015 19:58:41 -0500 largefiles: set the extension as enabled locally after a clone requiring it
Matt Harbison <matt_harbison@yahoo.com> [Mon, 02 Feb 2015 19:58:41 -0500] rev 24029
largefiles: set the extension as enabled locally after a clone requiring it When cloning a repo that requires largefiles, the user had to either enable the extension on the command line and then manually edit the local hgrc file after the clone, or just enable it globally for the user. Since it is a feature of last resort, and materially affects even repos without any largefiles when it is enabled, we should make it easier to not have it enabled globally. This simply adds the enabling statement to the local hgrc if the requires file mandates its use (which only happens after the first largefile is committed). That means that a user who works with a mix of largefile and normal repos can always clone with '--config extensions.largefiles=', and the extension is permanently enabled or not as appropriate. The change in test-largefiles.t is simply because the order of loading rebase and largefiles changed. The same change occurs if the order is flipped in the hgrc file at the top of the test.
Tue, 03 Feb 2015 16:24:32 -0800 color: be more conservative about setting ANSI mode on Windows (BC)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 03 Feb 2015 16:24:32 -0800] rev 24028
color: be more conservative about setting ANSI mode on Windows (BC) The current color mode detection on Windows assumes the presence of the TERM environment variable assumes ANSI is supported. However, this isn't always true. In MSYS (commonly found as part of MinGW), TERM is set to "cygwin" and the auto resolved color mode of "ansi" results in escape sequences getting printed literally to the terminal. The output is very difficult to read and results in a bad user experience. A workaround is to activate the pager and have it attend all commands (GNU less in MSYS can render ANSI terminal sequences properly). In Cygwin, TERM is set to "xterm." Furthermore, Cygwin supports displaying these terminal sequences properly (unlike MSYS). This patch changes the mode auto-detection logic on Windows to be more conservative about selecting the "ansi" mode. We now only select the "ansi" mode if TERM is set and it contains the string "xterm" or if we were unable to talk to win32 APIs to determine the settings. There is a chance this may take away "ansi" from a terminal that actually supports it. The recourse for this would be to patch the detection to act appropriately and to override color.mode until that patch has landed. However, the author believes this regression is tolerable, since it means MSYS users won't have gibberish printed by default. Since MSYS's common pager (less) supports display of ANSI sequences, there is room to patch the color extensions so it can select the ANSI color mode if a pager is activated. Mozilla (being an active user of MSYS) would really appreciate this being part of the stable branch. However, since I believe it is BC, I haven't explicitly requested application to stable since I figure that request will be denied.
Tue, 03 Feb 2015 19:10:03 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 03 Feb 2015 19:10:03 -0600] rev 24027
merge with stable
Wed, 14 Jan 2015 14:24:16 -0800 bundle2.unpackermixin: control for underlying file descriptor
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 14:24:16 -0800] rev 24026
bundle2.unpackermixin: control for underlying file descriptor This patch adds seek(), tell(), and close() implementations for unpackermixin which forward to the file descriptor's implementation if possible. A future patch will use this to make bundle2.unbundlepart seekable, which will in turn make it usable as a file descriptor for bundlerepo.
Fri, 16 Jan 2015 15:34:03 -0800 trydiff: join elements in 'header' list by '\n'
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:34:03 -0800] rev 24025
trydiff: join elements in 'header' list by '\n' It seems natural that each element in the list corresponds to one line of output. That is currently true, but only because each element in the list has a trailing newline. Let's drop those newlines and instead add them when we print the headers.
Fri, 16 Jan 2015 15:27:04 -0800 trydiff: move check for quietness out of diffline()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:27:04 -0800] rev 24024
trydiff: move check for quietness out of diffline() By moving the condition out of diffline(), the call site becomes clearer and diffline() no longer closes on any variables. Note that this changes the value of the header variable from [''] to [], but there is no difference in how these two are treated by the following code. The new value seems more natural anyway.
Fri, 16 Jan 2015 15:22:29 -0800 trydiff: remove dead branch in diffline()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:22:29 -0800] rev 24023
trydiff: remove dead branch in diffline() Since diffline() is never called when 'revs' is empty, it doesn't need to handle that case.
Fri, 16 Jan 2015 15:19:57 -0800 trydiff: make 'revs' ignored if opts.git is set
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:19:57 -0800] rev 24022
trydiff: make 'revs' ignored if opts.git is set Instead of setting revs=None to prevent the call to diffline() when opts.git is set, explicitly do not call the function in the git case.
Fri, 16 Jan 2015 14:58:51 -0800 trydiff: remove unused argument to diffline()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 14:58:51 -0800] rev 24021
trydiff: remove unused argument to diffline() Now that diffline no longer knows about copies/renames, it only needs one argument for the path.
Fri, 16 Jan 2015 14:58:06 -0800 trydiff: move git-header code out of diffline function
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 14:58:06 -0800] rev 24020
trydiff: move git-header code out of diffline function This collects more of the code for writing git headers in a single place and makes diffline() close on a few variables less.
Tue, 27 Jan 2015 09:22:59 -0500 _fm1readmarkers: generate list in C
Martin von Zweigbergk <martinvonz@google.com> [Tue, 27 Jan 2015 09:22:59 -0500] rev 24019
_fm1readmarkers: generate list in C This moves perfloadmarkers from ! result: 63866 ! wall 0.239217 comb 0.250000 user 0.240000 sys 0.010000 (best of 42) to ! result: 63866 ! wall 0.218795 comb 0.210000 user 0.210000 sys 0.000000 (best of 46)
Tue, 20 Jan 2015 13:38:07 -0500 obsolete: use parsers.fm1readmarker if it exists for a ~38% perf win
Augie Fackler <augie@google.com> [Tue, 20 Jan 2015 13:38:07 -0500] rev 24018
obsolete: use parsers.fm1readmarker if it exists for a ~38% perf win This moves perfloadmarkers on my linux workstation (63494 markers from mpm, crew, and myself) performance from ! wall 0.357657 comb 0.360000 user 0.350000 sys 0.010000 (best of 28) to ! wall 0.222345 comb 0.220000 user 0.210000 sys 0.010000 (best of 41) which is a pretty good improvement. On my BSD machine, which is ancient and slow, before: ! wall 3.584964 comb 3.578125 user 3.539062 sys 0.039062 (best of 3) after: ! wall 2.267974 comb 2.265625 user 2.195312 sys 0.070312 (best of 5) I feel like we could do better by moving the whole generator function into C, but I didn't want to tackle that right away.
Fri, 23 Jan 2015 15:11:25 -0500 parsers: add fm1readmarker
Augie Fackler <augie@google.com> [Fri, 23 Jan 2015 15:11:25 -0500] rev 24017
parsers: add fm1readmarker This lets us do most of the interesting work of parsing obsolete markers in C, which should provide significant time savings. Thanks to Martin von Zweigbergk for some cleanups on this code.
Tue, 03 Feb 2015 13:17:21 -0500 util: add getbefloat64
Augie Fackler <augie@google.com> [Tue, 03 Feb 2015 13:17:21 -0500] rev 24016
util: add getbefloat64 As far as I can tell, this is wrong. double's format isn't strictly specified in the C standard, but the wikipedia article implies that platforms implementing optional Annex F "IEC 60559 floating-point arithmetic" will work correctly. My local C experts believe doing *((double *) &t) is a strict aliasing violation, and that using a union is also one. Doing memcpy appears to be the least-undefined behavior possible.
Tue, 20 Jan 2015 14:09:57 -0500 util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com> [Tue, 20 Jan 2015 14:09:57 -0500] rev 24015
util: add getbe{u,}int16 utility methods
Tue, 20 Jan 2015 09:38:22 -0500 obsolete: make optional offset parameter to fm*readmarkers required
Augie Fackler <augie@google.com> [Tue, 20 Jan 2015 09:38:22 -0500] rev 24014
obsolete: make optional offset parameter to fm*readmarkers required It was always passed by the only callsite, so just make it required.
Mon, 02 Feb 2015 14:26:47 -0500 log: fix json-formatted output when file copies are listed (issue4523) stable
Augie Fackler <augie@google.com> [Mon, 02 Feb 2015 14:26:47 -0500] rev 24013
log: fix json-formatted output when file copies are listed (issue4523)
Tue, 03 Feb 2015 17:54:01 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 03 Feb 2015 17:54:01 -0600] rev 24012
merge with stable
Tue, 27 Jan 2015 17:24:12 -0800 copy: move _forwardcopies file logic to a function
Durham Goode <durham@fb.com> [Tue, 27 Jan 2015 17:24:12 -0800] rev 24011
copy: move _forwardcopies file logic to a function Moves the _forwardcopies missingfiles logic to a separate function so that other extensions which need to prefetch information about the files being processed have a hook point. This saves extensions from having to recompute this information themselves, and thus saves several seconds off of various commands (like rebase).
Tue, 27 Jan 2015 17:23:18 -0800 copy: move mergecopies file logic to a function
Durham Goode <durham@fb.com> [Tue, 27 Jan 2015 17:23:18 -0800] rev 24010
copy: move mergecopies file logic to a function Moves the mergecopies nonoverlap logic to a separate function so that other extensions which may need to prefetch information about the files being processed have a hook point. This saves extensions from having to recompute this information themselves, and thus saves several seconds off of various commands (like rebase).
Mon, 02 Feb 2015 16:19:35 -0800 histedit: allow configuring default behavior
Durham Goode <durham@fb.com> [Mon, 02 Feb 2015 16:19:35 -0800] rev 24009
histedit: allow configuring default behavior Adds a configuration setting for allowing users to specify the default behavior of 'hg histedit' without arguments. This saves users from having to manually figure out the bottom commit or a complicated revset. My current revset of choice is "only(.) & draft() - ::merge()" The commits that histedit can work with is usually quite limited, so if this feature ends up working well, we may want to consider making "only(.) & draft() - ::merge()" the default behavior for everyone.
Tue, 03 Feb 2015 21:56:29 +0900 revset: get revision number of each node from target namespaces stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 03 Feb 2015 21:56:29 +0900] rev 24008
revset: get revision number of each node from target namespaces Before this patch, revset predicate "named()" uses each nodes gotten from target namespaces directly. This causes problems below: - combination of other predicates doesn't work correctly, because they assume that revisions are listed up in number - "hg log" doesn't show any revisions for "named()" result, because: - "changeset_printer" stores formatted output for each revisions into dict with revision number (= ctx.rev()) as a key of them - "changeset_printer.flush(rev)" writes stored output for the specified revision, but - "commands.log" invokes it with the node, gotten from "named()" - "hg debugrevspec" shows nodes (= may be binary) directly Difference between revset predicate "tag()" and "named('tags')" in tests is fixed in subsequent patch.
Sun, 01 Feb 2015 14:05:15 -0500 largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com> [Sun, 01 Feb 2015 14:05:15 -0500] rev 24007
largefiles: update _subdirlfs() comment http://www.selenic.com/pipermail/mercurial-devel/2015-February/065958.html
Sat, 31 Jan 2015 00:13:29 -0500 largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com> [Sat, 31 Jan 2015 00:13:29 -0500] rev 24006
largefiles: use the core file copy logic to validate the destination path The destination is validated by pathutil.canonpath() for illegal components, and that it is in the repository. The logic for creating the standin directory tree was calling this before cmdutil.copy(), but without the destination file name component. The cmdutil.copy() logic also calls pathutil.canonpath(), but with the file name component. By always calling the core logic first, the error message is always consistent. Specifically, the old behavior for these tests was to say '.hg' contains an illegal component, and '..' is not under root. A user wasn't likely to notice the discrepancy, but this eliminates a needless difference when running the test suite with --config extensions.largefiles=.
Fri, 16 Jan 2015 15:40:59 -0800 trydiff: inline indexmeta()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:40:59 -0800] rev 24005
trydiff: inline indexmeta() The function is trivial and is only called in one place.
(0) -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 +10000 tip