FEATURE: Prefer `origin/main` over `origin/master` if it exists (#89)

This allows us to rename the main branch for plugin repos to
`origin/main` and docker_manager should continue to work.
This commit is contained in:
Robin Ward 2021-02-05 11:27:12 -05:00 committed by GitHub
parent fce3e9239f
commit a27337faf2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 1 deletions

View File

@ -112,12 +112,29 @@ class DockerManager::GitRepo
Time.at(unix_timestamp).to_datetime
end
def upstream_branch
run("for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)")
end
def has_origin_main?
run("branch -r").include?("origin/main") rescue false
end
def tracking_branch
branch = nil
if defined?(Discourse.find_compatible_git_resource)
branch = Discourse.find_compatible_git_resource(path)
end
branch || run("for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)")
return branch if branch.present?
head = upstream_branch
# We prefer `origin/main` to `origin/master`
if head == "origin/master"
return "origin/main" if has_origin_main?
end
head
end
def run(cmd)

View File

@ -22,4 +22,28 @@ RSpec.describe DockerManager::GitRepo do
end
end
describe "#branch" do
it "returns origin/master if a repo hasn't been renamed" do
described_class.any_instance.stubs(:upstream_branch).returns("origin/master")
described_class.any_instance.stubs(:has_origin_main?).returns(false)
repo = described_class.new("dummy", "dummy")
expect(repo.branch).to eq("origin/master")
end
it "returns origin/main if a repo has been renamed but still tracks master" do
described_class.any_instance.stubs(:upstream_branch).returns("origin/master")
described_class.any_instance.stubs(:has_origin_main?).returns(true)
repo = described_class.new("dummy", "dummy")
expect(repo.branch).to eq("origin/main")
end
it "returns origin/main if a repo points at origin/main" do
described_class.any_instance.stubs(:upstream_branch).returns("origin/main")
described_class.any_instance.stubs(:has_origin_main?).returns(true)
repo = described_class.new("dummy", "dummy")
expect(repo.branch).to eq("origin/main")
end
end
end