view tests/test-narrow-patterns.t @ 39270:37e56607cbb9

lfs: add a progress bar when searching for blobs to upload The search itself can take an extreme amount of time if there are a lot of revisions involved. I've got a local repo that took 6 minutes to push 1850 commits, and 60% of that time was spent here (there are ~70K files): \ 58.1% wrapper.py: extractpointers line 297: pointers = extractpointers(... | 57.7% wrapper.py: pointersfromctx line 352: for p in pointersfromctx(ct... | 57.4% wrapper.py: pointerfromctx line 397: p = pointerfromctx(ctx, f, ... \ 38.7% context.py: __contains__ line 368: if f not in ctx: | 38.7% util.py: __get__ line 82: return key in self._manifest | 38.7% context.py: _manifest line 1416: result = self.func(obj) | 38.7% manifest.py: read line 472: return self._manifestctx.re... \ 25.6% revlog.py: revision line 1562: text = rl.revision(self._node) \ 12.8% revlog.py: _chunks line 2217: bins = self._chunks(chain, ... | 12.0% revlog.py: decompressline 2112: ladd(decomp(buffer(data, ch... \ 7.8% revlog.py: checkhash line 2232: self.checkhash(text, node, ... | 7.8% revlog.py: hash line 2315: if node != self.hash(text, ... | 7.8% revlog.py: hash line 2242: return hash(text, p1, p2) \ 12.0% manifest.py: __init__ line 1565: self._data = manifestdict(t... \ 16.8% context.py: filenode line 378: if not _islfs(fctx.filelog(... | 15.7% util.py: __get__ line 706: return self._filelog | 14.8% context.py: _filelog line 1416: result = self.func(obj) | 14.8% localrepo.py: file line 629: return self._repo.file(self... | 14.8% filelog.py: __init__ line 1134: return filelog.filelog(self... | 14.5% revlog.py: __init__ line 24: censorable=True)
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 24 Aug 2018 17:45:46 -0400
parents fa64a229f24b
children 0d572769046a
line wrap: on
line source

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

initialize nested directories to validate complex include/exclude patterns

  $ hg init master
  $ cd master
  $ cat >> .hg/hgrc <<EOF
  > [narrow]
  > serveellipses=True
  > EOF

  $ echo root > root
  $ hg add root
  $ hg commit -m 'add root'

  $ for d in dir1 dir2 dir1/dirA dir1/dirB dir2/dirA dir2/dirB
  > do
  >   mkdir -p $d
  >   echo $d/foo > $d/foo
  >   hg add $d/foo
  >   hg commit -m "add $d/foo"
  >   echo $d/bar > $d/bar
  >   hg add $d/bar
  >   hg commit -m "add $d/bar"
  > done
#if execbit
  $ chmod +x dir1/dirA/foo
  $ hg commit -m "make dir1/dirA/foo executable"
#else
  $ hg import --bypass - <<EOF
  > # HG changeset patch
  > make dir1/dirA/foo executable
  > 
  > diff --git a/dir1/dirA/foo b/dir1/dirA/foo
  > old mode 100644
  > new mode 100755
  > EOF
  applying patch from stdin
  $ hg update -qr tip
#endif
  $ hg log -G -T '{rev} {node|short} {files}\n'
  @  13 c87ca422d521 dir1/dirA/foo
  |
  o  12 951b8a83924e dir2/dirB/bar
  |
  o  11 01ae5a51b563 dir2/dirB/foo
  |
  o  10 5eababdf0ac5 dir2/dirA/bar
  |
  o  9 99d690663739 dir2/dirA/foo
  |
  o  8 8e80155d5445 dir1/dirB/bar
  |
  o  7 406760310428 dir1/dirB/foo
  |
  o  6 623466a5f475 dir1/dirA/bar
  |
  o  5 06ff3a5be997 dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da root
  
  $ cd ..

