view tests/test-subrepo-missing.t @ 23701:76320e2ed0a8

context: remove unreliable accessor methods from committablectx There are two caching routes for (propertycache-ed) "_status" below in committablectx: - invoking "status()": "dirstate.status()" is invoked, and the result of it is cached into "_status". In this case, any of "listignored", "listclean" and "listunknown" may be True. - accessing "_status" directly before "status()": Own "status()" is invoked, but all of "listignored", "listclean" and "listunknown" arguments are False, in this case. "ignored"/"clean"/"unknown" accessor methods of "committablectx" use corresponded fields of "_status", but these fields aren't reliable, because these fields are empty when: - "_status" method is executed before accessors, or - "status()" is executed with "list*=False" before accessors In addition to it, these accessors aren't used in the recent Mercurial implementation. At least, removing them doesn't cause any test failures.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Wed, 31 Dec 2014 17:55:43 +0900
parents fab9dda0f2a3
children 871485bd03fd
line wrap: on
line source

  $ 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

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

abort more gracefully on .hgsubstate parsing error

  $ cp .hgsubstate .hgsubstate.old
  >>> file('.hgsubstate', 'wb').write('\ninvalid')
  $ hg st --subrepos
  abort: invalid subrepository revision specifier in .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
  warning: subrepo spec file .hgsub not found
  warning: subrepo spec file .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 subrepo
  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
  remote changed .hgsubstate which local 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 subrepo
  a

Enable obsolete

  $ cat >> $HGRCPATH << EOF
  > [ui]
  > logtemplate= {rev}:{node|short} {desc|firstline}
  > [phases]
  > publish=False
  > [experimental]
  > evolution=createmarkers
  > 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 subrepo subrepo is hidden
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved

  $ cd ..