{"thread":{"id":"10749","subject":"[PATCH 0/11] Updated 'quickfetch' series","startedAt":"2007-11-09T11:06:00Z","lastAt":"2007-11-09T11:06:00Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":11},"messages":[{"id":"59018","messageId":"20071109110600.GR14735@spearce.org","threadId":"10749","inReplyTo":null,"subject":"[PATCH 0/11] Updated 'quickfetch' series","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2007-11-09T11:06:00Z","receivedAt":"2007-11-09T11:06:00Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"So what started out as a 1 patch hack has now grown into an 11\npatch series.  *sigh*\n\n  1)  Fix memory leak in traverse_commit_list\n\nThis one seems obvious to me.  No real harm to not having it but\nlater on we'd see the downside to the leak in git-fetch.\n\n  2)  Reorganize the object memory pools so we can release them\n  3)  Define free_all_objects to deallocate object pools\n  4)  Allow pooled nodes to be recycled back onto a free list\n  5)  Bulk allocate struct commit_list, as we do for struct commit\n\nThis part of the series is only lightly tested thus far.  It rewrites\nthe object allocators in alloc.c to allow complete destruction of\nthe object hash and its contents in a single call.  This way we\ncan rerun the revision machinary a second time in the same process\nwithout the mess of clear_commit_flags() or worring about parents\nhaving been rewritten.\n\nWe also decrease memory usage by moving struct commit_list into the\npool of things managed by alloc.c.  Given how many of these suckers\nwe are allocating (3x as many as commits in a --topo-order!) the\nmalloc overhead saved per parent pointer is probably worth the pain\nof reviewing this series.\n\n  6)  git-fetch: Release objects used by a prior transport\n\nMakes use of the above to ensure transports that are called directly\nin-process (e.g. fetch-pack) don't get confused by a prior invocation\nof that same transport.  I don't think fetch-pack was meant to be\nrun twice in the same process...\n\n  7)  git-fetch: Limit automated tag following to only fetched objects\n\nRewrites the rules behind automated tag following.  The new rule is\nsimpler to understand, has some measure of safety attached to it, and\nactually works when we turn on quickfetch behavior in a transport.\n\n  8)  run-command: Support sending stderr to /dev/null\n  9)  rev-list: Introduce --quiet to avoid /dev/null redirects\n 10)  git-fetch: avoid local fetching from alternate (again)\n 11)  git-fetch: test avoiding unnecessary copying from alternates\n\nTurn on quickfetch for the native git transport.  As I'm sitting\nhere writing this I'm wondering if the quickfetch thing shouldn't\nbe higher up, like in git-fetch itself, so that we can also use\nit in the HTTP transport.  But it should work now with the earlier\nstuff out of the way.\n\n-- \nShawn.\n"}]}