Question about #JM9 and `git show`

My tests are passing and I’m ready to move on to the final boss, but I have a question about this stage first. The instructions state that:

To verify your changes, the tester will read the commit object from the .git directory. It’ll use the git show command to do this.

However, when I try to do this, I’m faced with the following error:

$ (.venv) ➜  codecrafters-git-python git:(master) ✗ ./your_program.sh commit-tree f4da0838ff124bba2d5cde001f06bbc385f8ac2b -p 6319856f159ed3cd81accc2b90f0588f5c69b92d -m foo
9bb4ff8afb2938012d54d827e63fb65ab699b7da

$ (.venv) ➜  codecrafters-git-python git:(master) ✗ git show 9bb4ff8afb2938012d54d827e63fb65ab699b7da

fatal: unable to read tree b9a79a4d7bd66d94054627b64f20d3c2496749b3

Should this work locally? What am I missing here?

Here’s my code btw:
https://github.com/eaverdeja/codecrafters-git-python

Hi @eaverdeja, your commit-tree seems to be working fine:

fatal: unable to read tree b9a79a4d7bd66d94054627b64f20d3c2496749b3

Could you try looking into .git/objects/b9/a79a4d7bd66d94054627b64f20d3c2496749b3?

The issue seems to be caused by write-tree:

Looks like children of the root were not written to disk by write-tree:

1 Like

Ah! Silly mistake on my side, thank you for catching it.

It’s almost perfect now, expect for a strange alert at the top. I’m not sure what this hash represents. I tried looking in .git/objects but didn’t find anything.

$ git show 2592405c5231b7ffa064954be7977610c9a7c8fc

fatal: unable to read f7208da358e6ca5f313f75fa765c7a677bf9d8da
commit 2592405c5231b7ffa064954be7977610c9a7c8fc
Author: me <me@gmail.com>
Date:   Fri Feb 7 07:24:22 2025 -0300

    foo

(END)
1 Like

Could you try locating f7208da358e6ca5f313f75fa765c7a677bf9d8da by running git ls-tree [tree-hash] for the known trees?

For example:

I managed to recreate the issue in a smaller repository.

I followed similar steps from your previous post:

  1. Created a foobar dir
  2. Git init
  3. Touched a file foo with contents foo!
  4. Used git commit-tree for the 1st commit
  5. Touched a file bar with contents bar!
  6. Used my own commit-tree for the 2nd commit
  7. git show screams saying it can’t bar’s hash

Since there were only 2 trees it was easy to find the faulty object. But I still can’t figure out what’s the issue.

(.venv) ➜  foobar git:(main) ✗ g ls-tree 0ed3b46ade56ae892ab7888621471fce26509a64
100644 blob 929efb30534598535198700b994ee438d441d1af    foo
(.venv) ➜  foobar git:(main) ✗ g ls-tree 4e2e00e78d5e3ba51ad9f1846890328fb74d94a3
100644 blob e50a49f9558d09d4d3bfc108363bb24c127ed263    bar
100644 blob 929efb30534598535198700b994ee438d441d1af    foo

Hmmm something is def wrong with bar :sweat_smile:

(.venv) ➜  foobar git:(main) ✗ g cat-file blob 929efb30534598535198700b994ee438d441d1af
foo!
(.venv) ➜  foobar git:(main) ✗ g cat-file blob e50a49f9558d09d4d3bfc108363bb24c127ed263
fatal: git cat-file e50a49f9558d09d4d3bfc108363bb24c127ed263: bad file

Ok, I got it. I was not writing the blob objects to disk when handling write-tree. It’s clearer to me how it should work.

Thanks again for your help debugging Andy!

1 Like

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.