class Pod::Command::UpdateAll

Public Instance Methods

getPrepareUpdateComponents(prepareUpdateComponentsPath) click to toggle source

拿到待更新的组件名

# File lib/cocoapods-wxpodhook/helper.rb, line 117
def getPrepareUpdateComponents(prepareUpdateComponentsPath)

        prepareUpdateComponents = Array.new();

        # prepareUpdateComponentsPath不存在的异常需要处理
        file = File.open(prepareUpdateComponentsPath)
        file.each_line {|line|
                if line.start_with?("- ")
                        # puts "**** #{line}"
                        # line内容的示例如下: - AFNetworking 3.2.0 -> 3.2.0 (latest version 4.0.1)
                        array = line.split(' ')
                        if array.size > 4
                                # 拿到组件名
                                component_name = array[1]
                                
                                # 拿到当前的版本号
                                component_curversion = array[2]

                                # 拿到repo中的版本号
                                component_repoversion = array[4]

                                # 如果版本号不相等则认为需要更新
                                if !self.version_isEqual(component_curversion, component_repoversion)
                                        prepareUpdateComponents.push(component_name)
                                end
                        end
                end
        }
        file.close

        # 删除文件
        FileUtils.rm_r(prepareUpdateComponentsPath)

        return prepareUpdateComponents
end
run() click to toggle source
# File lib/cocoapods-wxpodhook/helper.rb, line 153
def run

        before = Time.new

        # 先更新repo
        CocoapodsWxpodhook::Helper.new().AutoUpdateRepo();

        # 先拿到当前脚本执行的文件路径
        currentFilePath = Dir.pwd

        # 待更新的组件txt目录
        prepareUpdateComponentsPath = File.join(currentFilePath, "prepareUpdateComponents.txt")

        # puts prepareUpdateComponentsPath

        # 先删除已存在的txt文件
        if FileTest.exist?(prepareUpdateComponentsPath)
                FileUtils.rm_r(prepareUpdateComponentsPath)
        end

        put_redMsg("组件是否需要更新比对中")

        # 先执行pod outdated
        success = system("pod outdated --no-repo-update > #{prepareUpdateComponentsPath}")
        if !success
                put_redMsg("pod outdated失败") 
                textAll = File.read(prepareUpdateComponentsPath)
                put_redMsg(textAll)
                return
        end
                
        # 解析txt文件,拿到待更新的组件数组
        componentArr = self.getPrepareUpdateComponents(prepareUpdateComponentsPath)

        prepareUpdateComponentStr = componentArr.join(" ")

        if componentArr.size == 0 || prepareUpdateComponentStr.length == 0
                put_redMsg("暂无需要更新的组件")
                return
        end

        put_redMsg("待更新的组件列表如下 \n #{prepareUpdateComponentStr}")

        put_redMsg("开始更新组件 \n #{prepareUpdateComponentStr}")

        # 执行pod update
        system("pod update #{prepareUpdateComponentStr} --no-repo-update")

        now = Time.new();

        time = now.to_i - before.to_i;

        put_redMsg("组件更新完毕,共耗时 #{time}秒")

end
version_isEqual(curversion, repoversion) click to toggle source

版本号对比

# File lib/cocoapods-wxpodhook/helper.rb, line 91
def version_isEqual(curversion, repoversion)
        if curversion == repoversion
                return true
        else
                if repoversion.start_with?(curversion)
                        # 截取剩下的字符串
                        splitedStr = repoversion.delete(curversion)
                        splitedStrArr = splitedStr.split(".")
                        sum = 0
                        splitedStrArr.each do |item|
                                sum += item.to_i
                        end

                        if sum == 0
                                return true
                        else
                                return false
                        end
                else
                        return false
                end
        end
        
end