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

Re: Reading commit objects

From
Chico Sokol <chico.sokol@gmail.com>
Date
May 21, 2013, 22:18 UTC
Message-ID
<CABx5MBSnpZTthOHECqkbpdbFfkb4e_uSo-rh4owBc8B_oSKjJQ@mail.gmail.com>
In-Reply-To
<CAEBDL5XwrD8ZbRRSrM1iJGtcRgziH5bFVwRHzg9=_PYzaTfgAg@mail.gmail.com>

Ok, we discovered that the commit object actually contains the tree object's sha1, by reading its contents with python zlib library.

So the bug must be with our java code (we're building a java lib).

Is there any non-standard issue in git's zlib compression? We're decompressing its contents with java default zlib api, so it should work normally, here's our code, that's printing that wrong output:

import java.io.File; import java.io.FileInputStream; import java.util.zip.InflaterInputStream; import org.apache.commons.io.IOUtils; ... File obj = new File(".git/objects/25/0f67ef017fcb97b5371a302526872cfcadad21"); InflaterInputStream inflaterInputStream = new InflaterInputStream(new FileInputStream(obj)); System.out.println(IOUtils.readLines(inflaterInputStream));

I know that here it's not the right place to ask about java issues, but we would appreciate any help any help.

-- Chico Sokol

On Tue, May 21, 2013 at 6:37 PM, John Szakmeister <john@szakmeister.net> wrote:
Show 40 quoted lines
> On Tue, May 21, 2013 at 5:21 PM, Chico Sokol <chico.sokol@gmail.com> wrote:
>> Hello,
>>
>> I'm building a library to manipulate git repositories (interacting
>> directly with the filesystem).
>>
>> Currently, we're trying to parse commit objects. After decompressing
>> the contents of a commit object file we got the following output:
>>
>> commit 191
>> author Francisco Sokol <chico.sokol@gmail.com> 1369140112 -0300
>> committer Francisco Sokol <chico.sokol@gmail.com> 1369140112 -0300
>>
>> first commit
>
> Does `git cat-file -p <sha1>` show a tree object?  FWIW, I expected to
> see a tree line there, so maybe this object was created without a
> tree?  I also don't see a parent listed.
>
> I did this on one of my repos:
>
>>>> buf = open('.git/objects/cd/da219e4d7beceae55af73c44cb3c9e1ec56802', 'rb').read()
>>>> import zlib
>>>> zlib.decompress(buf)
> 'commit 246\x00tree 2abfe1a7bedb29672a223a5c5f266b7dc70a8d87\nparent
> 0636e7ff6b79470b0cd53ceacea88e7796f202ce\nauthor John Szakmeister
> <john@szakmeister.net> 1369168481 -0400\ncommitter John Szakmeister
> <john@szakmeister.net> 1369168481 -0400\n\nGot a file listing.\n'
>
> So at least creating the commits with Git, I see a tree.  How was the
> commit you're referencing created?  Perhaps something is wrong with
> that process?
>
>> We hoped to get the same output of a "git cat-file -p <sha1>", but
>> that didn't happened. From a commit object, how can I find tree object
>> hash of this commit?
>
> I'd expect that too.
>
> -John
Previous: John SzakmeisterNext: Junio C Hamano
Message 4 of 19 in “Reading commit objects”
  1. Chico SokolMay 21, 2013
  2. Felipe ContrerasMay 21, 2013
  3. John SzakmeisterMay 21, 2013
  4. Chico SokolMay 21, 2013
  5. Junio C HamanoMay 21, 2013
  6. Chico SokolMay 21, 2013
  7. Jonathan NiederMay 21, 2013
  8. Shawn PearceMay 22, 2013
  9. java zlib woes (was: Reading commit objects)Andreas Krey, May 22, 2013
  10. Shawn PearceMay 22, 2013
  11. Andreas KreyMay 27, 2013
  12. fetch delta resolution vs. checkout (was: java zlib woes)Andreas Krey, Jun 4, 2013
  13. Shawn PearceMay 22, 2013
  14. Chico SokolMay 22, 2013
  15. Shawn PearceMay 22, 2013
  16. Chico SokolMay 22, 2013
  17. Chico SokolMay 22, 2013
  18. Shawn PearceMay 22, 2013
  19. Junio C HamanoMay 21, 2013

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.