diff --git a/hgext3rd/pushrebase.py b/hgext3rd/pushrebase.py --- a/hgext3rd/pushrebase.py +++ b/hgext3rd/pushrebase.py @@ -196,8 +196,16 @@ if not repo.revs(revset): raise error.Abort(_('nothing to rebase')) - if repo.revs('%r and public()', revset): - raise error.Abort(_('cannot rebase public changesets')) + revs = repo.revs('%r and public()', revset) + if revs: + nodes = [] + for count, rev in enumerate(revs): + if count >= 3: + nodes.append('...') + break + nodes.append(str(repo[rev])) + revstring = ', '.join(nodes) + raise error.Abort(_('cannot rebase public changesets: %s') % revstring) if repo.revs('%r and obsolete()', revset): raise error.Abort(_('cannot rebase obsolete changesets')) diff --git a/tests/test-pushrebase.t b/tests/test-pushrebase.t --- a/tests/test-pushrebase.t +++ b/tests/test-pushrebase.t @@ -937,3 +937,28 @@ (pull and rebase your changes locally, then try again) [255] +Push an already-public changeset and confirm it is rejected + + $ hg update -q '.^' + $ echo 2 > C + $ hg commit -m C -A C + created new head + $ hg phase -r. --public + $ hg push -r . --to default + pushing to $TESTTMP/server2 (glob) + searching for changes + abort: cannot rebase public changesets: 3850a85c4706 + [255] + + $ echo 3 >> C + $ hg commit -m C2 + $ echo 4 >> C + $ hg commit -m C3 + $ echo 5 >> C + $ hg commit -m C4 + $ hg phase -r. --public + $ hg push -r . --to default + pushing to $TESTTMP/server2 (glob) + searching for changes + abort: cannot rebase public changesets: 3850a85c4706, 50b1220b7c4e, de211a1843b7, ... + [255]