view tests/test-sparse-import.t @ 39744:52dfa1eb0ad4

shelve: no longer strip internal commit when using internal phase When the internal phase is used, the internal commits we create during shelve will be automatically hidden, and we don't need to strip them. Avoiding strips gives much better performances and is less traumatic for caches. Test changes are all related to revision numbers increasing more quickly since we avoid stripping. At the end of `test-shelve.t` we now need manually strip the shelve-commit in addition to the x.shelve file deletion. This emulates a preexisting shelve after a repository upgrade. Note: The hidden internal commits confuses rebase a bit as shown by a new test added. This will happen when the user have shelve commits on top of a changeset to be rebased. We'll fix this in the next commit. As we still use a backup bundle, rebase can just strip the internal changesets and be fine.
author Boris Feld <boris.feld@octobus.net>
date Wed, 06 Jun 2018 02:31:46 +0200
parents 33d0859c37bd
children 5c2a4f37eace
line wrap: on
line source

test sparse

  $ hg init myrepo
  $ cd myrepo
  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > sparse=
  > purge=
  > strip=
  > rebase=
  > EOF

  $ echo a > index.html
  $ echo x > data.py
  $ echo z > readme.txt
  $ cat > base.sparse <<EOF
  > [include]
  > *.sparse
  > EOF
  $ hg ci -Aqm 'initial'
  $ cat > webpage.sparse <<EOF
  > %include base.sparse
  > [include]
  > *.html
  > EOF
  $ hg ci -Aqm 'initial'

Import a rules file against a 'blank' sparse profile

  $ cat > $TESTTMP/rules_to_import <<EOF
  > [include]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import
  $ ls
  data.py

  $ hg debugsparse --reset
  $ rm .hg/sparse

  $ cat > $TESTTMP/rules_to_import <<EOF
  > %include base.sparse
  > [include]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import
  $ ls
  base.sparse
  data.py
  webpage.sparse

  $ hg debugsparse --reset
  $ rm .hg/sparse

Start against an existing profile; rules *already active* should be ignored

  $ hg debugsparse --enable-profile webpage.sparse
  $ hg debugsparse --include *.py
  $ cat > $TESTTMP/rules_to_import <<EOF
  > %include base.sparse
  > [include]
  > *.html
  > *.txt
  > [exclude]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import
  $ ls
  base.sparse
  index.html
  readme.txt
  webpage.sparse
  $ cat .hg/sparse
  %include webpage.sparse
  [include]
  *.py
  *.txt
  [exclude]
  *.py

  $ hg debugsparse --reset
  $ rm .hg/sparse

Same tests, with -Tjson enabled to output summaries

  $ cat > $TESTTMP/rules_to_import <<EOF
  > [include]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import -Tjson
  [
   {
    "exclude_rules_added": 0,
    "files_added": 0,
    "files_conflicting": 0,
    "files_dropped": 4,
    "include_rules_added": 1,
    "profiles_added": 0
   }
  ]

  $ hg debugsparse --reset
  $ rm .hg/sparse

  $ cat > $TESTTMP/rules_to_import <<EOF
  > %include base.sparse
  > [include]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import -Tjson
  [
   {
    "exclude_rules_added": 0,
    "files_added": 0,
    "files_conflicting": 0,
    "files_dropped": 2,
    "include_rules_added": 1,
    "profiles_added": 1
   }
  ]

  $ hg debugsparse --reset
  $ rm .hg/sparse

  $ hg debugsparse --enable-profile webpage.sparse
  $ hg debugsparse --include *.py
  $ cat > $TESTTMP/rules_to_import <<EOF
  > %include base.sparse
  > [include]
  > *.html
  > *.txt
  > [exclude]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import -Tjson
  [
   {
    "exclude_rules_added": 1,
    "files_added": 1,
    "files_conflicting": 0,
    "files_dropped": 1,
    "include_rules_added": 1,
    "profiles_added": 0
   }
  ]

If importing results in no new rules being added, no refresh should take place!

  $ cat > $TESTTMP/trap_sparse_refresh.py <<EOF
  > from mercurial import error, sparse
  > def extsetup(ui):
  >     def abort_refresh(*args, **kwargs):
  >         raise error.Abort('sparse._refresh called!')
  >     sparse.refreshwdir = abort_refresh
  > EOF
  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > trap_sparse_refresh=$TESTTMP/trap_sparse_refresh.py
  > EOF
  $ cat > $TESTTMP/rules_to_import <<EOF
  > [include]
  > *.py
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import

If an exception is raised during refresh, restore the existing rules again.

  $ cat > $TESTTMP/rules_to_import <<EOF
  > [exclude]
  > *.html
  > EOF
  $ hg debugsparse --import-rules $TESTTMP/rules_to_import
  abort: sparse._refresh called!
  [255]
  $ cat .hg/sparse
  %include webpage.sparse
  [include]
  *.py
  *.txt
  [exclude]
  *.py