使用wxLua写的svn本地修改备份工具

在开发中,常常有一些代码不能提交,而有时又需要将本地的代码还原。

这时候,如果不注意备份,本地的修改将会丢失。

所以我用wxLua写了个简单的备份工具,可以一键备份本地修改。

package.cpath = package.cpath..";./?.dll;./?.so;../lib/?.so;../lib/vc_dll/?.dll;../lib/bcc_dll/?.dll;../lib/mingw_dll/?.dll;"
require("wx")

frame = wx.wxFrame(wx.NULL, wx.wxID_ANY,  "备份本地修改",wx.wxDefaultPosition, wx.wxSize(450, 250))

local default_path = [[D:\svn]]
textEntry = wx.wxTextCtrl(frame, 1, default_path, wx.wxDefaultPosition, wx.wxSize(450, 50))
button = wx.wxButton(frame, 2, "备份")
require("lfs")
local path = lfs.currentdir()
local work_path = textEntry:GetValue() 

--生成获取svn修改检查的批处理文件
local function create_svn_status_bat()
    local input_head = string.sub(work_path, 1, 1)
    local str = input_head .. [[:]] .. "\ncd " .. work_path .. [[\]] .. "\n" .. [[svn status  >> ]] .. path .. [[\modified.txt]]
    os.remove("svn.bat")
    local file = io.open("svn.bat", "w")
    assert(file)
    file:write(str)
    file:close()
end

--解析modified.txt的内容并生成复制批处理文件
local function read_modified_and_create_copy_bat()
    local file = io.open("modified.txt", "r");
    assert(file)
    local file_name = "backup_" .. os.time()
    local str = ""
    for line in file:lines() do
        local pos = string.find(line, "Performing status on external item at")
        local head = string.sub(line, 1,1)
        if not pos and (head == "M" or head == "A" or head == "?" or head == "R" or head == "C") then
            local sub_path = string.sub(line, 9, -1)
            if sub_path ~= "" then
                local pos2 = sub_path:match(".+()%.%w+$")
                if pos2 then
                    str = str .. [[echo f | xcopy ]] .. work_path .. [[\]] .. sub_path.. " " .. path .. [[\]] .. file_name .. [[\]] .. sub_path .. "\n"
                else
                    str = str .. [[echo d | xcopy ]] .. work_path .. [[\]] .. sub_path.. " " .. path .. [[\]] .. file_name .. [[\]] .. sub_path .. "\n"
                end
            end
        end
    end
    file:close()
    os.remove("modified.txt")
    
    os.remove("copy.bat")
    local file2 = io.open("copy.bat", "w")
    assert(file2)
    file2:write(str)
    file2:close()
end

local function button_click(event)
    --local t = io.popen('svn help')
    --local a = t:read("*all")
    work_path = textEntry:GetValue()

    --生成获取svn修改检查的批处理文件
    create_svn_status_bat()

    --执行获取svn修改检查的批处理文件,将结果保存在modified.txt中
    os.execute("svn.bat")

    --删除获取svn修改检查的批处理文件
    os.remove("svn.bat")

    --解析modified.txt的内容并生成复制批处理文件
    read_modified_and_create_copy_bat()

    --执行复制批处理文件
    os.execute("copy.bat")

    --删除复制批处理文件
    os.remove("copy.bat")
end

frame:Connect(2,wx.wxEVT_COMMAND_BUTTON_CLICKED,button_click)
sizerTop = wx.wxBoxSizer(wx.wxVERTICAL)
sizerTop:Add(textEntry, 3, wx.wxGROW + wx.wxALL, 6)
sizerTop:Add(button, 5, wx.wxGROW + wx.wxALL, 6)
frame:SetSizer(sizerTop)
wx.wxGetApp():SetTopWindow(frame)
frame:Show(true)
wx.wxGetApp():MainLoop()

使用wxLua写的svn本地修改备份工具.doc