comparison hgext/mq.py @ 17922:7f5dab94e48c

bookmarks: introduce a bmstore to manage bookmark persistence Bookmarks persistence still showed a fair amount of its legacy as a monkeypatching extension. This encapsulates all bookmarks serialization and parsing in a single class, and offers a single location where other bookmarks storage engines can be substituted in. As a result, many files no longer import the bookmarks module, which strikes me as an encapsulation win. This doesn't do anything to the current bookmark state yet, but I'm hoping put that in the bmstore class as well.
author Augie Fackler <raf@durin42.com>
date Wed, 07 Nov 2012 16:21:39 -0600
parents 4d1da97aa7e7
children 4dc438ddd246
comparison
equal deleted inserted replaced
17921:4ac9cf3d810c 17922:7f5dab94e48c
61 61
62 from mercurial.i18n import _ 62 from mercurial.i18n import _
63 from mercurial.node import bin, hex, short, nullid, nullrev 63 from mercurial.node import bin, hex, short, nullid, nullrev
64 from mercurial.lock import release 64 from mercurial.lock import release
65 from mercurial import commands, cmdutil, hg, scmutil, util, revset 65 from mercurial import commands, cmdutil, hg, scmutil, util, revset
66 from mercurial import repair, extensions, error, phases, bookmarks 66 from mercurial import repair, extensions, error, phases
67 from mercurial import patch as patchmod 67 from mercurial import patch as patchmod
68 import os, re, errno, shutil 68 import os, re, errno, shutil
69 69
70 commands.norepo += " qclone" 70 commands.norepo += " qclone"
71 71
1673 changes=c, opts=diffopts) 1673 changes=c, opts=diffopts)
1674 for chunk in chunks: 1674 for chunk in chunks:
1675 patchf.write(chunk) 1675 patchf.write(chunk)
1676 patchf.close() 1676 patchf.close()
1677 1677
1678 marks = repo._bookmarks
1678 for bm in bmlist: 1679 for bm in bmlist:
1679 repo._bookmarks[bm] = n 1680 marks[bm] = n
1680 bookmarks.write(repo) 1681 marks.write()
1681 1682
1682 self.applied.append(statusentry(n, patchfn)) 1683 self.applied.append(statusentry(n, patchfn))
1683 except: # re-raises 1684 except: # re-raises
1684 ctx = repo[cparents[0]] 1685 ctx = repo[cparents[0]]
1685 repo.dirstate.rebuild(ctx.node(), ctx.manifest()) 1686 repo.dirstate.rebuild(ctx.node(), ctx.manifest())
2997 "ancestors(bookmark() and not bookmark(%s))", 2998 "ancestors(bookmark() and not bookmark(%s))",
2998 mark, mark, mark) 2999 mark, mark, mark)
2999 revs.update(set(rsrevs)) 3000 revs.update(set(rsrevs))
3000 if not revs: 3001 if not revs:
3001 del marks[mark] 3002 del marks[mark]
3002 repo._writebookmarks(mark) 3003 marks.write()
3003 ui.write(_("bookmark '%s' deleted\n") % mark) 3004 ui.write(_("bookmark '%s' deleted\n") % mark)
3004 3005
3005 if not revs: 3006 if not revs:
3006 raise util.Abort(_('empty revision set')) 3007 raise util.Abort(_('empty revision set'))
3007 3008
3047 finally: 3048 finally:
3048 wlock.release() 3049 wlock.release()
3049 3050
3050 if opts.get('bookmark'): 3051 if opts.get('bookmark'):
3051 del marks[mark] 3052 del marks[mark]
3052 repo._writebookmarks(marks) 3053 marks.write()
3053 ui.write(_("bookmark '%s' deleted\n") % mark) 3054 ui.write(_("bookmark '%s' deleted\n") % mark)
3054 3055
3055 repo.mq.strip(repo, revs, backup=backup, update=update, 3056 repo.mq.strip(repo, revs, backup=backup, update=update,
3056 force=opts.get('force')) 3057 force=opts.get('force'))
3057 3058