Mercurial > hg > soundsoftware-site
comparison app/models/repository/git.rb @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | 0c939c159af4 |
children | 5e80956cc792 433d4f72a19b |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
51 | 51 |
52 def supports_directory_revisions? | 52 def supports_directory_revisions? |
53 true | 53 true |
54 end | 54 end |
55 | 55 |
56 def supports_revision_graph? | |
57 true | |
58 end | |
59 | |
56 def repo_log_encoding | 60 def repo_log_encoding |
57 'UTF-8' | 61 'UTF-8' |
58 end | 62 end |
59 | 63 |
60 # Returns the identifier for the given git changeset | 64 # Returns the identifier for the given git changeset |
75 scm.tags | 79 scm.tags |
76 end | 80 end |
77 | 81 |
78 def default_branch | 82 def default_branch |
79 scm.default_branch | 83 scm.default_branch |
84 rescue Exception => e | |
85 logger.error "git: error during get default branch: #{e.message}" | |
86 nil | |
80 end | 87 end |
81 | 88 |
82 def find_changeset_by_name(name) | 89 def find_changeset_by_name(name) |
83 return nil if name.nil? || name.empty? | 90 return nil if name.nil? || name.empty? |
84 e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) | 91 e = changesets.find(:first, :conditions => ['revision = ?', name.to_s]) |
90 scm.entries(path, | 97 scm.entries(path, |
91 identifier, | 98 identifier, |
92 options = {:report_last_commit => extra_report_last_commit}) | 99 options = {:report_last_commit => extra_report_last_commit}) |
93 end | 100 end |
94 | 101 |
102 # With SCMs that have a sequential commit numbering, | |
103 # such as Subversion and Mercurial, | |
104 # Redmine is able to be clever and only fetch changesets | |
105 # going forward from the most recent one it knows about. | |
106 # | |
107 # However, Git does not have a sequential commit numbering. | |
108 # | |
109 # In order to fetch only new adding revisions, | |
110 # Redmine needs to parse revisions per branch. | |
111 # Branch "last_scmid" is for this requirement. | |
112 # | |
95 # In Git and Mercurial, revisions are not in date order. | 113 # In Git and Mercurial, revisions are not in date order. |
96 # Redmine Mercurial fixed issues. | 114 # Redmine Mercurial fixed issues. |
97 # * Redmine Takes Too Long On Large Mercurial Repository | 115 # * Redmine Takes Too Long On Large Mercurial Repository |
98 # http://www.redmine.org/issues/3449 | 116 # http://www.redmine.org/issues/3449 |
99 # * Sorting for changesets might go wrong on Mercurial repos | 117 # * Sorting for changesets might go wrong on Mercurial repos |
124 elsif ! h["db_consistent"].has_key?("ordering") | 142 elsif ! h["db_consistent"].has_key?("ordering") |
125 h["db_consistent"]["ordering"] = 0 | 143 h["db_consistent"]["ordering"] = 0 |
126 merge_extra_info(h) | 144 merge_extra_info(h) |
127 self.save | 145 self.save |
128 end | 146 end |
129 scm_brs.each do |br| | 147 scm_brs.each do |br1| |
148 br = br1.to_s | |
130 from_scmid = nil | 149 from_scmid = nil |
131 from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br] | 150 from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br] |
132 h["branches"][br] ||= {} | 151 h["branches"][br] ||= {} |
133 scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| | 152 scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| |
134 db_rev = find_changeset_by_name(rev.revision) | 153 db_rev = find_changeset_by_name(rev.revision) |
135 transaction do | 154 transaction do |
136 if db_rev.nil? | 155 if db_rev.nil? |
137 save_revision(rev) | 156 db_saved_rev = save_revision(rev) |
157 parents = {} | |
158 parents[db_saved_rev] = rev.parents unless rev.parents.nil? | |
159 parents.each do |ch, chparents| | |
160 ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact | |
161 end | |
138 end | 162 end |
139 h["branches"][br]["last_scmid"] = rev.scmid | 163 h["branches"][br]["last_scmid"] = rev.scmid |
140 merge_extra_info(h) | 164 merge_extra_info(h) |
141 self.save | 165 self.save |
142 end | 166 end |
159 :changeset => changeset, | 183 :changeset => changeset, |
160 :action => file[:action], | 184 :action => file[:action], |
161 :path => file[:path]) | 185 :path => file[:path]) |
162 end | 186 end |
163 end | 187 end |
188 changeset | |
164 end | 189 end |
165 private :save_revision | 190 private :save_revision |
166 | 191 |
167 def latest_changesets(path,rev,limit=10) | 192 def latest_changesets(path,rev,limit=10) |
168 revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) | 193 revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false) |