diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-12-15 21:49:58 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-12-15 22:37:38 +0900 |
commit | 7cbc08b388cfc6d9bd2023c313165bff37ba2c11 (patch) | |
tree | 26d7739b7dad0922099288277e5cf6e0510484e4 /tool | |
parent | 854ff25f4f4a0c1183b742bd5077985236348c57 (diff) |
Follow removed conflict files
After editing a conflict, continue without removed files.
Diffstat (limited to 'tool')
-rwxr-xr-x | tool/sync_default_gems.rb | 2 | ||||
-rwxr-xr-x | tool/test/test_sync_default_gems.rb | 32 |
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 |