Wed, 02 Dec 2015 03:12:07 +0900 commands: make backout acquire locks before processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 02 Dec 2015 03:12:07 +0900] rev 27193
commands: make backout acquire locks before processing Before this patch, "hg backout" executes below before acquisition of wlock. - cmdutil.checkunfinished() - cmdutil.bailifchanged() - repo.dirstate.parents() It may cause unintentional result, if another command runs parallelly (see also issue4368). In addition to it, "hg backout" refers changelog for purposes below without acquisition of store lock (slock), and it may cause unintentional result, if store is updated parallelly. - show and update to the revision by 'repo.changelog.tip()' - examine for "created new head" by 'repo.branchheads()' and 'cmdutil.commitstatus()' To avoid this issue, this patch makes "hg backout" acquire wlock and slock before processing.
Wed, 02 Dec 2015 03:12:07 +0900 commands: make commit acquire locks before processing (issue4368)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 02 Dec 2015 03:12:07 +0900] rev 27192
commands: make commit acquire locks before processing (issue4368) Before this patch, "hg commit" (process A) executes steps below: 1. get current branch heads via 'repo.branchheads()' - cache 'repo.changelog' 2. invoke 'repo.commit()' 3. acquire wlock - invalidate 'repo.dirstate' 4. access 'repo.dirstate' - re-read '.hg/dirstate' - check validity of parent revisions with 'repo.changelog' 5. invoke 'repo.commitctx()' 6. acquire store lock (slock) - invalidate 'repo.changelog' 7. do committing 8. release slock 9. release wlock 10. check new branch head (via 'cmdutil.commitstatus()') If acquisition of wlock at (3) above waits for another "hg commit" (process B) or so running parallelly to release wlock, process A causes creating orphan revision, because: - '.hg/dirstate' refers the revision, which is newly added by process B, as its parent - but already cached 'repo.changelog' doesn't contain such revision - therefore, validating parents of '.hg/dirstate' at (4) above replaces such revision with 'nullid' Then, process A creates "orphan" revision, of which parent is "null" revision. In addition to it, "created new head" may be shown at the end of process A unintentionally, if store is updated parallelly, because both getting branch heads (1) and checking new branch head (10) are executed outside slock scope. To avoid this issue, this patch makes "hg commit" acquire wlock and slock before processing. This patch resolves the issue between "hg commit" processes, but not one between "hg commit" and other commands. Subsequent patches resolve the latter. Even after this patch, there are still corner case problems below: - filecache may overlook changes of '.hg/dirstate', and it causes similar issue (see below for detail) https://bz.mercurial-scm.org/show_bug.cgi?id=4368#c10 - 3rd party extension may cause similar issue, if it directly uses 'repo.commit()' without acquisition of wlock and slock This can be fixed by acquisition of slock at the beginning of 'repo.commit()', but it seems suitable for "default" branch In fact, acquisition of slock itself is already introduced at "default" branch by 4414d500604f, but acquisition is not at the beginning of 'repo.commit()'. This patch also changes some tests: - test-fncache.t needs this tricky wrapping, to release (= forced failure of) wlock certainly - order of "hg commit" output is changed by widening scope of locks, because some hooks are fired after releasing wlock
Tue, 01 Dec 2015 16:15:59 -0800 addrevision: use general delta when the incoming base delta is bad
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 16:15:59 -0800] rev 27191
addrevision: use general delta when the incoming base delta is bad We unify the delta selection process to be a simple three options process: - try to use the incoming delta (if lazydeltabase is on) - try to find a suitable parents to delta against (if gd is on) - try to delta against the tipmost revision The first of this option that yield a valid delta will be used. The test change in 'test-generaldelta.t' show this behavior as we use a delta against the parent instead of a full delta when the incoming delta is not suitable. This as some impact on 'test-bundle.t' because a delta somewhere changes. It does not seems to change the test semantic and have been ignored.
Tue, 01 Dec 2015 18:11:00 -0800 test: use a bigger manifest in general delta test
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 18:11:00 -0800] rev 27190
test: use a bigger manifest in general delta test The currently used manifest is too small and cannot sustain a chain length above "1". This make testing the 'lazybasedelta' behavior hard. So we add an extra file in the manifest to help testing in the next changeset. The semantic of existing tests have been checked and is not changed.
Tue, 01 Dec 2015 18:45:16 -0800 addrevision: rework generaldelta computation
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 18:45:16 -0800] rev 27189
addrevision: rework generaldelta computation The old code have multiple explicit tests and code duplications. This makes it hard to improve the code. We rewrite the logic in a more generic way, not changing anything of the computed result. The final goal here is to eventually be able to: - factor out the default fallback case "try against 'prev'" in a single place - allow 'lazydeltabase' case to use the smarter general delta code path when the incoming base does not provide us with a good delta.
Wed, 11 Nov 2015 21:03:48 -0500 bmstore: close file in a finally block in _writerepo
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 21:03:48 -0500] rev 27188
bmstore: close file in a finally block in _writerepo Also rename the variable to file_ to avoid shadowing a builtin.
Wed, 11 Nov 2015 21:01:23 -0500 bmstore: add basic clean-state tracking
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 21:01:23 -0500] rev 27187
bmstore: add basic clean-state tracking I'm about to move active-bookmark management into the bmstore. I'd like to avoid re-writing the bookmarks data (as distinct from the active bookmark file) if possible, so let's introduce some dirty-tracking early.
Wed, 11 Nov 2015 20:45:38 -0500 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 20:45:38 -0500] rev 27186
bookmarks: hoist getbkfile out of bmstore class It's totally fine that this hook exists, but I don't see a need for it to live inside the bmstore class.
Wed, 11 Nov 2015 20:43:25 -0500 bookmarks: document getbkfile method
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 20:43:25 -0500] rev 27185
bookmarks: document getbkfile method I'm working on bmstore again, and this function gave me a moment's pause. Document it to save future readers from any undue confusion.
Sat, 31 Oct 2015 22:50:03 +0900 hgweb: load server settings from --web-conf (issue4699)
Yuya Nishihara <yuya@tcha.org> [Sat, 31 Oct 2015 22:50:03 +0900] rev 27184
hgweb: load server settings from --web-conf (issue4699) It copies the ui before loading the webconf and passes the copied ui only to the service. This way, the hgwebdir app can reload configs cleanly.
Tue, 17 Nov 2015 16:42:52 -0600 extdiff: correctly handle deleted subrepositories (issue3153)
Andrew Zwicky <andrew.zwicky@gmail.com> [Tue, 17 Nov 2015 16:42:52 -0600] rev 27183
extdiff: correctly handle deleted subrepositories (issue3153) Previously, when extdiff was called on two changesets where a subrepository had been removed, an unexpected KeyError would be raised. Now, the missing subrepository will be ignored. This behavior mirrors the behavior in diffordiffstat from cmdutil.py line ~1138-1153. The KeyError is caught and the revision is set to None. try/catch of LookupError around matchmod.narrowmatcher and sub.status is removed, as LookupError is not raised anywhere within those methods or deeper calls.
Sat, 21 Nov 2015 13:28:12 +0900 hgweb: make sure command options are set to all ui objects
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Nov 2015 13:28:12 +0900] rev 27182
hgweb: make sure command options are set to all ui objects Before this patch, it was unclear why the httpservice object could read the server options (e.g. --port) from 'ui'. It just worked because repo.ui is ui.
Sat, 31 Oct 2015 22:26:50 +0900 hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option
Yuya Nishihara <yuya@tcha.org> [Sat, 31 Oct 2015 22:26:50 +0900] rev 27181
hgweb: eliminate duck-typing to select hgweb or hgwebdir by command option Since createservice() was moved to hgweb and hgweb imports both hgweb_mod and hgwebdir_mod, we no longer have to force hgweb() function to select one of them by the type of 'o' variable. Let's be explicit! This patch does not change hgweb() function because it is the interface of existing WSGI and CGI scripts.
Tue, 01 Dec 2015 16:06:20 -0800 addrevision: only use the incoming base if it is a good delta (issue4975)
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 16:06:20 -0800] rev 27180
addrevision: only use the incoming base if it is a good delta (issue4975) Before this change, the 'lazydeltabase' would blindly build a delta using the base provided by the incoming bundle and try to use it. If that base was far down the revlog, the delta would be seen as "no good" and we would fall back to a full text revision. We now check if the delta is good and fallback to a computing a delta again the tipmost revision otherwise (as we would do without general delta). Later changesets will improve the logic to compute the fallback delta using the general delta logic.
Tue, 01 Dec 2015 16:22:49 -0800 addrevision: handle code path not producing delta
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 16:22:49 -0800] rev 27179
addrevision: handle code path not producing delta We would like to be able to exit the delta generation block without a valid delta (for a more flexible control flow). So we make sure we do not expand the "delta" content unless we actually have a delta. We can do it one level lower because 'delta' is initialised at None anyway. Not adding a level to the assignment prevent a line length issue.
Tue, 01 Dec 2015 15:29:11 -0800 addrevision: rename 'd' to 'delta'
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 01 Dec 2015 15:29:11 -0800] rev 27178
addrevision: rename 'd' to 'delta' That variable is quite central to the whole function. Giving it a more explicit name help with code readability.
Mon, 30 Nov 2015 11:23:15 -0800 strip: add a --keep test related to removing files from dirstate
Christian Delahousse <cdelahousse@fb.com> [Mon, 30 Nov 2015 11:23:15 -0800] rev 27177
strip: add a --keep test related to removing files from dirstate When strip builds the list of changedfiles to pass into dirstate.rebuild, it adds files blindly, including those that have been removed. This tests ensures that rebuild can handle this case.
Mon, 30 Nov 2015 11:23:15 -0800 dirstate: change debugrebuilddirstate --minimal to use dirstate.rebuild
Christian Delahousse <cdelahousse@fb.com> [Mon, 30 Nov 2015 11:23:15 -0800] rev 27176
dirstate: change debugrebuilddirstate --minimal to use dirstate.rebuild When debugrebuilddirstate --minimal is called, rebuilding the dirstate was done outside of the appropriate rebuild function. This patch makes debugrebuilddirstate use dirstate.rebuild. This was done to allow our extension to become aware debugrebuilddirstate --minimal
Tue, 01 Dec 2015 10:52:36 -0800 debugrebuilddirstate: added tests for --minimal flag
Christian Delahousse <cdelahousse@fb.com> [Tue, 01 Dec 2015 10:52:36 -0800] rev 27175
debugrebuilddirstate: added tests for --minimal flag Added tests for debugrebuilddirstate --minimal.
Tue, 01 Dec 2015 11:17:14 -0800 debugdirstate: add command to rebuildstate test to modify dirstate
Christian Delahousse <cdelahousse@fb.com> [Tue, 01 Dec 2015 11:17:14 -0800] rev 27174
debugdirstate: add command to rebuildstate test to modify dirstate Debugging the dirstate helps if you have options to add files for normal lookup or drop them from the dirstate. This patch adds a convenience command to test-rebuilddirstate.t to modify the dirstate. It will be used in the next patch to write proper tests for debugrebuilddirstate --minimal
Wed, 02 Dec 2015 06:33:52 +0000 graft: improve --continue abort message
timeless <timeless@mozdev.org> [Wed, 02 Dec 2015 06:33:52 +0000] rev 27173
graft: improve --continue abort message before, if you ran hg graft --user ... --date ... --log ... revs, and if it failed, it would suggest "hg graft --continue", but if you did that, your --user / --date / --log options were lost, because they were not persisted anywhere...
Wed, 02 Dec 2015 06:31:12 +0000 summary: mention graft
timeless <timeless@mozdev.org> [Wed, 02 Dec 2015 06:31:12 +0000] rev 27172
summary: mention graft
Wed, 02 Dec 2015 08:07:36 +0000 histedit: mention histedit-last-edit.txt on abort
timeless <timeless@mozdev.org> [Wed, 02 Dec 2015 08:07:36 +0000] rev 27171
histedit: mention histedit-last-edit.txt on abort Users may spend a lot of effort writing histedit rules, getting an abort without being told they can recover their work is very frustrating. Avoid that by telling them where to find their work.
Wed, 02 Dec 2015 07:40:42 +0000 histedit: add missing raise keyword to statement
timeless <timeless@mozdev.org> [Wed, 02 Dec 2015 07:40:42 +0000] rev 27170
histedit: add missing raise keyword to statement
Wed, 02 Dec 2015 07:39:49 +0000 histedit: improve grammar for _histedit comment
timeless <timeless@mozdev.org> [Wed, 02 Dec 2015 07:39:49 +0000] rev 27169
histedit: improve grammar for _histedit comment
Tue, 01 Dec 2015 14:44:08 -0500 test-fncache: ensure lock doesn't look held to __del__
Augie Fackler <augie@google.com> [Tue, 01 Dec 2015 14:44:08 -0500] rev 27168
test-fncache: ensure lock doesn't look held to __del__ This was showing a DeprecationWarning on Python 2.6.
Wed, 11 Nov 2015 20:07:15 -0500 commands: inline definition of localrepo.parents() and drop the method (API)
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 20:07:15 -0500] rev 27167
commands: inline definition of localrepo.parents() and drop the method (API) localrepo.parents() has relatively few users, and most of those were actually implicitly looking at the wctx, which is now made explicit via repo[None].
Wed, 11 Nov 2015 20:02:05 -0500 localrepo: document nodebookmarks
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 20:02:05 -0500] rev 27166
localrepo: document nodebookmarks
Wed, 11 Nov 2015 19:47:49 -0500 localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com> [Wed, 11 Nov 2015 19:47:49 -0500] rev 27165
localrepo: remove clone method by hoisting into hg.py hg.py was the only remaining caller of localrepo.clone(), so it's time to move some more behavior out of localrepo.
Tue, 01 Dec 2015 09:48:38 -0800 filemerge: default regular prompts to 'leave unresolved' (BC)
Siddharth Agarwal <sid0@fb.com> [Tue, 01 Dec 2015 09:48:38 -0800] rev 27164
filemerge: default regular prompts to 'leave unresolved' (BC) It makes far more sense to leave these conflicts unresolved and kick back to the user than to just assume that the local version be chosen. There are almost certainly buggy scripts and applications using Mercurial in the wild that do merges or rebases non-interactively, and then assume that if the operation succeeded there's nothing the user needs to pay attention to.
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip