|
- -- 版本对比功能
- local newRes = {}
- local oldRes = {}
- -- 读取xml文件
- local function readXml(sourceFile, resList)
- local pathName, baseName, ext = string.splitFilename(sourceFile);
- if ext ~= "xml" or baseName == "update.json" then
- return
- end
-
- if resList[baseName] == nil then
- resList[baseName] = {}
- end
-
- -- 读取xml文件
- local fileData = loadfileData(sourceFile)
- -- 解密解压数据
- local romFileData = cc.FilePackage:decrypt(FilePackage.uncompress(fileData))
-
- -- 解析xml文件
- local function onStartElement(name , atts)
- if name == "file" then
- resList[baseName][atts.name] = atts
- end
- end
- local ret, result = tiny.eval(romFileData , onStartElement)
- if ret == nil then
- print("文件" .. sourceFile .. "解析失败", result);
- end
- end
-
- -- 比较具体的目录
- local function _compareRes(newPath, oldPath, resultPath, resVersion)
- local newResPath = newPath .. "/" .. resVersion
- local oldResPath = oldPath .. "/" .. resVersion
- local resultResPath = resultPath .. "/" .. resVersion
- createDir(newResPath);
- createDir(oldResPath);
- createDir(resultResPath);
- -- 清空下资源
- newRes.resVersion = {}
- oldRes.resVersion = {}
- -- 载入对应目录的xml文件
- visitPath(newResPath, readXml, newRes.resVersion);
- visitPath(oldResPath, readXml, oldRes.resVersion);
- -- 创建一个xml文件
- local versionInfo = xml.new("root");
- -- 需要更新文件的数量
- versionInfo.updateFileCount = 0
- -- 需要更新文件的大小
- versionInfo.updateFileSize = 0
-
- local xmlFileName
- -- 逐个文件对比
- for i, v in pairs(newRes.resVersion) do
- -- 创建一个xml文件
- local fileXml = xml.new("root")
- fileXml.updateFileCount = 0
- fileXml.updateFileSize = 0
- for name, fileInfo in pairs(v) do
- -- 获取老版本对应的资源
- local oldFileInfo
- if oldRes.resVersion[i] == nil then
- oldFileInfo = nil
- else
- oldFileInfo = oldRes.resVersion[i][name]
- end
- if oldFileInfo == nil or fileInfo.md5 ~= oldFileInfo.md5 then
- -- 需要更新这个文件
- local fileItem = xml.new("file")
- fileItem.origin = fileInfo.origin
- fileItem.name = fileInfo.name
- fileItem.md5 = fileInfo.md5
- fileItem.compressedSize = fileInfo.compressedSize
- fileItem.size = fileInfo.size
- fileItem.offset = fileInfo.offset
- table.insert(fileXml, fileItem)
- fileXml.updateFileCount = fileXml.updateFileCount + 1
- fileXml.updateFileSize = fileXml.updateFileSize + fileInfo.compressedSize
- end
- end
-
- -- 保存这个包需要更新的文件
- versionInfo.updateFileCount = versionInfo.updateFileCount + fileXml.updateFileCount
- versionInfo.updateFileSize = versionInfo.updateFileSize + fileXml.updateFileSize
-
- local xmlInfoData = fileXml:toString();
- saveFile(xmlInfoData, resultResPath .. "/" .. i);
- end
-
- -- 保存整个需要更新的文件
- local xmlData = versionInfo:toString()
- saveFile(xmlData, resultResPath .. "/" .. "result.xml");
-
- -- 打印出这次需要更新资源的大小
- local updateSizeStr
- if versionInfo.updateFileSize / 1024 / 1024 >= 1 then
- updateSizeStr = versionInfo.updateFileSize / 1024 / 1024 .. "M"
- else
- updateSizeStr = versionInfo.updateFileSize / 1024 .. "KB"
- end
- print(resVersion .. "需要更新的资源包大小:", updateSizeStr)
- end
-
- -- 对比两个目录下的资源版本
- function compareVersion(newPath, oldPath, resultPath)
- -- 比较png
- _compareRes(newPath, oldPath, resultPath, "png")
- -- 比较etc
- _compareRes(newPath, oldPath, resultPath, "etc")
- -- 比较pvr
- _compareRes(newPath, oldPath, resultPath, "pvr")
- end
|