Diff
Not logged in

Differences From:

File tools/cvs2fossil/lib/c2f_prev.tcl part of check-in [0868adf92a] - Tweaked human readable representation of changesets to include their type. by aku on 2007-11-25 02:53:48. [view]

To:

File tools/cvs2fossil/lib/c2f_prev.tcl part of check-in [96167b2a48] - Changesets: Added accessor for to retrieve number of changesets known, and dropped the "trunk root -> NTDB root" dependency, is problematic. by aku on 2007-11-25 07:39:53. [view]

@@ -409,33 +409,44 @@
 	set mycounter [state one { SELECT MAX(cid) FROM changeset }]
 	return
     }
 
+    typemethod num {} { return $mycounter }
+
     proc PullInternalSuccessorRevisions {dv revisions} {
 	upvar 1 $dv dependencies
 	set theset ('[join $revisions {','}]')
 
+	# See PullSuccessorRevisions below for the main explanation of
+	# the various cases. This piece is special in that it
+	# restricts the successors we look for to the same set of
+	# revisions we start from. Sensible as we are looking for
+	# changeset internal dependencies.
+
 	foreach {rid child} [state run "
-   -- Primary children
+   -- (1) Primary child
 	    SELECT R.rid, R.child
 	    FROM   revision R
-	    WHERE  R.rid   IN $theset
-	    AND    R.child IS NOT NULL
-	    AND    R.child IN $theset
+	    WHERE  R.rid   IN $theset     -- Restrict to revisions of interest
+	    AND    R.child IS NOT NULL    -- Has primary child
+	    AND    R.child IN $theset     -- Which is also of interest
     UNION
-    -- Transition NTDB to trunk
-	    SELECT R.rid, R.dbchild
-	    FROM   revision R
-	    WHERE  R.rid   IN $theset
-	    AND    R.dbchild IS NOT NULL
-	    AND    R.dbchild IN $theset
-    UNION
-    -- Secondary (branch) children
+    -- (2) Secondary (branch) children
 	    SELECT R.rid, B.brid
 	    FROM   revision R, revisionbranchchildren B
-	    WHERE  R.rid   IN $theset
-	    AND    R.rid = B.rid
-	    AND    B.brid IN $theset
+	    WHERE  R.rid   IN $theset     -- Restrict to revisions of interest
+	    AND    R.rid = B.rid          -- Select subset of branch children
+	    AND    B.brid IN $theset      -- Which is also of interest
+    UNION
+    -- (4) Child of trunk root successor of last NTDB on trunk.
+	    SELECT R.rid, RA.child
+	    FROM revision R, revision RA
+	    WHERE R.rid   IN $theset      -- Restrict to revisions of interest
+	    AND   R.isdefault             -- Restrict to NTDB
+	    AND   R.dbchild IS NOT NULL   -- and last NTDB belonging to trunk
+	    AND   RA.rid = R.dbchild      -- Go directly to trunk root
+	    AND   RA.child IS NOT NULL    -- Has primary child.
+            AND   RA.child IN $theset     -- Which is also of interest
 	"] {
 	    # Consider moving this to the integrity module.
 	    if {$rid == $child} {
 		trouble internal "Revision $rid depends on itself."
@@ -459,16 +470,15 @@
 	#     link is made through the helper table
 	#     REVISIONBRANCHCHILDREN. R.rid -> RBC.rid, RBC.brid =
 	#     S(.rid)
 	#
-	# (3) If R is the trunk root of its file and S is the root of
-	#     the NTDB of the same file, then S is a successor of
-	#     R. There is no direct link between the two in the
-	#     database. An indirect link can be made through the FILE
-	#     they belong too, and their combination of attributes to
-	#     identify them. We check R for trunk rootness and then
-	#     select for the NTDB root, crossing the table with
-	#     itself.
+	# (3) Originally this use case defined the root of a detached
+	#     NTDB as the successor of the trunk root. This leads to a
+	#     bad tangle later on. With a detached NTDB the original
+	#     trunk root revision was removed as irrelevant, allowing
+	#     the nominal root to be later in time than the NTDB
+	#     root. Now setting this dependency will be backward in
+	#     time. REMOVED.
 	#
 	# (4) If R is the last of the NTDB revisions which belong to
 	#     the trunk, then the primary child of the trunk root (the
 	#     '1.2' revision) is a successor, if it exists.
@@ -484,18 +494,8 @@
 	    SELECT R.rid, B.brid
 	    FROM   revision R, revisionbranchchildren B
 	    WHERE  R.rid   IN $theset     -- Restrict to revisions of interest
 	    AND    R.rid = B.rid          -- Select subset of branch children
-    UNION
-    -- (3) NTDB root successor of Trunk root
-	    SELECT R.rid, RX.rid
-	    FROM   revision R, revision RX
-	    WHERE  R.rid   IN $theset     -- Restrict to revisions of interest
-	    AND    R.parent IS NULL       -- Restrict to root
-	    AND    NOT R.isdefault        -- on the trunk
-	    AND    R.fid = RX.fid         -- Select all revision in the same file
-	    AND    RX.parent IS NULL      -- Restrict to root
-	    AND    RX.isdefault           -- on the NTDB
     UNION
     -- (4) Child of trunk root successor of last NTDB on trunk.
 	    SELECT R.rid, RA.child
 	    FROM revision R, revision RA
@@ -528,9 +528,10 @@
 	#     cases, in contrast to the code retrieving the successor
 	#     information.
 	#
 	# (2) The complement of successor case (3). The trunk root is
-	#     a predecessor of a NTDB root.
+	#     a predecessor of a NTDB root. REMOVED. See
+	#     PullSuccessorRevisions for the explanation.
 	#
 	# (3) The complement of successor case (4). The last NTDB
 	#     revision belonging to the trunk is a predecessor of the
 	#     primary child of the trunk root (The '1.2' revision).
@@ -540,18 +541,8 @@
 	    SELECT R.rid, R.parent
 	    FROM   revision R
 	    WHERE  R.rid   IN $theset     -- Restrict to revisions of interest
 	    AND    R.parent IS NOT NULL   -- Has primary parent
-    UNION
-    -- (2) Trunk root predecessor of NTDB root.
-	    SELECT R.rid, RX.rid
-	    FROM   revision R, revision RX
-	    WHERE  R.rid IN $theset     -- Restrict to revisions of interest
-	    AND    R.parent IS NULL     -- which are root
-	    AND    R.isdefault          -- on NTDB
-	    AND    R.fid = RX.fid       -- Select all revision in the same file
-	    AND    RX.parent IS NULL    -- which are root
-	    AND    NOT RX.isdefault     -- on the trunk
     UNION
     -- (3) Last NTDB on trunk is predecessor of child of trunk root
 	    SELECT R.rid, RA.dbparent
 	    FROM revision R, revision RA