Mon, 26 Jan 2015 15:52:46 -0500 test-revset: add tests for missing function output
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 15:52:46 -0500] rev 24220
test-revset: add tests for missing function output An upcoming change will slightly alter behavior here. Adding the test now so the output change stands out in the later changeset.
Mon, 26 Jan 2015 14:32:30 -0500 revset: use UnknownIdentifier where appropriate
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 14:32:30 -0500] rev 24219
revset: use UnknownIdentifier where appropriate
Mon, 26 Jan 2015 14:31:48 -0500 fileset: use UnknownIdentifier where appropriate
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 14:31:48 -0500] rev 24218
fileset: use UnknownIdentifier where appropriate
Mon, 26 Jan 2015 14:31:01 -0500 error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 14:31:01 -0500] rev 24217
error: add a new UnknownIdentifier error type This will be used by the revset and fileset code to communicate more specific errors to higher levels so that we might be able to offer suggestions about what function might have been similar.
Mon, 24 Nov 2014 16:42:49 -0500 log: display closing-branch nodes as "_" (BC)
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Mon, 24 Nov 2014 16:42:49 -0500] rev 24216
log: display closing-branch nodes as "_" (BC) In plain `hg log` there is no indication that a commit closes a branch. You can use hg log --debug, but this is too verbose. A simple idea copied from thg and other graphical viewers is to display the node for a closing-branch commit as a horizontal line. I think this technically is a BC if we consider the graphlog to be part of the stdout API, but I really can't imagine who the hell is parsing the graphlog to determine information about commits.
Fri, 06 Mar 2015 17:00:42 -0600 manifest: move pure parsing code out of pure
Matt Mackall <mpm@selenic.com> [Fri, 06 Mar 2015 17:00:42 -0600] rev 24215
manifest: move pure parsing code out of pure This lets us transition more smoothly.
Tue, 13 Jan 2015 14:31:38 -0800 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com> [Tue, 13 Jan 2015 14:31:38 -0800] rev 24214
manifest.c: new extension code to lazily parse manifests This lets us iterate manifests in order, but do a _lot_ less work in the common case when we only care about a few manifest entries. Many thanks to Mike Edgar for reviewing this in advance of it going out to the list, which caught many things I missed. This version of the patch includes C89 fixes from Sean Farley and many correctness/efficiency cleanups from Martin von Zweigbergk. Thanks to both!
Thu, 05 Mar 2015 22:16:28 -0800 workingctx: use normal dirs() instead of dirstate.dirs()
Durham Goode <durham@fb.com> [Thu, 05 Mar 2015 22:16:28 -0800] rev 24213
workingctx: use normal dirs() instead of dirstate.dirs() The workingctx class was using dirstate.dirs() as it's implementation. The sparse extension maintains a pruned down version of the dirstate, so this resulted in the workingctx reporting an incorrect listing of directories during merge calculations (it was detecting directory renames when it shouldn't have). The fix is to use the default implementation, which uses workingctx._manifest, which unions the manifest with the dirstate to produce the correct overall picture. This also produces more accurate output since it will no longer return directories that have been entirely deleted in the dirstate. Tests will be added to the sparse extension to detect regressions for this.
Thu, 05 Mar 2015 15:52:07 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 05 Mar 2015 15:52:07 -0600] rev 24212
merge with stable
Tue, 03 Mar 2015 21:31:16 -0500 subrepo: only fetch unknown files from git when explicitly requested
Matt Harbison <matt_harbison@yahoo.com> [Tue, 03 Mar 2015 21:31:16 -0500] rev 24211
subrepo: only fetch unknown files from git when explicitly requested
Tue, 03 Mar 2015 21:24:16 -0500 subrepo: always return scmutil.status() from gitsubrepo.status()
Matt Harbison <matt_harbison@yahoo.com> [Tue, 03 Mar 2015 21:24:16 -0500] rev 24210
subrepo: always return scmutil.status() from gitsubrepo.status() This was accidentally left out of c95db3208a33.
Tue, 03 Mar 2015 21:17:29 -0500 subrepo: explicitly request clean and unknown files in status for git's add
Matt Harbison <matt_harbison@yahoo.com> [Tue, 03 Mar 2015 21:17:29 -0500] rev 24209
subrepo: explicitly request clean and unknown files in status for git's add No behavior changes here since gitsubrepo.status() doesn't currently populate clean, and ignores whether unknown files were actually requested. But this is in line with other calls to status, and should avoid future surprises.
Sun, 01 Mar 2015 18:35:29 -0500 largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com> [Sun, 01 Mar 2015 18:35:29 -0500] rev 24208
largefiles: handle logging from outside the repo It's probably possible to refactor so that the 'if m._cwd' check isn't necessary, but the False case is the typical case (i.e. run from the root of the repo), and simpler to read. An exact path to a largefile from outside the repo was previously ignored. match.rel('.hglf') will handle figuring out both the correct '../' length to the standin directory if inside the repo, or path/to/repo from outside, at the cost of a pconvert() to keep the patterns using '/' on Windows.
Sun, 01 Mar 2015 14:21:54 -0500 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com> [Sun, 01 Mar 2015 14:21:54 -0500] rev 24207
largefiles: don't prefix standin patterns with '.hglf' when logging When logging '.hglf/foo', the pattern list was being transformed from ['.hglf/foo'] into ['.hglf/foo', '.hglf/.hglf/foo']. Aside from the pathological case of somebody getting a directory named '.hglf' created inside the standing directory, the old code shouldn't have had any bad effects. (amended by mpm to sort patterns for test stability and not upset check-code)
Sat, 28 Feb 2015 23:42:38 -0500 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com> [Sat, 28 Feb 2015 23:42:38 -0500] rev 24206
largefiles: teach log to handle patterns Adding the standin to the patterns list was (possibly) harmless before, but was wrong, because the pattern list was already updated above that code. Now that patterns are handled, it was actually harmful. For example, in this test: $ hg log -G glob:**another* the adjusted pattern list would have been: ['glob:**another*', '.hglf/.', 'glob:.hglf/**another*'] which causes every largefile in the root to be matched. I'm not sure why 'glob:a*' picks up the rename of a -> b commit in test-log.t, but a simple 'a' doesn't. But it doesn't appear to be caused by the largefiles extension.
Thu, 05 Mar 2015 13:21:57 -0600 check-code: allow disabling msys path check
Matt Mackall <mpm@selenic.com> [Thu, 05 Mar 2015 13:21:57 -0600] rev 24205
check-code: allow disabling msys path check
Thu, 08 Jan 2015 23:05:45 +0900 revset: extend fullreposet to make "null" revision magically appears in set
Yuya Nishihara <yuya@tcha.org> [Thu, 08 Jan 2015 23:05:45 +0900] rev 24204
revset: extend fullreposet to make "null" revision magically appears in set As per fullreposet.__and__, it can omit the range check of rev. Therefore, "null" revision is accepted automagically. It seems this can fix many query results involving null symbol. Originally, the simplest "(null)" query did fail if there were hidden revisions. Tests are randomly chosen. fullreposet mimics the behavior of localrepo, where "null" revision is not listed but contained.
Sat, 10 Jan 2015 18:09:25 +0900 revset: duplicate spanset.__contains__ to fullreposet for modification
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jan 2015 18:09:25 +0900] rev 24203
revset: duplicate spanset.__contains__ to fullreposet for modification 1d7a2771aa36 says we should avoid function calls in __contains__, so super(fullreposet, self).__contains__(rev) is not an option. Actually the super call doubled the benchmark result of trivial query: revisions: 0) 678f53865c68 (tip when I wrote this patch) 1) rev == node.nullrev or super(fullreposet, self).__contains__(rev) revset #0: tip:0 0) wall 0.008441 comb 0.010000 user 0.010000 sys 0.000000 (best of 282) 1) wall 0.016152 comb 0.010000 user 0.010000 sys 0.000000 (best of 146)
Sat, 10 Jan 2015 14:49:50 +0900 revset: have all() filter out null revision
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jan 2015 14:49:50 +0900] rev 24202
revset: have all() filter out null revision I'm not sure if "all()" should filter out "null", but "all()" is stated as 'the same as "0:tip"' (except that it doesn't reorder the subset, I think.) This patch is intended to avoid exposing a fullreposet to graphmod.dagwalker(), which would result in strange drawing in future version: | o changeset: 0:f8035bb17114 | user: test | date: Thu Jan 01 00:00:00 1970 +0000 | summary: add a caused by: parents = sorted(set([p.rev() for p in ctx.parents() if p.rev() in revs])) We cannot add "and p.rev() != nullrev" here because revs may actually include "null" revision.
Sat, 10 Jan 2015 16:41:36 +0900 revset: drop unnecessary calls of getall() with empty argument
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jan 2015 16:41:36 +0900] rev 24201
revset: drop unnecessary calls of getall() with empty argument If x is None, getall(repo, subset, x) == subset.
Wed, 04 Mar 2015 21:47:07 +0900 graphlog: do not bypass commands.log so that -fr works
Yuya Nishihara <yuya@tcha.org> [Wed, 04 Mar 2015 21:47:07 +0900] rev 24200
graphlog: do not bypass commands.log so that -fr works Since 8b4b9ee6001a, opts dict can be modified in commands.log() before calling cmdutil.graphlog().
Wed, 21 Jan 2015 14:45:24 -0800 histedit: add a config allowing changing histedit rule line length limit
Mateusz Kwapich <mitrandir@fb.com> [Wed, 21 Jan 2015 14:45:24 -0800] rev 24199
histedit: add a config allowing changing histedit rule line length limit Since many users are using terminals wider than 80 chars there should be an option to have longer lines in histedit editor. Even if the summary line is shorter than 80 chars after adding action line prefixes (like "pick 7c2fd3b9020c") it doesn't fit there anymore. Setting it to for example 110 would be a nice option to have.
Fri, 06 Mar 2015 00:14:22 +0900 dirstate: make sure rootdir ends with directory separator (issue4557) stable
Yuya Nishihara <yuya@tcha.org> [Fri, 06 Mar 2015 00:14:22 +0900] rev 24198
dirstate: make sure rootdir ends with directory separator (issue4557) ntpath.join() of Python 2.7.9 does not work as expected if root is a UNC path to top of share. This patch doesn't take care of os.altsep, '/' on Windows, because root should be normalized by realpath().
Wed, 04 Mar 2015 17:24:12 +0100 i18n-de: fix a typo in the german translation stable
Alexander Becher <Alexander.Becher@RuD-Steuerungstechnik.De> [Wed, 04 Mar 2015 17:24:12 +0100] rev 24197
i18n-de: fix a typo in the german translation
Tue, 03 Mar 2015 17:28:05 -0600 histedit: fix style of new error message
Matt Mackall <mpm@selenic.com> [Tue, 03 Mar 2015 17:28:05 -0600] rev 24196
histedit: fix style of new error message - lowercase - no punctuation - brief - short node
Wed, 04 Feb 2015 15:17:13 -0500 Makefile: allow setting HGTESTFLAGS in shell environment for TESTFLAGS
Augie Fackler <augie@google.com> [Wed, 04 Feb 2015 15:17:13 -0500] rev 24195
Makefile: allow setting HGTESTFLAGS in shell environment for TESTFLAGS I keep wanting to run 'make tests', but I forget to set TESTFLAGS='-j 16' or whatever is reasonable for my machine. This lets me just set it once in my shell settings and forget it.
Wed, 04 Feb 2015 12:26:16 -0500 Makefile: introduce testpy-% target for testing with a specifc Python
Augie Fackler <augie@google.com> [Wed, 04 Feb 2015 12:26:16 -0500] rev 24194
Makefile: introduce testpy-% target for testing with a specifc Python This makes it easy to do 'make testpy-2.4.6 TESTFLAGS="-j 16"' and the Makefile will build Python if needed and then run tests (with -j 16) with the resulting Python. You can set the environment variable HGPYTHONS to a nice location on your machine to cache the Python builds globally. If that's not set, it builds them inside build/pythons.
Fri, 27 Feb 2015 17:35:07 -0500 extdiff: expand tildes and variables in paths to user-supplied diff programs
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 27 Feb 2015 17:35:07 -0500] rev 24193
extdiff: expand tildes and variables in paths to user-supplied diff programs
Sun, 22 Feb 2015 15:40:36 +0100 setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com> [Sun, 22 Feb 2015 15:40:36 +0100] rev 24192
setup.py: do not install c extensions on pypy These extensions are slower on pypy because pypy has a JIT compiler. And also, they often do not compile (it depends on the pypy configuration).
Mon, 02 Mar 2015 14:52:04 +0100 copyright: update to 2015
Jesus Cea <jcea@jcea.es> [Mon, 02 Mar 2015 14:52:04 +0100] rev 24191
copyright: update to 2015 Many files and translations have an outdated copyright date. Change that to the correct "2005-2015" dates.
Wed, 21 Jan 2015 22:09:32 -0500 changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com> [Wed, 21 Jan 2015 22:09:32 -0500] rev 24190
changegroup: emit full-replacement deltas if either revision is censored To ensure that exchanged deltas in the presence of censored revisions can always be applied to the recipient repository, the deltas must replace the entire base text. To make this restriction reasonably enforceable, the delta must do so with a single patch operation. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Fri, 06 Feb 2015 11:04:55 -0800 log: make -fr show complete history from the given revs
Durham Goode <durham@fb.com> [Fri, 06 Feb 2015 11:04:55 -0800] rev 24189
log: make -fr show complete history from the given revs Right now it's very obtuse to show the history of a particular rev (hg log -r 'reverse(::foo)'). This changes the -f option to make it follow history for the revs specified by -r. The current -f -r behavior is to limit the result of -r to only the commits that are ancestors of the current working copy. Changing this is a bit of a BC break, but the old behavior is A) rare, B) easy to emulate (& ::.), and C) currently undefined. The new behavior is frequently requested enough that I think the change is worth it.
Tue, 24 Feb 2015 14:12:13 +0100 util: accept "now, today, yesterday" for dates even the locale is not english
André Klitzing <aklitzing@gmail.com> [Tue, 24 Feb 2015 14:12:13 +0100] rev 24188
util: accept "now, today, yesterday" for dates even the locale is not english Hi there! Fixed date names are helpful for automated systems. So it is possible to use english date parameter even if the underlying system uses another locale. We have here a jenkins with build jobs on different slaves that will do some operations with "dates" parameter. Some systems uses English locale and some systems uses German locale. So we needed to configure the job to uses other date names. As this is really annoying to keep the systems locale in mind for some operations I looked into util.py. It would be helpful for automated systems if the "default English" date names would even usable on other locales. I attached a simple patch for this. Best regards André Klitzing
Fri, 27 Feb 2015 14:26:22 -0800 copies: only calculate 'addedinm[12]' sets once
Martin von Zweigbergk <martinvonz@google.com> [Fri, 27 Feb 2015 14:26:22 -0800] rev 24187
copies: only calculate 'addedinm[12]' sets once Pass the addedinm1 and addedinm2 instead of m1, m2, ma into _computenonoverlap() instead of calculating the sets twice.
Fri, 27 Feb 2015 14:03:01 -0800 copies: calculate 'bothnew' from manifestdict.filesnotin()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 27 Feb 2015 14:03:01 -0800] rev 24186
copies: calculate 'bothnew' from manifestdict.filesnotin() In the same spirit as the previous change, let's now calculate the 'bothnew' variable using manifestdict.filesnotin().5D
Fri, 27 Feb 2015 14:02:30 -0800 copies: replace _nonoverlap() by calls to manifestdict.filesnotin()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 27 Feb 2015 14:02:30 -0800] rev 24185
copies: replace _nonoverlap() by calls to manifestdict.filesnotin() Now that we have manifestdict.filesnotin(), we can write _nonoverlap() in terms of that method instead, enabling future speedups when filesnotin() gets optimized, and perhaps making the code a little clearer at the same time.
Fri, 27 Feb 2015 13:57:37 -0800 copies: move code into new manifestdict.filesnotin() method
Martin von Zweigbergk <martinvonz@google.com> [Fri, 27 Feb 2015 13:57:37 -0800] rev 24184
copies: move code into new manifestdict.filesnotin() method copies._computeforwardmissing() finds files in one context that is not in the other. Let's move this code into a new method on manifestdict, so m1.filesnotin(m2) can be optimized for various types of manifests (we expect more types of manifests soon).
Fri, 27 Feb 2015 23:30:42 -0500 subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com> [Fri, 27 Feb 2015 23:30:42 -0500] rev 24183
subrepo: warn when adding already tracked files in gitsubrepo This follows normal Mercurial rules, and the message is lifted from workingctx.add(). The file is printed with abs() to be consistent with how it is printed in workingctx, even though that is inconsistent with how added files are printed in verbose mode. Further, the 'already tracked' notifications come after all of the files that are added are printed, like in Mercurial. As a side effect, we now have the reject list to return to the caller, so that 'hg add' exits with the proper code. It looks like an abort occurs if git fails to add the file. Prior to touching 'snake.python' in the test, this was the result of attempting to add the file after a 'git rm': fatal: pathspec 'snake.python' did not match any files abort: git add error 128 in s (in subrepo s) I'm not sure what happens when git is a deep subrepo, but the 'in s' and 'in subrepo s' from @annotatesubrepoerror are redundant here. Maybe we should stat the files before invoking git to catch this case and print out the prettier hg message? The other thing missing from workingctx.add() is the call to scmutil.checkportable(), but that would need to borrow the parent's ui object.
Thu, 26 Feb 2015 15:53:54 -0500 subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com> [Thu, 26 Feb 2015 15:53:54 -0500] rev 24182
subrepo: don't exclude files in .hgignore when adding to git The previous test gave a false success because only an hg-ignored pattern was specified. Therefore match.files() was empty, and it fell back to the files unknown to git. The simplest fix is to always consider what is unknown to git, as well as anything specified explicitly. Files that are ignored by git can only be introduced by an explicit mention in match.files().
Wed, 14 Jan 2015 01:15:26 +0100 dirstate: clarify comment about leaving normal files undef if changed 'now'
Mads Kiilerich <madski@unity3d.com> [Wed, 14 Jan 2015 01:15:26 +0100] rev 24181
dirstate: clarify comment about leaving normal files undef if changed 'now' Clarify that they only are saved as undef if they were marked as normal and changed in the same second.
Sun, 18 Jan 2015 02:38:57 +0100 spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com> [Sun, 18 Jan 2015 02:38:57 +0100] rev 24180
spelling: fixes from proofreading of spell checker issues
Fri, 27 Feb 2015 21:42:58 +0100 merge-tools: configuration for Beyond Compare on OS X
Mads Kiilerich <madski@unity3d.com> [Fri, 27 Feb 2015 21:42:58 +0100] rev 24179
merge-tools: configuration for Beyond Compare on OS X Based on the Linux configuration entry.
Wed, 21 Jan 2015 00:02:17 +0100 convert: when converting from monotone, use the number 1 for close in extras
Mads Kiilerich <madski@unity3d.com> [Wed, 21 Jan 2015 00:02:17 +0100] rev 24178
convert: when converting from monotone, use the number 1 for close in extras Monotone used '1' for close while core Mercurial use 1. Now, for consistency, use the same value everywhere. It will be stored as a string anyway and the change will not make any real difference. (The actual value of 'close' doesn't matter as long as extras has such a key.)
Mon, 02 Mar 2015 15:07:18 -0800 hgweb: extract changeset template mapping generation to own function
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 02 Mar 2015 15:07:18 -0800] rev 24177
hgweb: extract changeset template mapping generation to own function Similar in spirit to 513d47905114, I want to write an extension to make available extra template keywords so hgweb templates can include extra data. To do this today requires monkeypatching the templater, which I think is the wrong place to perform this modification. This patch extracts the creation of the templater arguments to a standalone function - one that can be monkeypatched by extensions. I would very much like for extensions to be able to inject extra templater parameters into *any* template. However, I'm not sure the best way to facilitate this, as hgweb commands invoke the templater before returning and we want the extensions to have access to rich data structures like the context instances. We need cooperation inside hgweb command functions. The use case screams for something like internal-only "hooks." This is exactly what my (rejected) "events" patch series provided. Perhaps that feature should be reconsidered...
Mon, 02 Mar 2015 17:32:37 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 17:32:37 -0600] rev 24176
merge with stable
Wed, 25 Feb 2015 18:12:01 -0500 revrange: don't parse revset aliases as hash prefixes (issue4553)
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 25 Feb 2015 18:12:01 -0500] rev 24175
revrange: don't parse revset aliases as hash prefixes (issue4553) If a user has a revsetalias defined, it is their explicit wish for this alias to be parsed as a revset and nothing else. Although the case of the alias being short enough and only contain the letters a-f is probably kind of rare, it may still happen.
Tue, 24 Feb 2015 08:49:22 +0100 subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com> [Tue, 24 Feb 2015 08:49:22 +0100] rev 24174
subrepos: support adding files in git subrepos This support includes correct matching, so includes, excludes and patterns are all supported.
Sun, 15 Feb 2015 17:29:10 -0500 subrepo: return only the manifest keys from hgsubrepo.files()
Matt Harbison <matt_harbison@yahoo.com> [Sun, 15 Feb 2015 17:29:10 -0500] rev 24173
subrepo: return only the manifest keys from hgsubrepo.files() This is in line with the other subrepo classes (i.e. only the filenames are returned). Archive iterates over the manifest keys, and since subrepo archive() uses this method, it does too now. This will allow largefiles to override its manifest keys to present the largefiles instead of the standins. Once in place, we shouldn't need the copy/paste overrides of archive and subrepo archive in largefiles, that don't quite behave like the core methods they are overriding.
Sun, 15 Feb 2015 17:21:48 -0500 archive: change the default prefix to '' from None
Matt Harbison <matt_harbison@yahoo.com> [Sun, 15 Feb 2015 17:21:48 -0500] rev 24172
archive: change the default prefix to '' from None All current callers supply some sort of prefix, so the issue was hidden. But if no parameter was specified, a crash occurred in the write() closure when concatenating 'prefix' and 'name'.
Wed, 25 Feb 2015 11:39:14 -0800 debugsetparent: document one common caveat specifically
Martin von Zweigbergk <martinvonz@google.com> [Wed, 25 Feb 2015 11:39:14 -0800] rev 24171
debugsetparent: document one common caveat specifically After calling debugsetparent, it's quite common that status is incorrect. The command's help text already says that it should be used with care, but let's describe this caveat explicitly since it's probably the most common one.
Fri, 20 Feb 2015 13:55:01 -0800 repair: setup hookargs when processing bundle2s
Eric Sumner <ericsumner@fb.com> [Fri, 20 Feb 2015 13:55:01 -0800] rev 24170
repair: setup hookargs when processing bundle2s addchangegroup() modifies its behavior based on the transaction source. This is incorrect for bundle2 repair files, causing rebases to abort when this option is enabled. This diff specifies the source type in the way recommended by comments in bundle2.py and adds a test to ensure that rebases with the experimental option work successfully.
Mon, 02 Mar 2015 19:01:00 +0000 amend: check for directory renames for both merge parents (issue4516) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 02 Mar 2015 19:01:00 +0000] rev 24169
amend: check for directory renames for both merge parents (issue4516) Before this change, amending a merge would lose the rename information for file adding in the second parents and implicitly renamed into a new directory. In case of the merge, we also look for directory rename data from the second parent. This seems to fix the bug and does not show other issues from the test suite.
Mon, 02 Mar 2015 10:55:19 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 10:55:19 -0600] rev 24168
merge with stable
Mon, 02 Mar 2015 23:37:55 +0900 largefiles: avoid infinite recursive call of openlfdirstate in overriderevert
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 02 Mar 2015 23:37:55 +0900] rev 24167
largefiles: avoid infinite recursive call of openlfdirstate in overriderevert When there isn't lfdirstate file in cases below, "openlfdirstate()" call "scmutil.match()" indirectly to build lfdirstate up. - subrepos disabling largefiles locally - lfdirstate file is missed accidentally This causes infinite recursive call of "openlfdirstate()" in "overriderevert()" (introduced by 79c2c29c71ae), because "openlfdirstate()" is invoked from the function overriding "scmutil.match()" itself. To avoid infinite recursive call of "openlfdirstate()" in "overriderevert()" in such cases, this patch passes "create=False" argument to "openlfdirstate()". "create=False" forcibly makes "openlfdirstate()" avoid code path to build lfdirstate up.
Mon, 02 Mar 2015 10:29:45 -0600 Added signature for changeset 07a92bbd02e5 stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 10:29:45 -0600] rev 24166
Added signature for changeset 07a92bbd02e5
Mon, 02 Mar 2015 10:29:41 -0600 Added tag 3.3.2 for changeset 07a92bbd02e5 stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 10:29:41 -0600] rev 24165
Added tag 3.3.2 for changeset 07a92bbd02e5
Mon, 02 Mar 2015 10:31:22 -0500 transaction: really disable hardlink backups (issue4546) stable 3.3.2
Matt Harbison <matt_harbison@yahoo.com> [Mon, 02 Mar 2015 10:31:22 -0500] rev 24164
transaction: really disable hardlink backups (issue4546)
Mon, 02 Mar 2015 01:20:14 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 01:20:14 -0600] rev 24163
merge with stable
Sat, 28 Feb 2015 01:12:54 -0500 test-obsolete: use 'log -T {node}' instead of 'id --debug -i' to lookup hash
Matt Harbison <matt_harbison@yahoo.com> [Sat, 28 Feb 2015 01:12:54 -0500] rev 24162
test-obsolete: use 'log -T {node}' instead of 'id --debug -i' to lookup hash I ran into a case when adding a test where there were cryptic hg command line errors. I eventually traced it back to 'hg id' printing debug messages before the hash: invalid branchheads cache (served): tip differs <hash> This method should eliminate any other output except the node.
Mon, 02 Mar 2015 01:06:31 -0600 Added signature for changeset 5b4ed033390b stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 01:06:31 -0600] rev 24161
Added signature for changeset 5b4ed033390b
Mon, 02 Mar 2015 01:06:27 -0600 Added tag 3.3.1 for changeset 5b4ed033390b stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 01:06:27 -0600] rev 24160
Added tag 3.3.1 for changeset 5b4ed033390b
Fri, 06 Feb 2015 02:52:10 +0100 revisionbranchcache: fall back to slow path if starting readonly (issue4531) stable 3.3.1
Mads Kiilerich <madski@unity3d.com> [Fri, 06 Feb 2015 02:52:10 +0100] rev 24159
revisionbranchcache: fall back to slow path if starting readonly (issue4531) Transitioning to Mercurial versions with revision branch cache could be slow as long as all operations were readonly (revset queries) and the cache would be populated but not written back. Instead, fall back to using the consistently slow path when readonly and the cache doesn't exist yet. That avoids the overhead of populating the cache without writing it back. If not readonly, it will still populate all missing entries initially. That avoids repeated writing of the cache file with small updates, and it also makes sure a fully populated cache available for the readonly operations.
Thu, 26 Feb 2015 06:03:39 +0900 largefiles: access to specific fields only if largefiles enabled (issue4547) stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 Feb 2015 06:03:39 +0900] rev 24158
largefiles: access to specific fields only if largefiles enabled (issue4547) Even if largefiles extension is enabled in a repository, "repo" object, which isn't "largefiles.reposetup()"-ed, is passed to overridden functions in the cases below unexpectedly, because extensions are enabled for each repositories strictly. (1) clone without -U: (2) pull with -U: (3) pull with --rebase: combination of "enabled@src", "disabled@dst" and "not-required@src" cause this situation. largefiles requirement @src @dst @src result -------- -------- --------------- -------------------- enabled disabled not-required aborted unexpectedly required requirement error (intentional) -------- -------- --------------- -------------------- enabled enabled * success -------- -------- --------------- -------------------- disabled enabled * success (only for "pull") -------- -------- --------------- -------------------- disabled disabled not-required success required requirement error (intentional) -------- -------- --------------- -------------------- (4) update/revert with a subrepo disabling largefiles In these cases, overridden functions cause accessing to largefiles specific fields of not "largefiles.reposetup()"-ed "repo" object, and execution is aborted. - (1), (2), (4) cause accessing to "_lfstatuswriters" in "getstatuswriter()" invoked via "updatelfiles()" - (3) causes accessing to "_lfcommithooks" in "overriderebase()" For safe accessing to these fields, this patch examines whether passed "repo" object is "largefiles.reposetup()"-ed or not before accessing to them. This patch chooses examining existence of newly introduced "_largefilesenabled" instead of "_lfcommithooks" and "_lfstatuswriters" directly, because the former is better name for the generic "largefiles is enabled in this repo" mark than the latter. In the future, all other overridden functions should avoid largefiles specific processing for efficiency, and "_largefilesenabled" is better also for such purpose. BTW, "lfstatus" can't be used for such purpose, because some code paths set it forcibly regardless of existence of it in specified "repo" object.
Wed, 18 Feb 2015 22:17:35 +0900 templatekw: fix {join(bookmarks, sep)} to always show associated bookmarks stable
Yuya Nishihara <yuya@tcha.org> [Wed, 18 Feb 2015 22:17:35 +0900] rev 24157
templatekw: fix {join(bookmarks, sep)} to always show associated bookmarks The default joinfmt, "x.values()[0]", can't be used here because it picks either 'bookmark' or 'current' randomly. I got wrong result with PYTHONHASHSEED=1 on my amd64 machine.
Wed, 18 Feb 2015 22:10:17 +0900 templatekw: inline showlist() into showbookmarks() stable
Yuya Nishihara <yuya@tcha.org> [Wed, 18 Feb 2015 22:10:17 +0900] rev 24156
templatekw: inline showlist() into showbookmarks() showlist() is the helper to build _hybrid object from a trivial list. It can't be applied if each value has more than one items, 'bookmark' and 'current' in this case. This change is necessary to fix random failure of "{join(bookmarks, sep)}".
Mon, 02 Mar 2015 00:12:29 -0600 transaction: disable hardlink backups (issue4546) stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Mar 2015 00:12:29 -0600] rev 24155
transaction: disable hardlink backups (issue4546) Causing troubles, simplest fix.
Sun, 01 Mar 2015 23:20:02 -0600 repoview: invalidate cached changelog if _delayed changes (issue4549) stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Mar 2015 23:20:02 -0600] rev 24154
repoview: invalidate cached changelog if _delayed changes (issue4549) Starting with 2d54aa5397cd, when a clone reached the checkout stage, the cached changelog in the filtered view was still seeing the _delayed flag, even though the changelog had already been finalized.
Thu, 26 Feb 2015 10:23:04 -0800 test: make test-extdiff resilient to */gnubin/echo stable
Sean Farley <sean.michael.farley@gmail.com> [Thu, 26 Feb 2015 10:23:04 -0800] rev 24153
test: make test-extdiff resilient to */gnubin/echo My Mac test machine has 'echo' in '/opt/local/libexec/gnubin/echo' since, well, GNU is not BSD. Also, I feel it need to be said about using regexes: Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
Thu, 26 Feb 2015 23:30:33 +0900 dispatch: work around UnicodeDecodeError caused by SSLError of Python 2.7.9 stable
Yuya Nishihara <yuya@tcha.org> [Thu, 26 Feb 2015 23:30:33 +0900] rev 24152
dispatch: work around UnicodeDecodeError caused by SSLError of Python 2.7.9 SSLError of Python 2.7.9 may keep error message in unicode. It will be wrapped by URLError(reason) at KeepAliveHandler.do_open, so inst.reason can be a unicode. https://hg.python.org/cpython/file/v2.7.9/Modules/_ssl.c#l329
Thu, 05 Feb 2015 14:45:49 +0900 revset: mask specific names for named() predicate stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 05 Feb 2015 14:45:49 +0900] rev 24151
revset: mask specific names for named() predicate Before this patch, revset predicate "tag()" and "named('tags')" differ from each other, because the former doesn't include "tip" but the latter does. For equivalence, "named('tags')" shouldn't include the revision corresponded to "tip". But just removing "tip" from the "tags" namespace causes breaking backward compatibility, even though "tip" itself is planned to be eliminated, as mentioned below. http://selenic.com/pipermail/mercurial-devel/2015-February/066157.html To mask specific names ("tip" in this case) for "named()" predicate, this patch introduces "deprecated" into "namespaces", and makes "named()" predicate examine whether each names are masked by the namespace, to which they belong. "named()" will really work correctly after 3.3.1 (see 873eb5db89c8 for detail), and fixing this on STABLE before 3.3.1 can prevent initial users of "named()" from expecting "named('tags')" to include "tip". It is reason why this patch is posted for STABLE, even though problem itself isn't so serious. This may have to be flagged as "(BC)", if applied on DEFAULT.
Sun, 01 Mar 2015 00:18:43 -0300 i18n-pt_BR: synchronized with 756c5c8331b0 stable
Wagner Bruna <wbruna@yahoo.com> [Sun, 01 Mar 2015 00:18:43 -0300] rev 24150
i18n-pt_BR: synchronized with 756c5c8331b0
Sun, 01 Mar 2015 01:28:05 +0900 i18n-ja: synchronized with 756c5c8331b0 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 01 Mar 2015 01:28:05 +0900] rev 24149
i18n-ja: synchronized with 756c5c8331b0
Fri, 27 Feb 2015 17:46:03 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 27 Feb 2015 17:46:03 -0600] rev 24148
merge with stable
Tue, 24 Feb 2015 09:08:54 -0800 manifest: rename 'mf', 'map', and 'mapping' to 'm'
Martin von Zweigbergk <martinvonz@google.com> [Tue, 24 Feb 2015 09:08:54 -0800] rev 24147
manifest: rename 'mf', 'map', and 'mapping' to 'm' We mostly call manifest variables 'm', so let's use that in manifest.py too. This makes it clearer that the variables do, in fact, contain manifestsdict instances and never a plain dict.
Mon, 23 Feb 2015 13:41:02 -0800 manifest: make copy logic local to copy()
Martin von Zweigbergk <martinvonz@google.com> [Mon, 23 Feb 2015 13:41:02 -0800] rev 24146
manifest: make copy logic local to copy() The optional arguments to the manfifestdict constructor are only used by copy(), so assign the fields from that method instead so it's clear that the arguments are not used for anything else.
Sat, 21 Feb 2015 00:40:18 -0500 extensions: indicate loaded for an immediately called afterload callback
Matt Harbison <matt_harbison@yahoo.com> [Sat, 21 Feb 2015 00:40:18 -0500] rev 24145
extensions: indicate loaded for an immediately called afterload callback Otherwise, there's no way to tell between the immediate callback when it is already loaded, and when the extension is not loaded at all.
Tue, 24 Feb 2015 00:08:04 -0800 tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Feb 2015 00:08:04 -0800] rev 24144
tests: add test showing tags cache drops filtered heads (issue4550) The tags cache can lose .hgtags filenode entries for filtered heads. Add a test demonstrating this (bad) behavior.
Tue, 24 Feb 2015 00:06:47 -0800 tags: write tags cache deterministically
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 24 Feb 2015 00:06:47 -0800] rev 24143
tags: write tags cache deterministically An upcoming test verifies content of the .hg/cache/tags file. During testing, inconsistent output was observed. This is the result of iterating over a dictionary. Throw a sorted() around tags entries to ensure .hg/cache/tags is written deterministically so test output is stable.
Thu, 22 Jan 2015 12:36:38 -0800 histedit: add --edit-plan option to histedit
Mateusz Kwapich <mitrandir@fb.com> [Thu, 22 Jan 2015 12:36:38 -0800] rev 24142
histedit: add --edit-plan option to histedit --edit-plan allows user to edit remaining histedit rules in the middle of histedit process
Thu, 22 Jan 2015 10:52:50 -0800 histedit: generalize makedesc
Mateusz Kwapich <mitrandir@fb.com> [Thu, 22 Jan 2015 10:52:50 -0800] rev 24141
histedit: generalize makedesc Allow makedesc to generate description for any action - not only pick. (to be used in histedit --edit-plan)
Mon, 23 Feb 2015 10:57:27 -0800 histedit: extract method ruleeditor
Mateusz Kwapich <mitrandir@fb.com> [Mon, 23 Feb 2015 10:57:27 -0800] rev 24140
histedit: extract method ruleeditor Extract functionality of editing histedit rules to separate method so we can reuse it in upcoming --edit-plan option.
Tue, 24 Feb 2015 11:37:07 -0500 churn: deprecate -t option in favour of -T
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 24 Feb 2015 11:37:07 -0500] rev 24139
churn: deprecate -t option in favour of -T We use -T consistently elsewhere to refer to the --template option. The old -t option is now renamed to --oldtemplate so that -t still works. This has the benign side effect of introducing and immediately deprecating a new long option. We also test with both -t and -T options.
Tue, 24 Feb 2015 10:55:24 +0100 pull: print "pulling from foo" before accessing the other repo
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 24 Feb 2015 10:55:24 +0100] rev 24138
pull: print "pulling from foo" before accessing the other repo 1. This is consistent with pushing. 2. This allows to see the URL of the other repo in case accessing the repo fails, e.g. wrong ssh path or issues with the https certificate, without using --debug or showconfig paths. Additionally add test for this in the context of ssh with a wrong path.
Wed, 18 Feb 2015 16:45:16 -0800 error.LookupError: rename 'message' property to something else
Siddharth Agarwal <sid0@fb.com> [Wed, 18 Feb 2015 16:45:16 -0800] rev 24137
error.LookupError: rename 'message' property to something else At least some installs of Python 2.6+ complain with: mercurial/error.py:26: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 This patch renames the property away from 'message' so that Python no longer complains.
Thu, 19 Feb 2015 19:32:06 +0800 hgweb: use introrev() for finding parents (issue4506)
Anton Shestakov <engored@ya.ru> [Thu, 19 Feb 2015 19:32:06 +0800] rev 24136
hgweb: use introrev() for finding parents (issue4506) The issue is titled "filtered revision 'XXX' (not in 'served' subset)" and that is the error message you sometimes get when trying to look at a file (/file or /annotate) in hgweb. For example: http://hg.intevation.org/mercurial/crew/file/90cf454edd70/mercurial/cmdutil.py This happens when a parent revision for a file is hidden, thus it is not 'served' and isn't accessible in hgweb by default. When hgweb tries to access such changeset, it produces the error and HTTP status code 404. Another detail is that the parents() function, that is used in multiple places in hgweb, sometimes returned changesets that were obsoleted by the current changeset for the file. For example, when using rebase with evolve and rebasing a divergent changeset that introduces a file on top of current branch. Or grafting a change and making the new grafted changeset obsolete the source (shown in the test case). The result is the same - the obsoleted changeset was mistakingly returned from parents(), even though it's not a parent and the only link to the new changeset is an obsoletion marker (and rebase/graft metadata? not sure it matters). The problem is fixed by using introrev() instead of linkrev() for finding parents. This prevents parents() function from returning unrelated obsolete changesets. The test case prepares a separate repo because (afaict) all other test cases never reuse file names, so there are no files that were changed in multiple changesets. So no previously available files have obsolete changesets in their history.
Sun, 08 Feb 2015 00:56:40 -0500 subrepo: drop unused pattern initialization in hgsubrepo revert
Matt Harbison <matt_harbison@yahoo.com> [Sun, 08 Feb 2015 00:56:40 -0500] rev 24135
subrepo: drop unused pattern initialization in hgsubrepo revert This passed an empty list to filerevert() if '--all' was specified, otherwise the set of modified files. But then filerevert() immediately switched this and reinitialized 'pats' to an empty list if '--all' was *not* specified.
Sat, 07 Feb 2015 21:47:28 -0500 revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com> [Sat, 07 Feb 2015 21:47:28 -0500] rev 24134
revert: display full subrepo output with --dry-run Since the point of --dry-run is to show what will happen, the output with and without it should agree. And since revert wasn't being called on subrepos with --dry-run before, revert in the subrepo had to be defanged in this case.
Sat, 07 Feb 2015 19:40:02 -0500 largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com> [Sat, 07 Feb 2015 19:40:02 -0500] rev 24133
largefiles: don't warn when reverting a forgotten largefile Previously, when a largefile is forgotten and then reverted, a warning was issued: $ hg revert -R subrepo subrepo/large.txt file not managed: subrepo/large.txt (glob) This was purely cosmetic as the file itself actually was reverted. The problem was even with all of the matcher patching, the largefile pattern given on the command line wasn't converted to a standin because the standin was neither in ctx nor wctx. This causes the named largefile to be added to the 'names' dict in cmdutil.revert() in the repo walk at line 2550. The warning was printed out when the 'names' dict is iterated, because the file was specified exactly. Since core revert recurses into subrepos and largefiles only overrides the revert method in commands.py, it doesn't work properly when reverting a subrepo. However, it still will recurse into the subrepo and call the installed matcher method, so lfdirstate is reopened for the current repo level to prevent any new problems.
Fri, 06 Feb 2015 20:39:20 -0500 subrepo: annotate addremove with @annotatesubrepoerror
Matt Harbison <matt_harbison@yahoo.com> [Fri, 06 Feb 2015 20:39:20 -0500] rev 24132
subrepo: annotate addremove with @annotatesubrepoerror
Tue, 17 Feb 2015 19:59:26 -0800 histedit: don't recreate state object
Durham Goode <durham@fb.com> [Tue, 17 Feb 2015 19:59:26 -0800] rev 24131
histedit: don't recreate state object Previously, the histedit state object was being recreated during continue/abort. This meant that the locks that were held on the original state object were not available to actions, which meant actions could not release the lock on the repository (like an 'exec' action would need to do). This affected our internal extension that added the 'exec' action.
Sat, 10 Jan 2015 21:37:42 +0800 hgweb: clearly outline <tr> block in paper/changeset.tmpl
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 21:37:42 +0800] rev 24130
hgweb: clearly outline <tr> block in paper/changeset.tmpl This particular <tr> block should use the style of its neighboring blocks, otherwise it's easy to think that the closing '</tr>' is missing.
Sat, 10 Jan 2015 19:58:28 +0800 hgweb: don't mix tabs and spaces in monoblue templates
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 19:58:28 +0800] rev 24129
hgweb: don't mix tabs and spaces in monoblue templates
Sat, 10 Jan 2015 19:43:07 +0800 hgweb: remove unneeded escaping in gitweb/map and monoblue/map
Anton Shestakov <engored@ya.ru> [Sat, 10 Jan 2015 19:43:07 +0800] rev 24128
hgweb: remove unneeded escaping in gitweb/map and monoblue/map Elements in map files work slightly different from regular python strings, so escaping single quotes is not necessary. It is also demonstrated by the very same lines: '(current diff)'. I should've made this in 9e1f4c65f5f5, but here we go.
Wed, 11 Feb 2015 13:59:13 +0900 resolve: port to generic templater
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Feb 2015 13:59:13 +0900] rev 24127
resolve: port to generic templater Test output changes because color labels are applied separately.
Wed, 11 Feb 2015 13:55:15 +0900 resolve: extract -l/--list operation from big loop
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Feb 2015 13:55:15 +0900] rev 24126
resolve: extract -l/--list operation from big loop This prepares for porting to generic templater. repo.wlock() and ms.commit() should be unnecessary for "resolve -l".
Wed, 11 Feb 2015 13:47:43 +0900 resolve: silence warning of unknown pats for -l/--list (BC)
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Feb 2015 13:47:43 +0900] rev 24125
resolve: silence warning of unknown pats for -l/--list (BC) It was introduced at 232de244ab6f to warn that "hg resolve" did nothing meaningful. The warning seems not good for "hg resolve -l" because it is rather like "hg status" or "hg files".
Mon, 09 Feb 2015 11:02:45 -0800 extensions: allow extending command synopsis and docstring
Ryan McElroy <rm@fb.com> [Mon, 09 Feb 2015 11:02:45 -0800] rev 24124
extensions: allow extending command synopsis and docstring Mercurial uses a synopsis string and the docstring of a command for the command's help output. Today there is no way for an extension that adds functionality to a command to extend either of these help strings. This patch enables appending to both the doctring and the synopsis, and adds a test for this functionality. Example usage is shown in the test and is also described in the docstring of extensions.wrapcommand().
Wed, 21 Jan 2015 17:11:37 -0500 revlog: _addrevision creates full-replace deltas based on censored revisions
Mike Edgar <adgar@google.com> [Wed, 21 Jan 2015 17:11:37 -0500] rev 24123
revlog: _addrevision creates full-replace deltas based on censored revisions A delta against a censored revision is either received through exchange and written blindly to a revlog, or it is created by the revlog itself. This change ensures the latter process creates deltas which fully replace all data in a censored base using a single patch operation. Recipients of a delta against a censored base will verify that the delta is in this full-replace format. Other recipients will use the delta as normal. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Fri, 06 Feb 2015 01:38:16 +0000 revlog: special case expanding full-replacement deltas received by exchange
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 01:38:16 +0000] rev 24122
revlog: special case expanding full-replacement deltas received by exchange When a delta received through exchange is added to a revlog, it will very often be expanded to a full text by applying the delta to its base. If that delta is of a particular form, we can avoid decoding the base revision. This avoids an exception if the base revision is censored. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Tue, 10 Feb 2015 16:17:15 -0800 test-merge-tools: fix flaky test by avoiding debugsetparents
Martin von Zweigbergk <martinvonz@google.com> [Tue, 10 Feb 2015 16:17:15 -0800] rev 24121
test-merge-tools: fix flaky test by avoiding debugsetparents debugsetparents is a debug command and does not provide the same guarantees as non-debug commands do. In particular, when the user sets a different parent, any clean files will remain clean in the dirstate even though the new parent might have a different version of the file (so it should appear modified compared to the new parent). Let's instead achieve the same effect by updating to the new parent and reverting the contents back to what they were. This fix can be tested by passing '--config debug.dirstate.delaywrite=2' to the 'hg update' command in the beforemerge().
Fri, 06 Feb 2015 00:55:29 +0000 revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 00:55:29 +0000] rev 24120
revlog: in addgroup, reject ill-formed deltas based on censored nodes To ensure interoperability when clones disagree about which file nodes are censored, a restriction is made on deltas based on censored nodes. Any such delta must replace the full text of the base in a single patch. If the recipient of a delta considers the base to be censored and the delta is not in the expected form, the recipient must reject it, as it can't know if the source has also censored the base. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Wed, 21 Jan 2015 16:35:09 -0500 mdiff: add helper for making deltas which replace the full text of a revision
Mike Edgar <adgar@google.com> [Wed, 21 Jan 2015 16:35:09 -0500] rev 24119
mdiff: add helper for making deltas which replace the full text of a revision This helper will be used initially for censor-aware delta generation. Deltas which replace the full contents of the base revision are guaranteed to apply correctly regardless of whether the delta recipient has censored the base. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Fri, 23 Jan 2015 17:01:39 -0500 revlog: add "iscensored()" to revlog public API
Mike Edgar <adgar@google.com> [Fri, 23 Jan 2015 17:01:39 -0500] rev 24118
revlog: add "iscensored()" to revlog public API The iscensored method will be used by the exchange layer to reject nonconforming deltas involving censored revisions (and to produce conforming deltas). For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
Fri, 06 Feb 2015 01:44:24 +0000 filelog: allow censored files to contain padding data
Mike Edgar <adgar@google.com> [Fri, 06 Feb 2015 01:44:24 +0000] rev 24117
filelog: allow censored files to contain padding data To ensure delta compatibility, when a revision is censored, it is padded to match the original data in size. The previous check does not allow for padding because it was added before padding was found to be a requirement. For more background and design of the censorship feature, see: mercurial.selenic.com/wiki/CensorPlan
Thu, 08 Jan 2015 23:43:15 +0900 revset: drop factory that promotes spanset to fullreposet
Yuya Nishihara <yuya@tcha.org> [Thu, 08 Jan 2015 23:43:15 +0900] rev 24116
revset: drop factory that promotes spanset to fullreposet All callers use fullreposet where appropriate. Backed out changeset fbae659543cf
Thu, 08 Jan 2015 23:46:54 +0900 revset: specify fullreposet without using spanset factory
Yuya Nishihara <yuya@tcha.org> [Thu, 08 Jan 2015 23:46:54 +0900] rev 24115
revset: specify fullreposet without using spanset factory The factory function will be removed because the subsequent patches will make fullreposet(repo) not fully compatible with spanset(repo).
Mon, 02 Feb 2015 22:21:07 +0900 revset: make match function initiate query from full set by default
Yuya Nishihara <yuya@tcha.org> [Mon, 02 Feb 2015 22:21:07 +0900] rev 24114
revset: make match function initiate query from full set by default This change is intended to avoid exposing the implementation detail to callers. I'm going to extend fullreposet to support "null" revision, so these mfunc calls will have to use fullreposet() instead of spanset().
Wed, 01 Oct 2014 20:26:33 -0400 localrepo: don't reintroduce pruned tag entries when tagging
Matt Harbison <matt_harbison@yahoo.com> [Wed, 01 Oct 2014 20:26:33 -0400] rev 24113
localrepo: don't reintroduce pruned tag entries when tagging If a commit and a followup tag commit are pruned, there are no references to it in any non obsolete version of .hgtags. Without this change however, the next time a tag is added to another branch, the obsolete references are appended in .hgtags before the new entries for the current tag command. The annotation to unfilter localrepo._tag() has been around since b3af182a1944. The log message for it mentions computing the tag cache though, so I'm not sure if this was misplaced? It looks like branchmap was aware of filtering then, and now tracks a cache per view.
Thu, 05 Feb 2015 13:10:07 -0800 histedit: switch state to store node instead of ctx
Mateusz Kwapich <mitrandir@fb.com> [Thu, 05 Feb 2015 13:10:07 -0800] rev 24112
histedit: switch state to store node instead of ctx Currently, if the node no longer exists, the state object fails to load and pukes with an exception. Changing the state object to only store the node allows callers to handle these cases. For instance, in bootstrapcontinue we can now detect that the node doesn't exist and exit gracefully. The alternative is to have the state object store something like None when the node doesn't exist, but then outside callers won't be able to access the old node for recovery (unless we store both the node and the ctx, but why bother). More importantly it allows us to detect this case when doing hg histedit --abort. Currently this situation results in both --continue and --abort being broken and the user has to rm .hg/histedit-state to unwedge their repo. (description by Durham Goode)
Fri, 30 Jan 2015 16:47:35 -0800 histedit: don't allow to strip nodes which are necessary to continue histedit
Mateusz Kwapich <mitrandir@fb.com> [Fri, 30 Jan 2015 16:47:35 -0800] rev 24111
histedit: don't allow to strip nodes which are necessary to continue histedit During histedit we don't want user to do any operation resulting in stripping nodes needed to continue history editing. This patch wraps the strip function to detect such situations.
Tue, 17 Feb 2015 23:20:55 -0800 subrepo: add tests for change/remove conflicts stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 17 Feb 2015 23:20:55 -0800] rev 24110
subrepo: add tests for change/remove conflicts There are currently no tests for change/remove conflicts of subrepos, and it's pretty broken. Add some tests demonstrating some of the breakages and fix the most obvious one (a KeyError when trying to look up a subrepo in the wrong context).
Thu, 12 Feb 2015 10:38:33 +0800 hgweb: recreate old DOM structure for css in monoblue style stable
Anton Shestakov <engored@ya.ru> [Thu, 12 Feb 2015 10:38:33 +0800] rev 24109
hgweb: recreate old DOM structure for css in monoblue style There's a "p.changeset-age span" css block in style-monoblue.css with quite a bit of rules, including position. They were all unused, since there weren't matching span element inside the p.changeset-age. The span was removed in b24e5a708fad (as it seemed meaningless at the time?) and since then relative changeset age text looked weird and broken. "age" class is used for calculating relative changeset age in javascript: all content of such element is replaced with human-friendly text (e.g. "yesterday"). So the new span gets the age class.
Wed, 11 Feb 2015 19:57:07 +0900 shellquote: fix missing quotes for empty string stable
Yuya Nishihara <yuya@tcha.org> [Wed, 11 Feb 2015 19:57:07 +0900] rev 24108
shellquote: fix missing quotes for empty string "hg kdiff3 -rREV" did not work because 1642eb429536 and 5edb387158a1 failed to handle empty argument.
Fri, 06 Feb 2015 16:09:43 -0800 trydiff: transpose 'if opts.git or losedatafn' with 'if f[12]'
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Feb 2015 16:09:43 -0800] rev 24107
trydiff: transpose 'if opts.git or losedatafn' with 'if f[12]' Perhaps it's more readable this way...
Thu, 22 Jan 2015 23:29:00 -0800 trydiff: extract function that generates filename pairs
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:29:00 -0800] rev 24106
trydiff: extract function that generates filename pairs The code that identifies copies/renames, as well as the filenames before and after, is now isolated and we can extract it to a function so it can be overridden by extensions (in particular the narrow clone extension).
Thu, 22 Jan 2015 23:18:43 -0800 trydiff: read file data in only one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:18:43 -0800] rev 24105
trydiff: read file data in only one place This moves getfilectx() out of the initial block in the loop, leaving that block to be only about finding pairs of filenames in ctx1 and ctx2 to diff.
Thu, 22 Jan 2015 23:13:48 -0800 trydiff: set filename variables to None even when not opts.git or losedatafn
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:13:48 -0800] rev 24104
trydiff: set filename variables to None even when not opts.git or losedatafn There is not much left of the first block "if opts.git or losedatafn" block now. The next patch will move the call to getfilectx() out of that block. We will then be using the defined-ness of 'f1' to tell whether the file existed in ctx1 (and under what name). We will need this information whether or not opts.git or losedatafn was set, so just remove that guard. The only operation in the block that is not cheap is the call to getfilectx(), but that has an extra 'if opts.git' guard already. --ignore-space-change proves that only 'if opts.git or losedatafn:' was removed.
Thu, 22 Jan 2015 23:01:00 -0800 trydiff: read flags in one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 23:01:00 -0800] rev 24103
trydiff: read flags in one place Now that we can trust f1/f2 to indicate whether that side of the diff exists, we can move the calls to ctx.flag() to a single place.
Fri, 06 Feb 2015 15:21:56 -0800 trydiff: break 'if opts.git or losedatafn' into two
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Feb 2015 15:21:56 -0800] rev 24102
trydiff: break 'if opts.git or losedatafn' into two This moves the initialization 'binary' closer to its other assignment, but exists mostly to simplify future patches.
Thu, 22 Jan 2015 22:42:35 -0800 trydiff: make filenames None when they don't exist
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 22:42:35 -0800] rev 24101
trydiff: make filenames None when they don't exist f1 and f2 are currently set always set to some filename, even for added or deleted files. Let's instead set them to None to indicate that one side of the diff doesn't exist. This lets us use the filename variables instead of the content variables and simplify a bit since the empty string is not a valid filename. More importantly, it paves the way for further simplifications.
Tue, 10 Feb 2015 10:57:58 -0500 test-help: add test to demonstrate that 'hg help merge-tools' is sane
Augie Fackler <augie@google.com> [Tue, 10 Feb 2015 10:57:58 -0500] rev 24100
test-help: add test to demonstrate that 'hg help merge-tools' is sane
Mon, 09 Feb 2015 23:07:39 -0800 help.merge-tools: do not double document merge tools
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 09 Feb 2015 23:07:39 -0800] rev 24099
help.merge-tools: do not double document merge tools Merge tools were being double documented in help system output due to functions being defined under multiple names in the merge tools dictionary. Establish a new dictionary for just the tools to document and use it from the help system so we don't get double output. Double documentation likely plagues other auto-documented items as well. It might be a good idea to eventually compare function instances to filter out duplicate entries from dictionaries passed to ``makeitemsdoc``. However, without an easy way to break ties, this may result in some functions being advertised over their modern equivalents. This would be a noble patch series. But it isn't one this author is willing to tackle at this time.
Mon, 09 Feb 2015 14:59:04 -0800 help: teach topic symbols how to dedent
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 09 Feb 2015 14:59:04 -0800] rev 24098
help: teach topic symbols how to dedent When using docstrings for documenting symbols such as revsets, templates, or hgweb commands, documentation likely has leading whitespace corresponding to the indentation from the Python source file. Up until this point, the help system stripped all leading and trailing whitespace and replaced it with 2 spaces of leading whitespace. There were a few bad side-effects. First, sections could not be used in docstrings because they would be indented and the rst parser would fail to parse them as sections. Also, any rst elements that required indentation would lose their indentation, again causing them to be parsed and rendered incorrectly. In this patch, we teach the topic symbols system how to dedent text properly. I argue this mode should be enabled by default. However, I stopped short of changing that because it would cause a lot of documentation reformatting to occur. I'm not sure if people are relying on or wanting indentation. So, dedenting has only been turned on for hgweb symbols. This decision should be scrutinized.
Fri, 06 Feb 2015 22:25:40 -0800 webcommands: document "graph" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:25:40 -0800] rev 24097
webcommands: document "graph" web command
Fri, 06 Feb 2015 22:19:59 -0800 webcommands: document "archive" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:19:59 -0800] rev 24096
webcommands: document "archive" web command
Fri, 06 Feb 2015 22:11:54 -0800 webcommands: document "filelog" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:11:54 -0800] rev 24095
webcommands: document "filelog" web command
Fri, 06 Feb 2015 22:08:30 -0800 webcommands: document "annotate" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:08:30 -0800] rev 24094
webcommands: document "annotate" web command
Fri, 06 Feb 2015 22:06:44 -0800 webcommands: document "comparison" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:06:44 -0800] rev 24093
webcommands: document "comparison" web command
Fri, 06 Feb 2015 22:02:14 -0800 webcommands: document "filediff" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:02:14 -0800] rev 24092
webcommands: document "filediff" web command
Fri, 06 Feb 2015 21:51:52 -0800 webcommands: document "summary" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 21:51:52 -0800] rev 24091
webcommands: document "summary" web command
Fri, 06 Feb 2015 21:48:01 -0800 webcommands: document "manifest" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 21:48:01 -0800] rev 24090
webcommands: document "manifest" web command
Fri, 06 Feb 2015 21:39:15 -0800 webcommands: document "changelog" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 21:39:15 -0800] rev 24089
webcommands: document "changelog" web command
Fri, 06 Feb 2015 21:26:53 -0800 webcommands: document "file" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 21:26:53 -0800] rev 24088
webcommands: document "file" web command
Fri, 06 Feb 2015 21:13:03 -0800 webcommands: document "log" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 21:13:03 -0800] rev 24087
webcommands: document "log" web command
Fri, 06 Feb 2015 20:50:17 -0800 webcommands: document "shortlog" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:50:17 -0800] rev 24086
webcommands: document "shortlog" web command
Fri, 06 Feb 2015 20:48:22 -0800 webcommands: document "changeset" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:48:22 -0800] rev 24085
webcommands: document "changeset" web command
Fri, 06 Feb 2015 20:44:46 -0800 webcommands: document "tags" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:44:46 -0800] rev 24084
webcommands: document "tags" web command
Fri, 06 Feb 2015 20:43:54 -0800 webcommands: document "bookmarks" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:43:54 -0800] rev 24083
webcommands: document "bookmarks" web command
Fri, 06 Feb 2015 20:44:10 -0800 webcommands: document "branches" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:44:10 -0800] rev 24082
webcommands: document "branches" web command
Fri, 06 Feb 2015 20:41:08 -0800 webcommands: document "help" web command
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:41:08 -0800] rev 24081
webcommands: document "help" web command
Fri, 06 Feb 2015 20:27:56 -0800 help: add web commands to help documentation
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 20:27:56 -0800] rev 24080
help: add web commands to help documentation The capabilities and URL endpoints of the hgweb server can currently only be inferred by looking at links in `hg serve` output or by reading the source code. I've frequently found myself wanting to quickly see what URLs and capabilities are available. This patch teaches the help system how to display information about web commands and their URLs. Using a mechanism similar to revsets, templates, etc, we can now iterate over the docstrings of registered web command functions and display them in the help output. Unfortunately, web commands don't currently have docstrings, so the output is currently empty. This will be addressed in the following patches. I apologize for the patch bomb.
Fri, 06 Feb 2015 23:08:47 -0800 help.hgweb: add a section describing URLs and common parameters
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 23:08:47 -0800] rev 24079
help.hgweb: add a section describing URLs and common parameters The behavior of hgweb's URLs isn't documented anywhere inside Mercurial. Let's start to change that.
Fri, 06 Feb 2015 22:47:48 -0800 webcommands: move help import into help command handler
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:47:48 -0800] rev 24078
webcommands: move help import into help command handler A subsequent patch will introduce an import cycle between mercurial.help and mercurial.hgweb.webcommands. Break the cycle by moving the import of mercurial.help into the web command that actually needs it.
Fri, 06 Feb 2015 22:52:40 -0800 webcommands: define a dict of available commands
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 22:52:40 -0800] rev 24077
webcommands: define a dict of available commands This will be used to hook web commands up to the help system. It also makes web commands work similarly as CLI commands.
Fri, 06 Feb 2015 19:06:17 -0800 webcommands: define web commands using a decorator
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 19:06:17 -0800] rev 24076
webcommands: define web commands using a decorator Other parts of Mercurial have evolved to use decorators to declare commands or handlers. This patch gives the same treatment to web commands.
Fri, 06 Feb 2015 16:33:05 -0800 run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 16:33:05 -0800] rev 24075
run-tests: ensure install directories exist As part of the transition to setuptools, it was discovered that setuptools doesn't create install directories for you where distutils apparently did. This was causing run-tests.py to fail when creating the temporary hg install. We work around this problem by creating the install directories before running setup.py.
Fri, 06 Feb 2015 16:15:02 -0800 run-tests: avoid printing extra newlines from install log
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 16:15:02 -0800] rev 24074
run-tests: avoid printing extra newlines from install log If an installation error occurs, we print the install log. Before, output had extra newlines because we were using "print" on data that was already newline terminated.
Fri, 06 Feb 2015 11:27:25 -0800 bundlerepo: basic bundle2 support
Eric Sumner <ericsumner@fb.com> [Fri, 06 Feb 2015 11:27:25 -0800] rev 24073
bundlerepo: basic bundle2 support For bundlerepo to work with bundle2 files, we need to find the part that contains the bundle's changegroup data and work with that instead of the entire bundle. Future work can add separate processing for other bundle2 parts.
Thu, 05 Feb 2015 16:03:26 -0800 bundlerepo: keep track of the original bundle object
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 16:03:26 -0800] rev 24072
bundlerepo: keep track of the original bundle object Bundlerepo should always close() the object that it receives from exchange.readbundle(). When bundle2 support is added in a later diff, self.bundle will be overwritten to be the changegroup part instead of the entire bundle unpacker.
Thu, 05 Feb 2015 15:56:50 -0800 bundle2.unbundle20: add compressed() method
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 15:56:50 -0800] rev 24071
bundle2.unbundle20: add compressed() method Bundlerepo uses the compressed() method to determine whether it should write an uncompressed temporary file. Since we don't support compressed bundle2 files at the moment, make this method return true.
Thu, 05 Feb 2015 15:52:57 -0800 bundle2.unpackermixin: default value for seek() whence parameter
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 15:52:57 -0800] rev 24070
bundle2.unpackermixin: default value for seek() whence parameter The contract for seek() includes seeking to an offset from the beginning of the file when whence is omitted; put this implementation in compliance.
Fri, 06 Feb 2015 23:40:46 +0100 windows: adjust doc string and comments of posixfile()
Adrian Buehlmann <adrian@cadifra.com> [Fri, 06 Feb 2015 23:40:46 +0100] rev 24069
windows: adjust doc string and comments of posixfile() The doc string of osutil.posixfile includes (line 611): "On error, this function may raise either a WindowsError or an IOError." which is most likely correct, but does not fit for this function here anymore, as we do fold WindowsError to IOError here specifically. And this function is now a bit more than just an exception-wrapper, as it has been expanded to additionally sanitize the unloved seek/tell behavior of Windows. (Self-disclosure: This patch is entirely untested at the time of its publication, as I'm currently not using this version myself. I send it in hopes that it will reduce potential future confusion. CC-ing Matt Harbison)
Wed, 04 Feb 2015 14:11:45 -0800 color: support a different color mode when the pager is active
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 04 Feb 2015 14:11:45 -0800] rev 24068
color: support a different color mode when the pager is active MSYS on Windows has a terminal that supports the "win32" color mode (which "auto" properly detects for us). However, a popularily configured pager in that environment (GNU less) only supports the "ansi" color mode. This patch teaches color about a new config option: pagermode. It behaves like "mode" but is only consulted when the pager is active for the current command. MSYS users can now set "pagermode = ansi" and get a colorful experience that just works. Previously, MSYS users would have to live without color when using GNU less as the pager, would have to manually configure the pager to attend every command, or would have gibberish if "ansi" was used without the pager.
Fri, 06 Feb 2015 12:09:09 -0800 pager: ensure wrapped dispatch._runcommand runs before color's
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 12:09:09 -0800] rev 24067
pager: ensure wrapped dispatch._runcommand runs before color's An upcoming patch will teach color to potentially act differently if the pager is active. Since both extensions wrap the same function (dispatch._runcommand) to change behavior, we must guarantee that pager's wrapped function runs before color's so color may read the breadcrumb left by pager.
Fri, 06 Feb 2015 12:07:56 -0800 pager: set an attribute on ui indicating that a pager is active
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 12:07:56 -0800] rev 24066
pager: set an attribute on ui indicating that a pager is active A subsequent patch will teach the color extension to do different things depending on whether a pager is active. This patch leaves a breadcrumb on the ui instance to allow it do that that.
Fri, 06 Feb 2015 12:07:32 -0800 extensions: support callbacks after another extension loads
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 06 Feb 2015 12:07:32 -0800] rev 24065
extensions: support callbacks after another extension loads An upcoming patch will introduce a dependency between the color and pager extensions. To prepare for this, we teach extensions how to register callbacks that can execute when another extension loads. This patch is based on code provided by Matt Mackall. But significant parts have changed (such as the ability to register multiple callbacks and the change in behavior to always call a callback). I believe that always firing the callback is a good practice. I think the common use for this feature will be for extensions to say "run this one-time setup code, after this other extension if possible." Always running the callback will facilitate this.
Fri, 06 Feb 2015 21:53:39 +0900 log: fix --follow null parent not to include revision 0
Yuya Nishihara <yuya@tcha.org> [Fri, 06 Feb 2015 21:53:39 +0900] rev 24064
log: fix --follow null parent not to include revision 0 If p1 is null, ':.' is translated as '0:null'. But rangeset can't handle null, only revision 0 was visible. Because 'null' should not be listed implicitly, "log --follow" (without -r) should be empty if p1 is null. Test of "hg grep -f" is added for cmdutil.walkchangerevs().
Fri, 06 Feb 2015 00:22:20 +0900 cmdutil: have walkchangerevs utilize common function to build revs
Yuya Nishihara <yuya@tcha.org> [Fri, 06 Feb 2015 00:22:20 +0900] rev 24063
cmdutil: have walkchangerevs utilize common function to build revs
Fri, 06 Feb 2015 00:15:35 +0900 log: extract common part from getgraphlogrevs() and getlogrevs()
Yuya Nishihara <yuya@tcha.org> [Fri, 06 Feb 2015 00:15:35 +0900] rev 24062
log: extract common part from getgraphlogrevs() and getlogrevs()
Fri, 06 Feb 2015 00:06:47 +0900 graphlog: remove useless check for empty repo when --follow is specified
Yuya Nishihara <yuya@tcha.org> [Fri, 06 Feb 2015 00:06:47 +0900] rev 24061
graphlog: remove useless check for empty repo when --follow is specified This prepares for extracting common part from getgraphlogrevs() and getlogrevs(). getlogrevs() does not handle empty repo specially. When it was added at d74099ac2ac1, revs were build by old-style query, '.:0'. So I think the purpose of "len(repo) > 0" was to handle the case of . = null. Currently it isn't necessary for 'reverse(:.)', and it does not work if repo is not empty but p1 is null. $ hg up null $ hg glog --follow -T '{rev}:{node|short}\n' o 0:0a04b987be5a The subsequent patch will fix this problem, so drops the wrong version for now.
Thu, 05 Feb 2015 23:49:18 +0900 graphlog: move comment and flag denoting revs might be unsorted
Yuya Nishihara <yuya@tcha.org> [Thu, 05 Feb 2015 23:49:18 +0900] rev 24060
graphlog: move comment and flag denoting revs might be unsorted This prepares for extracting common part from getgraphlogrevs() and getlogrevs(). "possiblyunsorted" exists only in getgraphlogrevs().
Thu, 05 Feb 2015 23:14:44 +0900 graphlog: remove too early return from getgraphlogrevs() for empty repo
Yuya Nishihara <yuya@tcha.org> [Thu, 05 Feb 2015 23:14:44 +0900] rev 24059
graphlog: remove too early return from getgraphlogrevs() for empty repo Even if repository is empty, null revision should exist.
Thu, 22 Jan 2015 22:22:09 -0800 trydiff: call util.binary in only one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 22:22:09 -0800] rev 24058
trydiff: call util.binary in only one place It's practically free to call util.binary on empty or None content. By relying on that, we can replace the current four call sites by one.
Thu, 22 Jan 2015 21:35:57 -0800 trydiff: collect all lossiness checks in one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 21:35:57 -0800] rev 24057
trydiff: collect all lossiness checks in one place By having all the checks for lossiness in one place, it becomes much easier to get an overview of the conditions that lead to losedatafn() being called. It also makes it obvious that it can not be called multiple times for a single time (something that was rather tricky to determine before).
Thu, 22 Jan 2015 21:03:57 -0800 trydiff: replace 'binarydiff' variable by 'binary' variable
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 21:03:57 -0800] rev 24056
trydiff: replace 'binarydiff' variable by 'binary' variable It's not obvious, but every path in the 'if opts.git or losedatafn:' block will have checked whether the file is binary [1]. Let's assign the result of this check to a variable so we can simplify by checking 'binary and opts.git' in only one place instead of every place we currently assign to 'binarydiff'. [1] Except when deleting an empty file, but checking whether an empty string is binary is very cheap anyway.
Fri, 16 Jan 2015 15:09:21 -0800 trydiff: rename 'op' to make it more specific
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 15:09:21 -0800] rev 24055
trydiff: rename 'op' to make it more specific Rename the 'op' variable that can take values None/'copy'/'rename' to 'copyop' to make it a little more specific.
Fri, 06 Feb 2015 15:52:55 +0800 hgweb: replace implicit <tbody> with explicit <thead> where appropriate
Anton Shestakov <engored@ya.ru> [Fri, 06 Feb 2015 15:52:55 +0800] rev 24054
hgweb: replace implicit <tbody> with explicit <thead> where appropriate Some templates in paper style use <tbody> elements inside <table> to assign a class to "body" part of that table (in this case, to make rows striped). The problem is that the <tbody> is preceded by <tr> element, which browsers understand as an implicit start of table body, so the following exlicit <tbody> will actually be "nested", which is not valid. Since that first <tr> contains table headers, wrapping it in <thead> is both semantically correct and follows the advertised XHTML 1.1 doctype.
Sat, 31 Jan 2015 12:54:35 -0500 obsolete: drop the explicit seek to EOF after append mode open()
Matt Harbison <matt_harbison@yahoo.com> [Sat, 31 Jan 2015 12:54:35 -0500] rev 24053
obsolete: drop the explicit seek to EOF after append mode open() posixfile now handles this.
Sat, 31 Jan 2015 12:42:05 -0500 branchmap: backout 6bf93440a717
Matt Harbison <matt_harbison@yahoo.com> [Sat, 31 Jan 2015 12:42:05 -0500] rev 24052
branchmap: backout 6bf93440a717 This is no longer needed now that posixfile handles seeking to EOF when it opens a file in append mode.
Sat, 31 Jan 2015 12:39:44 -0500 windows: seek to the end of posixfile when opening in append mode
Matt Harbison <matt_harbison@yahoo.com> [Sat, 31 Jan 2015 12:39:44 -0500] rev 24051
windows: seek to the end of posixfile when opening in append mode The position is implementation defined when opening in append mode, and it seems like Linux sets it to EOF while Windows keeps it at zero. This has caused problems in the past when a file is opened and tell() is immediately called, such as 48c232873a54 and 6bf93440a717. Since the only caller of osutil.posixfile is this windows module, this seems like a better place to fix the issue than in osutil.c and pure.osutil.
Thu, 20 Nov 2014 12:15:12 -0800 context: use unfiltered repo for '.'
Martin von Zweigbergk <martinvonz@google.com> [Thu, 20 Nov 2014 12:15:12 -0800] rev 24050
context: use unfiltered repo for '.' There is no reason to read obsolescence markers when doing a plain 'hg status' without --rev. Use the unfiltered repo when initializing context._rev to speed things up. This speeds up 'hg status' from 1.342s to 0.080s on my repo with ~110k markers.
Thu, 05 Feb 2015 14:09:08 -0800 check-commit: check capitalization in summary lines
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 14:09:08 -0800] rev 24049
check-commit: check capitalization in summary lines At the moment, check-commit will complain about the topic being capitalized, but not the summary that comes after it. This diff corrects that deficiency.
Thu, 05 Feb 2015 10:57:45 -0800 bundle2: seek in part iterator
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 10:57:45 -0800] rev 24048
bundle2: seek in part iterator When iterating over bundle2 parts, add a seek to the iterator so that processing will continue normally even if the entire part isn't consumed.
Thu, 05 Feb 2015 10:56:05 -0800 bundle2: now that we have a seek implementation, use it
Eric Sumner <ericsumner@fb.com> [Thu, 05 Feb 2015 10:56:05 -0800] rev 24047
bundle2: now that we have a seek implementation, use it Replace bare part.read() calls with part.seek(0, 2) since the return value is being ignored. As this doesn't necessarily require building a string that contains the rest of the part, the potential exists to reduce the memory footprint of these operations.
Wed, 04 Feb 2015 22:25:35 -0800 obsolete: populate successors, precursors, children lazily
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Feb 2015 22:25:35 -0800] rev 24046
obsolete: populate successors, precursors, children lazily The precursors and children dictionaries are not used by many commands. By making them lazily populated, 'hg log -r @~10::@ >/dev/null' is sped up from 0.564s to 0.440s on my hg.hg repo with 73k markers. Also make successors lazily populated, mostly for consistency with the others.
Wed, 04 Feb 2015 22:40:48 -0800 obsolete: pass only new markers to _checkinvalidmarkers()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Feb 2015 22:40:48 -0800] rev 24045
obsolete: pass only new markers to _checkinvalidmarkers() We will soon delay populating precursors until we have to. To prepare for that, make _checkinvalidmarkers() scan for a nullid precursor in the list of new markers instead of the (currently) cheaper 'if nullid in precursors' check.
Tue, 20 Jan 2015 22:01:37 -0800 obsolete: extract helpers from _load()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 20 Jan 2015 22:01:37 -0800] rev 24044
obsolete: extract helpers from _load() In preparation for making the successors, precursors, and children dictionaries lazily populated, break up _load() into one function for adding markers to each dictionary.
Tue, 20 Jan 2015 17:38:42 -0800 test-gendoc: require gettext
Eric Sumner <ericsumner@fb.com> [Tue, 20 Jan 2015 17:38:42 -0800] rev 24043
test-gendoc: require gettext If the gettext utilities aren't installed, there is no way to make the translations. This causes the gettext client to fall back to the untranslated message, which triggers "** NOTHING TRANSLATED **" errors and a test failure.
Thu, 05 Feb 2015 20:34:30 +0800 hgweb: use css margin instead of empty <p> before diffstat table
Anton Shestakov <engored@ya.ru> [Thu, 05 Feb 2015 20:34:30 +0800] rev 24042
hgweb: use css margin instead of empty <p> before diffstat table The <p> elements were used to create an empty space between the diffstat link and the diffstat table, but they don't have any semantic meaning, so it is better to use css instead. Default margins for <p> elements can differ depending on the browser, but usually the margin is 1em (exceptions are IE 6 and 7 with 14pt, which is comparable). The css rule sets top margin to 1em. This change is a "better version" of 70cfa7e1611b, where <p> elements were simply properly closed.
Thu, 05 Feb 2015 19:24:35 +0800 hgweb: use css margin instead of empty <p> before <div class="atom-logo">
Anton Shestakov <engored@ya.ru> [Thu, 05 Feb 2015 19:24:35 +0800] rev 24041
hgweb: use css margin instead of empty <p> before <div class="atom-logo"> The <p> elements were used to create an empty space between the last menu item (i.e. "help") and the atom feed icon, but they don't have any semantic meaning, so it is better to use css instead. The css rule uses top margin of 10px, which is equal to the top margin of the menu blocks ("help", "changeset, browse", etc). Previously, with <p> elements, the margin wasn't set explicitly and was browser-dependent. This change is a "better version" of 70cfa7e1611b, where <p> elements were simply properly closed.
Mon, 26 Jan 2015 14:30:12 -0500 error: update docstring on ParseError
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 14:30:12 -0500] rev 24040
error: update docstring on ParseError It's now used by revsets and filesets.
Mon, 26 Jan 2015 14:50:36 -0500 dispatch: consolidate formatting of ParseErrors
Augie Fackler <augie@google.com> [Mon, 26 Jan 2015 14:50:36 -0500] rev 24039
dispatch: consolidate formatting of ParseErrors
Wed, 04 Feb 2015 13:57:35 -0800 error: store filename and message on LookupError for later
Martin von Zweigbergk <martinvonz@google.com> [Wed, 04 Feb 2015 13:57:35 -0800] rev 24038
error: store filename and message on LookupError for later It may be useful to be able to get to the failed path and the underlying error message when catching a LookupError, so let's make them accessible.
Wed, 14 Jan 2015 16:14:19 -0800 bundle2.unbundlepart: implement seek()
Eric Sumner <ericsumner@fb.com> [Wed, 14 Jan 2015 16:14:19 -0800] rev 24037
bundle2.unbundlepart: implement seek() This implements a seek() method for unbundlepart. This allows on-disk bundle2 parts to behave enough like files for bundlerepo to handle them. A future patch will add support for bundlerepo to read the bundle2 files that are written when the experimental.strip-bundle2-version config option is used.
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.
Fri, 23 Jan 2015 14:09:49 -0800 parsers: rewrite index_ancestors() in terms of index_commonancestorsheads()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 23 Jan 2015 14:09:49 -0800] rev 24004
parsers: rewrite index_ancestors() in terms of index_commonancestorsheads() The first 80% of index_ancestors() is identical to index_commonancestorsheads(), so just call that function instead.
Thu, 22 Jan 2015 11:09:34 -0500 filelog: remove unused _file method
Mike Edgar <adgar@google.com> [Thu, 22 Jan 2015 11:09:34 -0500] rev 24003
filelog: remove unused _file method
Mon, 26 Jan 2015 15:18:07 -0800 histedit: store full node hash in rules
Mateusz Kwapich <mitrandir@fb.com> [Mon, 26 Jan 2015 15:18:07 -0800] rev 24002
histedit: store full node hash in rules Previously histedit only stored the short version of the rule nodes in the state. This meant that later we couldn't resolve a rule node to its full form if the commit had been deleted from the repo. Let's store the full form from the beginning.
Fri, 16 Jan 2015 14:49:08 -0800 trydiff: order header-writing code in same order as output
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 14:49:08 -0800] rev 24001
trydiff: order header-writing code in same order as output Instead of inserting a line before the others header lines, move the code that writes that line before the code that writes the other lines.
Fri, 16 Jan 2015 14:53:37 -0800 trydiff: inline sole addmodehdr() call
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 14:53:37 -0800] rev 24000
trydiff: inline sole addmodehdr() call Now that there is only a single call to addmodehdr() left, and there is other similar code (for new/deleted files) around that call site, let's inline the function there. That also makes it clearer under what circumstances the header is actually written (when modes differ).
Fri, 16 Jan 2015 14:46:03 -0800 trydiff: join filename with prefix only once
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 14:46:03 -0800] rev 23999
trydiff: join filename with prefix only once
Thu, 22 Jan 2015 17:00:54 -0800 trydiff: collect header-writing in one place
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jan 2015 17:00:54 -0800] rev 23998
trydiff: collect header-writing in one place This is the first step towards simplifying the big loop in trydiff(). This will make both the header code and the non-header code clearer, and it prepares for further simplification of the many nested if-statements in the body of the loop.
Fri, 16 Jan 2015 10:57:13 -0800 trydiff: make variable names more consistent
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 10:57:13 -0800] rev 23997
trydiff: make variable names more consistent Use '1' and '2' as suffix for names just like in the parameters 'ctx[12]': to,tn -> content1,content2 a,b -> f1, f2 omode,mode -> mode1,mode2 omode,nmode -> mode1,mode2 onode,nnode -> node1,node2 oflag,nflag -> flag1,flag2 oindex,nindex -> index1,index2
Fri, 16 Jan 2015 17:01:58 -0800 trydiff: check only if added file is a copy target, not source
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jan 2015 17:01:58 -0800] rev 23996
trydiff: check only if added file is a copy target, not source When creating a diff with copy/rename enabled, we consider added files and check if they are either copy sources or targets. However, an added file should never be a copy source. The test suite seems to agree with this: all tests pass if we raise an exception when an added file is a copy source. So, let's simplify the code by dropping the conditions that are never true. For those interested in the historical reasons: Before commit d1f209bb9564 (patch: separate reverse copy data (issue1959), 2010-02-11), 'copy' seems to have been a bidirectional map. Then that commit split it up into two unidirectional maps and duplicated the logic to look in both maps. It was still needed at that point to look in both maps, as the copy detection was poor and could sometimes be reported in reverse. A little later came 91eb4512edd0 (copies: rewrite copy detection for non-merge users, 2012-01-04). That commit fixed the copy detection to be backwards when it should, and made the hacks in trydiff unnecessary.
Thu, 29 Jan 2015 21:12:35 -0800 trydiff: remove unused variable 'modifiedset'
Martin von Zweigbergk <martinvonz@google.com> [Thu, 29 Jan 2015 21:12:35 -0800] rev 23995
trydiff: remove unused variable 'modifiedset' We started updating 'modifiedset' in a9853fc172d2 (trydiff: simplify checking for additions, 2014-12-23) but in the same commit, we removed the last use of the variable. Clean it up.
Mon, 02 Feb 2015 23:07:04 +0900 revset: replace parsing alias definition by _parsealiasdefn to parse strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 02 Feb 2015 23:07:04 +0900] rev 23994
revset: replace parsing alias definition by _parsealiasdefn to parse strictly Before this patch, referring alias arguments is parsed by string base operation "str.replace". This causes problems below (see the previous patch introducing "_parsealiasdefn" for detail) - the shorter name argument breaks referring the longer name - argument names in the quoted string are broken This patch replaces parsing alias definition by "_parsealiasdefn" to parse strictly.
Mon, 02 Feb 2015 23:07:04 +0900 revset: introduce _parsealiasdefn to parse alias definitions strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 02 Feb 2015 23:07:04 +0900] rev 23993
revset: introduce _parsealiasdefn to parse alias definitions strictly This patch introduces "_parsealiasdefn" to parse alias definitions strictly. For example, it can avoid problems below, which current implementation can't. - the shorter name argument breaks referring the longer name one in the definition, if the former is completely prefix of the latter for example, the alias definition "foo($1, $10) = $1 or $10" is parsed as "_aliasarg('$1') or _aliasarg('$1')0" and causes parse error, because tail "0" of "_aliasarg('$1')0" is invalid. - argument names in the quoted string are broken for example, the definition "foo($1) = $1 or desc('$1')" is parsed as "_aliasarg('$1') or desc('_aliasarg(\'$1\')')" and causes unexpected description matching against not '$1' but '_aliasarg(\'$1\')'. To decrease complication of patch, current implementation for alias definitions is replaced by "_parsealiasdefn" in the subsequent patch. This patch just introduces it. This patch defines "_parsealiasdefn" not as a method of "revsetalias" class but as a one of "revset" module, because of ease of testing by doctest.
Mon, 02 Feb 2015 22:28:52 +0900 hgweb: use revset.spanset where appropriate
Yuya Nishihara <yuya@tcha.org> [Mon, 02 Feb 2015 22:28:52 +0900] rev 23992
hgweb: use revset.spanset where appropriate It is remainder of 9ad6dae67845 where spanset was introduced.
Sun, 01 Feb 2015 14:09:31 +0100 subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com> [Sun, 01 Feb 2015 14:09:31 +0100] rev 23991
subrepo: add 'cat' support for git subrepos V2: use 'self._ctx.node()' instead of 'rev' in makefileobj. As Matt Harbison mentioned, using 'rev' does not make sense, since we'd be passing a git revision to the top-level Mercurial repository.
Mon, 02 Feb 2015 12:50:48 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Feb 2015 12:50:48 -0600] rev 23990
merge with stable
Sun, 01 Feb 2015 20:21:02 -0600 Added signature for changeset fbdd5195528f stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 20:21:02 -0600] rev 23989
Added signature for changeset fbdd5195528f
Sun, 01 Feb 2015 20:20:51 -0600 Added tag 3.3 for changeset fbdd5195528f stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 20:20:51 -0600] rev 23988
Added tag 3.3 for changeset fbdd5195528f
Sun, 01 Feb 2015 18:47:04 -0600 merge with i18n stable 3.3
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 18:47:04 -0600] rev 23987
merge with i18n
Sun, 01 Feb 2015 08:24:08 +0900 i18n-ja: synchronized with 9a391d720cf9 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 01 Feb 2015 08:24:08 +0900] rev 23986
i18n-ja: synchronized with 9a391d720cf9
Thu, 29 Jan 2015 10:13:18 -0200 i18n-pt_BR: synchronized with 448bb32b8ee6 stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 29 Jan 2015 10:13:18 -0200] rev 23985
i18n-pt_BR: synchronized with 448bb32b8ee6
Sun, 01 Feb 2015 16:33:45 -0600 filectx: use _descendantrev in parents() stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 16:33:45 -0600] rev 23984
filectx: use _descendantrev in parents() This lets us be lazy about linkrev adjustments when tracing history.
Sun, 01 Feb 2015 16:26:35 -0600 filectx: if we have a _descendantrev, use it to adjust linkrev stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 16:26:35 -0600] rev 23983
filectx: if we have a _descendantrev, use it to adjust linkrev This lets us use _adjustlinkrev lazily.
Sun, 01 Feb 2015 16:25:12 -0600 copies: use linkrev for file tracing limit stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 16:25:12 -0600] rev 23982
copies: use linkrev for file tracing limit This lets us lazily evaluate _adjustlinkrev.
Sun, 01 Feb 2015 16:23:07 -0600 filectx: use linkrev to sort ancestors stable
Matt Mackall <mpm@selenic.com> [Sun, 01 Feb 2015 16:23:07 -0600] rev 23981
filectx: use linkrev to sort ancestors We're going to make rev() lazily do _adjustlinkrevs, and we don't want that to happen when we're quickly tracing through file ancestry without caring about revs (as we do when finding copies). This takes us back to pre-linkrev-correction behavior, but shouldn't regress us relative to the last stable release.
(0) -10000 -3000 -1000 -240 +240 +1000 +3000 +10000 tip