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

[PATCH] rev-list: add "--full-objects" flag.

From
Junio C Hamano <junkio@cox.net>
Date
Jul 8, 2005, 01:02 UTC
Message-ID
<7vvf3mds9c.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.58.0507071657140.25104@g5.osdl.org>
>>>>> "LT" == Linus Torvalds <torvalds@osdl.org> writes:

LT> This is nasty - if you mis-spell "self-sufficient" (easy enough to do) LT> you'll never know the end result isn't what you expected. It won't warn LT> you in any way, it will just make a non-self-sufficient pack..

Again you are right.  How about --full-objects instead?

------------ When --full-objects is specified instead of usual "--objects", rev-list shows all objects reachable from trees associated with the commits in its output. This can be used to ensure that a single pack can be used to recreate the tree associated with every commit in it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 rev-list.c                 |   13 +++++-
 t/t6100-rev-list-object.sh |   98 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 109 insertions(+), 2 deletions(-)
 create mode 100644 t/t6100-rev-list-object.sh
24c31c0417a54a6ca6dc1b86267bccbbfe87c7d8
diff --git a/rev-list.c b/rev-list.c
--- a/rev-list.c
+++ b/rev-list.c
@@ -17,6 +17,7 @@ static const char rev_list_usage[] =
 		      "  --min-age=epoch\n"
 		      "  --bisect\n"
 		      "  --objects\n"
+		      "  --full-objects\n"
 		      "  --unpacked\n"
 		      "  --header\n"
 		      "  --pretty\n"
@@ -27,6 +28,7 @@ static int bisect_list = 0;
 static int tag_objects = 0;
 static int tree_objects = 0;
 static int blob_objects = 0;
+static int objects_self_sufficient = 0;
 static int verbose_header = 0;
 static int show_parents = 0;
 static int hdr_termination = 0;
@@ -198,7 +200,7 @@ static void mark_tree_uninteresting(stru
 	struct object *obj = &tree->object;
 	struct tree_entry_list *entry;
 
-	if (!tree_objects)
+	if (!tree_objects || objects_self_sufficient)
 		return;
 	if (obj->flags & UNINTERESTING)
 		return;
@@ -448,7 +450,14 @@ int main(int argc, char **argv)
 			bisect_list = 1;
 			continue;
 		}
