Mercurial > hg > soundsoftware-site
diff app/models/repository/mercurial.rb @ 119:8661b858af72
* Update to Redmine trunk rev 4705
author | Chris Cannam |
---|---|
date | Thu, 13 Jan 2011 14:12:06 +0000 |
parents | 513646585e45 |
children | cd2282d2aa55 051f544170fe |
line wrap: on
line diff
--- a/app/models/repository/mercurial.rb Fri Nov 19 14:05:24 2010 +0000 +++ b/app/models/repository/mercurial.rb Thu Jan 13 14:12:06 2011 +0000 @@ -18,17 +18,34 @@ require 'redmine/scm/adapters/mercurial_adapter' class Repository::Mercurial < Repository + # sort changesets by revision number + has_many :changesets, :order => "#{Changeset.table_name}.id DESC", :foreign_key => 'repository_id' + attr_protected :root_url validates_presence_of :url def scm_adapter Redmine::Scm::Adapters::MercurialAdapter end - + def self.scm_name 'Mercurial' end - + + # Returns the readable identifier for the given mercurial changeset + def self.format_changeset_identifier(changeset) + "#{changeset.revision}:#{changeset.scmid}" + end + + # Returns the identifier for the given Mercurial changeset + def self.changeset_identifier(changeset) + changeset.scmid + end + + def diff_format_revisions(cs, cs_to, sep=':') + super(cs, cs_to, ' ') + end + def entries(path=nil, identifier=nil) entries=scm.entries(path, identifier) if entries @@ -52,6 +69,30 @@ entries end + # Finds and returns a revision with a number or the beginning of a hash + def find_changeset_by_name(name) + return nil if name.nil? || name.empty? + if /[^\d]/ =~ name or name.to_s.size > 8 + e = changesets.find(:first, :conditions => ['scmid = ?', name.to_s]) + else + e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) + end + return e if e + changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) # last ditch + end + + # Returns the latest changesets for +path+; sorted by revision number + def latest_changesets(path, rev, limit=10) + if path.blank? + changesets.find(:all, :include => :user, :limit => limit) + else + changes.find(:all, :include => {:changeset => :user}, + :conditions => ["path = ?", path.with_leading_slash], + :order => "#{Changeset.table_name}.id DESC", + :limit => limit).collect(&:changeset) + end + end + def fetch_changesets scm_info = scm.info if scm_info