view tests/test-narrow-commit.t @ 36079:a2a6e724d61a

narrow: import experimental extension from narrowhg revision cb51d673e9c5 Adjustments: * renamed src to hgext/narrow * marked extension experimental * added correct copyright header where it was missing * updated hgrc extension enable line in library.sh * renamed library.sh to narrow-library.sh * dropped all files from repo root as they're not interesting * dropped test-pyflakes.t, test-check-code.t and test-check-py3-compat.t * renamed remaining tests to all be test-narrow-* when they didn't already * fixed test-narrow-expanddirstate.t to refer to narrow and not narrowhg * fixed tests that wanted `update -C .` instead of `merge --abort` * corrected a two-space indent in narrowspec.py * added a missing _() in narrowcommands.py * fixed imports to pass the import checker * narrow only adds its --include and --exclude to clone if sparse isn't enabled to avoid breaking test-duplicateoptions.py. This is a kludge, and we'll need to come up with a better solution in the future. These were more or less the minimum to import something that would pass tests and not create a bunch of files we'll never use. Changes I intend to make as followups: * rework the test-narrow-*-tree.t tests to use the new testcases functionality in run-tests.py * remove lots of monkeypatches of core things Differential Revision: https://phab.mercurial-scm.org/D1974
author Augie Fackler <augie@google.com>
date Mon, 29 Jan 2018 16:19:33 -0500
parents
children dc01484606da
line wrap: on
line source

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

create full repo

  $ hg init master
  $ cd master

  $ mkdir inside
  $ echo inside > inside/f1
  $ mkdir outside
  $ echo outside > outside/f1
  $ hg ci -Aqm 'initial'

  $ echo modified > inside/f1
  $ hg ci -qm 'modify inside'

  $ echo modified > outside/f1
  $ hg ci -qm 'modify outside'

  $ cd ..

  $ hg clone --narrow ssh://user@dummy/master narrow --include inside
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 3 changesets with 2 changes to 1 files
  new changesets *:* (glob)
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd narrow

  $ hg update -q 0

Can not modify dirstate outside

  $ mkdir outside
  $ touch outside/f1
  $ hg debugwalk -I 'relglob:f1'
  matcher: <includematcher includes='(?:(?:|.*/)f1(?:/|$))'>
  f  inside/f1  inside/f1
  $ hg add outside/f1
  abort: cannot track 'outside/f1' - it is outside the narrow clone
  [255]
  $ touch outside/f3
  $ hg add outside/f3
  abort: cannot track 'outside/f3' - it is outside the narrow clone
  [255]
  $ rm -r outside

Can modify dirstate inside

  $ echo modified > inside/f1
  $ touch inside/f3
  $ hg add inside/f3
  $ hg status
  M inside/f1
  A inside/f3
  $ hg revert -qC .
  $ rm inside/f3

Can commit changes inside. Leaves outside unchanged.

  $ hg update -q 'desc("initial")'
  $ echo modified2 > inside/f1
  $ hg commit -m 'modify inside/f1'
  created new head
  $ hg files -r .
  inside/f1
  outside/f1
Some filesystems (notably FAT/exFAT only store timestamps with 2
seconds of precision, so by sleeping for 3 seconds, we can ensure that
the timestamps of files stored by dirstate will appear older than the
dirstate file, and therefore we'll be able to get stable output from
debugdirstate. If we don't do this, the test can be slightly flaky.
  $ sleep 3
  $ hg status
  $ hg debugdirstate --nodates
  n 644         10 set                 inside/f1