diff --git a/lib/rbs/collection/sources/git.rb b/lib/rbs/collection/sources/git.rb index cce37b147..b582f09b1 100644 --- a/lib/rbs/collection/sources/git.rb +++ b/lib/rbs/collection/sources/git.rb @@ -171,7 +171,7 @@ def resolved_revision if commit_hash? revision else - setup! { git('rev-parse', revision).chomp } + setup! { git('rev-parse', "refs/remotes/origin/#{revision}").chomp } end end end diff --git a/test/rbs/collection/sources/git_test.rb b/test/rbs/collection/sources/git_test.rb index 852508628..305f78cc9 100644 --- a/test/rbs/collection/sources/git_test.rb +++ b/test/rbs/collection/sources/git_test.rb @@ -39,4 +39,36 @@ def source(revision: 'b4d3b346d9657543099a35a1fd20347e75b8c523') 'repo_dir' => 'gems', }) end + + def git(*cmd, **opts) + Open3.capture3("git", *cmd, **opts).then do |out, err, status| + raise "Unexpected git status: \n\n#{err}" unless status.success? + out + end + end + + def test_resolved_revision_updated_after_fetch + Dir.mktmpdir do |dir| + origin_repo = File.join(dir, "origin_repo") + Dir.mkdir(origin_repo) + git "init", chdir: origin_repo + git "config", "user.email", "you@example.com", chdir: origin_repo + git "config", "user.name", "Your Name", chdir: origin_repo + git "checkout", "-b", "main", chdir: origin_repo + + git "commit", "--allow-empty", "-m", "Initial commit", chdir: origin_repo + sha_initial_commit = git("rev-parse", "HEAD", chdir: origin_repo).chomp + + RBS::Collection::Sources::Git.new(name: "test", revision: "main", remote: origin_repo, repo_dir: "gems").tap do |source| + assert_equal sha_initial_commit, source.resolved_revision + end + + git "commit", "--allow-empty", "-m", "Second commit", chdir: origin_repo + sha_second_commit = git("rev-parse", "HEAD", chdir: origin_repo).chomp + + RBS::Collection::Sources::Git.new(name: "test", revision: "main", remote: origin_repo, repo_dir: "gems").tap do |source| + assert_equal sha_second_commit, source.resolved_revision + end + end + end end