[PATCH 04 of 10 shelve-ext v4] shelve: move node-pruning functionality to be member of shelvedstate
Augie Fackler
raf at durin42.com
Tue Mar 21 17:57:28 EDT 2017
On Sat, Mar 11, 2017 at 01:00:23PM -0800, Kostia Balytskyi wrote:
> # HG changeset patch
> # User Kostia Balytskyi <ikostia at fb.com>
> # Date 1489191652 28800
> # Fri Mar 10 16:20:52 2017 -0800
> # Node ID 3b034fb4bfcfdfd7700fd43edef33d032efd4924
> # Parent 8063b183d2396f14093ebe84da9cedf17b13881d
> shelve: move node-pruning functionality to be member of shelvedstate
>
> Node-pruning can be node stripping or marker creation, depending on
> whether shelve is traditional or obs-based. Thus it makes sense to
> move it to a separate function. Also, since we already have
> shelvedstate object and this functionality operates on that object,
> it makes sense to make it a method.
>
> Having shelvedstate object contain repo and ui as members allows for
> calling 'state.prunenodes()' instead of 'state.prunenodes(repo, ui)'
> which is better IMO.
I'm torn. It honestly feels a little weird to hold on to repo and ui
variables for this one function call. Maybe pass them in for now and
we can revisit the architecture later?
>
> diff --git a/hgext/shelve.py b/hgext/shelve.py
> --- a/hgext/shelve.py
> +++ b/hgext/shelve.py
> @@ -171,8 +171,12 @@ class shelvedstate(object):
> _keep = 'keep'
> _nokeep = 'nokeep'
>
> + def __init__(self, ui, repo):
> + self.ui = ui
> + self.repo = repo
> +
> @classmethod
> - def load(cls, repo):
> + def load(cls, ui, repo):
> fp = repo.vfs(cls._filename)
> try:
> version = int(fp.readline().strip())
> @@ -193,7 +197,7 @@ class shelvedstate(object):
> fp.close()
>
> try:
> - obj = cls()
> + obj = cls(ui, repo)
> obj.name = name
> obj.wctx = repo[wctx]
> obj.pendingctx = repo[pendingctx]
> @@ -226,6 +230,11 @@ class shelvedstate(object):
> def clear(cls, repo):
> util.unlinkpath(repo.join(cls._filename), ignoremissing=True)
>
> + def prunenodes(self):
> + """Cleanup temporary nodes from the repo"""
> + repair.strip(self.ui, self.repo, self.nodestoprune, backup=False,
> + topic='shelve')
> +
> def cleanupoldbackups(repo):
> vfs = vfsmod.vfs(repo.join(backupdir))
> maxbackups = repo.ui.configint('shelve', 'maxbackups', 10)
> @@ -569,8 +578,7 @@ def unshelveabort(ui, repo, state, opts)
> raise
>
> mergefiles(ui, repo, state.wctx, state.pendingctx)
> - repair.strip(ui, repo, state.nodestoprune, backup=False,
> - topic='shelve')
> + state.prunenodes()
> finally:
> shelvedstate.clear(repo)
> ui.warn(_("unshelve of '%s' aborted\n") % state.name)
> @@ -647,7 +655,7 @@ def unshelvecontinue(ui, repo, state, op
> mergefiles(ui, repo, state.wctx, shelvectx)
> restorebranch(ui, repo, state.branchtorestore)
>
> - repair.strip(ui, repo, state.nodestoprune, backup=False, topic='shelve')
> + state.prunenodes()
> shelvedstate.clear(repo)
> unshelvecleanup(ui, repo, state.name, opts)
> ui.status(_("unshelve of '%s' complete\n") % state.name)
> @@ -819,7 +827,7 @@ def _dounshelve(ui, repo, *shelved, **op
> ui.warn(_('tool option will be ignored\n'))
>
> try:
> - state = shelvedstate.load(repo)
> + state = shelvedstate.load(ui, repo)
> if opts.get('keep') is None:
> opts['keep'] = state.keep
> except IOError as err:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list