[PATCH 6 of 6] dirstate: make write() aware of pending file
Augie Fackler
raf at durin42.com
Tue May 19 18:36:22 CDT 2015
On Wed, May 20, 2015 at 01:42:06AM +0900, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
> # Date 1432051569 -32400
> # Wed May 20 01:06:09 2015 +0900
> # Node ID 18d35e7df884b3bdd8f6d1351703679f650a83b9
> # Parent 06310e0ab134f1bb45bdebd5d87cfcfca4ca2548
> dirstate: make write() aware of pending file
This series LGTM, but marmoute has some extra state so I'm going to
ask him to reivew it too.
>
> When pending file exists, `write()` should:
>
> - rename from `dirstate.pendnig` to `dirstate`, if not dirty
> - the former works well as the latter
> (dirstate hasn't been changed since last `_writepending()`), and
> - renaming is more efficient than writing out again
>
> - remove `dirstate.pending` and write changes into `dirstate`, otherwise
>
> `_fixuppending()` is defined as a function to reuse it in subsequent
> patch: pending file should be fixed up also at the end of transaction
> regardless of outcome of it.
>
> diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
> --- a/mercurial/dirstate.py
> +++ b/mercurial/dirstate.py
> @@ -621,6 +621,7 @@
> self._dirty = True
>
> def write(self):
> + self._fixuppending(None)
> if not self._dirty:
> return
> self._writedirstate(self._filename)
> @@ -633,6 +634,21 @@
> raise
> self._diverted = False
>
> + def _fixuppending(self, tr):
> + '''Fix up pending file
> +
> + `tr` may be None, because this is used also out of transaction
> + scope.
> + '''
> + if self._diverted:
> + if self._dirty:
> + # '.pending' file should be out of date
> + self._removepending()
> + else:
> + # dirstate hasn't been changed since last _writepending
> + self._opener.rename(self._pendingfilename, self._filename)
> + self._diverted = False
> +
> def _writepending(self, tr):
> '''Make pending data visible to external processes
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list