threads / discuss / 16294

Why is TreeWalk.forPath(...) returning null

Subject: Why is TreeWalk.forPath(...) returning null

## tl;dr

3 messages between Nov 12, 2008 and Nov 12, 2008.

replies: 2people: 2as markdown or json

Farrukh Najmi· Nov 12, 2008, 22:24 UTC · lore
My "git status" command shows:

# On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: xml/minDB/SubmitObjectsRequest_CMSScheme.xml

The file above was committed and then modified. I want to use jgit to find the comitted version of that file.

When I do the following code I get a null treeWalk? Why is that? What should I specify for path instead?

            String path = "xml/minDB/SubmitObjectsRequest_CMSScheme.xml";
            String versionName = Constants.HEAD;
            Commit commit = repository.mapCommit(versionName);
            if (commit == null) {
                log.trace("Did not find Commit. versionName:" + 
versionName);
            } else {
                ObjectId[] ids = {commit.getTree().getId()};
                TreeWalk treeWalk = TreeWalk.forPath(repository, path, ids);
            }
Thanks.
-- 
Regards,
Farrukh Najmi

Web: http://www.wellfleetsoftware.com
Shawn O. Pearce· Nov 12, 2008, 22:42 UTC · re: Farrukh Najmi · lore

Re: Why is TreeWalk.forPath(...) returning null

Farrukh Najmi <farrukh@wellfleetsoftware.com> wrote:
Show 27 quoted lines
>
> My "git status" command shows:
>
> # On branch master
> # Changed but not updated:
> #   (use "git add <file>..." to update what will be committed)
> #
> #    modified:   xml/minDB/SubmitObjectsRequest_CMSScheme.xml
>
> The file above was committed and then modified. I want to use jgit to  
> find the comitted version of that file.
>
> When I do the following code I get a null treeWalk? Why is that? What  
> should I specify for path instead?
>
>            String path = "xml/minDB/SubmitObjectsRequest_CMSScheme.xml";
>            String versionName = Constants.HEAD;
>
>            Commit commit = repository.mapCommit(versionName);
>
>            if (commit == null) {
>                log.trace("Did not find Commit. versionName:" +  
> versionName);
>            } else {
>                ObjectId[] ids = {commit.getTree().getId()};
>                TreeWalk treeWalk = TreeWalk.forPath(repository, path, ids);
>            }
Huh.  That should have worked.

TreeWalk.forPath returns null if the path doesn't get found. So it sounds like jgit isn't matching the path. Its a pretty simple operation, I'm not sure why its failing here. I'd run it through a debugger to try and see why the TreeWalk didn't match your path.

Your code is logically the same as:
  git rev-parse HEAD:$path
so it should find the blob if Git would have found it.
-- 
Shawn.
Farrukh Najmi· Nov 12, 2008, 22:52 UTC · re: Shawn O. Pearce · lore

Re: Why is TreeWalk.forPath(...) returning null

Shawn O. Pearce wrote:
Show 44 quoted lines
> Farrukh Najmi <farrukh@wellfleetsoftware.com> wrote:
>   
>> My "git status" command shows:
>>
>> # On branch master
>> # Changed but not updated:
>> #   (use "git add <file>..." to update what will be committed)
>> #
>> #    modified:   xml/minDB/SubmitObjectsRequest_CMSScheme.xml
>>
>> The file above was committed and then modified. I want to use jgit to  
>> find the comitted version of that file.
>>
>> When I do the following code I get a null treeWalk? Why is that? What  
>> should I specify for path instead?
>>
>>            String path = "xml/minDB/SubmitObjectsRequest_CMSScheme.xml";
>>            String versionName = Constants.HEAD;
>>
>>            Commit commit = repository.mapCommit(versionName);
>>
>>            if (commit == null) {
>>                log.trace("Did not find Commit. versionName:" +  
>> versionName);
>>            } else {
>>                ObjectId[] ids = {commit.getTree().getId()};
>>                TreeWalk treeWalk = TreeWalk.forPath(repository, path, ids);
>>            }
>>     
>
> Huh.  That should have worked.
>
> TreeWalk.forPath returns null if the path doesn't get found.  So
> it sounds like jgit isn't matching the path.  Its a pretty simple
> operation, I'm not sure why its failing here.  I'd run it through
> a debugger to try and see why the TreeWalk didn't match your path.
>
> Your code is logically the same as:
>
>   git rev-parse HEAD:$path
>
> so it should find the blob if Git would have found it.
>
>   

My bad. I had a type in the path in my junit test :-[ Its working as expected. Thanks.

-- 
Regards,
Farrukh Najmi

Web: http://www.wellfleetsoftware.com

← back to recent threads