[PATCH 3 of 7 shelve-ext v5] shelve: add obs-based shelve functionality
Kostia Balytskyi
ikostia at fb.com
Fri Mar 31 09:54:47 EDT 2017
Thunderbird lets me down, so I will reply one more time from Outlook. I do not understand why we need to unhide a commit. Can you explain?
-----Original Message-----
From: Mercurial-devel [mailto:mercurial-devel-bounces at mercurial-scm.org] On Behalf Of Jun Wu
Sent: Thursday, 30 March, 2017 19:03
To: Kostia Balytskyi <kobalyts at outlook.com>
Cc: mercurial-devel at mercurial-scm.org
Subject: Re: [PATCH 3 of 7 shelve-ext v5] shelve: add obs-based shelve functionality
As long as evolve does not have a way to unhide a commit. I think we do need to use strip on repos that with obsstore enabled. So I'd say the patch probably needs to be deferred until we can unhide a commit.
Excerpts from Kostia Balytskyi's message of 2017-03-30 10:11:55 +0000:
>
> On 30/03/2017 10:15, Ryan McElroy wrote:
> >
> >
> > On 3/29/17 2:18 PM, Kostia Balytskyi wrote:
> >> # HG changeset patch
> >> # User Kostia Balytskyi <ikostia at fb.com> # Date 1490790691 25200
> >> # Wed Mar 29 05:31:31 2017 -0700
> >> # Node ID fc1144e5993a5c85060b913e2d92cd4b1b61772e
> >> # Parent 0aa864184c9d78c11d18980cf0faa10828445ff5
> >> shelve: add obs-based shelve functionality
> >>
> >> Obsolescense-based shelve works in a following way:
> >
> > s/ a/ the
> sigh :/ Will fix.
> >
> >> 1. In order to shelve some changes, it creates a commit, records
> >> its node into a .oshelve file and prunes created commit.
> >> 2. In order to finish a shelve operation, transaction is just
> >> closed and not aborted.
> >
> > s/transaction/the transaction
> >
> >>
> >> diff --git a/hgext/shelve.py b/hgext/shelve.py
> >> --- a/hgext/shelve.py
> >> +++ b/hgext/shelve.py
> >> @@ -380,10 +380,15 @@ def _nothingtoshelvemessaging(ui, repo,
> >> else:
> >> ui.status(_("nothing changed\n"))
> >> -def _shelvecreatedcommit(repo, node, name):
> >> - bases = list(mutableancestors(repo[node]))
> >> - shelvedfile(repo, name, 'hg').writebundle(bases, node)
> >> - cmdutil.export(repo, [node],
> >> +def _shelvecreatedcommit(ui, repo, node, name, tr):
> >> + if isobsshelve(repo, ui):
> >> + shelvedfile(repo, name, 'oshelve').writeobsshelveinfo({
> >> + 'node': nodemod.hex(node)
> >> + })
> >> + else:
> >> + bases = list(mutableancestors(repo[node]))
> >> + shelvedfile(repo, name, 'hg').writebundle(bases, node)
> >> + cmdutil.export(repo.unfiltered(), [node],
> >> fp=shelvedfile(repo, name,
> >> patchextension).opener('wb'),
> >> opts=mdiff.diffopts(git=True))
> >
> > I'm a latecomer to paying attention to this series, so please push
> > back on me if this has already been discussed, but I think it would
> > be "cleaner" to not mix old shelve and logic, and instead have just
> > have the main function _shelvecreatedcommit() call out to
> > _obsshelvecreatedcommit() or _abortshelvecreatedcommit() (or
> > whatever we call the traditional version).
> >
> > Again, feel free to push back if this has already been discussed or
> > discarded as a direction, or if there are other reasons to not do it.
> I agree that this can be made better. Sean Farley (if I'm not
> mistaken) suggested that this should be a class. I do not mind
> refactrong it later, but I want to get it in first as a functionality.
> Also, currently, if I understand you correctly, you want to split an
> 11 line function into two. I don't think it's worth it at the moment.
> >
> >> @@ -394,8 +399,13 @@ def _includeunknownfiles(repo, pats, opt
> >> extra['shelve_unknown'] = '\0'.join(s.unknown)
> >> repo[None].add(s.unknown)
> >> -def _finishshelve(repo):
> >> - _aborttransaction(repo)
> >> +def _finishshelve(ui, repo, tr, node):
> >> + if isobsshelve(repo, ui):
> >> + obsolete.createmarkers(repo, [(repo.unfiltered()[node], ())])
> >> + tr.close()
> >> + tr.release()
> >> + else:
> >> + _aborttransaction(repo)
> >> def _docreatecmd(ui, repo, pats, opts):
> >> wctx = repo[None]
> >> @@ -417,9 +427,12 @@ def _docreatecmd(ui, repo, pats, opts):
> >> try:
> >> lock = repo.lock()
> >> - # use an uncommitted 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)
> >> + # depending on whether shelve is traditional or
> >> + # obsolescense-based, we either abort or commit this
> >> + # transaction in the end. If we abort it, we don't
> >> + # want to print anything to stderr
> >> + report = None if isobsshelve(repo, ui) else (lambda x: None)
> >> + tr = repo.transaction('commit', report=report)
> >> interactive = opts.get('interactive', False)
> >> includeunknown = (opts.get('unknown', False) and @@
> >> -447,16 +460,19 @@ def _docreatecmd(ui, repo, pats, opts):
> >> _nothingtoshelvemessaging(ui, repo, pats, opts)
> >> return 1
> >> - _shelvecreatedcommit(repo, node, name)
> >> + _shelvecreatedcommit(ui, repo, node, name, tr)
> >> if ui.formatted():
> >> desc = util.ellipsis(desc, ui.termwidth())
> >> ui.status(_('shelved as %s\n') % name)
> >> - hg.update(repo, parent.node())
> >> + # current wc parent may be already obsolete becuase
> >> + # it might have been created previously and shelve just
> >> + # reuses it
> >> + hg.update(repo.unfiltered(), parent.node())
> >> if origbranch != repo['.'].branch() and not
> >> _isbareshelve(pats, opts):
> >> repo.dirstate.setbranch(origbranch)
> >> - _finishshelve(repo)
> >> + _finishshelve(ui, repo, tr, node)
> >> finally:
> >> _restoreactivebookmark(repo, activebookmark)
> >> lockmod.release(tr, lock)
> >>
> >
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel at mercurial-scm.org
> > https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2
> > Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DwIGaQ&c=5VD0RTtNlTh3y
> > cd41b3MUw&r=Pp-gQYFgs4tKlSFPF5kfCw&m=qAVx3CWvQmul5_yACH3VOILLHV82o-y
> > XY7HRz2iV5fE&s=Y_5Tnx37Hf8mrMgepf8a0dVgWgR4iU5-QAu-zxax_oo&e=
>
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel at mercurial-scm.org
https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=Pp-gQYFgs4tKlSFPF5kfCw&m=qAVx3CWvQmul5_yACH3VOILLHV82o-yXY7HRz2iV5fE&s=Y_5Tnx37Hf8mrMgepf8a0dVgWgR4iU5-QAu-zxax_oo&e=
More information about the Mercurial-devel
mailing list