tests/test-remotefilelog-bundle2-legacy.t
author Simon Sapin <simon.sapin@octobus.net>
Wed, 19 May 2021 16:18:16 +0200
changeset 47338 f27f2afb15da
parent 40722 0800d9e6e216
child 48657 68b7faeb6ef3
permissions -rw-r--r--
dirstate-tree: Skip readdir() in `hg status -mard` When running the status algorithm in a mode where we don’t list unknown or ignored files, all we care about are files that are listed in the dirstate. We can there for skip making expensive calls to readdir() to list the contents of filesystem directories, and instead only run stat() to get the filesystem state of files listed in the dirstate. (This state may be an error for files that don’t exist anymore on the filesystem.) On 16 CPU threads, this reduces the time spent in the `status()` function for `hg status -mard` on an old snapshot of mozilla-central from ~70ms to ~50ms. Differential Revision: https://phab.mercurial-scm.org/D10752

#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 util.safehasattr(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
  $ grep generaldelta master/.hg/requires
  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