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

[RFC/PATCH 2/4] textconv: support for cat-file

From
CPClément Poulain <clement.poulain@ensimag.imag.fr>
Date
Jun 6, 2010, 11:30 UTC
Message-ID
<1275823848-7151-3-git-send-email-clement.poulain@ensimag.imag.fr>
In-Reply-To
<1275823848-7151-2-git-send-email-clement.poulain@ensimag.imag.fr>
Make the textconv_object function public, and add --textconv option to cat-file to perform conversion on blob objects. Using --textconv implies that we are working on a blob
Signed-off-by: Clément Poulain <clement.poulain@ensimag.imag.fr>
Signed-off-by: Diane Gasselin <diane.gasselin@ensimag.imag.fr>
Signed-off-by: Axel Bonnet <axel.bonnet@ensimag.imag.fr>
---
 builtin/blame.c    |    8 ++++----
 builtin/cat-file.c |   21 ++++++++++++++++++++-
 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/builtin/blame.c b/builtin/blame.c
index 4679fd9..869be1d 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -91,10 +91,10 @@ struct origin {
  * if the textconv driver exists.
  * Return 1 if the conversion succeeds, 0 otherwise.
  */
-static int textconv_object(const char *path,
-			   const unsigned char *sha1,
-			   unsigned short mode,
-			   struct strbuf *buf)
+int textconv_object(const char *path,
+		    const unsigned char *sha1,
+		    unsigned short mode,
+		    struct strbuf *buf)
 {
 	struct diff_filespec *df;
 
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 124e0a9..fde5fb9 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -9,6 +9,7 @@
 #include "tree.h"
 #include "builtin.h"
 #include "parse-options.h"
+#include "diff.h"
 
 #define BATCH 1
 #define BATCH_CHECK 2
@@ -135,6 +136,21 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
 
 		/* otherwise just spit out the data */
 		break;
+
+	case 'c':
+		if (!object_context.path[0])
+			die("git cat-file --textconv %s: <object> must be <sha1:path>",
+			    obj_name);
+
+		if(textconv_object(object_context.path, sha1,
+				   object_context.mode, &sbuf))
+			buf = strbuf_detach(&sbuf, (size_t *) &size);
+		else
+			buf = read_object_with_reference(sha1, "blob", &size, NULL);
+
+		strbuf_release(&sbuf);
+		break;
+
 	case 0:
 		buf = read_object_with_reference(sha1, exp_type, &size, NULL);
 		break;
@@ -204,7 +220,7 @@ static int batch_objects(int print_contents)
 }
 
 static const char * const cat_file_usage[] = {
-	"git cat-file (-t|-s|-e|-p|<type>) <object>",
+	"git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>",
 	"git cat-file (--batch|--batch-check) < <list_of_objects>",
 	NULL
 };
@@ -221,6 +237,8 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
 		OPT_SET_INT('e', NULL, &opt,
 			    "exit with zero when there's no error", 'e'),
 		OPT_SET_INT('p', NULL, &opt, "pretty-print object's content", 'p'),
+		OPT_SET_INT(0, "textconv", &opt,
+				"for blob objects, run textconv on object's content", 'c'),
 		OPT_SET_INT(0, "batch", &batch,
 			    "show info and content of objects fed from the standard input",
 			    BATCH),
@@ -231,6 +249,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix)
 	};
 
 	git_config(git_default_config, NULL);
+	git_config(git_diff_basic_config, NULL);
 
 	if (argc != 3 && argc != 2)
 		usage_with_options(cat_file_usage, options);
-- 
1.6.6.7.ga5fe3
Previous: Clément PoulainNext: Clément Poulain
Message 3 of 8 in “git-gui blame: use textconv”
  1. 0/4 git-gui blame: use textconvClément Poulain, Jun 6, 2010
  2. 1/4 sha1_name: creating context cacheClément Poulain, Jun 6, 2010
  3. 2/4 textconv: support for cat-fileClément Poulain, Jun 6, 2010
  4. 3/4 git-gui: use textconv filter for diff and blameClément Poulain, Jun 6, 2010
  5. 4/4 t/t8007: test textconv support for cat-fileClément Poulain, Jun 6, 2010
  6. Matthieu MoyJun 6, 2010
  7. Jeff KingJun 6, 2010
  8. Clément PoulainJun 7, 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.