Skip to content

Instantly share code, notes, and snippets.

@chulkilee
Created October 11, 2023 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chulkilee/bddf929e29c06e3c9f0eebcc1a753734 to your computer and use it in GitHub Desktop.
Save chulkilee/bddf929e29c06e3c9f0eebcc1a753734 to your computer and use it in GitHub Desktop.
generate changes from git diff Gemfile.lock
#!/usr/bin/env ruby
# frozen_string_literal: true
def read_changes
gem_changes = {}
ARGF.each_line do |line|
next unless /(?<op>[-+]) (?<name>\S+) \((?<ver>\S+)\)/ =~ line.strip
gem_changes[name] ||= {}
gem_changes[name][op] = ver
end
gem_changes
end
def format_changes(changes)
case changes.keys.sort
when %w[-]
"#{changes['-']} => (removed)"
when %w[+]
"(new) => #{changes['+']}"
when %w[+ -]
"#{changes['-']} => #{changes['+']}"
else
raise "unknown changes: #{changes}"
end
end
lines = read_changes
.map { |name, changes| [name, format_changes(changes)] }
.sort_by { |name, _msg| name }
.map { |name, msg| "- #{name}: #{msg}" }
puts lines.join("\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment