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.
(0) -10000 -3000 -1000 -300 -100 -50 -24 +24 +50 +100 +300 +1000 +3000 +10000 +30000 tip