creativecommons / creativecommons.org

Legacy legal code translations and general support issues
MIT License
155 stars 201 forks source link

[Meta] Support "main" as a default branch name #1125

Closed TimidRobot closed 2 years ago

TimidRobot commented 4 years ago

Description

This ticket tracks the variety of changes required to support main as a default branch name for the creativecommons and cc-archive GitHub organizations.

Rationale

Master-slave is an oppressive metaphor that will and should never become fully detached from history. Aside from being unprofessional and oppressive it stifles participation

(1.1. Master-slave - Terminology, Power and Oppressive Language)

While not everyone may interpret a git master branch as representing a "master-slave" metaphor, it is not unreasonable for anyone to do so:

First appearance of "master" in git is in a CVS helper script[1]: https://github.com/git/git/commit/3e91311ae750af9bf2e3517b1e701288ac3066b9

Why is that branch called master? Probably because BitKeeper uses "master" for its main branch: http://www.bitkeeper.org/tips.html#_how_do_i_rebase_my_work_on_top_of_a_different_changeset

But maybe this "master" isn't the same one that's in "master/slave"? See the documentation about master/slave repositories: https://github.com/bitkeeper-scm/bitkeeper/blob/master/doc/HOWTO.ask#L223

But repositories and branches aren't the same! They are in BitKeeper: https://users.bitkeeper.org/t/branching-with-bk/158/2

So, yes, the "git master" branch probably isn't even a "master copy" reference, but a straight up master/slave reference.

(Re: Replacing "master" reference in git branch names (was Re: Proposal:)

Continuing to use master as a default branch name is unwelcoming of too many. We should put our best face forward, not a face that others can easily interpret as hostility or white supremacy.

Implementation Details

  1. Identify and resolve issues that prevent main from being used a default branch name and track them, below.
  2. Project maintainers will decide per repository whether they want to move to using main and track them, below.
  3. The Creative Commons Engineering team will re-evaluate based on the experience of using main in those repositories within ~6 months (2020 end of November or beginning of December)

Prerequisites

Additional context

TimidRobot commented 4 years ago

Related

TimidRobot commented 3 years ago

Default Branch Rename Status

cc-archive GitHub Organization

Private Repositories

All 1 private repositories are using main as the default branch name, as of 2022-04-28 16:53 UTC.

Public Repositories

All 190 public repositories are using main as the default branch name, as of 2022-04-28 16:53 UTC.

creativecommons GitHub Organization

Private Repositories

All 8 private repositories are using main as the default branch name, as of 2022-04-28 16:53 UTC.

Public Repositories

Of the 72 public repositories, there are still 4 (6%) using a deprecated default branch name, as of 2022-04-28 16:53 UTC:

Repository Default Branch
candela-utility master
creativecommons.github.io master
queulat master
rubycas-client-rails master
TimidRobot commented 3 years ago

audit script:

#!/usr/bin/env python3
# Standard library
import datetime
import os

# Third-party
from github import Github

ORGS = ["cc-archive", "creativecommons"]
GITHUB_TOKEN = os.environ["ADMIN_GITHUB_TOKEN"]
NOW = datetime.datetime.now(datetime.timezone.utc)

def print_percent(label, repos, deprecated):
    percent = float(len(deprecated)) / float(len(repos)) * 100
    if int(percent) == 0:
        print(
            f"All {len(repos)} {label} repositories are using `main` as the"
            f" *default branch* name, as of `{NOW:%Y-%m-%d %H:%M %Z}`."
        )
        print()
        print()
    else:
        if label == "private":
            punctuation = "."
        else:
            punctuation = ":"
        print(
            f"Of the {len(repos)} {label} repositories, there are still"
            f" {len(deprecated)} ({percent:.0f}%) using a deprecated"
            f" *default branch* name, as of `{NOW:%Y-%m-%d %H:%M %Z}`"
            f"{punctuation}"
        )
        print()
    return percent

github_client = Github(GITHUB_TOKEN)
print("## *Default Branch* Rename Status")
print()
for org in ORGS:
    cc = github_client.get_organization(org)
    repos = list(cc.get_repos())
    repos_private = []
    repos_public = []
    deprecated_private = []
    deprecated_public = []
    for repo in repos:
        if repo.private:
            repos_private.append(repo.name)
            if repo.default_branch == "master":
                deprecated_private.append([repo.name, repo.default_branch])
        else:
            repos_public.append(repo.name)
            if repo.default_branch == "master":
                deprecated_public.append([repo.name, repo.default_branch])
    del repos
    deprecated_public.sort(key=lambda l: l[0].casefold())
    print(f"### [`{org}`](/{org}) GitHub Organization")
    print()
    print()
    print("#### Private Repositories")
    print()
    print_percent("private", repos_private, deprecated_private)
    print()
    print("#### Public Repositories")
    print()
    percent = print_percent("public", repos_public, deprecated_public)
    if int(percent) > 0:
        print("| Repository | Default Branch |")
        print("| ---------- | -------------- |")
        for name, branch in deprecated_public:
            link = f"[`{name}`](/{org}/{name})"
            print(f"| {link} | `{branch}` |")
        print()
TimidRobot commented 2 years ago

Only creativecommons.github.io remains (excluding forked repos) and it is covered by [Bug] Rename default branch to main · Issue #5 · creativecommons/creativecommons.github.io.