Mercurial > hg
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 |