git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/WIP 4/7] fast-import: fix data corruption in store_tree

From
Dmitry Ivankov <divanorama@gmail.com>
Date
Jul 28, 2011, 08:11 UTC
Message-ID
<CA+gfSn-62W8TPjaKkSZCbWmxaeNnk_KSWJ-1=x106hGk5cEw=w@mail.gmail.com>
In-Reply-To
<20110728074239.GA5980@elie>
On Thu, Jul 28, 2011 at 1:42 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 18 quoted lines
> Dmitry Ivankov wrote:
>
>> --- 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).

Previous: Jonathan NiederNext: Dmitry Ivankov
Message 9 of 13 in “was: long fast-import errors out "failed to apply delta"”
  1. 0/7 was: long fast-import errors out "failed to apply delta"Dmitry Ivankov, Jul 28, 2011
  2. 1/7 fast-import: extract object preparation functionDmitry Ivankov, Jul 28, 2011
  3. 2/7 fast-import: be saner with temporary treesDmitry Ivankov, Jul 28, 2011
  4. Jonathan NiederJul 28, 2011
  5. 3/7 fast-import: fix a data corruption in parse_lsDmitry Ivankov, Jul 28, 2011
  6. Jonathan NiederJul 28, 2011
  7. 4/7 fast-import: fix data corruption in store_treeDmitry Ivankov, Jul 28, 2011
  8. Jonathan NiederJul 28, 2011
  9. Dmitry IvankovJul 28, 2011
  10. 5/7 fast-import: extract tree_content reading functionDmitry Ivankov, Jul 28, 2011
  11. 6/7 fast-import: workaround data corruptionDmitry Ivankov, Jul 28, 2011
  12. Jonathan NiederJul 28, 2011
  13. 7/7 fast-import: fix data corruption in load_treeDmitry Ivankov, Jul 28, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.