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

Why are ref_lists sorted?

From
Julian Phillips <julian@quantumfyre.co.uk>
Date
Mar 19, 2007, 03:38 UTC
Message-ID
<Pine.LNX.4.64.0703190321370.28570@beast.quantumfyre.co.uk>

Having got a C implementation of fetch far enough to be able to tell me that I'm up-to-date (when using git:// and not using remotes or branches files) I thought I'd compare performance with the fetch--tool based version. I was a bit surprised at what I saw.

Hot-cache time went from ~30s to ~3s, which didn't seem too bad. However what did puzzle me was where the C version was spending it's time. Being a work in progress it's a bit chatty in places, but there is an up-front delay of just over 1s (i.e. before my first message, which is the name of the remote to fetch).

A bit of investigation showed this to be due to the first attempt to read a ref causing the packed refs to be loaded. In my test repo the packed-refs file has over 9000 entries, but I still thought that it would load faster than that. It turns out that the overhead is from sorting the refs when building the ref_list. If I remove the code for sorting the entries I lose that initial 1s delay, without appearing to break anything in the fetch. However I assume that it's there for a reason ...

So my questions are:
1) what have I broken by removing the sort?
2) is it worth trying to optimise the sort?
-- 
Julian

  ---
<SpanKY> http://www.ananova.com/news/story/sm_806582.html?menu=news.quirkies
<Mr_Bones_> SpanKY: my life would have been much improved without that
  link.
Next: Junio C Hamano
Message 1 of 7 in “Why are ref_lists sorted?”
  1. Julian PhillipsMar 19, 2007
  2. Junio C HamanoMar 19, 2007
  3. Shawn O. PearceMar 19, 2007
  4. Julian PhillipsMar 19, 2007
  5. Shawn O. PearceMar 19, 2007
  6. Junio C HamanoMar 19, 2007
  7. Linus TorvaldsMar 19, 2007

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.