summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-11-07 13:26:20 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2016-11-07 13:26:20 +0000
commitce03eba57993fb0846c3a164b3eb757dd0a4e0a3 (patch)
tree6916fdca7395bc8324bcf5b095696f29f65700f9
parent76ff9fffcce353e33f407b78cf4256ef4dc50f6a (diff)
parent29668aec46f0c7479bf974e6d27ace866c800940 (diff)
downloadgitlab-ce-ce03eba57993fb0846c3a164b3eb757dd0a4e0a3.tar.gz
Merge branch '23034-speed-up-testenv-set-repo-refs' into 'master'
Use `git update-ref --stdin -z` to speed up TestEnv.set_repo_refs See merge request !7283
-rw-r--r--spec/support/test_env.rb24
1 files changed, 11 insertions, 13 deletions
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index c79975d8667..778e665500d 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -204,20 +204,18 @@ module TestEnv
end
def set_repo_refs(repo_path, branch_sha)
+ instructions = branch_sha.map {|branch, sha| "update refs/heads/#{branch}\x00#{sha}\x00" }.join("\x00") << "\x00"
+ update_refs = %W(#{Gitlab.config.git.bin_path} update-ref --stdin -z)
+ reset = proc do
+ IO.popen(update_refs, "w") {|io| io.write(instructions) }
+ $?.success?
+ end
+
Dir.chdir(repo_path) do
- branch_sha.each do |branch, sha|
- # Try to reset without fetching to avoid using the network.
- reset = %W(#{Gitlab.config.git.bin_path} update-ref refs/heads/#{branch} #{sha})
- unless system(*reset)
- if system(*%W(#{Gitlab.config.git.bin_path} fetch origin))
- unless system(*reset)
- raise 'The fetched test seed '\
- 'does not contain the required revision.'
- end
- else
- raise 'Could not fetch test seed repository.'
- end
- end
+ # Try to reset without fetching to avoid using the network.
+ unless reset.call
+ raise 'Could not fetch test seed repository.' unless system(*%W(#{Gitlab.config.git.bin_path} fetch origin))
+ raise 'The fetched test seed does not contain the required revision.' unless reset.call
end
end
end