threads / patch / 13289

patchCheck for circular references causing 'lost' nodes

Subject: [updated PATCH] Check for circular references causing 'lost' nodes

## tl;dr

One message between Apr 27, 2008 and Apr 27, 2008. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Stephen R. van den Berg· Apr 27, 2008, 17:32 UTC · lore

The most likely cause for circular references are bad entries in the grafts file; since basically noone tells you where you went wrong, it can be a bit puzzling to find out that part of your tree goes dark sometimes, depending on which tool/options you pick to walk the commit-tree (most notably, things go wrong when using --topo-order even though things *seem* allright without that option).

Signed-off-by: Stephen R. van den Berg <srb@cuci.nl>
---
 commit.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
Show changes to commit.c +7 −0
diff --git a/commit.c b/commit.c
index 94d5b3d..a3afad7 100644
--- a/commit.c
+++ b/commit.c
@@ -426,6 +426,7 @@ void sort_in_topological_order(struct commit_list ** list, int lifo)
 	struct commit_list *next, *orig = *list;
 	struct commit_list *work, **insert;
 	struct commit_list **pptr;
+	int nelements = 0;
 
 	if (!orig)
 		return;
@@ -436,6 +437,7 @@ void sort_in_topological_order(struct commit_list ** list, int lifo)
 		struct commit *commit = next->item;
 		commit->object.flags |= TOPOSORT;
 		commit->indegree = 0;
+		nelements++;
 	}
 
 	/* update the indegree */
@@ -506,7 +508,12 @@ void sort_in_topological_order(struct commit_list ** list, int lifo)
 		commit->object.flags &= ~TOPOSORT;
 		*pptr = work_item;
 		pptr = &work_item->next;
+		nelements--;
 	}
+	if (nelements)
+		fprintf(stderr,
+		 "Circular references resulting in %d suppressed nodes\n",
+		 nelements);
 }
 
 /* merge-base stuff */

← back to recent threads