clone a narrow portion of the master, such that we can widen it later

  $ hg clone --narrow ssh://user@dummy/master narrow \
  > --include dir1 \
  > --include dir2 \
  > --exclude dir1/dirA \
  > --exclude dir1/dirB \
  > --exclude dir2/dirA \
  > --exclude dir2/dirB
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 6 changesets with 4 changes to 4 files
  new changesets *:* (glob)
  updating to branch default
  4 files updated, 0 files merged, 0 files removed, 0 files unresolved

  $ cd narrow
  $ hg tracked
  I path:dir1
  I path:dir2
  X path:dir1/dirA
  X path:dir1/dirB
  X path:dir2/dirA
  X path:dir2/dirB
  $ hg manifest -r tip
  dir1/bar
  dir1/dirA/bar
  dir1/dirA/foo
  dir1/dirB/bar
  dir1/dirB/foo
  dir1/foo
  dir2/bar
  dir2/dirA/bar
  dir2/dirA/foo
  dir2/dirB/bar
  dir2/dirB/foo
  dir2/foo
  root
  $ find * | sort
  dir1
  dir1/bar
  dir1/foo
  dir2
  dir2/bar
  dir2/foo
  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  5 c87ca422d521... dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root
  

widen the narrow checkout

  $ hg tracked --removeexclude dir1/dirA
  comparing with ssh://user@dummy/master
  searching for changes
  no changes found
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
  adding changesets
  adding manifests
  adding file changes
  added 9 changesets with 6 changes to 6 files
  new changesets *:* (glob)
  $ hg tracked
  I path:dir1
  I path:dir2
  X path:dir1/dirB
  X path:dir2/dirA
  X path:dir2/dirB
  $ find * | sort
  dir1
  dir1/bar
  dir1/dirA
  dir1/dirA/bar
  dir1/dirA/foo
  dir1/foo
  dir2
  dir2/bar
  dir2/foo

#if execbit
  $ test -x dir1/dirA/foo && echo executable
  executable
  $ test -x dir1/dirA/bar || echo not executable
  not executable
#endif

  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  8 c87ca422d521 dir1/dirA/foo
  |
  o  7 951b8a83924e... dir2/dirB/bar
  |
  o  6 623466a5f475 dir1/dirA/bar
  |
  o  5 06ff3a5be997 dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root
  

widen narrow spec again, but exclude a file in previously included spec

  $ hg tracked --removeexclude dir2/dirB --addexclude dir1/dirA/bar
  comparing with ssh://user@dummy/master
  searching for changes
  looking for local changes to affected paths
  deleting data/dir1/dirA/bar.i (reporevlogstore !)
  deleting data/dir1/dirA/bar/0eca1d0cbdaea4651d1d04d71976a6d2d9bfaae5 (reposimplestore !)
  deleting data/dir1/dirA/bar/index (reposimplestore !)
  no changes found
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
  adding changesets
  adding manifests
  adding file changes
  added 11 changesets with 7 changes to 7 files
  new changesets *:* (glob)
  $ hg tracked
  I path:dir1
  I path:dir2
  X path:dir1/dirA/bar
  X path:dir1/dirB
  X path:dir2/dirA
  $ find * | sort
  dir1
  dir1/bar
  dir1/dirA
  dir1/dirA/foo
  dir1/foo
  dir2
  dir2/bar
  dir2/dirB
  dir2/dirB/bar
  dir2/dirB/foo
  dir2/foo
  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  10 c87ca422d521 dir1/dirA/foo
  |
  o  9 951b8a83924e dir2/dirB/bar
  |
  o  8 01ae5a51b563 dir2/dirB/foo
  |
  o  7 5eababdf0ac5... dir2/dirA/bar
  |
  o  6 623466a5f475... dir1/dirA/bar
  |
  o  5 06ff3a5be997 dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root
  

