tests/test-extra-filelog-entry.t
author Gregory Szorc <gregory.szorc@gmail.com>
Wed, 12 Sep 2018 11:02:16 -0700
changeset 39703 bfeab472e3c0
parent 37285 d4e62df1c73d
child 49266 ccd76e292be5
permissions -rw-r--r--
localrepo: create new function for instantiating a local repo object Today, there is a single local repository class - localrepository. Its __init__ is responsible for loading the .hg/requires file and taking different actions depending on what is present. In addition, extensions may define a "reposetup" function that monkeypatches constructed repository instances, often by implementing a derived type and changing the __class__ of the repo instance. Work around alternate storage backends and partial clone has made it clear to me that shoehorning all this logic into __init__ and operating on an existing instance is too convoluted. For example, localrepository assumes revlog storage and swapping in non-revlog storage requires overriding e.g. file() to return something that isn't a revlog. I've authored various patches that either: a) teach various methods (like file()) about different states and taking the appropriate code path at run-time b) create methods/attributes/callables used for instantiating things and populating these in __init__ "a" incurs run-time performance penalties and makes code more complicated since various functions have a bunch of "if storage is X" branches. "b" makes localrepository quickly explode in complexity. My plan for tackling this problem is to make the local repository type more dynamic. Instead of a static localrepository class/type that supports all of the local repository configurations (revlogs vs other, revlogs with ellipsis, revlog v1 versus revlog v2, etc), we'll dynamically construct a type providing the implementations that are needed for the repository on disk, derived from the .hg/requires file and configuration options. The constructed repository type will be specialized and methods won't need to be taught about different implementations nor overloaded. We may also leverage this functionality for building types that don't implement all attributes. For example, the "intents" feature allows commands to declare that they are read only. By dynamically constructing a repository type, we could return a repository instance with no attributes related to mutating the repository. This could include things like a "changelog" property implementation that doesn't check whether it needs to invalidate the hidden revisions set on every access. This commit establishes a function for building a local repository instance. Future commits will start moving functionality from localrepository.__init__ to this function. Then we'll start dynamically changing the returned type depending on options that are present. This change may seem radical. But it should be fully compatible with the reposetup() model - at least for now. Differential Revision: https://phab.mercurial-scm.org/D4563
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12399
4fee1fd3de9a tests: added a short description to issue numbers
Martin Geisler <mg@aragost.com>
parents: 12328
diff changeset
     1
Issue351: mq: qrefresh can create extra revlog entry
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     2
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     3
  $ echo "[extensions]" >> $HGRCPATH
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     4
  $ echo "mq=" >> $HGRCPATH
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     5
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     6
  $ hg init
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     7
  $ hg qinit
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     8
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
     9
  $ echo b > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    10
  $ hg ci -A -m foo
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    11
  adding b
4531
b51a8138292a Avoid extra filelogs entries.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    12
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    13
  $ echo cc > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    14
  $ hg qnew -f foo.diff
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    15
  $ echo b > b
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    16
  $ hg qrefresh
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    17
14182
ec5886db9dc6 tests: fix deprecated use of hg debugdata/debugindex
Sune Foldager <cryo@cyanite.org>
parents: 12399
diff changeset
    18
  $ hg debugindex b
37285
d4e62df1c73d debugcommands: drop offset and length from debugindex by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
    19
     rev linkrev nodeid       p1           p2
d4e62df1c73d debugcommands: drop offset and length from debugindex by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
    20
       0       0 1e88685f5dde 000000000000 000000000000
12305
fd78997d1e6b tests: unify test-extra-filelog-entry
Adrian Buehlmann <adrian@cadifra.com>
parents: 4531
diff changeset
    21