mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-20 07:13:56 -07:00
86 lines
1.9 KiB
Lua
86 lines
1.9 KiB
Lua
|
|
---
|
||
|
|
-- Output a list of merged PRs since last release in the CHANGES.txt format
|
||
|
|
---
|
||
|
|
|
||
|
|
local format_separator = "||"
|
||
|
|
|
||
|
|
local git_command_raw = 'git log '..
|
||
|
|
'%s/master "^%s/release" '..
|
||
|
|
'--merges --first-parent '..
|
||
|
|
'--pretty="%%s%s%%b" '..
|
||
|
|
'--grep="Merge pull request #"'
|
||
|
|
|
||
|
|
local changes_pr_format = "* PR #%s %s (@%s)"
|
||
|
|
|
||
|
|
local function parse_log(line)
|
||
|
|
change = {}
|
||
|
|
for chunk in line:gmatch(string.format("[^%s]+", format_separator)) do
|
||
|
|
table.insert(change, chunk)
|
||
|
|
end
|
||
|
|
assert(#change == 2)
|
||
|
|
|
||
|
|
local _, _, pr_num = change[1]:find("%s#([%d]+)%s")
|
||
|
|
local _, _, pr_author = change[1]:find("from%s([^/]+)")
|
||
|
|
local pr_desc = change[2]
|
||
|
|
|
||
|
|
return {
|
||
|
|
number = tonumber(pr_num),
|
||
|
|
author = pr_author,
|
||
|
|
description = pr_desc
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
local function gather_changes()
|
||
|
|
local git_command = git_command_raw:format(_OPTIONS["remote"], _OPTIONS["remote"], format_separator)
|
||
|
|
local output = os.outputof(git_command)
|
||
|
|
|
||
|
|
changes = {}
|
||
|
|
|
||
|
|
for line in output:gmatch("[^\r\n]+") do
|
||
|
|
table.insert(changes, parse_log(line))
|
||
|
|
end
|
||
|
|
|
||
|
|
return changes
|
||
|
|
end
|
||
|
|
|
||
|
|
local function format_to_changes(changes)
|
||
|
|
|
||
|
|
changes_copy = changes
|
||
|
|
local function compare_changes(a, b)
|
||
|
|
return a.number < b.number
|
||
|
|
end
|
||
|
|
table.sort(changes, compare_changes)
|
||
|
|
|
||
|
|
for _, change in pairs(changes_copy) do
|
||
|
|
print(string.format(changes_pr_format, change.number, change.description, change.author))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function generate_changes()
|
||
|
|
changes = gather_changes()
|
||
|
|
|
||
|
|
format_to_changes(changes)
|
||
|
|
end
|
||
|
|
|
||
|
|
newaction {
|
||
|
|
trigger = "changes",
|
||
|
|
description = "Generate a file containing merged pull requests in CHANGES.txt format",
|
||
|
|
execute = generate_changes
|
||
|
|
}
|
||
|
|
|
||
|
|
newoption {
|
||
|
|
trigger = "remote",
|
||
|
|
value = "remoteName",
|
||
|
|
description = "Git remote to operate on.",
|
||
|
|
default = "origin",
|
||
|
|
}
|
||
|
|
|
||
|
|
---
|
||
|
|
-- Check the command line arguments, and show some help if needed.
|
||
|
|
---
|
||
|
|
local usage = 'usage is: --file=<path to this scripts/changes.lua> changes'
|
||
|
|
|
||
|
|
if #_ARGS ~= 0 then
|
||
|
|
error(usage, 0)
|
||
|
|
end
|