obsolete: suspended changeset with secret only children should be secret too
test-obsolete-push.t: exhibit outgoing bug with suspended changeset in this case
--- a/hgext/obsolete.py Fri Jun 22 18:04:43 2012 +0200
+++ b/hgext/obsolete.py Sat Jun 23 01:14:49 2012 +0200
@@ -853,7 +853,8 @@
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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-obsolete-push.t Sat Jun 23 01:14:49 2012 +0200
@@ -0,0 +1,48 @@
+ $ 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]