# Re: \[PATCH 05/10\] evolve: add the change-table structure

- From: Phillip Wood \<hidden\>
- Date: 2022-09-27 14:19:05 
- List: git
- Page: https://ratatoskr.run/git/2022/09/7956774
- Thread: https://ratatoskr.run/git/2022/09/7956579/t.md

```text
On 27/09/2022 14:27, Phillip Wood wrote:
>> +    /**
>> +     * Determine the object id for the latest content commit for each change.
>> +     * Fetch the commit at the head of each change ref. If it's a normal commit,
>> +     * that's the commit we want. If it's a metacommit, locate its content parent
>> +     * and use that.
>> +     */
>> +
>> +    for (i = 0; i < matching_refs.nr; i++) {
>> +        struct ref_array_item *item = matching_refs.items[i];
>> +        struct commit *commit = item->commit;
>> +
>> +        commit = lookup_commit_reference_gently(repo, &item->objectname, 1);
>
> We're assigning commit twice - why do we need to look it up if filter_refs returns it?

I think we want to look it up to check that item->objectname is a commit. item->commit is not filled unless we specify the verbose flag and I'm not sure what the implications of setting that are. If we get an objectname that does not name a commit we should call BUG() as suggested below.

> There are a number of places where we call lookup_commit_reference_gently(..., 1) to silence the warning if the objectname does not dereference to a commit. It is not clear to me that we want to hide those errors. Indeed I think we should be doing
>
>          commit = lookup_commit_reference(repo, oid)
>          if (!commit)
>              BUG("commit missing ...")
>
> unless there is a good reason that the lookup can fail.
```
