git cat-file "literally" option
Hey,
After reading http://thread.gmane.org/gmane.comp.version-control.git/256878
I have started working on the git cat file --literally option.
I'm wondering if I should implement it as an add on to the existing options, wherein we could say "git cat-file (t | -s | -e | -p | <type> | --texconv) --literally <object>" so that it would be able to print the required data literally or should I implement it such that we could say "git cat-file (-t | -s | -e | -p | <type> | --texconv | --literally) <object>" so it would just give all information about the given object. (Maybe like the -p option?)
For example :
if I create a bogus object like
git hash-object -t bogus --literally -w --stdin </dev/null
Should I implement
git cat-file -t --literally 49993fe130c4b3bf24857a15d7969c396b7bc187 or should I implement
git cat-file --literally 49993fe130c4b3bf24857a15d7969c396b7bc187 To get information pertaining to the object "bogus:.
What do you people think?
Thanks
-Karthik
Quoted 24 lines · karthik nayak
Hey,
After reading http://thread.gmane.org/gmane.comp.version-control.git/256878
I have started working on the git cat file --literally option.I'm wondering if I should implement it as an add on to the existing options, wherein we could say "git cat-file (t | -s | -e | -p | <type> |
--texconv) --literally <object>"
so that it would be able to print the required data literally or should I implement it such that we could say "git cat-file (-t | -s | -e | -p | <type> | --texconv | --literally) <object>"
so it would just give all information about the given object. (Maybe like the -p option?)For example :
if I create a bogus object likegit hash-object -t bogus --literally -w --stdin <
/dev/nullShould I implement
git cat-file -t --literally49993fe130c4b3bf24857a15d7969c396b7bc187or should I implement
git cat-file --literally49993fe130c4b3bf24857a15d7969c396b7bc187To get information pertaining to the object "bogus:.
Quoted 3 lines
What do you people think?
Thanks
-Karthik
Also,
Is there any way I can get the type of object made via git hash-object --literally. The problem I'm facing is "sha1_object_info()" returns a object_type enum, so objects not specified there are considered as errors.
Quoted 4 lines · karthik nayak
Also,
Is there any way I can get the type of object made via git hash-object --literally. The problem I'm facing is "sha1_object_info()" returns aobject_typeenum, so objects not specified there are considered as errors.
Use what sha1_object_info() uses behind the scene. Loose object encodes object type as a string, you could just print that string and skip the enum object_type conversion. You probably need special treatment for packed objects too. See parse_sha1_header() and unpack_object_header().
Signature · 1 line
Duy
Quoted 2 lines · Duy Nguyen
... skip the enum
object_typeconversion. You probably need special treatment for packed objects too.
I do not think you can store object of type "bogus" in a pack data stream to begin with, so I wouldn't worry about packed objects.
"cat-file --literally" that does not take "-t" would not be useful, as the output "cat-file <type> <object>" does not tell what <type> the thing is. Other things like sizes and existence can be inferred once you have an interface to do "cat-file <type> <object>", so in that sense -e and -s are not essential (this also applies to "cat-file" without --literally).
By definition, "--literally -p" would not be able to do anything fancier than just dump the bytes (i.e. what "cat-file <type> <object>" does), as the bogus type is not something the code would know the best external representation for.
On 02/18/2015 07:28 PM, Duy Nguyen wrote:> On Wed, Feb 18, 2015 at 7:50
Quoted 5 lines
Use what
sha1_object_info()uses behind the scene. Loose object encodes object type as a string, you could just print that string and skip the enumobject_typeconversion. You probably need special treatment for packed objects too. Seeparse_sha1_header()andunpack_object_header().
Thank you will look into that!
Quoted 13 lines · Junio C Hamano
Quoted 2 lines · Duy Nguyen
... skip the enum
object_typeconversion. You probably need special treatment for packed objects too.I do not think you can store object of type "bogus" in a pack data stream to begin with, so I wouldn't worry about packed objects.
"cat-file --literally" that does not take "-t" would not be useful, as the output "cat-file <type> <object>" does not tell what <type> the thing is. Other things like sizes and existence can be inferred once you have an interface to do "cat-file <type> <object>", so in that sense -e and -s are not essential (this also applies to "cat-file" without --literally).
Quoted 5 lines
By definition, "--literally -p" would not be able to do anything fancier than just dump the bytes (i.e. what "cat-file <type> <object>" does), as the bogus type is not something the code would know the best external representation for.
Thanks for clearing that out. Will work on this for now.