# HG changeset patch # User Pierre-Yves David # Date 2012-08-01 17:35:05 # Node ID 488e470634d8df94d0175c35ba71039b9c4ea043 # Parent f2bcc5975f108027629ac6d8179d0e4a1cb74ad8 test: add testing of checkheads behavior with obsolete Expected behavior is quite complex. Explicit testing with clear scenarios is welcome. diff --git a/tests/test-obsolete-checkheads.t b/tests/test-obsolete-checkheads.t new file mode 100644 --- /dev/null +++ b/tests/test-obsolete-checkheads.t @@ -0,0 +1,102 @@ +Check that obsolete properly strip heads + $ cat > obs.py << EOF + > import mercurial.obsolete + > mercurial.obsolete._enabled = True + > EOF + $ cat >> $HGRCPATH << EOF + > [phases] + > # public changeset are not obsolete + > publish=false + > [ui] + > logtemplate='{node|short} ({phase}) {desc|firstline}\n' + > [extensions] + > graphlog= + > EOF + $ echo "obs=${TESTTMP}/obs.py" >> $HGRCPATH + $ mkcommit() { + > echo "$1" > "$1" + > hg add "$1" + > hg ci -m "add $1" + > } + $ getid() { + > hg id --debug -ir "desc('$1')" + > } + + + $ hg init remote + $ cd remote + $ mkcommit base + $ hg phase --public . + $ cd .. + $ cp -r remote base + $ hg clone remote local + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd local + +New head replaces old head +========================== + +setup + + $ mkcommit old + $ hg push + pushing to $TESTTMP/remote + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + $ hg up -q '.^' + $ mkcommit new + created new head + $ hg debugobsolete `getid old` `getid new` + $ hg glog --hidden + @ 71e3228bffe1 (draft) add new + | + | x c70b08862e08 (draft) add old + |/ + o b4952fcf48cf (public) add base + + $ cp -r ../remote ../backup1 + +old exists remotely as draft. It is obsoleted by new that we now push. +Push should not warn about creating new head + + $ hg push + pushing to $TESTTMP/remote + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + +old head is obsolete but replacement in not pushed +================================================== + +setup + + $ rm -fr ../remote + $ cp -r ../backup1 ../remote + $ hg up -q '.^' + $ mkcommit other + created new head + $ hg glog --hidden + @ d7d41ccbd4de (draft) add other + | + | o 71e3228bffe1 (draft) add new + |/ + | x c70b08862e08 (draft) add old + |/ + o b4952fcf48cf (public) add base + + +old exists remotely as draft. It is obsoleted by new but we don't push new. +Push should abort on new head + + $ hg push -r 'desc("other")' + pushing to $TESTTMP/remote + searching for changes + abort: push creates new remote head d7d41ccbd4de! + (did you forget to merge? use push -f to force) + [255]