[PATCH 1 of 4] revlog: add a callback "tracking" duplicate node addition

Gregory Szorc gregory.szorc at gmail.com
Thu Sep 27 16:53:15 EDT 2018


On Thu, Sep 27, 2018 at 9:55 AM Boris Feld <boris.feld at octobus.net> wrote:

> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1537383767 -7200
> #      Wed Sep 19 21:02:47 2018 +0200
> # Node ID 1bed338fee8612ca502b2ef462c8cd7a59efe0aa
> # Parent  ddca38941b2b80124220646554bbc2a0af1aff21
> # EXP-Topic revlog-duplicates
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r
> 1bed338fee86
> revlog: add a callback "tracking" duplicate node addition
>

I have a preference to handle this by passing in a callback function or by
returning the necessary data from somewhere. But we'll cross that bridge
when we divorce the changelog class from revlog in the future.

Queued, thanks.


>
> If a changegroup contains node already added to the repository, they will
> be
> skipped. Skipping them is the right behavior (we don't need to store things
> twice), but it can hide some information to the code doing the unbundle
> (eg:
> shelve looking for the tip of the bundle).
>
> The first step to improve this situation is to add a low level callback.
> We do
> not need this tracking on all revlog, so actual tracking will be added in
> the
> next changeset.
>
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -1797,6 +1797,10 @@ class revlog(object):
>          tr.replace(self.indexfile, trindex * self._io.size)
>          self._chunkclear()
>
> +    def _nodeduplicatecallback(self, transaction, node):
> +        """called when trying to add a node already stored.
> +        """
> +
>      def addrevision(self, text, transaction, link, p1, p2,
> cachedelta=None,
>                      node=None, flags=REVIDX_DEFAULT_FLAGS,
> deltacomputer=None):
>          """add a revision to the log
> @@ -2078,6 +2082,7 @@ class revlog(object):
>                  nodes.append(node)
>
>                  if node in self.nodemap:
> +                    self._nodeduplicatecallback(transaction, node)
>                      # this can happen if two branches make the same change
>                      continue
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20180927/aa545039/attachment.html>


More information about the Mercurial-devel mailing list