Re: [PATCH v2 2/3] sha1_file: implement changes for "cat-file --literally -t"

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH v2 2/3] sha1_file: implement changes for "cat-file --literally -t"

From: Junio C Hamano <hidden>
Date: 2016-06-15 23:03:58

Karthik Nayak [off-list ref] writes:
quoted hunk
add "sha1_object_info_literally()" which is to be used when
the "literally" option is given to get the type of object
and print it, using "sha1_object_info_extended()".

add "unpack_sha1_header_literally()" to unpack sha headers
which may be greater than 32 bytes, which is the threshold
for a regular object header.

modify "sha1_loose_object_info()" to include a flag argument
and also include changes to call "unpack_sha1_header_literally()"
when the literally flag is passed. Also copies the obtained
type to the typename field of object_info.

modify "sha1_object_info_extended()" to call the function
"sha1_loose_object_info()" with flags.

Signed-off-by: Karthik Nayak <redacted>
---
 sha1_file.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 77 insertions(+), 7 deletions(-)
diff --git a/sha1_file.c b/sha1_file.c
index 69a60ec..1068ca0 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1564,6 +1564,36 @@ int unpack_sha1_header(git_zstream *stream, unsigned char *map, unsigned long ma
 	return git_inflate(stream, 0);
 }
 
+static int unpack_sha1_header_literally(git_zstream *stream, unsigned char *map,
+					unsigned long mapsize,
+					struct strbuf *header)
+{
+...
+}
Looks suspiciously familiar...
+int sha1_object_info_literally(const unsigned char *sha1)
+{
+	enum object_type type;
+	struct strbuf sb = STRBUF_INIT;
+	struct object_info oi = {NULL};
+
+	oi.typename = &sb;
+	oi.typep = &type;
+	if (sha1_object_info_extended(sha1, &oi, LOOKUP_LITERALLY) < 0)
+		return -1;
+	if (*oi.typep > 0)
+		printf("%s\n", typename(*oi.typep));
+	else
+		printf("%s\n", oi.typename->buf);
+	strbuf_release(oi.typename);
+	return 0;
+}
+
NAK.

Please don't add end-user facing final output to sha1_file.c;
instead have the caller use a helper function like this one to
extract necessary information and perform the end-user interaction
there.

Re: [PATCH v2 2/3] sha1_file: implement changes for "cat-file --literally -t"

From: karthik nayak <hidden>
Date: 2016-06-15 23:03:59

On 03/05/2015 02:28 AM, Junio C Hamano wrote:
Karthik Nayak [off-list ref] writes:
quoted
add "sha1_object_info_literally()" which is to be used when
the "literally" option is given to get the type of object
and print it, using "sha1_object_info_extended()".

add "unpack_sha1_header_literally()" to unpack sha headers
which may be greater than 32 bytes, which is the threshold
for a regular object header.

modify "sha1_loose_object_info()" to include a flag argument
and also include changes to call "unpack_sha1_header_literally()"
when the literally flag is passed. Also copies the obtained
type to the typename field of object_info.

modify "sha1_object_info_extended()" to call the function
"sha1_loose_object_info()" with flags.

Signed-off-by: Karthik Nayak <redacted>
---
  sha1_file.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------
  1 file changed, 77 insertions(+), 7 deletions(-)
diff --git a/sha1_file.c b/sha1_file.c
index 69a60ec..1068ca0 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1564,6 +1564,36 @@ int unpack_sha1_header(git_zstream *stream, unsigned char *map, unsigned long ma
      return git_inflate(stream, 0);
  }

+static int unpack_sha1_header_literally(git_zstream *stream, unsigned char *map,
+                    unsigned long mapsize,
+                    struct strbuf *header)
+{
+...
+}
Looks suspiciously familiar...
Yes, you suggested it.
It has a similar structure to unpack_sha1_header().
Anything wrong with it?
quoted
+int sha1_object_info_literally(const unsigned char *sha1)
+{
+    enum object_type type;
+    struct strbuf sb = STRBUF_INIT;
+    struct object_info oi = {NULL};
+
+    oi.typename = &sb;
+    oi.typep = &type;
+    if (sha1_object_info_extended(sha1, &oi, LOOKUP_LITERALLY) < 0)
+        return -1;
+    if (*oi.typep > 0)
+        printf("%s\n", typename(*oi.typep));
+    else
+        printf("%s\n", oi.typename->buf);
+    strbuf_release(oi.typename);
+    return 0;
+}
+
NAK.

Please don't add end-user facing final output to sha1_file.c;
instead have the caller use a helper function like this one to
extract necessary information and perform the end-user interaction
there.
Ok, will do that.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help