sapling/tests
Durham Goode 2f853a6c50 treemanifest: improve integration with fastmanifest
Summary:
Previously treemanifest and fastmanifest were largely unaware of each other. If
the fastmanifest was available, we'd use that. If not, we'd try tree. Then we'd
fall back to flat. When comparing two manifests, this could cause problems since
if one manifest was fast and one was tree, we'd have to fall all the way back to
flat manifests to compare them.

This patch adds the ability to build a treemanifest from a fastmanifest for
inmemory manifests that were copied from a commit that has both a fastmanifest
and a treemanifest.  We do it by diff'ing the inmemory fastmanifest with the
commit fastmanifest, then applying that diff to the commit's treemanifest. Then
we can compare that tree with the other tree.

This is particularly useful when doing things like 'hg up master' after a pull.
The new master commit probably has a treemanifest, but doesn't yet have a
fastmanifest, while the commit the user is on probably has both. Now we can do
that hg up without having to parse a full manifest.

Once treemanifest has been enabled, every commit (both pulled and user created)
should have treemanifests. Therefore this case should never happen when
comparing two normal commits. So in theory, the only way to hit this case is
when Mercurial does a manifest.copy() on a manifest that has a fastmanifest
(like when reading a workingctx which must copy the commit manifest and apply
working copy changes), since the copy will choose to copy the fastmanifest and
leave the treemanifest behind. This patch addresses that case, so I think there
shouldn't be other cases.

Test Plan: Adds a test that covers this case.

Reviewers: #mercurial, rmcelroy

Reviewed By: rmcelroy

Subscribers: rmcelroy, mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D4402604

