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

[PATCH v4 13/14] fast-export: make sure updated refs get updated

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 2, 2012, 02:02 UTC
Message-ID
<1351821738-17526-14-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1351821738-17526-1-git-send-email-felipe.contreras@gmail.com>

When an object has already been exported (and thus is in the marks) it's flagged as SHOWN, so it will not be exported again, even if in a later 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.

IOW: If it's specified in the command line, it will get updated,
regardless of wihether or not the object was marked.
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, and a few other issues as well. So update the tests accordingly.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 builtin/fast-export.c     | 10 +++++++---
 t/t5801-remote-helpers.sh | 24 ++++++++++--------------
 t/t9350-fast-export.sh    | 15 +++++++++++++++
 3 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 4f3c35f..26f6d1c 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -523,10 +523,14 @@ 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)
 			string_list_append(extra_refs, full_name)->util = commit;
-		else
+		if (!commit->util)
 			commit->util = full_name;
 	}
 }
diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh
index 83561f8..6e4e078 100644
--- a/t/t5801-remote-helpers.sh
+++ b/t/t5801-remote-helpers.sh
@@ -58,18 +58,6 @@ test_expect_success 'fetch new branch' '
 	compare_refs server HEAD local FETCH_HEAD
 '
 
-#
-# This is only needed because of a bug not detected by this script. It will be
-# fixed shortly, but for now lets not cause regressions.
-# 
-test_expect_success 'bump commit in server' '
-	(cd server &&
-	git checkout master &&
-	echo content >>file &&
-	git commit -a -m four) &&
-	compare_refs server HEAD server HEAD
-'
-
 test_expect_success 'fetch multiple branches' '
 	(cd local &&
 	 git fetch
@@ -105,13 +93,13 @@ test_expect_failure 'push new branch with old:new refspec' '
 	compare_refs local HEAD server refs/heads/new-refspec
 '
 
-test_expect_failure 'cloning without refspec' '
+test_expect_success 'cloning without refspec' '
 	GIT_REMOTE_TESTGIT_REFSPEC="" \
 	git clone "testgit::${PWD}/server" local2 &&
 	compare_refs local2 HEAD server HEAD
 '
 
-test_expect_failure 'pulling without refspecs' '
+test_expect_success 'pulling without refspecs' '
 	(cd local2 &&
 	git reset --hard &&
 	GIT_REMOTE_TESTGIT_REFSPEC="" git pull) &&
@@ -154,4 +142,12 @@ test_expect_failure 'pushing without marks' '
 	compare_refs local2 HEAD server HEAD
 '
 
+test_expect_success 'push ref with existing object' '
+	(cd local &&
+	git branch dup master &&
+	git push origin dup
+	) &&
+	compare_refs local dup server dup
+'
+
 test_done
diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh
index b7d3009..67a7372 100755
--- a/t/t9350-fast-export.sh
+++ b/t/t9350-fast-export.sh
@@ -454,4 +454,19 @@ test_expect_success 'test biridectionality' '
 	git fast-import --export-marks=marks-cur --import-marks=marks-cur
 '
 
+cat > expected << EOF
+reset refs/heads/master
+from :12
+
+EOF
+
+test_expect_success 'refs are updated even if no commits need to be exported' '
+	echo -n > tmp-marks &&
+	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: Felipe Contreras
Message 25 of 26 in “fast-export and remote-testgit improvements”
  1. 00/14 fast-export and remote-testgit improvementsFelipe Contreras, Nov 2, 2012
  2. 01/14 fast-export: avoid importing blob marksFelipe Contreras, Nov 2, 2012
  3. 02/14 remote-testgit: fix direction of marksFelipe Contreras, Nov 2, 2012
  4. 03/14 Rename git-remote-testgit to git-remote-testpyFelipe Contreras, Nov 2, 2012
  5. 04/14 Add new simplified git-remote-testgitFelipe Contreras, Nov 2, 2012
  6. Stefano LattariniNov 2, 2012
  7. Jeff KingNov 2, 2012
  8. Felipe ContrerasNov 2, 2012
  9. Stefano LattariniNov 2, 2012
  10. Felipe ContrerasNov 2, 2012
  11. 05/14 remote-testgit: get rid of non-local functionalityFelipe Contreras, Nov 2, 2012
  12. 06/14 remote-testgit: remove irrelevant testFelipe Contreras, Nov 2, 2012
  13. 07/14 remote-testgit: cleanup testsFelipe Contreras, Nov 2, 2012
  14. 08/14 remote-testgit: exercise more featuresFelipe Contreras, Nov 2, 2012
  15. 09/14 remote-testgit: report success after an importFelipe Contreras, Nov 2, 2012
  16. Stefano LattariniNov 2, 2012
  17. Felipe ContrerasNov 2, 2012
  18. Stefano LattariniNov 2, 2012
  19. Felipe ContrerasNov 2, 2012
  20. Stefano LattariniNov 2, 2012
  21. Jeff KingNov 2, 2012
  22. 10/14 remote-testgit: make clear the 'done' featureFelipe Contreras, Nov 2, 2012
  23. 11/14 fast-export: trivial cleanupFelipe Contreras, Nov 2, 2012
  24. 12/14 fast-export: fix comparison in testsFelipe Contreras, Nov 2, 2012
  25. 13/14 fast-export: make sure updated refs get updatedFelipe Contreras, Nov 2, 2012
  26. 14/14 fast-export: don't handle uninteresting refsFelipe Contreras, Nov 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.