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:
parent
fce3e9239f
commit
a27337faf2
|
|
@ -112,12 +112,29 @@ class DockerManager::GitRepo
|
||||||
Time.at(unix_timestamp).to_datetime
|
Time.at(unix_timestamp).to_datetime
|
||||||
end
|
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
|
def tracking_branch
|
||||||
branch = nil
|
branch = nil
|
||||||
if defined?(Discourse.find_compatible_git_resource)
|
if defined?(Discourse.find_compatible_git_resource)
|
||||||
branch = Discourse.find_compatible_git_resource(path)
|
branch = Discourse.find_compatible_git_resource(path)
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
def run(cmd)
|
def run(cmd)
|
||||||
|
|
|
||||||
|
|
@ -22,4 +22,28 @@ RSpec.describe DockerManager::GitRepo do
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue