Mercurial > hg > soundsoftware-site
comparison app/models/repository/git.rb @ 245:051f544170fe
* Update to SVN trunk revision 4993
author | Chris Cannam |
---|---|
date | Thu, 03 Mar 2011 11:42:28 +0000 |
parents | 8661b858af72 |
children | eeebe205a056 cbce1fd3b1b7 |
comparison
equal
deleted
inserted
replaced
244:8972b600f4fb | 245:051f544170fe |
---|---|
19 | 19 |
20 class Repository::Git < Repository | 20 class Repository::Git < Repository |
21 attr_protected :root_url | 21 attr_protected :root_url |
22 validates_presence_of :url | 22 validates_presence_of :url |
23 | 23 |
24 def scm_adapter | 24 ATTRIBUTE_KEY_NAMES = { |
25 "url" => "Path to repository", | |
26 } | |
27 def self.human_attribute_name(attribute_key_name) | |
28 ATTRIBUTE_KEY_NAMES[attribute_key_name] || super | |
29 end | |
30 | |
31 def self.scm_adapter_class | |
25 Redmine::Scm::Adapters::GitAdapter | 32 Redmine::Scm::Adapters::GitAdapter |
26 end | 33 end |
27 | 34 |
28 def self.scm_name | 35 def self.scm_name |
29 'Git' | 36 'Git' |
37 end | |
38 | |
39 def repo_log_encoding | |
40 'UTF-8' | |
30 end | 41 end |
31 | 42 |
32 # Returns the identifier for the given git changeset | 43 # Returns the identifier for the given git changeset |
33 def self.changeset_identifier(changeset) | 44 def self.changeset_identifier(changeset) |
34 changeset.scmid | 45 changeset.scmid |
43 scm.branches | 54 scm.branches |
44 end | 55 end |
45 | 56 |
46 def tags | 57 def tags |
47 scm.tags | 58 scm.tags |
59 end | |
60 | |
61 def find_changeset_by_name(name) | |
62 return nil if name.nil? || name.empty? | |
63 e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) | |
64 return e if e | |
65 changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"]) | |
48 end | 66 end |
49 | 67 |
50 # With SCM's that have a sequential commit numbering, redmine is able to be | 68 # With SCM's that have a sequential commit numbering, redmine is able to be |
51 # clever and only fetch changesets going forward from the most recent one | 69 # clever and only fetch changesets going forward from the most recent one |
52 # it knows about. However, with git, you never know if people have merged | 70 # it knows about. However, with git, you never know if people have merged |
70 # Subtract revisions that redmine already knows about | 88 # Subtract revisions that redmine already knows about |
71 recent_revisions = recent_changesets.map{|c| c.scmid} | 89 recent_revisions = recent_changesets.map{|c| c.scmid} |
72 revisions.reject!{|r| recent_revisions.include?(r.scmid)} | 90 revisions.reject!{|r| recent_revisions.include?(r.scmid)} |
73 | 91 |
74 # Save the remaining ones to the database | 92 # Save the remaining ones to the database |
75 revisions.each{|r| r.save(self)} unless revisions.nil? | 93 unless revisions.nil? |
94 revisions.each do |rev| | |
95 transaction do | |
96 changeset = Changeset.new( | |
97 :repository => self, | |
98 :revision => rev.identifier, | |
99 :scmid => rev.scmid, | |
100 :committer => rev.author, | |
101 :committed_on => rev.time, | |
102 :comments => rev.message) | |
103 | |
104 if changeset.save | |
105 rev.paths.each do |file| | |
106 Change.create( | |
107 :changeset => changeset, | |
108 :action => file[:action], | |
109 :path => file[:path]) | |
110 end | |
111 end | |
112 end | |
113 end | |
114 end | |
76 end | 115 end |
77 | 116 |
78 def latest_changesets(path,rev,limit=10) | 117 def latest_changesets(path,rev,limit=10) |
79 revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) | 118 revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) |
80 return [] if revisions.nil? || revisions.empty? | 119 return [] if revisions.nil? || revisions.empty? |