widen narrow spec yet again, excluding a directory in previous spec

  $ hg tracked --removeexclude dir2/dirA --addexclude dir1/dirA
  comparing with ssh://user@dummy/master
  searching for changes
  looking for local changes to affected paths
  deleting data/dir1/dirA/foo.i (reporevlogstore !)
  deleting data/dir1/dirA/foo/162caeb3d55dceb1fee793aa631ac8c73fcb8b5e (reposimplestore !)
  deleting data/dir1/dirA/foo/index (reposimplestore !)
  no changes found
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
  adding changesets
  adding manifests
  adding file changes
  added 13 changesets with 8 changes to 8 files
  new changesets *:* (glob)
  $ hg tracked
  I path:dir1
  I path:dir2
  X path:dir1/dirA
  X path:dir1/dirA/bar
  X path:dir1/dirB
  $ find * | sort
  dir1
  dir1/bar
  dir1/foo
  dir2
  dir2/bar
  dir2/dirA
  dir2/dirA/bar
  dir2/dirA/foo
  dir2/dirB
  dir2/dirB/bar
  dir2/dirB/foo
  dir2/foo
  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  12 c87ca422d521... dir1/dirA/foo
  |
  o  11 951b8a83924e dir2/dirB/bar
  |
  o  10 01ae5a51b563 dir2/dirB/foo
  |
  o  9 5eababdf0ac5 dir2/dirA/bar
  |
  o  8 99d690663739 dir2/dirA/foo
  |
  o  7 8e80155d5445... dir1/dirB/bar
  |
  o  6 623466a5f475... dir1/dirA/bar
  |
  o  5 06ff3a5be997... dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root
  

include a directory that was previously explicitly excluded

  $ hg tracked --removeexclude dir1/dirA
  comparing with ssh://user@dummy/master
  searching for changes
  no changes found
  saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-widen.hg (glob)
  adding changesets
  adding manifests
  adding file changes
  added 13 changesets with 9 changes to 9 files
  new changesets *:* (glob)
  $ hg tracked
  I path:dir1
  I path:dir2
  X path:dir1/dirA/bar
  X path:dir1/dirB
  $ find * | sort
  dir1
  dir1/bar
  dir1/dirA
  dir1/dirA/foo
  dir1/foo
  dir2
  dir2/bar
  dir2/dirA
  dir2/dirA/bar
  dir2/dirA/foo
  dir2/dirB
  dir2/dirB/bar
  dir2/dirB/foo
  dir2/foo
  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  12 c87ca422d521 dir1/dirA/foo
  |
  o  11 951b8a83924e dir2/dirB/bar
  |
  o  10 01ae5a51b563 dir2/dirB/foo
  |
  o  9 5eababdf0ac5 dir2/dirA/bar
  |
  o  8 99d690663739 dir2/dirA/foo
  |
  o  7 8e80155d5445... dir1/dirB/bar
  |
  o  6 623466a5f475... dir1/dirA/bar
  |
  o  5 06ff3a5be997 dir1/dirA/foo
  |
  o  4 33227af02764 dir2/bar
  |
  o  3 5e1f9d8d7c69 dir2/foo
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root
  

  $ cd ..

clone a narrow portion of the master, such that we can widen it later

  $ hg clone --narrow ssh://user@dummy/master narrow2 --include dir1/dirA
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 5 changesets with 2 changes to 2 files
  new changesets *:* (glob)
  updating to branch default
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd narrow2
  $ find * | sort
  dir1
  dir1/dirA
  dir1/dirA/bar
  dir1/dirA/foo
  $ hg tracked --addinclude dir1
  comparing with ssh://user@dummy/master
  searching for changes
  no changes found
  saved backup bundle to $TESTTMP/narrow2/.hg/strip-backup/*-widen.hg (glob)
  adding changesets
  adding manifests
  adding file changes
  added 10 changesets with 6 changes to 6 files
  new changesets *:* (glob)
  $ find * | sort
  dir1
  dir1/bar
  dir1/dirA
  dir1/dirA/bar
  dir1/dirA/foo
  dir1/dirB
  dir1/dirB/bar
  dir1/dirB/foo
  dir1/foo
  $ hg log -G -T '{rev} {node|short}{if(ellipsis, "...")} {files}\n'
  @  9 c87ca422d521 dir1/dirA/foo
  |
  o  8 951b8a83924e... dir2/dirB/bar
  |
  o  7 8e80155d5445 dir1/dirB/bar
  |
  o  6 406760310428 dir1/dirB/foo
  |
  o  5 623466a5f475 dir1/dirA/bar
  |
  o  4 06ff3a5be997 dir1/dirA/foo
  |
  o  3 33227af02764... dir2/bar
  |
  o  2 594bc4b13d4a dir1/bar
  |
  o  1 47f480a08324 dir1/foo
  |
  o  0 2a4f0c3b67da... root