Skip to content
Snippets Groups Projects
  1. Apr 04, 2018
    • Gregory Szorc's avatar
      simplestore: use a custom store for the simple store repo · c2c8962a
      Gregory Szorc authored
      Before, we used the default store, which was based on fncache
      and dotencode. After attempting to port tests to work with the
      simple store, I realized that fncache was more trouble than it is
      worth.
      
      This commit implements a proper store type for the simple repo -
      one that isn't based off fncache.
      
      This causes a number of new test failures because of tests
      expecting the full fncache store filename encoding. I may
      extend the store format in a subsequent commit to take the
      filename encoding parts of fncache that we can take
      (basically everything except hash encoding, since that isn't
      reversible). But for now, let's use encoded store.
      
      As part of this, we implement proper requirements support for
      repos created with the simple store. This should have been
      done from the beginning, as a requirement is needed to lock
      out clients that don't understand a storage format.
      
      A new hghave feature advertising the presence of fncache in repos
      has been added. Most tests touching the fncache are now conditional
      on that feature.
      
      Other tests have added the optional repo requirement to output.
      
      Differential Revision: https://phab.mercurial-scm.org/D3095
      c2c8962a
  2. Feb 27, 2018
    • Jörg Sonnenberger's avatar
      wireproto: allow direct stream processing for unbundle · 2d965bfe
      Jörg Sonnenberger authored
      Introduce a new option server.streamunbundle which starts a transaction
      immediately to apply a bundle instead of writing it to a temporary file
      first. This side steps the need for a large tmp directory at the cost of
      preventing concurrent pushes. This is a reasonable trade-off for many
      setups as concurrent pushes for the main branch at least are disallowed
      anyway. The option defaults to off to preserve existing behavior.
      
      Change the wireproto interface to provide a generator for reading the
      payload and make callers responsible for consuming all data.
      
      Differential Revision: https://phab.mercurial-scm.org/D2470
      2d965bfe
  3. Apr 06, 2018
  4. Apr 04, 2018
  5. Mar 18, 2018
  6. Mar 24, 2018
  7. Apr 05, 2018
  8. Apr 03, 2018
  9. Apr 05, 2018
  10. Apr 02, 2018
  11. Apr 03, 2018
  12. Apr 04, 2018
  13. Apr 03, 2018
  14. Apr 04, 2018
    • Gregory Szorc's avatar
      tests: conditionalize tests based on presence of custom extensions · 4e6a6d0d
      Gregory Szorc authored
      The test harness supports injecting extensions via --extra-config-opt.
      However, if you do this, various tests that print state about loaded
      extensions fail.
      
      This commit teaches the test harness to recognize when custom
      extensions are loaded so that tests can use feature sniffing to
      conditionalize tests based on that.
      
      Differential Revision: https://phab.mercurial-scm.org/D3039
      4e6a6d0d
    • Augie Fackler's avatar
      simplestorerepo: avoid shadowing dict in list comprehension over dict · d62d2e34
      Augie Fackler authored
      Caught by pyflakes.
      
      Differential Revision: https://phab.mercurial-scm.org/D3077
      d62d2e34
    • Gregory Szorc's avatar
      tests: conditionalize tests based on presence of revlogs for files · cbc4425e
      Gregory Szorc authored
      ~85 tests don't like our non-revlog file store for various reasons.
      
      This commit introduces hghave functionality for declaring and querying
      repository features. By default, we assume repositories have
      revlog-based file storage. But if the HGREPOFEATURES environment
      variable is set, we can override the default set of repository
      features. If you run the test harness with our simplestorerepo
      extension and an environment variable set to the proper value, you
      can override the hghave defaults to agree with simplestorerepo's
      version of reality.
      
      Various tests have been modified so behavior dependent on revlog-based
      file storage is marked as such.
      
      This fixes a handful of test failures with our custom file storage
      extension. But dozens remain. The point of this commit is to demonstrate
      how tests will need to be modified to account for custom storage
      implementations.
      
      TBH, I'm not convinced hghave is the proper layer for repository
      feature detection. I /think/ we'll eventually want something in
      run-tests.py itself. But that would require inventing a new primitive
      in the test harness. This is all very alpha at the moment. So I think
      hghave is an acceptable place to hang this feature detection. I think
      the right time to be thinking about integrating this into run-tests.py
      is *after* we have a stable alternate storage implementation in core.
      For now, let's try to make progress towards the idea of an alternate
      storage backend.
      
      Differential Revision: https://phab.mercurial-scm.org/D3030
      cbc4425e
    • Gregory Szorc's avatar
      tests: add test extension implementing custom filelog storage · d257c5f2
      Gregory Szorc authored
      In order to better support partial clones, we'll need alternate
      repository storage mechanisms that aren't based on revlogs.
      
      Today, the interface for repository storage isn't very well defined.
      And there are various layering violations and assumptions made
      throughout the code that storage is backed by revlogs.
      
      In order to support alternate storage mechanisms, we'll need to
      formally declare and adhere to interfaces for storage. This will
      be a long, arduous process.
      
      This commit creates an extension that implements non-revlog storage
      for files. It defines a custom type that quacks like the existing
      revlog/filelog API but isn't backed by a revlog. The backing storage
      is - for simplicity reasons - a CBOR index and per-node files
      representing fulltext data.
      
      The localrepository class is modified so file(f) returns instances of
      this class instead of filelog instances.
      
      The purpose of this extension is to tease out what the actual filelog
      interface is - based on running the test harness - so we can formalize
      that interface and then implement a *real* alternate storage backend.
      
      Using `run-tests.py --extra-config-opt` to run the test harness
      with this extension enabled yields 83 failures out of 634 ran
      tests.
      
      The most common test failures are due to:
      
      * Issues with `hg verify`
      * LFS and largefiles (probably flags processing related)
      * Narrow.
      * Any test touching or inspecting individual filelog paths.
      * help and error output that is confused by the presence of an
        extension.
      * `hg debug*` commands doing low-level, revlog-y things.
      
      An 88% pass rate is pretty good for an initial implementation if you
      ask me!
      
      There is a bit of duplicate code in the new extension. That's by
      design: a point of this code is to tease out dependencies on revlog.
      That being said, there is opportunity to consolidate code by moving
      things out of the revlog API. For example, DAG traversal operations
      don't necessarily need to be implemented at the storage level. (Although
      for performance reasons they probably do.) Once we have a more
      well-defined interface, we could probably define the default
      implementations in terms of the base interface, pull those in via
      class inheritance, and have implementations override with faster
      versions if they so choose. (Or something like that.) But for now,
      the duplicate code should be acceptable.
      
      Differential Revision: https://phab.mercurial-scm.org/D3029
      d257c5f2
  15. Apr 03, 2018
    • Gregory Szorc's avatar
      tests: use `hg unbundle` instead of `hg pull` in some tests · 5d10f41d
      Gregory Szorc authored
      `hg pull <bundle>` uses the special "bundlerepo" repository. The
      bundlerepo code makes many assumptions about the storage of
      repositories. It will be difficult to teach bundlerepo to use
      non-revlog storage before a better storage interface is established.
      
      Many test failures using our "simple store" are related to
      bundlerepo: the simple store just isn't compatible with bundlerepo
      because of storage assumptions in bundlerepo.
      
      In order to mitigate the impact of bundlerepo on our code base,
      this commit changes various tests to use `hg unbundle` instead
      of `hg pull`. This bypasses the bundlerepo code.
      
      Tests exercising exchange functionality have not been altered, as
      they should be using `hg pull` and going through the bundlerepo
      code paths.
      
      Differential Revision: https://phab.mercurial-scm.org/D3059
      5d10f41d
  16. Apr 04, 2018
  17. Mar 31, 2018
    • Gregory Szorc's avatar
      peer: make ui an attribute · e826fe7a
      Gregory Szorc authored
      With abc interfaces, instance attributes could not satisfy
      @abc.abstractproperty requirements because interface conformance
      was tested at type creation time. When we created the abc
      peer interfaces, we had to make "ui" a @property to satisfy
      abc.
      
      Now that peer interfaces are using zope.interface and there is no
      import time validation (but there are tests validating instances
      conform to the interface), we can go back to using regular object
      attributes.
      
      Differential Revision: https://phab.mercurial-scm.org/D3069
      e826fe7a
    • Gregory Szorc's avatar
      repository: port peer interfaces to zope.interface · 39f7d4ee
      Gregory Szorc authored
      zope.interface is superior. Let's switch to it.
      
      Unlike abc, which defines interfaces through a base class,
      zope.interface uses different types for interfaces and for
      implementations. So, we had to invent some new types to hold the
      interfaces in order to separate the interface from its default
      implementation.
      
      The names here could probably be better. I've been wanting to
      overhaul the peer interface for a while. And wire protocol version
      2 will force that work. So anticipate a refactoring of these
      interfaces in later commits.
      
      With this commit, we no longer test abc interfaces in
      test-check-interfaces.py, so code for that has been removed.
      
      Differential Revision: https://phab.mercurial-scm.org/D3068
      
      # no-check-commit because of stream_out()
      39f7d4ee
  18. Mar 30, 2018
  19. Apr 02, 2018
  20. Mar 19, 2018
  21. Apr 02, 2018
Loading