require 'changeset' class Ticket include Comparable attr_reader :referenceNumber, :changesets attr_accessor :wcBasePath, :releaseBranch def initialize(ref, initial_changesets = [], wc_base_path=SvnCommands::DIGG_DEFAULT_WC_PATH, release_branch="9.4") @referenceNumber = Integer(ref) @changesets = Set.new() self.wcBasePath = wc_base_path self.releaseBranch = release_branch self.addChangesets(initial_changesets) end def addChangesets(toAdd = []) toAdd.each { |changeset| self.addChangeset(changeset) } end def addChangeset(changesetToAdd) if changesetToAdd.kind_of? Changeset @changesets << changesetToAdd elsif changesetToAdd.kind_of? Integer @changesets << Changeset.new(changesetToAdd, self.wcBasePath, self.releaseBranch) end end def affectedModules(modulePath="LOLz/trunk") @changesets.inject(Set.new) { | memo, changeset| affectedModules = changeset.affectedModules(modulePath) memo.merge(affectedModules) unless affectedModules.empty? memo } end def to_s(include_changesets=true) if include_changesets && !changesets.empty? changeset_string = (changesets.map {|cs| cs.to_s}).join(", ") "##{referenceNumber} (#{changeset_string})" else "##{referenceNumber}" end end def <=>(other) self.referenceNumber <=> other.referenceNumber end def eql?(other) self.referenceNumber == other.referenceNumber end end