summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-18 02:23:59 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-09-18 02:23:59 +0900
commit88262875fded2fc578e5bf6957dbf75068238538 (patch)
tree7d99f6fc6b59ca0c13db0f5ddd39eef3d698672f
parent8d219a9bd7b484b301185319c940975e1d788b3e (diff)
Fix `git cat-file` condition
When multiple files changed in the same directory to be removed, the first file only was removed from changed set.
-rwxr-xr-xtool/sync_default_gems.rb6
-rwxr-xr-xtool/test/test_sync_default_gems.rb2
2 files changed, 4 insertions, 4 deletions
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index 6ddb11b63c..e425965042 100755
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -562,8 +562,8 @@ module SyncDefaultGems
changed = changed.reject do |f|
case
when toplevels.fetch(top = f[%r[\A[^/]+(?=/|\z)]m]) {
- remove << top unless
- toplevels[top] = system(*%w"git cat-file -e", "#{base}:#{top}", err: File::NULL)
+ remove << top if toplevels[top] =
+ !system(*%w"git cat-file -e", "#{base}:#{top}", err: File::NULL)
}
# Remove any new top-level directories.
true
@@ -590,8 +590,6 @@ module SyncDefaultGems
if picked
system(*%w"git commit --amend --no-edit --", *remove, %i[out err] => File::NULL)
end
- remove = remove.map {|d| d + "/"}
- changed.delete_if {|f| remove.any? {|d| f.start_with?(d)}}
end
unless ignore.empty?
diff --git a/tool/test/test_sync_default_gems.rb b/tool/test/test_sync_default_gems.rb
index 2d46d5b6bf..d2219cb673 100755
--- a/tool/test/test_sync_default_gems.rb
+++ b/tool/test/test_sync_default_gems.rb
@@ -188,6 +188,8 @@ module Test_SyncDefaultGems
File.write("#@target/docs/NEWS.md", "= NEWS!!!\n")
git(*%W"add --", "docs/NEWS.md", chdir: @target)
File.write("#@target/docs/hello.md", "Hello\n")
+ git(*%W"add --", "docs/hello.md", chdir: @target)
+ git(*%W"commit -q -m", "It's a news", chdir: @target)
out = assert_sync()
assert_equal(@sha["src"], top_commit("src"), out)
end