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

[PATCH v3 4/4] fast-export: make sure refs are updated properly

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Oct 30, 2012, 19:06 UTC
Message-ID
<1351623987-21012-5-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1351623987-21012-1-git-send-email-felipe.contreras@gmail.com>

When an object has already been exported (and thus is in the marks) it is flagged as SHOWN, so it will not be exported again, even if this time it's exported through a different ref.

We don't need the object to be exported again, but we want the ref updated, which doesn't happen.

Since we can't know if a ref was exported or not, let's just assume that if the commit was marked (flags & SHOWN), the user still wants the ref updated.

So:
 % git branch test master
 % git fast-export $mark_flags master
 % git fast-export $mark_flags test
Would export 'test' properly.

Additionally, this fixes issues with remote helpers; now they can push refs wich objects have already been exported.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 builtin/fast-export.c     | 11 ++++++++---
 t/t5800-remote-helpers.sh | 11 +++++++++++
 t/t9350-fast-export.sh    | 14 ++++++++++++++
 3 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 7fb6fe1..663a93d 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -523,11 +523,16 @@ static void get_tags_and_duplicates(struct object_array *pending,
 				typename(e->item->type));
 			continue;
 		}
-		if (commit->util) {
-			/* more than one name for the same object */
+
+		/*
+		 * This ref will not be updated through a commit, lets make
+		 * sure it gets properly upddated eventually.
+		 */
+		if (commit->util || commit->object.flags & SHOWN) {
 			if (!(commit->object.flags & UNINTERESTING))
 				string_list_append(extra_refs, full_name)->util = commit;
-		} else
+		}
+		if (!commit->util)
 			commit->util = full_name;
 	}
 }
diff --git a/t/t5800-remote-helpers.sh b/t/t5800-remote-helpers.sh
index e7dc668..69a145a 100755
--- a/t/t5800-remote-helpers.sh
+++ b/t/t5800-remote-helpers.sh
@@ -145,4 +145,15 @@ test_expect_failure 'push new branch with old:new refspec' '
 	compare_refs clone HEAD server refs/heads/new-refspec
 '
 
+test_expect_success 'push ref with existing object' '
+	(cd localclone &&
+	git branch point-to-master master &&
+	git push origin point-to-master
+	) &&
+
+	(cd server &&
+	git show-ref refs/heads/point-to-master
+	)
+'
+
 test_done
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index 6ea8f6f..a4178e3 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -446,4 +446,18 @@ test_expect_success 'proper extra refs handling' '
 	test_cmp expected actual
 '
 
+cat > expected << EOF
+reset refs/heads/master
+from :13
+
+EOF
+
+test_expect_success 'refs are updated even if no commits need to be exported' '
+	git fast-export --import-marks=tmp-marks \
+		--export-marks=tmp-marks master > /dev/null &&
+	git fast-export --import-marks=tmp-marks \
+		--export-marks=tmp-marks master > actual &&
+	test_cmp expected actual
+'
+
 test_done
-- 
1.8.0
Previous: Felipe ContrerasNext: Jonathan Nieder
Message 5 of 21 in “fast-export: general fixes”
  1. 0/4 fast-export: general fixesFelipe Contreras, Oct 30, 2012
  2. 1/4 fast-export: trivial cleanupFelipe Contreras, Oct 30, 2012
  3. 2/4 fast-export: fix comparisson in testsFelipe Contreras, Oct 30, 2012
  4. 3/4 fast-export: don't handle uninteresting refsFelipe Contreras, Oct 30, 2012
  5. 4/4 fast-export: make sure refs are updated properlyFelipe Contreras, Oct 30, 2012
  6. Jonathan NiederOct 31, 2012
  7. Felipe ContrerasOct 31, 2012
  8. Jonathan NiederOct 31, 2012
  9. Sverre RabbelierOct 31, 2012
  10. Jonathan NiederOct 31, 2012
  11. [OT] How to get the discussion details via notesPeter Baumann, Oct 31, 2012
  12. Drew NorthupOct 31, 2012
  13. Jeff KingOct 31, 2012
  14. Peter BaumannNov 1, 2012
  15. Felipe ContrerasOct 31, 2012
  16. Jeff KingNov 2, 2012
  17. Jonathan NiederNov 2, 2012
  18. Johannes SchindelinNov 2, 2012
  19. Jeff KingNov 2, 2012
  20. Felipe ContrerasNov 2, 2012
  21. Felipe ContrerasNov 2, 2012

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.