Thread (24 messages) flat view 24 messages, 3 authors, 2016-06-15

Re: [PATCH v5 09/10] fast-export: add support to delete refs

From: Felipe Contreras <hidden>
Date: 2016-06-15 22:59:09

On Thu, Oct 31, 2013 at 1:29 PM, Max Horn [off-list ref] wrote:
Actually, I just noticed one thing that I *do* have a question about:

On 31.10.2013, at 10:36, Felipe Contreras [off-list ref] wrote:
quoted
Signed-off-by: Felipe Contreras <redacted>
---
builtin/fast-export.c  | 14 ++++++++++++++
t/t9350-fast-export.sh | 11 +++++++++++
2 files changed, 25 insertions(+)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index b6f623e..8ed41b4 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -673,6 +673,19 @@ static void import_marks(char *input_file)
      fclose(f);
}

+static void handle_deletes(void)
+{
+     int i;
+     for (i = 0; i < refspecs_nr; i++) {
+             struct refspec *refspec = &refspecs[i];
+             if (*refspec->src)
+                     continue;
+
+             printf("reset %s\nfrom %s\n\n",
+                             refspec->dst, sha1_to_hex(null_sha1));
If I understand it right, this issues a "reset" command in the fast-import stream, resetting a ref to an all-zero SHA1. I had a look at the git-fast-import documentation, but I found that it does not explicitly cover this case. In particular, the "reset" command does not specify that an all-zero SHA1 should be treated as "delete this ref".
That's what the previous patch does.
On the other hand, the docs for "reset" seem to indicate that one can omit the "from" part, although I couldn't tell for sure what that would mean, either.
It means something different.
I have not yet tried to dive into the code to figure out what actually happens, but I assume Felipe did that resp. tested it, and so supposedly doing this works, at least for git resp. existing transport helpers. But I wonder if other implementers of the fast-import format would handle it properly?
Try this:
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -519,7 +519,9 @@ test_expect_success 'delete refspec' '
        from 0000000000000000000000000000000000000000

        EOF
-       test_cmp expected actual
+       test_cmp expected actual &&
+       git fast-import < actual &&
+       test_must_fail git rev-parse -q --verify refs/heads/to-delete
 '

 test_done
-- 
Felipe Contreras
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help