tests/test-subrepo-missing.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 21 Feb 2024 13:05:29 +0100
changeset 51420 ac1c75188440
parent 49825 2f2682f40ea0
permissions -rw-r--r--
phases: invalidate the phases set less often on retract boundary We already have the information to update the phase set, so we do so directly instead of invalidating the cache. This show a sizeable speedup in our `perf::unbundle` benchmark on the many-draft mozilla-try repository. ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # benchmark.name = hg.perf.perf-unbundle # bin-env-vars.hg.flavor = no-rust # bin-env-vars.hg.py-re2-module = default # benchmark.variants.issue6528 = disabled # benchmark.variants.revs = last-10 before: 2.055259 seconds after: 1.887064 seconds (-8.18%) # benchmark.variants.revs = last-100 before: 2.409239 seconds after: 2.222429 seconds (-7.75%) # benchmark.variants.revs = last-1000 before: 3.945648 seconds after: 3.762480 seconds (-4.64%)

  $ hg init repo
  $ cd repo
  $ hg init subrepo
  $ echo a > subrepo/a
  $ hg -R subrepo ci -Am adda
  adding a
  $ echo 'subrepo = subrepo' > .hgsub
  $ hg ci -Am addsubrepo
  adding .hgsub
  $ echo b > subrepo/b
  $ hg -R subrepo ci -Am addb
  adding b
  $ hg ci -m updatedsub

ignore blanklines in .hgsubstate

  >>> open('.hgsubstate', 'wb').write(b'\n\n   \t \n   \n') and None
  $ hg st --subrepos
  M .hgsubstate
  $ hg revert -qC .hgsubstate

abort more gracefully on .hgsubstate parsing error

  $ cp .hgsubstate .hgsubstate.old
  >>> open('.hgsubstate', 'wb').write(b'\ninvalid') and None
  $ hg st --subrepos --cwd $TESTTMP -R $TESTTMP/repo
  abort: invalid subrepository revision specifier in 'repo/.hgsubstate' line 2
  [255]
  $ mv .hgsubstate.old .hgsubstate

delete .hgsub and revert it

  $ rm .hgsub
  $ hg revert .hgsub
  warning: subrepo spec file '.hgsub' not found
  warning: subrepo spec file '.hgsub' not found

delete .hgsubstate and revert it

  $ rm .hgsubstate
  $ hg revert .hgsubstate

delete .hgsub and update

  $ rm .hgsub
  $ hg up 0 --cwd $TESTTMP -R $TESTTMP/repo
  warning: subrepo spec file 'repo/.hgsub' not found
  warning: subrepo spec file 'repo/.hgsub' not found
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg st
  warning: subrepo spec file '.hgsub' not found
  ! .hgsub
  $ ls -A subrepo
  .hg
  a

delete .hgsubstate and update

  $ hg up -C
  warning: subrepo spec file '.hgsub' not found
  warning: subrepo spec file '.hgsub' not found
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ rm .hgsubstate
  $ hg up 0
  other [destination] changed .hgsubstate which local [working copy] deleted
  use (c)hanged version or leave (d)eleted? c
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg st
  $ ls -A subrepo
  .hg
  a

Enable obsolete

  $ cat >> $HGRCPATH << EOF
  > [ui]
  > logtemplate= {rev}:{node|short} {desc|firstline}
  > [phases]
  > publish=False
  > [experimental]
  > evolution.createmarkers=True
  > EOF

check that we can update parent repo with missing (amended) subrepo revision

  $ hg up --repository subrepo -r tip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg ci -m "updated subrepo to tip"
  created new head
  $ cd subrepo
  $ hg update -r tip
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo foo > a
  $ hg commit --amend -m "addb (amended)"
  $ cd ..
  $ hg update --clean .
  revision 102a90ea7b4a in subrepository "subrepo" is hidden
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

check that --hidden is propagated to the subrepo

  $ hg -R subrepo up tip
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg ci -m 'commit with amended subrepo'
  $ echo bar > subrepo/a
  $ hg -R subrepo ci --amend -m "amend a (again)"
  $ hg --hidden cat subrepo/a
  foo

verify will warn if locked-in subrepo revisions are hidden or missing

  $ hg ci -m "amended subrepo (again)"
  $ hg --config extensions.strip= --hidden strip -R subrepo -qr 'tip' --config devel.strip-obsmarkers=no
  $ hg verify -q
  subrepo 'subrepo' is hidden in revision a66de08943b6
  subrepo 'subrepo' is hidden in revision 674d05939c1e
  subrepo 'subrepo' not found in revision a7d05d9055a4

verifying shouldn't init a new subrepo if the reference doesn't exist

  $ mv subrepo b
  $ hg verify -q
  0: repository $TESTTMP/repo/subrepo not found
  1: repository $TESTTMP/repo/subrepo not found
  3: repository $TESTTMP/repo/subrepo not found
  4: repository $TESTTMP/repo/subrepo not found
  $ ls -A
  .hg
  .hgsub
  .hgsubstate
  b
  $ mv b subrepo

  $ cd ..