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

[TopGit PATCH 02/10] pretty_tree: globalize and respect -i/-w options

From
Bert Wesarg <bert.wesarg@googlemail.com>
Date
Oct 8, 2010, 07:58 UTC
Message-ID
<0e1f993f68d36f0c3d848c2aa78f46c7130a24f1.1286524446.git.bert.wesarg@googlemail.com>
In-Reply-To
<160b8b0eb6152da98f4fa633ac25c7a25ff32aa4.1286524446.git.bert.wesarg@googlemail.com>
Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
---
 tg-export.sh |   13 ++-----------
 tg.sh        |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 11 deletions(-)
diff --git a/tg-export.sh b/tg-export.sh
index 6d82d55..5c707ce 100644 tg-export.sh
--- a/tg-export.sh
+++ b/tg-export.sh
@@ -63,15 +63,6 @@ trap 'rm -rf "$playground"' EXIT
 
 ## Collapse driver
 
-# pretty_tree NAME
-# Output tree ID of a cleaned-up tree without tg's artifacts.
-pretty_tree()
-{
-	git ls-tree --full-tree "$1" \
-	| awk -F '	' '$2 !~ /^.top/' \
-	| git mktree
-}
-
 create_tg_commit()
 {
 	name="$1"
@@ -112,7 +103,7 @@ collapsed_commit()
 			echo "TopGit-driven merge of branches:"
 			echo
 			cut -f 2 "$playground/$name^parents"
-		} | git commit-tree "$(pretty_tree "refs/top-bases/$name")" \
+		} | git commit-tree "$(pretty_tree "$name" -b)" \
 			$(for p in $parent; do echo -p $p; done))"
 	fi
 
@@ -227,7 +218,7 @@ linearize()
 	else
 		retmerge=0;
 
-		git merge-recursive "$(pretty_tree "refs/top-bases/$_dep")" -- HEAD "$(pretty_tree "refs/heads/$_dep")" || retmerge="$?";
+		git merge-recursive "$(pretty_tree "$_dep" -b)" -- HEAD "$(pretty_tree "refs/heads/$_dep")" || retmerge="$?";
 
 		if test "x$retmerge" != "x0"; then
 			git rerere;
diff --git a/tg.sh b/tg.sh
index 4d7d4ef..308ed28 100644 tg.sh
--- a/tg.sh
+++ b/tg.sh
@@ -42,6 +42,53 @@ cat_file()
 	esac
 }
 
+# get tree for the committed topic
+get_tree_()
+{
+	echo "$1"
+}
+
+# get tree for the base
+get_tree_b()
+{
+	echo "refs/top-bases/$1"
+}
+
+# get tree for the index
+get_tree_i()
+{
+	git write-tree
+}
+
+# get tree for the worktree
+get_tree_w()
+{
+	i_tree=$(git write-tree)
+	(
+		# the file for --index-output needs to sit next to the
+		# current index file
+		: ${GIT_INDEX_FILE:="$git_dir/index"}
+		TMP_INDEX="$(mktemp "${GIT_INDEX_FILE}-tg.XXXXXX")"
+		git read-tree -m $i_tree --index-output="$TMP_INDEX" &&
+		GIT_INDEX_FILE="$TMP_INDEX" &&
+		export GIT_INDEX_FILE &&
+		git diff --name-only -z HEAD |
+			git update-index -z --add --remove --stdin &&
+		git write-tree &&
+		rm -f "$TMP_INDEX"
+	)
+}
+
+# pretty_tree NAME [-b | -i | -w]
+# Output tree ID of a cleaned-up tree without tg's artifacts.
+# NAME will be ignored for -i and -w, but needs to be present
+pretty_tree()
+{
+	git ls-tree --full-tree "$(get_tree_${2#-} "$1")" |
+		awk -F '	' '$2 !~ /^.top/' |
+		git mktree
+}
+
 # setup_hook NAME
 setup_hook()
 {
-- 
1.7.1.1067.g5aeb7
Previous: Bert WesargNext: Bert Wesarg
Message 2 of 16 in “cat_file: take -i/-w parameters”
  1. 01/10 cat_file: take -i/-w parametersBert Wesarg, Oct 8, 2010
  2. 02/10 pretty_tree: globalize and respect -i/-w optionsBert Wesarg, Oct 8, 2010
  3. 03/10 branch_empty: use pretty_tree and therefore respect -i/-wBert Wesarg, Oct 8, 2010
  4. 04/10 tg-path: use pretty_tree and diff-tree to generate the patchBert Wesarg, Oct 8, 2010
  5. 05/10 list_deps: accept -i/-wBert Wesarg, Oct 8, 2010
  6. 06/10 tg-summary: accept -i/-wBert Wesarg, Oct 8, 2010
  7. 07/10 tg-files: list files changed by the topic branchBert Wesarg, Oct 8, 2010
  8. 08/10 tg-prev/tg-next: commands to explore dependenciesBert Wesarg, Oct 8, 2010
  9. 09/10 [RFC] tg-patch: use ui diff when pager is activeBert Wesarg, Oct 8, 2010
  10. 10/10 [RFC] tg-patch: simulate mnemonic prefixesBert Wesarg, Oct 8, 2010
  11. Uwe Kleine-KönigOct 9, 2010
  12. Bert WesargOct 9, 2010
  13. Uwe Kleine-KönigOct 9, 2010
  14. Bert WesargOct 10, 2010
  15. Uwe Kleine-KönigOct 9, 2010
  16. Bert WesargOct 9, 2010

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.