diff --git a/hgext3rd/pushrebase.py b/hgext3rd/pushrebase.py --- a/hgext3rd/pushrebase.py +++ b/hgext3rd/pushrebase.py @@ -317,9 +317,19 @@ unwrapfunction(obsolete.obsstore, 'mergemarkers', _mergemarkers) mapping = getattr(repo.obsstore, '_pushrebasereplaces', {}) - if wnode in mapping: - with repo.wlock(): - hg.update(repo, mapping[wnode]) + if mapping: + with repo.wlock(), repo.lock(), repo.transaction('push') as tr: + # move working copy parent + if wnode in mapping: + hg.update(repo, mapping[wnode]) + # move bookmarks + bmarks = repo._bookmarks + bmarkchanges = [] + for oldnode, newnode in mapping.items(): + bmarkchanges.extend((name, newnode) + for name in repo.nodebookmarks(oldnode)) + if bmarkchanges: + bmarks.applychanges(repo, tr, bmarkchanges) return result diff --git a/tests/test-pushrebase.t b/tests/test-pushrebase.t --- a/tests/test-pushrebase.t +++ b/tests/test-pushrebase.t @@ -877,6 +877,7 @@ > default = ../server1 > EOF + $ hg book -i BOOK $ hg push -r . --to default pushing to $TESTTMP/server1 (glob) searching for changes @@ -892,7 +893,7 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg up tip -q $ log --hidden - @ a2 [public:722505d780e3] + @ a2 [public:722505d780e3] BOOK | o b [public:d2ae7f538514] | @@ -900,3 +901,10 @@ |/ o a [public:cb9a9f314b8b] + $ log + @ a2 [public:722505d780e3] BOOK + | + o b [public:d2ae7f538514] + | + o a [public:cb9a9f314b8b] +