view tests/test-merge10.t @ 39700:b10d145837bc

localrepo: extract resolving of opener options to standalone functions Requirements and config options are converted into a dict which is available to the store vfs to consult. This is how storage options are communicated from the repo layer to the storage layer. Currently, we do that option resolution in a private method on the repo instance. And there is a single method doing that resolution. Opener options are logically specific to the storage backend they apply to. And, opener options may wish to influence how the repo object/type is constructed. So it makes sense to have more granular storage option resolution that occurs before the repo object is instantiated. This commit extracts the code for resolving opener options into new module-level functions. These functions are run before the repo instance is constructed. As part of the code move, we split the option resolution into generic and revlog-specific options. After this commit, we no longer add revlog-specific options to repos that don't have a revlog requirement. Some of these opener options and associated config options might make sense on alternate storage backends. We can always reuse config options and opener option names for other backends. But we shouldn't be passing opener options to storage backends that won't recognize them. I haven't done it here, but after this commit it should be possible for store backends to validate the set of opener options it receives. Because localrepository.openerreqs is no longer used after this commit, it has been removed. I'm not super thrilled about the code outside of localrepo that is adding requirements and updating opener options. We'll probably want to create a more formal API for that use case that constructs a new repo instance and poisons the old repo object. But this was a pre-existing issue and can be dealt with later. I have little doubt it will cause me troubles as I continue to refactor how repository objects are instantiated. .. api:: ``localrepository.openerreqs`` has been removed. Override ``localrepo.resolvestorevfsoptions()`` to add custom opener options. .. api:: ``localrepository._applyopenerreqs()`` has been removed. Use ``localrepo.resolvestorevfsoptions()`` to add custom opener options. Differential Revision: https://phab.mercurial-scm.org/D4576
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 12 Sep 2018 15:59:26 -0700
parents eb586ed5d8ce
children faa49a5914bb
line wrap: on
line source

Test for changeset 9fe267f77f56ff127cf7e65dc15dd9de71ce8ceb
(merge correctly when all the files in a directory are moved
but then local changes are added in the same directory)

  $ hg init a
  $ cd a
  $ mkdir -p testdir
  $ echo a > testdir/a
  $ hg add testdir/a
  $ hg commit -m a
  $ cd ..

  $ hg clone a b
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd a
  $ echo alpha > testdir/a
  $ hg commit -m remote-change
  $ cd ..

  $ cd b
  $ mkdir testdir/subdir
  $ hg mv testdir/a testdir/subdir/a
  $ hg commit -m move
  $ mkdir newdir
  $ echo beta > newdir/beta
  $ hg add newdir/beta
  $ hg commit -m local-addition
  $ hg pull ../a
  pulling from ../a
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  new changesets cc7000b01af9
  (run 'hg heads' to see heads, 'hg merge' to merge)
  $ hg up -C 2
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge
  merging testdir/subdir/a and testdir/a to testdir/subdir/a
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg stat
  M testdir/subdir/a
  $ hg diff --nodates
  diff -r bc21c9773bfa testdir/subdir/a
  --- a/testdir/subdir/a
  +++ b/testdir/subdir/a
  @@ -1,1 +1,1 @@
  -a
  +alpha

  $ cd ..