forked from ruby/ruby
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[rubygems/rubygems] Ensure refs directory in cached git source
See rubygems/rubygems#8046 for details Prior to this commit a cached git source without a specific ref wouldn't survive pushing to a remote and then pulling on a different machine. We'd end up without a refs directory in the cache, at which point git won't recognize it as a repo. This commit fixes the problem by adding a refs directory if it's not already there. This needs to be done as early as possible, so any git commands will work as expected, so this commit adds it before creating the app cached git proxy. rubygems/rubygems@8c89f0b065
- Loading branch information
1 parent
c071fed
commit d0925c0
Showing
2 changed files
with
34 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -212,6 +212,34 @@ | |
expect(the_bundle).to include_gem "foo 1.0" | ||
end | ||
|
||
it "can install after bundle cache without cloning remote repositories with only git tracked files" do | ||
build_git "foo" | ||
|
||
gemfile <<-G | ||
source "https://gem.repo1" | ||
gem "foo", :git => '#{lib_path("foo-1.0")}' | ||
G | ||
bundle "config set cache_all true" | ||
bundle :cache, "all-platforms" => true | ||
FileUtils.rm_rf Dir.glob(default_bundle_path("bundler/gems/extensions/**/foo-1.0-*")).first.to_s | ||
FileUtils.rm_rf Dir.glob(default_bundle_path("bundler/gems/foo-1.0-*")).first.to_s | ||
|
||
simulate_new_machine | ||
bundle "config set frozen true" | ||
FileUtils.rm_rf "#{default_bundle_path}/cache/bundler/git/foo-1.0-*" | ||
|
||
# Remove untracked files (including the empty refs dir in the cache) | ||
Dir.chdir(bundled_app) do | ||
system(*%W[git init --quiet]) | ||
system(*%W[git add --all]) | ||
system(*%W[git clean -d --force --quiet]) | ||
end | ||
|
||
bundle "install --local --verbose" | ||
expect(out).to_not include("Fetching") | ||
expect(the_bundle).to include_gem "foo 1.0" | ||
end | ||
|
||
it "copies repository to vendor cache" do | ||
# CVE-2022-39253: https://lore.kernel.org/lkml/[email protected]/ | ||
system(*%W[git config --global protocol.file.allow always]) | ||
|