Submitter | David Soria Parra |
---|---|
Date | Oct. 3, 2013, 2:47 p.m. |
Message ID | <9e7613f80b09e92726b8.1380811664@achird.localdomain> |
Download | mbox | patch |
Permalink | /patch/2725/ |
State | Superseded |
Commit | 5836edcbdc2e4c5bd97a50db512191b98c2d69d8 |
Headers | show |
Comments
On 10/3/13 7:47 AM, "David Soria Parra" <dsp@experimentalworks.net> wrote: > ui.status(_('shelved as %s\n') % name) > hg.update(repo, parent.node()) > finally: >+ if bms: >+ # restore old bookmarks >+ bms.write() Do you need to restore the in-memory repo._bookmarks as well? Just in case the shelve function is ever called from another extension. A quick test seems to show me that editing .hg/bookmarks doesn't automatically cause repo._bookmarks to refresh. It'd also be nice if bookmarks were treated as part of the normal transaction. But that's probably out of the scope of this change.
On 10/03/2013 07:31 PM, Durham Goode wrote: > On 10/3/13 7:47 AM, "David Soria Parra" <dsp@experimentalworks.net> wrote: > >> ui.status(_('shelved as %s\n') % name) >> hg.update(repo, parent.node()) >> finally: >> + if bms: >> + # restore old bookmarks >> + bms.write() > > Do you need to restore the in-memory repo._bookmarks as well? Just in > case the shelve function is ever called from another extension. A quick > test seems to show me that editing .hg/bookmarks doesn't automatically > cause repo._bookmarks to refresh. yes i'll sent a follow-up patch. > > It'd also be nice if bookmarks were treated as part of the normal > transaction. But that's probably out of the scope of this change. > that would be ideal
Patch
diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -172,11 +172,12 @@ name = opts['name'] - wlock = lock = tr = None + wlock = lock = tr = bms = None try: wlock = repo.wlock() lock = repo.lock() + bms = repo._bookmarks.copy() # use an uncommited transaction to generate the bundle to avoid # pull races. ensure we don't print the abort message to stderr. tr = repo.transaction('commit', report=lambda x: None) @@ -224,11 +225,15 @@ fp=shelvedfile(repo, name, 'patch').opener('wb'), opts=mdiff.diffopts(git=True)) + if ui.formatted(): desc = util.ellipsis(desc, ui.termwidth()) ui.status(_('shelved as %s\n') % name) hg.update(repo, parent.node()) finally: + if bms: + # restore old bookmarks + bms.write() if tr: tr.abort() lockmod.release(lock, wlock) diff --git a/tests/test-shelve.t b/tests/test-shelve.t --- a/tests/test-shelve.t +++ b/tests/test-shelve.t @@ -418,3 +418,23 @@ default (*) create conflict (glob) $ hg shelve --cleanup $ hg shelve --list + +test bookmarks + + $ hg bookmark test + $ hg bookmark + * test 5:01ba9745dc5a + $ hg shelve + shelved as test + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg bookmark + * test 5:01ba9745dc5a + $ hg unshelve + unshelving change 'test' + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 7 files + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg bookmark + * test 5:01ba9745dc5a