require 'svn_commands' require 'version_number' require 'fileutils' class DiggModule include Comparable attr_reader :moduleName, :wcBasePath, :releaseBranch def initialize(module_name, wc_base_path, release_branch) @moduleName = module_name @wcBasePath = wc_base_path @releaseBranch = release_branch end def utilDir @utilDir ||= begin provisionalDir = "#{self.wcBasePath}/build/trunk" unless File.exist? provisionalDir SvnCommands::Update.new("build/trunk", nil, true, false, self.wcBasePath) # update the current working copy to be sure the dir is there end provisionalDir end end def myCatDir "#{self.wcBasePath}/LOLcat/branches/#{self.releaseBranch}" end def myDir "#{self.myCatDir}/modules/#{self.moduleName}" end def getVersion Dir.chdir(myDir) { |cwd| VersionNumber.new(IO.popen(%Q{ #{self.utilDir}/version package.xml }).readlines.first.strip) } end def updateVersion Dir.chdir(myDir) { |cwd| current_version = self.getVersion new_version = block_given?() ? (yield current_version) : (current_version.next_after_patchlevel_increment) puts IO.popen(%Q{ #{self.utilDir}/setversion package.xml #{new_version} }).readlines self.updateManifest("#{myCatDir}/manifest/pear-common",new_version) } end def updateManifest(manifest_path,new_version) manifest_lines = File.readlines(manifest_path) File.open(manifest_path, "w+") { |f| manifest_lines.each { |line| if line =~ /^pear.digg.internal\/#{self.moduleName}-/ f.puts("pear.digg.internal/#{self.moduleName}-#{new_version}") else f.puts(line) end } } end def updateContents Dir.chdir(myDir) { |cwd| puts IO.popen(%Q{ #{self.utilDir}/update-contents package.xml }).readlines } end def updateStability(stability="stable") Dir.chdir(myDir) { |cwd| puts IO.popen(%Q{ #{self.utilDir}/setstability package.xml #{stability} }).readlines } end def buildPearPackage Dir.chdir(myDir) { |cwd| puts IO.popen(%Q{ pear package }).readlines } %Q{ #{self.utilDir}/upload #{myDir}/#{self.moduleName}-#{self.getVersion}.tgz } end def cleanupPackageXmlFormatting Dir.chdir(myDir) { |cwd| FileUtils.copy("package.xml","package.xml.unformatted") puts IO.popen(%Q{ XMLLINT_INDENT=" " xmllint --format package.xml.unformatted > package.xml }).readlines FileUtils.rm("package.xml.unformatted") } end def to_s self.moduleName end def <=>(other) self.moduleName <=> other.moduleName end def eql?(other) self.moduleName == other.moduleName end def hash self.moduleName.hash end end