tests/test-remotefilelog-bundle2-legacy.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Fri, 15 Mar 2024 01:31:57 +0100
branchstable
changeset 51505 c9ceb4f60256
parent 50928 d718eddf01d9
permissions -rw-r--r--
phases: avoid N² behavior in `advanceboundary` We allowed duplicated entries in the deque, which each entry could potentially insert all its ancestors. So advancing boundary for the full repository would mean each revision would walk all its ancestors, resulting in O(N²) iteration. For repository of any decent size, N² is quickly insane. We introduce a simple set to avoid this and get back to reasonable performance.

#require no-windows

  $ . "$TESTDIR/remotefilelog-library.sh"

generaldelta to generaldelta interactions with bundle2 but legacy clients
without changegroup2 support
  $ cat > testcg2.py << EOF
  > import sys
  > from mercurial import changegroup, registrar, util
  > cmdtable = {}
  > command = registrar.command(cmdtable)
  > @command('testcg2', norepo=True)
  > def testcg2(ui):
  >     if not hasattr(changegroup, 'cg2packer'):
  >         sys.exit(80)
  > EOF
  $ cat >> $HGRCPATH << EOF
  > [extensions]
  > testcg2 = $TESTTMP/testcg2.py
  > EOF
  $ hg testcg2 || exit 80

  $ cat > disablecg2.py << EOF
  > from mercurial import changegroup, error, util
  > deleted = False
  > def reposetup(ui, repo):
  >     global deleted
  >     if deleted:
  >         return
  >     packermap = changegroup._packermap
  >     # protect against future changes
  >     if len(packermap) != 3:
  >         raise error.Abort('packermap has %d versions, expected 3!' % len(packermap))
  >     for k in ['01', '02', '03']:
  >         if not packermap.get(k):
  >             raise error.Abort("packermap doesn't have key '%s'!" % k)
  > 
  >     del packermap['02']
  >     deleted = True
  > EOF

  $ hg init master
  $ hg debugrequires -R master | grep generaldelta
  generaldelta
  $ cd master
preferuncompressed = False so that we can make both generaldelta and non-generaldelta clones
  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > server=True
  > [experimental]
  > bundle2-exp = True
  > [server]
  > preferuncompressed = False
  > EOF
  $ echo x > x
  $ hg commit -qAm x

  $ cd ..

  $ hgcloneshallow ssh://user@dummy/master shallow -q --pull --config experimental.bundle2-exp=True
  1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)
  $ cd shallow
  $ cat >> .hg/hgrc << EOF
  > [extensions]
  > disablecg2 = $TESTTMP/disablecg2.py
  > EOF

  $ cd ../master
  $ echo y > y
  $ hg commit -qAm y

  $ cd ../shallow
  $ hg pull -u
  pulling from ssh://user@dummy/master
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 0 changes to 0 files
  new changesets d34c38483be9
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)

  $ echo a > a
  $ hg commit -qAm a
  $ hg push
  pushing to ssh://user@dummy/master
  searching for changes
  remote: adding changesets
  remote: adding manifests
  remote: adding file changes
  remote: added 1 changesets with 1 changes to 1 files