Sun, 26 Feb 2012 17:10:57 +0100 context: add followfirst arg to filectx and workingfilectx
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 17:10:57 +0100] rev 16185
context: add followfirst arg to filectx and workingfilectx When _followfirst() revset was introduced it seemed to be the sole user of such an argument, so filectx.ancestors() was duplicated and modified instead. It now appears this argument could be used when computing the set of files to be considered when --patch or --stat are passed along with --follow FILE.
Sun, 26 Feb 2012 17:10:57 +0100 graphlog: fix --removed
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 17:10:57 +0100] rev 16184
graphlog: fix --removed "hg log --removed FILE" does not return changesets where FILE was removed, but ones where FILE was changed and possibly removed. The flag is really here to disable walkchangerevs() fast path, which cannot see file removals by scanning filelogs.
Sun, 26 Feb 2012 17:10:56 +0100 test-glog: rewrite more tests using testlog() function
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 17:10:56 +0100] rev 16183
test-glog: rewrite more tests using testlog() function
Sun, 26 Feb 2012 17:10:55 +0100 match: consider filesets as "anypats"
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 17:10:55 +0100] rev 16182
match: consider filesets as "anypats" Matt suggested this on IRC, I do not think the choice is obvious, but this one makes things simpler because while filesets are turned into a list of files into the match objects, it would more be difficult to tell invalid files passed in pats from those expanded from filesets.
Sun, 26 Feb 2012 17:10:51 +0100 graphlog: evaluate FILE/-I/-X filesets on the working dir
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 17:10:51 +0100] rev 16181
graphlog: evaluate FILE/-I/-X filesets on the working dir This subtlety is not documented yet but: - pats/--include/--exclude filesets are evaluated against the working directory - --rev filesets are reevaluated against every revisions
Sun, 26 Feb 2012 16:56:32 +0100 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu> [Sun, 26 Feb 2012 16:56:32 +0100] rev 16180
graphlog: implement --copies
Sat, 18 Feb 2012 16:30:17 -0500 test-check-code-hg: skip test if not in a working dir (issue3248). stable
Greg Ward <greg@gerg.ca> [Sat, 18 Feb 2012 16:30:17 -0500] rev 16179
test-check-code-hg: skip test if not in a working dir (issue3248).
Sun, 26 Feb 2012 16:45:59 -0600 copies: use ctx.dirs() for directory rename detection
Matt Mackall <mpm@selenic.com> [Sun, 26 Feb 2012 16:45:59 -0600] rev 16178
copies: use ctx.dirs() for directory rename detection
Sun, 26 Feb 2012 15:51:56 -0600 copies: fix mergecopies doc mapping direction
Matt Mackall <mpm@selenic.com> [Sun, 26 Feb 2012 15:51:56 -0600] rev 16177
copies: fix mergecopies doc mapping direction
Sat, 25 Feb 2012 16:48:07 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Sat, 25 Feb 2012 16:48:07 -0600] rev 16176
merge with stable
Sat, 25 Feb 2012 19:39:55 +0100 log: restore cache used by --copies stable
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 19:39:55 +0100] rev 16175
log: restore cache used by --copies The {filelog -> linkrev -> copyfrom} cache was refactored and broken by: changeset: 10060:f780b1098efc user: Patrick Mezard <pmezard@gmail.com> date: Sun Dec 13 18:06:24 2009 +0100 summary: templatekw: change {file_copies} behaviour, add {file_copies_switch} With --copies, this cache is accessed for every touched file of every revision. Unfortunately it is recreated for every revision, which means filelogs are parsed again. This patch makes the cache global again for all revisions. A couple of indicative timings of "hg log --copies", before and after: hg: 44s / 5s mozilla --limit 10000: 3m51s / 2m32s mozilla: 23m46s / 12m23s I do not know any good tool to trace memory consumption of these runs for comparisons. Watching the full mozilla run in top, the process did not seem to misbehave.
Sat, 25 Feb 2012 22:11:36 +0100 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 22:11:36 +0100] rev 16174
graphlog: implement --follow-first log --graph --follow-first FILE cannot be compared with the regular version because it never worked: --follow-first is not taken in account in walkchangerevs() fast path and is explicitely bypassed in FILE case in walkchangerevs() nested iterate() function.
Sat, 25 Feb 2012 22:11:36 +0100 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 22:11:36 +0100] rev 16173
graphlog: implement --follow with file arguments
Sat, 25 Feb 2012 22:11:35 +0100 test-glog: test multiple --prune values
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 22:11:35 +0100] rev 16172
test-glog: test multiple --prune values
Sat, 25 Feb 2012 22:11:34 +0100 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 22:11:34 +0100] rev 16171
graphlog: restore FILE glob expansion on Windows On platforms not supporting shell expansion, scmutil.match() performs glob expansion on 'pats' arguments. But _matchfiles() revset calls match.match() directly, bypassing this behaviour. To avoid duplicating scmutil.match(), a secondary scmutil.matchandpats() is introduced returning both the match object and the expanded inputs. Note the expanded pats are also needed in the fast path, and will be used by --follow code path.
Sat, 25 Feb 2012 21:51:13 +0100 glog: restore multiple --rev test lost in rebasing
Patrick Mezard <patrick@mezard.eu> [Sat, 25 Feb 2012 21:51:13 +0100] rev 16170
glog: restore multiple --rev test lost in rebasing
Sat, 25 Feb 2012 14:22:58 -0600 copies: remove checkdirs options
Matt Mackall <mpm@selenic.com> [Sat, 25 Feb 2012 14:22:58 -0600] rev 16169
copies: remove checkdirs options This removes the undocumented merge.followdirs option, which has always been true.
Fri, 24 Feb 2012 18:21:06 -0600 copies: add docstring for mergecopies
Matt Mackall <mpm@selenic.com> [Fri, 24 Feb 2012 18:21:06 -0600] rev 16168
copies: add docstring for mergecopies
Fri, 24 Feb 2012 16:52:32 -0600 addremove: return 1 if we failed to handle any explicit files
Matt Mackall <mpm@selenic.com> [Fri, 24 Feb 2012 16:52:32 -0600] rev 16167
addremove: return 1 if we failed to handle any explicit files
Fri, 24 Feb 2012 16:16:48 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 24 Feb 2012 16:16:48 -0600] rev 16166
merge with stable
Fri, 24 Feb 2012 20:57:59 +0100 log: fix --follow FILE ancestry calculation stable
Patrick Mezard <patrick@mezard.eu> [Fri, 24 Feb 2012 20:57:59 +0100] rev 16165
log: fix --follow FILE ancestry calculation Currently, --follow FILE looks for a FILE filelog, scans it and collects linkrevs and renames, then filters them. The problem is the filelog scan does not start at FILE filenode in parent revision but at the last filelog revision. So: - Files not in the parent revision can be followed, the starting node is unexpected - Files in the parent revision can be followed from an incorrect starting node. This patch makes log --follow FILE fail if FILE is not in parent revision, and computes ancestors of the parent revision FILE filenode.
Fri, 24 Feb 2012 20:56:18 +0100 test-glog: extend a test before fixing --follow issues stable
Patrick Mezard <patrick@mezard.eu> [Fri, 24 Feb 2012 20:56:18 +0100] rev 16164
test-glog: extend a test before fixing --follow issues The changes add a lot of noise to the test output, I prefer to separate it from the changes which are to be introduced by --follow fixes.
Fri, 24 Feb 2012 16:09:15 -0600 graft: use proper revisions for copy detection (issue3265) stable
Matt Mackall <mpm@selenic.com> [Fri, 24 Feb 2012 16:09:15 -0600] rev 16163
graft: use proper revisions for copy detection (issue3265)
Fri, 24 Feb 2012 19:11:35 -0200 convert: fix typos in error messages stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Fri, 24 Feb 2012 19:11:35 -0200] rev 16162
convert: fix typos in error messages
Thu, 23 Feb 2012 18:05:20 +0100 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 18:05:20 +0100] rev 16161
graphlog: paths/-I/-X handling requires a new revset The filtering logic of match objects cannot be reproduced with the existing revsets as it operates at changeset files level. A changeset touching "a" and "b" is matched by "-I a -X b" but not by "file(a) and not file(b)". To solve this, a new internal "_matchfiles(...)" revset is introduced. It works like "file(x)" but accepts more than one argument and its arguments are prefixed with "p:", "i:" and "x:" to be used as patterns, include patterns or exclude patterns respectively. The _matchfiles revset is kept private for now: - There are probably smarter ways to pass the arguments in a user-friendly way - A "rev:" argument is likely appear at some point to emulate log command behaviour with regard to filesets: they are evaluated for the parent revision and applied everywhere instead of being reevaluated for each revision.
Thu, 23 Feb 2012 17:55:07 +0100 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 17:55:07 +0100] rev 16160
graphlog: imitate log slowpath when inputs are explicit files
Thu, 23 Feb 2012 17:54:42 +0100 graphlog: paths arguments must be or'ed
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 17:54:42 +0100] rev 16159
graphlog: paths arguments must be or'ed
Thu, 23 Feb 2012 11:21:30 +0100 graphlog: rewrite --rev like all other options
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 11:21:30 +0100] rev 16158
graphlog: rewrite --rev like all other options
Thu, 23 Feb 2012 11:21:04 +0100 graphlog: --branch and --only-branch are the same
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 11:21:04 +0100] rev 16157
graphlog: --branch and --only-branch are the same Handling the aliasing in fancyopts would be cleaner but I do not want to make this change for stable.
Thu, 23 Feb 2012 17:46:57 +0100 test-check-code-hg: fix xargs exit status on OSX stable
Patrick Mezard <patrick@mezard.eu> [Thu, 23 Feb 2012 17:46:57 +0100] rev 16156
test-check-code-hg: fix xargs exit status on OSX When xargs subcommand invocation fails in a normal way, GNU xargs returns 123 and BSD one returns 1.
Thu, 23 Feb 2012 13:37:10 +0100 largefiles: respect store.createmode and avoid extra file copy stable
Martin Geisler <mg@aragost.com> [Thu, 23 Feb 2012 13:37:10 +0100] rev 16155
largefiles: respect store.createmode and avoid extra file copy Before, a tempfile was used to create a temp file was created with 600 permissions and the uploaded data was written into it. This file was then *copied* to .hg/largefiles/<hash>. We now simply use atomictempfile to write the data to a temp file with the right permissions and then rename that into place.
Thu, 23 Feb 2012 13:37:10 +0100 largefiles: respect store.createmode in basestore.get stable
Martin Geisler <mg@aragost.com> [Thu, 23 Feb 2012 13:37:10 +0100] rev 16154
largefiles: respect store.createmode in basestore.get This replaces another use of tempfile with atomictempfile. The problem with tempfile is that it creates files with 600 permissions instead of respecting repo.store.createmode.
Thu, 23 Feb 2012 13:22:55 +0100 largefiles: use repo.store.createmode for new files in .hg/largefiles stable
Martin Geisler <mg@aragost.com> [Thu, 23 Feb 2012 13:22:55 +0100] rev 16153
largefiles: use repo.store.createmode for new files in .hg/largefiles Before, the mode was copied from the file in the working copy. This is inconsistent with how Mercurial normally creates files inside the .hg folder. This can lead to a situation where you can read the files under .hg/store but not under .hg/largefiles and so a clone will fail if it needs to access a largefile.
Wed, 22 Feb 2012 17:41:22 -0600 mq: expand qimport summary
Matt Mackall <mpm@selenic.com> [Wed, 22 Feb 2012 17:41:22 -0600] rev 16152
mq: expand qimport summary
Wed, 22 Feb 2012 17:36:33 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 22 Feb 2012 17:36:33 -0600] rev 16151
merge with stable
Wed, 22 Feb 2012 12:30:15 +0100 graphlog: multiple --keyword must be or'ed
Patrick Mezard <patrick@mezard.eu> [Wed, 22 Feb 2012 12:30:15 +0100] rev 16150
graphlog: multiple --keyword must be or'ed
Wed, 22 Feb 2012 12:30:15 +0100 graphlog: multiple --branch must be or'ed
Patrick Mezard <patrick@mezard.eu> [Wed, 22 Feb 2012 12:30:15 +0100] rev 16149
graphlog: multiple --branch must be or'ed
Wed, 22 Feb 2012 12:30:15 +0100 graphlog: multiple --user must be or'ed
Patrick Mezard <patrick@mezard.eu> [Wed, 22 Feb 2012 12:30:15 +0100] rev 16148
graphlog: multiple --user must be or'ed
Wed, 22 Feb 2012 12:30:15 +0100 graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu> [Wed, 22 Feb 2012 12:30:15 +0100] rev 16147
graphlog: explicitely join multivalue parameters This will let use override the "join" value (and/or) depending on the option considered. The option revset arity is now deduced from the revset and the option value type, to simplify opt2revset definition.
Wed, 22 Feb 2012 12:30:14 +0100 test-glog.t: use printrevset extension to trace rewritten revsets
Patrick Mezard <patrick@mezard.eu> [Wed, 22 Feb 2012 12:30:14 +0100] rev 16146
test-glog.t: use printrevset extension to trace rewritten revsets Using "hg log -G --print-revset" prints the revset generated by graphlog and exits. This helps debugging and writing shorter tests. It has been suggested to handle these tests with doctests. I think the extension approach is better because: - It tests the actual parameter set passed to graphlog.revset(), not what we expect it to be. 'branch' and 'only-branch' are currently distinct options but nothing prevents fancyopts to grow a notion of option aliasing one day, where both options would be merged before reaching the command. - It can be used as debug output interleaved with real log calls. v2: - Use a test extension instead of a global deprecated new option
Thu, 23 Feb 2012 00:07:54 +0900 context: use 'changectx.dirs()' in 'walk()' for directory patterns stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 23 Feb 2012 00:07:54 +0900] rev 16145
context: use 'changectx.dirs()' in 'walk()' for directory patterns this patch uses 'changectx.dirs()' instead of nested loop, to examine whether specified pattern is related to the context as a directory or not.
Thu, 23 Feb 2012 00:07:54 +0900 localrepository: use 'changectx.dirs()' in 'status()' for directory patterns stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 23 Feb 2012 00:07:54 +0900] rev 16144
localrepository: use 'changectx.dirs()' in 'status()' for directory patterns when pattern which does not match against any files in working context is specified, current implementation of 'localrepository.status()' decides whether warning message about it should be shown or not by 'f not in context' this works correctly for 'file pattern', but not for 'directory pattern', because 'f not in context' always returns True for directories, even if they are related to the context. this patch uses 'changectx.dirs()' to examine whether specified pattern is related to the context as a directory or not.
Thu, 23 Feb 2012 00:07:54 +0900 context: add 'dirs()' to changectx/workingctx for directory patterns stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 23 Feb 2012 00:07:54 +0900] rev 16143
context: add 'dirs()' to changectx/workingctx for directory patterns this patch adds 'dirs()' to changectx/workingctx, which returns map of all directories deduced from manifest, to examine whether specified pattern is related to the context as directory or not quickly. 'workingctx.dirs()' uses 'dirstate.dirs()' rather than building another copy of it.
Wed, 22 Feb 2012 15:22:12 -0600 status: fix format field thinko
Matt Mackall <mpm@selenic.com> [Wed, 22 Feb 2012 15:22:12 -0600] rev 16142
status: fix format field thinko
Mon, 20 Feb 2012 17:59:48 +0100 largefiles: don't break filesets stable
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Mon, 20 Feb 2012 17:59:48 +0100] rev 16141
largefiles: don't break filesets
Sat, 18 Feb 2012 14:27:57 +0100 help: sort hgrc related "Sections" chapters alphabetically
Michal Sznajder <michalsznajder@gmail.com> [Sat, 18 Feb 2012 14:27:57 +0100] rev 16140
help: sort hgrc related "Sections" chapters alphabetically
Sat, 18 Feb 2012 12:30:24 +0100 doc: minor fixes to [graph] section documentation
Patrick Mezard <patrick@mezard.eu> [Sat, 18 Feb 2012 12:30:24 +0100] rev 16139
doc: minor fixes to [graph] section documentation
Sun, 22 Jan 2012 19:35:26 +0700 hgweb: refactor graph customization javascript
Patrick Mezard <patrick@mezard.eu> [Sun, 22 Jan 2012 19:35:26 +0700] rev 16138
hgweb: refactor graph customization javascript - Avoid flipping lineWidth state around the edge() call, pass it to the function instead. - Pass the line width and color appended to the other parameters instead of in a dictionary. The javascript code is simpler, no need to check for all containers existence, and the JSON output is smaller. - Reindent setColor() comments and fix code spacing.
Fri, 17 Feb 2012 16:49:43 +0100 templates: move Graph.edge() implementation in mercurial.js
Patrick Mezard <patrick@mezard.eu> [Fri, 17 Feb 2012 16:49:43 +0100] rev 16137
templates: move Graph.edge() implementation in mercurial.js All implementation in graph.tmpl are the same. It can still be overriden if necessary. There is no clear reason to keep it separated from mercurial.js.
Mon, 20 Feb 2012 16:42:51 -0600 formatter: convert status command
Matt Mackall <mpm@selenic.com> [Mon, 20 Feb 2012 16:42:51 -0600] rev 16136
formatter: convert status command
Mon, 20 Feb 2012 16:42:48 -0600 ui: add formatter method
Matt Mackall <mpm@selenic.com> [Mon, 20 Feb 2012 16:42:48 -0600] rev 16135
ui: add formatter method
Mon, 20 Feb 2012 16:42:47 -0600 formatter: add basic formatters
Matt Mackall <mpm@selenic.com> [Mon, 20 Feb 2012 16:42:47 -0600] rev 16134
formatter: add basic formatters
Mon, 20 Feb 2012 16:42:45 -0600 encoding: introduce utf8-b helpers
Matt Mackall <mpm@selenic.com> [Mon, 20 Feb 2012 16:42:45 -0600] rev 16133
encoding: introduce utf8-b helpers
Fri, 17 Feb 2012 13:53:41 -0600 graphmod: add config cache
Matt Mackall <mpm@selenic.com> [Fri, 17 Feb 2012 13:53:41 -0600] rev 16132
graphmod: add config cache Before, we'd lookup the branch for every edge segment in the entire graph: extremely expensive. This happened even when no per-branch settings existed. Now we define a revision -> config cache function that's LRU-cached and is a no-op when no configuration exists. Still not terribly fast, but hopefully only one real branch lookup per revision. This might degenerate for wide graphs as the LRU is hard-coded to 20 elements.
Fri, 17 Feb 2012 13:53:19 -0600 graphmod: rewrite graph config validation
Matt Mackall <mpm@selenic.com> [Fri, 17 Feb 2012 13:53:19 -0600] rev 16131
graphmod: rewrite graph config validation Our goal is not to strictly disallow _invalid_ input, simply disallow _hostile_ input. Avoid using re Avoid creating empty dicts when no branch parameters are recognized
Sun, 22 Jan 2012 19:47:03 +0700 graph: in hgrc specify line color for main branch
Constantine Linnick <theaspect@gmail.com> [Sun, 22 Jan 2012 19:47:03 +0700] rev 16130
graph: in hgrc specify line color for main branch You can specify color to visually distinguish main branch (trunk) on hgweb's graph page. If color specified, all branch heads will share same color. Settings format is branch_name.color = value, where color is six hexadecimal digits e.g.: [graph] default.color = FF0000
Sun, 22 Jan 2012 19:35:26 +0700 graph: in hgrc specify line width for main branch
Constantine Linnick <theaspect@gmail.com> [Sun, 22 Jan 2012 19:35:26 +0700] rev 16129
graph: in hgrc specify line width for main branch You can specify width to visually distinguish main branch (trunk) on hgweb's graph page. Settings format is branch_name.width = value, where width in px e.g.: [graph] default.width = 3
Thu, 16 Feb 2012 16:40:29 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 16 Feb 2012 16:40:29 -0600] rev 16128
merge with stable
Thu, 16 Feb 2012 15:58:51 -0600 filemerge: remove some redundancy in decorators/docstrings
Matt Mackall <mpm@selenic.com> [Thu, 16 Feb 2012 15:58:51 -0600] rev 16127
filemerge: remove some redundancy in decorators/docstrings
Sun, 12 Feb 2012 21:38:12 +0900 filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 12 Feb 2012 21:38:12 +0900] rev 16126
filemerge: create detail of internal merge tools from documentation string this patch introduces 'internaltoolsmarker' which creates detail of each internal merge tools from documentation string for 'hg help merge-tools'.
Sun, 12 Feb 2012 21:38:12 +0900 filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 12 Feb 2012 21:38:12 +0900] rev 16125
filemerge: refactoring of 'filemerge()' current 'filemerge.filemerge()' implementation is verfy complicated. - it is not easy to add new internal merge tools (only by patching on 'filemerge()', or replacing it completely) - cleanup of temporary files is unsatisfactory ('internal:dump' does not, in fact) this is patch for refactoring of 'filemerge()' to isolate each internal merge tool implementations from 'filemerge()', and clean up common part in it.
Mon, 13 Feb 2012 17:22:35 +0100 patch: fuzz more aggressively to match patch(1) behaviour stable
Patrick Mezard <patrick@mezard.eu> [Mon, 13 Feb 2012 17:22:35 +0100] rev 16124
patch: fuzz more aggressively to match patch(1) behaviour The previous code was assuming a default context of 3 lines. When fuzzing, it would take this value in account to reduce the amount of removed line from hunks top or bottom. For instance, if a hunk has only 2 lines of bottom context, fuzzing with fuzz=1 would do nothing and with fuzz=2 it would remove one of those lines. A hunk with one line of bottom context could not be fuzzed at all. patch(1) has apparently no such restrictions and takes the fuzz level at face value. - test-import.t: fuzz/offset changes at the beginning of file are explained by the new fuzzing behaviour and match patch(1) ones. Patching locations are different but those of my patch(1) do not make a lot of sense right now (patched output are the same) - test-import-bypass.t: more agressive fuzzing makes a patching supposed to fail because of context, succeed. Change the diff to avoid this. - test-mq-merge.t: more agressive fuzzing would allow the merged patch to apply with fuzz, but fortunately we disallow this behaviour. The new output is kept. I have not enough experience with patch(1) fuzzing to know whether aligning our implementation on it is a good or bad idea. Until now, it has been the implementation reference. For instance, "qpush" tolerates fuzz (test-mq-merge.t runs the special case of pushing merge revisions where fuzzing is forbidden).
Mon, 13 Feb 2012 16:47:31 +0100 patch: fix fuzzing of hunks without previous lines (issue3264) stable
Patrick Mezard <patrick@mezard.eu> [Mon, 13 Feb 2012 16:47:31 +0100] rev 16123
patch: fix fuzzing of hunks without previous lines (issue3264) When applying hunks such as: @@ -2,1 +2,2 @@ context +change fuzzing would empty the "old" block and make patchfile.apply() traceback. Instead, we apply the new block at specified location without testing. The "bottom hunk" test was removed as patch(1) has no problem applying hunk with no context in the middle of a file.
Mon, 13 Feb 2012 13:51:38 +0100 patch: make hunk.fuzzit() compute the fuzzed start locations stable
Patrick Mezard <patrick@mezard.eu> [Mon, 13 Feb 2012 13:51:38 +0100] rev 16122
patch: make hunk.fuzzit() compute the fuzzed start locations - It moves hunks processing weirdness where it belongs - It helps reusing said weirdness whenever fuzzit() is called, like during the actual hunk fuzzing.
Mon, 13 Feb 2012 13:21:00 +0100 patch: fuzz old and new lines at the same time stable
Patrick Mezard <patrick@mezard.eu> [Mon, 13 Feb 2012 13:21:00 +0100] rev 16121
patch: fuzz old and new lines at the same time In theory, the fuzzed offsets for old and new lines should be exactly the same as they are based on hunk parsing. Make it true in practice.
Mon, 13 Feb 2012 18:37:07 +0100 largefiles: optimize update speed by only updating changed largefiles
Na'Tosha Bard <natosha@unity3d.com> [Mon, 13 Feb 2012 18:37:07 +0100] rev 16120
largefiles: optimize update speed by only updating changed largefiles Historically, during 'hg update', every largefile in the working copy was hashed (which is a very expensive operation on big files) and any largefiles that did not have a hash that matched their standin were updated. This patch optimizes 'hg update' by keeping track of what standins have changed between the old and new revisions, and only updating the largefiles that have changed. This saves a lot of time by avoiding the unecessary calculation of a list of sha1 hashes for big files. With this patch, the time 'hg update' takes to complete is a function of how many largefiles need to be updated and what their size is. Performance tests on a repository with about 80 largefiles ranging from a few MB to about 97 MB are shown below. The tests show how long it takes to run 'hg update' with no changes actually being updated. Mercurial 2.1 release: $ time hg update 0 files updated, 0 files merged, 0 files removed, 0 files unresolved getting changed largefiles 0 largefiles updated, 0 removed real 0m10.045s user 0m9.367s sys 0m0.674s With this patch: $ time hg update 0 files updated, 0 files merged, 0 files removed, 0 files unresolved real 0m0.965s user 0m0.845s sys 0m0.115s The same repsoitory, without the largefiles extension enabled: $ time hg update 0 files updated, 0 files merged, 0 files removed, 0 files unresolved real 0m0.799s user 0m0.684s sys 0m0.111s So before the patch, 'hg update' with no changes was approximately 9.25s slower with largefiles enabled. With this patch, it is approximately 0.165s slower.
Tue, 14 Feb 2012 14:31:40 +0100 mq: make qimport --push push all imported patches (issue3130) stable
Patrick Mezard <patrick@mezard.eu> [Tue, 14 Feb 2012 14:31:40 +0100] rev 16119
mq: make qimport --push push all imported patches (issue3130) Only the first imported one was pushed.
Wed, 15 Feb 2012 11:21:24 +0100 convert: tolerate spaces between splicemap parent ids (issue3203) stable
Patrick Mezard <patrick@mezard.eu> [Wed, 15 Feb 2012 11:21:24 +0100] rev 16118
convert: tolerate spaces between splicemap parent ids (issue3203) Splicemap lines are documented in hg help convert like: key parent1, parent2 but parsed like: key, parents = line.strip().rsplit(' ', 1) parents = parents.replace(',', ' ').split() The rsplit() call was introduced to handle spaces in keys for the generic mapfile format. Spaces can appear in svn identifiers since they contain path components. This logic makes less sense with splicemap since svn identifiers can also appear on the right side, even if it is a bit less likely. Given the parsing is theorically broken, I would rather follow what is documented already and is correct in the main case where all identifiers are hg hashes. Also, using svn identifiers in a splicemap sounds difficult as they are not easily accessible.
Thu, 16 Feb 2012 01:23:45 +0200 test-commandserver: flush stdout stable
Idan Kamara <idankk86@gmail.com> [Thu, 16 Feb 2012 01:23:45 +0200] rev 16117
test-commandserver: flush stdout
Thu, 16 Feb 2012 01:21:34 +0200 localrepo: clear _filecache on rollback (issue3261) stable
Idan Kamara <idankk86@gmail.com> [Thu, 16 Feb 2012 01:21:34 +0200] rev 16116
localrepo: clear _filecache on rollback (issue3261) Files are being replaced by rollback but the corresponding data in localrepo isn't actually updated for things like bookmarks, phases, etc. Then when rollback is done, the cache is updated thinking it has the most up-to-date data, where in fact it is still pre-rollback. We clear _filecache to force everything to be recreated.
Wed, 15 Feb 2012 20:02:35 +0200 scmutil: update cached copy when filecached attribute is assigned (issue3263) stable
Idan Kamara <idankk86@gmail.com> [Wed, 15 Feb 2012 20:02:35 +0200] rev 16115
scmutil: update cached copy when filecached attribute is assigned (issue3263) When assigning a new object to filecached properties, the cached object that was kept in the _filecache map was still holding the old object. By implementing __set__, we track these changes too and update the cached copy as well.
Wed, 15 Feb 2012 23:44:10 +0200 cmdserver: invalidate the dirstate when running commands (issue3271) stable
Idan Kamara <idankk86@gmail.com> [Wed, 15 Feb 2012 23:44:10 +0200] rev 16114
cmdserver: invalidate the dirstate when running commands (issue3271) The dirstate is invalidated separately outside of invalidate() which is already being called (other callers of invalidate() seems to suggest the separation is there for a reason).
Wed, 15 Feb 2012 23:49:15 +0200 localrepo: reset _phasesdirty flag after writing stable
Idan Kamara <idankk86@gmail.com> [Wed, 15 Feb 2012 23:49:15 +0200] rev 16113
localrepo: reset _phasesdirty flag after writing
Thu, 16 Feb 2012 13:03:42 +0100 import: handle git renames and --similarity (issue3187) stable
Patrick Mezard <patrick@mezard.eu> [Thu, 16 Feb 2012 13:03:42 +0100] rev 16112
import: handle git renames and --similarity (issue3187) There is no reason to discard copy sources from the set of files considered by addremove(). It was done to handle the case where a first patch would create 'a' and a second one would move 'a' to 'b'. If these patches were applied with --no-commit, 'a' would first be marked as added, then unlinked and dropped from the dirstate but still passed to addremove(). A better fix is thus to exclude removed files which ends being dropped from the dirstate instead of removed. Reported by Jason Harris <jason@jasonfharris.com>
Thu, 16 Feb 2012 12:56:48 +0100 context: make workingctx.forget() really warn about untracked files stable
Patrick Mezard <patrick@mezard.eu> [Thu, 16 Feb 2012 12:56:48 +0100] rev 16111
context: make workingctx.forget() really warn about untracked files
Wed, 15 Feb 2012 23:01:09 +0900 largefiles: check whether specified patterns are related to largefiles strictly stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 15 Feb 2012 23:01:09 +0900] rev 16110
largefiles: check whether specified patterns are related to largefiles strictly current 'lfiles_repo.status()' implementation examines whether specified patterns are related to largefiles in working directory (not to STANDIN) or not by NOT-EMPTY-NESS of below list: [f for f in match.files() if f in lfdirstate] but it can not be assumed that all in 'match.files()' are file itself exactly, because user may only specify part of path to match whole under subdirectories recursively. above examination will mis-recognize such pattern as 'not related to largefiles', and executes normal 'status()' procedure. so, 'hg status' shows '?'(unknown) status for largefiles in working directory unexpectedly. this patch examines relation of pattern to largefiles by applying 'match()' on each entries in lfdirstate and checking wheter there is no matched entry. it may increase cost of examination, because it causes of full scan of entries in lfdirstate. so this patch uses normal for-loop instead of list comprehensions, to decrease cost when matching is found.
Fri, 10 Feb 2012 17:09:23 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 10 Feb 2012 17:09:23 -0600] rev 16109
merge with stable
Fri, 10 Feb 2012 16:52:32 -0600 log: remove caching of all visited revisions (issue3253) stable
Matt Mackall <mpm@selenic.com> [Fri, 10 Feb 2012 16:52:32 -0600] rev 16108
log: remove caching of all visited revisions (issue3253) Not only does this eat all available memory for some users, it's slower.
Fri, 10 Feb 2012 16:09:30 -0600 pull: backout change to return code stable
Matt Mackall <mpm@selenic.com> [Fri, 10 Feb 2012 16:09:30 -0600] rev 16107
pull: backout change to return code This bit a number of people.
Fri, 10 Feb 2012 22:34:13 +0100 convert: use splicemap entries when sorting revisions (issue1748) stable
Patrick Mezard <patrick@mezard.eu> [Fri, 10 Feb 2012 22:34:13 +0100] rev 16106
convert: use splicemap entries when sorting revisions (issue1748) When sorting revisions before converting them, we have to edit the revision graph using splicemap entries. Otherwise, a spliced revision may be converted before its synthetic parents. Invalid splicemap revisions are now detected before starting the conversion.
Fri, 10 Feb 2012 22:25:49 +0100 convert: turn splicemap into a simple dictionary stable
Patrick Mezard <patrick@mezard.eu> [Fri, 10 Feb 2012 22:25:49 +0100] rev 16105
convert: turn splicemap into a simple dictionary Parsing the splicemap as a mapfile was a pain because map does not let us override its parsing code and splicemap entries are not key/values. Besides we had no need for mapfiles extra features. Just parse the splicemap and return a dictionary.
Fri, 10 Feb 2012 13:50:13 +0100 debugrevspec: mention --verbose to print the parsed tree
Patrick Mezard <patrick@mezard.eu> [Fri, 10 Feb 2012 13:50:13 +0100] rev 16104
debugrevspec: mention --verbose to print the parsed tree
Fri, 10 Feb 2012 14:46:09 +0100 largefiles: only cache largefiles in new heads stable
Na'Tosha Bard <natosha@unity3d.com> [Fri, 10 Feb 2012 14:46:09 +0100] rev 16103
largefiles: only cache largefiles in new heads This fixes a serious performance regression in largefiles introduced in Mercurial 2.1. Caching new largefiles on pull is necessary, because otherwise largefiles will be missing (and unable to be downloaded) when the user tries to merge or rebase a new head with an old one. But this is an expensive operation and should only be done for heads that are new from the pull, rather than on all heads in the repository.
Fri, 10 Feb 2012 13:47:57 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 10 Feb 2012 13:47:57 -0600] rev 16102
merge with stable
Tue, 07 Feb 2012 18:47:16 +0100 mq: restore _branchtags() fast path (issue3223) stable
Patrick Mezard <patrick@mezard.eu> [Tue, 07 Feb 2012 18:47:16 +0100] rev 16101
mq: restore _branchtags() fast path (issue3223) Since a5917346c72e, mq saves the nodeid of the first applied patch to cache/branchheads, which breaks the optimized cache handling introduced in fbf8320f25c8. The problem is the revision being committed is appended to mqrepo.applied after the commit succeeds, which means mqrepo._branchtags() performs a regular update and write the first applied patch to the branch cache. One solution is to set a context variable _committingpatch on the mqrepo while it is committing a patch and to take it in account when deciding to fast-path mqrepo._branchtags(). Not really elegant but it works. The changes to test-mq-caches.t reverse changes introduced by a5917346c72e. The cache should not have been updated with mq records. The changes to test-keyword.t are indirectly caused by a5917346c72e. Reported and analyzed by Yuya Nishihara <yuya@tcha.org> Notes: - qpush still makes a slow path _branchtags() call when checking heads. Maybe this can be optimized. - be careful when merging this patch in default as secretcommit() was renamed newcommit() right after the end of the code freeze.
Tue, 07 Feb 2012 18:47:13 +0100 mq: ensure all mq commits are made with secretcommit() stable
Patrick Mezard <patrick@mezard.eu> [Tue, 07 Feb 2012 18:47:13 +0100] rev 16100
mq: ensure all mq commits are made with secretcommit() Having a common code path helps fixing things globally.
Wed, 08 Feb 2012 17:45:10 +0100 convert/bzr: ignore nested repos when listing branches (issue3254)
Patrick Mezard <patrick@mezard.eu> [Wed, 08 Feb 2012 17:45:10 +0100] rev 16099
convert/bzr: ignore nested repos when listing branches (issue3254) Reported by A.S. Budden <abudden@gmail.com>
Wed, 08 Feb 2012 16:56:00 +0000 tests: tighten checks for octal escapes in shell printf. stable
Jim Hague <jim.hague@acm.org> [Wed, 08 Feb 2012 16:56:00 +0000] rev 16098
tests: tighten checks for octal escapes in shell printf. printf on AIX default shell ksh (89) says \1 is an invalid escape. It insists on at least 2 digits. This causes failures in test-keyword.t and test-status.t. check-code.py already looks out for \NNN and recommends using Python for outputting octal values. Extend the check to \NN and \N and fix up resulting failures.
Wed, 08 Feb 2012 20:00:52 +0100 phase: when phase cannot be reduced, hint at --force and return 1 (BC)
Patrick Mezard <patrick@mezard.eu> [Wed, 08 Feb 2012 20:00:52 +0100] rev 16097
phase: when phase cannot be reduced, hint at --force and return 1 (BC) Before, trying to change the phase of a "public" node to "draft" would result in: $ hg phase --draft . no phases changed [0] With this patch: $ hg phase --draft . cannot move 1 changesets to a more permissive phase, use --force no phases changed [1] On partial failures, the exit status is now 1 instead of 0 and the number of changed nodes is displayed while it was only with --verbose. It seems useful to tell the user that despite the apparent failure, something changed. $ hg phase --draft '5 or 7' cannot move 1 changesets to a more permissive phase, use --force phase changed for 1 changesets [1]
Thu, 09 Feb 2012 21:03:07 +0100 revset: fix alias substitution recursion (issue3240)
Patrick Mezard <patrick@mezard.eu> [Thu, 09 Feb 2012 21:03:07 +0100] rev 16096
revset: fix alias substitution recursion (issue3240) The revset aliases expansion worked like: expr = "some revset" for alias in aliases: expr = alias.process(expr) where "process" was replacing the alias with its *unexpanded* substitution, recursively. So it only worked when aliases were applied in proper dependency order. This patch rewrites the expansion process so all aliases are expanded recursively at every tree level, after parent alias rewriting and variable expansion.
Thu, 09 Feb 2012 17:54:47 -0600 update: just merge unknown file collisions
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 17:54:47 -0600] rev 16095
update: just merge unknown file collisions The unknown file collision rule was introduced as an extension of the "should be clean when merging" rule. Unfortunately, it got applied to the normal update path, which should be happy to merge local changes. This patch gives us merges for unknown file collisions on update, while preserving abort for merge and update -c.
Thu, 09 Feb 2012 17:04:17 -0600 merge: don't use unknown()
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 17:04:17 -0600] rev 16094
merge: don't use unknown() This removes use of unknown files for building the synthetic working directory manifest used by manifestmerge. Instead, we adopt the strategy used by _checkunknown. Side-effect: unknown files are no longer moved by remote directory renames, and now are left alone like ignored files.
Thu, 09 Feb 2012 16:50:19 -0600 merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 16:50:19 -0600] rev 16093
merge: refactor unknown file conflict checking Previously, we would do a full working directory walk including unknown files to perform a merge. In many cases, this was painful because unknown files greatly outnumbered tracked files and generally had no useful effect on the merge. Here we instead wait until we find a file in the destination that's not tracked locally and detect if it exists and is not ignored. This is usually cheaper but can be -more- expensive in the case where we're adding a huge number of files. On the other hand, the cost of statting the new files should be dwarfed by the cost of eventually writing them. In this version, case collisions are detected implicitly by os.path.exists and wctx[f] lookup.
Thu, 09 Feb 2012 13:16:20 -0600 update: use normal update path with --check (issue2450)
Matt Mackall <mpm@selenic.com> [Thu, 09 Feb 2012 13:16:20 -0600] rev 16092
update: use normal update path with --check (issue2450) This avoids clobbering unknown files on update by not using overwrite mode.
Mon, 06 Feb 2012 16:35:14 -0600 fetch: use update rather than clean when updating (issue3246) stable
Matt Mackall <mpm@selenic.com> [Mon, 06 Feb 2012 16:35:14 -0600] rev 16091
fetch: use update rather than clean when updating (issue3246) We already verify the working directory is "clean" before starting so there's no advantage to clobbering the working directory.
Mon, 06 Feb 2012 15:36:44 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 06 Feb 2012 15:36:44 -0600] rev 16090
merge with stable
(0) -10000 -3000 -1000 -300 -100 -96 +96 +100 +300 +1000 +3000 +10000 +30000 tip