WoWInterface SVN bdGrid

[/] [trunk/] [lib/] [oUF/] [utils/] [changelog] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

#!/usr/bin/env lua

local tags = {}
do
        for tag in io.popen('git tag'):lines() do
                local split = tag:gmatch('[^.]+')
                local release, api, bugfix = split(), split(), split() or 0
                table.insert(
                        tags,
                        {
                                string = tag,
                                release = release,
                                api = api,
                                bugfix = bugfix,
                        }
                )
        end

        table.sort(tags, function(a,b)
                a = a.release * 1e4 + a.api * 100 + a.bugfix
                b = b.release * 1e4 + b.api * 100 + b.bugfix

                return a > b
        end)
end

local generateLog = function(prevTag, currentTag)
        local ti = table.insert
        local sf = string.format

        local out = {}

        ti(out, sf('[b]Changes in %s:[/b]', currentTag))
        ti(out, '[list]')

        for line in io.popen(sf('git shortlog %s..%s', prevTag, currentTag)):lines() do
                if(line:sub(1, 6) == '      ') then
                        local offset = line:match('()     ', 7)
                        if(offset) then
                                line = line:sub(7, offset - 1)
                        else
                                line = line:sub(7)
                        end

                        ti(out, sf('   [*] %s', line))
                elseif(#line == 0) then
                        ti(out, '  [/list]')
                else
                        ti(out, sf(' [*][i]%s[/i]', line))
                        ti(out, '  [list=1]')
                end
        end

        ti(out, '[/list]')

        local p = assert(io.popen(sf('git diff --shortstat %s..%s', prevTag, currentTag)))
        local stat = p:read'*a'
        p:close()

        ti(out, sf('[indent]%s[/indent]', stat:sub(2, -2)))

        return table.concat(out, '\n')
end

local stop
local to = ...
if(to) then
        for i=1, #tags do
                if(tags[i].string == to) then
                        stop = i + 1
                end
        end

        if(not stop) then stop = #tags end
else
        stop = #tags
end

for i=2, stop do
        local current, prev = tags[i -1], tags[i]
        print(generateLog(prev.string, current.string))
end

-- vim: set filetype=lua :

Go to most recent revision | Compare with Previous | Blame