Commits

Patrick Mézard committed 3b1f326

obsolete: suspended changeset with secret only children should be secret too

test-obsolete-push.t: exhibit outgoing bug with suspended changeset in this case

Comments (0)

Files changed (2)

hgext/obsolete.py

             self._clearobsoletecache()
             # this is mainly for safety purpose
             # both pull and push
-            expobs = [c.node() for c in repo.set('extinct() - secret()')]
+            query = '(obsolete() - obsolete()::(unstable() - secret())) - secret()'
+            expobs = [c.node() for c in repo.set(query)]
             phases.retractboundary(repo, 2, expobs)
 
         ### Disk IO

tests/test-obsolete-push.t

+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ template='{rev}:{node|short}@{branch}({obsolete}/{phase}) {desc|firstline}\n'
+  $ glog() {
+  >   hg glog --template "$template" "$@"
+  > }
+
+Test outgoing, common A is suspended, B unstable and C secret, remote
+has A and B, neither A or C should be in outgoing.
+
+  $ hg init source
+  $ cd source
+  $ echo a > a
+  $ hg ci -qAm A a
+  $ echo b > b
+  $ hg ci -qAm B b
+  $ hg up 0
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo c > c
+  $ hg ci -qAm C c
+  $ hg phase --secret --force .
+  $ hg kill 0 1
+  1 new unstables changesets
+  $ glog --hidden
+  @  2:244232c2222a@default(unstable/secret) C
+  |
+  | o  1:6c81ed0049f8@default(extinct/secret) B
+  |/
+  o  0:1994f17a630e@default(suspended/secret) A
+  
+  $ hg init ../clone
+  $ cat >  ../clone/.hg/hgrc <<EOF
+  > [phases]
+  > publish = false
+  > EOF
+  $ hg outgoing ../clone --template "$template"
+  comparing with ../clone
+  searching for changes
+  no changes found (ignored 2 secret changesets)
+  [1]