Thread (13 messages) flat view 13 messages, 2 authors, 2016-06-15

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).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help