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