Tue, 09 Feb 2016 23:35:21 +0000 destutil: ensure we offer 'hg update' hint when not at head in all cases
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 09 Feb 2016 23:35:21 +0000] rev 28161
destutil: ensure we offer 'hg update' hint when not at head in all cases In the merge case, we abort if the working copy is not at head, offering to run 'hg update' in the hint instead. In the rebase case, we do not abort in that case. Yet if no rebase destination are found, it still make sense to hint the user about running 'hg update'. So we re-introduce a conditional using this branch in the 'onheadcheck == False' case. This will get used on rebase use this function.
Mon, 15 Feb 2016 14:35:26 +0000 chg: forward umask from client to server
Jun Wu <quark@fb.com> [Mon, 15 Feb 2016 14:35:26 +0000] rev 28160
chg: forward umask from client to server This is necessary to make chg test pass on test-inherit-mode.t.
Mon, 15 Feb 2016 14:28:17 +0000 chgserver: add setumask method
Jun Wu <quark@fb.com> [Mon, 15 Feb 2016 14:28:17 +0000] rev 28159
chgserver: add setumask method Before this patch, the server won't inherit umask from the client, which will fail test-inherit-mode.t. This patch provides a way for the client to change umask of the server, similar to chdir and setenv.
Tue, 16 Feb 2016 19:21:05 +0000 chgserver: use _readlist and _readstr
Jun Wu <quark@fb.com> [Tue, 16 Feb 2016 19:21:05 +0000] rev 28158
chgserver: use _readlist and _readstr Use _readlist and _readstr to make the code shorter.
Mon, 15 Feb 2016 14:20:41 +0000 commandserver: use _readlist
Jun Wu <quark@fb.com> [Mon, 15 Feb 2016 14:20:41 +0000] rev 28157
commandserver: use _readlist Use _readlist introduced in previous commit to make the code shorter.
Tue, 16 Feb 2016 19:11:45 +0000 commandserver: add _readstr and _readlist
Jun Wu <quark@fb.com> [Tue, 16 Feb 2016 19:11:45 +0000] rev 28156
commandserver: add _readstr and _readlist Reading a string or a list are common operations for commandserver and chgserver. This patch adds _readstr and _readlist to avoid duplication.
Wed, 10 Feb 2016 16:59:34 +0000 extensions: add notloaded method to return extensions failed to load
Jun Wu <quark@fb.com> [Wed, 10 Feb 2016 16:59:34 +0000] rev 28155
extensions: add notloaded method to return extensions failed to load Before this patch, there is no easy way to detect if there are extensions failed to load. While this is okay for most situations, chgserver is designed to preload all extensions specified in config and does need the information. This patch adds extensions.notloaded() to return names of extensions failed to load.
Mon, 15 Feb 2016 14:57:06 +0000 histedit: renaming parts to which _histedit was split
Kostia Balytskyi <ikostia@fb.com> [Mon, 15 Feb 2016 14:57:06 +0000] rev 28154
histedit: renaming parts to which _histedit was split I recently broke _histedit into multiple functions, each of which had 'action' in its name. This is a little bit confusing since 'action' is the word for an individual histedit plan item (such as edit or pick). To avoid this confusion, these functions are now renamed to contain 'histedit' as part of their names.
Mon, 15 Feb 2016 12:07:33 +0000 histedit: break _histedit into smaller pieces (add _finishaction)
Kostia Balytskyi <ikostia@fb.com> [Mon, 15 Feb 2016 12:07:33 +0000] rev 28153
histedit: break _histedit into smaller pieces (add _finishaction) This is a part of a bigger effort to refactor histedit with ultimate goal of understanding it.
Mon, 15 Feb 2016 17:24:42 +0000 automv: switch to specifying the similarity as an integer (0-100)
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 17:24:42 +0000] rev 28152
automv: switch to specifying the similarity as an integer (0-100) This is consistent with the addremove --similarity option.
Mon, 15 Feb 2016 17:16:07 +0000 automv: do not release lock between marking files and the actual commit
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 17:16:07 +0000] rev 28151
automv: do not release lock between marking files and the actual commit
Mon, 15 Feb 2016 17:13:18 +0000 automv: reuse existing scutil._markchanges() function
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 17:13:18 +0000] rev 28150
automv: reuse existing scutil._markchanges() function
Mon, 15 Feb 2016 17:01:33 +0000 automv: improve function docstrings
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 17:01:33 +0000] rev 28149
automv: improve function docstrings
Mon, 15 Feb 2016 16:51:31 +0000 automv: remove test for 'developer mode'
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 16:51:31 +0000] rev 28148
automv: remove test for 'developer mode' The tests no longer use this mode, the test is entirely redundant.
Mon, 15 Feb 2016 16:44:30 +0000 automv: add some context for the tests
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 16:44:30 +0000] rev 28147
automv: add some context for the tests
Mon, 15 Feb 2016 16:40:06 +0000 automv: simplify retrieving the status
Martijn Pieters <mjpieters@fb.com> [Mon, 15 Feb 2016 16:40:06 +0000] rev 28146
automv: simplify retrieving the status The default is to show the status in the current working copy, no need to pass in the parent and working copy context here.
Mon, 08 Feb 2016 05:56:25 +0000 tests: change branches test to work cross platform
timeless <timeless@mozdev.org> [Mon, 08 Feb 2016 05:56:25 +0000] rev 28145
tests: change branches test to work cross platform While it is not easy to make a file 000 on Windows, you can emulate most of the behaviors by replacing the file with a directory.
Mon, 15 Feb 2016 10:48:36 +0000 histedit: change string literals to constants in goal naming
Kostia Balytskyi <ikostia@fb.com> [Mon, 15 Feb 2016 10:48:36 +0000] rev 28144
histedit: change string literals to constants in goal naming This is a part of bigger effort to refactor histedit with ultimate goal of understanding it.
Sun, 07 Feb 2016 18:08:59 +0900 run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 18:08:59 +0900] rev 28143
run-tests: add --chg option to install and run tests using chg Because the temporary installation directory is shared between hg and chg, --chg is not allowed if --with-hg option is specified. Also, --chg option does not work on FreeBSD because "make" command is hard-coded. These limitations can be improved later. Almost all tests will fail with chg right now.
Sun, 07 Feb 2016 16:34:12 +0900 run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 16:34:12 +0900] rev 28142
run-tests: add --with-chg option to run tests using chg Unlike --with-hg=/path/to/chg, this option allows us to start and clean up command servers in isolated environment. And we can specify the hg command as well as the chg command.
Tue, 09 Feb 2016 23:30:41 +0000 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 09 Feb 2016 23:30:41 +0000] rev 28141
destutil: add more precise error classes for destmerge Having exception classes more precise than 'Abort' will allow us to properly catch "nothing to rebase" situations when we will be using 'destmerge' in rebase.
Mon, 08 Feb 2016 22:58:15 +0000 destutil: allow to disable the "on head check" in destmerge
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 22:58:15 +0000] rev 28140
destutil: allow to disable the "on head check" in destmerge 'hg merge' refuses to pick a default destination if the working copy is not on a head. This is a very sensible default for 'hg merge' but 'hg rebase' should work in this situation. So we introduce a way to disable this check. It will soon be used by rebase.
Mon, 08 Feb 2016 19:32:29 +0100 destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 19:32:29 +0100] rev 28139
destutil: allow to specify an explicit source for the merge We can now specify from where the merge is performed. The experimental revset is updated to take revisions as argument, allowing to test the feature. This will become very useful for pick the 'rebase' default destination. For this reason, we also exclude all descendants from the rebased set from the candidate destinations. This descendants exclusion was not necessary for merge as default destination would not be picked from anything else than a head. I'm not super excited with the current error messages, but I would prefer to delay an overall messages rework once 'hg rebase' is done getting a default destination aligned with 'hg merge'.
Mon, 08 Feb 2016 18:12:06 +0100 destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 18:12:06 +0100] rev 28138
destutil: remove current head from list of candidates early While 'hg merge' will refuse to pick a default destination if the working copy is not on a head, this will be a common and valid case for rebase. In this case, we will need to exclude from the candidate destination all descendants from the rebased set. We make a step forward in that direction by removing parents of the working copy from the candidate destinations instead of manually filtering the working copy parent at the end of the process. This will make the extra step of filtering descendant much simpler in a future changeset.
Mon, 08 Feb 2016 17:53:44 +0100 destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 17:53:44 +0100] rev 28137
destutil: add an 'action' layer to the destmerge message dictionary We'll introduce messages for 'rebase' soon, so we introduce a way to select a message based on the action being performed.
Tue, 09 Feb 2016 23:49:55 +0000 rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 09 Feb 2016 23:49:55 +0000] rev 28136
rebase: extract rebaseset and destination computation in a function The whole rebase function is gargantuan and this computation is almost 100 lines long. We extract it in a dedicated function as it is independent from the rest of the rebase code. Having it in its own function will make it easier to rework the default destination logic.
Tue, 09 Feb 2016 22:47:20 +0000 tests: have a more elaborated test for _destrebase
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 09 Feb 2016 22:47:20 +0000] rev 28135
tests: have a more elaborated test for _destrebase The previous repo had a single lineage and a single head, pretty boring for rebase related testing.
Sun, 14 Feb 2016 21:15:59 +0000 histedit: break _histedit function into smaller pieces
Kostia Balytskyi <ikostia@fb.com> [Sun, 14 Feb 2016 21:15:59 +0000] rev 28134
histedit: break _histedit function into smaller pieces We add _getgoal, _validateargs. This is a part of bigger effort to refactor histedit. Initial steps are to break _histedit function into smaller pieces which will supposedly be more understandable. After this is done, I will have a better understanding of how histedit works and apply that to fix issue4800.
Sun, 14 Feb 2016 21:00:05 +0000 histedit: break _histedit function into smaller pieces (add _continueaction)
Kostia Balytskyi <ikostia@fb.com> [Sun, 14 Feb 2016 21:00:05 +0000] rev 28133
histedit: break _histedit function into smaller pieces (add _continueaction) This is a part of bigger effort to refactor histedit. Initial steps are to break _histedit function into smaller pieces which will supposedly be more understandable. After this is done, I will have a better understanding of how histedit works and apply that to fix issue4800.
Mon, 01 Feb 2016 17:20:51 +0000 histedit: break _histedit function into smaller pieces (add _newaction)
Kostia Balytskyi <ikostia@fb.com> [Mon, 01 Feb 2016 17:20:51 +0000] rev 28132
histedit: break _histedit function into smaller pieces (add _newaction) This is a part of bigger effort to refactor histedit. Initial steps are to break _histedit function into smaller pieces which will supposedly be more understandable. After this is done, I will have a better understanding of how histedit works and apply that to fix issue4800.
Mon, 01 Feb 2016 14:12:38 +0000 histedit: break _histedit function into smaller pieces (add _editplanaction)
Kostia Balytskyi <ikostia@fb.com> [Mon, 01 Feb 2016 14:12:38 +0000] rev 28131
histedit: break _histedit function into smaller pieces (add _editplanaction) This is a part of bigger effort to refactor histedit. Initial steps are to break _histedit function into smaller pieces which will supposedly be more understandable. After this is done, I will have a better understanding of how histedit works and apply that to fix issue4800.
Mon, 01 Feb 2016 12:51:20 +0000 histedit: break _histedit function into smaller pieces (add _abortaction)
Kostia Balytskyi <ikostia@fb.com> [Mon, 01 Feb 2016 12:51:20 +0000] rev 28130
histedit: break _histedit function into smaller pieces (add _abortaction) This is a part of bigger effort to refactor histedit. Initial steps are to break _histedit function into smaller pieces which will supposedly be more understandable. After this is done, I will have a better understanding of how histedit works and apply that to fix issue4800.
Mon, 08 Feb 2016 13:52:51 +0000 automv: new experimental extension
Martijn Pieters <mjpieters@fb.com> [Mon, 08 Feb 2016 13:52:51 +0000] rev 28129
automv: new experimental extension Automatically detect moves and record them at commit time. This extension was originally developed at https://bitbucket.org/facebook/hg-experimental
Fri, 05 Feb 2016 21:25:44 -0800 match: override 'visitdir' in subdirmatcher
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 Feb 2016 21:25:44 -0800] rev 28128
match: override 'visitdir' in subdirmatcher The manifest.manifest class has a _treeinmem member than one can manually set to True to test that the treemanifest class works as a drop-in replacement for manifestdict (which is mostly a requirement for treemanifest repos to work). However, it doesn't quite work at the moment. These tests fail: test-largefiles-misc.t test-rebase-newancestor.t test-subrepo.t test-subrepo-deep-nested-change.t test-subrepo-recursion.t All but test-rebase-newancestor.t fail because they trigger calls to subdirmatcher.visitdir(), which tries to access a _excluderoots field that does not exist on the subdirmatcher. Let's fix that by overriding visitdir() in a similar way to how matchfn is overridden, i.e. by prepending the directory before calling the superclass method.
Sat, 09 Jan 2016 13:22:26 +0900 run-tests: remove useless "failed" flag from addOutputMismatch()
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jan 2016 13:22:26 +0900] rev 28127
run-tests: remove useless "failed" flag from addOutputMismatch() It never be set to True.
Sat, 09 Jan 2016 13:20:15 +0900 tests: load json with no fallback
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jan 2016 13:20:15 +0900] rev 28126
tests: load json with no fallback The json module should be available in Python 2.6 or newer.
Tue, 15 Dec 2015 23:50:48 +0900 config: drop progress extension from sample hgrc as it is in core now
Yuya Nishihara <yuya@tcha.org> [Tue, 15 Dec 2015 23:50:48 +0900] rev 28125
config: drop progress extension from sample hgrc as it is in core now
Thu, 04 Feb 2016 03:47:38 +0000 shelve: suggest the correct tool to continue (not unshelve)
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 03:47:38 +0000] rev 28124
shelve: suggest the correct tool to continue (not unshelve) Suggest committing (or whatever the current activity is), via wrongtooltocontinue which uses howtocontinue.
Thu, 04 Feb 2016 03:47:00 +0000 histedit: suggest the correct tool to continue (not histedit)
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 03:47:00 +0000] rev 28123
histedit: suggest the correct tool to continue (not histedit) Suggest committing (or whatever the current activity is), via wrongtooltocontinue which uses howtocontinue.
Thu, 04 Feb 2016 03:46:38 +0000 rebase: suggest the correct tool to continue (not rebase)
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 03:46:38 +0000] rev 28122
rebase: suggest the correct tool to continue (not rebase) Suggest committing (or whatever the current activity is), via wrongtooltocontinue which uses howtocontinue.
Thu, 04 Feb 2016 03:45:44 +0000 graft: suggest the correct tool to continue (not graft)
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 03:45:44 +0000] rev 28121
graft: suggest the correct tool to continue (not graft) Add test coverage for graft --continue without starting. Suggest committing (or whatever the current activity is), via wrongtooltocontinue which uses howtocontinue.
Sun, 14 Feb 2016 16:16:17 +0000 cmdutil: provide a way to report how to continue
timeless <timeless@mozdev.org> [Sun, 14 Feb 2016 16:16:17 +0000] rev 28120
cmdutil: provide a way to report how to continue checkafterresolved allows Mercurial to suggest what command to use next. If users try to continue the wrong command, there wasn't a good way for the command to suggest what to do next. Split checkmdutil into howtocontinue and checkafterresolved. Introduce wrongtooltocontinue which handles raising an Abort with the hint from howtocontinue.
Sun, 14 Feb 2016 01:33:55 +0900 hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 14 Feb 2016 01:33:55 +0900] rev 28119
hg: make cachedlocalrepo cache appropriate repoview object Before this patch, 'cachedlocalrepo' always caches "visible" repoview object, because 'cachedlocalrepo' uses "visible" repoview returned by 'hg.repository()' without any additional processing. If the client of 'cachedlocalrepo' wants "served" repoview, some objects to be cached are discarded unintentionally. 1. 'cachedlocalrepo' newly caches "visible" repoview object (call it VIEW1) 2. 'cachedlocalrepo' returns VIEW1 to the client of it at 'fetch()' 3. the client gets "served" repoview object by 'filtered("served")' on VIEW1 (call this "served" repoview VIEW2) 4. accessing to 'repo.changelog' implies: - instantiation of changelog via 'localrepository.changelog' - instantiation of "filtered changelog" via 'repoview.changelog' 5. "filtered changelog" above is cached in VIEW2 6. VIEW2 is discarded after processing, because there is no reference to it 7. 'cachedlocalrepo' returns VIEW1 cached at (1) above to the client at next 'fetch()' 8. 'filtered("served")' on VIEW1 at the client side creates new "served" repoview again, because VIEW1 is "visible" (call this new "served" repoview VIEW3) 9. accessing to 'repo.changelog' implies instantiation of filtered changelog again, because "filtered changelog" is cached in VIEW2 at (5), but not in VIEW3 currently used 10. (go to (7) above) As described above, "served" repoview object and "filtered changelog" cached in it are discarded always, even if the repository itself hasn't been changed since last access. For example, in the case of 'hgweb_mod.hgweb', "newly caching" occurs, when: - all cached objects are already assigned to another threads (in this case, repoview is created in 'cachedlocalrepo.copy()') - or, stat of '00changelog.i' is changed from last access (in this case, repoview is created in 'cachedlocalrepo.fetch()') once changes are pushed via HTTP, this always occurs. The root cause of this inefficiency is that 'cachedlocalrepo' always caches "visible" repoview object, even if the client of it wants another view. To make 'cachedlocalrepo' cache appropriate repoview object, this patch adds additional filtering on the repo object returned by 'hg.repository()'. It is assumed that initial repoview object should be already filtered by expected view. After this patch: - 'filtered("served")' on VIEW1 at (3)/(7) above returns VIEW1 itself, because VIEW1 is now "served", and - VIEW2 and VIEW3 equal VIEW1 - therefore, "filtered changelog" is cached in VIEW1, and reused intentionally
Sun, 14 Feb 2016 00:45:17 +0000 rebase: perform update through the 'update' command
Pierre-Yves David <pierre-yves.david@fb.com> [Sun, 14 Feb 2016 00:45:17 +0000] rev 28118
rebase: perform update through the 'update' command The update logic have grow more and more complicated over time (eg bookmark movement, new destination logic, warning on other head, etc). The rebase extension was reimplementing its own basic version of update to be used by 'hg pull --rebase'. We remove the custom code and use a combination of higher level functions. A test is added to check that the update is properly warning about other branch heads.
Sat, 13 Feb 2016 16:59:32 +0000 rebase: 'hg pull --rebase' now update only if there was nothing to rebase
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 13 Feb 2016 16:59:32 +0000] rev 28117
rebase: 'hg pull --rebase' now update only if there was nothing to rebase I recently discovered that 'hg pull --rebase' was also running an update. And it was running it in all cases as long as the update would move the working copy somewhere else... This felt wrong and it actually is. This 'update' call is introduced in 92455c1d6f83. In that commit the intent is very clear. The update should happen only when there was nothing to rebase. The implementation did not check if a rebase was performed because, at that time, rebase would always leave you on the top most changeset. Being on that top most changeset result in a no-op update and the step was skipped. However 9c78ed396075f changed rebase behavior to preserve the working copy parent, so if we are not on a head at pull time, the code performs both a rebase and an update. This changeset introduce a test for this case and restore the intended behavior. There are other issues with this custom update code but they will be addressed in later changeset (eg: own destination logic, lack of heads warning). I'm not super happy with the explicitly comparison 'rebase(...) == 1' but a later series will have a cleaner way to handle it anyway (while making 'rebase' pick its default destination like 'merge').
Mon, 08 Feb 2016 14:17:11 -0800 filectx: replace use of _filerev with _filenode
Durham Goode <durham@fb.com> [Mon, 08 Feb 2016 14:17:11 -0800] rev 28116
filectx: replace use of _filerev with _filenode _filerev depends on the filelog implementation using revlogs and linkrevs. Alternative implementations, like remotefilelog, do not have rev numbers, so this call fails. Replacing it with _filenode means it doesn't rely on rev numbers, and doesn't cost anything extra, since _filerev is using _filenode under the hood anyway.
Wed, 03 Feb 2016 15:53:48 -0800 verify: extract "manifest" constant into variable
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 Feb 2016 15:53:48 -0800] rev 28115
verify: extract "manifest" constant into variable The "manifest" label that's used in error messages will instead be the directory path for subdirectory manifests (not the root manifest), so let's extract the constant to a variable already to make future patches simpler.
Sun, 07 Feb 2016 22:46:20 -0800 verify: use similar language for missing manifest and file revisions
Martin von Zweigbergk <martinvonz@google.com> [Sun, 07 Feb 2016 22:46:20 -0800] rev 28114
verify: use similar language for missing manifest and file revisions When a changeset refers to a manifest revision that's not found in the manifest log, we say "changeset refers to missing revision X", but when a manifest refers to file revision that's not found in the filelog, we say "X in manifests not found". The language used for missing manifest revisions seems clearer, so let's use that for missing filelog revisions too.
Tue, 02 Feb 2016 10:42:28 -0800 verify: include "manifest" prefix in a few more places
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 Feb 2016 10:42:28 -0800] rev 28113
verify: include "manifest" prefix in a few more places We include the "manifest" prefix on most other errors, so it seems consistent to add them to the remaining messages too. Also, having the "manifest" prefix will be more consistent with having the directory prefix there when we add support for treemanifests. With the "manifest" at the beginning, let's remove the now-redundant "manifest" in the message itself.
Tue, 02 Feb 2016 09:46:14 -0800 verify: drop unnecessary check for nullid
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 Feb 2016 09:46:14 -0800] rev 28112
verify: drop unnecessary check for nullid In eb914541a950 (verify: filter messages about missing null manifests (issue2900), 2011-07-13), we started ignoring nullid in the list of manifest nodeids to check. Then, in b32a30da608d (verify: do not choke on valid changelog without manifest, 2012-08-21), we stopped adding nullid to the list to start with. So let's drop the left-over check now.
Sun, 31 Jan 2016 00:10:56 -0800 verify: move cross-checking of changeset/manifest out of _crosscheckfiles()
Martin von Zweigbergk <martinvonz@google.com> [Sun, 31 Jan 2016 00:10:56 -0800] rev 28111
verify: move cross-checking of changeset/manifest out of _crosscheckfiles() Reasons: * _crosscheckfiles(), as the name suggests, is about checking that the set of files files mentioned in changesets match the set of files mentioned in the manifests. * The "checking" in _crosscheckfiles() looked rather strange, as it just emitted an error for *every* entry in mflinkrevs. The reason was that these were the entries remaining after the call to _verifymanifest(). Moving all the processing of mflinkrevs into _verifymanifest() makes it much clearer that it's the remaining entries that are a problem. Functional change: progress is no longer reported for "crosschecking" of missing manifest entries. Since the crosschecking phase takes a tiny fraction of the verification, I don't think this is a problem. Also, any reports of "changeset refers to unknown manifest" will now come before "crosschecking files in changesets and manifests".
Sun, 31 Jan 2016 21:55:52 -0800 tests: add tests for missing revlogs and revlog entries
Martin von Zweigbergk <martinvonz@google.com> [Sun, 31 Jan 2016 21:55:52 -0800] rev 28110
tests: add tests for missing revlogs and revlog entries The verify code is pretty poorly tested. It's easy to test missing revlogs and missing revlog entries, so let's add tests for that. Also add some more tests corrupting each type of revlog, so we test the messages presented when reading a revision fails. The pure and native implementations produce different error messages, so we have to use (glob) in the tests.
Fri, 12 Feb 2016 14:50:10 -0800 hook: don't crash on syntax errors in python hooks
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Feb 2016 14:50:10 -0800] rev 28109
hook: don't crash on syntax errors in python hooks We had some real-world cases where syntax errors in Python hooks would crash the whole process and leave it in an indeterminate state. Handle those better.
Fri, 12 Feb 2016 11:44:35 -0800 hook: for python hook exceptions, add note to run with --traceback
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Feb 2016 11:44:35 -0800] rev 28108
hook: for python hook exceptions, add note to run with --traceback Just like with ImportErrors, it isn't obvious that --traceback will produce helpful debugging output here.
Fri, 12 Feb 2016 11:42:18 -0800 hook: add tests for failing post- python hooks
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Feb 2016 11:42:18 -0800] rev 28107
hook: add tests for failing post- python hooks I couldn't find any tests for this.
Fri, 12 Feb 2016 11:34:04 -0800 hook: even fewer parentheses for load errors
Siddharth Agarwal <sid0@fb.com> [Fri, 12 Feb 2016 11:34:04 -0800] rev 28106
hook: even fewer parentheses for load errors Missed this one.
Mon, 08 Feb 2016 17:34:32 +0100 destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 17:34:32 +0100] rev 28105
destutil: document various failure cases We document what various conditional branch mean and clarify that they are exclusive (since they all end up in with exception raised).
Mon, 08 Feb 2016 14:56:28 +0100 destutil: consistently retrieve 'p1' and 'branch'
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 14:56:28 +0100] rev 28104
destutil: consistently retrieve 'p1' and 'branch' We already read p1 from the dirstate so let's read the branch from it too.
Mon, 08 Feb 2016 14:55:58 +0100 merge: give priority to "not at head" failures for bare 'hg merge'
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 14:55:58 +0100] rev 28103
merge: give priority to "not at head" failures for bare 'hg merge' We refuse to pick a destination for a bare 'hg merge' if the working copy is not at head. This is meant to prevent strange merge from user who forget to update. (Moreover, such merge does not reduce actually the number of heads) However, we were doing that as the last possible failure type. So user were recommended to merge with an explicit head (from this bad location) if the branch had too many heads. We now make "not on branch heads" class of failure the first things to check and fail on. The one test that change was actually trying to check for these failure (and did not). The new test output is correct.
Tue, 09 Feb 2016 21:14:37 +0000 destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 09 Feb 2016 21:14:37 +0000] rev 28102
destutil: extract all 'mergedest' abort messages into a dictionary We plan to be able to reuse this function for rebase. The error message explicitly refers to "merge" in multiple places. So we'll need to be able to use different messages. The first step of that is to extract all messages in a dedicated dictionary and use them indirectly. As a side effect it clarifies the actual function and opens the way to various cleanups and fixes in future changesets.
Mon, 08 Feb 2016 14:03:45 +0100 tests: add an explicit destination in some rebase tests
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 14:03:45 +0100] rev 28101
tests: add an explicit destination in some rebase tests As we will make 'rebase' behave more like 'merge', it will no longer pick 'max(branch(.))' as the default destination. We have to hard code the expected destination is multiple tests where it matters. After a careful inspection none of theses tests really cares about the default destination behavior and just omitted one out of laziness.
Mon, 08 Feb 2016 14:02:53 +0100 tests: remove third head in some of the 'rebase-parameters' tests
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 08 Feb 2016 14:02:53 +0100] rev 28100
tests: remove third head in some of the 'rebase-parameters' tests These tests do not care about that extra branch at all. In future changeset we will make rebase behave like merge and abort in case of an ambiguous destination (eg: multiple other heads) and that extra branch will make the command invocation breaks. We preventively remove this extra branch from the relevant tests in an independant changeset to reduce noise and increase confidence in the final change.
Sun, 07 Feb 2016 15:21:39 +0900 run-tests: allow to specify executable of any name by --with-hg
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 15:21:39 +0900] rev 28099
run-tests: allow to specify executable of any name by --with-hg If the executable is not named as "hg", TTest runner inserts alias. This way, we can run tests with chg. But it is still warned because the alias does not always work. We do "$BINDIR"/hg in a few places.
Sun, 07 Feb 2016 16:02:41 +0900 run-tests: drop redundant assignment to BINDIR
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 16:02:41 +0900] rev 28098
run-tests: drop redundant assignment to BINDIR We do it a few lines after.
Sun, 07 Feb 2016 16:00:05 +0900 run-tests: cast --with-hg option to bytes consistently at parseargs()
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 16:00:05 +0900] rev 28097
run-tests: cast --with-hg option to bytes consistently at parseargs() parseargs() sets bytes to options.with_hg if --local is specified, so do the same for --with-hg.
Sun, 07 Feb 2016 15:53:02 +0900 run-tests: do not compare bytes with str while ordering tests
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Feb 2016 15:53:02 +0900] rev 28096
run-tests: do not compare bytes with str while ordering tests It failed on Python 3.
Tue, 09 Feb 2016 17:51:44 -0800 clonebundles: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:51:44 -0800] rev 28095
clonebundles: use absolute_import
Tue, 09 Feb 2016 17:50:45 -0800 churn: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:50:45 -0800] rev 28094
churn: use absolute_import
Tue, 09 Feb 2016 17:34:32 -0800 children: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:34:32 -0800] rev 28093
children: use absolute_import
Tue, 09 Feb 2016 17:33:10 -0800 censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:33:10 -0800] rev 28092
censor: use absolute_import
Tue, 09 Feb 2016 17:31:50 -0800 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:31:50 -0800] rev 28091
bugzilla: use absolute_import
Tue, 09 Feb 2016 17:30:38 -0800 blackbox: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:30:38 -0800] rev 28090
blackbox: use absolute_import
Tue, 09 Feb 2016 17:29:39 -0800 acl: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 09 Feb 2016 17:29:39 -0800] rev 28089
acl: use absolute_import Continuing the march towards Python 3.
Thu, 11 Feb 2016 17:23:10 -0800 checkunknown: audit path before checking if it's a file or link
Durham Goode <durham@fb.com> [Thu, 11 Feb 2016 17:23:10 -0800] rev 28088
checkunknown: audit path before checking if it's a file or link Previously we would lstat the file to see if it was a file or a link before attempting to process it. If the file happened to exist across a symlink, and if that symlink was pointing to a network file system, that check could be very expensive. The new logic audit's the path to avoid symlinks before performing the lstat on the file itself. In our situation, this shaved 10 minutes off of certain hg updates. 300 files * (2 seconds - the network filesystem lookup time)
Thu, 11 Feb 2016 17:04:33 -0800 pathauditor: change parts verification order to be root first
Durham Goode <durham@fb.com> [Thu, 11 Feb 2016 17:04:33 -0800] rev 28087
pathauditor: change parts verification order to be root first Previously, when we verified the parts of a path in the auditor, we would validate the deepest directory first, then it's parent, and so on up to the root. If there happened to be a symlink in the chain, that meant our first check would likely traverse that symlink. In some cases that symlink might point to a network filesystem that is expensive, and therefore this simple check could be very slow. The fix is to check the path parts starting at the root and working our way down. This has a minor performance difference in that we used to be able to short circuit from the audit if we reached a directory that had already been checked. Now we can't, but the cost is N dictionary look ups, where N is the number of parts in the path, which should be fairly minor.
Tue, 19 Jan 2016 22:31:59 +0900 chg: forward job control signals to worker process (issue5051)
Yuya Nishihara <yuya@tcha.org> [Tue, 19 Jan 2016 22:31:59 +0900] rev 28086
chg: forward job control signals to worker process (issue5051) This is necessary to suspend/resume long pulls, interactive curses session, etc. The implementation is based on emacsclient, but our version doesn't test if chg process is foreground or not before propagating SIGCONT. This is because chg isn't always an interactive session. If we copy the SIGTTIN/SIGTTOU emulation from emacsclient, non-interactive session can't be moved to a background job. $ chg pull ^Z suspended $ bg %1 [1] continued [1] suspended (tty input) # wrong https://github.com/emacs-mirror/emacs/blob/0e96320/lib-src/emacsclient.c#L1094
Fri, 29 Jan 2016 22:52:16 +0900 chg: verify return value of sigaction() and sigemptyset()
Yuya Nishihara <yuya@tcha.org> [Fri, 29 Jan 2016 22:52:16 +0900] rev 28085
chg: verify return value of sigaction() and sigemptyset() They should never fail, but it couldn't hurt to be a paranoid.
Fri, 29 Jan 2016 22:42:22 +0900 chg: initialize sigaction fields more reliably
Yuya Nishihara <yuya@tcha.org> [Fri, 29 Jan 2016 22:42:22 +0900] rev 28084
chg: initialize sigaction fields more reliably It seems calling memset() and sigemptyset() is common pattern to initialize sigaction. And strictly speaking, sigset_t must be initialized by sigemptyset() or sigfillset(). I saw git and uwsgi do that way, so let's follow them.
Fri, 12 Feb 2016 06:25:05 -0800 tests: confirm that a badly documented extension doesn't cause a crash
Simon Farnsworth <simonfar@fb.com> [Fri, 12 Feb 2016 06:25:05 -0800] rev 28083
tests: confirm that a badly documented extension doesn't cause a crash An external extension whose docstring doesn't conform to Mercurial standards used to cause crashes. Test that we omit such extensions when you do a keyword search.
Fri, 12 Feb 2016 14:24:48 +0000 bookmarks: avoid creating a nested repository during testing
Martijn Pieters <mjpieters@fb.com> [Fri, 12 Feb 2016 14:24:48 +0000] rev 28082
bookmarks: avoid creating a nested repository during testing This helps the test to pass with hgwatchman, which would otherwise need to be taught about a nested .hg directory. hgwatchman already blacklists test-nested-repo.t which covers the actual usecase
Mon, 08 Feb 2016 15:35:30 -0800 dispatch: strip command line options like config file options
Tony Tung <ttung@fb.com> [Mon, 08 Feb 2016 15:35:30 -0800] rev 28081
dispatch: strip command line options like config file options Currently, whitespace in command line --config options are considered significant while whitespace in config files are not considered significant. This diff strips the leading and trailing whitespace from command line config options.
Thu, 11 Feb 2016 22:52:23 -0800 hook: for python hook ImportErrors, add note to run with --traceback
Siddharth Agarwal <sid0@fb.com> [Thu, 11 Feb 2016 22:52:23 -0800] rev 28080
hook: for python hook ImportErrors, add note to run with --traceback I personally found it completely non-obvious that --traceback prints out stack traces for failed imports.
Thu, 11 Feb 2016 22:41:20 -0800 hook: fewer parentheses for hook load errors
Siddharth Agarwal <sid0@fb.com> [Thu, 11 Feb 2016 22:41:20 -0800] rev 28079
hook: fewer parentheses for hook load errors This matches 'hook failed' warnings. We're also going to add hints to some of the hook load errors. Without this change we'd have two pairs of parens for a single error message, which looks really cluttered.
Thu, 11 Feb 2016 22:02:52 -0800 hook: use sys.exc_info rather than the deprecated equivalents
Siddharth Agarwal <sid0@fb.com> [Thu, 11 Feb 2016 22:02:52 -0800] rev 28078
hook: use sys.exc_info rather than the deprecated equivalents sys.exc_type etc have been deprecated since Python 1.5.
Thu, 11 Feb 2016 23:15:34 +0900 doc: describe full help document hierarchy to create a valid link in HTML
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 11 Feb 2016 23:15:34 +0900] rev 28077
doc: describe full help document hierarchy to create a valid link in HTML For example, ":hg:`help config.default-push`" creates an invalid link to "hgrc.5.html#default-push" in HTML, but ":hg:`help config.paths.default-push`" creates a valid link to "hgrc.5.html#paths".
Thu, 11 Feb 2016 23:15:34 +0900 doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 11 Feb 2016 23:15:34 +0900] rev 28076
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html Before this patch, ":hg:`help config.SECTION`" in online help text is translated to a link to "hg.1.html#config.SECTION" in HTML unintentionally. This patch translates from :hg:`help config.SECTION` in online help text to a valid link to "hgrc.5.html#SECTION" in HTML. This patch ignores element(s) under "SECTION" (e.g. "ITEM" of ":hg:`help config.SECTION.ITEM`"), because there is no way to refer directly to it in HTML, yet.
Thu, 11 Feb 2016 23:15:34 +0900 doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 11 Feb 2016 23:15:34 +0900] rev 28075
doc: translate from :hg:`help config` to a valid link to hgrc.5.html Before this patch, ":hg:`help config`" in online help text is translated to a link to "hg.1.html#config" in HTML, even though actual "hg help config" shows not help for "hg config" command but "config" help topic, and all of current ":hg:`help config`" expects the latter. This patch translates from ":hg:`help config`" in online help text to a link to "hgrc.5.html" in HTML as expected. This patch also allows ":hg:`help -c COMMAND`" style to link "hg.1.html#COMMAND" for readability.
Thu, 11 Feb 2016 23:15:34 +0900 i18n: calculate correct line number in source of messages to be translated
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 11 Feb 2016 23:15:34 +0900] rev 28074
i18n: calculate correct line number in source of messages to be translated Before this patch, line number in source of the message to be translated is wrong in hg.pot, if corresponded message is placed after ".. DIRECTIVE::", because number of lines related to such directive isn't added to variable "delta", which holds number of untranslated lines in given text. This patch always adds "2" to "delta", because text block is split into translation units by "\n\n".
Wed, 10 Feb 2016 12:39:25 -0800 revsetbenchmark: handle exception case
Durham Goode <durham@fb.com> [Wed, 10 Feb 2016 12:39:25 -0800] rev 28073
revsetbenchmark: handle exception case If the revset being benchmarked has an exception, the handling code was encountering an error because the exception did not always have an "output" attribute (I think it's a python 2.7 thing).
Wed, 10 Feb 2016 09:06:08 -0800 merge: minimize conflicts when common base is not shown (issue4447)
Ryan McElroy <rmcelroy@fb.com> [Wed, 10 Feb 2016 09:06:08 -0800] rev 28072
merge: minimize conflicts when common base is not shown (issue4447) Previously, two changes that were nearly, but not quite, identical would result in large merge conflict regions that looked very similar, and were thus very confusing to users, and lead people used to other source control systems to claim that "mercurial's merge algorithms suck". In the relatively common case of a new file being introduced in two branches with very slight modifications, the old behavior would show the entire file as a conflict, and it would be very difficult for a user to determine what was going on. In the past, mercurial attempted to solve this with a "very smart" algorithm that would find all common lines, but this has significant problems as described in 2ea6d906cf9b. Instead, we use a "very dumb" algorithm introduced in the previous patch that simply matches lines at the periphery of conflict regions. This minimizes most conflict regions well, though there may still be some degenerate edge cases, like small modification to the beginning and end of a large file.
Wed, 10 Feb 2016 08:25:03 -0800 merge: introduce method to minimize merge regions
Ryan McElroy <rmcelroy@fb.com> [Wed, 10 Feb 2016 08:25:03 -0800] rev 28071
merge: introduce method to minimize merge regions In the next diff, we will use this to trim down the start and end of conflict regions where the A and B sides both made the same changes.
Tue, 09 Feb 2016 15:25:09 -0800 merge: add some useful documentation
Ryan McElroy <rmcelroy@fb.com> [Tue, 09 Feb 2016 15:25:09 -0800] rev 28070
merge: add some useful documentation
Sun, 27 Dec 2015 19:58:11 +0900 encoding: backport paranoid escaping from templatefilters.jsonescape()
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Dec 2015 19:58:11 +0900] rev 28069
encoding: backport paranoid escaping from templatefilters.jsonescape() This was introduced by 55c763926a28. It is required to embed JSON data in HTML page. Convince yourself here: http://escape.alf.nu/1
Sun, 27 Dec 2015 19:28:34 +0900 encoding: add option to escape non-ascii characters in JSON
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Dec 2015 19:28:34 +0900] rev 28068
encoding: add option to escape non-ascii characters in JSON This is necessary for hgweb to embed JSON data in HTML. JSON data must be able to be embedded in non-UTF-8 HTML page so long as the page encoding is compatible with ASCII. According to RFC 7159, non-BMP character is represented as UTF-16 surrogate pair. This function first splits an input string into an array of UTF-16 code points. https://tools.ietf.org/html/rfc7159.html#section-7
Sat, 30 Jan 2016 19:48:35 +0900 encoding: initialize jsonmap when module is loaded
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Jan 2016 19:48:35 +0900] rev 28067
encoding: initialize jsonmap when module is loaded This makes jsonescape() a thread-safe function, which is necessary for hgweb. The initialization stuff isn't that slow: $ python -m timeit -n1000 -s 'from mercurial import encoding as x' 'reload(x)' original: 1000 loops, best of 3: 158 usec per loop this patch: 1000 loops, best of 3: 214 usec per loop compared to loading the commands module: $ python -m timeit -n1000 -s 'from mercurial import commands as x' 'reload(x)' 1000 loops, best of 3: 1.11 msec per loop
Sat, 30 Jan 2016 19:41:34 +0900 encoding: change jsonmap to a list indexed by code point
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Jan 2016 19:41:34 +0900] rev 28066
encoding: change jsonmap to a list indexed by code point This is slightly faster and convenient to implement a paranoid escaping. $ python -m timeit \ -s 'from mercurial import encoding; data = str(bytearray(xrange(128)))' \ 'encoding.jsonescape(data)' original: 100000 loops, best of 3: 15.1 usec per loop this patch: 100000 loops, best of 3: 13.7 usec per loop
Tue, 02 Feb 2016 15:24:11 +0000 update: change default destination to tipmost descendant (issue4673) (BC)
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 02 Feb 2016 15:24:11 +0000] rev 28065
update: change default destination to tipmost descendant (issue4673) (BC) Bare 'hg update' now brings you to the tipmost descendant (on the same branch). Leaving the user on the same topological branch. The previous behavior, updating to the tipmost changeset on the same branch could lead to jump from a topological branch to another. This was confusing and impractical. As the only conceivable reason for the old behavior have been address by the recently introduce message about other heads, we can "safely" change this behavior All test changes have been reviewed and seen a valid consequences.
Wed, 03 Feb 2016 15:21:11 +0000 test: drop useless --update flag in issue1502 tests
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 03 Feb 2016 15:21:11 +0000] rev 28064
test: drop useless --update flag in issue1502 tests The --update is unrelated to the test and has no effect as it fails anyway. Dropping it reduces the noise in the coming change in default destination for update.
Thu, 11 Feb 2016 13:50:38 +0000 treemanifest: don't use cp -T, not supported on OS X
Martijn Pieters <mjpieters@fb.com> [Thu, 11 Feb 2016 13:50:38 +0000] rev 28063
treemanifest: don't use cp -T, not supported on OS X The OS X cp implementation has no -T switch. Copy directory contents using a glob instead.
Sun, 03 Jan 2016 12:45:32 +0900 chg: use in-tree hg executable to start server for testing
Yuya Nishihara <yuya@tcha.org> [Sun, 03 Jan 2016 12:45:32 +0900] rev 28062
chg: use in-tree hg executable to start server for testing
Sun, 03 Jan 2016 12:41:28 +0900 hgignore: ignore chg binary
Yuya Nishihara <yuya@tcha.org> [Sun, 03 Jan 2016 12:41:28 +0900] rev 28061
hgignore: ignore chg binary
Sun, 03 Jan 2016 12:39:27 +0900 chg: import frontend sources
Yuya Nishihara <yuya@tcha.org> [Sun, 03 Jan 2016 12:39:27 +0900] rev 28060
chg: import frontend sources These files are copied from https://bitbucket.org/yuja/chg/ -r f897faa79687
Wed, 10 Feb 2016 21:01:52 +0100 debugrevlog: fix dumping manifest fails on empty first revision (issue5062)
liscju <piotr.listkiewicz@gmail.com> [Wed, 10 Feb 2016 21:01:52 +0100] rev 28059
debugrevlog: fix dumping manifest fails on empty first revision (issue5062)
Wed, 10 Feb 2016 01:48:58 -0800 help: don't crash in keyword search if an extension fails to provide docs
Simon Farnsworth <simonfar@fb.com> [Wed, 10 Feb 2016 01:48:58 -0800] rev 28058
help: don't crash in keyword search if an extension fails to provide docs Not all external extensions provide docs; if you use such an extension, you will experience a crash if you use "hg help --keyword <word>", and <word> happens to match the extension name.
Sat, 20 Feb 2016 17:32:26 +0100 doc: correct example concerning "hg purge" alias in man page "hgrc.5" stable
Rainer Woitok <Rainer.Woitok@Gmail.Com> [Sat, 20 Feb 2016 17:32:26 +0100] rev 28057
doc: correct example concerning "hg purge" alias in man page "hgrc.5" The "hg purge" alias as currently described in "hgrc.5" only works, if the caller's current working directory is identical to the repository's root directory. This patch slightly modifies the example by adding an empty pattern as a file argument to the "hg status" command, thus forcing this command to list the affected files relative to the current directory.
Thu, 18 Feb 2016 22:32:18 -0500 fileset: fix copy/paste in eol() error message stable
Matt Harbison <matt_harbison@yahoo.com> [Thu, 18 Feb 2016 22:32:18 -0500] rev 28056
fileset: fix copy/paste in eol() error message
Fri, 29 Jan 2016 14:35:34 +0000 run-tests: factor out _escapepath
timeless <timeless@mozdev.org> [Fri, 29 Jan 2016 14:35:34 +0000] rev 28055
run-tests: factor out _escapepath
Mon, 08 Feb 2016 12:33:00 -0500 debugignore: normalize the file before testing dirstate._ignore()
Matt Harbison <matt_harbison@yahoo.com> [Mon, 08 Feb 2016 12:33:00 -0500] rev 28054
debugignore: normalize the file before testing dirstate._ignore() With an ignore pattern containing a '/' and a Windows style path containing '\', status was properly ignoring the file, but debugignore was stating that it wasn't ignored.
Thu, 11 Feb 2016 02:15:45 +0900 check-code: add rule to detect usage of external diff via extdiff
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 11 Feb 2016 02:15:45 +0900] rev 28053
check-code: add rule to detect usage of external diff via extdiff This rule detects "hg extdiff" invocation without -p/--program and -o/--option. This patch specifies "-p diff" explicitly in test-extdiff.t to avoid false positive matching.
Mon, 08 Feb 2016 18:29:17 +0900 tests: use portable diff script via extdiff extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 18:29:17 +0900] rev 28052
tests: use portable diff script via extdiff extension Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because of incompatibility of "diff" command and its output. For example, system standard "diff" (= /usr/bin/diff) on Solaris differs from GNU diff in points below: - "-N" (treat absent files as empty) option isn't supported - files are examined not in dictionary order (maybe, in order in storage) This patch introduces portable diff script "pdiff" and make tests use it via extdiff extension. For portability of tests, this patch invokes "pdiff" script with explicit "sh", because standard shell of runtime platform ("cmd.exe" on Windows) is used at first to invoke external diff command.
Sun, 07 Feb 2016 09:36:09 +0100 test-patchbomb: ensure hg email write to stdout
Sébastien Brissaud <sebastien@brissaud.name> [Sun, 07 Feb 2016 09:36:09 +0100] rev 28051
test-patchbomb: ensure hg email write to stdout With -n/--test and if the PAGER environment variable is set, 'hg email' send its output to the user defined pager. If the pager capture the output, the test is unable verify it. Unsetting the PAGER environment variable force 'hg email' to write to stdout.
Wed, 10 Feb 2016 22:44:29 +0900 check-code: examine magic pattern matching against contents of a file
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:29 +0900] rev 28050
check-code: examine magic pattern matching against contents of a file Before this patch, check-code examines "magic" pattern (e.g. '^#!.*python') matching against not contents of a file, but name of it. This unintentionally omits code checking against Python source file, of which filename doesn't end with "*.py" or "*.cgi", even though contents of it starts with "#!/bin/python" or so. In this change, 'pre' refers contents of file 'f'.
Wed, 10 Feb 2016 22:44:29 +0900 docchecker: use indentation of 4 spaces
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:29 +0900] rev 28049
docchecker: use indentation of 4 spaces This is fixing for 'must indent 4 spaces' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:29 +0900 docchecker: remove naked except clause
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:29 +0900] rev 28048
docchecker: remove naked except clause This is fixing for 'naked except clause' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:29 +0900 misc: use modern exception syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:29 +0900] rev 28047
misc: use modern exception syntax This is fixing for 'legacy exception syntax; use "as" instead of ","' check-code rule. check-code has overlooked these, because files aren't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:28 +0900 f: use modern octal number formatting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:28 +0900] rev 28046
f: use modern octal number formatting This is fixing for 'legacy octal syntax; use "0o" prefix instead of "0"' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:28 +0900 hg-ssh: parenthesize non-translated message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:28 +0900] rev 28045
hg-ssh: parenthesize non-translated message This is fixing for 'missing _() in ui message (use () to hide false-positives)' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:28 +0900 f: add whitespace around operator
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:28 +0900] rev 28044
f: add whitespace around operator This is fixing for 'missing whitespace in expression' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:28 +0900 check-commit: omit whitespace
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:28 +0900] rev 28043
check-commit: omit whitespace This is fixing for 'no whitespace around = for named parameters' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Wed, 10 Feb 2016 22:44:28 +0900 check-commit: wrap too long line
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 10 Feb 2016 22:44:28 +0900] rev 28042
check-commit: wrap too long line This is fixing for 'line too long' check-code rule. check-code has overlooked this, because a file isn't recognized as one to be checked (this problem is fixed by subsequent patch).
Mon, 08 Feb 2016 21:12:13 +0900 setup: avoid procedure related to hg.exe at setup.py --pure stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 21:12:13 +0900] rev 28041
setup: avoid procedure related to hg.exe at setup.py --pure Before this patch, "setup.py --pure" fails on Windows, because hgbuildscripts.run() tries to copy "hg.exe", which doesn't generated at "setup.py --pure". At that time, run_command('build_hgexe') invoked in hgbuildscripts.run() does nothing and returns successfully. Therefore, subsequent procedure assuming existence of "hg.exe" fails. This patch avoids procedure related to "hg.exe" (= all of hgbuildscripts.run() except for build_scripts.run() invocation) at "setup.py --pure".
Fri, 05 Feb 2016 23:17:07 +0900 help: update template examples to use reST literal syntax stable
Yuya Nishihara <yuya@tcha.org> [Fri, 05 Feb 2016 23:17:07 +0900] rev 28040
help: update template examples to use reST literal syntax This should prevent processing backslashes as reST syntax elements. Before this patch, '\' was lost in HTML and man pages.
Sat, 06 Feb 2016 20:43:20 +0900 ui: fix crash by non-interactive prompt echo for user name stable
Yuya Nishihara <yuya@tcha.org> [Sat, 06 Feb 2016 20:43:20 +0900] rev 28039
ui: fix crash by non-interactive prompt echo for user name Since we've dropped a str cast at write() by f04bd381e8c0, ui.prompt() should convert default to '' if it is None. Otherwise, write() would fail with "TypeError: object of type 'NoneType' has no len()". This patch includes the tests for both interactive and non-interactive cases because "ui.askusername" was never tested.
Wed, 10 Feb 2016 22:53:17 +0900 zeroconf: forward all arguments passed to ui.configitems() wrapper stable
Yuya Nishihara <yuya@tcha.org> [Wed, 10 Feb 2016 22:53:17 +0900] rev 28038
zeroconf: forward all arguments passed to ui.configitems() wrapper f43988e5954c added 'ignoresub' argument to ui.configitems(), but zeroconf wrapper wasn't updated. It caused the following crash: Traceback (most recent call last): File "bin/hg", line 43, in <module> mercurial.dispatch.run() File "lib/python/mercurial/dispatch.py", line 54, in run sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255) File "lib/python/mercurial/dispatch.py", line 120, in dispatch ret = _runcatch(req) File "lib/python/mercurial/dispatch.py", line 191, in _runcatch return _dispatch(req) File "lib/python/mercurial/dispatch.py", line 924, in _dispatch cmdpats, cmdoptions) File "lib/python/mercurial/dispatch.py", line 681, in runcommand ret = _runcommand(ui, options, cmd, d) File "lib/python/mercurial/extensions.py", line 195, in closure return func(*(args + a), **kw) File "lib/python/hgext/zeroconf/__init__.py", line 180, in cleanupafterdispatch return orig(ui, options, cmd, cmdfunc) File "lib/python/mercurial/dispatch.py", line 1055, in _runcommand return checkargs() File "lib/python/mercurial/dispatch.py", line 1015, in checkargs return cmdfunc() File "lib/python/mercurial/dispatch.py", line 921, in <lambda> d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) File "lib/python/mercurial/util.py", line 991, in check return func(*args, **kwargs) File "lib/python/mercurial/commands.py", line 5405, in paths pathitems = sorted(ui.paths.iteritems()) File "lib/python/mercurial/util.py", line 723, in __get__ result = self.func(obj) File "lib/python/mercurial/ui.py", line 619, in paths return paths(self) File "lib/python/mercurial/ui.py", line 1099, in __init__ for name, loc in ui.configitems('paths', ignoresub=True): File "lib/python/mercurial/extensions.py", line 195, in closure return func(*(args + a), **kw) TypeError: configitems() got an unexpected keyword argument 'ignoresub' We have no test coverage for zeroconf, so I've added a minimal test that could reproduce this problem.
Mon, 08 Feb 2016 22:50:19 +0000 run-tests: warn about symlinks to non hg scripts
timeless <timeless@mozdev.org> [Mon, 08 Feb 2016 22:50:19 +0000] rev 28037
run-tests: warn about symlinks to non hg scripts If you symlink /usr/bin/true to /something/hg and try to run --with-hg=/something/hg, run-tests will end up running /usr/bin/hg, not /usr/bin/true.
Mon, 08 Feb 2016 18:29:17 +0900 tests: make chunk header of external diff glob-ed for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 18:29:17 +0900] rev 28036
tests: make chunk header of external diff glob-ed for portability Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because system standard "diff" (= /usr/bin/diff) on Solaris always generates chunk headers below: - "@@ -1,0 +1,nnnn @@" for added file - "@@ -1,nnnn +1,0 @@" for removed file even though "diff" on Linux generates: - "@@ -0,0 +1,nnnn @@" for added file - "@@ -1,nnnn +0,0 @@" for removed file This patch makes chunk header of external diff glob-ed for portability of tests. "hg diff" output follows Linux style, and there are many such diff output lines in existing tests. This is reason why this patch doesn't add check-code.py any rule to detect such diff output in tests. This patch is a part of making tests using external "diff" portable, and test-subrepo-deep-nested-change.t isn't yet portable even after this patch.
Mon, 08 Feb 2016 18:29:17 +0900 tests: make chunk header of external diff glob-ed for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 18:29:17 +0900] rev 28035
tests: make chunk header of external diff glob-ed for portability Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because system standard "diff" (= /usr/bin/diff) on Solaris always formats chunk header in the style below: @@ -X.x +Y.y @@ even though "diff" on Linux sometimes omits ".x" and/or ".y" in it. This patch makes chunk header of external diff glob-ed for portability of tests, and adds check-code.py rules to detect such diff output in tests. This patch also changes "hg diff" output in test-subrepo-git to simplify detection rules, even though it is certainly portable because these lines are generated by "git" command. This patch is a part of making tests using external "diff" portable, and tests below aren't yet portable even after this patch. test-largefiles-update.t test-subrepo-deep-nested-change.t
Mon, 08 Feb 2016 18:29:17 +0900 tests: make timezone in diff output glob-ed for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 18:29:17 +0900] rev 28034
tests: make timezone in diff output glob-ed for portability Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because system standard "diff" (= /usr/bin/diff) on Solaris doesn't display timezone for timestamp of each files in diff output. This patch makes timezone in external diff output glob-ed for portability of tests, and adds check-code.py a rule to detect such
Mon, 08 Feb 2016 18:29:17 +0900 tests: omit -p for external diff via extdiff extension for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Feb 2016 18:29:17 +0900] rev 28033
tests: omit -p for external diff via extdiff extension for portability Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because "-p" (show which C function each change is in) option isn't supported by system standard "diff" on Solaris, even though extdiff passes it to external "diff" by default. Fortunately, this non-portable option isn't important for (current, at least) tests using external "diff" command via extdiff extension. This patch omits "-p" for external "diff" command via extdiff extension for portability of tests, and adds check-code.py a rule to detect invocation of "diff" with "-p". Newly added check-code.py rule examines only lines generated by external "diff" with "-r", because strict examination might misidentify "hg diff -p" or other complicated lines consisting of "diff" string as wrong one. This patch is a part of making tests using external "diff" portable, and tests below aren't yet portable even after this patch. test-graft.t test-largefiles-update.t test-subrepo-deep-nested-change.t
Sun, 07 Feb 2016 22:18:24 -0800 update: check command line before modifying repo
Martin von Zweigbergk <martinvonz@google.com> [Sun, 07 Feb 2016 22:18:24 -0800] rev 28032
update: check command line before modifying repo A failed command should not have any effect on the repo.
Sun, 07 Feb 2016 21:44:38 -0800 treemanifest: fix debugrebuildfncache
Martin von Zweigbergk <martinvonz@google.com> [Sun, 07 Feb 2016 21:44:38 -0800] rev 28031
treemanifest: fix debugrebuildfncache When I taught debugrebuildfncache about dirlogs in fb92927f9775 (treemanifests: fix streaming clone, 2016-02-04), I added a last-minute "if 'treemanifest' in repo" guard. That should have been checking for "... in repo.requirements". Fix that and add tests for it.
Wed, 03 Feb 2016 15:12:01 +0000 update: warn about other topological head in pull and unbundle
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 03 Feb 2016 15:12:01 +0000] rev 28030
update: warn about other topological head in pull and unbundle Other commands have a '--update' triggering a bare update. We now issue the message introduced into the previous changeset for these too.
Tue, 02 Feb 2016 14:49:02 +0000 update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 02 Feb 2016 14:49:02 +0000] rev 28029
update: warn about other topological heads on bare update A concern around the user experience of Mercurial is user getting stuck on there own topological branch forever. For example, someone pulling another topological branch, missing that message in pull asking them to merge and getting stuck on there own local branch. The current way to "address" this concern was for bare 'hg update' to target the tipmost (also latest pulled) changesets and complain when the update was not linear. That way, failure to merge newly pulled changesets would result in some kind of failure. Yet the failure was quite obscure, not working in all cases (eg: commit right after pull) and the behavior was very impractical in the common case (eg: issue4673). To be able to change that behavior, we need to provide other ways to alert a user stucks on one of many topological head. We do so with an extra message after bare update: 1 other heads for branch "default" Bookmark get its own special version: 1 other divergent bookmarks for "foobar" There is significant room to improve the message itself, and we should augment it with hint about how to see theses other heads or handle the situation (see in-line comment). But having "a" message is already a significant improvement compared to the existing situation. Once we have it we can iterate on a better version of it. As having such message is an important step toward changing the default destination for update and other nicety, I would like to move forward quickly on getting such message. This was discussed during London - October 2015 Sprint.
Wed, 03 Feb 2016 04:37:04 +0000 tests: mock getpid to reduce glob usage
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 04:37:04 +0000] rev 28028
tests: mock getpid to reduce glob usage With util.getpid, it is now possible to define fixed pids. Future iterations can define a map of pids on a locked first come first serve basis to create a more realistic harness, but for now this is good enough. This applies to blackbox, but could apply to other tests as well.
Wed, 03 Feb 2016 09:11:22 +0000 util: enable getpid to be replaced
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 09:11:22 +0000] rev 28027
util: enable getpid to be replaced This will enable tests to write stable process ids.
Mon, 08 Feb 2016 00:47:36 +0000 blackbox: refactor use of vfs as _bbvfs
timeless <timeless@mozdev.org> [Mon, 08 Feb 2016 00:47:36 +0000] rev 28026
blackbox: refactor use of vfs as _bbvfs
Wed, 03 Feb 2016 15:18:29 +0000 blackbox: flush output file descriptor
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 15:18:29 +0000] rev 28025
blackbox: flush output file descriptor Without this, when there are multiple ui views, each blackbox will have its own file handle, and the logging will be in a really bad order. Also, because of the way blackbox works, it never closes its file handles, which means the last output before exit is often lost.
Wed, 03 Feb 2016 18:15:18 +0000 tests: change blackbox test to work cross platform
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 18:15:18 +0000] rev 28024
tests: change blackbox test to work cross platform While it is not easy to make a file 000 on Windows, you can emulate most of the behaviors by replacing the file with a directory. Also corrects test description to properly indicate that failing to read from the log is fatal.
Mon, 01 Feb 2016 20:28:32 -0800 merge: document checkignored and checkunknown configs again
Siddharth Agarwal <sid0@fb.com> [Mon, 01 Feb 2016 20:28:32 -0800] rev 28023
merge: document checkignored and checkunknown configs again These options were undocumented for 3.7 because of an issue found during the freeze (see rev 7cb7264cfd52). This issue has now been fixed, so we can document these options again.
Wed, 03 Feb 2016 13:12:06 -0800 rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 13:12:06 -0800] rev 28022
rebase: respect checkunknown and checkignored in more cases checkunknown and checkignored are currently respected for updates and regular merges, but not for certain kinds of rebases. To be precise, they aren't respected for rebases when: (1) we're rebasing while currently on the destination commit, and (2) an untracked or ignored file F is currently in the working copy, and (3) the same file F is in a source commit, and (4) F has different contents in the source commit. This happens because rebases set force to True when calling merge.update. Setting force to True makes a lot of sense in general, but it turns out the force option is overloaded: there's a deprecated '--force' option in merge that allows you to merge in outstanding changes, including changes in untracked files. We use the 'mergeforce' parameter to tell those two cases apart. I think the behavior during rebases when checkunknown is 'abort' (the default) is wrong -- we should abort on or overwrite differing untracked files, not try to merge them in. However that currently breaks rebases by aborting in the middle -- we need better handling for that case before we can change the default.
Wed, 03 Feb 2016 13:11:34 -0800 test-merge-force: add tests for merge.checkunknown=warn
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 13:11:34 -0800] rev 28021
test-merge-force: add tests for merge.checkunknown=warn In an upcoming patch we're going to change the behavior of some merges with merge.checkunknown=warn or ignore -- ensure that the behavior of the deprecated 'merge --force' remains the same.
Mon, 01 Feb 2016 20:28:32 -0800 merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com> [Mon, 01 Feb 2016 20:28:32 -0800] rev 28020
merge: tell _checkunknownfiles about whether this was merge --force In an upcoming patch we'll have different behavior here for when 'merge --force' is used as opposed to when other kinds of force operations are performed, like rebases.
Mon, 01 Feb 2016 20:28:32 -0800 merge: add missing doc for 'labels' parameter
Siddharth Agarwal <sid0@fb.com> [Mon, 01 Feb 2016 20:28:32 -0800] rev 28019
merge: add missing doc for 'labels' parameter
Mon, 01 Feb 2016 20:28:32 -0800 merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com> [Mon, 01 Feb 2016 20:28:32 -0800] rev 28018
merge: move abort/warn checks up to the top level of _checkunknownfiles In upcoming patches, we're also going to do these checks when force is True.
Fri, 05 Feb 2016 21:09:32 -0800 match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com> [Fri, 05 Feb 2016 21:09:32 -0800] rev 28017
match: rename "narrowmatcher" to "subdirmatcher" (API) I keep mistaking "narrowmatcher" for narrowhg's narrowmatcher. "subdirmatcher" seems more to the point anyway.
Wed, 03 Feb 2016 18:59:35 +0000 tests: relax test-devel-warnings to reduce false positives
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 18:59:35 +0000] rev 28016
tests: relax test-devel-warnings to reduce false positives This test is interested in warning output, so glob away line numbers and hashes as they aren't relevant to its core.
Sun, 07 Feb 2016 00:49:31 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 07 Feb 2016 00:49:31 -0600] rev 28015
merge with stable
Tue, 19 Jan 2016 18:20:13 +0000 chgserver: create new process group after fork (issue5051)
Jun Wu <quark@fb.com> [Tue, 19 Jan 2016 18:20:13 +0000] rev 28014
chgserver: create new process group after fork (issue5051) This is to make SIGTSTP work. Before the patch, the server process group is considered "orphaned" and will ignore SIGTSTP, SIGTTIN, SIGTTOU, according to POSIX. See the comment above `will_become_orphaned_pgrp` in `kernel/exit.c` from Linux 4.3 for details. SIGTSTP is important if chgserver runs some ncurses commend like `commit -i`. Ncurses has its own SIGTSTP handler which will do the following: 1. Clean the screen 2. Stop itself by resending SIGTSTP to itself 3. Restore the screen If SIGTSTP is ignored, step 2 will be a noop, which means the process cannot be suspended properly. In order to make things work, chg client needs to forward SIGTSTP and SIGCONT to server as well.
Fri, 05 Feb 2016 16:54:01 -0600 check-commit: check for double-addition of blank lines
Matt Mackall <mpm@selenic.com> [Fri, 05 Feb 2016 16:54:01 -0600] rev 28013
check-commit: check for double-addition of blank lines Previously, we were only checking for a blank line being added next to an existing one. Now we also check for two being added at the same time.
Fri, 05 Feb 2016 16:52:02 -0600 check-commit: scan for multiple instances of error patterns
Matt Mackall <mpm@selenic.com> [Fri, 05 Feb 2016 16:52:02 -0600] rev 28012
check-commit: scan for multiple instances of error patterns
Fri, 05 Feb 2016 10:22:14 -0800 merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com> [Fri, 05 Feb 2016 10:22:14 -0800] rev 28011
merge: add file ancestor linknode to mergestate During a merge, each file has a current commitnode+filenode, an other commitnode+filenode, and an ancestor commitnode+filenode. The ancestor commitnode is not stored though, and we rely on the ability for the filectx() to look up the commitnode by using the filenode's linkrev. In alternative backends (like remotefilelog), linkrevs may have restriction that prevent arbitrary linkrev look up given a filenode. This patch accounts for that by storing the ancestor commitnode in the merge state so that it is available later at resolve time. This results in some test changes because the ancestor commitnode we're using at resolve time changes slightly. Before, we used the linkrev commit, which is the earliest commit that introduced that particular filenode (which may not be the latest common ancestor of the commits being merged). Now we use the latest common ancestor of the merged commits as the commitnode. This is fine though, because that commit contains the same filenode as the linkrev'd commit.
Fri, 05 Feb 2016 10:15:28 -0800 merge: add debugmergestate support for _stateextras
Durham Goode <durham@fb.com> [Fri, 05 Feb 2016 10:15:28 -0800] rev 28010
merge: add debugmergestate support for _stateextras Now that we can store extras for each file, we need to have support for showing it in debugmergestate (the tests depend on this).
Fri, 05 Feb 2016 10:15:28 -0800 merge: add state extras merge state data
Durham Goode <durham@fb.com> [Fri, 05 Feb 2016 10:15:28 -0800] rev 28009
merge: add state extras merge state data In future commits we will want to store more data related to each file in the merge state. This patch adds an optional record for storing a dictionary of extras for each file.
Fri, 05 Feb 2016 13:30:25 -0800 revset: use manifest.matches in _follow revset
Durham Goode <durham@fb.com> [Fri, 05 Feb 2016 13:30:25 -0800] rev 28008
revset: use manifest.matches in _follow revset The old _follow revset iterated over every file in the commit and checked if it matched. For repos with large manifests, this could take 500ms. By switching to use manifest.matches() we can take advantage of the fastpaths built in to manifest.py that allows iterating over only the files in the matcher when it's a simple matcher. This brings the time spent down from 500ms to 0ms during simple operations like 'hg log -f file.txt'.
Thu, 04 Feb 2016 08:34:07 -0800 treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com> [Thu, 04 Feb 2016 08:34:07 -0800] rev 28007
treemanifests: fix streaming clone Similar to the previous patch, the .hg/store/meta/ directory does not get copied when when using "hg clone --uncompressed". Fix by including "meta/" in store.datafiles(). This seems safe to do, as there are only a few users of this method. "hg manifest" already filters the paths by "data/" prefix. The calls from largefiles also seem safe. The use in verify needs updating to prevent it from mistaking dirlogs for orphaned filelogs. That change is included in this patch. Since the dirlogs will now be in the fncache when using fncachestore, let's also update debugrebuildfncache(). That will also allow any existing treemanifest repos to get their dirlogs into the fncache. Also update test-treemanifest.t to use an a directory name that requires dot-encoding and uppercase-encoding so we test that the path encoding works.
Tue, 02 Feb 2016 17:31:17 -0800 treemanifests: fix local clone
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 Feb 2016 17:31:17 -0800] rev 28006
treemanifests: fix local clone When doing a local clone with treemanifests, the .hg/store/meta/ directory currently does not get copied. To fix it, all we need to do is to add it to the list of directories to copy.
Wed, 03 Feb 2016 15:35:23 -0800 tests: simplify treemanifest test by backing up entire .hg/store
Martin von Zweigbergk <martinvonz@google.com> [Wed, 03 Feb 2016 15:35:23 -0800] rev 28005
tests: simplify treemanifest test by backing up entire .hg/store
Wed, 03 Feb 2016 13:52:04 +0000 histedit: limit updated and merging output to important updates
timeless <timeless@mozdev.org> [Wed, 03 Feb 2016 13:52:04 +0000] rev 28004
histedit: limit updated and merging output to important updates Output is retained when: * There's a conflict * User asked to edit * User aborts otherwise, output is suppressed
Thu, 04 Feb 2016 23:30:49 +0000 tests: fix rebase-abort directory nesting
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 23:30:49 +0000] rev 28003
tests: fix rebase-abort directory nesting Without this change, some test repositories were nesting needlessly
Thu, 04 Feb 2016 23:29:32 +0000 rebase: document that tool does not apply to deleted files
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 23:29:32 +0000] rev 28002
rebase: document that tool does not apply to deleted files
Thu, 04 Feb 2016 22:14:53 +0000 rebase: mention help merge-tools in help
timeless <timeless@mozdev.org> [Thu, 04 Feb 2016 22:14:53 +0000] rev 28001
rebase: mention help merge-tools in help
Fri, 05 Feb 2016 13:23:24 -0800 copies: optimize forward copy detection logic for rebases
Durham Goode <durham@fb.com> [Fri, 05 Feb 2016 13:23:24 -0800] rev 28000
copies: optimize forward copy detection logic for rebases Forward copy detection (i.e. detecting what files have been moved/copied in commit X since ancestor Y) previously required diff'ing the manifests of both X and Y. This was expensive since it required reading both entire manifests and doing a set difference (they weren't already in a set because of the lazymanifest work). This cost almost 1 second on very large repositories, and happens N times for a rebase of N commits. This patch optimizes it for the case of rebase. In a rebase, we are comparing a commit against it's immediate parent, and therefore we can know what files changed by looking at ctx.files(). This lets us drastically decrease the size of the set comparison, and makes it O(# of changes) instead of O(size of manifest). This makes it take 1ms instead of 1000ms.
Tue, 26 Jan 2016 23:05:19 +0900 tests: pass settings of hypothesis by with statement
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 23:05:19 +0900] rev 27999
tests: pass settings of hypothesis by with statement given(..., settings=) is no longer available in Hypothesis 2.0.0. https://github.com/DRMacIver/hypothesis/commit/7712c01
Tue, 26 Jan 2016 22:44:29 +0900 tests: adjust for code move in Hypothesis 2.0.0
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 22:44:29 +0900] rev 27998
tests: adjust for code move in Hypothesis 2.0.0 It appears that the Settings class was renamed to settings, and because of this, the settings module was renamed to configuration. https://github.com/DRMacIver/hypothesis/commit/a0e663b
Tue, 26 Jan 2016 23:33:53 +0900 test-highlight: add normalization rule for Pygments 2.1
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 23:33:53 +0900] rev 27997
test-highlight: add normalization rule for Pygments 2.1 It appears that several classes have 'h', '1', '2' suffixes on Pygments 2.1, which is the current version on Debian sid.
Tue, 26 Jan 2016 23:27:12 +0900 test-highlight: factor out function that normalizes pygments output
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 23:27:12 +0900] rev 27996
test-highlight: factor out function that normalizes pygments output
Tue, 26 Jan 2016 23:26:05 +0900 test-highlight: unify normalization rule of pygments output
Yuya Nishihara <yuya@tcha.org> [Tue, 26 Jan 2016 23:26:05 +0900] rev 27995
test-highlight: unify normalization rule of pygments output We had two variants for unknown reason, s/mf/mi/g and s/mi/mf/g. This patch unifies them to s/mf/mi/g so that we can introduce a utility function.
Fri, 05 Feb 2016 22:32:05 +0900 tests: remove protected file forcibly for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 05 Feb 2016 22:32:05 +0900] rev 27994
tests: remove protected file forcibly for portability Before this patch, test-command-template.t is timed out on Solaris, because "rm" on permission denied file implies prompting "override protection 0 (yes/no)?" and blocks execution of test script.
Fri, 05 Feb 2016 22:32:05 +0900 tests: dump journal file by python script instead of sed for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 05 Feb 2016 22:32:05 +0900] rev 27993
tests: dump journal file by python script instead of sed for portability Before this patch, test-repair-strip.t fails on Solaris, because of "sed" on it doesn't work as expected if input contains null ('\0') character.
Fri, 05 Feb 2016 22:32:05 +0900 tests: execute check-config.py without xargs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 05 Feb 2016 22:32:05 +0900] rev 27992
tests: execute check-config.py without xargs Before this patch, test-check-config.t fails on Solaris, because "xargs" doesn't invoke check-config.py with all filenames at once. "xargs" may invoke specified command multiple times with part of arguments given from stdin: according to "xargs(1)" man page, this dividing arguments is system-dependent. For portability of test-check-config.t, this patch adds "xargs" like mode to check-config.py and executes it in test-check-config.t without "xargs".
Fri, 05 Feb 2016 22:32:05 +0900 tests: avoid nested quoting on command line for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 05 Feb 2016 22:32:05 +0900] rev 27991
tests: avoid nested quoting on command line for portability Before this patch, test-revset.t fails on Solaris using ksh as default "sh", because nested quoting below isn't acceptable for it. +-----------------------------+ inner quoting "`python -c "print '|'.join(['0:1'] * 500)"`" +-------------------------------------------+ outer quoting This patch does below for portability. - omit outer quoting This should be safe, because generated string contains no white space character. - use '+' instead of '|' (for safety) '|' has special meaning for many shell, but '+' isn't (at least, for ordinary ones).
Fri, 05 Feb 2016 13:20:23 +0100 version: verbose list internal and external extension source (issue4731)
liscju <piotr.listkiewicz@gmail.com> [Fri, 05 Feb 2016 13:20:23 +0100] rev 27990
version: verbose list internal and external extension source (issue4731)
Tue, 02 Feb 2016 21:20:04 -0800 check-code: allow "grep pattern filename-containing-dash-a"
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 Feb 2016 21:20:04 -0800] rev 27989
check-code: allow "grep pattern filename-containing-dash-a" We're trying to forbid "grep -a" and unintentionally complained even if the "-a" was part of the filename. Requiring a space before "-a" to match is probably good enough.
Fri, 05 Feb 2016 01:56:46 +0000 rebase: update working directory when aborting (issue5084) stable
timeless <timeless@mozdev.org> [Fri, 05 Feb 2016 01:56:46 +0000] rev 27988
rebase: update working directory when aborting (issue5084)
Tue, 02 Feb 2016 23:49:49 +0900 revset: flatten chained 'list' operations (aka function args) (issue5072) stable
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Feb 2016 23:49:49 +0900] rev 27987
revset: flatten chained 'list' operations (aka function args) (issue5072) Internal _matchfiles() function can take bunch of arguments, which would lead to a maximum recursion depth error. This patch avoids the excessive stack use by flattening 'list' nodes beforehand. Since getlist() no longer takes a nested 'list' nodes, _parsealiasdecl() also needs to flatten argument list, "aliasname($1, $2, ...)".
Fri, 05 Feb 2016 19:40:57 +0100 help: fix typo in backgroundclose documentation stable
André Sintzoff <andre.sintzoff@gmail.com> [Fri, 05 Feb 2016 19:40:57 +0100] rev 27986
help: fix typo in backgroundclose documentation
Fri, 05 Feb 2016 15:18:40 +0100 revert: makes interactive mode ask to forget added files (issue4936)
liscju <piotr.listkiewicz@gmail.com> [Fri, 05 Feb 2016 15:18:40 +0100] rev 27985
revert: makes interactive mode ask to forget added files (issue4936) Before this patch revert interactive mode unconditionally forgets added files. This patch fixes this by asking user if he wants to forget added file. If user doesn't want to forget given file, it is added to matcher_opts exclude list, to not reviewing it later with other modified files.
Thu, 04 Feb 2016 15:38:04 -0800 obsolete: fix n^2 marker computation behavior
Durham Goode <durham@fb.com> [Thu, 04 Feb 2016 15:38:04 -0800] rev 27984
obsolete: fix n^2 marker computation behavior Previously, if you ran obsolete.createmarkers with a bunch of markers that did not have successors (like when you do a prune), it encountered a n^2 computation behavior because the loop would read the changelog (to get ctx.parents()), then add a marker, in a loop. Adding a marker invalidated the computehidden cache, and reading the changelog recomputed it. This resulted in pruning 150 commits taking 150+ seconds in a large repo. The fix is to break the reading part of the loop to be separate from the writing part.
Wed, 03 Feb 2016 17:44:11 -0800 memctx: fix memctx manifest file hashes
Durham Goode <durham@fb.com> [Wed, 03 Feb 2016 17:44:11 -0800] rev 27983
memctx: fix memctx manifest file hashes When memctx is asked for a manifest, it constructs one by merging the p1 manifest, and the changes that are on top. For the changes on top, it was previously using p1.node() as the file entries parent, which actually returns the commit node that the p1 linkrev points at! Which is entirely incorrect. The fix is to use p1.filenode() instead, which returns the parent file node as desired. I don't know how to execute this or make it have a visible effect, so I'm not sure how to test it. It was noticed because asking for the linkrev is an expensive operation when using the remotefilelog extension and this was causing performance regressions with commit.
Fri, 29 Jan 2016 14:53:44 -0500 schemes: add debugexpandscheme command, resolving a scheme to canonical form
Jason R. Coombs <jaraco@jaraco.com> [Fri, 29 Jan 2016 14:53:44 -0500] rev 27982
schemes: add debugexpandscheme command, resolving a scheme to canonical form
Fri, 29 Jan 2016 14:40:41 -0500 schemes: extract scheme expansion as its own method on ShortRepository
Jason R. Coombs <jaraco@jaraco.com> [Fri, 29 Jan 2016 14:40:41 -0500] rev 27981
schemes: extract scheme expansion as its own method on ShortRepository
Wed, 03 Feb 2016 16:24:24 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 03 Feb 2016 16:24:24 -0600] rev 27980
merge with stable
Wed, 03 Feb 2016 16:00:00 -0600 Added signature for changeset b698abf971e7 stable
Matt Mackall <mpm@selenic.com> [Wed, 03 Feb 2016 16:00:00 -0600] rev 27979
Added signature for changeset b698abf971e7
Wed, 03 Feb 2016 15:59:59 -0600 Added tag 3.7.1 for changeset b698abf971e7 stable
Matt Mackall <mpm@selenic.com> [Wed, 03 Feb 2016 15:59:59 -0600] rev 27978
Added tag 3.7.1 for changeset b698abf971e7
Wed, 03 Feb 2016 09:23:31 -0800 rebase: don't preserve most extra fields stable 3.7.1
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 09:23:31 -0800] rev 27977
rebase: don't preserve most extra fields This backs out changeset 88fde8db5307. See the previous patches for why.
Wed, 03 Feb 2016 09:24:47 -0800 rebase: backout changeset d755a9531fce stable
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 09:24:47 -0800] rev 27976
rebase: backout changeset d755a9531fce This is a dependency for a future backout of 88fde8db5307. See the previous patches for why.
Wed, 03 Feb 2016 09:23:52 -0800 rebase: backout changeset 986d04b9fedd stable
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 09:23:52 -0800] rev 27975
rebase: backout changeset 986d04b9fedd This is a dependency for a future backout of 88fde8db5307. See the previous patches for why.
Wed, 03 Feb 2016 09:06:52 -0800 graft: don't preserve most extra fields stable
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 09:06:52 -0800] rev 27974
graft: don't preserve most extra fields This backs out changeset 804abe8999f3. See the previous patch for why we're doing this.
Wed, 03 Feb 2016 08:59:46 -0800 amend: don't preserve most extra fields stable
Siddharth Agarwal <sid0@fb.com> [Wed, 03 Feb 2016 08:59:46 -0800] rev 27973
amend: don't preserve most extra fields This backs out changeset 39163708825cd. There are some extra fields that absolutely should not be preserved, like the convert_revision field introduced by the convert and hgsubversion extensions. The problem with extensions blacklisting certain extra fields is that they might not be enabled at the time the amend is performed. In the long run we probably want separately marked transferable and non-transferable extra fields, but for now restore the old Mercurial 3.6 behavior.
Wed, 03 Feb 2016 11:01:11 -0200 histedit: fix typo in documentation stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 03 Feb 2016 11:01:11 -0200] rev 27972
histedit: fix typo in documentation
Wed, 03 Feb 2016 22:47:27 +0900 osutil: do not abort loading pure module just because libc has no recvmsg() stable
Yuya Nishihara <yuya@tcha.org> [Wed, 03 Feb 2016 22:47:27 +0900] rev 27971
osutil: do not abort loading pure module just because libc has no recvmsg() On Solaris, recvmsg() is provided by libsocket.so. We could try hard to look for the library which provides 'recvmsg' symbol, but it would make little sense now since recvfds() won't work anyway on Solaris. So this patch just disables _recvmsg() on such platforms. Thanks to FUJIWARA Katsunori for spotting this problem.
Tue, 02 Feb 2016 20:56:48 +0900 osutil: disable compilation of recvfds() on unsupported platforms stable
Yuya Nishihara <yuya@tcha.org> [Tue, 02 Feb 2016 20:56:48 +0900] rev 27970
osutil: disable compilation of recvfds() on unsupported platforms It appears that Solaris doesn't provide CMSG_LEN(), msg_control, etc. As recvfds() is only necessary for chg, this patch just drops it if CMSG_LEN isn't defined, which is the same workaround as Python 3.x. https://hg.python.org/cpython/rev/c64216addd7f#l7.33
Wed, 03 Feb 2016 10:57:27 -0200 i18n-pt_BR: synchronized with 0ec12435b78b stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 03 Feb 2016 10:57:27 -0200] rev 27969
i18n-pt_BR: synchronized with 0ec12435b78b
Mon, 01 Feb 2016 18:29:07 -0600 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Feb 2016 18:29:07 -0600] rev 27968
merge with stable
Mon, 01 Feb 2016 17:58:13 -0600 Added signature for changeset 2408645de650 stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Feb 2016 17:58:13 -0600] rev 27967
Added signature for changeset 2408645de650
Mon, 01 Feb 2016 17:58:12 -0600 Added tag 3.7 for changeset 2408645de650 stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Feb 2016 17:58:12 -0600] rev 27966
Added tag 3.7 for changeset 2408645de650
Mon, 01 Feb 2016 16:14:51 -0600 merge with i18n stable 3.7
Matt Mackall <mpm@selenic.com> [Mon, 01 Feb 2016 16:14:51 -0600] rev 27965
merge with i18n
Sun, 31 Jan 2016 00:31:55 -0800 verify: recover lost freeing of memory stable
Martin von Zweigbergk <martinvonz@google.com> [Sun, 31 Jan 2016 00:31:55 -0800] rev 27964
verify: recover lost freeing of memory In df8973e1fb45 (verify: move file cross checking to its own function, 2016-01-05), "mflinkrevs = None" was moved into function, so the reference was cleared there, but the calling function now held on to the variable. The point of clearing it was presumably to free up memory, so let's move the clearing to the calling function where it makes a difference. Also change "mflinkrevs = None" to "del mflinkrevs", since the comment about scope now surely is obsolete.
Mon, 01 Feb 2016 15:41:43 +0000 rebase: better way to detect non-detaching revisions (issue5044) stable
Martijn Pieters <mj@zopatista.com> [Mon, 01 Feb 2016 15:41:43 +0000] rev 27963
rebase: better way to detect non-detaching revisions (issue5044) Rather than look for the lowest revision, see if the rebase state is tracking the parents of this revision. Otherwise we can't handle multiple revisions in one rebase that includes a merge revision. Fixes issue5044.
Mon, 01 Feb 2016 23:17:40 +0900 i18n-ja: synchronized with 88609cfa3745 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 23:17:40 +0900] rev 27962
i18n-ja: synchronized with 88609cfa3745
Mon, 01 Feb 2016 12:12:06 -0200 i18n-pt_BR: synchronized with f0d3c5794380 stable
Wagner Bruna <wbruna@yahoo.com> [Mon, 01 Feb 2016 12:12:06 -0200] rev 27961
i18n-pt_BR: synchronized with f0d3c5794380
Mon, 01 Feb 2016 22:14:06 +0900 doc: itemize text blocks to increase readability in HTML format stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 22:14:06 +0900] rev 27960
doc: itemize text blocks to increase readability in HTML format Before this patch, text blocks changed in this patch are shown as just continuous text blocks like below in HTML format. Global configuration like the username setting is typically put into: %USERPROFILE%\mercurial.ini $HOME/.hgrc This patch itemizes these text blocks to increase readability in HTML format. Global configuration like the username setting is typically put into: - %USERPROFILE%\mercurial.ini (on Windows) - $HOME/.hgrc (on Unix, Plan9) Like as other platform sensitive container-ed text blocks, this patch also adds explicit "on PLATFORM" information to each items for readability in HTML format, even though output of "hg help config" on command line seems a little redundant. For example, on Unix: Global configuration like the username setting is typically put into: - "$HOME/.hgrc" (on Unix, Plan9)
Mon, 01 Feb 2016 22:14:06 +0900 doc: use correct indentation for enumeration stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 22:14:06 +0900] rev 27959
doc: use correct indentation for enumeration This creates hg.1.html as expected.
Mon, 01 Feb 2016 22:13:57 +0900 doc: use correct cross reference in help documentation stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 22:13:57 +0900] rev 27958
doc: use correct cross reference in help documentation This patch fixes problems below: - ":hg:" role should be followed by not '"' but '`' - there is a help topic not "default-push" but "config.default-push"
Mon, 01 Feb 2016 22:06:35 +0900 doc: prevent literal text block from being treated as non-literal one stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 22:06:35 +0900] rev 27957
doc: prevent literal text block from being treated as non-literal one This creates hg.1.html as expected.
Mon, 01 Feb 2016 22:06:35 +0900 doc: prevent non-literal text block from being treated as literal one stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 22:06:35 +0900] rev 27956
doc: prevent non-literal text block from being treated as literal one This creates hg.1.html as expected.
Mon, 01 Feb 2016 20:29:20 +0900 histedit: show correct hash ID at verification error stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Feb 2016 20:29:20 +0900] rev 27955
histedit: show correct hash ID at verification error node.short() on 'ha' in verifyactions() causes broken hash ID, because it is initialized with node.hex()-ed node value.
Sat, 30 Jan 2016 18:00:11 +0900 backout: disable --merge with --no-commit (issue4874) stable
Yuya Nishihara <yuya@tcha.org> [Sat, 30 Jan 2016 18:00:11 +0900] rev 27954
backout: disable --merge with --no-commit (issue4874) Because "backout --merge" have to make a commit before merging, it doesn't work with --no-commit. We could change "backout --merge" to make a merge commit automatically, and --no-commit to bypass a merge commit, but that change would be undesirable because: a) it's hard to fix bad merges in general b) two commits would be created with the same --message So, this patch simply disables "--merge --no-commit".
Wed, 27 Jan 2016 09:07:28 -0800 changegroup: fix pulling to treemanifest repo from flat repo (issue5066) stable
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Jan 2016 09:07:28 -0800] rev 27953
changegroup: fix pulling to treemanifest repo from flat repo (issue5066) In c0f11347b107 (changegroup: don't support versions 01 and 02 with treemanifests, 2016-01-19), I stopped supporting use of cg1 and cg2 with treemanifest repos. What I had not considered was that it's perfectly safe to pull *to* a treemanifest repo using any changegroup version. As reported in issue5066, I therefore broke pull from old repos into a treemanifest repo. It was not covered by the test case, because that pulled from a local repo while enabling treemanifests, which enabled treemanifests on the source repo as well. After switching to pulling via HTTP, it breaks. Fix by splitting up changegroup.supportedversions() into supportedincomingversions() and supportedoutgoingversions().
Thu, 28 Jan 2016 13:49:05 -0800 tests: minor cleanup to treemanifest test stable
Martin von Zweigbergk <martinvonz@google.com> [Thu, 28 Jan 2016 13:49:05 -0800] rev 27952
tests: minor cleanup to treemanifest test
Fri, 29 Jan 2016 14:19:29 -0800 merge: don't try to merge subrepos twice (issue4988) stable
Siddharth Agarwal <sid0@fb.com> [Fri, 29 Jan 2016 14:19:29 -0800] rev 27951
merge: don't try to merge subrepos twice (issue4988) In my patch series ending with rev 25e4b2f000c5 I switched most change/delete conflicts to be handled at the resolve layer. .hgsubstate was the one file that we weren't able to handle, so we kept the old code path around for it. The old code path added .hgsubstate to one of the other lists as the user specifies, including possibly the 'g' list. Now since we did this check after converting the actions from being keyed by file to being keyed by action type, there was nothing that actually removed .hgsubstate from the 'cd' or 'dc' lists. This meant that the file would eventually make its way into the 'mergeactions' list, now freshly augmented with 'cd' and 'dc' actions. We call subrepo.submerge for both 'g' actions and merge actions. This means that if the resolution to an .hgsubstate change/delete conflict was to add it to the 'g' list, subrepo.submerge would be called twice. It turns out that this doesn't cause any adverse effects on Linux due to caching, but apparently breaks on other operating systems including Windows. The fix here moves this to before we convert the actions over. This ensures that it .hgsubstate doesn't make its way into multiple lists. The real fix here is going to be: (1) move .hgsubstate conflict resolution into the resolve layer, and (2) use a real data structure for the actions rather than shuffling data around between lists and dictionaries: we need a hash (or prefix-based) index by file and a list index by action type. There's a very tiny behavior change here: collision detection on case-insensitive systems will happen after this is resolved, not before. I think this is the right change -- .hgsubstate could theoretically collide with other files -- but in any case it makes no practical difference. Thanks to Yuya Nishihara for investigating this.
Wed, 27 Jan 2016 16:16:38 -0600 bookmarks: improve documentation for --rev option stable
Nathan Goldbaum <ngoldbau@ucsc.edu> [Wed, 27 Jan 2016 16:16:38 -0600] rev 27950
bookmarks: improve documentation for --rev option
Wed, 27 Jan 2016 12:33:07 -0800 merge: undocument checkunknown and checkignored configs for 3.7 stable
Siddharth Agarwal <sid0@fb.com> [Wed, 27 Jan 2016 12:33:07 -0800] rev 27949
merge: undocument checkunknown and checkignored configs for 3.7 We've discovered an issue with this flag during certain kinds of rebases. When: (1) we're rebasing while currently on the destination commit, and (2) an untracked or ignored file F is currently in the working copy, and (3) the same file F is in a source commit, and (4) F has different contents in the source commit, then we'll try to merge the file rather than overwrite it. An earlier patch I sent honored the options for these situations as well. Unfortunately, rebases go through the same flow as the old, deprecated 'hg merge --force'. We'd rather not make any changes to 'hg merge --force' behavior, and there's no way from this point in the code to figure out whether we're in 'hg rebase' or 'hg merge --force'. Pierre-Yves David and I came up with the idea to split the 'force' flag up into 'force' for rebases, and 'forcemerge' for merge. Since this is a very disruptive change and we're in freeze mode, simply undocument the options for this release so that our hands aren't tied by BC concerns. We'll redocument them in the next release.
Thu, 28 Jan 2016 20:10:06 +0900 commands: advance current active bookmark at pull --update correctly stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 28 Jan 2016 20:10:06 +0900] rev 27948
commands: advance current active bookmark at pull --update correctly Before this patch, "hg pull --update" doesn't advance current active bookmark correctly, if pulling itself doesn't advance it, even though "hg pull" + "hg update" does so. Existing test for "pull --update works the same as pull && update" in test-bookmarks.t doesn't examine this case, because pulling itself advance current active bookmark before actual updating the working directory in that test case. To advance current active bookmark at "hg pull --update" correctly, this patch examines 'movemarkfrom' instead of 'not checkout'. Even if 'not checkout' at the invocation of postincoming(), 'checkout' is overwritten by "the revision to update to" value returned by destutil.destupdate() in such case. Therefore, 'not checkout' condition means "update destination is revision #0", and isn't suitable for examining whether active bookmark should be advanced. Even though examination around "movemarkfrom == repo['.'].node()" may seem a little redundant just for this issue, this makes it easier to compare (and unify in the future, maybe) with the same logic to update bookmark at "hg update" below. if not ret and movemarkfrom: if movemarkfrom == repo['.'].node(): pass # no-op update elif bookmarks.update(repo, [movemarkfrom], repo['.'].node()): ui.status(_("updating bookmark %s\n") % repo._activebookmark) else: # this can happen with a non-linear update ui.status(_("(leaving bookmark %s)\n") % repo._activebookmark) bookmarks.deactivate(repo)
Sun, 24 Jan 2016 00:10:19 -0500 largefiles: prevent committing a missing largefile stable
Matt Harbison <matt_harbison@yahoo.com> [Sun, 24 Jan 2016 00:10:19 -0500] rev 27947
largefiles: prevent committing a missing largefile Previously, if the largefile was deleted at the time of a commit, the standin was silently not updated and its current state (possibly garbage) was recorded. The test makes it look like this is somewhat of an edge case, but the same thing happens when an `hg revert` followed by `rm` changes the standin. Aside from the second invocation of this in lfutil.updatestandinsbymatch() (which is what triggers this test case), the three other uses are guarded by dirstate checks for added or modified, or an existence check in the filesystem. So aborting in lfutil.updatestandins() should be safe, and will avoid silent skips in the future if this is used elsewhere.
Wed, 27 Jan 2016 10:24:25 -0500 changegroup: fix treemanifest exchange code (issue5061) stable
Augie Fackler <augie@google.com> [Wed, 27 Jan 2016 10:24:25 -0500] rev 27946
changegroup: fix treemanifest exchange code (issue5061) There were two mistakes: one was accidental reuse of the fclnode variable from the loop gathering file nodes, and the other (masked by that bug) was not correctly handling deleted directories. Both cases are now fixed and the test passes.
Fri, 22 Jan 2016 12:08:20 -0600 log: speed up single file log with hidden revs (issue4747) stable
Matt Mackall <mpm@selenic.com> [Fri, 22 Jan 2016 12:08:20 -0600] rev 27945
log: speed up single file log with hidden revs (issue4747) On repos with lots of heads, the filelog() code could spend several minutes decompressing manifests. This change instead tries to efficiently scan the changelog for candidates and decompress as few manifests as possible. This is a regression introduced in 3.3 by the linkrev adjustment code. Prior to that, filelog was nearly instant. For the repo in the bug report, this improves time of a simple log command from ~3 minutes to ~.5 seconds, a 360x speedup. For the main Mercurial repo, a log of commands.py slows down from 1.14s to 1.45s, a 27% slowdown. This is still faster than the file() revset, which takes 2.1 seconds.
Sat, 23 Jan 2016 23:32:49 -0500 largefiles: report the missing file count after a commit that does nothing stable
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Jan 2016 23:32:49 -0500] rev 27944
largefiles: report the missing file count after a commit that does nothing This is the same warning that is printed for normal files.
Sat, 23 Jan 2016 23:24:30 -0500 commit: factor the post commit status check into a cmdutil method stable
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Jan 2016 23:24:30 -0500] rev 27943
commit: factor the post commit status check into a cmdutil method The largefiles extension needs to set lfstatus for this status call. Otherwise, if a missing largefile is explicitly named, a confusing message is issued that says the largefile wasn't found, followed by another that says nothing changed.
Sat, 23 Jan 2016 20:51:17 -0500 largefiles: fix an explicit largefile commit after a remove (issue4969) stable
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Jan 2016 20:51:17 -0500] rev 27942
largefiles: fix an explicit largefile commit after a remove (issue4969) The change in b68797f244e4 to handle a normal -> largefile switch was too aggressive in preserving the original matcher names. If a largefile is explicitly provided by the user, but only the standin exists in dirstate, then only the standin can be committed. There's still maybe an issue when the largefile is deleted outside of Mercurial: $ rm large $ hg ci -m "oops" large large: The system cannot find the file specified nothing changed [1]
Mon, 25 Jan 2016 15:48:35 -0800 context: back out sneaky code change in documentation change stable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 25 Jan 2016 15:48:35 -0800] rev 27941
context: back out sneaky code change in documentation change In 81b391a45264 (context: clarify why we don't compare file contents when nodeid differs, 2016-01-12), I also changed "node2 != _newnode" into "self.rev() is not None". I don't remember why. They are similar, but the former also catches the case where the file is clean in the dirstate (so node2 is not _newnode), but different from the "other" context. This resulted in unnecessary file content comparison a few lines further down in the code. Let's just back out the code change. Thanks to Durham Goode for spotting this.
Thu, 23 Jul 2015 23:41:29 +0900 templater: abort if infinite recursion detected while compiling stable
Yuya Nishihara <yuya@tcha.org> [Thu, 23 Jul 2015 23:41:29 +0900] rev 27940
templater: abort if infinite recursion detected while compiling In this case, a template is parsed recursively with no thunk for lazy evaluation. This patch prevents recursion by putting a dummy of the same name into a cache that will be referenced while parsing if there's a recursion. changeset = {files % changeset}\n ~~~~~~~~~ = [(_runrecursivesymbol, 'changeset')]
Wed, 22 Jul 2015 23:29:41 +0900 templater: abort if infinite recursion detected while evaluation (issue4758) stable
Yuya Nishihara <yuya@tcha.org> [Wed, 22 Jul 2015 23:29:41 +0900] rev 27939
templater: abort if infinite recursion detected while evaluation (issue4758) It would be nice if we could detect recursion at the parsing phase, but we can't because a template can refer to a keyword of the same name. For example, "rev = {rev}" is valid if rev is a keyword, and we don't know if rev is a keyword or a template while parsing.
Fri, 22 Jan 2016 16:31:50 -0800 exchange: set 'treemanifest' param on pushed changegroups too stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 22 Jan 2016 16:31:50 -0800] rev 27938
exchange: set 'treemanifest' param on pushed changegroups too In 5c0fd878779c (treemanifests: set bundle2 part parameter indicating treemanifest, 2016-01-08), I didn't realize I had to set the parameter separately for getbundle and unbundle. Having the parameter there on push allows us to push to an empty repo and have the requirements updated correctly.
Mon, 25 Jan 2016 11:37:02 -0800 crecord: fix help bar display issue (issue5063) stable
Laurent Charignon <lcharignon@fb.com> [Mon, 25 Jan 2016 11:37:02 -0800] rev 27937
crecord: fix help bar display issue (issue5063) Before this patch, the help bar in crecord wouldn't be printed correctly when the terminal window didn't have enough column to display it. This patch adds logic to make sure that the help bar message is always displayed. We use an ellipsis when it is not possible to display the complete message.
Mon, 25 Jan 2016 10:13:03 -0800 crecord: fix typo in the help text stable
Laurent Charignon <lcharignon@fb.com> [Mon, 25 Jan 2016 10:13:03 -0800] rev 27936
crecord: fix typo in the help text In the crecord help dialog, the toggle all option was wrongfully documented. Instead of using 'a', one must use 'A' to toggle all the hunks. The crecord header that is always displayed on the screen contains the right shortcut and does not need to be changed.
Sun, 17 Jan 2016 22:53:57 -0500 subrepo: better error messages in _ensuregit stable
Mason Malone <mason.malone@gmail.com> [Sun, 17 Jan 2016 22:53:57 -0500] rev 27935
subrepo: better error messages in _ensuregit This patch improves the error messages raised when an OSError occurs, since simply re-raising the exception can be both confusing and misleading. For example, if "hg identify" is run inside a repository that contains a Git subrepository and the git binary could not be found, it'll exit with the message "abort: No such file or directory". That implies "identify" has a problem reading the repository itself. There's no way for the user to know what the real problem is unless they dive into the Mercurial source, which is what I ended up doing after spending hours debugging errors while provisioning a VM with Ansible (turns out I forgot to install Git on it). Descriptive errors are especially important on Windows, since it's common for Windows users to forget to set the "Path" system variable after installing Git.
Sat, 23 Jan 2016 17:31:31 +0800 hgweb: update canvas.width before dynamically redrawing graph (issue2683) stable
Anton Shestakov <av6@dwimlabs.net> [Sat, 23 Jan 2016 17:31:31 +0800] rev 27934
hgweb: update canvas.width before dynamically redrawing graph (issue2683) After 91ac8cb79125 graph canvas width is decided once on the initial rendering. However, after graph page gets scrolled down to load more, it might need more horizontal space to draw, so it needs to resize the canvas dynamically. The exact problem that this patch solves can be seen using: hg init testfork cd testfork echo 0 > foo hg ci -Am0 echo 1 > foo hg ci -m1 hg up 0 echo 2 > foo hg ci -m2 hg gl -T '{rev}\n' @ 2 | | o 1 |/ o 0 hg serve And then by navigating to http://127.0.0.1:8000/graph/tip?revcount=1 "revcount=1" makes sure the initial graph contains only revision 2. And because the initial canvas width takes only that one revision into count, after the (immediate) AJAX update revision 1 will be cut off from the graph. We can safely set canvas width to the new value we get from the AJAX request because every time graph is updated, it is completely redrawn using all the requested nodes (in the case above it will use /graph/2?revcount=61), so the value is guaranteed not to decrease. P.S.: Sorry for parsing HTML with regexes, but I didn't start it.
Fri, 22 Jan 2016 11:00:13 -0800 run-tests: "fix" race condition in race condition fix stable
Bryan O'Sullivan <bryano@fb.com> [Fri, 22 Jan 2016 11:00:13 -0800] rev 27933
run-tests: "fix" race condition in race condition fix Laurent's commit 3203dfe341f9 still suffers from a race: by the time the "job" function tries to assign to channels[channel], that list has been truncated to empty. The result is that every job thread raises an IndexError. Earlier, I tried an approach of correctly locking channels, but that caused run-tests to hang on KeyboardInterrupt sometimes. This approach is strictly hackier, but seems to actually work reliably.
Fri, 22 Jan 2016 20:32:47 +0000 rebase: restore help for rebase w/o args (issue5059) stable
timeless <timeless@mozdev.org> [Fri, 22 Jan 2016 20:32:47 +0000] rev 27932
rebase: restore help for rebase w/o args (issue5059) Restoring documentation accidentally removed in a9a047878e14.
Tue, 19 Jan 2016 15:37:07 -0800 shelve: use cg3 for treemanifests stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Jan 2016 15:37:07 -0800] rev 27931
shelve: use cg3 for treemanifests Similar to previous change, this teaches shelve to pick the right changegroup version for repos that use treemanifests.
Tue, 19 Jan 2016 15:38:24 -0800 repair: use cg3 for treemanifests stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Jan 2016 15:38:24 -0800] rev 27930
repair: use cg3 for treemanifests The newly created helper changegroup.safeversion() knows to pick version 03 if the repo uses treemanifests, so just using that means we pick the right changegroup version.
Tue, 19 Jan 2016 15:32:32 -0800 changegroup: introduce safeversion() stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Jan 2016 15:32:32 -0800] rev 27929
changegroup: introduce safeversion() In a few places (at least repair.py and shelve.py), we want to find the best changegroup version that we can assume users of the repo will understand. For example, we choose version 01 by default, but if it's a generaldelta repo, we expect clients to support version 02 anyway, so we choose that for new bundles (for e.g. "hg strip"). Let's create a helper for this functionality in changegroup, so we can reuse it elsewhere later.
Tue, 19 Jan 2016 14:27:18 -0800 changegroup: don't support versions 01 and 02 with treemanifests stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 19 Jan 2016 14:27:18 -0800] rev 27928
changegroup: don't support versions 01 and 02 with treemanifests Since it would be terribly expensive to convert between flat manifests and treemanifests, we have decided to simply not support changegroup version 01 and 02 with treemanifests. Therefore, let's stop announcing that we support these versions on treemanifest repos. Note that this means that older clients that try to clone from a treemanifest repo will fail. What happens is that the server, after this patch, finds that there are no common versions and raises "ValueError: no common changegroup version". This results in "abort: HTTP Error 500: Internal Server Error" on the client. Before this patch, it was no better: The server would instead find that there were directory manifest nodes to put in the changegroup 01 or 02 and raise an AssertionError on changegroup.py#668 (assert not tmfnodes), which would also appear as a 500 to the client.
Tue, 19 Jan 2016 08:22:27 -0800 run-tests: fix crash when --json and --blacklist are both used (issue5050) stable
Laurent Charignon <lcharignon@fb.com> [Tue, 19 Jan 2016 08:22:27 -0800] rev 27927
run-tests: fix crash when --json and --blacklist are both used (issue5050) This patch fixes a crash when both --json and --blacklist were given as arguments of run-tests.py. Now, instead of crashing, we add an entry for blacklisted tests in the json output to show that the tests were skipped.
Thu, 21 Jan 2016 12:37:12 -0800 run-tests: fix race condition stable
Laurent Charignon <lcharignon@fb.com> [Thu, 21 Jan 2016 12:37:12 -0800] rev 27926
run-tests: fix race condition Before this patch, it was possible for run-tests to crash on a race condition. The race condition happens in the following case: - the last test finishes and calls: done.put(None) - the context switches to the main thread that clears the channels list - the context switches to the last test mentioned above, it tries to access channels[channel] and crashes This happened to me while running run-tests. This patch fixes the issue by clearing the channel before considering that the test is done.
Thu, 21 Jan 2016 21:15:52 +0000 copyright: update to 2016 stable
timeless <timeless@mozdev.org> [Thu, 21 Jan 2016 21:15:52 +0000] rev 27925
copyright: update to 2016
Tue, 19 Jan 2016 15:18:21 -0800 transaction: abort transaction during hook exception stable
Durham Goode <durham@fb.com> [Tue, 19 Jan 2016 15:18:21 -0800] rev 27924
transaction: abort transaction during hook exception The new transaction context did not handle the case where an exception during close should still call release. This cause pretxnclose hooks that failed to cause the transaction to fail without aborting, thus requiring a hg recover. I've added a test.
Wed, 20 Jan 2016 22:39:51 -0600 Added signature for changeset 158bdc896572 stable
Matt Mackall <mpm@selenic.com> [Wed, 20 Jan 2016 22:39:51 -0600] rev 27923
Added signature for changeset 158bdc896572
Wed, 20 Jan 2016 22:39:50 -0600 Added tag 3.7-rc for changeset 158bdc896572 stable
Matt Mackall <mpm@selenic.com> [Wed, 20 Jan 2016 22:39:50 -0600] rev 27922
Added tag 3.7-rc for changeset 158bdc896572
(0) -10000 -3000 -1000 -240 +240 +1000 +3000 +10000 tip