Skip to content
Snippets Groups Projects
  1. May 31, 2018
    • Matt Harbison's avatar
      lfs: bypass wrapped functions when reposetup() hasn't been called (issue5902) · 3790efb3
      Matt Harbison authored
      There are only a handful of methods that access repo attributes that are applied
      in reposetup().  The `diff` test covers all of the commands that call
      scmutil.prefetchfiles().  Along the way, I saw that adding files and upgrading
      the repo format were also problems (also tested here).
      
      I don't think running `hg serve` through the commandserver is sane, but I
      conditionalized both the capabilities and the wsgirequest handler because it's
      trivially correct.  It doesn't look like there has ever been a caller of
      candownload(), so there's no test for that path.
      
      The upload case isn't testable, because uploadblobs() bails if there are no
      pointers.  The requirement should be added any time pointers are introduced, and
      that would force the extension to be loaded specifically for the repo.  This
      covers `debuglfsupload`, the pre-push hook (which isn't set until the repo is
      promoted to LFS), and uploadblobsfromrevs(), which can be called by other
      extensions.
      
      I think readfromstore() and writetostore() are only reachable as a flag
      processor for revlog.REVIDX_EXTSTORED, and a requirement is added as soon as
      that is seen, so I don't think those are a problem.
      3790efb3
  2. May 24, 2018
  3. May 18, 2018
  4. May 23, 2018
  5. May 04, 2018
  6. May 01, 2018
  7. May 21, 2018
  8. May 04, 2018
  9. May 15, 2018
  10. May 12, 2018
  11. May 11, 2018
  12. May 08, 2018
  13. May 05, 2018
  14. Dec 01, 2017
    • Gregory Szorc's avatar
      filelog: don't crash on invalid copy metadata (issue5748) · 6614cac5
      Gregory Szorc authored
      "copy" and "copyrev" are both supposed to appear next to each other.
      However, a user report demonstrated a crash that indicates that
      something in the wild is producing "copy" without "copyrev"
      (probably `hg convert`).
      
      While we should definitely fix the source of the bad metadata,
      the bad code causing the crash is already in the wild and who knows
      how many repositories are impacted. So let's be more defensive
      when accessing the file revision metadata.
  15. Apr 30, 2018
    • Gregory Szorc's avatar
      httppeer: detect redirect to URL without query string (issue5860) · 6169d95d
      Gregory Szorc authored
      197d10e157ce subtly changed the HTTP peer's handling of HTTP redirects.
      
      Before that changeset, we instantiated an HTTP peer instance and
      performed the capabilities lookup with that instance. The old code had
      the following relevant properties:
      
      1) The HTTP request layer would automatically follow HTTP redirects.
      2) An encountered HTTP redirect would update a peer instance variable
         pointing to the repo URL.
      3) The peer would automagically perform a "capabilities" command
         request if a caller requested capabilities but capabilities were
         not yet defined.
      
      The first HTTP request issued by a peer is for ?cmd=capabilities. If
      the server responds with an HTTP redirect to a ?cmd=capabilities URL,
      the HTTP request layer automatically followed it, retrieved a valid
      capabilities response, and the peer's base URL was updated
      automatically so subsequent requests used the proper URL. In other
      words, things "just worked."
      
      In the case where the server redirected to a URL without the
      ?cmd=capabilities query string, the HTTP request layer would follow
      the redirect and likely encounter HTML. The peer's base URL would be
      updated and the unexpected Content-Type would raise a RepoError. We
      would catch RepoError and immediately call between() (testing the case
      for pre 0.9.1 servers not supporting the "capabilities" command). e.g.
      
          try:
              inst._fetchcaps()
          except error.RepoError:
              inst.between([(nullid, nullid)])
      
      between() would eventually call into _callstream(). And _callstream()
      made a call to self.capable('httpheader'). capable() would call
      self.capabilities(), which would see that no capabilities were set
      (because HTML was returned for that request) and call the "capabilities"
      command to fetch capabilities. Because the base URL had been updated
      from the redirect, this 2nd "capabilities" command would succeed and
      the client would immediately call "between," which would also succeed.
      The legacy handshake succeeded. Only because "capabilities" was
      successfully executed as a side effect did the peer recognize that it
      was talking to a modern server. In other words, this all appeared to
      work accidentally.
      
      After 197d10e157ce, we stopped calling the "capabilities" command on
      the peer instance. Instead, we made the request via a low-level opener,
      detected the redirect as part of response handling code, and passed the
      redirected URL into the constructed peer instance.
      
      For cases where the redirected URL included the query string, this
      "just worked." But for cases where the redirected URL stripped the query
      string, we threw RepoError and because we removed the "between" handshake
      fallback, we fell through to the "is a static HTTP repo" check and
      performed an HTTP request for .hg/requires.
      
      While 197d10e157ce was marked as backwards incompatible, the only
      intended backwards incompatible behavior was not performing the
      "between" fallback. It was not realized that the "between" command
      had the side-effect of recovering from an errant redirect that
      dropped the query string.
      
      This commit restores the previous behavior and allows clients to
      handle a redirect that drops the query string. In the case where
      the request is redirected and the query string is dropped, we raise
      a special case of RepoError. We then catch this special exception in
      the handshake code and perform another "capabilities" request against
      the redirected URL. If that works, all is well. Otherwise, we fall back
      to the "is a static HTTP repo" check.
      
      The new code is arguably better than before 197d10e157ce, as it is
      explicit about the expected behavior and we avoid performing a
      "between" request, saving a server round trip.
      
      Differential Revision: https://phab.mercurial-scm.org/D3433
      6169d95d
  16. May 03, 2018
  17. May 01, 2018
  18. Apr 27, 2018
  19. Apr 26, 2018
  20. Apr 25, 2018
    • Gregory Szorc's avatar
      tests: explicitly define compression engines for tests · da07c781
      Gregory Szorc authored
      The zstd compression engine requires C extensions and isn't present
      in pure Python builds.
      
      The compression engine list leaks into the server capabilities string.
      
      Unless we're testing functionality specific to a compression format,
      the set of compression formats supported by a server doesn't matter
      much.
      
      So this commit explicitly defines the server's compression engines for
      some tests so behavior is consistent between pure and non-pure builds.
      
      Differential Revision: https://phab.mercurial-scm.org/D3431
      da07c781
    • Augie Fackler's avatar
      tests: update no-zstd branch of test-treediscovery.t as in 330ada7e8ea5 · b56e2c13
      Augie Fackler authored
      This side of the test got overlooked. We should probably consider
      having a way to run some of our tests through a "no-zstd" case just
      like we run some things through a "no-obsmarkers" case, but that's not
      an appropriate thing for stable.
      
      Differential Revision: https://phab.mercurial-scm.org/D3430
      b56e2c13
    • Augie Fackler's avatar
      tests: glob away content-length changes relating to missing zstd bindings · 143632f8
      Augie Fackler authored
      This doesn't fix everything in these two tests around missing zstd: we
      still get some changes in the CBOR payload in ways that I think we
      probably shouldn't bother to glob around. Maybe we should just disable
      zstd support in some of these lower-level wireproto tests?
      
      Differential Revision: https://phab.mercurial-scm.org/D3429
      143632f8
    • Martin von Zweigbergk's avatar
      revlog: make pure version of _partialmatch() support 40-byte hex nodeids · ee3d58b4
      Martin von Zweigbergk authored
      Without this patch, test-histedit-arguments.t would fail when run with
      --pure. It turned out to be because the pure version of
      _partialmatch() does not support full 40-byte hex nodeids. When
      histedit's instructions include things like "pick tip", it resolves
      the "tip" revision early to a full nodeid (but plain hex nodeid
      prefixes are not resolved to full nodeids). Then the nodeid (full or
      not) is looked up using to a full nodeid later. This step is what
      fails in pure mode. It has been failing since my c4131138eadb
      (histedit: look up partial nodeid as partial nodeid, 2018-04-06). I
      haven't verified, but I suspect histedit instructions like "pick <full
      hex nodeid>" would have been failing before my commit too, though.
      
      The fix is trivial: change a "< 40" to "<= 40".
      
      Differential Revision: https://phab.mercurial-scm.org/D3428
      ee3d58b4
  21. Apr 24, 2018
    • Gregory Szorc's avatar
      hgweb: reuse body file object when hgwebdir calls hgweb (issue5851) · 877185de
      Gregory Szorc authored
      An unintended side-effect of f0a851542a05 was that the request body
      file object (which uses a util.cappedreader) was constructed twice
      when hgwebdir called into hgweb. Since we attempt to read all remaining
      data from this file object when Content-Length is defined and since there
      were two instances of this object and the client supplied no additional
      data to read, this resulted in deadlock.
      
      The fix implemented in this commit is to reuse the request body file
      object when it is passed from hgwebdir to hgweb.
      
      A test demonstrating `hg clone` and `hg push` via hgwebdir has been
      added. Without this patch, the test hangs when doing `hg clone`.
      Surprisingly, this must mean that we have effectively no test coverage
      of the wire protocol when run via hgwebdir.
      
      Differential Revision: https://phab.mercurial-scm.org/D3427
      877185de
    • Pulkit Goyal's avatar
      remotenames: mark the extension as EXPERIMENTAL · 678ab0de
      Pulkit Goyal authored
      I still don't feel confident about locking the behavior of all the things in
      the remotenames extension. Moreover the extension was introduced in this cycle
      only. Let's mark this extension EXPERIMENTAL for now so that we can change
      things especially the storage layer if required in next cycle.
      
      I will like to use cbor at storage layer too.
      
      Differential Revision: https://phab.mercurial-scm.org/D3426
      678ab0de
  22. Apr 25, 2018
  23. Apr 24, 2018
  24. Apr 23, 2018
    • Boris Feld's avatar
      sshpeer: reflect actual command activity one handshake · 58bbd14b
      Boris Feld authored
      The output from devel-peer-request is expected to give data about request and
      roundtrip done to the server. Changeset a9cffd14aa04 changed some of that by
      grouping hello and between commands call. However, the old sequence of command
      was "emulated" in sshpeer.
      
      Update the sshpeer to reflect this grouping of commands and update the tests
      that use it.
      58bbd14b
  25. Apr 24, 2018
Loading