Hi everyone! I'd appreciate thoughts on the design presented here. I think Junio and I have explored a good part of the short-term design space, but it would be great for others to chime in - as Junio mentioned in [1], this series isn't exactly sufficiently reviewed yet. For whoever is taking a look, here are some pieces that may be worth paying special attention to: * [2] Junio expresses concern that struct branch depends on struct repository and accepting both of them as parameters might be unsafe. A back pointer from branch->repository might solve this. * [3] Glen and Junio discover that branch_get() can accept NULL and return NULL. accepting NULL means "give me the current branch", returning NULL means "detached HEAD". * [4] Glen questions the design of the current API and wonders what an optimal API might look like. Junio and Glen agree that we can remove global variables now and rethink the API later. [1] https://lore.kernel.org/git/xmqqlf1ujo4g.fsf@gitster.g/ [2] https://lore.kernel.org/git/xmqqr1cnbgmw.fsf@gitster.g/ [3] https://lore.kernel.org/git/xmqqzgqwzvwx.fsf@gitster.g/ [4] https://lore.kernel.org/git/kl6l35om9wn9.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/