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

[TopGit PATCH v3 03/12] pretty_tree: globalize and respect -i/-w options

From
Bert Wesarg <bert.wesarg@googlemail.com>
Date
Oct 20, 2010, 20:17 UTC
Message-ID
<b00fdc4e3060b7cf9f1ed25caff16799df09e414.1287605587.git.bert.wesarg@googlemail.com>
In-Reply-To
<38d2d7e3ba54cea256bc111f50bcb8d35e7d520d.1287605587.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 921e933..486ec94 100644
--- a/tg-export.sh
+++ b/tg-export.sh
@@ -62,15 +62,6 @@ playground="$(get_temp tg-export -d)"
 
 ## 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"
@@ -111,7 +102,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
 
@@ -226,7 +217,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 650ee59..81cbf7d 100644
--- 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.3.1.1069.g89486
Previous: Bert WesargNext: Bert Wesarg
Message 3 of 12 in “provide a global temporary directory”
  1. 01/12 provide a global temporary directoryBert Wesarg, Oct 20, 2010
  2. 02/12 cat_file: take -i/-w parametersBert Wesarg, Oct 20, 2010
  3. 03/12 pretty_tree: globalize and respect -i/-w optionsBert Wesarg, Oct 20, 2010
  4. 04/12 branch_empty: use pretty_tree and therefore respect -i/-wBert Wesarg, Oct 20, 2010
  5. 05/12 tg-path: use pretty_tree and diff-tree to generate the patchBert Wesarg, Oct 20, 2010
  6. 06/12 list_deps: accept -i/-wBert Wesarg, Oct 20, 2010
  7. 07/12 tg-summary: accept -i/-wBert Wesarg, Oct 20, 2010
  8. 08/12 tg-mail: accept -i/-wBert Wesarg, Oct 20, 2010
  9. 09/12 tg-files: list files changed by the topic branchBert Wesarg, Oct 20, 2010
  10. 10/12 tg-prev/tg-next: commands to explore dependenciesBert Wesarg, Oct 20, 2010
  11. 11/12 tg-patch: use ui diff when pager is activeBert Wesarg, Oct 20, 2010
  12. 12/12 tg-patch: simulate mnemonic prefixesBert Wesarg, Oct 20, 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.