view tests/test-narrow-commit.t @ 42738:8041a1b45163

rust-discovery: takefullsample() core implementation take_full_sample() browses the undecided set in both directions: from its roots as well as from its heads. Following what's done on the Python side, we alter update_sample() signature to take a closure returning an iterator: either ParentsIterator or an iterator over the children found in `children_cache`. These constructs should probably be split off in a separate module. This is a first concrete example where a more abstract graph notion (probably a trait) would be useful, as this is nothing but an operation on the reversed DAG. A similar motivation in the context of the discovery process would be to replace the call to dagops::range in `add_missing_revisions()` with a simple iteration over descendents, again an operation on the reversed graph. Differential Revision: https://phab.mercurial-scm.org/D6424
author Georges Racinet <georges.racinet@octobus.net>
date Fri, 17 May 2019 01:56:57 +0200
parents 3984409e144b
children cc33deae66a1
line wrap: on
line source

#testcases flat tree

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

#if tree
  $ cat << EOF >> $HGRCPATH
  > [experimental]
  > treemanifest = 1
  > EOF
#endif

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 ..

(The lfs extension does nothing here, but this test ensures that its hook that
determines whether to add the lfs requirement, respects the narrow boundaries.)

  $ hg --config extensions.lfs= 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 -v -I 'relglob:f1'
  * matcher:
  <includematcher includes='(?:|.*/)f1(?:/|$)'>
  f  inside/f1  inside/f1
  $ hg add .
  $ 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]

But adding a truly excluded file shouldn't count

  $ hg add outside/f3 -X outside/f3

  $ 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 manifest --debug
  4d6a634d5ba06331a60c29ee0db8412490a54fcd 644   inside/f1
  7fb3bb6356d28d4dc352c5ba52d7350a81b6bd46 644   outside/f1 (flat !)
  d0f2f706468ab0e8bec7af87446835fb1b13511b 755 d outside/ (tree !)
  $ hg commit -m 'modify inside/f1'
  created new head
  $ hg files -r .
  inside/f1
  $ hg manifest --debug
  3f4197b4a11b9016e77ebc47fe566944885fd11b 644   inside/f1
  7fb3bb6356d28d4dc352c5ba52d7350a81b6bd46 644   outside/f1 (flat !)
  d0f2f706468ab0e8bec7af87446835fb1b13511b 755 d outside/ (tree !)
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 --no-dates
  n 644         10 set                 inside/f1