kou commented on PR #39215:
URL: https://github.com/apache/arrow/pull/39215#issuecomment-1863659173

   How about this for "Dev /Source Release and Merge Script" failures?
   
   ```diff
   diff --git a/dev/release/01-prepare-test.rb b/dev/release/01-prepare-test.rb
   index 8fb23f45f0..f4bf01f1f6 100644
   --- a/dev/release/01-prepare-test.rb
   +++ b/dev/release/01-prepare-test.rb
   @@ -264,18 +264,17 @@ class PrepareTest < Test::Unit::TestCase
        end
    
        Dir.glob("java/**/pom.xml") do |path|
   -      version = "<version>#{@snapshot_version}</version>"
   -      lines = File.readlines(path, chomp: true)
   -      target_lines = lines.grep(/#{Regexp.escape(version)}/)
   -      hunks = []
   -      target_lines.each do |line|
   -        new_line = line.gsub(@snapshot_version) do
   -          @release_version
   +      hunks = generate_hunks(File.readlines(path, chomp: true)) do |line|
   +        if line.include?("<version>#{@snapshot_version}</version>")
   +          new_line = line.gsub(@snapshot_version) do
   +            @release_version
   +          end
   +          [line, new_line]
   +        elsif line.include?("<project.build.outputTimestamp>")
   +          [line, normalize_pom_xml_output_timestamp(line)]
   +        else
   +          [nil, nil]
            end
   -        hunks << [
   -          "-#{line}",
   -          "+#{new_line}",
   -        ]
          end
          expected_changes << {hunks: hunks, path: path}
        end
   diff --git a/dev/release/post-11-bump-versions-test.rb 
b/dev/release/post-11-bump-versions-test.rb
   index 4b6933d610..08a900f71c 100644
   --- a/dev/release/post-11-bump-versions-test.rb
   +++ b/dev/release/post-11-bump-versions-test.rb
   @@ -244,37 +244,19 @@ class PostBumpVersionsTest < Test::Unit::TestCase
          end
    
          import_path = "github.com/apache/arrow/go/v#{@snapshot_major_version}"
   -      hunks = []
          if release_type == :major
   -        lines = File.readlines(path, chomp: true)
   -        target_lines = lines.each_with_index.select do |line, i|
   -          line.include?(import_path)
   -        end
   -        next if target_lines.empty?
   -        n_context_lines = 3 # The default of Git's diff.context
   -        target_hunks = [[target_lines.first[0]]]
   -        previous_i = target_lines.first[1]
   -        target_lines[1..-1].each do |line, i|
   -          if i - previous_i < n_context_lines
   -            target_hunks.last << line
   -          else
   -            target_hunks << [line]
   -          end
   -          previous_i = i
   -        end
   -        target_hunks.each do |lines|
   -          hunk = []
   -          lines.each do |line,|
   -            hunk << "-#{line}"
   -          end
   -          lines.each do |line|
   +        hunks = generate_hunks(File.readlines(path, chomp: true)) do |line|
   +          if line.include?(import_path)
                new_line = line.gsub("v#{@snapshot_major_version}") do
                  "v#{@next_major_version}"
                end
   -            hunk << "+#{new_line}"
   +            [line, new_line]
   +          else
   +            [nil, nil]
              end
   -          hunks << hunk
            end
   +      else
   +        hunks = []
          end
          if path == "go/parquet/writer_properties.go"
            hunks << [
   @@ -287,18 +269,17 @@ class PostBumpVersionsTest < Test::Unit::TestCase
        end
    
        Dir.glob("java/**/pom.xml") do |path|
   -      version = "<version>#{@snapshot_version}</version>"
   -      lines = File.readlines(path, chomp: true)
   -      target_lines = lines.grep(/#{Regexp.escape(version)}/)
   -      hunks = []
   -      target_lines.each do |line|
   -        new_line = line.gsub(@snapshot_version) do
   -          @next_snapshot_version
   +      hunks = generate_hunks(File.readlines(path, chomp: true)) do |line|
   +        if line.include?("<version>#{@snapshot_version}</version>")
   +          new_line = line.gsub(@snapshot_version) do
   +            @next_snapshot_version
   +          end
   +          [line, new_line]
   +        elsif line.include?("<project.build.outputTimestamp>")
   +          [line, normalize_pom_xml_output_timestamp(line)]
   +        else
   +          [nil, nil]
            end
   -        hunks << [
   -          "-#{line}",
   -          "+#{new_line}",
   -        ]
          end
          expected_changes << {hunks: hunks, path: path}
        end
   diff --git a/dev/release/test-helper.rb b/dev/release/test-helper.rb
   index 3b2c3aa6e5..4238a534d1 100644
   --- a/dev/release/test-helper.rb
   +++ b/dev/release/test-helper.rb
   @@ -83,15 +83,59 @@ module GitRunnable
          when /\A@@/
            in_hunk = true
            diffs.last[:hunks] << []
   -      when /\A[-+]/
   +      when /\A-/
            next unless in_hunk
            diffs.last[:hunks].last << line.chomp
   +      when /\A\+/
   +        next unless in_hunk
   +        diffs.last[:hunks].last << normalize_added_line(line.chomp)
          end
        end
        diffs.sort_by do |diff|
          diff[:path]
        end
      end
   +
   +  def generate_hunks(lines)
   +    git_diff_context = 3 # The default of Git's diff.context
   +    max_lines_for_same_hunk = git_diff_context * 2 + 1
   +    previous_i = nil
   +    grouped_change_blocks = []
   +    lines.each_with_index do |line, i|
   +      deleted, added = yield(line)
   +      next if deleted.nil? and added.nil?
   +      if previous_i.nil? or (i - previous_i) > max_lines_for_same_hunk
   +        grouped_change_blocks << []
   +      end
   +      if i - 1 != previous_i
   +        grouped_change_blocks.last << []
   +      end
   +      grouped_change_blocks.last.last << [deleted, added]
   +      previous_i = i
   +    end
   +    grouped_change_blocks.collect do |change_blocks|
   +      hunk = []
   +      change_blocks.each do |continuous_changes|
   +        continuous_changes.each do |deleted, _|
   +          hunk << "-#{deleted}" if deleted
   +        end
   +        continuous_changes.each do |_, added|
   +          hunk << "+#{added}" if added
   +        end
   +      end
   +      hunk
   +    end
   +  end
   +
   +  def normalize_pom_xml_output_timestamp(line)
   +    line.gsub(/<project\.build\.outputTimestamp>.+?</) do
   +      "<project.build.outputTimestamp>1970-01-01T00:00:00Z<"
   +    end
   +  end
   +
   +  def normalize_added_line(line)
   +    normalize_pom_xml_output_timestamp(line)
   +  end
    end
    
    module VersionDetectable
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to