summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-12-15 21:49:58 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-12-15 22:37:38 +0900
commit7cbc08b388cfc6d9bd2023c313165bff37ba2c11 (patch)
tree26d7739b7dad0922099288277e5cf6e0510484e4 /tool
parent854ff25f4f4a0c1183b742bd5077985236348c57 (diff)
Follow removed conflict files
After editing a conflict, continue without removed files.
Diffstat (limited to 'tool')
-rwxr-xr-xtool/sync_default_gems.rb2
-rwxr-xr-xtool/test/test_sync_default_gems.rb32
2 files changed, 32 insertions, 2 deletions
diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb
index c9107cf989..f4774bad6b 100755
--- a/tool/sync_default_gems.rb
+++ b/tool/sync_default_gems.rb
@@ -544,6 +544,8 @@ module SyncDefaultGems
end
if editor
system([editor, conflict].join(' '))
+ conflict.delete_if {|f| !File.exist?(f)}
+ return true if conflict.empty?
return system(*%w"git add --", *conflict)
end
end
diff --git a/tool/test/test_sync_default_gems.rb b/tool/test/test_sync_default_gems.rb
index d4a7b7fe7c..3bf87b3258 100755
--- a/tool/test/test_sync_default_gems.rb
+++ b/tool/test/test_sync_default_gems.rb
@@ -171,11 +171,17 @@ module Test_SyncDefaultGems
IO.popen(%W[git log --format=#{format} -1], chdir: dir, &:read)&.chomp
end
- def assert_sync(commits = true, success: true)
+ def assert_sync(commits = true, success: true, editor: nil)
result = nil
out = capture_process_output_to([STDOUT, STDERR]) do
Dir.chdir("src") do
- result = SyncDefaultGems.sync_default_gems_with_commits(@target, commits)
+ if editor
+ editor, ENV["GIT_EDITOR"] = ENV["GIT_EDITOR"], editor
+ edit = true
+ end
+ result = SyncDefaultGems.sync_default_gems_with_commits(@target, commits, edit: edit)
+ ensure
+ ENV["GIT_EDITOR"] = editor if edit
end
end
assert_equal(success, result, out)
@@ -265,5 +271,27 @@ module Test_SyncDefaultGems
assert_equal(":ok\n""Should.be_merged\n", File.read("src/lib/common.rb"), out)
assert_not_operator(File, :exist?, "src/.github/workflows/main.yml", out)
end
+
+ def test_delete_after_conflict
+ File.write("#@target/lib/bad.rb", "raise\n")
+ git(*%W"add lib/bad.rb", chdir: @target)
+ git(*%W"commit -q -m", "Add bad.rb", chdir: @target)
+ out = assert_sync
+ assert_equal("raise\n", File.read("src/lib/bad.rb"))
+
+ git(*%W"rm lib/bad.rb", chdir: "src", out: IO::NULL)
+ git(*%W"commit -q -m", "Remove bad.rb", chdir: "src")
+
+ File.write("#@target/lib/bad.rb", "raise 'bar'\n")
+ File.write("#@target/lib/common.rb", "Should.be_merged\n", mode: "a")
+ git(*%W"add lib/bad.rb lib/common.rb", chdir: @target)
+ git(*%W"commit -q -m", "Add conflict", chdir: @target)
+
+ head = top_commit("src")
+ out = assert_sync(editor: "git rm -f lib/bad.rb")
+ assert_not_equal(head, top_commit("src"))
+ assert_equal(":ok\n""Should.be_merged\n", File.read("src/lib/common.rb"), out)
+ assert_not_operator(File, :exist?, "src/lib/bad.rb", out)
+ end
end
end