使用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()