Signature: t1:4402604:1484216866:1c075f314026aaf608095b4aca37c9a4277ababa
2017-01-12 12:26:21 -08:00
..
blacklist-sqldirstate sqldirstate: call the registered callbacks on wd parent change 2016-08-15 03:46:52 -07:00
check-code.py checkcode: add check code test 2016-04-28 10:18:47 -07:00
check-foreignext.py check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
conduithttp.py testing: adjust for new home for cmdutil.service 2016-11-29 07:51:16 -08:00
dummyext1.py cleanup: make all the code compliant with the i18n rules for ui strings 2016-01-11 10:19:22 -08:00
dummyext2.py cleanup: make all the code compliant with the i18n rules for ui strings 2016-01-11 10:19:22 -08:00
dummyssh test: backout e221a52 (remove run-tests.py once again) 2015-12-16 16:42:17 +00:00
get-with-headers.py remotefilelog: pass modern check-code 2016-08-26 08:48:07 -07:00
getflogheads.py flogheads: add a test 2016-08-02 10:42:00 -07:00
heredoctest.py checkcode: fix tests 2016-04-26 13:00:31 -07:00
histedit-helpers.sh fb-histedit: Add a histedit extension that adds stop 2014-10-09 10:54:43 -07:00
killdaemons.py checkcode: fix tests 2016-04-26 13:00:31 -07:00
library-infinitepush.sh infinitepush: add new fields to the log 2016-12-21 01:41:44 -08:00
library.sh treemanifest: add test for incremental tree repack 2016-12-02 14:38:00 -08:00
lockfail.py infinitepush: avoid using push during debugbackup 2016-12-07 06:05:29 -08:00
perftest.py [remotefilelog] don't crash on invalid pack files 2017-01-12 09:47:29 -08:00
README fastannotate: support remotefilelog 2016-11-03 20:55:16 +00:00
require-core-hg.sh test-check: backport test-check-commit from core hg 2016-10-18 17:07:43 +01:00
require-ext.sh hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
run-sqlitedirstate-test.py sqldirstate: the extension 2016-05-06 16:56:45 -07:00
seq.py scmprompt: output only one remote bookmark 2017-01-04 00:23:16 -08:00
silenttestrunner.py store: add unit tests for datapack classes 2016-04-28 15:00:34 -07:00
test-absorb-edit-lines.t absorb: add an interface to edit lines for all involved revisions 2016-09-09 14:06:16 +01:00
test-absorb-filefixupstate.py absorb: fix test-check issues 2016-10-20 14:59:20 +01:00
test-absorb-rename.t absorb: improve rename handling 2016-09-28 23:56:43 +01:00
test-absorb.t absorb: fix an issue where changesets do not get deleted correctly 2016-11-01 21:16:13 +00:00
test-allowunstable.t allowunstable: allow rebasing in the middle of a stack without --keep 2016-12-06 17:56:17 -08:00
test-arcconfig.t add arcconfig accessors 2016-04-27 09:27:56 -07:00
test-backup.t tests_: fix failures related to recent renames 2016-09-22 07:44:34 -07:00
test-catnotate.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-check-code-hg.t check: update check code override 2016-11-16 13:51:48 -08:00
test-check-commit-hg.t test-check: backport test-check-commit from core hg 2016-10-18 17:07:43 +01:00
test-check-config-hg.t statprofext: remove dead file 2017-01-10 10:10:58 -08:00
test-check-execute-hg.t test-check: backport test-check-execute from core hg 2016-10-18 17:58:45 +01:00
test-check-pyflakes-hg.t pyflakes: fix all pyflakes issues 2016-11-25 00:23:21 +00:00
test-check-shbang-hg.t test-check: backport test-check-shbang from core hg 2016-10-18 22:28:50 +01:00
test-commitextras.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-ctreemanifest.py treemanifest: write deltas for trees 2016-11-29 15:37:58 -08:00
test-debugcommitmessage.t extension to print commit message that would be supplied to editor 2016-10-03 04:39:51 -07:00
test-dialect-show.t dialect: new extension to "translate" messages to a dialect 2016-09-21 15:04:42 +01:00
test-diff-since-last-arc-diff.t tests_: fix failures related to recent renames 2016-09-22 07:44:34 -07:00
test-dirsync.t Catch up with upstream changes so that our tests pass 2016-10-21 08:58:52 -07:00
test-errorredirect.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-extorder.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-fastannotate-corrupt.t tests.t: clean up the shell code a bit 2016-12-01 02:06:57 +00:00
test-fastannotate-diffopts.t tests.t: clean up the shell code a bit 2016-12-01 02:06:57 +00:00
test-fastannotate-hg.t fastannotate: resolve revision number to node 2016-12-07 00:09:04 +00:00
test-fastannotate-perfhack.t tests.t: clean up the shell code a bit 2016-12-01 02:06:57 +00:00
test-fastannotate-protocol.t fastannotate: add a config option to disable up-to-date check server-side 2016-12-06 21:19:59 +00:00
test-fastannotate-remotefilelog.t fastannotate: work better with remotefilelog 2016-12-19 12:13:51 -08:00
test-fastannotate-renames.t tests.t: clean up the shell code a bit 2016-12-01 02:06:57 +00:00
test-fastannotate-revmap.py fastannotate: add a method to quickly get the last node of the revmap 2016-10-29 19:19:18 +01:00
test-fastannotate.t fastannotate: resolve revision number to node 2016-12-07 00:09:04 +00:00
test-fastlog.t [fastlog-hg] More extensive fastlog test 2016-08-22 14:42:39 -07:00
test-fastmanifest-access.t [fastmanifest] split test-fastmanifest.t into multiple files 2016-06-03 17:03:55 -07:00
test-fastmanifest-blackbox.t [fastmanifest] prune the cache only when the revset is empty 2016-07-26 23:35:24 -07:00
test-fastmanifest-concurrency.t [fastmanifest] test to verify the behavior of the background cache worker 2016-06-24 16:17:40 -07:00
test-fastmanifest-permission.t fastmanifest: don't stop when we cannot get the lock 2016-06-13 15:26:55 -07:00
test-fastmanifest-pruning.t [fastmanifest] test to verify that a full cache can accept new data 2016-07-11 17:33:49 -07:00
test-fastmanifest-readfast.t fastmanifest: add the missing readfast method 2016-10-01 01:34:50 +01:00
test-fastmanifest-remotenames.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-fastmanifest-writepath.t [fastmanifest] fix incorrect table label 2016-06-24 16:13:39 -07:00
test-fastmanifest.py fastmanifest: fix broken assert 2016-08-24 11:31:06 -07:00
test-fastmanifest.t treemanifest: improve integration with fastmanifest 2017-01-12 12:26:21 -08:00
test-fbamend-next.t fbamend: add new implementations of hg previous and hg next 2016-11-15 18:46:56 -08:00
test-fbamend-nextrebase.t fbamend: edit hint to mention hg restack instead of hg amend --fixup 2017-01-09 11:09:02 -08:00
test-fbamend-previous.t fbamend: add new implementations of hg previous and hg next 2016-11-15 18:46:56 -08:00
test-fbamend-restack.t fbamend: silently drop --dest in restack instead of aborting 2017-01-10 13:53:43 -08:00
test-fbamend-userestack.t fbamend: edit hint to mention hg restack instead of hg amend --fixup 2017-01-09 11:09:02 -08:00
test-fbamend.t fbamend: edit hint to mention hg restack instead of hg amend --fixup 2017-01-09 11:09:02 -08:00
test-fbconduit.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-fbhistedit-exec-obsolete.t tests_: make sure loading sqldirstate does not break fbhistedit 2016-10-20 12:03:43 -07:00
test-fbhistedit-exec.t integration tests for sqldirstate/fbhistedit and "hg amend" test for latter 2016-10-21 06:01:59 -07:00
test-fbhistedit-rebase-interactive.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-fbhistedit-stop-obsolete.t doc: replace "commit" where it is used as a noun with "changeset" 2016-09-21 15:45:25 +01:00
test-fbhistedit-stop.t doc: replace "commit" where it is used as a noun with "changeset" 2016-09-21 15:45:25 +01:00
test-git-getmeta.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-githelp.t hgext: githelp support for commit -C 2016-12-02 10:41:54 +00:00
test-grepdiff.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-grpcheck.t grpcheck: new extension to check if the user is in given groups 2016-09-20 23:15:09 +01:00
test-infinitepush-backup-remotefilelog.t infinitepush: do not backup nodes if there are no filelogs client and server 2017-01-09 01:40:02 -08:00
test-infinitepush-backup-remotenames.t infinitepush: rename debugbackup to pushbackup 2016-12-08 09:24:19 -08:00
test-infinitepush-backup-sql.t infinitepush: rename debugbackup to pushbackup 2016-12-08 09:24:19 -08:00
test-infinitepush-backup.t infinitepush: do not use logfile in tests 2017-01-09 01:38:18 -08:00
test-infinitepush-bundlestore.t infinitepush: use --non-forward-move option instead of --force 2016-12-22 09:20:49 -08:00
test-infinitepush-logging.t infinitepush: log bundlesize server-side 2017-01-10 09:25:46 -08:00
test-infinitepush-pullbackup.t infinitepush: pullbackup command 2016-12-16 08:29:08 -08:00
test-infinitepush-remotefilelog.t tweakdefaults: fix check config test 2016-11-30 20:58:08 +00:00
test-infinitepush-remotenames.t tweakdefaults: fix check config test 2016-11-30 20:58:08 +00:00
test-infinitepush-sql.t infinitepush: backup local heads and bookmarks 2016-12-01 08:44:57 -08:00
test-inhibitwarn.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-linelog-random-edits.t [tests] add missing PYTHONPATH changes 2016-08-25 17:42:23 +01:00
test-linkrevcache-linkrevdb.py linkrevcache: implement the database 2016-11-14 18:03:15 +00:00
test-linkrevcache.t linkrevcache: wrap _adjustlinkrev to take advantage of the linkrev database 2016-11-14 18:04:29 +00:00
test-mergedriver.t Catch up with upstream changes so that our tests pass 2016-10-21 08:58:52 -07:00
test-morestatus.t morestatus: suggest --clean for unfinished update state 2017-01-03 16:25:52 +00:00
test-myparent.t myparent: commit template keywords based on your previous commit 2016-12-05 06:27:29 -08:00
test-nointerrupt.t test-nointerrupt.t: using OSX equivalent of timeout 2016-10-18 11:20:09 +01:00
test-ownercheck.t ownercheck: new extension to prevent operations on repos not owned 2016-07-26 13:10:15 +01:00
test-patchpython.py patchpython: fix test-check tests 2016-10-20 16:03:31 +01:00
test-perftweaks.t perftweaks: start logging active sparse profiles 2016-12-20 16:34:33 +00:00
test-phabdiff.t phabdiff: don't require a space when parsing the Tasks field 2016-11-15 12:28:21 -08:00
test-phabstatus.t Add sync status and change the conduit call to differential.querydiffhashes 2016-08-05 11:33:36 -07:00
test-profiling.t Log interactive time, internal command timing to scuba 2016-09-30 12:32:21 -07:00
test-pull-createmarkers-hide-later.t tests_: fix failures related to recent renames 2016-09-22 07:44:34 -07:00
test-pull-createmarkers.t tests_: fix failures related to recent renames 2016-09-22 07:44:34 -07:00
test-pushrebase-protection.t doc: replace "commit" where it is used as a noun with "changeset" 2016-09-21 15:45:25 +01:00
test-pushrebase-remotenames.t test-pushrebase-remotenames: add necessary spaces to fix the test 2016-09-26 19:55:06 +01:00
test-pushrebase.t test: fix osx compatibility 2017-01-03 13:09:31 -08:00
test-pushvars-remotenames.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-pushvars.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-rage.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-remotefilelog-bad-configs.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-blame.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-bundle2-legacy.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-bundle2.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-bundles.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-cacheprocess.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-clone-tree.t remotefilelog: make test less flaky 2016-10-31 13:39:17 -07:00
test-remotefilelog-clone.t test-remotefilelog-clone: do not hardcode time 2017-01-05 19:09:53 +00:00
test-remotefilelog-corrupt-cache.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-datapack.py pyflakes: fix all pyflakes issues 2016-11-25 00:23:21 +00:00
test-remotefilelog-gc.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-histpack.py pyflakes: fix all pyflakes issues 2016-11-25 00:23:21 +00:00
test-remotefilelog-http.t treemanifests: include dirlogs in streaming cloning 2016-08-29 16:19:52 -07:00
test-remotefilelog-linknodes.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-local.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-log.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-partial-shallow.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-permissions.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-prefetch.t remotefilelog: check file existence in _revertprefetch 2016-11-07 18:30:10 +00:00
test-remotefilelog-pull-noshallow.t remotefilelog: fix getchangegroup signature 2016-10-31 13:40:33 -07:00
test-remotefilelog-push-pull.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-repack-fast.t tweakdefaults: fix check config test 2016-11-30 20:58:08 +00:00
test-remotefilelog-repack.t tweakdefaults: fix check config test 2016-11-30 20:58:08 +00:00
test-remotefilelog-sparse.t remotefilelog: make remotefilelog sparse test more robust 2016-11-16 14:15:35 -08:00
test-remotefilelog-tags.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-remotefilelog-wireproto.t remotefilelog: rename tests/test-* to tests/test-remotefilelog-* 2016-08-26 06:11:27 -07:00
test-reset-remotenames.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-reset.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-sampling.t sampling: stop arcanist from interfering with sampling tests 2016-12-16 23:19:23 +00:00
test-scm-prompt-compat.t scm-prompt: add compatiblity layer 2016-07-22 16:31:51 -07:00
test-scm-prompt-git.t scm-prompt: add test for git behavior 2016-04-29 10:49:36 -07:00
test-scm-prompt-hg.t scmprompt: output only one remote bookmark 2017-01-04 00:23:16 -08:00
test-show.t Catch up with upstream changes so that our tests pass 2016-10-21 08:58:52 -07:00
test-simplecache.t Don't run the memcache test on Macs. 2016-10-24 11:49:54 -07:00
test-smartlog-inhibit.t smartlog: update fbamend error message 2017-01-10 16:31:29 -08:00
test-smartlog-remotenames.t doc: replace "commit" where it is used as a noun with "changeset" 2016-09-21 15:45:25 +01:00
test-smartlog-tweakdefaults.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-smartlog.t smartlog: remove unused edge when indentnonpublic is set 2016-09-17 02:22:36 +01:00
test-sparse-clone.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-sparse-extensions.t sparse: remove the failed attempt to change watchman config during test 2016-08-26 11:59:52 -07:00
test-sparse-import.t sparse: add rule import feature 2016-12-22 12:50:08 +00:00
test-sparse-merges.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-sparse-profiles.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-sparse.t testing: fix spacing for merge conflict markers 2016-11-29 07:23:32 -08:00
test-sqldirstate-fbhistedit.t integration tests for sqldirstate/fbhistedit and "hg amend" test for latter 2016-10-21 06:01:59 -07:00
test-sqldirstate-shelve.t shelve: fix tests according to new core functionality 2017-01-03 11:21:03 -08:00
test-sqldirstate-upgrade.t tests: fix checkcode and simple test failures 2016-08-01 11:54:13 -07:00
test-sshaskpass.py sshaskpass: enable ssh to ask password if running with chg 2016-07-17 20:35:34 +01:00
test-sshaskpass.py.out sshaskpass: enable ssh to ask password if running with chg 2016-07-17 20:35:34 +01:00
test-syncstatus.t Add sync status and change the conduit call to differential.querydiffhashes 2016-08-05 11:33:36 -07:00
test-treemanifest-autoconvert.t treemanifeset: fix auto-tree creation for merges 2016-12-31 18:22:38 -08:00
test-treemanifest-fastmanifest.t treemanifest: improve integration with fastmanifest 2017-01-12 12:26:21 -08:00
test-treemanifest-noflat.t [treemanifest] improve test glob patterns 2016-12-08 11:47:37 -08:00
test-treemanifest-repack.t treemanifest: add test for incremental tree repack 2016-12-02 14:38:00 -08:00
test-treemanifest.t hybridmanifest: don't reuse node in match results 2016-12-02 14:37:28 -08:00
test-tweakdefaults-blame.t tweakdefaults: make --phabdiff use shortdate on --quiet as in default blame 2017-01-10 08:48:02 -08:00
test-tweakdefaults-bookmarks.t test-tweakdefaults-bookmarks.t: fix typo 2016-08-15 18:45:19 +01:00
test-tweakdefaults-grep.t xargs on OS X does not return 123 2016-10-25 08:09:23 -07:00
test-tweakdefaults-histgrep.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-tweakdefaults-opawarecommands.t hgext: move single file extensions to hgext3rd 2016-07-08 13:15:42 +01:00
test-tweakdefaults-ordering.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-tweakdefaults-remotenames.t check-code: enfore checking before using common foreign extensions 2016-07-12 20:39:34 +01:00
test-tweakdefaults.t xargs on OS X does not return 123 2016-10-25 08:09:23 -07:00
test-uncommit-bookmark.t Implement 'hg uncommit' 2016-08-17 13:43:25 -07:00
test-uncommit-merge.t Implement 'hg uncommit' 2016-08-17 13:43:25 -07:00
test-uncommit.t Implement 'hg uncommit' 2016-08-17 13:43:25 -07:00
treemanifest_correctness.py [remotefilelog] don't crash on invalid pack files 2017-01-12 09:47:29 -08:00
waitforfile.py [fastmanifest] add the ability for waitforfile.py to wait for a file to materialize 2016-06-24 16:17:18 -07:00

How to run Facebook experimental extensions tests
=================================================

Running the tests
-----------------

To run the tests, `cd` into this directory (./tests/) and run the `run-tests.py`
script from the core Mercurial repository (tests directory too).

For example if you have a 'hg-crew' repository checked out next to this one,
use:

  ../../hg-crew/tests/run-tests.py

Obtaining the test runners
--------------------------

If you do not already have a copy of the Mercurial repository, you can obtains
one with:

  $ hg clone http://mercurial-scm.org/hg

Running against various Mercurial versions
------------------------------------------

By default, the test runners will run against the version of Mercurial in the
repository it lives in. you can run against other version of Mercurial using
the --with-hg=PATH flag. For example to run against the installed version of
Mercurial you can use --with-hg=`which hg`