[PATCH V2] cvsps: fix computation of parent revisions when log caching is on
Augie Fackler
raf at durin42.com
Fri Oct 9 12:44:26 CDT 2015
On Fri, Oct 09, 2015 at 03:29:35PM +0300, Emanuele Giaquinta wrote:
> # HG changeset patch
> # User Emanuele Giaquinta <emanuele.giaquinta at gmail.com>
> # Date 1444206832 -10800
> # Wed Oct 07 11:33:52 2015 +0300
> # Node ID 724877229b9a3b513c0f325bb362626d6ed46210
> # Parent a024e2db4553492e173032f52464e2c4efe0d4fa
> cvsps: fix computation of parent revisions when log caching is on
With this applied I'm seeing consistent failures of test-convert-cvs.t like this:
--- /home/augie/hg/tests/test-convert-cvs.t
+++ /home/augie/hg/tests/test-convert-cvs.t.err
@@ -344,10 +344,6 @@
$ cvscall -q remove -f b/c
cvs remove: use 'cvs commit' to remove this file permanently
$ cvscall -q commit -mci
- Checking in a;
- $TESTTMP/cvsrepo/src/a,v <-- a
- new revision: 1.3; previous revision: 1.2
- done
Removing b/c;
$TESTTMP/cvsrepo/src/b/c,v <-- c
new revision: delete; previous revision: 1.3
@@ -357,8 +353,8 @@
$ hg debugcvsps --fuzz=2 -u
collecting CVS rlog
- 13 log entries
- cvslog hook: 13 entries
+ 12 log entries
+ cvslog hook: 12 entries
creating changesets
11 changeset entries
cvschangesets hook: 11 changesets
@@ -498,7 +494,6 @@
ci
Members:
- a:1.2->1.3
b/c:1.3->1.4(DEAD)
>
> cvsps computes the parent revisions of log entries by walking the cvs log
> sorted by (rcs, revision) and by iteratively maintaining a 'versions'
> dictionary which maps a (rcs, branch) pair onto the last revision seen for that
> pair. When log caching is on and a log cache exists, cvsps fails to set the
> parent revisions of new log entries because it does not iterate over the log
> cache in the parents computation. A complication is that a file rcs can change
> (move to/from the attic), with respect to its value in the log cache, if the
> file is removed/added back. This patch adds an iteration over the log cache to
> update the rcs of cached log entries, if changed, and to properly populate the
> 'versions' dictionary.
>
> diff -r a024e2db4553 -r 724877229b9a hgext/convert/cvsps.py
> --- a/hgext/convert/cvsps.py Mon Oct 05 02:33:45 2015 -0700
> +++ b/hgext/convert/cvsps.py Wed Oct 07 11:33:52 2015 +0300
> @@ -207,6 +207,7 @@
> # state machine begins here
> tags = {} # dictionary of revisions on current file with their tags
> branchmap = {} # mapping between branch names and revision numbers
> + rcsmap = {}
> state = 0
> store = False # set when a new record can be appended
>
> @@ -439,6 +440,8 @@
>
> log.append(e)
>
> + rcsmap[e.rcs.replace('/Attic/', '/')] = e.rcs
> +
> if len(log) % 100 == 0:
> ui.status(util.ellipsis('%d %s' % (len(log), e.file), 80)+'\n')
>
> @@ -446,6 +449,13 @@
>
> # find parent revisions of individual files
> versions = {}
> + for e in sorted(oldlog, key=lambda x: (x.rcs, x.revision)):
> + rcs = e.rcs.replace('/Attic/', '/')
> + if rcs in rcsmap:
> + e.rcs = rcsmap[rcs]
> + branch = e.revision[:-1]
> + versions[(e.rcs, branch)] = e.revision
> +
> for e in log:
> branch = e.revision[:-1]
> p = versions.get((e.rcs, branch), None)
> diff -r a024e2db4553 -r 724877229b9a tests/test-convert-cvs.t
> --- a/tests/test-convert-cvs.t Mon Oct 05 02:33:45 2015 -0700
> +++ b/tests/test-convert-cvs.t Wed Oct 07 11:33:52 2015 +0300
> @@ -333,13 +333,35 @@
> testing debugcvsps
>
> $ cd src
> - $ hg debugcvsps --fuzz=2
> + $ hg debugcvsps --fuzz=2 -x >/dev/null
> +
> +commit a new revision changing a and removing b/c
> +
> + $ cvscall -q update -A
> + U a
> + U b/c
> + $ echo h >> a
> + $ cvscall -q remove -f b/c
> + cvs remove: use 'cvs commit' to remove this file permanently
> + $ cvscall -q commit -mci
> + Checking in a;
> + $TESTTMP/cvsrepo/src/a,v <-- a
> + new revision: 1.3; previous revision: 1.2
> + done
> + Removing b/c;
> + $TESTTMP/cvsrepo/src/b/c,v <-- c
> + new revision: delete; previous revision: 1.3
> + done
> +
> +update and verify the cvsps cache
> +
> + $ hg debugcvsps --fuzz=2 -u
> collecting CVS rlog
> - 11 log entries
> - cvslog hook: 11 entries
> + 13 log entries
> + cvslog hook: 13 entries
> creating changesets
> - 10 changeset entries
> - cvschangesets hook: 10 changesets
> + 11 changeset entries
> + cvschangesets hook: 11 changesets
> ---------------------
> PatchSet 1
> Date: * (glob)
> @@ -466,5 +488,18 @@
> Members:
> b/c:1.1.2.1->1.1.2.2
>
> + ---------------------
> + PatchSet 11
> + Date: * (glob)
> + Author: * (glob)
> + Branch: HEAD
> + Tag: (none)
> + Log:
> + ci
> +
> + Members:
> + a:1.2->1.3
> + b/c:1.3->1.4(DEAD)
> +
>
> $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list