Support main branches other than "master"

This patch adds support for having the main branch be named different
than "master".

It will use "master" or "main" if available, and fall back to the first
branch name if they're both missing.
This commit is contained in:
Alberto Bertogli 2023-08-23 19:02:43 +01:00
parent dff4ff6757
commit 39cff29f4b
2 changed files with 19 additions and 6 deletions

11
git.py

@ -223,6 +223,17 @@ class Repo:
refs = self._for_each_ref(pattern="refs/heads/", sort="-authordate") refs = self._for_each_ref(pattern="refs/heads/", sort="-authordate")
return [ref[len("refs/heads/") :] for _, _, ref in refs] return [ref[len("refs/heads/") :] for _, _, ref in refs]
@functools.cache
def main_branch(self):
"""Get the name of the main branch."""
bs = self.branch_names()
for branch in ["master", "main"]:
if branch in bs:
return branch
if bs:
return bs[0]
return None
@functools.cache @functools.cache
def tags(self, sort="-taggerdate"): def tags(self, sort="-taggerdate"):
"""Get the (name, obj_id) of the tags.""" """Get the (name, obj_id) of the tags."""

@ -35,20 +35,22 @@
<hr/> <hr/>
% end % end
% if "master" in repo.branch_names(): % if repo.main_branch():
<div class="toggable-title" onclick="toggle('commits')"> <div class="toggable-title" onclick="toggle('commits')">
<a href="b/master/">commits (master)</a> <a href="b/{{repo.main_branch()}}/">commits ({{repo.main_branch()}})</a>
</div> </div>
% kwargs = dict(repo = repo, start_ref = "refs/heads/master", % kwargs = dict(repo = repo,
% start_ref = "refs/heads/" + repo.main_branch(),
% limit = repo.info.commits_in_summary, % limit = repo.info.commits_in_summary,
% shorten = shorten, repo_root = ".", offset = 0) % shorten = shorten, repo_root = ".", offset = 0)
% include commit-list **kwargs % include commit-list **kwargs
<hr/> <hr/>
<div class="toggable-title" onclick="toggle('ls')"> <div class="toggable-title" onclick="toggle('ls')">
<a href="b/master/t/">tree (master)</a> <a href="b/{{repo.main_branch()}}/t/">tree ({{repo.main_branch()}})</a>
</div> </div>
% kwargs = dict(repo = repo, tree=repo.tree("master"), % kwargs = dict(repo = repo, tree=repo.tree(repo.main_branch()),
% treeroot="b/master/t", dirname=smstr.from_url("")) % treeroot="b/" + repo.main_branch() + "/t",
% dirname=smstr.from_url(""))
% include tree-list **kwargs % include tree-list **kwargs
<hr/> <hr/>
% end % end