Fossil

Diff
Login

Differences From Artifact [64c0d8ace6]:

To Artifact [9ff9d6eaa4]:


304
305
306
307
308
309
310
311
312
313
314






315





316

317
318
319
320



321
322
323
324



325
326
327
328
329
330
331
332
333
334
335
336
337

338

339
340
341
342
343
344








345
346
347






348
349
350
351
352
353
354
304
305
306
307
308
309
310




311
312
313
314
315
316
317
318
319
320
321
322

323
324



325
326
327
328



329
330
331












332
333

334






335
336
337
338
339
340
341
342



343
344
345
346
347
348
349
350
351
352
353
354
355







-
-
-
-
+
+
+
+
+
+

+
+
+
+
+
-
+

-
-
-
+
+
+

-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-

+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+







	# Phase I: Pull the revisions from memory and fill the graphs
	#          with them...

	set earcs   {} ; # Arcs for expansion graph
	set zarcs   {} ; # Arcs for zip graph
	set revmap  {} ; # path -> rid map to later merge uuid information

	foreach {rid revnr parent child coff clen} [state run {
	    SELECT R.rid, R.rev, R.parent, R.child, R.coff, R.clen
	    FROM   revision R
	    WHERE  R.fid = $myid
	foreach {rid revnr parent child coff clen cid cparent} [state run {
	    SELECT B.rid, R.rev, R.parent, R.child, B.coff, B.clen, B.bid, B.pid
	    FROM            blob B
	    LEFT OUTER JOIN revision R
	    ON              B.rid = R.rid
	    WHERE  B.fid = $myid
	}] {
	    # Main data are blobs, most will have revisions, but not
	    # all. The expansion graph is blob based, whereas the
	    # recompression graph is revision based.

	    if {$revnr ne ""} {
	    lappend revmap r$revnr $rid
		lappend revmap r$revnr $rid

	    $zp node insert $rid
	    $zp node set    $rid revnr $revnr
	    $zp node set    $rid label <$revnr>
		$zp node insert $rid
		$zp node set    $rid revnr $revnr
		$zp node set    $rid label <$revnr>

	    if {$child ne ""} {
		lappend zarcs $child $rid
	    }
		if {$child ne ""} {
		    lappend zarcs $child $rid
		}

	    $ex node insert $rid
	    $ex node set    $rid text  [list $coff $clen]
	    $ex node set    $rid revnr $revnr
	    $ex node set    $rid label <$revnr>

	    if {[rev istrunkrevnr $revnr]} {
		# On the trunk, this revision is a delta based on the
		# child. That makes the child our predecessor.

		if {$child eq ""} continue
		lappend earcs $child $rid
	    } else {
		# We fake a revnr for the blobs which have no
		# On a branch this revision is a delta based on the
		# revision, for use in the expansion graph.
		# parent. That makes the parent our predecessor.

		if {$parent eq ""} {
		    # Detached branch root, this is a patch based on
		    # the empty string.
		    $ex node set $rid __base__ r__empty__ 
		set revnr ghost$cid
	    }

	    # Now the expansion graph.

	    $ex node insert $cid
	    $ex node set    $cid text  [list $coff $clen]
	    $ex node set    $cid revnr $revnr
		    continue
		}
		lappend earcs $parent $rid
	    $ex node set    $cid label <$revnr>

	    if {$cparent ne ""} {
		# The expansion arcs go from baseline to delta
		# descendant, based on the blob information.
		lappend earcs $cparent $cid
	    }
	}

	# Phase II: Insert the accumulated dependencies

	foreach {from to} $earcs { $ex arc insert $from $to }
	foreach {from to} $zarcs { $zp arc insert $from $to }