Mon, 03 Oct 2016 13:18:31 +0200 copies: style fixes and add comment
Gábor Stefanik <gabor.stefanik@nng.com> [Mon, 03 Oct 2016 13:18:31 +0200] rev 30046
copies: style fixes and add comment
Mon, 03 Oct 2016 16:19:55 +0200 copies: limit is an optimization, and doesn't provide guarantees
Gábor Stefanik <gabor.stefanik@nng.com> [Mon, 03 Oct 2016 16:19:55 +0200] rev 30045
copies: limit is an optimization, and doesn't provide guarantees
Sat, 01 Oct 2016 20:20:11 +0900 revset: do not rewrite ':y' to '0:y' (issue5385)
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Oct 2016 20:20:11 +0900] rev 30044
revset: do not rewrite ':y' to '0:y' (issue5385) That's no longer valid since the revision 0 may be hidden. Bypass validating the existence of '0' and filter it by spanset.
Sat, 01 Oct 2016 20:11:48 +0900 revset: extract function that creates range set from computed revisions
Yuya Nishihara <yuya@tcha.org> [Sat, 01 Oct 2016 20:11:48 +0900] rev 30043
revset: extract function that creates range set from computed revisions So we can pass m=0 to _makerangeset() even if the revision 0 is hidden. Hidden revisions are filtered by spanset.
Mon, 12 Sep 2016 13:37:14 +0200 lazymanifest: write a more efficient, pypy friendly version of lazymanifest
Maciej Fijalkowski <fijall@gmail.com> [Mon, 12 Sep 2016 13:37:14 +0200] rev 30042
lazymanifest: write a more efficient, pypy friendly version of lazymanifest
Sun, 02 Oct 2016 22:34:40 -0700 hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 02 Oct 2016 22:34:40 -0700] rev 30041
hg: set default path correctly when doing a clone+share (issue5378) Before, if performing a clone+share from a repo that was itself using shared storage, the share code would copy paths.default from the underlying repo being shared, not from the source given by the user. This patch teaches hg.clonewithshare to resolve paths.default and pass it to share so it can be written to the hgrc accordingly.
Sat, 01 Oct 2016 14:18:58 +0100 annotate: calculate line count correctly
Jun Wu <quark@fb.com> [Sat, 01 Oct 2016 14:18:58 +0100] rev 30040
annotate: calculate line count correctly Before this patch, the "lines" function inside "annotate" returns 1 for empty text (''). This patch makes it 0. Because the function should match mdiff.splitnewlines (used by mdiff.allblocks), or s.splitlines (used at the end of the "annotate" method). Both len(mdiff.splitnewlines('')) and len(''.splitlines(True)) are 0. This issue was discovered while testing fastannotate [1]. I could not find a test case to reveal this issue. However in theory this could reduce memory usage a little bit, and avoids surprises when people are touching this area in the future. [1]: https://bitbucket.org/facebook/hg-experimental/commits/525b3b98e93a
Sun, 02 Oct 2016 05:29:17 +0530 py3: use unicode in is_frozen()
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 02 Oct 2016 05:29:17 +0530] rev 30039
py3: use unicode in is_frozen() imp.is_frozen() doesnot accepts bytes on Python 3. It does accept both bytes and strings on Python 2.
Sun, 02 Oct 2016 03:38:14 +0530 py3: use unicodes in __slots__
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 02 Oct 2016 03:38:14 +0530] rev 30038
py3: use unicodes in __slots__ __slots__ doesnot accepts bytes on Python 3.
Sat, 01 Oct 2016 15:10:38 -0400 merge with stable
Augie Fackler <augie@google.com> [Sat, 01 Oct 2016 15:10:38 -0400] rev 30037
merge with stable
Fri, 30 Sep 2016 21:38:47 +0900 url: fix crash by empty path with #fragments
Yuya Nishihara <yuya@tcha.org> [Fri, 30 Sep 2016 21:38:47 +0900] rev 30036
url: fix crash by empty path with #fragments Before, "#foo" paths made hg crash. We've moved the #fragment parsing at 64fbd0de9773, but we shouldn't set path to None too early. This patch just removes the "if not path:" block since that's checked a few lines later.
Wed, 28 Sep 2016 20:07:32 +0900 py3: make i18n use encoding.environ
Yuya Nishihara <yuya@tcha.org> [Wed, 28 Sep 2016 20:07:32 +0900] rev 30035
py3: make i18n use encoding.environ
Wed, 28 Sep 2016 20:05:34 +0900 py3: provide encoding.environ which is a dict of bytes
Yuya Nishihara <yuya@tcha.org> [Wed, 28 Sep 2016 20:05:34 +0900] rev 30034
py3: provide encoding.environ which is a dict of bytes This can't be moved to pycompat.py since we need encoding.tolocal() to build bytes dict from unicode os.environ.
Wed, 28 Sep 2016 20:39:06 +0900 py3: convert encoding name and mode to str
Yuya Nishihara <yuya@tcha.org> [Wed, 28 Sep 2016 20:39:06 +0900] rev 30033
py3: convert encoding name and mode to str Otherwise tolocal() and fromlocal() wouldn't work on Python 3. Still tolocal() can't make a valid localstr object because localstr inherits str, but it can return some object without raising exceptions. Since Py3 bytes() behaves much like bytearray() than str() of Py2, we can't simply do s/str/bytes/g. I have no good idea to handle str/bytes divergence.
Wed, 28 Sep 2016 22:32:09 +0900 pycompat: extract function that converts attribute or encoding name to str
Yuya Nishihara <yuya@tcha.org> [Wed, 28 Sep 2016 22:32:09 +0900] rev 30032
pycompat: extract function that converts attribute or encoding name to str This will be used to convert encoding.encoding to a str acceptable by Python 3 functions. The source encoding is changed to "latin-1" because encoding.encoding can have arbitrary bytes. Since valid names should consist of ASCII characters, we don't care about the mapping of non-ASCII characters so long as invalid names are distinct from valid names.
Wed, 28 Sep 2016 20:01:23 +0900 pycompat: provide 'ispy3' constant
Yuya Nishihara <yuya@tcha.org> [Wed, 28 Sep 2016 20:01:23 +0900] rev 30031
pycompat: provide 'ispy3' constant We compare version_info at several places, which seems enough to define a constant.
Fri, 30 Sep 2016 00:27:35 +0200 extensions: add a note about debug output during extensions search
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 30 Sep 2016 00:27:35 +0200] rev 30030
extensions: add a note about debug output during extensions search These messages do not show up when one use '--debug'. This is quite confusing so we clarify the situation next to the 'ui.debug' call.
Fri, 30 Sep 2016 00:25:15 +0200 extensions: fix a debug message when searching for extensions
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 30 Sep 2016 00:25:15 +0200] rev 30029
extensions: fix a debug message when searching for extensions The "next" value was wrong. When 'hgext.NAME' is not found we now search for 'hgext3rd.NAME'.
Tue, 30 Aug 2016 15:16:28 -0700 dirstate: rebuild should update dirstate properly
Mateusz Kwapich <mitrandir@fb.com> [Tue, 30 Aug 2016 15:16:28 -0700] rev 30028
dirstate: rebuild should update dirstate properly Updating dirstate by simply adding and dropping files from self._map doesn't keep the other maps updated (think: _dirs, _copymap, _foldmap, _nonormalset) thus introducing cache inconsistency. This is also affecting the debugstate tests since now we don't even try to set correct mode and mtime for the files because they are marked dirty anyway and will be checked during next status call.
Tue, 27 Sep 2016 22:09:28 -0700 histedit: avoid converting nodeid to context and back again
Martin von Zweigbergk <martinvonz@google.com> [Tue, 27 Sep 2016 22:09:28 -0700] rev 30027
histedit: avoid converting nodeid to context and back again It looks like this became unnecessary in e767f5aba810 (histedit: fix preventing strips during histedit, 2015-04-04).
Tue, 13 Sep 2016 22:58:12 -0400 help: mark boolean flags with [no-] to explain that they can be negated
Augie Fackler <augie@google.com> [Tue, 13 Sep 2016 22:58:12 -0400] rev 30026
help: mark boolean flags with [no-] to explain that they can be negated That is, help gets tweaked thus: global options ([+] can be repeated): -v --[no-]verbose enable additional output Other proposals have included: global options ([+] can be repeated, options marked [?] are boolean flags): -v --verbose[?] enable additional output and global options ([+] can be repeated, options marked [^] are boolean flags): -v --verbose[^] enable additional output which avoid the unfortunate visual noise in this patch. In this version's favor, it's consistent with what I'm used to seeing in man pages and similar documentation venues.
Tue, 27 Sep 2016 14:46:34 +0200 mdiff: remove unused parameter 'refine' from allblocks()
Philippe Pepiot <philippe.pepiot@logilab.fr> [Tue, 27 Sep 2016 14:46:34 +0200] rev 30025
mdiff: remove unused parameter 'refine' from allblocks()
Mon, 26 Sep 2016 23:28:57 +0900 demandimport: error out early on missing attribute of non package (issue5373)
Yuya Nishihara <yuya@tcha.org> [Mon, 26 Sep 2016 23:28:57 +0900] rev 30024
demandimport: error out early on missing attribute of non package (issue5373) If the parent module isn't a package, all valid attributes must be obtained from it. We can raise ImportError early if any attributes not found.
Tue, 27 Sep 2016 21:56:00 +0900 demandimport: add 'nt' to ignore list (issue5373)
Yuya Nishihara <yuya@tcha.org> [Tue, 27 Sep 2016 21:56:00 +0900] rev 30023
demandimport: add 'nt' to ignore list (issue5373) pathlib2 tries to import nt. Since it is a built-in module, there should be no performance penalty. https://github.com/mcmtroffaes/pathlib2/blob/release/2.2.0/pathlib2.py#L33
Tue, 27 Sep 2016 22:36:00 +0900 demandimport: add '_ctypes.pointer' to ignore list on PyPy
Yuya Nishihara <yuya@tcha.org> [Tue, 27 Sep 2016 22:36:00 +0900] rev 30022
demandimport: add '_ctypes.pointer' to ignore list on PyPy The pointer module is shadowed by a subsequent import. Our demand importer can't handle this because both sub modules and attributes live in the same namespace. https://bitbucket.org/pypy/pypy/src/release-5.0.1/lib_pypy/_ctypes/__init__.py#__init__.py-5
Mon, 26 Sep 2016 16:12:40 +0800 hgweb: make anchor name actually match its href on help index page
Anton Shestakov <av6@dwimlabs.net> [Mon, 26 Sep 2016 16:12:40 +0800] rev 30021
hgweb: make anchor name actually match its href on help index page
Sat, 24 Sep 2016 12:22:30 -0700 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Sep 2016 12:22:30 -0700] rev 30020
perf: add perfchangegroupchangelog command This command can be used for testing the performance of producing the changelog portion of a changegroup. We could use additional perf* commands for testing other parts of changegroup. Those can be written another time, when they are needed. (And those may want to refactor the changegroup generation API so code can be reused.) Speaking of code reuse, yes, this command does reinvent a small wheel. I didn't want to scope bloat to change the changegroup API because that will invite bikeshedding.
Sat, 24 Sep 2016 10:44:37 -0700 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Sep 2016 10:44:37 -0700] rev 30019
perf: add --reverse to perfrevlog It can be useful to know how fast we can read revisions from a revlog in reverse. This operation tends to occur in `hg log` commands, for example.
Sat, 24 Sep 2016 19:58:23 +0900 log: copy the way of ancestor traversal to --follow matcher (issue5376)
Yuya Nishihara <yuya@tcha.org> [Sat, 24 Sep 2016 19:58:23 +0900] rev 30018
log: copy the way of ancestor traversal to --follow matcher (issue5376) We can't use fctx.linkrev() because follow() revset tries hard to simulate the traversal of changelog DAG, not filelog DAG. This patch fixes _makefollowlogfilematcher() to walk file ancestors in the same way as revset._follow(). I'll factor out a common function in future patches.
Sat, 24 Sep 2016 19:52:02 +0900 log: unroll loop that populates file paths for --patch --follow matcher
Yuya Nishihara <yuya@tcha.org> [Sat, 24 Sep 2016 19:52:02 +0900] rev 30017
log: unroll loop that populates file paths for --patch --follow matcher We can't handle the first fctx in the same manner as its ancestors. Also, I think the original code was too tricky.
Sun, 25 Sep 2016 12:20:31 -0700 wireproto: rename argument to groupchunks()
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Sep 2016 12:20:31 -0700] rev 30016
wireproto: rename argument to groupchunks() groupchunks() is a generic "turn a file object into a generator" function. It isn't limited to changegroups. Rename the argument and update the docstring to reflect this.
Sun, 25 Sep 2016 13:20:55 -0700 tests: actually test non-generaldelta variant for stream clones
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Sep 2016 13:20:55 -0700] rev 30015
tests: actually test non-generaldelta variant for stream clones 608cabec1b15 accidentally made both tests test generaldelta repos. Restore the test for a non-gd repo.
Wed, 24 Aug 2016 20:18:58 -0700 revlog: document high frequency of code execution
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 24 Aug 2016 20:18:58 -0700] rev 30014
revlog: document high frequency of code execution Recording my notes while working on performance optimization.
Wed, 24 Aug 2016 20:00:52 -0700 revlog: make code in builddelta() slightly easier to read
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 24 Aug 2016 20:00:52 -0700] rev 30013
revlog: make code in builddelta() slightly easier to read self.compress() is destructured into its components. "l" is renamed to "deltalen."
Fri, 23 Sep 2016 08:15:05 +0000 templates: add built-in files() function
Hannes Oldenburg <hannes.christian.oldenburg@gmail.com> [Fri, 23 Sep 2016 08:15:05 +0000] rev 30012
templates: add built-in files() function We already support multiple primitive for listing files, which were affected by the current changeset. This patch adds files() which returns files of the current changeset matching a given pattern or fileset query via the "set:" prefix.
Sat, 17 Sep 2016 17:02:56 +1000 rebase: rebase changesets in topo order (issue5370) (BC)
Xidorn Quan <me@upsuper.org> [Sat, 17 Sep 2016 17:02:56 +1000] rev 30011
rebase: rebase changesets in topo order (issue5370) (BC) There are two reasons that rebase should be done this way: 1. This would make rebasing faster because it would minimize the total number of files to be checked out in the process, as it don't need to switch back and forth between branches. 2. It makes resolving conflicts easier as user has a better context. This commit changes the behavior in "Test multiple root handling" of test-rebase-obsolete.t. It is an expected change which reflects the new behavior that commits in a branch are grouped together when rebased.
Thu, 22 Sep 2016 12:36:30 -0700 dispatch: make hg --profile wrap reposetup
Arun Kulshreshtha <kulshrax@fb.com> [Thu, 22 Sep 2016 12:36:30 -0700] rev 30010
dispatch: make hg --profile wrap reposetup Move profiling.maybeprofile() from _runcommand to _dispatch() so that profiler output will include reposetup.
Thu, 22 Sep 2016 12:19:48 -0700 dispatch: change indentation level in _dispatch()
Arun Kulshreshtha <kulshrax@fb.com> [Thu, 22 Sep 2016 12:19:48 -0700] rev 30009
dispatch: change indentation level in _dispatch() Add an if True: placeholder for a profiling context manager that will be added in the next commit, for the purpose of reducing size of the diff due to trivial indentation changes. This change should be a no-op.
Thu, 22 Sep 2016 20:59:24 +0900 log: drop outdated optimization to walk revisions in reverse order
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 20:59:24 +0900] rev 30008
log: drop outdated optimization to walk revisions in reverse order Since revset is computed lazily, there would be no (or little) benefit to reverse 'revs' temporarily.
Thu, 22 Sep 2016 20:53:53 +0900 graphlog: preserve topo sort even if additional filter options specified
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 20:53:53 +0900] rev 30007
graphlog: preserve topo sort even if additional filter options specified Use ordered=revset.followorder instead. This change is logically the same as fa5e4f58dfbc.
Thu, 22 Sep 2016 21:52:00 +0900 transaction: open a file with checkambig=True to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:52:00 +0900] rev 30006
transaction: open a file with checkambig=True to avoid file stat ambiguity Before this patch, if steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to revlog-style file (and close transaction) 2. discard appended data by truncation of rollback 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. To avoid file stat ambiguity around truncation, this patch opens a file with checkambig=True. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:52:00 +0900 repair: open a file with checkambig=True to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:52:00 +0900] rev 30005
repair: open a file with checkambig=True to avoid file stat ambiguity Before this patch, if steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to revlog-style file (and close transaction) 2. discard appended data by truncation of strip 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. To avoid such file stat ambiguity around truncation, this patch opens a file with checkambig=True. This patch also introduces "with" statement style, to ensure immediate invocation of close() after truncation, because closing file is the only trigger to check (and get rid of) file stat ambiguity. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:59 +0900 changelog: specify checkambig=True to revlog.__init__, to avoid ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:59 +0900] rev 30004
changelog: specify checkambig=True to revlog.__init__, to avoid ambiguity If steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to 00changelog.i (and close transaction) 2. discard appended data by truncation (strip or rollback) 3. append same size but different data to 00changelog.i again Therefore, cache validation doesn't work after (3) as expected. To avoid such file stat ambiguity around truncation, this patch specifies checkambig=True to revlog.__init__(). This makes revlog write changes out with checkambig=True. Even though changes of 00changelog.i themselves are written out at changelog._finalize(), this checkambig=True is needed, because revlog.checkinlinesize(), which is invoked at the end of changelog._finalize(), might replace already changed 00changelog.i by converted one. Even after this patch, avoiding file stat ambiguity of 00changelog.i around truncation isn't yet completed, because truncation side isn't aware of this issue. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:59 +0900 changelog: specify checkambig=True to avoid ambiguity around truncation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:59 +0900] rev 30003
changelog: specify checkambig=True to avoid ambiguity around truncation If steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to 00changelog.i (and close transaction) 2. discard appended data by truncation (strip or rollback) 3. append same size but different data to 00changelog.i again Therefore, cache validation doesn't work after (3) as expected. To avoid such file stat ambiguity around truncation, this patch specifies checkambig=True for renaming or opening to write changes out at finalization. Even after this patch, avoiding file stat ambiguity of 00changelog.i around truncation isn't yet completed, because truncation side isn't aware of this issue. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:58 +0900 manifest: specify checkambig=True to revlog.__init__, to avoid ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:58 +0900] rev 30002
manifest: specify checkambig=True to revlog.__init__, to avoid ambiguity If steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to 00manifest.i (and close transaction) 2. discard appended data by truncation (strip or rollback) 3. append same size but different data to 00manifest.i again Therefore, cache validation doesn't work after (3) as expected. To avoid such file stat ambiguity around truncation, this patch specifies checkambig=True to revlog.__init__(). This makes revlog write changes out with checkambig=True. Even after this patch, avoiding file stat ambiguity of 00manifest.i around truncation isn't yet completed, because truncation side isn't aware of this issue. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:58 +0900 revlog: specify checkambig at writing to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:58 +0900] rev 30001
revlog: specify checkambig at writing to avoid file stat ambiguity This allows revlog-style files to be written out with checkambig=True easily. Because avoiding file stat ambiguity is needed only for filecache-ed manifest and changelog, this patch does: - use False for default value of checkambig - focus only on writing changes of index file out This patch also adds optional argument checkambig to _divert/_delay for changelog, to safely accept checkambig specified in revlog layer. But this argument can be fully ignored, because: - changes are written into other than index file, if name != target - changes are never written into index file, otherwise (into pending file by _divert, or into in-memory buffer by _delay) This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:57 +0900 vfs: use checkambigatclosing in checkambig=True but atomictemp=False case
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:57 +0900] rev 30000
vfs: use checkambigatclosing in checkambig=True but atomictemp=False case In Mercurial source tree, opening a file in "a"/"a+" mode like below doesn't specify atomictemp=True for vfs, and this avoids file stat ambiguity check by atomictempfile. - writing changes out in revlog layer uses "a+" mode - truncation in repair.strip() uses "a" mode - truncation in transaction._playback() uses "a" mode If steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to revlog-style file (and close transaction) 2. discard appended data by truncation (strip or rollback) 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. This patch uses checkambigatclosing in checkambig=True but atomictemp=False case, to check (and get rid of) file stat ambiguity at closing. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Thu, 22 Sep 2016 21:51:57 +0900 scmutil: add file object wrapper class to check ambiguity at closing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:57 +0900] rev 29999
scmutil: add file object wrapper class to check ambiguity at closing In Mercurial source tree, opening a file in "a"/"a+" mode like below doesn't specify atomictemp=True for vfs, and this avoids file stat ambiguity check by atomictempfile. - writing changes out in revlog layer uses "a+" mode - truncation in repair.strip() uses "a" mode - truncation in transaction._playback() uses "a" mode If steps below occurs at "the same time in sec", all of mtime, ctime and size are same between (1) and (3). 1. append data to revlog-style file (and close transaction) 2. discard appended data by truncation (strip or rollback) 3. append same size but different data to revlog-style file again Therefore, cache validation doesn't work after (3) as expected. This patch adds file object wrapper class checkambigatclosing to check (and get rid of) ambiguity at closing. It is used by vfs in subsequent patch. This is a part of ExactCacheValidationPlan. https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan BTW, checkambigatclosing is tested in test-filecache.py, even though it doesn't use filecache itself, because filecache assumes that file stat ambiguity never occurs (and there is no another test-*.py related to filecache).
Thu, 22 Sep 2016 21:51:56 +0900 scmutil: factor out common logic of delayclosedfile to reuse it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Sep 2016 21:51:56 +0900] rev 29998
scmutil: factor out common logic of delayclosedfile to reuse it This is a preparation for the subsequent patch, which adds another proxy class for a file object.
Thu, 22 Sep 2016 13:20:06 +0800 spartan: remove unused templates
Anton Shestakov <av6@dwimlabs.net> [Thu, 22 Sep 2016 13:20:06 +0800] rev 29997
spartan: remove unused templates
Thu, 22 Sep 2016 13:19:44 +0800 monoblue: remove unused templates
Anton Shestakov <av6@dwimlabs.net> [Thu, 22 Sep 2016 13:19:44 +0800] rev 29996
monoblue: remove unused templates
Thu, 22 Sep 2016 13:19:25 +0800 gitweb: remove unused templates
Anton Shestakov <av6@dwimlabs.net> [Thu, 22 Sep 2016 13:19:25 +0800] rev 29995
gitweb: remove unused templates
Thu, 22 Sep 2016 13:18:59 +0800 paper: remove unused templates
Anton Shestakov <av6@dwimlabs.net> [Thu, 22 Sep 2016 13:18:59 +0800] rev 29994
paper: remove unused templates
Wed, 21 Sep 2016 17:05:27 -0400 help: add sections for revsets
timeless <timeless@mozdev.org> [Wed, 21 Sep 2016 17:05:27 -0400] rev 29993
help: add sections for revsets
Wed, 21 Sep 2016 17:23:05 +0000 help: move revsets.## documentation into infix section
timeless <timeless@mozdev.org> [Wed, 21 Sep 2016 17:23:05 +0000] rev 29992
help: move revsets.## documentation into infix section
Wed, 21 Sep 2016 16:33:37 +0000 help: clarify quotes are needed for filesets.size expressions
timeless <timeless@mozdev.org> [Wed, 21 Sep 2016 16:33:37 +0000] rev 29991
help: clarify quotes are needed for filesets.size expressions
Wed, 21 Sep 2016 20:43:41 +0800 paper: remove unused template "changelogchild"
Anton Shestakov <av6@dwimlabs.net> [Wed, 21 Sep 2016 20:43:41 +0800] rev 29990
paper: remove unused template "changelogchild"
Wed, 21 Sep 2016 20:43:10 +0800 monoblue: remove unused template "changelogchild"
Anton Shestakov <av6@dwimlabs.net> [Wed, 21 Sep 2016 20:43:10 +0800] rev 29989
monoblue: remove unused template "changelogchild"
Wed, 21 Sep 2016 20:35:46 +0800 gitweb: remove unused template "changelogchild"
Anton Shestakov <av6@dwimlabs.net> [Wed, 21 Sep 2016 20:35:46 +0800] rev 29988
gitweb: remove unused template "changelogchild"
Wed, 21 Sep 2016 20:19:35 +0800 monoblue: tweak branch table's last row's cell colspan on summary page
Anton Shestakov <av6@dwimlabs.net> [Wed, 21 Sep 2016 20:19:35 +0800] rev 29987
monoblue: tweak branch table's last row's cell colspan on summary page This table only has 3 columns, so max sensible colspan is 3.
Wed, 21 Sep 2016 19:52:48 +0800 gitweb: tweak branch table's last row's cell colspan on summary page
Anton Shestakov <av6@dwimlabs.net> [Wed, 21 Sep 2016 19:52:48 +0800] rev 29986
gitweb: tweak branch table's last row's cell colspan on summary page This table only has 3 columns, so max sensible colspan is 3.
Wed, 21 Sep 2016 03:39:37 +0000 tests: clarify demandimport disabled state
timeless <timeless@mozdev.org> [Wed, 21 Sep 2016 03:39:37 +0000] rev 29985
tests: clarify demandimport disabled state
Wed, 21 Sep 2016 02:46:59 +0000 demandimport: add trailing comma
timeless <timeless@mozdev.org> [Wed, 21 Sep 2016 02:46:59 +0000] rev 29984
demandimport: add trailing comma
Tue, 20 Sep 2016 23:49:20 +0000 tests: favor single quotes for wrapping hg help ...
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:49:20 +0000] rev 29983
tests: favor single quotes for wrapping hg help ...
Tue, 20 Sep 2016 23:49:00 +0000 samplehgrcs: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:49:00 +0000] rev 29982
samplehgrcs: use single quotes in use warning
Tue, 20 Sep 2016 23:48:30 +0000 util: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:48:30 +0000] rev 29981
util: use single quotes in use warning
Tue, 20 Sep 2016 23:48:19 +0000 obsolete: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:48:19 +0000] rev 29980
obsolete: use single quotes in use warning
Tue, 20 Sep 2016 23:48:08 +0000 localrepo: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:48:08 +0000] rev 29979
localrepo: use single quotes in use warning
Tue, 20 Sep 2016 23:47:46 +0000 help: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:47:46 +0000] rev 29978
help: use single quotes in use warning
Tue, 20 Sep 2016 23:47:30 +0000 discovery: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:47:30 +0000] rev 29977
discovery: use single quotes in use warning
Tue, 20 Sep 2016 23:47:02 +0000 serve: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:47:02 +0000] rev 29976
serve: use single quotes in use warning
Tue, 20 Sep 2016 23:46:15 +0000 bundle: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:46:15 +0000] rev 29975
bundle: use single quotes in use warning
Tue, 20 Sep 2016 23:45:25 +0000 histedit: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:45:25 +0000] rev 29974
histedit: use single quotes in use warning
Tue, 20 Sep 2016 23:45:15 +0000 keyword: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:45:15 +0000] rev 29973
keyword: use single quotes in use warning
Tue, 20 Sep 2016 23:44:59 +0000 mq: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:44:59 +0000] rev 29972
mq: use single quotes in use warning
Tue, 20 Sep 2016 23:44:49 +0000 pager: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:44:49 +0000] rev 29971
pager: use single quotes in use warning
Tue, 20 Sep 2016 23:44:28 +0000 rebase: use single quotes in use warning
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 23:44:28 +0000] rev 29970
rebase: use single quotes in use warning
Tue, 20 Sep 2016 20:12:38 +0000 push: update help hint to point to config.paths section
timeless <timeless@mozdev.org> [Tue, 20 Sep 2016 20:12:38 +0000] rev 29969
push: update help hint to point to config.paths section
Fri, 02 Sep 2016 21:49:33 +0000 update: use single quotes in use warning
timeless <timeless@mozdev.org> [Fri, 02 Sep 2016 21:49:33 +0000] rev 29968
update: use single quotes in use warning
Fri, 02 Sep 2016 21:46:00 +0000 remove: specify hg in added warning
timeless <timeless@mozdev.org> [Fri, 02 Sep 2016 21:46:00 +0000] rev 29967
remove: specify hg in added warning
Tue, 20 Sep 2016 12:24:01 -0700 manifest: add manifestlog.add
Durham Goode <durham@fb.com> [Tue, 20 Sep 2016 12:24:01 -0700] rev 29966
manifest: add manifestlog.add This adds a simple add() function to manifestlog. This lets us convert more uses of repo.manifest to use repo.manifestlog, so we can further break our dependency on the manifest class.
Tue, 20 Sep 2016 12:24:01 -0700 manifest: move manifest.add onto manifestrevlog
Durham Goode <durham@fb.com> [Tue, 20 Sep 2016 12:24:01 -0700] rev 29965
manifest: move manifest.add onto manifestrevlog This moves add and _addtree onto manifestrevlog. manifestrevlog is responsible for all serialization decisions, so therefore the add function should live on it. This will allow us to call add() from manifestlog, which lets us further break our dependency on manifest.
Tue, 20 Sep 2016 12:24:01 -0700 manifest: remove dependency on treeinmem from manifest.add
Durham Goode <durham@fb.com> [Tue, 20 Sep 2016 12:24:01 -0700] rev 29964
manifest: remove dependency on treeinmem from manifest.add Currently manifest.add uses the treeinmem option to know if it can call fastdelta on the given manifest instance. In a future patch we will be moving add() to be on the manifestrevlog, so it won't have access to the treeinmem option anymore. Instead, let's have it actually check if the given manifest instance supports the fastdelta operation. This also means that if treemanifest or any implementation eventually implements fastdelta(), it will automatically benefit from this code path.
Tue, 20 Sep 2016 12:24:01 -0700 manifest: move treeinmem onto manifestlog
Durham Goode <durham@fb.com> [Tue, 20 Sep 2016 12:24:01 -0700] rev 29963
manifest: move treeinmem onto manifestlog A previous patched moved all the serialization related options onto manifestrevlog (since it is responsible for serialization). Let's move the treeinmem option on manifestlog, since it is responsible for materialization decisions. This reduces the number of dependencies manifestlog has on the old manifest type as well, so we can eventually make them completely independent of each other.
Mon, 19 Sep 2016 17:14:43 -0400 copy: document current behavior of 'hg cp --after'
Augie Fackler <augie@google.com> [Mon, 19 Sep 2016 17:14:43 -0400] rev 29962
copy: document current behavior of 'hg cp --after' I'm about to propose an output change here, but the existing behavior was untested!
Tue, 20 Sep 2016 10:03:50 -0500 crecord: add an event that scrolls the selected line to the top of the screen
Nathan Goldbaum <ngoldbau@illinois.edu> [Tue, 20 Sep 2016 10:03:50 -0500] rev 29961
crecord: add an event that scrolls the selected line to the top of the screen Using ctrl-l for this purpose seems to be a fairly widely used practice, presumably following emacs. This doesn't scroll the selected line all the way to the top of the window, instead it leaves a 3 line buffer for context. Use curses.unctrl() to resolve keypressed to '^L' to avoid hard-coding hexadecimal key codes.
Tue, 03 May 2016 14:24:00 +0900 log: drop hack to fix order of revset (issue5100)
Yuya Nishihara <yuya@tcha.org> [Tue, 03 May 2016 14:24:00 +0900] rev 29960
log: drop hack to fix order of revset (issue5100) Specify ordered=revset.followorder instead. This patch effectively backs out c407583cf5f6. revs.sort(reverse=True) is replaced by revs.reverse() because the matcher should no longer reorder revisions.
Tue, 03 May 2016 14:18:28 +0900 revset: add option to make matcher takes the ordering of the input set
Yuya Nishihara <yuya@tcha.org> [Tue, 03 May 2016 14:18:28 +0900] rev 29959
revset: add option to make matcher takes the ordering of the input set This allows us to evaluate match(subset) as if 'subset & expr', which will be the complete fix for the issue5100.
Mon, 19 Sep 2016 09:14:35 -0700 strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com> [Mon, 19 Sep 2016 09:14:35 -0700] rev 29958
strip: don't use "full" and "partial" to describe bundles The partial bundle is not a subset of the full bundle, and the full bundle is not full in any way that i see. The most obvious interpretation of "full" I can think of is that it has all commits back to the null revision, but that is not what the "full" bundle is. The "full" bundle is simply a backup of what the user asked us to strip (unless --no-backup). The "partial" bundle contains the revisions we temporarily stripped because they had higher revision numbers that some commit that the user asked us to strip. The "full" bundle is already called "backup" in the code, so let's use that in user-facing messages too. Let's call the "partial" bundle "temporary" in the code.
Mon, 19 Sep 2016 09:14:32 -0700 strip: clarify that user action is required to recover temp bundle
Martin von Zweigbergk <martinvonz@google.com> [Mon, 19 Sep 2016 09:14:32 -0700] rev 29957
strip: clarify that user action is required to recover temp bundle If strip fails when applying the temporary bundle, the commits in the temporary bundle have not yet been applied, so the user will almost definitely want to apply the bundle. We should be more clear to the user about that than our current "partial bundle stored in...". Note that we will probably not be able to recover it automatically, since whatever made it fail (e.g. a hook) will most likely make it fail again. We need to give control back to the user to fix the problem before trying again.
Thu, 15 Sep 2016 09:45:29 -0700 strip: report both bundle files in case of exception (issue5368)
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Sep 2016 09:45:29 -0700] rev 29956
strip: report both bundle files in case of exception (issue5368) If strip fails while recovering the temporary bundle (e.g. because a hook fails), we tell the user only about the backup bundle, not about the temporary bundle. Since the user did not ask to strip the commits in the temporary bundle, that's the more important bundle to mention, so let's do that (and also mention the backup bundle as usual).
Thu, 15 Sep 2016 10:18:56 -0700 strip: simplify some repeated conditions
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Sep 2016 10:18:56 -0700] rev 29955
strip: simplify some repeated conditions We check "if saveheads or savebases" in several places to see if we should or have created a bundle of the changesets to apply after truncating the revlogs. One of the conditions is actually just "if saveheads", but since there can't be savebases without saveheads, that is effectively the same condition. It seems simpler to check only once and from then on see if we created the file.
Mon, 29 Aug 2016 07:07:15 +0200 config: add template support
Mathias De Maré <mathias.demare@gmail.com> [Mon, 29 Aug 2016 07:07:15 +0200] rev 29954
config: add template support V2: - Limit escaping to plain formatting only - Use the formatter consistently (no more ui.debug) - Always include 'name' and 'value' V3: - Always convert 'value' to string (this also makes sure we handle functions) - Keep real debug message as ui.debug for now - Add additional tests. Note: I'm not quite sure about the best approach to handling the 'print the full config' case. For me, it printed the 'ui.promptecho' key at the end. I went with globs there as that at least tests the json display reliably. Example output: [ { "name": "ui.username", "source": "/home/mathias/.hgrc:2", "value": "Mathias De Maré <mathias.demare@gmail.com>" } ]
Mon, 29 Aug 2016 17:19:09 +0200 formatter: introduce isplain() to replace (the inverse of) __nonzero__() (API)
Mathias De Maré <mathias.demare@gmail.com> [Mon, 29 Aug 2016 17:19:09 +0200] rev 29953
formatter: introduce isplain() to replace (the inverse of) __nonzero__() (API) V2: also remove and replace __nonzero__
Tue, 30 Aug 2016 15:55:07 -0400 diffopts: notice a negated boolean flag in diffopts
Augie Fackler <augie@google.com> [Tue, 30 Aug 2016 15:55:07 -0400] rev 29952
diffopts: notice a negated boolean flag in diffopts This means that if you have git-diffs enabled by default (pretty common) and you hit the rare (but real) case where a git-diff breaks patch(1) or some other tool, you can easily disable it by just specifying --no-git on the command line. I feel a little bad about the isinstance() check, but some values in diffopts are not booleans and so we need to preserve false iff the flag is a boolean flag: failing to do this means we end up with empty string defaults for flags clobbering meaningful values from the [diff] section in hgrc.
Tue, 13 Sep 2016 22:57:57 -0400 flags: allow specifying --no-boolean-flag on the command line (BC)
Augie Fackler <augie@google.com> [Tue, 13 Sep 2016 22:57:57 -0400] rev 29951
flags: allow specifying --no-boolean-flag on the command line (BC) This makes it much easier to enable some anti-foot-shooting features (like update --check) by default, because now all boolean flags can be explicitly disabled on the command line without having to use HGPLAIN or similar. Flags which don't deserve this treatment can be removed from consideration by adding them to the nevernegate set in fancyopts. This doesn't make it any easier to identify when a flag is set: opts still always gets filled in, either with the user-specified flag value or with the default from the flags list in the command table. Improving that would probably clean things up a bit, but for now if you want a boolean flag and care if it was explicitly false or default false (or true, but nobody uses that functionality because before now it was nonsense) you need to use None as your default rather than True or False. This doesn't (yet) update help output, because I'm not quite sure how to do that cleanly.
(0) -30000 -10000 -3000 -1000 -300 -100 -96 +96 +100 +300 +1000 +3000 +10000 tip