X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8deda2012ea7e25610f2cbd0a271e131d9364503..31d8469fa1adfa0c3a07a23725f26b26f2291df5:/services/api/test/helpers/git_test_helper.rb diff --git a/services/api/test/helpers/git_test_helper.rb b/services/api/test/helpers/git_test_helper.rb index 67e99c18dc..03189bdfea 100644 --- a/services/api/test/helpers/git_test_helper.rb +++ b/services/api/test/helpers/git_test_helper.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'fileutils' require 'tmpdir' @@ -14,15 +18,42 @@ require 'tmpdir' module GitTestHelper def self.included base base.setup do - @tmpdir = Dir.mktmpdir() - system("tar", "-xC", @tmpdir, "-f", "test/test.git.tar") - Rails.configuration.git_repositories_dir = "#{@tmpdir}/test" - Commit.refresh_repositories + # Extract the test repository data into the default test + # environment's Rails.configuration.Git.Repositories. (We + # don't use that config setting here, though: it doesn't seem + # worth the risk of stepping on a real git repo root.) + @tmpdir = Rails.root.join 'tmp', 'git' + FileUtils.mkdir_p @tmpdir + system("tar", "-xC", @tmpdir.to_s, "-f", "test/test.git.tar") + Rails.configuration.Git.Repositories = "#{@tmpdir}/test" + Rails.configuration.Containers.JobsAPI.GitInternalDir = "#{@tmpdir}/internal.git" end base.teardown do - FileUtils.remove_entry @tmpdir, true - Commit.refresh_repositories + FileUtils.remove_entry Commit.cache_dir_base, true + FileUtils.mkdir_p @tmpdir + system("tar", "-xC", @tmpdir.to_s, "-f", "test/test.git.tar") + end + end + + def internal_tag tag + IO.read "|git --git-dir #{Rails.configuration.Containers.JobsAPI.GitInternalDir.shellescape} log --format=format:%H -n1 #{tag.shellescape}" + end + + # Intercept fetch_remote_repository and fetch from a specified url + # or local fixture instead of the remote url requested. fakeurl can + # be a url (probably starting with file:///) or the name of a + # fixture (as a symbol) + def fetch_remote_from_local_repo url, fakeurl + if fakeurl.is_a? Symbol + fakeurl = 'file://' + repositories(fakeurl).server_path + end + Commit.expects(:fetch_remote_repository).once.with do |gitdir, giturl| + if giturl == url + Commit.unstub(:fetch_remote_repository) + Commit.fetch_remote_repository gitdir, fakeurl + true + end end end end