[PATCH 2 of 2] obsolete: extract obsolescence marker pulling in a dedicated function
Kevin Bullock
kbullock at ringworld.org
Thu Apr 18 16:05:06 CDT 2013
On 18 Apr 2013, at 12:16 PM, pierre-yves.david at logilab.fr wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at logilab.fr>
> # Date 1366192069 -7200
> # Wed Apr 17 11:47:49 2013 +0200
> # Node ID 6079d531bcb5542b24e4dc192d21eb926b8d223c
> # Parent 368a3c420ecf9712b2efa3caf894acf447814b3a
> obsolete: extract obsolescence marker pulling in a dedicated function
>
> Having a dedicated function will allows use to experiment with other exchange
> strategy in extension. Has we have not solid clues about how to do it right
> being able to experiment is vital.
>
> Some transaction trick are necessary for pull. But nothing to scary.
>
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -6,11 +6,11 @@
> # GNU General Public License version 2 or any later version.
> from node import hex, nullid, short
> from i18n import _
> import peer, changegroup, subrepo, discovery, pushkey, obsolete, repoview
> import changelog, dirstate, filelog, manifest, context, bookmarks, phases
> -import lock, transaction, store, encoding, base85
> +import lock, transaction, store, encoding
> import scmutil, util, extensions, hook, error, revset
> import match as matchmod
> import merge as mergemod
> import tags as tagsmod
> from lock import release
> @@ -1715,21 +1715,19 @@ class localrepository(object):
> else:
> # Remote is old or publishing all common changesets
> # should be seen as public
> phases.advanceboundary(self, phases.public, subset)
>
> - if obsolete._enabled:
> - self.ui.debug('fetching remote obsolete markers\n')
> - remoteobs = remote.listkeys('obsolete')
> - if 'dump0' in remoteobs:
> - if tr is None:
> - tr = self.transaction(trname)
> - for key in sorted(remoteobs, reverse=True):
> - if key.startswith('dump'):
> - data = base85.b85decode(remoteobs[key])
> - self.obsstore.mergemarkers(tr, data)
> - self.invalidatevolatilesets()
> + def gettransaction():
> + if tr is None:
> + return self.transaction(trname)
> + return tr
> +
> + obstr = obsolete.syncpull(self, remote, gettransaction)
> + if obstr is not None:
> + tr = obstr
> +
> if tr is not None:
> tr.close()
> finally:
> if tr is not None:
> tr.release()
> diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
> --- a/mercurial/obsolete.py
> +++ b/mercurial/obsolete.py
> @@ -371,11 +371,11 @@ def pushmarker(repo, key, old, new):
> lock.release()
>
> def syncpush(repo, remote):
> """utility function to push bookmark to a remote
>
> - exist mostly to allow overridding for experimentation purpose"""
> + Exist mostly to allow overridding for experimentation purpose"""
> if (_enabled and repo.obsstore and
> 'obsolete' in remote.listkeys('namespaces')):
> rslts = []
> remotedata = repo.listkeys('obsolete')
> for key in sorted(remotedata, reverse=True):
> @@ -384,10 +384,31 @@ def syncpush(repo, remote):
> rslts.append(remote.pushkey('obsolete', key, '', data))
> if [r for r in rslts if not r]:
> msg = _('failed to push some obsolete markers!\n')
> repo.ui.warn(msg)
>
> +def syncpull(repo, remote, gettransaction):
> + """utility function to pull bookmark to a remote
> +
> + The `gettransaction` is function that return the pull transaction, creating
> + one if necessary. We return the transaction to inform the calling code that
> + a new transaction have been created (when applicable).
> +
> + Exists mostly to allow overridding for experimentation purpose"""
> + tr = None
> + if _enabled:
> + repo.ui.debug('fetching remote obsolete markers\n')
> + remoteobs = remote.listkeys('obsolete')
> + if 'dump0' in remoteobs:
> + tr = gettransaction()
> + for key in sorted(remoteobs, reverse=True):
> + if key.startswith('dump'):
> + data = base85.b85decode(remoteobs[key])
> + repo.obsstore.mergemarkers(tr, data)
> + repo.invalidatevolatilesets()
> + return tr
> +
>
>
> def allmarkers(repo):
> """all obsolete markers known in a repository"""
> for markerdata in repo.obsstore:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
pacem in terris / мир / शान्ति / سَلاَم / 平和
Kevin R. Bullock
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20130418/b6325339/attachment.html>
More information about the Mercurial-devel
mailing list