-		if (!strcmp(arg, "--objects")) {
+		if (!strncmp(arg, "--objects", 9)) {
+			tag_objects = 1;
+			tree_objects = 1;
+			blob_objects = 1;
+			continue;
+		}
+		if (!strncmp(arg, "--full-objects", 9)) {
+			objects_self_sufficient = 1;
 			tag_objects = 1;
 			tree_objects = 1;
 			blob_objects = 1;
diff --git a/t/t6100-rev-list-object.sh b/t/t6100-rev-list-object.sh
new file mode 100644
--- /dev/null
+++ b/t/t6100-rev-list-object.sh
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Junio C Hamano
+#
+
+test_description='git-rev-list --objects test.
+
+'
+. ./test-lib.sh
+
+GIT_AUTHOR_DATE='+0000 946684801'
+GIT_AUTHOR_NAME=none
+GIT_AUTHOR_EMAIL=none@none
+GIT_COMMITTER_DATE='+0000 946684801'
+GIT_COMMITTER_NAME=none
+GIT_COMMITTER_EMAIL=none@none
+export GIT_AUTHOR_DATE GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL \
+       GIT_COMMITTER_DATE GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL
+
+_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
+_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
+sedScript='s/^\('"$_x40"' [^ ]*\) .*/\1/p'
+
+test_expect_success setup '
+    for i in frotz nitfol
+    do
+	    echo $i >$i &&
+	    git-update-cache --add $i || exit
+    done &&
+    tree0=$(git-write-tree) &&
+    commit0=$(git-commit-tree $tree0) &&
+    echo $tree0 &&
+    echo $commit0 &&
+    git-ls-tree -r $tree0 &&
+    echo nitfol nitfol >nitfol &&
+    rm -f frotz &&
+    git-update-cache --add nitfol --remove frotz &&
+    tree1=$(git-write-tree) &&
+    commit1=$(git-commit-tree $tree1 -p $commit0) &&
+    echo $tree1 &&
+    echo $commit1 &&
+    git-ls-tree -r $tree1    
+' </dev/null
+
+test_expect_success 'pack #0' '
+    name0=$(git-rev-list --objects $commit0 | \
+            git-pack-objects pk0) &&
+    ls pk0-* &&
+    git-verify-pack -v pk0-$name0.idx |
+    sed -ne "$sedScript" | sort >contents.0
+'
+
+test_expect_success 'pack #1 (commit 1 except commit 0)' '
+    name1=$(git-rev-list --objects $commit1 ^$commit0 | \
+            git-pack-objects pk1) &&
+    ls pk1-* &&
+    git-verify-pack -v pk1-$name1.idx |
+    sed -ne "$sedScript" | sort >contents.1
+'
+
+test_expect_success 'there should not be any overlaps' '
+    case $(comm -12 contents.0 contents.1 | wc -l) in
+    0) ;;
+    *) false ;;
+    esac
+'
+
+test_expect_success 'pack #2 (commit 1 unpacked only)' '
+    ln pk0-* .git/objects/pack/. &&
+    name2=$(git-rev-list --objects --unpacked $commit1 | \
+            git-pack-objects pk2) &&
+    ls pk2-* &&
+    git-verify-pack -v pk1-$name2.idx |
+    sed -ne "$sedScript" | sort >contents.2
+'
+
+test_expect_success 'pack #1 and #2 should be the same' '
+    diff contents.1 contents.2
+'
+
+test_expect_success 'pack #3 (commit 1 except commit 0, self-sufficient)' '
+    name3=$(git-rev-list --full-objects $commit1 ^$commit0 | \
+            git-pack-objects pk3) &&
+    ls pk3-* &&
+    git-verify-pack -v pk3-$name3.idx |
+    sed -ne "$sedScript" | sort >contents.3
+'
+
+ls_tree_to_invent='s/^[0-9]* \([^ ]*\) \('"$_x40"'\)	.*/\2 \1/'
+test_expect_success 'make sure pack #3 is not missing anything from commit1' '
+    (
+	echo "$tree1 tree"
+	echo "$commit1 commit"
+	git-ls-tree "$tree1" | sed -e "$ls_tree_to_invent"
+    ) | sort >tree-contents.1 &&
+    comm -23 tree-contents.1 contents.3 >missing.3 &&
+    diff /dev/null missing.3
+'
------------
Previous: Linus TorvaldsNext: Linus Torvalds
Message 20 of 66 in “[ANNOUNCE] Cogito-0.12”
  1. Petr BaudisJul 3, 2005
  2. Brian GerstJul 6, 2005
  3. Petr BaudisJul 7, 2005
  4. Junio C HamanoJul 7, 2005
  5. Linus TorvaldsJul 7, 2005
  6. Junio C HamanoJul 7, 2005
  7. Linus TorvaldsJul 7, 2005
  8. Junio C HamanoJul 7, 2005
  9. Junio C HamanoJul 7, 2005
  10. Eric W. BiedermanJul 7, 2005
  11. Linus TorvaldsJul 7, 2005
  12. Eric W. BiedermanJul 8, 2005
  13. Dumb servers (was: [ANNOUNCE] Cogito-0.12)Kevin Smith, Jul 8, 2005
  14. Linus TorvaldsJul 8, 2005
  15. Petr BaudisJul 7, 2005
  16. Linus TorvaldsJul 7, 2005
  17. Pull efficiently from a dumb git store.Junio C Hamano, Jul 7, 2005
  18. rev-list: add "--objects=self-sufficient" flag.Junio C Hamano, Jul 7, 2005
  19. Linus TorvaldsJul 7, 2005
  20. rev-list: add "--full-objects" flag.Junio C Hamano, Jul 8, 2005
  21. Linus TorvaldsJul 8, 2005
  22. Linus TorvaldsJul 8, 2005
  23. Junio C HamanoJul 8, 2005
  24. Linus TorvaldsJul 8, 2005
  25. Eric W. BiedermanJul 9, 2005
  26. Linus TorvaldsJul 10, 2005
  27. Junio C HamanoJul 10, 2005
  28. Sven VerdoolaegeJul 10, 2005
  29. Linus TorvaldsJul 10, 2005
  30. Eric W. BiedermanJul 11, 2005
  31. Linus TorvaldsJul 11, 2005
  32. Eric W. BiedermanJul 12, 2005
  33. Linus TorvaldsJul 12, 2005
  34. Eric W. BiedermanJul 12, 2005
  35. Linus TorvaldsJul 12, 2005
  36. Eric W. BiedermanJul 12, 2005
  37. Linus TorvaldsJul 12, 2005
  38. Linus TorvaldsJul 11, 2005
  39. Give --full-objects flag to rev-list when preparing a dumb server.Junio C Hamano, Jul 8, 2005
  40. Use --objects=self-sufficient flag to rev-list.Junio C Hamano, Jul 7, 2005
  41. Tony LuckJul 7, 2005
  42. Junio C HamanoJul 7, 2005
  43. Linus TorvaldsJul 7, 2005
  44. Tony LuckJul 8, 2005
  45. Linus TorvaldsJul 8, 2005
  46. Russell KingJul 9, 2005
  47. Russell KingJul 9, 2005
  48. Junio C HamanoJul 9, 2005
  49. Linus TorvaldsJul 10, 2005
  50. Linus TorvaldsJul 10, 2005
  51. Russell KingJul 10, 2005
  52. Junio C HamanoJul 10, 2005
  53. Russell KingJul 10, 2005
  54. Linus TorvaldsJul 10, 2005
  55. Russell KingJul 10, 2005
  56. Linus TorvaldsJul 10, 2005
  57. Russell KingJul 10, 2005
  58. Linus TorvaldsJul 10, 2005
  59. Russell KingJul 10, 2005
  60. Petr BaudisJul 10, 2005
  61. Chris WrightJul 11, 2005
  62. Linus TorvaldsJul 8, 2005
  63. Petr BaudisJul 8, 2005
  64. Daniel BarkalowJul 8, 2005
  65. Chris WrightJul 7, 2005
  66. Check packs and then files.Junio C Hamano, Jul 11, 2005

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.