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

Re: What is an efficient way to get all blobs / trees that have notes attached?

From
Johan Herland <johan@herland.net>
Date
Apr 4, 2016, 17:33 UTC
Message-ID
<CALKQrgctNZU79rreN1RWEd+KOMNMmMgTce_wV4iCKyNw+TwmWg@mail.gmail.com>
In-Reply-To
<CAHGBnuNQYrg70h+mjzDpYyKhHiR6tWx9j989KLO3bW-jC7XmZw@mail.gmail.com>

On Mon, Apr 4, 2016 at 9:46 AM, Sebastian Schuberth <sschuberth@gmail.com> wrote:

Show 29 quoted lines
> On Fri, Apr 1, 2016 at 2:16 PM, Johan Herland <johan@herland.net> wrote:
>>> 3) Recursively list all blobs / trees (git-ls-tree) and look whether an
>>> object's hash is conatined in our table to get its notes.
>>>
>>> In particular 3) could be expensive for repos with a lot of files as we're
>>> looking at all of them just to see whether they have notes attached.
>>
>> In (3), why would you need to search through _all_ blobs/trees? Would
>> it not be cheaper to simply query the object type of each annotated
>> object from (2)? I.e. something like:
>>
>> for notes_ref in $(git for-each-ref refs/notes | cut -c 49-)
>> do
>>     echo "--- $notes_ref ---"
>>     for annotated_obj in $(git notes --ref=$notes_ref list | cut -c 41-)
>>     do
>>         type=$(git cat-file -t "$annotated_obj")
>>         if test "$type" != "commit"
>>         then
>>             echo "$annotated_obj: $type"
>>         fi
>>     done
>> done
>
> Thanks for the idea. The problem is that I do want to list the notes
> by path of the object they belong to. As a blob could potentially
> belong to more than one path (copies of files in the repo), I do not
> see another way of getting that information other than iterating over
> all blobs and checking what path(s) they belong to.

True; fundamentally what you want is a blob/tree ID -> path(s) mapping, which is an independent problem, unrelated to to the initial notes lookup.

I don't know of a solution faster than the brute-force search you already sketched. If this lookup is important to your use case, you could consider building/caching the required mapping when the notes are added in the first place, but I don't know if that is possible in your scenario...

...Johan
> --
> Sebastian Schuberth
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Sebastian Schuberth
Message 5 of 5 in “What is an efficient way to get all blobs / trees that have notes attached?”
  1. Sebastian SchuberthApr 1, 2016
  2. Johan HerlandApr 1, 2016
  3. Johan HerlandApr 1, 2016
  4. Sebastian SchuberthApr 4, 2016
  5. Johan HerlandApr 4, 2016

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.