Re: [PATCH/WIP 4/7] fast-import: fix data corruption in store_tree
From: Dmitry Ivankov <hidden>
Date: 2016-06-15 22:51:40
On Thu, Jul 28, 2011 at 1:42 PM, Jonathan Nieder [off-list ref] wrote:
Dmitry Ivankov wrote:quoted
--- a/fast-import.c +++ b/fast-import.c@@ -1474,8 +1474,11 @@ static void store_tree(struct tree_entry *root)return; for (i = 0; i < t->entry_count; i++) { - if (t->entries[i]->tree) - store_tree(t->entries[i]); + if (!S_ISDIR(t->entries[i]->versions[1].mode)) + continue; + if (!t->entries[i]->tree) + load_tree(t->entries[i]); + store_tree(t->entries[i]);How can this load_tree call work if t->entries[i]->versions[1].sha1 is not already in the object database?
Well, it can be in the database and at the same time t->entries[i]->tree == NULL. In my testcase the commit is like ls :10386 trunk M 040000 e1b2ea9d3634cb7914044425ffae91945c41ac6a branches/cygnus D branches/cygnus/gcc/assert.h D branches/cygnus/gcc/collect2.c D branches/cygnus/gcc/cccp.c D branches/cygnus/gcc/c-parse.gperf ... only D branches/cygnus/gcc/..... lines progress done #here we call it, so it's when we store whole tree, some subdirectory of branches/cygnus the load_tree really gets called (with whole series applied to fast-import) and the load works (sha1 = 2e90a035614854f626bb35eeac517f41ac84da27) Though I don't yet see if not loading it breaks anything in my test (with the whole series).