[PATCH 2 of 6] transaction: use unfiltered changelog length for transaction start
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri May 19 16:05:15 EDT 2017
On 05/18/2017 08:23 PM, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1495129620 25200
> # Thu May 18 10:47:00 2017 -0700
> # Node ID 35235b1cefb101dad0672a4c4ee9486fba8b935b
> # Parent 19be454ee16925d01da8f9d329cb48556083da1b
> transaction: use unfiltered changelog length for transaction start
>
> Previously we used the normal changelog length for the transaction start. This
> triggered the computehidden logic which in a future patch triggers logic in the
> new hidden store which may start a transaction. This is circular and results in
> broken transaction mechanics, so let's use the unfiltered repo instead to avoid
> triggering computehidden during transaction start.
>
> This seems like how it should've been in the first place anyway since recording
> the length of the filtered changelog seems odd for a transaction.
>
> This was causing test failures in a future patch, so test coverage will come
> from the future patch.
yes, writing filtered journal seems a bit odd. However I would rather
see the whole _writejournal run unfiltered.
There are a '@unfilteredmethod' decorator for this purpose.
To push things further. I wonder why we are not running the transaction
logic on an unfiltered repository, but I could see potential issue with
hooks running on an unfiltered repository.
I've run the testsuit with a unfiltered transaction and everything pass.
That might be from the lack of testing of the problematic cases.
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -1123,7 +1123,7 @@ class localrepository(object):
> self.vfs.write("journal.branch",
> encoding.fromlocal(self.dirstate.branch()))
> self.vfs.write("journal.desc",
> - "%d\n%s\n" % (len(self), desc))
> + "%d\n%s\n" % (len(self.unfiltered()), desc))
> self.vfs.write("journal.bookmarks",
> self.vfs.tryread("bookmarks"))
> self.svfs.write("journal.phaseroots",
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list