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

Re: Repository data loss in fast-export with a merge of a deleted submodule

From
Joshua Jensen <jjensen@workspacewhiz.com>
Date
Nov 3, 2011, 16:05 UTC
Message-ID
<4EB2BBB5.3030908@workspacewhiz.com>
In-Reply-To
<4EA9B0B5.6060005@workspacewhiz.com>
----- Original Message -----
From: Joshua Jensen
Date: 10/27/2011 1:27 PM
Show 14 quoted lines
> We had a submodule that we deleted and then added back into the 
> repository at the same location as the former submodule.  When running 
> fast-export, the newly 'added' files for the merge commit are listed 
> and then are followed with a:
>
> M ... path/to/submodule/file
> D path/to/submodule
>
> On fast-import, the resultant repository becomes corrupt due to the 
> Delete instruction above occurring AFTER the file adds/modifications.  
> The new repository does not match the old repository where the 
> fast-export was performed.
>
> I am not familiar with the fast-export code.  Can anyone help out?

Okay, I looked into this further, and I came up with a patch that works for me. Nevertheless, I do not understand exactly what is going on here, so I would like to defer to someone else's patch to fix the issue.

-Josh

--- builtin/fast-export.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 9836e6b..1abc470 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -161,6 +161,14 @@ static int depth_first(const void *a_, const void *b_)
                name_a = a->one ? a->one->path : a->two->path;
                name_b = b->one ? b->one->path : b->two->path;
+             /*
+             * Move 'D'elete entries first.
+             */
+             if (a->status == 'D')
+                             return -1;
+             else if (b->status == 'D')
+                             return 1;
+
                len_a = strlen(name_a);
                len_b = strlen(name_b);
                len = (len_a < len_b) ? len_a : len_b;
Previous: Joshua JensenNext: Joshua Jensen
Message 2 of 5 in “Repository data loss in fast-export with a merge of a deleted submodule”
  1. Joshua JensenOct 27, 2011
  2. Joshua JensenNov 3, 2011
  3. Joshua JensenNov 14, 2011
  4. Jens LehmannNov 14, 2011
  5. Jeff KingNov 30, 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.