##// END OF EJS Templates
Merged r10856 and r10857 from trunk to 1.4-stable (#12409)...
Toshi MARUYAMA -
r10632:31e714f2db98
parent child
Show More
@@ -1,419 +1,423
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class ScmFetchError < Exception; end
19 19
20 20 class Repository < ActiveRecord::Base
21 21 include Redmine::Ciphering
22 22
23 23 belongs_to :project
24 24 has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
25 25 has_many :changes, :through => :changesets
26 26
27 27 serialize :extra_info
28 28
29 29 before_save :check_default
30 30
31 31 # Raw SQL to delete changesets and changes in the database
32 32 # has_many :changesets, :dependent => :destroy is too slow for big repositories
33 33 before_destroy :clear_changesets
34 34
35 35 validates_length_of :password, :maximum => 255, :allow_nil => true
36 36 validates_length_of :identifier, :maximum => 255, :allow_blank => true
37 37 validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? }
38 38 validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true
39 39 validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph)
40 40 # donwcase letters, digits, dashes, underscores but not digits only
41 41 validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-_]*$/, :allow_blank => true
42 42 # Checks if the SCM is enabled when creating a repository
43 43 validate :repo_create_validation, :on => :create
44 44
45 45 def repo_create_validation
46 46 unless Setting.enabled_scm.include?(self.class.name.demodulize)
47 47 errors.add(:type, :invalid)
48 48 end
49 49 end
50 50
51 51 def self.human_attribute_name(attribute_key_name, *args)
52 52 attr_name = attribute_key_name.to_s
53 53 if attr_name == "log_encoding"
54 54 attr_name = "commit_logs_encoding"
55 55 end
56 56 super(attr_name, *args)
57 57 end
58 58
59 59 alias :attributes_without_extra_info= :attributes=
60 60 def attributes=(new_attributes, guard_protected_attributes = true)
61 61 return if new_attributes.nil?
62 62 attributes = new_attributes.dup
63 63 attributes.stringify_keys!
64 64
65 65 p = {}
66 66 p_extra = {}
67 67 attributes.each do |k, v|
68 68 if k =~ /^extra_/
69 69 p_extra[k] = v
70 70 else
71 71 p[k] = v
72 72 end
73 73 end
74 74
75 75 send :attributes_without_extra_info=, p, guard_protected_attributes
76 76 if p_extra.keys.any?
77 77 merge_extra_info(p_extra)
78 78 end
79 79 end
80 80
81 81 # Removes leading and trailing whitespace
82 82 def url=(arg)
83 83 write_attribute(:url, arg ? arg.to_s.strip : nil)
84 84 end
85 85
86 86 # Removes leading and trailing whitespace
87 87 def root_url=(arg)
88 88 write_attribute(:root_url, arg ? arg.to_s.strip : nil)
89 89 end
90 90
91 91 def password
92 92 read_ciphered_attribute(:password)
93 93 end
94 94
95 95 def password=(arg)
96 96 write_ciphered_attribute(:password, arg)
97 97 end
98 98
99 99 def scm_adapter
100 100 self.class.scm_adapter_class
101 101 end
102 102
103 103 def scm
104 104 unless @scm
105 105 @scm = self.scm_adapter.new(url, root_url,
106 106 login, password, path_encoding)
107 107 if root_url.blank? && @scm.root_url.present?
108 108 update_attribute(:root_url, @scm.root_url)
109 109 end
110 110 end
111 111 @scm
112 112 end
113 113
114 114 def scm_name
115 115 self.class.scm_name
116 116 end
117 117
118 118 def name
119 119 if identifier.present?
120 120 identifier
121 121 elsif is_default?
122 122 l(:field_repository_is_default)
123 123 else
124 124 scm_name
125 125 end
126 126 end
127 127
128 128 def identifier_param
129 129 if is_default?
130 130 nil
131 131 elsif identifier.present?
132 132 identifier
133 133 else
134 134 id.to_s
135 135 end
136 136 end
137 137
138 138 def <=>(repository)
139 139 if is_default?
140 140 -1
141 141 elsif repository.is_default?
142 142 1
143 143 else
144 144 identifier.to_s <=> repository.identifier.to_s
145 145 end
146 146 end
147 147
148 148 def self.find_by_identifier_param(param)
149 149 if param.to_s =~ /^\d+$/
150 150 find_by_id(param)
151 151 else
152 152 find_by_identifier(param)
153 153 end
154 154 end
155 155
156 156 def merge_extra_info(arg)
157 157 h = extra_info || {}
158 158 return h if arg.nil?
159 159 h.merge!(arg)
160 160 write_attribute(:extra_info, h)
161 161 end
162 162
163 163 def report_last_commit
164 164 true
165 165 end
166 166
167 167 def supports_cat?
168 168 scm.supports_cat?
169 169 end
170 170
171 171 def supports_annotate?
172 172 scm.supports_annotate?
173 173 end
174 174
175 175 def supports_all_revisions?
176 176 true
177 177 end
178 178
179 179 def supports_directory_revisions?
180 180 false
181 181 end
182 182
183 183 def supports_revision_graph?
184 184 false
185 185 end
186 186
187 187 def entry(path=nil, identifier=nil)
188 188 scm.entry(path, identifier)
189 189 end
190 190
191 191 def entries(path=nil, identifier=nil)
192 192 scm.entries(path, identifier)
193 193 end
194 194
195 195 def branches
196 196 scm.branches
197 197 end
198 198
199 199 def tags
200 200 scm.tags
201 201 end
202 202
203 203 def default_branch
204 204 nil
205 205 end
206 206
207 207 def properties(path, identifier=nil)
208 208 scm.properties(path, identifier)
209 209 end
210 210
211 211 def cat(path, identifier=nil)
212 212 scm.cat(path, identifier)
213 213 end
214 214
215 215 def diff(path, rev, rev_to)
216 216 scm.diff(path, rev, rev_to)
217 217 end
218 218
219 219 def diff_format_revisions(cs, cs_to, sep=':')
220 220 text = ""
221 221 text << cs_to.format_identifier + sep if cs_to
222 222 text << cs.format_identifier if cs
223 223 text
224 224 end
225 225
226 226 # Returns a path relative to the url of the repository
227 227 def relative_path(path)
228 228 path
229 229 end
230 230
231 231 # Finds and returns a revision with a number or the beginning of a hash
232 232 def find_changeset_by_name(name)
233 233 return nil if name.blank?
234 234 s = name.to_s
235 235 changesets.find(:first, :conditions => (s.match(/^\d*$/) ?
236 236 ["revision = ?", s] : ["revision LIKE ?", s + '%']))
237 237 end
238 238
239 239 def latest_changeset
240 240 @latest_changeset ||= changesets.find(:first)
241 241 end
242 242
243 243 # Returns the latest changesets for +path+
244 244 # Default behaviour is to search in cached changesets
245 245 def latest_changesets(path, rev, limit=10)
246 246 if path.blank?
247 247 changesets.find(
248 248 :all,
249 249 :include => :user,
250 250 :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
251 251 :limit => limit)
252 252 else
253 253 changes.find(
254 254 :all,
255 255 :include => {:changeset => :user},
256 256 :conditions => ["path = ?", path.with_leading_slash],
257 257 :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC",
258 258 :limit => limit
259 259 ).collect(&:changeset)
260 260 end
261 261 end
262 262
263 263 def scan_changesets_for_issue_ids
264 264 self.changesets.each(&:scan_comment_for_issue_ids)
265 265 end
266 266
267 267 # Returns an array of committers usernames and associated user_id
268 268 def committers
269 269 @committers ||= Changeset.connection.select_rows(
270 270 "SELECT DISTINCT committer, user_id FROM #{Changeset.table_name} WHERE repository_id = #{id}")
271 271 end
272 272
273 273 # Maps committers username to a user ids
274 274 def committer_ids=(h)
275 275 if h.is_a?(Hash)
276 276 committers.each do |committer, user_id|
277 277 new_user_id = h[committer]
278 278 if new_user_id && (new_user_id.to_i != user_id.to_i)
279 279 new_user_id = (new_user_id.to_i > 0 ? new_user_id.to_i : nil)
280 280 Changeset.update_all(
281 281 "user_id = #{ new_user_id.nil? ? 'NULL' : new_user_id }",
282 282 ["repository_id = ? AND committer = ?", id, committer])
283 283 end
284 284 end
285 285 @committers = nil
286 286 @found_committer_users = nil
287 287 true
288 288 else
289 289 false
290 290 end
291 291 end
292 292
293 293 # Returns the Redmine User corresponding to the given +committer+
294 294 # It will return nil if the committer is not yet mapped and if no User
295 295 # with the same username or email was found
296 296 def find_committer_user(committer)
297 297 unless committer.blank?
298 298 @found_committer_users ||= {}
299 299 return @found_committer_users[committer] if @found_committer_users.has_key?(committer)
300 300
301 301 user = nil
302 302 c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
303 303 if c && c.user
304 304 user = c.user
305 305 elsif committer.strip =~ /^([^<]+)(<(.*)>)?$/
306 306 username, email = $1.strip, $3
307 307 u = User.find_by_login(username)
308 308 u ||= User.find_by_mail(email) unless email.blank?
309 309 user = u
310 310 end
311 311 @found_committer_users[committer] = user
312 312 user
313 313 end
314 314 end
315 315
316 316 def repo_log_encoding
317 317 encoding = log_encoding.to_s.strip
318 318 encoding.blank? ? 'UTF-8' : encoding
319 319 end
320 320
321 321 # Fetches new changesets for all repositories of active projects
322 322 # Can be called periodically by an external script
323 323 # eg. ruby script/runner "Repository.fetch_changesets"
324 324 def self.fetch_changesets
325 325 Project.active.has_module(:repository).all.each do |project|
326 326 project.repositories.each do |repository|
327 327 begin
328 328 repository.fetch_changesets
329 329 rescue Redmine::Scm::Adapters::CommandFailed => e
330 330 logger.error "scm: error during fetching changesets: #{e.message}"
331 331 end
332 332 end
333 333 end
334 334 end
335 335
336 336 # scan changeset comments to find related and fixed issues for all repositories
337 337 def self.scan_changesets_for_issue_ids
338 338 find(:all).each(&:scan_changesets_for_issue_ids)
339 339 end
340 340
341 341 def self.scm_name
342 342 'Abstract'
343 343 end
344 344
345 345 def self.available_scm
346 346 subclasses.collect {|klass| [klass.scm_name, klass.name]}
347 347 end
348 348
349 349 def self.factory(klass_name, *args)
350 350 klass = "Repository::#{klass_name}".constantize
351 351 klass.new(*args)
352 352 rescue
353 353 nil
354 354 end
355 355
356 356 def self.scm_adapter_class
357 357 nil
358 358 end
359 359
360 360 def self.scm_command
361 361 ret = ""
362 362 begin
363 363 ret = self.scm_adapter_class.client_command if self.scm_adapter_class
364 364 rescue Exception => e
365 365 logger.error "scm: error during get command: #{e.message}"
366 366 end
367 367 ret
368 368 end
369 369
370 370 def self.scm_version_string
371 371 ret = ""
372 372 begin
373 373 ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
374 374 rescue Exception => e
375 375 logger.error "scm: error during get version string: #{e.message}"
376 376 end
377 377 ret
378 378 end
379 379
380 380 def self.scm_available
381 381 ret = false
382 382 begin
383 383 ret = self.scm_adapter_class.client_available if self.scm_adapter_class
384 384 rescue Exception => e
385 385 logger.error "scm: error during get scm available: #{e.message}"
386 386 end
387 387 ret
388 388 end
389 389
390 390 def set_as_default?
391 391 new_record? && project && !Repository.first(:conditions => {:project_id => project.id})
392 392 end
393 393
394 394 protected
395 395
396 396 def check_default
397 397 if !is_default? && set_as_default?
398 398 self.is_default = true
399 399 end
400 400 if is_default? && is_default_changed?
401 401 Repository.update_all(["is_default = ?", false], ["project_id = ?", project_id])
402 402 end
403 403 end
404 404
405 405 private
406 406
407 407 # Deletes repository data
408 408 def clear_changesets
409 409 cs = Changeset.table_name
410 410 ch = Change.table_name
411 411 ci = "#{table_name_prefix}changesets_issues#{table_name_suffix}"
412 412 cp = "#{table_name_prefix}changeset_parents#{table_name_suffix}"
413 413
414 414 connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
415 415 connection.delete("DELETE FROM #{ci} WHERE #{ci}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
416 416 connection.delete("DELETE FROM #{cp} WHERE #{cp}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})")
417 417 connection.delete("DELETE FROM #{cs} WHERE #{cs}.repository_id = #{id}")
418 clear_extra_info_of_changesets
419 end
420
421 def clear_extra_info_of_changesets
418 422 end
419 423 end
@@ -1,258 +1,269
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
3 3 # Copyright (C) 2007 Patrick Aljord patcito@Ε‹mail.com
4 4 #
5 5 # This program is free software; you can redistribute it and/or
6 6 # modify it under the terms of the GNU General Public License
7 7 # as published by the Free Software Foundation; either version 2
8 8 # of the License, or (at your option) any later version.
9 9 #
10 10 # This program is distributed in the hope that it will be useful,
11 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 # GNU General Public License for more details.
14 14 #
15 15 # You should have received a copy of the GNU General Public License
16 16 # along with this program; if not, write to the Free Software
17 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 18
19 19 require 'redmine/scm/adapters/git_adapter'
20 20
21 21 class Repository::Git < Repository
22 22 attr_protected :root_url
23 23 validates_presence_of :url
24 24
25 25 def self.human_attribute_name(attribute_key_name, *args)
26 26 attr_name = attribute_key_name.to_s
27 27 if attr_name == "url"
28 28 attr_name = "path_to_repository"
29 29 end
30 30 super(attr_name, *args)
31 31 end
32 32
33 33 def self.scm_adapter_class
34 34 Redmine::Scm::Adapters::GitAdapter
35 35 end
36 36
37 37 def self.scm_name
38 38 'Git'
39 39 end
40 40
41 41 def report_last_commit
42 42 extra_report_last_commit
43 43 end
44 44
45 45 def extra_report_last_commit
46 46 return false if extra_info.nil?
47 47 v = extra_info["extra_report_last_commit"]
48 48 return false if v.nil?
49 49 v.to_s != '0'
50 50 end
51 51
52 52 def supports_directory_revisions?
53 53 true
54 54 end
55 55
56 56 def supports_revision_graph?
57 57 true
58 58 end
59 59
60 60 def repo_log_encoding
61 61 'UTF-8'
62 62 end
63 63
64 64 # Returns the identifier for the given git changeset
65 65 def self.changeset_identifier(changeset)
66 66 changeset.scmid
67 67 end
68 68
69 69 # Returns the readable identifier for the given git changeset
70 70 def self.format_changeset_identifier(changeset)
71 71 changeset.revision[0, 8]
72 72 end
73 73
74 74 def branches
75 75 scm.branches
76 76 end
77 77
78 78 def tags
79 79 scm.tags
80 80 end
81 81
82 82 def default_branch
83 83 scm.default_branch
84 84 rescue Exception => e
85 85 logger.error "git: error during get default branch: #{e.message}"
86 86 nil
87 87 end
88 88
89 89 def find_changeset_by_name(name)
90 90 return nil if name.nil? || name.empty?
91 91 e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
92 92 return e if e
93 93 changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
94 94 end
95 95
96 96 def entries(path=nil, identifier=nil)
97 97 scm.entries(path,
98 98 identifier,
99 99 options = {:report_last_commit => extra_report_last_commit})
100 100 end
101 101
102 102 # With SCMs that have a sequential commit numbering,
103 103 # such as Subversion and Mercurial,
104 104 # Redmine is able to be clever and only fetch changesets
105 105 # going forward from the most recent one it knows about.
106 106 #
107 107 # However, Git does not have a sequential commit numbering.
108 108 #
109 109 # In order to fetch only new adding revisions,
110 110 # Redmine needs to save "heads".
111 111 #
112 112 # In Git and Mercurial, revisions are not in date order.
113 113 # Redmine Mercurial fixed issues.
114 114 # * Redmine Takes Too Long On Large Mercurial Repository
115 115 # http://www.redmine.org/issues/3449
116 116 # * Sorting for changesets might go wrong on Mercurial repos
117 117 # http://www.redmine.org/issues/3567
118 118 #
119 119 # Database revision column is text, so Redmine can not sort by revision.
120 120 # Mercurial has revision number, and revision number guarantees revision order.
121 121 # Redmine Mercurial model stored revisions ordered by database id to database.
122 122 # So, Redmine Mercurial model can use correct ordering revisions.
123 123 #
124 124 # Redmine Mercurial adapter uses "hg log -r 0:tip --limit 10"
125 125 # to get limited revisions from old to new.
126 126 # But, Git 1.7.3.4 does not support --reverse with -n or --skip.
127 127 #
128 128 # The repository can still be fully reloaded by calling #clear_changesets
129 129 # before fetching changesets (eg. for offline resync)
130 130 def fetch_changesets
131 131 scm_brs = branches
132 132 return if scm_brs.nil? || scm_brs.empty?
133 133
134 134 h1 = extra_info || {}
135 135 h = h1.dup
136 136 repo_heads = scm_brs.map{ |br| br.scmid }
137 137 h["heads"] ||= []
138 138 prev_db_heads = h["heads"].dup
139 139 if prev_db_heads.empty?
140 140 prev_db_heads += heads_from_branches_hash
141 141 end
142 142 return if prev_db_heads.sort == repo_heads.sort
143 143
144 144 h["db_consistent"] ||= {}
145 145 if changesets.count == 0
146 146 h["db_consistent"]["ordering"] = 1
147 147 merge_extra_info(h)
148 148 self.save
149 149 elsif ! h["db_consistent"].has_key?("ordering")
150 150 h["db_consistent"]["ordering"] = 0
151 151 merge_extra_info(h)
152 152 self.save
153 153 end
154 154 save_revisions(prev_db_heads, repo_heads)
155 155 end
156 156
157 157 def save_revisions(prev_db_heads, repo_heads)
158 158 h = {}
159 159 opts = {}
160 160 opts[:reverse] = true
161 161 opts[:excludes] = prev_db_heads
162 162 opts[:includes] = repo_heads
163 163
164 164 revisions = scm.revisions('', nil, nil, opts)
165 165 return if revisions.blank?
166 166
167 167 # Make the search for existing revisions in the database in a more sufficient manner
168 168 #
169 169 # Git branch is the reference to the specific revision.
170 170 # Git can *delete* remote branch and *re-push* branch.
171 171 #
172 172 # $ git push remote :branch
173 173 # $ git push remote branch
174 174 #
175 175 # After deleting branch, revisions remain in repository until "git gc".
176 176 # On git 1.7.2.3, default pruning date is 2 weeks.
177 177 # So, "git log --not deleted_branch_head_revision" return code is 0.
178 178 #
179 179 # After re-pushing branch, "git log" returns revisions which are saved in database.
180 180 # So, Redmine needs to scan revisions and database every time.
181 181 #
182 182 # This is replacing the one-after-one queries.
183 183 # Find all revisions, that are in the database, and then remove them from the revision array.
184 184 # Then later we won't need any conditions for db existence.
185 185 # Query for several revisions at once, and remove them from the revisions array, if they are there.
186 186 # Do this in chunks, to avoid eventual memory problems (in case of tens of thousands of commits).
187 187 # If there are no revisions (because the original code's algorithm filtered them),
188 188 # then this part will be stepped over.
189 189 # We make queries, just if there is any revision.
190 190 limit = 100
191 191 offset = 0
192 192 revisions_copy = revisions.clone # revisions will change
193 193 while offset < revisions_copy.size
194 194 recent_changesets_slice = changesets.find(
195 195 :all,
196 196 :conditions => [
197 197 'scmid IN (?)',
198 198 revisions_copy.slice(offset, limit).map{|x| x.scmid}
199 199 ]
200 200 )
201 201 # Subtract revisions that redmine already knows about
202 202 recent_revisions = recent_changesets_slice.map{|c| c.scmid}
203 203 revisions.reject!{|r| recent_revisions.include?(r.scmid)}
204 204 offset += limit
205 205 end
206 206
207 207 revisions.each do |rev|
208 208 transaction do
209 209 # There is no search in the db for this revision, because above we ensured,
210 210 # that it's not in the db.
211 211 save_revision(rev)
212 212 end
213 213 end
214 214 h["heads"] = repo_heads.dup
215 215 merge_extra_info(h)
216 216 self.save
217 217 end
218 218 private :save_revisions
219 219
220 220 def save_revision(rev)
221 221 parents = (rev.parents || []).collect{|rp| find_changeset_by_name(rp)}.compact
222 222 changeset = Changeset.create(
223 223 :repository => self,
224 224 :revision => rev.identifier,
225 225 :scmid => rev.scmid,
226 226 :committer => rev.author,
227 227 :committed_on => rev.time,
228 228 :comments => rev.message,
229 229 :parents => parents
230 230 )
231 231 unless changeset.new_record?
232 232 rev.paths.each { |change| changeset.create_change(change) }
233 233 end
234 234 changeset
235 235 end
236 236 private :save_revision
237 237
238 238 def heads_from_branches_hash
239 239 h1 = extra_info || {}
240 240 h = h1.dup
241 241 h["branches"] ||= {}
242 242 h['branches'].map{|br, hs| hs['last_scmid']}
243 243 end
244 244
245 245 def latest_changesets(path,rev,limit=10)
246 246 revisions = scm.revisions(path, nil, rev, :limit => limit, :all => false)
247 247 return [] if revisions.nil? || revisions.empty?
248 248
249 249 changesets.find(
250 250 :all,
251 251 :conditions => [
252 252 "scmid IN (?)",
253 253 revisions.map!{|c| c.scmid}
254 254 ],
255 255 :order => 'committed_on DESC'
256 256 )
257 257 end
258
259 def clear_extra_info_of_changesets
260 return if extra_info.nil?
261 v = extra_info["extra_report_last_commit"]
262 write_attribute(:extra_info, nil)
263 h = {}
264 h["extra_report_last_commit"] = v
265 merge_extra_info(h)
266 self.save
267 end
268 private :clear_extra_info_of_changesets
258 269 end
@@ -1,2040 +1,2044
1 1 == Redmine changelog
2 2
3 3 Redmine - project management software
4 4 Copyright (C) 2006-2012 Jean-Philippe Lang
5 5 http://www.redmine.org/
6 6
7 == TBD v1.4.6
8
9 * Defect #12409: Git: changesets aren't read after clear_changesets call
10
7 11 == 2012-11-17 v1.4.5
8 12
9 13 * Defect #10818: Running rake in test environment causes exception
10 14 * Defect #11192: Make repository identifier accept underscores
11 15 * Defect #11298: Issue API may not work on Ruby 1.9 in Redmine 1.4
12 16 * Defect #11307: Can't filter for negative numeric custom fields
13 17 * Defect #11365: Attachment description length is not validated
14 18 * Defect #11541: Version sharing is missing in the REST API
15 19 * Defect #11665: New document category is not saved properly
16 20 * Defect #11789: Edit section links broken with h5/h6 headings
17 21 * Defect #11966: 404 Error when switching mode in view revision differences in non-main repo
18 22 * Defect #12189: No tmp/pdf directory
19 23 * Defect #12196: "Page not found" on OK button in SCM "View all revisions" page
20 24 * Feature #11338: Exclude emails with auto-submitted => auto-generated
21 25 * Patch #9732: German translations
22 26 * Patch #11261: Simplified Chinese translation for configurable session lifetime and timeout
23 27 * Patch #11328: Fix Japanese mistranslation for 'label_language_based'
24 28 * Patch #11406: German translation for configurable session lifetime and timeout
25 29 * Patch #11448: Russian translation for 1.4-stable and 2.0-stable
26 30 * Patch #11600: Fix plural form of the abbreviation for hours in Brazilian Portuguese
27 31
28 32 == 2012-06-18 v1.4.4
29 33
30 34 * Defect #10688: PDF export from Wiki - Problems with tables
31 35 * Defect #11061: Cannot choose commit versions to view differences in Git/Mercurial repository view
32 36 * Defect #11112: REST API - custom fields in POST/PUT ignored for time_entries
33 37 * Defect #11133: Wiki-page section edit link can point to incorrect section
34 38 * Defect #11160: SQL Error on time report if a custom field has multiple values for an entry
35 39 * Defect #11178: Spent time sorted by date-descending order lists same-date entries in physical order
36 40 * Defect #11185: Redmine fails to delete a project with parent/child task
37 41 * Feature #6597: Configurable session lifetime and timeout
38 42 * Patch #11113: Small glitch in German localization
39 43 * Fix for Rails vulnerabilities CVE-2012-2694 and CVE-2012-2695
40 44
41 45 == 2012-06-05 v1.4.3
42 46
43 47 * Defect #11038: "Create and continue" should preserve project, issue and activity when logging time
44 48 * Defect #11046: Redmine.pm does not support "bind as user" ldap authentication
45 49 * Defect #11051: reposman.rb fails in 1.4.2 because of missing require for rubygems
46 50 * Fix for Rails vulnerability CVE-2012-2660
47 51
48 52 == 2012-05-13 v1.4.2
49 53
50 54 * Defect #10744: rake task redmine:email:test broken
51 55 * Defect #10787: "Allow users to unsubscribe" option is confusing
52 56 * Defect #10827: Cannot access Repositories page and Settings in a Project - Error 500
53 57 * Defect #10829: db:migrate fails 0.8.2 -> 1.4.1
54 58 * Defect #10832: REST Uploads fail with fastcgi
55 59 * Defect #10837: reposman and rdm-mailhandler not working with ruby 1.9.x
56 60 * Defect #10856: can not load translations from hr.yml with ruby1.9.3-p194
57 61 * Defect #10865: Filter reset when deleting locked user
58 62 * Feature #9790: Allow filtering text custom fields on "is null" and "is not null"
59 63 * Feature #10778: svn:ignore for config/additional_environment.rb
60 64 * Feature #10875: Partial Albanian Translations
61 65 * Feature #10888: Bring back List-Id to help aid Gmail filtering
62 66 * Patch #10733: Traditional Chinese language file (to r9502)
63 67 * Patch #10745: Japanese translation update (r9519)
64 68 * Patch #10750: Swedish Translation for r9522
65 69 * Patch #10785: Bulgarian translation (jstoolbar)
66 70 * Patch #10800: Simplified Chinese translation
67 71
68 72 == 2012-04-20 v1.4.1
69 73
70 74 * Defect #8574: Time report: date range fields not enabled when using the calendar popup
71 75 * Defect #10642: Nested textile ol/ul lists generate invalid HTML
72 76 * Defect #10668: RSS key is generated twice when user is not reloaded
73 77 * Defect #10669: Token.destroy_expired should not delete API tokens
74 78 * Defect #10675: "Submit and continue" is broken
75 79 * Defect #10711: User cannot change account details with "Login has already been taken" error
76 80 * Feature #10664: Unsubscribe Own User Account
77 81 * Patch #10693: German Translation Update
78 82
79 83 == 2012-04-14 v1.4.0
80 84
81 85 * Defect #2719: Increase username length limit from 30 to 60
82 86 * Defect #3087: Revision referring to issues across all projects
83 87 * Defect #4824: Unable to connect (can't convert Net::LDAP::LdapError into String)
84 88 * Defect #5058: reminder mails are not sent when delivery_method is :async_smtp
85 89 * Defect #6859: Moving issues to a tracker with different custom fields should let fill these fields
86 90 * Defect #7398: Error when trying to quick create a version with required custom field
87 91 * Defect #7495: Python multiline comments highlighting problem in Repository browser
88 92 * Defect #7826: bigdecimal-segfault-fix.rb must be removed for Oracle
89 93 * Defect #7920: Attempted to update a stale object when copying a project
90 94 * Defect #8857: Git: Too long in fetching repositories after upgrade from 1.1 or new branch at first time
91 95 * Defect #9472: The git scm module causes an excess amount of DB traffic.
92 96 * Defect #9685: Adding multiple times the same related issue relation is possible
93 97 * Defect #9798: Release 1.3.0 does not detect rubytree under ruby 1.9.3p0 / rails 2.3.14
94 98 * Defect #9978: Japanese "permission_add_issue_watchers" is wrong
95 99 * Defect #10006: Email reminders are sent for closed issues
96 100 * Defect #10150: CSV export and spent time: rounding issue
97 101 * Defect #10168: CSV export breaks custom columns
98 102 * Defect #10181: Issue context menu and bulk edit form show irrelevant statuses
99 103 * Defect #10198: message_id regex in pop3.rb only recognizes Message-ID header (not Message-Id)
100 104 * Defect #10251: Description diff link in note details is relative when received by email
101 105 * Defect #10272: Ruby 1.9.3: "incompatible character encoding" with LDAP auth
102 106 * Defect #10275: Message object not passed to wiki macros for head topic and in preview edit mode
103 107 * Defect #10334: Full name is not unquoted when creating users from emails
104 108 * Defect #10410: [Localization] Grammar issue of Simplified Chinese in zh.yml
105 109 * Defect #10442: Ruby 1.9.3 Time Zone setting Internal error.
106 110 * Defect #10467: Confusing behavior while moving issue to a project with disabled Issues module
107 111 * Defect #10575: Uploading of attachments which filename contains non-ASCII chars fails with Ruby 1.9
108 112 * Defect #10590: WikiContent::Version#text return string with #<Encoding:ASCII-8BIT> when uncompressed
109 113 * Defect #10593: Error: 'incompatible character encodings: UTF-8 and ASCII-8BIT' (old annoing issue) on ruby-1.9.3
110 114 * Defect #10600: Watchers search generates an Internal error
111 115 * Defect #10605: Bulk edit selected issues does not allow selection of blank values for custom fields
112 116 * Defect #10619: When changing status before tracker, it shows improper status
113 117 * Feature #779: Multiple SCM per project
114 118 * Feature #971: Add "Spent time" column to query
115 119 * Feature #1060: Add a LDAP-filter using external auth sources
116 120 * Feature #1102: Shortcut for assigning an issue to me
117 121 * Feature #1189: Multiselect custom fields
118 122 * Feature #1363: Allow underscores in project identifiers
119 123 * Feature #1913: LDAP - authenticate as user
120 124 * Feature #1972: Attachments for News
121 125 * Feature #2009: Manually add related revisions
122 126 * Feature #2323: Workflow permissions for administrators
123 127 * Feature #2416: {background:color} doesn't work in text formatting
124 128 * Feature #2694: Notification on loosing assignment
125 129 * Feature #2715: "Magic links" to notes
126 130 * Feature #2850: Add next/previous navigation to issue
127 131 * Feature #3055: Option to copy attachments when copying an issue
128 132 * Feature #3108: set parent automatically for new pages
129 133 * Feature #3463: Export all wiki pages to PDF
130 134 * Feature #4050: Ruby 1.9 support
131 135 * Feature #4769: Ability to move an issue to a different project from the update form
132 136 * Feature #4774: Change the hyperlink for file attachment to view and download
133 137 * Feature #5159: Ability to add Non-Member watchers to the watch list
134 138 * Feature #5638: Use Bundler (Gemfile) for gem management
135 139 * Feature #5643: Add X-Redmine-Sender header to email notifications
136 140 * Feature #6296: Bulk-edit custom fields through context menu
137 141 * Feature #6386: Issue mail should render the HTML version of the issue details
138 142 * Feature #6449: Edit a wiki page's parent on the edit page
139 143 * Feature #6555: Double-click on "Submit" and "Save" buttons should not send two requests to server
140 144 * Feature #7361: Highlight active query in the side bar
141 145 * Feature #7420: Rest API for projects members
142 146 * Feature #7603: Please make editing issues more obvious than "Change properties (More)"
143 147 * Feature #8171: Adding attachments through the REST API
144 148 * Feature #8691: Better handling of issue update conflict
145 149 * Feature #9803: Change project through REST API issue update
146 150 * Feature #9923: User type custom fields should be filterable by "Me".
147 151 * Feature #9985: Group time report by the Status field
148 152 * Feature #9995: Time entries insertion, "Create and continue" button
149 153 * Feature #10020: Enable global time logging at /time_entries/new
150 154 * Feature #10042: Bulk change private flag
151 155 * Feature #10126: Add members of subprojects in the assignee and author filters
152 156 * Feature #10131: Include custom fiels in time entries API responses
153 157 * Feature #10207: Git: use default branch from HEAD
154 158 * Feature #10208: Estonian translation
155 159 * Feature #10253: Better handling of attachments when validation fails
156 160 * Feature #10350: Bulk copy should allow for changing the target version
157 161 * Feature #10607: Ignore out-of-office incoming emails
158 162 * Feature #10635: Adding time like "123 Min" is invalid
159 163 * Patch #9998: Make attachement "Optional Description" less wide
160 164 * Patch #10066: i18n not working with russian gem
161 165 * Patch #10128: Disable IE 8 compatibility mode to fix wrong div.autoscroll scroll bar behaviour
162 166 * Patch #10155: Russian translation changed
163 167 * Patch #10464: Enhanced PDF output for Issues list
164 168 * Patch #10470: Efficiently process new git revisions in a single batch
165 169 * Patch #10513: Dutch translation improvement
166 170
167 171 == 2012-04-14 v1.3.3
168 172
169 173 * Defect #10505: Error when exporting to PDF with NoMethodError (undefined method `downcase' for nil:NilClass)
170 174 * Defect #10554: Defect symbols when exporting tasks in pdf
171 175 * Defect #10564: Unable to change locked, sticky flags and board when editing a message
172 176 * Defect #10591: Dutch "label_file_added" translation is wrong
173 177 * Defect #10622: "Default administrator account changed" is always true
174 178 * Patch #10555: rake redmine:send_reminders aborted if issue assigned to group
175 179 * Patch #10611: Simplified Chinese translations for 1.3-stable
176 180
177 181 == 2012-03-11 v1.3.2
178 182
179 183 * Defect #8194: {{toc}} uses identical anchors for subsections with the same name
180 184 * Defect #9143: Partial diff comparison should be done on actual code, not on html
181 185 * Defect #9523: {{toc}} does not display headers with @ code markup
182 186 * Defect #9815: Release 1.3.0 does not detect rubytree with rubgems 1.8
183 187 * Defect #10053: undefined method `<=>' for nil:NilClass when accessing the settings of a project
184 188 * Defect #10135: ActionView::TemplateError (can't convert Fixnum into String)
185 189 * Defect #10193: Unappropriate icons in highlighted code block
186 190 * Defect #10199: No wiki section edit when title contains code
187 191 * Defect #10218: Error when creating a project with a version custom field
188 192 * Defect #10241: "get version by ID" fails with "401 not authorized" error when using API access key
189 193 * Defect #10284: Note added by commit from a subproject does not contain project identifier
190 194 * Defect #10374: User list is empty when adding users to project / group if remaining users are added late
191 195 * Defect #10390: Mass assignment security vulnerability
192 196 * Patch #8413: Confirmation message before deleting a relationship
193 197 * Patch #10160: Bulgarian translation (r8777)
194 198 * Patch #10242: Migrate Redmine.pm from Digest::Sha1 to Digest::Sha
195 199 * Patch #10258: Italian translation for 1.3-stable
196 200
197 201 == 2012-02-06 v1.3.1
198 202
199 203 * Defect #9775: app/views/repository/_revision_graph.html.erb sets window.onload directly..
200 204 * Defect #9792: Ruby 1.9: [v1.3.0] Error: incompatible character encodings for it translation on Calendar page
201 205 * Defect #9793: Bad spacing between numbered list and heading (recently broken).
202 206 * Defect #9795: Unrelated error message when creating a group with an invalid name
203 207 * Defect #9832: Revision graph height should depend on height of rows in revisions table
204 208 * Defect #9937: Repository settings are not saved when all SCM are disabled
205 209 * Defect #9961: Ukrainian "default_tracker_bug" is wrong
206 210 * Defect #10013: Rest API - Create Version -> Internal server error 500
207 211 * Defect #10115: Javascript error - Can't attach more than 1 file on IE 6 and 7
208 212 * Defect #10130: Broken italic text style in edited comment preview
209 213 * Defect #10152: Attachment diff type is not saved in user preference
210 214 * Feature #9943: Arabic translation
211 215 * Patch #9874: pt-BR translation updates
212 216 * Patch #9922: Spanish translation updated
213 217 * Patch #10137: Korean language file ko.yml updated to Redmine 1.3.0
214 218
215 219 == 2011-12-10 v1.3.0
216 220
217 221 * Defect #2109: Context menu is being submitted twice per right click
218 222 * Defect #7717: MailHandler user creation for unknown_user impossible due to diverging length-limits of login and email fields
219 223 * Defect #7917: Creating users via email fails if user real name containes special chars
220 224 * Defect #7966: MailHandler does not include JournalDetail for attached files
221 225 * Defect #8368: Bad decimal separator in time entry CSV
222 226 * Defect #8371: MySQL error when filtering a custom field using the REST api
223 227 * Defect #8549: Export CSV has character encoding error
224 228 * Defect #8573: Do not show inactive Enumerations where not needed
225 229 * Defect #8611: rake/rdoctask is deprecated
226 230 * Defect #8751: Email notification: bug, when number of recipients more then 8
227 231 * Defect #8894: Private issues - make it more obvious in the UI?
228 232 * Defect #8994: Hardcoded French string "anonyme"
229 233 * Defect #9043: Hardcoded string "diff" in Wiki#show and Repositories_Helper
230 234 * Defect #9051: wrong "text_issue_added" in russian translation.
231 235 * Defect #9108: Custom query not saving status filter
232 236 * Defect #9252: Regression: application title escaped 2 times
233 237 * Defect #9264: Bad Portuguese translation
234 238 * Defect #9470: News list is missing Avatars
235 239 * Defect #9471: Inline markup broken in Wiki link labels
236 240 * Defect #9489: Label all input field and control tags
237 241 * Defect #9534: Precedence: bulk email header is non standard and discouraged
238 242 * Defect #9540: Issue filter by assigned_to_role is not project specific
239 243 * Defect #9619: Time zone ignored when logging time while editing ticket
240 244 * Defect #9638: Inconsistent image filename extensions
241 245 * Defect #9669: Issue list doesn't sort assignees/authors regarding user display format
242 246 * Defect #9672: Message-quoting in forums module broken
243 247 * Defect #9719: Filtering by numeric custom field types broken after update to master
244 248 * Defect #9724: Can't remote add new categories
245 249 * Defect #9738: Setting of cross-project custom query is not remembered inside project
246 250 * Defect #9748: Error about configuration.yml validness should mention file path
247 251 * Feature #69: Textilized description in PDF
248 252 * Feature #401: Add pdf export for WIKI page
249 253 * Feature #1567: Make author column sortable and groupable
250 254 * Feature #2222: Single section edit.
251 255 * Feature #2269: Default issue start date should become configurable.
252 256 * Feature #2371: character encoding for attachment file
253 257 * Feature #2964: Ability to assign issues to groups
254 258 * Feature #3033: Bug Reporting: Using "Create and continue" should show bug id of saved bug
255 259 * Feature #3261: support attachment images in PDF export
256 260 * Feature #4264: Update CodeRay to 1.0 final
257 261 * Feature #4324: Redmine renames my files, it shouldn't.
258 262 * Feature #4729: Add Date-Based Filters for Issues List
259 263 * Feature #4742: CSV export: option to export selected or all columns
260 264 * Feature #4976: Allow rdm-mailhandler to read the API key from a file
261 265 * Feature #5501: Git: Mercurial: Adding visual merge/branch history to repository view
262 266 * Feature #5634: Export issue to PDF does not include Subtasks and Related Issues
263 267 * Feature #5670: Cancel option for file upload
264 268 * Feature #5737: Custom Queries available through the REST Api
265 269 * Feature #6180: Searchable custom fields do not provide adequate operators
266 270 * Feature #6954: Filter from date to date
267 271 * Feature #7180: List of statuses in REST API
268 272 * Feature #7181: List of trackers in REST API
269 273 * Feature #7366: REST API for Issue Relations
270 274 * Feature #7403: REST API for Versions
271 275 * Feature #7671: REST API for reading attachments
272 276 * Feature #7832: Ability to assign issue categories to groups
273 277 * Feature #8420: Consider removing #7013 workaround
274 278 * Feature #9196: Improve logging in MailHandler when user creation fails
275 279 * Feature #9496: Adds an option in mailhandler to disable server certificate verification
276 280 * Feature #9553: CRUD operations for "Issue categories" in REST API
277 281 * Feature #9593: HTML title should be reordered
278 282 * Feature #9600: Wiki links for news and forums
279 283 * Feature #9607: Filter for issues without start date (or any another field based on date type)
280 284 * Feature #9609: Upgrade to Rails 2.3.14
281 285 * Feature #9612: "side by side" and "inline" patch view for attachments
282 286 * Feature #9667: Check attachment size before upload
283 287 * Feature #9690: Link in notification pointing to the actual update
284 288 * Feature #9720: Add note number for single issue's PDF
285 289 * Patch #8617: Indent subject of subtask ticket in exported issues PDF
286 290 * Patch #8778: Traditional Chinese 'issue' translation change
287 291 * Patch #9053: Fix up Russian translation
288 292 * Patch #9129: Improve wording of Git repository note at project setting
289 293 * Patch #9148: Better handling of field_due_date italian translation
290 294 * Patch #9273: Fix typos in russian localization
291 295 * Patch #9484: Limit SCM annotate to text files under the maximum file size for viewing
292 296 * Patch #9659: Indexing rows in auth_sources/index view
293 297 * Patch #9692: Fix Textilized description in PDF for CodeRay
294 298
295 299 == 2011-12-10 v1.2.3
296 300
297 301 * Defect #8707: Reposman: wrong constant name
298 302 * Defect #8809: Table in timelog report overflows
299 303 * Defect #9055: Version files in Files module cannot be downloaded if issue tracking is disabled
300 304 * Defect #9137: db:encrypt fails to handle repositories with blank password
301 305 * Defect #9394: Custom date field only validating on regex and not a valid date
302 306 * Defect #9405: Any user with :log_time permission can edit time entries via context menu
303 307 * Defect #9448: The attached images are not shown in documents
304 308 * Defect #9520: Copied private query not visible after project copy
305 309 * Defect #9552: Error when reading ciphered text from the database without cipher key configured
306 310 * Defect #9566: Redmine.pm considers all projects private when login_required is enabled
307 311 * Defect #9567: Redmine.pm potential security issue with cache credential enabled and subversion
308 312 * Defect #9577: Deleting a subtasks doesn't update parent's rgt & lft values
309 313 * Defect #9597: Broken version links in wiki annotate history
310 314 * Defect #9682: Wiki HTML Export only useful when Access history is accessible
311 315 * Defect #9737: Custom values deleted before issue submit
312 316 * Defect #9741: calendar-hr.js (Croatian) is not UTF-8
313 317 * Patch #9558: Simplified Chinese translation for 1.2.2 updated
314 318 * Patch #9695: Bulgarian translation (r7942)
315 319
316 320 == 2011-11-11 v1.2.2
317 321
318 322 * Defect #3276: Incorrect handling of anchors in Wiki to HTML export
319 323 * Defect #7215: Wiki formatting mangles links to internal headers
320 324 * Defect #7613: Generated test instances may share the same attribute value object
321 325 * Defect #8411: Can't remove "Project" column on custom query
322 326 * Defect #8615: Custom 'version' fields don't show shared versions
323 327 * Defect #8633: Pagination counts non visible issues
324 328 * Defect #8651: Email attachments are not added to issues any more in v1.2
325 329 * Defect #8825: JRuby + Windows: SCMs do not work on Redmine 1.2
326 330 * Defect #8836: Additional workflow transitions not available when set to both author and assignee
327 331 * Defect #8865: Custom field regular expression is not validated
328 332 * Defect #8880: Error deleting issue with grandchild
329 333 * Defect #8884: Assignee is cleared when updating issue with locked assignee
330 334 * Defect #8892: Unused fonts in rfpdf plugin folder
331 335 * Defect #9161: pt-BR field_warn_on_leaving_unsaved has a small gramatical error
332 336 * Defect #9308: Search fails when a role haven't "view wiki" permission
333 337 * Defect #9465: Mercurial: can't browse named branch below Mercurial 1.5
334 338
335 339 == 2011-07-11 v1.2.1
336 340
337 341 * Defect #5089: i18N error on truncated revision diff view
338 342 * Defect #7501: Search options get lost after clicking on a specific result type
339 343 * Defect #8229: "project.xml" response does not include the parent ID
340 344 * Defect #8449: Wiki annotated page does not display author of version 1
341 345 * Defect #8467: Missing german translation - Warn me when leaving a page with unsaved text
342 346 * Defect #8468: No warning when leaving page with unsaved text that has not lost focus
343 347 * Defect #8472: Private checkbox ignored on issue creation with "Set own issues public or private" permission
344 348 * Defect #8510: JRuby: Can't open administrator panel if scm command is not available
345 349 * Defect #8512: Syntax highlighter on Welcome page
346 350 * Defect #8554: Translation missing error on custom field validation
347 351 * Defect #8565: JRuby: Japanese PDF export error
348 352 * Defect #8566: Exported PDF UTF-8 Vietnamese not correct
349 353 * Defect #8569: JRuby: PDF export error with TypeError
350 354 * Defect #8576: Missing german translation - different things
351 355 * Defect #8616: Circular relations
352 356 * Defect #8646: Russian translation "label_follows" and "label_follows" are wrong
353 357 * Defect #8712: False 'Description updated' journal details messages
354 358 * Defect #8729: Not-public queries are not private
355 359 * Defect #8737: Broken line of long issue description on issue PDF.
356 360 * Defect #8738: Missing revision number/id of associated revisions on issue PDF
357 361 * Defect #8739: Workflow copy does not copy advanced workflow settings
358 362 * Defect #8759: Setting issue attributes from mail should be case-insensitive
359 363 * Defect #8777: Mercurial: Not able to Resetting Redmine project respository
360 364
361 365 == 2011-05-30 v1.2.0
362 366
363 367 * Defect #61: Broken character encoding in pdf export
364 368 * Defect #1965: Redmine is not Tab Safe
365 369 * Defect #2274: Filesystem Repository path encoding of non UTF-8 characters
366 370 * Defect #2664: Mercurial: Repository path encoding of non UTF-8 characters
367 371 * Defect #3421: Mercurial reads files from working dir instead of changesets
368 372 * Defect #3462: CVS: Repository path encoding of non UTF-8 characters
369 373 * Defect #3715: Login page should not show projects link and search box if authentication is required
370 374 * Defect #3724: Mercurial repositories display revision ID instead of changeset ID
371 375 * Defect #3761: Most recent CVS revisions are missing in "revisions" view
372 376 * Defect #4270: CVS Repository view in Project doesn't show Author, Revision, Comment
373 377 * Defect #5138: Don't use Ajax for pagination
374 378 * Defect #5152: Cannot use certain characters for user and role names.
375 379 * Defect #5251: Git: Repository path encoding of non UTF-8 characters
376 380 * Defect #5373: Translation missing when adding invalid watchers
377 381 * Defect #5817: Shared versions not shown in subproject's gantt chart
378 382 * Defect #6013: git tab,browsing, very slow -- even after first time
379 383 * Defect #6148: Quoting, newlines, and nightmares...
380 384 * Defect #6256: Redmine considers non ASCII and UTF-16 text files as binary in SCM
381 385 * Defect #6476: Subproject's issues are not shown in the subproject's gantt
382 386 * Defect #6496: Remove i18n 0.3.x/0.4.x hack for Rails 2.3.5
383 387 * Defect #6562: Context-menu deletion of issues deletes all subtasks too without explicit prompt
384 388 * Defect #6604: Issues targeted at parent project versions' are not shown on gantt chart
385 389 * Defect #6706: Resolving issues with the commit message produces the wrong comment with CVS
386 390 * Defect #6901: Copy/Move an issue does not give any history of who actually did the action.
387 391 * Defect #6905: Specific heading-content breaks CSS
388 392 * Defect #7000: Project filter not applied on versions in Gantt chart
389 393 * Defect #7097: Starting day of week cannot be set to Saturday
390 394 * Defect #7114: New gantt doesn't display some projects
391 395 * Defect #7146: Git adapter lost commits before 7 days from database latest changeset
392 396 * Defect #7218: Date range error on issue query
393 397 * Defect #7257: "Issues by" version links bad criterias
394 398 * Defect #7279: CSS class ".icon-home" is not used.
395 399 * Defect #7320: circular dependency >2 issues
396 400 * Defect #7352: Filters not working in Gantt charts
397 401 * Defect #7367: Receiving pop3 email should not output debug messages
398 402 * Defect #7373: Error with PDF output and ruby 1.9.2
399 403 * Defect #7379: Remove extraneous hidden_field on wiki history
400 404 * Defect #7516: Redmine does not work with RubyGems 1.5.0
401 405 * Defect #7518: Mercurial diff can be wrong if the previous changeset isn't the parent
402 406 * Defect #7581: Not including a spent time value on the main issue update screen causes silent data loss
403 407 * Defect #7582: hiding form pages from search engines
404 408 * Defect #7597: Subversion and Mercurial log have the possibility to miss encoding
405 409 * Defect #7604: ActionView::TemplateError (undefined method `name' for nil:NilClass)
406 410 * Defect #7605: Using custom queries always redirects to "Issues" tab
407 411 * Defect #7615: CVS diffs do not handle new files properly
408 412 * Defect #7618: SCM diffs do not handle one line new files properly
409 413 * Defect #7639: Some date fields do not have requested format.
410 414 * Defect #7657: Wrong commit range in git log command on Windows
411 415 * Defect #7818: Wiki pages don't use the local timezone to display the "Updated ? hours ago" mouseover
412 416 * Defect #7821: Git "previous" and "next" revisions are incorrect
413 417 * Defect #7827: CVS: Age column on repository view is off by timezone delta
414 418 * Defect #7843: Add a relation between issues = explicit login window ! (basic authentication popup is prompted on AJAX request)
415 419 * Defect #8011: {{toc}} does not display headlines with inline code markup
416 420 * Defect #8029: List of users for adding to a group may be empty if 100 first users have been added
417 421 * Defect #8064: Text custom fields do not wrap on the issue list
418 422 * Defect #8071: Watching a subtask from the context menu updates main issue watch link
419 423 * Defect #8072: Two untranslatable default role names
420 424 * Defect #8075: Some "notifiable" names are not i18n-enabled
421 425 * Defect #8081: GIT: Commits missing when user has the "decorate" git option enabled
422 426 * Defect #8088: Colorful indentation of subprojects must be on right in RTL locales
423 427 * Defect #8239: notes field is not propagated during issue copy
424 428 * Defect #8356: GET /time_entries.xml ignores limit/offset parameters
425 429 * Defect #8432: Private issues information shows up on Activity page for unauthorized users
426 430 * Feature #746: Versioned issue descriptions
427 431 * Feature #1067: Differentiate public/private saved queries in the sidebar
428 432 * Feature #1236: Make destination folder for attachment uploads configurable
429 433 * Feature #1735: Per project repository log encoding setting
430 434 * Feature #1763: Autologin-cookie should be configurable
431 435 * Feature #1981: display mercurial tags
432 436 * Feature #2074: Sending email notifications when comments are added in the news section
433 437 * Feature #2096: Custom fields referencing system tables (users and versions)
434 438 * Feature #2732: Allow additional workflow transitions for author and assignee
435 439 * Feature #2910: Warning on leaving edited issue/wiki page without saving
436 440 * Feature #3396: Git: use --encoding=UTF-8 in "git log"
437 441 * Feature #4273: SCM command availability automatic check in administration panel
438 442 * Feature #4477: Use mime types in downloading from repository
439 443 * Feature #5518: Graceful fallback for "missing translation" needed
440 444 * Feature #5520: Text format buttons and preview link missing when editing comment
441 445 * Feature #5831: Parent Task to Issue Bulk Edit
442 446 * Feature #6887: Upgrade to Rails 2.3.11
443 447 * Feature #7139: Highlight changes inside diff lines
444 448 * Feature #7236: Collapse All for Groups
445 449 * Feature #7246: Handle "named branch" for mercurial
446 450 * Feature #7296: Ability for admin to delete users
447 451 * Feature #7318: Add user agent to Redmine Mailhandler
448 452 * Feature #7408: Add an application configuration file
449 453 * Feature #7409: Cross project Redmine links
450 454 * Feature #7410: Add salt to user passwords
451 455 * Feature #7411: Option to cipher LDAP ans SCM passwords stored in the database
452 456 * Feature #7412: Add an issue visibility level to each role
453 457 * Feature #7414: Private issues
454 458 * Feature #7517: Configurable path of executable for scm adapters
455 459 * Feature #7640: Add "mystery man" gravatar to options
456 460 * Feature #7858: RubyGems 1.6 support
457 461 * Feature #7893: Group filter on the users list
458 462 * Feature #7899: Box for editing comments should open with the formatting toolbar
459 463 * Feature #7921: issues by pulldown should have 'status' option
460 464 * Feature #7996: Bulk edit and context menu for time entries
461 465 * Feature #8006: Right click context menu for Related Issues
462 466 * Feature #8209: I18n YAML files not parsable with psych yaml library
463 467 * Feature #8345: Link to user profile from account page
464 468 * Feature #8365: Git: per project setting to report last commit or not in repository tree
465 469 * Patch #5148: metaKey not handled in issues selection
466 470 * Patch #5629: Wrap text fields properly in PDF
467 471 * Patch #7418: Redmine Persian Translation
468 472 * Patch #8295: Wrap title fields properly in PDF
469 473 * Patch #8310: fixes automatic line break problem with TCPDF
470 474 * Patch #8312: Switch to TCPDF from FPDF for PDF export
471 475
472 476 == 2011-04-29 v1.1.3
473 477
474 478 * Defect #5773: Email reminders are sent to locked users
475 479 * Defect #6590: Wrong file list link in email notification on new file upload
476 480 * Defect #7589: Wiki page with backslash in title can not be found
477 481 * Defect #7785: Mailhandler keywords are not removed when updating issues
478 482 * Defect #7794: Internal server error on formatting an issue as a PDF in Japanese
479 483 * Defect #7838: Gantt- Issues does not show up in green when start and end date are the same
480 484 * Defect #7846: Headers (h1, etc.) containing backslash followed by a digit are not displayed correctly
481 485 * Defect #7875: CSV export separators in polish locale (pl.yml)
482 486 * Defect #7890: Internal server error when referencing an issue without project in commit message
483 487 * Defect #7904: Subprojects not properly deleted when deleting a parent project
484 488 * Defect #7939: Simultaneous Wiki Updates Cause Internal Error
485 489 * Defect #7951: Atom links broken on wiki index
486 490 * Defect #7954: IE 9 can not select issues, does not display context menu
487 491 * Defect #7985: Trying to do a bulk edit results in "Internal Error"
488 492 * Defect #8003: Error raised by reposman.rb under Windows server 2003
489 493 * Defect #8012: Wrong selection of modules when adding new project after validation error
490 494 * Defect #8038: Associated Revisions OL/LI items are not styled properly in issue view
491 495 * Defect #8067: CSV exporting in Italian locale
492 496 * Defect #8235: bulk edit issues and copy issues error in es, gl and ca locales
493 497 * Defect #8244: selected modules are not activated when copying a project
494 498 * Patch #7278: Update Simplified Chinese translation to 1.1
495 499 * Patch #7390: Fixes in Czech localization
496 500 * Patch #7963: Reminder email: Link for show all issues does not sort
497 501
498 502 == 2011-03-07 v1.1.2
499 503
500 504 * Defect #3132: Bulk editing menu non-functional in Opera browser
501 505 * Defect #6090: Most binary files become corrupted when downloading from CVS repository browser when Redmine is running on a Windows server
502 506 * Defect #7280: Issues subjects wrap in Gantt
503 507 * Defect #7288: Non ASCII filename downloaded from repo is broken on Internet Explorer.
504 508 * Defect #7317: Gantt tab gives internal error due to nil avatar icon
505 509 * Defect #7497: Aptana Studio .project file added to version 1.1.1-stable
506 510 * Defect #7611: Workflow summary shows X icon for workflow with exactly 1 status transition
507 511 * Defect #7625: Syntax highlighting unavailable from board new topic or topic edit preview
508 512 * Defect #7630: Spent time in commits not recognized
509 513 * Defect #7656: MySQL SQL Syntax Error when filtering issues by Assignee's Group
510 514 * Defect #7718: Minutes logged in commit message are converted to hours
511 515 * Defect #7763: Email notification are sent to watchers even if 'No events' setting is chosen
512 516 * Feature #7608: Add "retro" gravatars
513 517 * Patch #7598: Extensible MailHandler
514 518 * Patch #7795: Internal server error at journals#index with custom fields
515 519
516 520 == 2011-01-30 v1.1.1
517 521
518 522 * Defect #4899: Redmine fails to list files for darcs repository
519 523 * Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
520 524 * Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
521 525 * Defect #7258: Automatic spent time logging does not work properly with SQLite3
522 526 * Defect #7259: Released 1.1.0 uses "devel" label inside admin information
523 527 * Defect #7265: "Loading..." icon does not disappear after add project member
524 528 * Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
525 529 * Defect #7274: CSV value separator in dutch locale
526 530 * Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
527 531 * Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
528 532 * Defect #7307: HTTP 500 error on query for empty revision
529 533 * Defect #7313: Label not translated in french in Settings/Email Notification tab
530 534 * Defect #7329: <code class="javascript"> with long strings may hang server
531 535 * Defect #7337: My page french translation
532 536 * Defect #7348: French Translation of "Connection"
533 537 * Defect #7385: Error when viewing an issue which was related to a deleted subtask
534 538 * Defect #7386: NoMethodError on pdf export
535 539 * Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
536 540 * Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
537 541 * Feature #5344: Update to latest CodeRay 0.9.x
538 542
539 543 == 2011-01-09 v1.1.0
540 544
541 545 * Defect #2038: Italics in wiki headers show-up wrong in the toc
542 546 * Defect #3449: Redmine Takes Too Long On Large Mercurial Repository
543 547 * Defect #3567: Sorting for changesets might go wrong on Mercurial repos
544 548 * Defect #3707: {{toc}} doesn't work with {{include}}
545 549 * Defect #5096: Redmine hangs up while browsing Git repository
546 550 * Defect #6000: Safe Attributes prevents plugin extension of Issue model...
547 551 * Defect #6064: Modules not assigned to projects created via API
548 552 * Defect #6110: MailHandler should allow updating Issue Priority and Custom fields
549 553 * Defect #6136: JSON API holds less information than XML API
550 554 * Defect #6345: xml used by rest API is invalid
551 555 * Defect #6348: Gantt chart PDF rendering errors
552 556 * Defect #6403: Updating an issue with custom fields fails
553 557 * Defect #6467: "Member of role", "Member of group" filter not work correctly
554 558 * Defect #6473: New gantt broken after clearing issue filters
555 559 * Defect #6541: Email notifications send to everybody
556 560 * Defect #6549: Notification settings not migrated properly
557 561 * Defect #6591: Acronyms must have a minimum of three characters
558 562 * Defect #6674: Delete time log broken after changes to REST
559 563 * Defect #6681: Mercurial, Bazaar and Darcs auto close issue text should be commit id instead of revision number
560 564 * Defect #6724: Wiki uploads does not work anymore (SVN 4266)
561 565 * Defect #6746: Wiki links are broken on Activity page
562 566 * Defect #6747: Wiki diff does not work since r4265
563 567 * Defect #6763: New gantt charts: subject displayed twice on issues
564 568 * Defect #6826: Clicking "Add" twice creates duplicate member record
565 569 * Defect #6844: Unchecking status filter on the issue list has no effect
566 570 * Defect #6895: Wrong Polish translation of "blocks"
567 571 * Defect #6943: Migration from boolean to varchar fails on PostgreSQL 8.1
568 572 * Defect #7064: Mercurial adapter does not recognize non alphabetic nor numeric in UTF-8 copied files
569 573 * Defect #7128: New gantt chart does not render subtasks under parent task
570 574 * Defect #7135: paging mechanism returns the same last page forever
571 575 * Defect #7188: Activity page not refreshed when changing language
572 576 * Defect #7195: Apply CLI-supplied defaults for incoming mail only to new issues not replies
573 577 * Defect #7197: Tracker reset to default when replying to an issue email
574 578 * Defect #7213: Copy project does not copy all roles and permissions
575 579 * Defect #7225: Project settings: Trackers & Custom fields only relevant if module Issue tracking is active
576 580 * Feature #630: Allow non-unique names for projects
577 581 * Feature #1738: Add a "Visible" flag to project/user custom fields
578 582 * Feature #2803: Support for Javascript in Themes
579 583 * Feature #2852: Clean Incoming Email of quoted text "----- Reply above this line ------"
580 584 * Feature #2995: Improve error message when trying to access an archived project
581 585 * Feature #3170: Autocomplete issue relations on subject
582 586 * Feature #3503: Administrator Be Able To Modify Email settings Of Users
583 587 * Feature #4155: Automatic spent time logging from commit messages
584 588 * Feature #5136: Parent select on Wiki rename page
585 589 * Feature #5338: Descendants (subtasks) should be available via REST API
586 590 * Feature #5494: Wiki TOC should display heading from level 4
587 591 * Feature #5594: Improve MailHandler's keyword handling
588 592 * Feature #5622: Allow version to be set via incoming email
589 593 * Feature #5712: Reload themes
590 594 * Feature #5869: Issue filters by Group and Role
591 595 * Feature #6092: Truncate Git revision labels in Activity page/feed and allow configurable length
592 596 * Feature #6112: Accept localized keywords when receiving emails
593 597 * Feature #6140: REST issues response with issue count limit and offset
594 598 * Feature #6260: REST API for Users
595 599 * Feature #6276: Gantt Chart rewrite
596 600 * Feature #6446: Remove length limits on project identifier and name
597 601 * Feature #6628: Improvements in truncate email
598 602 * Feature #6779: Project JSON API
599 603 * Feature #6823: REST API for time tracker.
600 604 * Feature #7072: REST API for news
601 605 * Feature #7111: Expose more detail on journal entries
602 606 * Feature #7141: REST API: get information about current user
603 607 * Patch #4807: Allow to set the done_ratio field with the incoming mail system
604 608 * Patch #5441: Initialize TimeEntry attributes with params[:time_entry]
605 609 * Patch #6762: Use GET instead of POST to retrieve context_menu
606 610 * Patch #7160: French translation ofr "not_a_date" is missing
607 611 * Patch #7212: Missing remove_index in AddUniqueIndexOnMembers down migration
608 612
609 613
610 614 == 2010-12-23 v1.0.5
611 615
612 616 * #6656: Mercurial adapter loses seconds of commit times
613 617 * #6996: Migration trac(sqlite3) -> redmine(postgresql) doesnt escape ' char
614 618 * #7013: v-1.0.4 trunk - see {{count}} in page display rather than value
615 619 * #7016: redundant 'field_start_date' in ja.yml
616 620 * #7018: 'undefined method `reschedule_after' for nil:NilClass' on new issues
617 621 * #7024: E-mail notifications about Wiki changes.
618 622 * #7033: 'class' attribute of <pre> tag shouldn't be truncate
619 623 * #7035: CSV value separator in russian
620 624 * #7122: Issue-description Quote-button missing
621 625 * #7144: custom queries making use of deleted custom fields cause a 500 error
622 626 * #7162: Multiply defined label in french translation
623 627
624 628 == 2010-11-28 v1.0.4
625 629
626 630 * #5324: Git not working if color.ui is enabled
627 631 * #6447: Issues API doesn't allow full key auth for all actions
628 632 * #6457: Edit User group problem
629 633 * #6575: start date being filled with current date even when blank value is submitted
630 634 * #6740: Max attachment size, incorrect usage of 'KB'
631 635 * #6760: Select box sorted by ID instead of name in Issue Category
632 636 * #6766: Changing target version name can cause an internal error
633 637 * #6784: Redmine not working with i18n gem 0.4.2
634 638 * #6839: Hardcoded absolute links in my/page_layout
635 639 * #6841: Projects API doesn't allow full key auth for all actions
636 640 * #6860: svn: Write error: Broken pipe when browsing repository
637 641 * #6874: API should return XML description when creating a project
638 642 * #6932: submitting wrong parent task input creates a 500 error
639 643 * #6966: Records of Forums are remained, deleting project
640 644 * #6990: Layout problem in workflow overview
641 645 * #5117: mercurial_adapter should ensure the right LANG environment variable
642 646 * #6782: Traditional Chinese language file (to r4352)
643 647 * #6783: Swedish Translation for r4352
644 648 * #6804: Bugfix: spelling fixes
645 649 * #6814: Japanese Translation for r4362
646 650 * #6948: Bulgarian translation
647 651 * #6973: Update es.yml
648 652
649 653 == 2010-10-31 v1.0.3
650 654
651 655 * #4065: Redmine.pm doesn't work with LDAPS and a non-standard port
652 656 * #4416: Link from version details page to edit the wiki.
653 657 * #5484: Add new issue as subtask to an existing ticket
654 658 * #5948: Update help/wiki_syntax_detailed.html with more link options
655 659 * #6494: Typo in pt_BR translation for 1.0.2
656 660 * #6508: Japanese translation update
657 661 * #6509: Localization pt-PT (new strings)
658 662 * #6511: Rake task to test email
659 663 * #6525: Traditional Chinese language file (to r4225)
660 664 * #6536: Patch for swedish translation
661 665 * #6548: Rake tasks to add/remove i18n strings
662 666 * #6569: Updated Hebrew translation
663 667 * #6570: Japanese Translation for r4231
664 668 * #6596: pt-BR translation updates
665 669 * #6629: Change field-name of issues start date
666 670 * #6669: Bulgarian translation
667 671 * #6731: Macedonian translation fix
668 672 * #6732: Japanese Translation for r4287
669 673 * #6735: Add user-agent to reposman
670 674 * #6736: Traditional Chinese language file (to r4288)
671 675 * #6739: Swedish Translation for r4288
672 676 * #6765: Traditional Chinese language file (to r4302)
673 677 * Fixed #5324: Git not working if color.ui is enabled
674 678 * Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark).
675 679 * Fixed #5803: Precedes/Follows Relationships Broke
676 680 * Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions
677 681 * Fixed #6438: Autologin cannot be disabled again once it's enabled
678 682 * Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory
679 683 * Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list
680 684 * Fixed #6563: i18n-issues on calendar view
681 685 * Fixed #6598: Wrong caption for button_create_and_continue in German language file
682 686 * Fixed #6607: Unclear caption for german button_update
683 687 * Fixed #6612: SortHelper missing from CalendarsController
684 688 * Fixed #6740: Max attachment size, incorrect usage of 'KB'
685 689 * Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb:
686 690
687 691 == 2010-09-26 v1.0.2
688 692
689 693 * #2285: issue-refinement: pressing enter should result to an "apply"
690 694 * #3411: Allow mass status update trough context menu
691 695 * #5929: https-enabled gravatars when called over https
692 696 * #6189: Japanese Translation for r4011
693 697 * #6197: Traditional Chinese language file (to r4036)
694 698 * #6198: Updated german translation
695 699 * #6208: Macedonian translation
696 700 * #6210: Swedish Translation for r4039
697 701 * #6248: nl translation update for r4050
698 702 * #6263: Catalan translation update
699 703 * #6275: After submitting a related issue, the Issue field should be re-focused
700 704 * #6289: Checkboxes in issues list shouldn't be displayed when printing
701 705 * #6290: Make journals theming easier
702 706 * #6291: User#allowed_to? is not tested
703 707 * #6306: Traditional Chinese language file (to r4061)
704 708 * #6307: Korean translation update for 4066(4061)
705 709 * #6316: pt_BR update
706 710 * #6339: SERBIAN Updated
707 711 * #6358: Updated Polish translation
708 712 * #6363: Japanese Translation for r4080
709 713 * #6365: Traditional Chinese language file (to r4081)
710 714 * #6382: Issue PDF export variable usage
711 715 * #6428: Interim solution for i18n >= 0.4
712 716 * #6441: Japanese Translation for r4162
713 717 * #6451: Traditional Chinese language file (to r4167)
714 718 * #6465: Japanese Translation for r4171
715 719 * #6466: Traditional Chinese language file (to r4171)
716 720 * #6490: pt-BR translation for 1.0.2
717 721 * Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root
718 722 * Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections
719 723 * Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio
720 724 * Fixed #5608: broken with i18n 0.4.0
721 725 * Fixed #6054: Error 500 on filenames with whitespace in git reposities
722 726 * Fixed #6135: Default logger configuration grows without bound.
723 727 * Fixed #6191: Deletion of a main task deletes all subtasks
724 728 * Fixed #6195: Missing move issues between projects
725 729 * Fixed #6242: can't switch between inline and side-by-side diff
726 730 * Fixed #6249: Create and continue returns 404
727 731 * Fixed #6267: changing the authentication mode from ldap to internal with setting the password
728 732 * Fixed #6270: diff coderay malformed in the "news" page
729 733 * Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files
730 734 * Fixed #6333: Create and continue results in a 404 Error
731 735 * Fixed #6346: Age column on repository view is skewed for git, probably CVS too
732 736 * Fixed #6351: Context menu on roadmap broken
733 737 * Fixed #6388: New Subproject leads to a 404
734 738 * Fixed #6392: Updated/Created links to activity broken
735 739 * Fixed #6413: Error in SQL
736 740 * Fixed #6443: Redirect to project settings after Copying a Project
737 741 * Fixed #6448: Saving a wiki page with no content has a translation missing
738 742 * Fixed #6452: Unhandled exception on creating File
739 743 * Fixed #6471: Typo in label_report in Czech translation
740 744 * Fixed #6479: Changing tracker type will lose watchers
741 745 * Fixed #6499: Files with leading or trailing whitespace are not shown in git.
742 746
743 747 == 2010-08-22 v1.0.1
744 748
745 749 * #819: Add a body ID and class to all pages
746 750 * #871: Commit new CSS styles!
747 751 * #3301: Add favicon to base layout
748 752 * #4656: On Issue#show page, clicking on Ò€œAdd related issueҀ� should focus on the input
749 753 * #4896: Project identifier should be a limited field
750 754 * #5084: Filter all isssues by projects
751 755 * #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase
752 756 * #5591: 'calendar' action is used with 'issue' controller in issue/sidebar
753 757 * #5735: Traditional Chinese language file (to r3810)
754 758 * #5740: Swedish Translation for r3810
755 759 * #5785: pt-BR translation update
756 760 * #5898: Projects should be displayed as links in users/memberships
757 761 * #5910: Chinese translation to redmine-1.0.0
758 762 * #5912: Translation update for french locale
759 763 * #5962: Hungarian translation update to r3892
760 764 * #5971: Remove falsly applied chrome on revision links
761 765 * #5972: Updated Hebrew translation for 1.0.0
762 766 * #5982: Updated german translation
763 767 * #6008: Move admin_menu to Redmine::MenuManager
764 768 * #6012: RTL layout
765 769 * #6021: Spanish translation 1.0.0-RC
766 770 * #6025: nl translation updated for r3905
767 771 * #6030: Japanese Translation for r3907
768 772 * #6074: sr-CY.yml contains DOS-type newlines (\r\n)
769 773 * #6087: SERBIAN translation updated
770 774 * #6093: Updated italian translation
771 775 * #6142: Swedish Translation for r3940
772 776 * #6153: Move view_calendar and view_gantt to own modules
773 777 * #6169: Add issue status to issue tooltip
774 778 * Fixed #3834: Add a warning when not choosing a member role
775 779 * Fixed #3922: Bad english arround "Assigned to" text in journal entries
776 780 * Fixed #5158: Simplified Chinese language file zh.yml updated to r3608
777 781 * Fixed #5162: translation missing: zh-TW, field_time_entrie
778 782 * Fixed #5297: openid not validated correctly
779 783 * Fixed #5628: Wrong commit range in git log command
780 784 * Fixed #5760: Assigned_to and author filters in "Projects>View all issues" should be based on user's project visibility
781 785 * Fixed #5771: Problem when importing git repository
782 786 * Fixed #5775: ldap authentication in admin menu should have an icon
783 787 * Fixed #5811: deleting statuses doesnt delete workflow entries
784 788 * Fixed #5834: Emails with trailing spaces incorrectly detected as invalid
785 789 * Fixed #5846: ChangeChangesPathLengthLimit does not remove default for MySQL
786 790 * Fixed #5861: Vertical scrollbar always visible in Wiki "code" blocks in Chrome.
787 791 * Fixed #5883: correct label_project_latest Chinese translation
788 792 * Fixed #5892: Changing status from contextual menu opens the ticket instead
789 793 * Fixed #5904: Global gantt PDF and PNG should display project names
790 794 * Fixed #5925: parent task's priority edit should be disabled through shortcut menu in issues list page
791 795 * Fixed #5935: Add Another file to ticket doesn't work in IE Internet Explorer
792 796 * Fixed #5937: Harmonize french locale "zero" translation with other locales
793 797 * Fixed #5945: Forum message permalinks don't take pagination into account
794 798 * Fixed #5978: Debug code still remains
795 799 * Fixed #6009: When using "English (British)", the repository browser (svn) shows files over 1000 bytes as floating point (2.334355)
796 800 * Fixed #6045: Repository file Diff view sometimes shows more than selected file
797 801 * Fixed #6079: German Translation error in TimeEntryActivity
798 802 * Fixed #6100: User's profile should display all visible projects
799 803 * Fixed #6132: Allow Key based authentication in the Boards atom feed
800 804 * Fixed #6163: Bad CSS class for calendar project menu_item
801 805 * Fixed #6172: Browsing to a missing user's page shows the admin sidebar
802 806
803 807 == 2010-07-18 v1.0.0 (Release candidate)
804 808
805 809 * #443: Adds context menu to the roadmap issue lists
806 810 * #443: Subtasking
807 811 * #741: Description preview while editing an issue
808 812 * #1131: Add support for alternate (non-LDAP) authentication
809 813 * #1214: REST API for Issues
810 814 * #1223: File upload on wiki edit form
811 815 * #1755: add "blocked by" as a related issues option
812 816 * #2420: Fetching emails from an POP server
813 817 * #2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction).
814 818 * #2924: Make the right click menu more discoverable using a cursor property
815 819 * #2985: Make syntax highlighting pluggable
816 820 * #3201: Workflow Check/Uncheck All Rows/Columns
817 821 * #3359: Update CodeRay 0.9
818 822 * #3706: Allow assigned_to field configuration on Issue creation by email
819 823 * #3936: configurable list of models to include in search
820 824 * #4480: Create a link to the user profile from the administration interface
821 825 * #4482: Cache textile rendering
822 826 * #4572: Make it harder to ruin your database
823 827 * #4573: Move github gems to Gemcutter
824 828 * #4664: Add pagination to forum threads
825 829 * #4732: Make login case-insensitive also for PostgreSQL
826 830 * #4812: Create links to other projects
827 831 * #4819: Replace images with smushed ones for speed
828 832 * #4945: Allow custom fields attached to project to be searchable
829 833 * #5121: Fix issues list layout overflow
830 834 * #5169: Issue list view hook request
831 835 * #5208: Aibility to edit wiki sidebar
832 836 * #5281: Remove empty ul tags in the issue history
833 837 * #5291: Updated basque translations
834 838 * #5328: Automatically add "Repository" menu_item after repository creation
835 839 * #5415: Fewer SQL statements generated for watcher_recipients
836 840 * #5416: Exclude "fields_for" from overridden methods in TabularFormBuilder
837 841 * #5573: Allow issue assignment in email
838 842 * #5595: Allow start date and due dates to be set via incoming email
839 843 * #5752: The projects view (/projects) renders ul's wrong
840 844 * #5781: Allow to use more macros on the welcome page and project list
841 845 * Fixed #1288: Unable to past escaped wiki syntax in an issue description
842 846 * Fixed #1334: Wiki formatting character *_ and _*
843 847 * Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively
844 848 * Fixed #2473: Login and mail should not be case sensitive
845 849 * Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate
846 850 * Fixed #3089: Text formatting sometimes breaks when combined
847 851 * Fixed #3690: Status change info duplicates on the issue screen
848 852 * Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue
849 853 * Fixed #3764: ApplicationHelperTest fails with JRuby
850 854 * Fixed #4265: Unclosed code tags in issue descriptions affects main UI
851 855 * Fixed #4745: Bug in index.xml.builder (issues)
852 856 * Fixed #4852: changing user/roles of project member not possible without javascript
853 857 * Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday
854 858 * Fixed #4883: Bottom "contextual" placement in issue with associated changeset
855 859 * Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP
856 860 * Fixed #4935: Navigation to the Master Timesheet page (time_entries)
857 861 * Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved
858 862 * Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html
859 863 * Fixed #5104: Description of document not wikified on documents index
860 864 * Fixed #5108: Issue linking fails inside of []s
861 865 * Fixed #5199: diff code coloring using coderay
862 866 * Fixed #5233: Add a hook to the issue report (Summary) view
863 867 * Fixed #5265: timetracking: subtasks time is added to the main task
864 868 * Fixed #5343: acts_as_event Doesn't Accept Outside URLs
865 869 * Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in <thead>
866 870 * Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb
867 871 * Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting
868 872 * Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets.
869 873 * Fixed #5589: "with subproject" malfunction
870 874 * Fixed #5676: Search for Numeric Value
871 875 * Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml
872 876 * Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters
873 877 * Fixed #5700: TimelogController#destroy assumes success
874 878 * Fixed #5751: developer role is mispelled
875 879 * Fixed #5769: Popup Calendar doesn't Advance in Chrome
876 880 * Fixed #5771: Problem when importing git repository
877 881 * Fixed #5823: Error in comments in plugin.rb
878 882
879 883
880 884 == 2010-07-07 v0.9.6
881 885
882 886 * Fixed: Redmine.pm access by unauthorized users
883 887
884 888 == 2010-06-24 v0.9.5
885 889
886 890 * Linkify folder names on revision view
887 891 * "fiters" and "options" should be hidden in print view via css
888 892 * Fixed: NoMethodError when no issue params are submitted
889 893 * Fixed: projects.atom with required authentication
890 894 * Fixed: External links not correctly displayed in Wiki TOC
891 895 * Fixed: Member role forms in project settings are not hidden after member added
892 896 * Fixed: pre can't be inside p
893 897 * Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT
894 898 * Fixed: mail handler fails when the from address is empty
895 899
896 900
897 901 == 2010-05-01 v0.9.4
898 902
899 903 * Filters collapsed by default on issues index page for a saved query
900 904 * Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
901 905 * Fixed: remove "main-menu" div when the menu is empty
902 906 * Fixed: Code syntax highlighting not working in Document page
903 907 * Fixed: Git blame/annotate fails on moved files
904 908 * Fixed: Failing test in test_show_atom
905 909 * Fixed: Migrate from trac - not displayed Wikis
906 910 * Fixed: Email notifications on file upload sent to empty recipient list
907 911 * Fixed: Migrating from trac is not possible, fails to allocate memory
908 912 * Fixed: Lost password no longer flashes a confirmation message
909 913 * Fixed: Crash while deleting in-use enumeration
910 914 * Fixed: Hard coded English string at the selection of issue watchers
911 915 * Fixed: Bazaar v2.1.0 changed behaviour
912 916 * Fixed: Roadmap display can raise an exception if no trackers are selected
913 917 * Fixed: Gravatar breaks layout of "logged in" page
914 918 * Fixed: Reposman.rb on Windows
915 919 * Fixed: Possible error 500 while moving an issue to another project with SQLite
916 920 * Fixed: backslashes in issue description/note should be escaped when quoted
917 921 * Fixed: Long text in <pre> disrupts Associated revisions
918 922 * Fixed: Links to missing wiki pages not red on project overview page
919 923 * Fixed: Cannot delete a project with subprojects that shares versions
920 924 * Fixed: Update of Subversion changesets broken under Solaris
921 925 * Fixed: "Move issues" permission not working for Non member
922 926 * Fixed: Sidebar overlap on Users tab of Group editor
923 927 * Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
924 928 * Fixed: Report shows sub-projects for non-members
925 929 * Fixed: 500 internal error when browsing any Redmine page in epiphany
926 930 * Fixed: Watchers selection lost when issue creation fails
927 931 * Fixed: When copying projects, redmine should not generate an email to people who created issues
928 932 * Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
929 933 * Fixed: Plugin generators should display help if no parameter is given
930 934
931 935
932 936 == 2010-02-28 v0.9.3
933 937
934 938 * Adds filter for system shared versions on the cross project issue list
935 939 * Makes project identifiers searchable
936 940 * Remove invalid utf8 sequences from commit comments and author name
937 941 * Fixed: Wrong link when "http" not included in project "Homepage" link
938 942 * Fixed: Escaping in html email templates
939 943 * Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
940 944 * Fixed: Deselecting textile text formatting causes interning empty string errors
941 945 * Fixed: error with postgres when entering a non-numeric id for an issue relation
942 946 * Fixed: div.task incorrectly wrapping on Gantt Chart
943 947 * Fixed: Project copy loses wiki pages hierarchy
944 948 * Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
945 949 * Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
946 950 * Fixed: Duplicated project name for subproject version on gantt chart
947 951 * Fixed: roadmap shows subprojects issues even if subprojects is unchecked
948 952 * Fixed: IndexError if all the :last menu items are deleted from a menu
949 953 * Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
950 954
951 955
952 956 == 2010-02-07 v0.9.2
953 957
954 958 * Fixed: Sub-project repository commits not displayed on parent project issues
955 959 * Fixed: Potential security leak on my page calendar
956 960 * Fixed: Project tree structure is broken by deleting the project with the subproject
957 961 * Fixed: Error message shown duplicated when creating a new group
958 962 * Fixed: Firefox cuts off large pages
959 963 * Fixed: Invalid format parameter returns a DoubleRenderError on issues index
960 964 * Fixed: Unnecessary Quote button on locked forum message
961 965 * Fixed: Error raised when trying to view the gantt or calendar with a grouped query
962 966 * Fixed: PDF support for Korean locale
963 967 * Fixed: Deprecation warning in extra/svn/reposman.rb
964 968
965 969
966 970 == 2010-01-30 v0.9.1
967 971
968 972 * Vertical alignment for inline images in formatted text set to 'middle'
969 973 * Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
970 974 * Fixed: copyright year in footer set to 2010
971 975 * Fixed: Trac migration script may not output query lines
972 976 * Fixed: Email notifications may affect language of notice messages on the UI
973 977 * Fixed: Can not search for 2 letters word
974 978 * Fixed: Attachments get saved on issue update even if validation fails
975 979 * Fixed: Tab's 'border-bottom' not absent when selected
976 980 * Fixed: Issue summary tables that list by user are not sorted
977 981 * Fixed: Issue pdf export fails if target version is set
978 982 * Fixed: Issue list export to PDF breaks when issues are sorted by a custom field
979 983 * Fixed: SQL error when adding a group
980 984 * Fixes: Min password length during password reset always displays as 4 chars
981 985
982 986
983 987 == 2010-01-09 v0.9.0 (Release candidate)
984 988
985 989 * Unlimited subproject nesting
986 990 * Multiple roles per user per project
987 991 * User groups
988 992 * Inheritence of versions
989 993 * OpenID login
990 994 * "Watched by me" issue filter
991 995 * Project copy
992 996 * Project creation by non admin users
993 997 * Accept emails from anyone on a private project
994 998 * Add email notification on Wiki changes
995 999 * Make issue description non-required field
996 1000 * Custom fields for Versions
997 1001 * Being able to sort the issue list by custom fields
998 1002 * Ability to close versions
999 1003 * User display/editing of custom fields attached to their user profile
1000 1004 * Add "follows" issue relation
1001 1005 * Copy workflows between trackers and roles
1002 1006 * Defaults enabled modules list for project creation
1003 1007 * Weighted version completion percentage on the roadmap
1004 1008 * Autocreate user account when user submits email that creates new issue
1005 1009 * CSS class on overdue issues on the issue list
1006 1010 * Enable tracker update on issue edit form
1007 1011 * Remove issue watchers
1008 1012 * Ability to move threads between project forums
1009 1013 * Changed custom field "Possible values" to a textarea
1010 1014 * Adds projects association on tracker form
1011 1015 * Set session store to cookie store by default
1012 1016 * Set a default wiki page on project creation
1013 1017 * Roadmap for main project should see Roadmaps for sub projects
1014 1018 * Ticket grouping on the issue list
1015 1019 * Hierarchical Project links in the page header
1016 1020 * Allow My Page blocks to be added to from a plugin
1017 1021 * Sort issues by multiple columns
1018 1022 * Filters of saved query are now visible and be adjusted without editing the query
1019 1023 * Saving "sort order" in custom queries
1020 1024 * Url to fetch changesets for a repository
1021 1025 * Managers able to create subprojects
1022 1026 * Issue Totals on My Page Modules
1023 1027 * Convert Enumerations to single table inheritance (STI)
1024 1028 * Allow custom my_page blocks to define drop-down names
1025 1029 * "View Issues" user permission added
1026 1030 * Ask user what to do with child pages when deleting a parent wiki page
1027 1031 * Contextual quick search
1028 1032 * Allow resending of password by email
1029 1033 * Change reply subject to be a link to the reply itself
1030 1034 * Include Logged Time as part of the project's Activity history
1031 1035 * REST API for authentication
1032 1036 * Browse through Git branches
1033 1037 * Setup Object Daddy to replace test fixtures
1034 1038 * Setup shoulda to make it easier to test
1035 1039 * Custom fields and overrides on Enumerations
1036 1040 * Add or remove columns from the issue list
1037 1041 * Ability to add new version from issues screen
1038 1042 * Setting to choose which day calendars start
1039 1043 * Asynchronous email delivery method
1040 1044 * RESTful URLs for (almost) everything
1041 1045 * Include issue status in search results and activity pages
1042 1046 * Add email to admin user search filter
1043 1047 * Proper content type for plain text mails
1044 1048 * Default value of project jump box
1045 1049 * Tree based menus
1046 1050 * Ability to use issue status to update percent done
1047 1051 * Second set of issue "Action Links" at the bottom of an issue page
1048 1052 * Proper exist status code for rdm-mailhandler.rb
1049 1053 * Remove incoming email body via a delimiter
1050 1054 * Fixed: Custom querry 'Export to PDF' ignores field selection
1051 1055 * Fixed: Related e-mail notifications aren't threaded
1052 1056 * Fixed: No warning when the creation of a categories from the issue form fails
1053 1057 * Fixed: Actually block issues from closing when relation 'blocked by' isn't closed
1054 1058 * Fixed: Include both first and last name when sorting by users
1055 1059 * Fixed: Table cell with multiple line text
1056 1060 * Fixed: Project overview page shows disabled trackers
1057 1061 * Fixed: Cross project issue relations and user permissions
1058 1062 * Fixed: My page shows tickets the user doesn't have access to
1059 1063 * Fixed: TOC does not parse wiki page reference links with description
1060 1064 * Fixed: Target version-list on bulk edit form is incorrectly sorted
1061 1065 * Fixed: Cannot modify/delete project named "Documents"
1062 1066 * Fixed: Email address in brackets breaks html
1063 1067 * Fixed: Timelog detail loose issue filter passing to report tab
1064 1068 * Fixed: Inform about custom field's name maximum length
1065 1069 * Fixed: Activity page and Atom feed links contain project id instead of identifier
1066 1070 * Fixed: no Atom key for forums with only 1 forum
1067 1071 * Fixed: When reading RSS feed in MS Outlook, the inline links are broken.
1068 1072 * Fixed: Sometimes new posts don't show up in the topic list of a forum.
1069 1073 * Fixed: The all/active filter selection in the project view does not stick.
1070 1074 * Fixed: Login box has Different width
1071 1075 * Fixed: User removed from project - still getting project update emails
1072 1076 * Fixed: Project with the identifier of 'new' cannot be viewed
1073 1077 * Fixed: Artefacts in search view (Cyrillic)
1074 1078 * Fixed: Allow [#id] as subject to reply by email
1075 1079 * Fixed: Wrong language used when closing an issue via a commit message
1076 1080 * Fixed: email handler drops emails for new issues with no subject
1077 1081 * Fixed: Calendar misspelled under Roles/Permissions
1078 1082 * Fixed: Emails from no-reply redmine's address hell cycle
1079 1083 * Fixed: child_pages macro fails on wiki page history
1080 1084 * Fixed: Pre-filled time tracking date ignores timezone
1081 1085 * Fixed: Links on locked users lead to 404 page
1082 1086 * Fixed: Page changes in issue-list when using context menu
1083 1087 * Fixed: diff parser removes lines starting with multiple dashes
1084 1088 * Fixed: Quoting in forums resets message subject
1085 1089 * Fixed: Editing issue comment removes quote link
1086 1090 * Fixed: Redmine.pm ignore browse_repository permission
1087 1091 * Fixed: text formatting breaks on [msg1][msg2]
1088 1092 * Fixed: Spent Time Default Value of 0.0
1089 1093 * Fixed: Wiki pages in search results are referenced by project number, not by project identifier.
1090 1094 * Fixed: When logging in via an autologin cookie the user's last_login_on should be updated
1091 1095 * Fixed: 50k users cause problems in project->settings->members screen
1092 1096 * Fixed: Document timestamp needs to show updated timestamps
1093 1097 * Fixed: Users getting notifications for issues they are no longer allowed to view
1094 1098 * Fixed: issue summary counts should link to the issue list without subprojects
1095 1099 * Fixed: 'Delete' link on LDAP list has no effect
1096 1100
1097 1101
1098 1102 == 2009-11-15 v0.8.7
1099 1103
1100 1104 * Fixed: Hide paragraph terminator at the end of headings on html export
1101 1105 * Fixed: pre tags containing "<pre*"
1102 1106 * Fixed: First date of the date range not included in the time report with SQLite
1103 1107 * Fixed: Password field not styled correctly on alternative stylesheet
1104 1108 * Fixed: Error when sumbitting a POST request that requires a login
1105 1109 * Fixed: CSRF vulnerabilities
1106 1110
1107 1111
1108 1112 == 2009-11-04 v0.8.6
1109 1113
1110 1114 * Change links to closed issues to be a grey color
1111 1115 * Change subversion adapter to not cache authentication and run non interactively
1112 1116 * Fixed: Custom Values with a nil value cause HTTP error 500
1113 1117 * Fixed: Failure to convert HTML entities when editing an Issue reply
1114 1118 * Fixed: Error trying to show repository when there are no comments in a changeset
1115 1119 * Fixed: account/show/:user_id should not be accessible for other users not in your projects
1116 1120 * Fixed: XSS vulnerabilities
1117 1121 * Fixed: IssuesController#destroy should accept POST only
1118 1122 * Fixed: Inline images in wiki headings
1119 1123
1120 1124
1121 1125 == 2009-09-13 v0.8.5
1122 1126
1123 1127 * Incoming mail handler : Allow spaces between keywords and colon
1124 1128 * Do not require a non-word character after a comma in Redmine links
1125 1129 * Include issue hyperlinks in reminder emails
1126 1130 * Prevent nil error when retrieving svn version
1127 1131 * Various plugin hooks added
1128 1132 * Add plugins information to script/about
1129 1133 * Fixed: 500 Internal Server Error is raised if add an empty comment to the news
1130 1134 * Fixed: Atom links for wiki pages are not correct
1131 1135 * Fixed: Atom feeds leak email address
1132 1136 * Fixed: Case sensitivity in Issue filtering
1133 1137 * Fixed: When reading RSS feed, the inline-embedded images are not properly shown
1134 1138
1135 1139
1136 1140 == 2009-05-17 v0.8.4
1137 1141
1138 1142 * Allow textile mailto links
1139 1143 * Fixed: memory consumption when uploading file
1140 1144 * Fixed: Mercurial integration doesn't work if Redmine is installed in folder path containing space
1141 1145 * Fixed: an error is raised when no tab is available on project settings
1142 1146 * Fixed: insert image macro corrupts urls with excalamation marks
1143 1147 * Fixed: error on cross-project gantt PNG export
1144 1148 * Fixed: self and alternate links in atom feeds do not respect Atom specs
1145 1149 * Fixed: accept any svn tunnel scheme in repository URL
1146 1150 * Fixed: issues/show should accept user's rss key
1147 1151 * Fixed: consistency of custom fields display on the issue detail view
1148 1152 * Fixed: wiki comments length validation is missing
1149 1153 * Fixed: weak autologin token generation algorithm causes duplicate tokens
1150 1154
1151 1155
1152 1156 == 2009-04-05 v0.8.3
1153 1157
1154 1158 * Separate project field and subject in cross-project issue view
1155 1159 * Ability to set language for redmine:load_default_data task using REDMINE_LANG environment variable
1156 1160 * Rescue Redmine::DefaultData::DataAlreadyLoaded in redmine:load_default_data task
1157 1161 * CSS classes to highlight own and assigned issues
1158 1162 * Hide "New file" link on wiki pages from printing
1159 1163 * Flush buffer when asking for language in redmine:load_default_data task
1160 1164 * Minimum project identifier length set to 1
1161 1165 * Include headers so that emails don't trigger vacation auto-responders
1162 1166 * Fixed: Time entries csv export links for all projects are malformed
1163 1167 * Fixed: Files without Version aren't visible in the Activity page
1164 1168 * Fixed: Commit logs are centered in the repo browser
1165 1169 * Fixed: News summary field content is not searchable
1166 1170 * Fixed: Journal#save has a wrong signature
1167 1171 * Fixed: Email footer signature convention
1168 1172 * Fixed: Timelog report do not show time for non-versioned issues
1169 1173
1170 1174
1171 1175 == 2009-03-07 v0.8.2
1172 1176
1173 1177 * Send an email to the user when an administrator activates a registered user
1174 1178 * Strip keywords from received email body
1175 1179 * Footer updated to 2009
1176 1180 * Show RSS-link even when no issues is found
1177 1181 * One click filter action in activity view
1178 1182 * Clickable/linkable line #'s while browsing the repo or viewing a file
1179 1183 * Links to versions on files list
1180 1184 * Added request and controller objects to the hooks by default
1181 1185 * Fixed: exporting an issue with attachments to PDF raises an error
1182 1186 * Fixed: "too few arguments" error may occur on activerecord error translation
1183 1187 * Fixed: "Default columns Displayed on the Issues list" setting is not easy to read
1184 1188 * Fixed: visited links to closed tickets are not striked through with IE6
1185 1189 * Fixed: MailHandler#plain_text_body returns nil if there was nothing to strip
1186 1190 * Fixed: MailHandler raises an error when processing an email without From header
1187 1191
1188 1192
1189 1193 == 2009-02-15 v0.8.1
1190 1194
1191 1195 * Select watchers on new issue form
1192 1196 * Issue description is no longer a required field
1193 1197 * Files module: ability to add files without version
1194 1198 * Jump to the current tab when using the project quick-jump combo
1195 1199 * Display a warning if some attachments were not saved
1196 1200 * Import custom fields values from emails on issue creation
1197 1201 * Show view/annotate/download links on entry and annotate views
1198 1202 * Admin Info Screen: Display if plugin assets directory is writable
1199 1203 * Adds a 'Create and continue' button on the new issue form
1200 1204 * IMAP: add options to move received emails
1201 1205 * Do not show Category field when categories are not defined
1202 1206 * Lower the project identifier limit to a minimum of two characters
1203 1207 * Add "closed" html class to closed entries in issue list
1204 1208 * Fixed: broken redirect URL on login failure
1205 1209 * Fixed: Deleted files are shown when using Darcs
1206 1210 * Fixed: Darcs adapter works on Win32 only
1207 1211 * Fixed: syntax highlight doesn't appear in new ticket preview
1208 1212 * Fixed: email notification for changes I make still occurs when running Repository.fetch_changesets
1209 1213 * Fixed: no error is raised when entering invalid hours on the issue update form
1210 1214 * Fixed: Details time log report CSV export doesn't honour date format from settings
1211 1215 * Fixed: invalid css classes on issue details
1212 1216 * Fixed: Trac importer creates duplicate custom values
1213 1217 * Fixed: inline attached image should not match partial filename
1214 1218
1215 1219
1216 1220 == 2008-12-30 v0.8.0
1217 1221
1218 1222 * Setting added in order to limit the number of diff lines that should be displayed
1219 1223 * Makes logged-in username in topbar linking to
1220 1224 * Mail handler: strip tags when receiving a html-only email
1221 1225 * Mail handler: add watchers before sending notification
1222 1226 * Adds a css class (overdue) to overdue issues on issue lists and detail views
1223 1227 * Fixed: project activity truncated after viewing user's activity
1224 1228 * Fixed: email address entered for password recovery shouldn't be case-sensitive
1225 1229 * Fixed: default flag removed when editing a default enumeration
1226 1230 * Fixed: default category ignored when adding a document
1227 1231 * Fixed: error on repository user mapping when a repository username is blank
1228 1232 * Fixed: Firefox cuts off large diffs
1229 1233 * Fixed: CVS browser should not show dead revisions (deleted files)
1230 1234 * Fixed: escape double-quotes in image titles
1231 1235 * Fixed: escape textarea content when editing a issue note
1232 1236 * Fixed: JS error on context menu with IE
1233 1237 * Fixed: bold syntax around single character in series doesn't work
1234 1238 * Fixed several XSS vulnerabilities
1235 1239 * Fixed a SQL injection vulnerability
1236 1240
1237 1241
1238 1242 == 2008-12-07 v0.8.0-rc1
1239 1243
1240 1244 * Wiki page protection
1241 1245 * Wiki page hierarchy. Parent page can be assigned on the Rename screen
1242 1246 * Adds support for issue creation via email
1243 1247 * Adds support for free ticket filtering and custom queries on Gantt chart and calendar
1244 1248 * Cross-project search
1245 1249 * Ability to search a project and its subprojects
1246 1250 * Ability to search the projects the user belongs to
1247 1251 * Adds custom fields on time entries
1248 1252 * Adds boolean and list custom fields for time entries as criteria on time report
1249 1253 * Cross-project time reports
1250 1254 * Display latest user's activity on account/show view
1251 1255 * Show last connexion time on user's page
1252 1256 * Obfuscates email address on user's account page using javascript
1253 1257 * wiki TOC rendered as an unordered list
1254 1258 * Adds the ability to search for a user on the administration users list
1255 1259 * Adds the ability to search for a project name or identifier on the administration projects list
1256 1260 * Redirect user to the previous page after logging in
1257 1261 * Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
1258 1262 * Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
1259 1263 * Adds permissions to let users edit and/or delete their messages
1260 1264 * Link to activity view when displaying dates
1261 1265 * Hide Redmine version in atom feeds and pdf properties
1262 1266 * Maps repository users to Redmine users. Users with same username or email are automatically mapped. Mapping can be manually adjusted in repository settings. Multiple usernames can be mapped to the same Redmine user.
1263 1267 * Sort users by their display names so that user dropdown lists are sorted alphabetically
1264 1268 * Adds estimated hours to issue filters
1265 1269 * Switch order of current and previous revisions in side-by-side diff
1266 1270 * Render the commit changes list as a tree
1267 1271 * Adds watch/unwatch functionality at forum topic level
1268 1272 * When moving an issue to another project, reassign it to the category with same name if any
1269 1273 * Adds child_pages macro for wiki pages
1270 1274 * Use GET instead of POST on roadmap (#718), gantt and calendar forms
1271 1275 * Search engine: display total results count and count by result type
1272 1276 * Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
1273 1277 * Adds icons on search results
1274 1278 * Adds 'Edit' link on account/show for admin users
1275 1279 * Adds Lock/Unlock/Activate link on user edit screen
1276 1280 * Adds user count in status drop down on admin user list
1277 1281 * Adds multi-levels blockquotes support by using > at the beginning of lines
1278 1282 * Adds a Reply link to each issue note
1279 1283 * Adds plain text only option for mail notifications
1280 1284 * Gravatar support for issue detail, user grid, and activity stream (disabled by default)
1281 1285 * Adds 'Delete wiki pages attachments' permission
1282 1286 * Show the most recent file when displaying an inline image
1283 1287 * Makes permission screens localized
1284 1288 * AuthSource list: display associated users count and disable 'Delete' buton if any
1285 1289 * Make the 'duplicates of' relation asymmetric
1286 1290 * Adds username to the password reminder email
1287 1291 * Adds links to forum messages using message#id syntax
1288 1292 * Allow same name for custom fields on different object types
1289 1293 * One-click bulk edition using the issue list context menu within the same project
1290 1294 * Adds support for commit logs reencoding to UTF-8 before insertion in the database. Source encoding of commit logs can be selected in Application settings -> Repositories.
1291 1295 * Adds checkboxes toggle links on permissions report
1292 1296 * Adds Trac-Like anchors on wiki headings
1293 1297 * Adds support for wiki links with anchor
1294 1298 * Adds category to the issue context menu
1295 1299 * Adds a workflow overview screen
1296 1300 * Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
1297 1301 * Dots allowed in custom field name
1298 1302 * Adds posts quoting functionality
1299 1303 * Adds an option to generate sequential project identifiers
1300 1304 * Adds mailto link on the user administration list
1301 1305 * Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
1302 1306 * Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
1303 1307 * Change projects homepage limit to 255 chars
1304 1308 * Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes
1305 1309 * Adds "please select" to activity select box if no activity is set as default
1306 1310 * Do not silently ignore timelog validation failure on issue edit
1307 1311 * Adds a rake task to send reminder emails
1308 1312 * Allow empty cells in wiki tables
1309 1313 * Makes wiki text formatter pluggable
1310 1314 * Adds back textile acronyms support
1311 1315 * Remove pre tag attributes
1312 1316 * Plugin hooks
1313 1317 * Pluggable admin menu
1314 1318 * Plugins can provide activity content
1315 1319 * Moves plugin list to its own administration menu item
1316 1320 * Adds url and author_url plugin attributes
1317 1321 * Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
1318 1322 * Adds atom feed on time entries details
1319 1323 * Adds project name to issues feed title
1320 1324 * Adds a css class on menu items in order to apply item specific styles (eg. icons)
1321 1325 * Adds a Redmine plugin generators
1322 1326 * Adds timelog link to the issue context menu
1323 1327 * Adds links to the user page on various views
1324 1328 * Turkish translation by Ismail Sezen
1325 1329 * Catalan translation
1326 1330 * Vietnamese translation
1327 1331 * Slovak translation
1328 1332 * Better naming of activity feed if only one kind of event is displayed
1329 1333 * Enable syntax highlight on issues, messages and news
1330 1334 * Add target version to the issue list context menu
1331 1335 * Hide 'Target version' filter if no version is defined
1332 1336 * Add filters on cross-project issue list for custom fields marked as 'For all projects'
1333 1337 * Turn ftp urls into links
1334 1338 * Hiding the View Differences button when a wiki page's history only has one version
1335 1339 * Messages on a Board can now be sorted by the number of replies
1336 1340 * Adds a class ('me') to events of the activity view created by current user
1337 1341 * Strip pre/code tags content from activity view events
1338 1342 * Display issue notes in the activity view
1339 1343 * Adds links to changesets atom feed on repository browser
1340 1344 * Track project and tracker changes in issue history
1341 1345 * Adds anchor to atom feed messages links
1342 1346 * Adds a key in lang files to set the decimal separator (point or comma) in csv exports
1343 1347 * Makes importer work with Trac 0.8.x
1344 1348 * Upgraded to Prototype 1.6.0.1
1345 1349 * File viewer for attached text files
1346 1350 * Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
1347 1351 * Removed inconsistent revision numbers on diff view
1348 1352 * CVS: add support for modules names with spaces
1349 1353 * Log the user in after registration if account activation is not needed
1350 1354 * Mercurial adapter improvements
1351 1355 * Trac importer: read session_attribute table to find user's email and real name
1352 1356 * Ability to disable unused SCM adapters in application settings
1353 1357 * Adds Filesystem adapter
1354 1358 * Clear changesets and changes with raw sql when deleting a repository for performance
1355 1359 * Redmine.pm now uses the 'commit access' permission defined in Redmine
1356 1360 * Reposman can create any type of scm (--scm option)
1357 1361 * Reposman creates a repository if the 'repository' module is enabled at project level only
1358 1362 * Display svn properties in the browser, svn >= 1.5.0 only
1359 1363 * Reduces memory usage when importing large git repositories
1360 1364 * Wider SVG graphs in repository stats
1361 1365 * SubversionAdapter#entries performance improvement
1362 1366 * SCM browser: ability to download raw unified diffs
1363 1367 * More detailed error message in log when scm command fails
1364 1368 * Adds support for file viewing with Darcs 2.0+
1365 1369 * Check that git changeset is not in the database before creating it
1366 1370 * Unified diff viewer for attached files with .patch or .diff extension
1367 1371 * File size display with Bazaar repositories
1368 1372 * Git adapter: use commit time instead of author time
1369 1373 * Prettier url for changesets
1370 1374 * Makes changes link to entries on the revision view
1371 1375 * Adds a field on the repository view to browse at specific revision
1372 1376 * Adds new projects atom feed
1373 1377 * Added rake tasks to generate rcov code coverage reports
1374 1378 * Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
1375 1379 * Show the project hierarchy in the drop down list for new membership on user administration screen
1376 1380 * Split user edit screen into tabs
1377 1381 * Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
1378 1382 * Fixed: Roadmap crashes when a version has a due date > 2037
1379 1383 * Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
1380 1384 * Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
1381 1385 * Fixed: logtime entry duplicated when edited from parent project
1382 1386 * Fixed: wrong digest for text files under Windows
1383 1387 * Fixed: associated revisions are displayed in wrong order on issue view
1384 1388 * Fixed: Git Adapter date parsing ignores timezone
1385 1389 * Fixed: Printing long roadmap doesn't split across pages
1386 1390 * Fixes custom fields display order at several places
1387 1391 * Fixed: urls containing @ are parsed as email adress by the wiki formatter
1388 1392 * Fixed date filters accuracy with SQLite
1389 1393 * Fixed: tokens not escaped in highlight_tokens regexp
1390 1394 * Fixed Bazaar shared repository browsing
1391 1395 * Fixes platform determination under JRuby
1392 1396 * Fixed: Estimated time in issue's journal should be rounded to two decimals
1393 1397 * Fixed: 'search titles only' box ignored after one search is done on titles only
1394 1398 * Fixed: non-ASCII subversion path can't be displayed
1395 1399 * Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
1396 1400 * Fixed: document listing shows on "my page" when viewing documents is disabled for the role
1397 1401 * Fixed: Latest news appear on the homepage for projects with the News module disabled
1398 1402 * Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
1399 1403 * Fixed: the default status is lost when reordering issue statuses
1400 1404 * Fixes error with Postgresql and non-UTF8 commit logs
1401 1405 * Fixed: textile footnotes no longer work
1402 1406 * Fixed: http links containing parentheses fail to reder correctly
1403 1407 * Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
1404 1408
1405 1409
1406 1410 == 2008-07-06 v0.7.3
1407 1411
1408 1412 * Allow dot in firstnames and lastnames
1409 1413 * Add project name to cross-project Atom feeds
1410 1414 * Encoding set to utf8 in example database.yml
1411 1415 * HTML titles on forums related views
1412 1416 * Fixed: various XSS vulnerabilities
1413 1417 * Fixed: Entourage (and some old client) fails to correctly render notification styles
1414 1418 * Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
1415 1419 * Fixed: wrong relative paths to images in wiki_syntax.html
1416 1420
1417 1421
1418 1422 == 2008-06-15 v0.7.2
1419 1423
1420 1424 * "New Project" link on Projects page
1421 1425 * Links to repository directories on the repo browser
1422 1426 * Move status to front in Activity View
1423 1427 * Remove edit step from Status context menu
1424 1428 * Fixed: No way to do textile horizontal rule
1425 1429 * Fixed: Repository: View differences doesn't work
1426 1430 * Fixed: attachement's name maybe invalid.
1427 1431 * Fixed: Error when creating a new issue
1428 1432 * Fixed: NoMethodError on @available_filters.has_key?
1429 1433 * Fixed: Check All / Uncheck All in Email Settings
1430 1434 * Fixed: "View differences" of one file at /repositories/revision/ fails
1431 1435 * Fixed: Column width in "my page"
1432 1436 * Fixed: private subprojects are listed on Issues view
1433 1437 * Fixed: Textile: bold, italics, underline, etc... not working after parentheses
1434 1438 * Fixed: Update issue form: comment field from log time end out of screen
1435 1439 * Fixed: Editing role: "issue can be assigned to this role" out of box
1436 1440 * Fixed: Unable use angular braces after include word
1437 1441 * Fixed: Using '*' as keyword for repository referencing keywords doesn't work
1438 1442 * Fixed: Subversion repository "View differences" on each file rise ERROR
1439 1443 * Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
1440 1444 * Fixed: It is possible to lock out the last admin account
1441 1445 * Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
1442 1446 * Fixed: Issue number display clipped on 'my issues'
1443 1447 * Fixed: Roadmap version list links not carrying state
1444 1448 * Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
1445 1449 * Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
1446 1450 * Fixed: browser's language subcodes ignored
1447 1451 * Fixed: Error on project selection with numeric (only) identifier.
1448 1452 * Fixed: Link to PDF doesn't work after creating new issue
1449 1453 * Fixed: "Replies" should not be shown on forum threads that are locked
1450 1454 * Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
1451 1455 * Fixed: http links containing hashes don't display correct
1452 1456 * Fixed: Allow ampersands in Enumeration names
1453 1457 * Fixed: Atom link on saved query does not include query_id
1454 1458 * Fixed: Logtime info lost when there's an error updating an issue
1455 1459 * Fixed: TOC does not parse colorization markups
1456 1460 * Fixed: CVS: add support for modules names with spaces
1457 1461 * Fixed: Bad rendering on projects/add
1458 1462 * Fixed: exception when viewing differences on cvs
1459 1463 * Fixed: export issue to pdf will messup when use Chinese language
1460 1464 * Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
1461 1465 * Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
1462 1466 * Fixed: Importing from trac : some wiki links are messed
1463 1467 * Fixed: Incorrect weekend definition in Hebrew calendar locale
1464 1468 * Fixed: Atom feeds don't provide author section for repository revisions
1465 1469 * Fixed: In Activity views, changesets titles can be multiline while they should not
1466 1470 * Fixed: Ignore unreadable subversion directories (read disabled using authz)
1467 1471 * Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
1468 1472 * Fixed: Close statement handler in Redmine.pm
1469 1473
1470 1474
1471 1475 == 2008-05-04 v0.7.1
1472 1476
1473 1477 * Thai translation added (Gampol Thitinilnithi)
1474 1478 * Translations updates
1475 1479 * Escape HTML comment tags
1476 1480 * Prevent "can't convert nil into String" error when :sort_order param is not present
1477 1481 * Fixed: Updating tickets add a time log with zero hours
1478 1482 * Fixed: private subprojects names are revealed on the project overview
1479 1483 * Fixed: Search for target version of "none" fails with postgres 8.3
1480 1484 * Fixed: Home, Logout, Login links shouldn't be absolute links
1481 1485 * Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
1482 1486 * Fixed: error when using upcase language name in coderay
1483 1487 * Fixed: error on Trac import when :due attribute is nil
1484 1488
1485 1489
1486 1490 == 2008-04-28 v0.7.0
1487 1491
1488 1492 * Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present
1489 1493 * Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list.
1490 1494 * Add predefined date ranges to the time report
1491 1495 * Time report can be done at issue level
1492 1496 * Various timelog report enhancements
1493 1497 * Accept the following formats for "hours" field: 1h, 1 h, 1 hour, 2 hours, 30m, 30min, 1h30, 1h30m, 1:30
1494 1498 * Display the context menu above and/or to the left of the click if needed
1495 1499 * Make the admin project files list sortable
1496 1500 * Mercurial: display working directory files sizes unless browsing a specific revision
1497 1501 * Preserve status filter and page number when using lock/unlock/activate links on the users list
1498 1502 * Redmine.pm support for LDAP authentication
1499 1503 * Better error message and AR errors in log for failed LDAP on-the-fly user creation
1500 1504 * Redirected user to where he is coming from after logging hours
1501 1505 * Warn user that subprojects are also deleted when deleting a project
1502 1506 * Include subprojects versions on calendar and gantt
1503 1507 * Notify project members when a message is posted if they want to receive notifications
1504 1508 * Fixed: Feed content limit setting has no effect
1505 1509 * Fixed: Priorities not ordered when displayed as a filter in issue list
1506 1510 * Fixed: can not display attached images inline in message replies
1507 1511 * Fixed: Boards are not deleted when project is deleted
1508 1512 * Fixed: trying to preview a new issue raises an exception with postgresql
1509 1513 * Fixed: single file 'View difference' links do not work because of duplicate slashes in url
1510 1514 * Fixed: inline image not displayed when including a wiki page
1511 1515 * Fixed: CVS duplicate key violation
1512 1516 * Fixed: ActiveRecord::StaleObjectError exception on closing a set of circular duplicate issues
1513 1517 * Fixed: custom field filters behaviour
1514 1518 * Fixed: Postgresql 8.3 compatibility
1515 1519 * Fixed: Links to repository directories don't work
1516 1520
1517 1521
1518 1522 == 2008-03-29 v0.7.0-rc1
1519 1523
1520 1524 * Overall activity view and feed added, link is available on the project list
1521 1525 * Git VCS support
1522 1526 * Rails 2.0 sessions cookie store compatibility
1523 1527 * Use project identifiers in urls instead of ids
1524 1528 * Default configuration data can now be loaded from the administration screen
1525 1529 * Administration settings screen split to tabs (email notifications options moved to 'Settings')
1526 1530 * Project description is now unlimited and optional
1527 1531 * Wiki annotate view
1528 1532 * Escape HTML tag in textile content
1529 1533 * Add Redmine links to documents, versions, attachments and repository files
1530 1534 * New setting to specify how many objects should be displayed on paginated lists. There are 2 ways to select a set of issues on the issue list:
1531 1535 * by using checkbox and/or the little pencil that will select/unselect all issues
1532 1536 * by clicking on the rows (but not on the links), Ctrl and Shift keys can be used to select multiple issues
1533 1537 * Context menu disabled on links so that the default context menu of the browser is displayed when right-clicking on a link (click anywhere else on the row to display the context menu)
1534 1538 * User display format is now configurable in administration settings
1535 1539 * Issue list now supports bulk edit/move/delete (for a set of issues that belong to the same project)
1536 1540 * Merged 'change status', 'edit issue' and 'add note' actions:
1537 1541 * Users with 'edit issues' permission can now update any property including custom fields when adding a note or changing the status
1538 1542 * 'Change issue status' permission removed. To change an issue status, a user just needs to have either 'Edit' or 'Add note' permissions and some workflow transitions allowed
1539 1543 * Details by assignees on issue summary view
1540 1544 * 'New issue' link in the main menu (accesskey 7). The drop-down lists to add an issue on the project overview and the issue list are removed
1541 1545 * Change status select box default to current status
1542 1546 * Preview for issue notes, news and messages
1543 1547 * Optional description for attachments
1544 1548 * 'Fixed version' label changed to 'Target version'
1545 1549 * Let the user choose when deleting issues with reported hours to:
1546 1550 * delete the hours
1547 1551 * assign the hours to the project
1548 1552 * reassign the hours to another issue
1549 1553 * Date range filter and pagination on time entries detail view
1550 1554 * Propagate time tracking to the parent project
1551 1555 * Switch added on the project activity view to include subprojects
1552 1556 * Display total estimated and spent hours on the version detail view
1553 1557 * Weekly time tracking block for 'My page'
1554 1558 * Permissions to edit time entries
1555 1559 * Include subprojects on the issue list, calendar, gantt and timelog by default (can be turned off is administration settings)
1556 1560 * Roadmap enhancements (separate related issues from wiki contents, leading h1 in version wiki pages is hidden, smaller wiki headings)
1557 1561 * Make versions with same date sorted by name
1558 1562 * Allow issue list to be sorted by target version
1559 1563 * Related changesets messages displayed on the issue details view
1560 1564 * Create a journal and send an email when an issue is closed by commit
1561 1565 * Add 'Author' to the available columns for the issue list
1562 1566 * More appropriate default sort order on sortable columns
1563 1567 * Add issue subject to the time entries view and issue subject, description and tracker to the csv export
1564 1568 * Permissions to edit issue notes
1565 1569 * Display date/time instead of date on files list
1566 1570 * Do not show Roadmap menu item if the project doesn't define any versions
1567 1571 * Allow longer version names (60 chars)
1568 1572 * Ability to copy an existing workflow when creating a new role
1569 1573 * Display custom fields in two columns on the issue form
1570 1574 * Added 'estimated time' in the csv export of the issue list
1571 1575 * Display the last 30 days on the activity view rather than the current month (number of days can be configured in the application settings)
1572 1576 * Setting for whether new projects should be public by default
1573 1577 * User preference to choose how comments/replies are displayed: in chronological or reverse chronological order
1574 1578 * Added default value for custom fields
1575 1579 * Added tabindex property on wiki toolbar buttons (to easily move from field to field using the tab key)
1576 1580 * Redirect to issue page after creating a new issue
1577 1581 * Wiki toolbar improvements (mainly for Firefox)
1578 1582 * Display wiki syntax quick ref link on all wiki textareas
1579 1583 * Display links to Atom feeds
1580 1584 * Breadcrumb nav for the forums
1581 1585 * Show replies when choosing to display messages in the activity
1582 1586 * Added 'include' macro to include another wiki page
1583 1587 * RedmineWikiFormatting page available as a static HTML file locally
1584 1588 * Wrap diff content
1585 1589 * Strip out email address from authors in repository screens
1586 1590 * Highlight the current item of the main menu
1587 1591 * Added simple syntax highlighters for php and java languages
1588 1592 * Do not show empty diffs
1589 1593 * Show explicit error message when the scm command failed (eg. when svn binary is not available)
1590 1594 * Lithuanian translation added (Sergej Jegorov)
1591 1595 * Ukrainan translation added (Natalia Konovka & Mykhaylo Sorochan)
1592 1596 * Danish translation added (Mads Vestergaard)
1593 1597 * Added i18n support to the jstoolbar and various settings screen
1594 1598 * RedCloth's glyphs no longer user
1595 1599 * New icons for the wiki toolbar (from http://www.famfamfam.com/lab/icons/silk/)
1596 1600 * The following menus can now be extended by plugins: top_menu, account_menu, application_menu
1597 1601 * Added a simple rake task to fetch changesets from the repositories: rake redmine:fetch_changesets
1598 1602 * Remove hardcoded "Redmine" strings in account related emails and use application title instead
1599 1603 * Mantis importer preserve bug ids
1600 1604 * Trac importer: Trac guide wiki pages skipped
1601 1605 * Trac importer: wiki attachments migration added
1602 1606 * Trac importer: support database schema for Trac migration
1603 1607 * Trac importer: support CamelCase links
1604 1608 * Removes the Redmine version from the footer (can be viewed on admin -> info)
1605 1609 * Rescue and display an error message when trying to delete a role that is in use
1606 1610 * Add various 'X-Redmine' headers to email notifications: X-Redmine-Host, X-Redmine-Site, X-Redmine-Project, X-Redmine-Issue-Id, -Author, -Assignee, X-Redmine-Topic-Id
1607 1611 * Add "--encoding utf8" option to the Mercurial "hg log" command in order to get utf8 encoded commit logs
1608 1612 * Fixed: Gantt and calendar not properly refreshed (fragment caching removed)
1609 1613 * Fixed: Textile image with style attribute cause internal server error
1610 1614 * Fixed: wiki TOC not rendered properly when used in an issue or document description
1611 1615 * Fixed: 'has already been taken' error message on username and email fields if left empty
1612 1616 * Fixed: non-ascii attachement filename with IE
1613 1617 * Fixed: wrong url for wiki syntax pop-up when Redmine urls are prefixed
1614 1618 * Fixed: search for all words doesn't work
1615 1619 * Fixed: Do not show sticky and locked checkboxes when replying to a message
1616 1620 * Fixed: Mantis importer: do not duplicate Mantis username in firstname and lastname if realname is blank
1617 1621 * Fixed: Date custom fields not displayed as specified in application settings
1618 1622 * Fixed: titles not escaped in the activity view
1619 1623 * Fixed: issue queries can not use custom fields marked as 'for all projects' in a project context
1620 1624 * Fixed: on calendar, gantt and in the tracker filter on the issue list, only active trackers of the project (and its sub projects) should be available
1621 1625 * Fixed: locked users should not receive email notifications
1622 1626 * Fixed: custom field selection is not saved when unchecking them all on project settings
1623 1627 * Fixed: can not lock a topic when creating it
1624 1628 * Fixed: Incorrect filtering for unset values when using 'is not' filter
1625 1629 * Fixed: PostgreSQL issues_seq_id not updated when using Trac importer
1626 1630 * Fixed: ajax pagination does not scroll up
1627 1631 * Fixed: error when uploading a file with no content-type specified by the browser
1628 1632 * Fixed: wiki and changeset links not displayed when previewing issue description or notes
1629 1633 * Fixed: 'LdapError: no bind result' error when authenticating
1630 1634 * Fixed: 'LdapError: invalid binding information' when no username/password are set on the LDAP account
1631 1635 * Fixed: CVS repository doesn't work if port is used in the url
1632 1636 * Fixed: Email notifications: host name is missing in generated links
1633 1637 * Fixed: Email notifications: referenced changesets, wiki pages, attachments... are not turned into links
1634 1638 * Fixed: Do not clear issue relations when moving an issue to another project if cross-project issue relations are allowed
1635 1639 * Fixed: "undefined method 'textilizable'" error on email notification when running Repository#fetch_changesets from the console
1636 1640 * Fixed: Do not send an email with no recipient, cc or bcc
1637 1641 * Fixed: fetch_changesets fails on commit comments that close 2 duplicates issues.
1638 1642 * Fixed: Mercurial browsing under unix-like os and for directory depth > 2
1639 1643 * Fixed: Wiki links with pipe can not be used in wiki tables
1640 1644 * Fixed: migrate_from_trac doesn't import timestamps of wiki and tickets
1641 1645 * Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql
1642 1646
1643 1647
1644 1648 == 2008-03-12 v0.6.4
1645 1649
1646 1650 * Fixed: private projects name are displayed on account/show even if the current user doesn't have access to these private projects
1647 1651 * Fixed: potential LDAP authentication security flaw
1648 1652 * Fixed: context submenus on the issue list don't show up with IE6.
1649 1653 * Fixed: Themes are not applied with Rails 2.0
1650 1654 * Fixed: crash when fetching Mercurial changesets if changeset[:files] is nil
1651 1655 * Fixed: Mercurial repository browsing
1652 1656 * Fixed: undefined local variable or method 'log' in CvsAdapter when a cvs command fails
1653 1657 * Fixed: not null constraints not removed with Postgresql
1654 1658 * Doctype set to transitional
1655 1659
1656 1660
1657 1661 == 2007-12-18 v0.6.3
1658 1662
1659 1663 * Fixed: upload doesn't work in 'Files' section
1660 1664
1661 1665
1662 1666 == 2007-12-16 v0.6.2
1663 1667
1664 1668 * Search engine: issue custom fields can now be searched
1665 1669 * News comments are now textilized
1666 1670 * Updated Japanese translation (Satoru Kurashiki)
1667 1671 * Updated Chinese translation (Shortie Lo)
1668 1672 * Fixed Rails 2.0 compatibility bugs:
1669 1673 * Unable to create a wiki
1670 1674 * Gantt and calendar error
1671 1675 * Trac importer error (readonly? is defined by ActiveRecord)
1672 1676 * Fixed: 'assigned to me' filter broken
1673 1677 * Fixed: crash when validation fails on issue edition with no custom fields
1674 1678 * Fixed: reposman "can't find group" error
1675 1679 * Fixed: 'LDAP account password is too long' error when leaving the field empty on creation
1676 1680 * Fixed: empty lines when displaying repository files with Windows style eol
1677 1681 * Fixed: missing body closing tag in repository annotate and entry views
1678 1682
1679 1683
1680 1684 == 2007-12-10 v0.6.1
1681 1685
1682 1686 * Rails 2.0 compatibility
1683 1687 * Custom fields can now be displayed as columns on the issue list
1684 1688 * Added version details view (accessible from the roadmap)
1685 1689 * Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)
1686 1690 * Added per-project tracker selection. Trackers can be selected on project settings
1687 1691 * Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums
1688 1692 * Forums: messages can now be edited/deleted (explicit permissions need to be given)
1689 1693 * Forums: topics can be locked so that no reply can be added
1690 1694 * Forums: topics can be marked as sticky so that they always appear at the top of the list
1691 1695 * Forums: attachments can now be added to replies
1692 1696 * Added time zone support
1693 1697 * Added a setting to choose the account activation strategy (available in application settings)
1694 1698 * Added 'Classic' theme (inspired from the v0.51 design)
1695 1699 * Added an alternate theme which provides issue list colorization based on issues priority
1696 1700 * Added Bazaar SCM adapter
1697 1701 * Added Annotate/Blame view in the repository browser (except for Darcs SCM)
1698 1702 * Diff style (inline or side by side) automatically saved as a user preference
1699 1703 * Added issues status changes on the activity view (by Cyril Mougel)
1700 1704 * Added forums topics on the activity view (disabled by default)
1701 1705 * Added an option on 'My account' for users who don't want to be notified of changes that they make
1702 1706 * Trac importer now supports mysql and postgresql databases
1703 1707 * Trac importer improvements (by Mat Trudel)
1704 1708 * 'fixed version' field can now be displayed on the issue list
1705 1709 * Added a couple of new formats for the 'date format' setting
1706 1710 * Added Traditional Chinese translation (by Shortie Lo)
1707 1711 * Added Russian translation (iGor kMeta)
1708 1712 * Project name format limitation removed (name can now contain any character)
1709 1713 * Project identifier maximum length changed from 12 to 20
1710 1714 * Changed the maximum length of LDAP account to 255 characters
1711 1715 * Removed the 12 characters limit on passwords
1712 1716 * Added wiki macros support
1713 1717 * Performance improvement on workflow setup screen
1714 1718 * More detailed html title on several views
1715 1719 * Custom fields can now be reordered
1716 1720 * Search engine: search can be restricted to an exact phrase by using quotation marks
1717 1721 * Added custom fields marked as 'For all projects' to the csv export of the cross project issue list
1718 1722 * Email notifications are now sent as Blind carbon copy by default
1719 1723 * Fixed: all members (including non active) should be deleted when deleting a project
1720 1724 * Fixed: Error on wiki syntax link (accessible from wiki/edit)
1721 1725 * Fixed: 'quick jump to a revision' form on the revisions list
1722 1726 * Fixed: error on admin/info if there's more than 1 plugin installed
1723 1727 * Fixed: svn or ldap password can be found in clear text in the html source in editing mode
1724 1728 * Fixed: 'Assigned to' drop down list is not sorted
1725 1729 * Fixed: 'View all issues' link doesn't work on issues/show
1726 1730 * Fixed: error on account/register when validation fails
1727 1731 * Fixed: Error when displaying the issue list if a float custom field is marked as 'used as filter'
1728 1732 * Fixed: Mercurial adapter breaks on missing :files entry in changeset hash (James Britt)
1729 1733 * Fixed: Wrong feed URLs on the home page
1730 1734 * Fixed: Update of time entry fails when the issue has been moved to an other project
1731 1735 * Fixed: Error when moving an issue without changing its tracker (Postgresql)
1732 1736 * Fixed: Changes not recorded when using :pserver string (CVS adapter)
1733 1737 * Fixed: admin should be able to move issues to any project
1734 1738 * Fixed: adding an attachment is not possible when changing the status of an issue
1735 1739 * Fixed: No mime-types in documents/files downloading
1736 1740 * Fixed: error when sorting the messages if there's only one board for the project
1737 1741 * Fixed: 'me' doesn't appear in the drop down filters on a project issue list.
1738 1742
1739 1743 == 2007-11-04 v0.6.0
1740 1744
1741 1745 * Permission model refactoring.
1742 1746 * Permissions: there are now 2 builtin roles that can be used to specify permissions given to other users than members of projects
1743 1747 * Permissions: some permissions (eg. browse the repository) can be removed for certain roles
1744 1748 * Permissions: modules (eg. issue tracking, news, documents...) can be enabled/disabled at project level
1745 1749 * Added Mantis and Trac importers
1746 1750 * New application layout
1747 1751 * Added "Bulk edit" functionality on the issue list
1748 1752 * More flexible mail notifications settings at user level
1749 1753 * Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue
1750 1754 * Added the hability to copy an issue. It can be done from the "issue/show" view or from the context menu on the issue list
1751 1755 * Added the ability to customize issue list columns (at application level or for each saved query)
1752 1756 * Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap
1753 1757 * Added the ability to rename wiki pages (specific permission required)
1754 1758 * Search engines now supports pagination. Results are sorted in reverse chronological order
1755 1759 * Added "Estimated hours" attribute on issues
1756 1760 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
1757 1761 * Forum notifications are now also sent to the authors of the thread, even if they donΓ―ΒΏΒ½t watch the board
1758 1762 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
1759 1763 * Gantt chart: now starts at the current month by default
1760 1764 * Gantt chart: month count and zoom factor are automatically saved as user preferences
1761 1765 * Wiki links can now refer to other project wikis
1762 1766 * Added wiki index by date
1763 1767 * Added preview on add/edit issue form
1764 1768 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
1765 1769 * Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that theyΓ―ΒΏΒ½re properly displayed)
1766 1770 * Calendar: first day of week can now be set in lang files
1767 1771 * Automatic closing of duplicate issues
1768 1772 * Added a cross-project issue list
1769 1773 * AJAXified the SCM browser (tree view)
1770 1774 * Pretty URL for the repository browser (Cyril Mougel)
1771 1775 * Search engine: added a checkbox to search titles only
1772 1776 * Added "% done" in the filter list
1773 1777 * Enumerations: values can now be reordered and a default value can be specified (eg. default issue priority)
1774 1778 * Added some accesskeys
1775 1779 * Added "Float" as a custom field format
1776 1780 * Added basic Theme support
1777 1781 * Added the ability to set the Γ―ΒΏΒ½done ratioΓ―ΒΏΒ½ of issues fixed by commit (Nikolay Solakov)
1778 1782 * Added custom fields in issue related mail notifications
1779 1783 * Email notifications are now sent in plain text and html
1780 1784 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
1781 1785 * Added syntax highlightment for repository files and wiki
1782 1786 * Improved automatic Redmine links
1783 1787 * Added automatic table of content support on wiki pages
1784 1788 * Added radio buttons on the documents list to sort documents by category, date, title or author
1785 1789 * Added basic plugin support, with a sample plugin
1786 1790 * Added a link to add a new category when creating or editing an issue
1787 1791 * Added a "Assignable" boolean on the Role model. If unchecked, issues can not be assigned to users having this role.
1788 1792 * Added an option to be able to relate issues in different projects
1789 1793 * Added the ability to move issues (to another project) without changing their trackers.
1790 1794 * Atom feeds added on project activity, news and changesets
1791 1795 * Added the ability to reset its own RSS access key
1792 1796 * Main project list now displays root projects with their subprojects
1793 1797 * Added anchor links to issue notes
1794 1798 * Added reposman Ruby version. This script can now register created repositories in Redmine (Nicolas Chuche)
1795 1799 * Issue notes are now included in search
1796 1800 * Added email sending test functionality
1797 1801 * Added LDAPS support for LDAP authentication
1798 1802 * Removed hard-coded URLs in mail templates
1799 1803 * Subprojects are now grouped by projects in the navigation drop-down menu
1800 1804 * Added a new value for date filters: this week
1801 1805 * Added cache for application settings
1802 1806 * Added Polish translation (Tomasz Gawryl)
1803 1807 * Added Czech translation (Jan Kadlecek)
1804 1808 * Added Romanian translation (Csongor Bartus)
1805 1809 * Added Hebrew translation (Bob Builder)
1806 1810 * Added Serbian translation (Dragan Matic)
1807 1811 * Added Korean translation (Choi Jong Yoon)
1808 1812 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
1809 1813 * Performance improvement on calendar and gantt
1810 1814 * Fixed: wiki preview doesnΓ―ΒΏΒ½t work on long entries
1811 1815 * Fixed: queries with multiple custom fields return no result
1812 1816 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
1813 1817 * Fixed: URL with ~ broken in wiki formatting
1814 1818 * Fixed: some quotation marks are rendered as strange characters in pdf
1815 1819
1816 1820
1817 1821 == 2007-07-15 v0.5.1
1818 1822
1819 1823 * per project forums added
1820 1824 * added the ability to archive projects
1821 1825 * added Γ―ΒΏΒ½WatchΓ―ΒΏΒ½ functionality on issues. It allows users to receive notifications about issue changes
1822 1826 * custom fields for issues can now be used as filters on issue list
1823 1827 * added per user custom queries
1824 1828 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
1825 1829 * projects list now shows the list of public projects and private projects for which the user is a member
1826 1830 * versions can now be created with no date
1827 1831 * added issue count details for versions on Reports view
1828 1832 * added time report, by member/activity/tracker/version and year/month/week for the selected period
1829 1833 * each category can now be associated to a user, so that new issues in that category are automatically assigned to that user
1830 1834 * added autologin feature (disabled by default)
1831 1835 * optimistic locking added for wiki edits
1832 1836 * added wiki diff
1833 1837 * added the ability to destroy wiki pages (requires permission)
1834 1838 * a wiki page can now be attached to each version, and displayed on the roadmap
1835 1839 * attachments can now be added to wiki pages (original patch by Pavol Murin) and displayed online
1836 1840 * added an option to see all versions in the roadmap view (including completed ones)
1837 1841 * added basic issue relations
1838 1842 * added the ability to log time when changing an issue status
1839 1843 * account information can now be sent to the user when creating an account
1840 1844 * author and assignee of an issue always receive notifications (even if they turned of mail notifications)
1841 1845 * added a quick search form in page header
1842 1846 * added 'me' value for 'assigned to' and 'author' query filters
1843 1847 * added a link on revision screen to see the entire diff for the revision
1844 1848 * added last commit message for each entry in repository browser
1845 1849 * added the ability to view a file diff with free to/from revision selection.
1846 1850 * text files can now be viewed online when browsing the repository
1847 1851 * added basic support for other SCM: CVS (Ralph Vater), Mercurial and Darcs
1848 1852 * added fragment caching for svn diffs
1849 1853 * added fragment caching for calendar and gantt views
1850 1854 * login field automatically focused on login form
1851 1855 * subproject name displayed on issue list, calendar and gantt
1852 1856 * added an option to choose the date format: language based or ISO 8601
1853 1857 * added a simple mail handler. It lets users add notes to an existing issue by replying to the initial notification email.
1854 1858 * a 403 error page is now displayed (instead of a blank page) when trying to access a protected page
1855 1859 * added portuguese translation (Joao Carlos Clementoni)
1856 1860 * added partial online help japanese translation (Ken Date)
1857 1861 * added bulgarian translation (Nikolay Solakov)
1858 1862 * added dutch translation (Linda van den Brink)
1859 1863 * added swedish translation (Thomas Habets)
1860 1864 * italian translation update (Alessio Spadaro)
1861 1865 * japanese translation update (Satoru Kurashiki)
1862 1866 * fixed: error on history atom feed when thereΓ―ΒΏΒ½s no notes on an issue change
1863 1867 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
1864 1868 * fixed: creation of Oracle schema
1865 1869 * fixed: last day of the month not included in project activity
1866 1870 * fixed: files with an apostrophe in their names can't be accessed in SVN repository
1867 1871 * fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)
1868 1872 * fixed: open/closed issue counts are always 0 on reports view (postgresql)
1869 1873 * fixed: date query filters (wrong results and sql error with postgresql)
1870 1874 * fixed: confidentiality issue on account/show (private project names displayed to anyone)
1871 1875 * fixed: Long text custom fields displayed without line breaks
1872 1876 * fixed: Error when editing the wokflow after deleting a status
1873 1877 * fixed: SVN commit dates are now stored as local time
1874 1878
1875 1879
1876 1880 == 2007-04-11 v0.5.0
1877 1881
1878 1882 * added per project Wiki
1879 1883 * added rss/atom feeds at project level (custom queries can be used as feeds)
1880 1884 * added search engine (search in issues, news, commits, wiki pages, documents)
1881 1885 * simple time tracking functionality added
1882 1886 * added version due dates on calendar and gantt
1883 1887 * added subprojects issue count on project Reports page
1884 1888 * added the ability to copy an existing workflow when creating a new tracker
1885 1889 * added the ability to include subprojects on calendar and gantt
1886 1890 * added the ability to select trackers to display on calendar and gantt (Jeffrey Jones)
1887 1891 * added side by side svn diff view (Cyril Mougel)
1888 1892 * added back subproject filter on issue list
1889 1893 * added permissions report in admin area
1890 1894 * added a status filter on users list
1891 1895 * support for password-protected SVN repositories
1892 1896 * SVN commits are now stored in the database
1893 1897 * added simple svn statistics SVG graphs
1894 1898 * progress bars for roadmap versions (Nick Read)
1895 1899 * issue history now shows file uploads and deletions
1896 1900 * #id patterns are turned into links to issues in descriptions and commit messages
1897 1901 * japanese translation added (Satoru Kurashiki)
1898 1902 * chinese simplified translation added (Andy Wu)
1899 1903 * italian translation added (Alessio Spadaro)
1900 1904 * added scripts to manage SVN repositories creation and user access control using ssh+svn (Nicolas Chuche)
1901 1905 * better calendar rendering time
1902 1906 * fixed migration scripts to work with mysql 5 running in strict mode
1903 1907 * fixed: error when clicking "add" with no block selected on my/page_layout
1904 1908 * fixed: hard coded links in navigation bar
1905 1909 * fixed: table_name pre/suffix support
1906 1910
1907 1911
1908 1912 == 2007-02-18 v0.4.2
1909 1913
1910 1914 * Rails 1.2 is now required
1911 1915 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)
1912 1916 * added project roadmap view
1913 1917 * mail notifications added when a document, a file or an attachment is added
1914 1918 * tooltips added on Gantt chart and calender to view the details of the issues
1915 1919 * ability to set the sort order for roles, trackers, issue statuses
1916 1920 * added missing fields to csv export: priority, start date, due date, done ratio
1917 1921 * added total number of issues per tracker on project overview
1918 1922 * all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)
1919 1923 * added back "fixed version" field on issue screen and in filters
1920 1924 * project settings screen split in 4 tabs
1921 1925 * custom fields screen split in 3 tabs (one for each kind of custom field)
1922 1926 * multiple issues pdf export now rendered as a table
1923 1927 * added a button on users/list to manually activate an account
1924 1928 * added a setting option to disable "password lost" functionality
1925 1929 * added a setting option to set max number of issues in csv/pdf exports
1926 1930 * fixed: subprojects count is always 0 on projects list
1927 1931 * fixed: locked users are proposed when adding a member to a project
1928 1932 * fixed: setting an issue status as default status leads to an sql error with SQLite
1929 1933 * fixed: unable to delete an issue status even if it's not used yet
1930 1934 * fixed: filters ignored when exporting a predefined query to csv/pdf
1931 1935 * fixed: crash when french "issue_edit" email notification is sent
1932 1936 * fixed: hide mail preference not saved (my/account)
1933 1937 * fixed: crash when a new user try to edit its "my page" layout
1934 1938
1935 1939
1936 1940 == 2007-01-03 v0.4.1
1937 1941
1938 1942 * fixed: emails have no recipient when one of the project members has notifications disabled
1939 1943
1940 1944
1941 1945 == 2007-01-02 v0.4.0
1942 1946
1943 1947 * simple SVN browser added (just needs svn binaries in PATH)
1944 1948 * comments can now be added on news
1945 1949 * "my page" is now customizable
1946 1950 * more powerfull and savable filters for issues lists
1947 1951 * improved issues change history
1948 1952 * new functionality: move an issue to another project or tracker
1949 1953 * new functionality: add a note to an issue
1950 1954 * new report: project activity
1951 1955 * "start date" and "% done" fields added on issues
1952 1956 * project calendar added
1953 1957 * gantt chart added (exportable to pdf)
1954 1958 * single/multiple issues pdf export added
1955 1959 * issues reports improvements
1956 1960 * multiple file upload for issues, documents and files
1957 1961 * option to set maximum size of uploaded files
1958 1962 * textile formating of issue and news descritions (RedCloth required)
1959 1963 * integration of DotClear jstoolbar for textile formatting
1960 1964 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
1961 1965 * new filter in issues list: Author
1962 1966 * ajaxified paginators
1963 1967 * news rss feed added
1964 1968 * option to set number of results per page on issues list
1965 1969 * localized csv separator (comma/semicolon)
1966 1970 * csv output encoded to ISO-8859-1
1967 1971 * user custom field displayed on account/show
1968 1972 * default configuration improved (default roles, trackers, status, permissions and workflows)
1969 1973 * language for default configuration data can now be chosen when running 'load_default_data' task
1970 1974 * javascript added on custom field form to show/hide fields according to the format of custom field
1971 1975 * fixed: custom fields not in csv exports
1972 1976 * fixed: project settings now displayed according to user's permissions
1973 1977 * fixed: application error when no version is selected on projects/add_file
1974 1978 * fixed: public actions not authorized for members of non public projects
1975 1979 * fixed: non public projects were shown on welcome screen even if current user is not a member
1976 1980
1977 1981
1978 1982 == 2006-10-08 v0.3.0
1979 1983
1980 1984 * user authentication against multiple LDAP (optional)
1981 1985 * token based "lost password" functionality
1982 1986 * user self-registration functionality (optional)
1983 1987 * custom fields now available for issues, users and projects
1984 1988 * new custom field format "text" (displayed as a textarea field)
1985 1989 * project & administration drop down menus in navigation bar for quicker access
1986 1990 * text formatting is preserved for long text fields (issues, projects and news descriptions)
1987 1991 * urls and emails are turned into clickable links in long text fields
1988 1992 * "due date" field added on issues
1989 1993 * tracker selection filter added on change log
1990 1994 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
1991 1995 * error messages internationalization
1992 1996 * german translation added (thanks to Karim Trott)
1993 1997 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
1994 1998 * new filter in issues list: "Fixed version"
1995 1999 * active filters are displayed with colored background on issues list
1996 2000 * custom configuration is now defined in config/config_custom.rb
1997 2001 * user object no more stored in session (only user_id)
1998 2002 * news summary field is no longer required
1999 2003 * tables and forms redesign
2000 2004 * Fixed: boolean custom field not working
2001 2005 * Fixed: error messages for custom fields are not displayed
2002 2006 * Fixed: invalid custom fields should have a red border
2003 2007 * Fixed: custom fields values are not validated on issue update
2004 2008 * Fixed: unable to choose an empty value for 'List' custom fields
2005 2009 * Fixed: no issue categories sorting
2006 2010 * Fixed: incorrect versions sorting
2007 2011
2008 2012
2009 2013 == 2006-07-12 - v0.2.2
2010 2014
2011 2015 * Fixed: bug in "issues list"
2012 2016
2013 2017
2014 2018 == 2006-07-09 - v0.2.1
2015 2019
2016 2020 * new databases supported: Oracle, PostgreSQL, SQL Server
2017 2021 * projects/subprojects hierarchy (1 level of subprojects only)
2018 2022 * environment information display in admin/info
2019 2023 * more filter options in issues list (rev6)
2020 2024 * default language based on browser settings (Accept-Language HTTP header)
2021 2025 * issues list exportable to CSV (rev6)
2022 2026 * simple_format and auto_link on long text fields
2023 2027 * more data validations
2024 2028 * Fixed: error when all mail notifications are unchecked in admin/mail_options
2025 2029 * Fixed: all project news are displayed on project summary
2026 2030 * Fixed: Can't change user password in users/edit
2027 2031 * Fixed: Error on tables creation with PostgreSQL (rev5)
2028 2032 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
2029 2033
2030 2034
2031 2035 == 2006-06-25 - v0.1.0
2032 2036
2033 2037 * multiple users/multiple projects
2034 2038 * role based access control
2035 2039 * issue tracking system
2036 2040 * fully customizable workflow
2037 2041 * documents/files repository
2038 2042 * email notifications on issue creation and update
2039 2043 * multilanguage support (except for error messages):english, french, spanish
2040 2044 * online manual in french (unfinished)
@@ -1,562 +1,596
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RepositoryGitTest < ActiveSupport::TestCase
21 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22 22
23 23 include Redmine::I18n
24 24
25 25 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
26 26 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
27 27
28 28 NUM_REV = 28
29 29 NUM_HEAD = 6
30 30
31 31 FELIX_HEX = "Felix Sch\xC3\xA4fer"
32 32 CHAR_1_HEX = "\xc3\x9c"
33 33
34 34 ## Git, Mercurial and CVS path encodings are binary.
35 35 ## Subversion supports URL encoding for path.
36 36 ## Redmine Mercurial adapter and extension use URL encoding.
37 37 ## Git accepts only binary path in command line parameter.
38 38 ## So, there is no way to use binary command line parameter in JRuby.
39 39 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
40 40 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
41 41
42 42 def setup
43 43 @project = Project.find(3)
44 44 @repository = Repository::Git.create(
45 45 :project => @project,
46 46 :url => REPOSITORY_PATH,
47 47 :path_encoding => 'ISO-8859-1'
48 48 )
49 49 assert @repository
50 50 @char_1 = CHAR_1_HEX.dup
51 51 if @char_1.respond_to?(:force_encoding)
52 52 @char_1.force_encoding('UTF-8')
53 53 end
54 54 end
55 55
56 56 def test_blank_path_to_repository_error_message
57 57 set_language_if_valid 'en'
58 58 repo = Repository::Git.new(
59 59 :project => @project,
60 60 :identifier => 'test'
61 61 )
62 62 assert !repo.save
63 63 assert_include "Path to repository can't be blank",
64 64 repo.errors.full_messages
65 65 end
66 66
67 67 def test_blank_path_to_repository_error_message_fr
68 68 set_language_if_valid 'fr'
69 69 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
70 70 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
71 71 repo = Repository::Git.new(
72 72 :project => @project,
73 73 :url => "",
74 74 :identifier => 'test',
75 75 :path_encoding => ''
76 76 )
77 77 assert !repo.save
78 78 assert_include str, repo.errors.full_messages
79 79 end
80 80
81 81 if File.directory?(REPOSITORY_PATH)
82 82 ## Ruby uses ANSI api to fork a process on Windows.
83 83 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
84 84 ## and these are incompatible with ASCII.
85 85 ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
86 86 ## http://code.google.com/p/msysgit/issues/detail?id=80
87 87 ## So, Latin-1 path tests fail on Japanese Windows
88 88 WINDOWS_PASS = (Redmine::Platform.mswin? &&
89 89 Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
90 90 WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
91 91
92 92 def test_scm_available
93 93 klass = Repository::Git
94 94 assert_equal "Git", klass.scm_name
95 95 assert klass.scm_adapter_class
96 96 assert_not_equal "", klass.scm_command
97 97 assert_equal true, klass.scm_available
98 98 end
99 99
100 100 def test_fetch_changesets_from_scratch
101 101 assert_nil @repository.extra_info
102 102
103 103 assert_equal 0, @repository.changesets.count
104 104 @repository.fetch_changesets
105 105 @project.reload
106 106
107 107 assert_equal NUM_REV, @repository.changesets.count
108 108 assert_equal 39, @repository.changes.count
109 109
110 110 commit = @repository.changesets.find_by_revision("7234cb2750b63f47bff735edc50a1c0a433c2518")
111 111 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
112 112 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
113 113 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
114 114 assert_equal User.find_by_login('jsmith'), commit.user
115 115 # TODO: add a commit with commit time <> author time to the test repository
116 116 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
117 117 assert_equal "2007-12-14".to_date, commit.commit_date
118 118 assert_equal 3, commit.changes.count
119 119 change = commit.changes.sort_by(&:path).first
120 120 assert_equal "README", change.path
121 121 assert_equal nil, change.from_path
122 122 assert_equal "A", change.action
123 123
124 124 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
125 125 end
126 126
127 127 def test_fetch_changesets_incremental
128 128 assert_equal 0, @repository.changesets.count
129 129 @repository.fetch_changesets
130 130 @project.reload
131 131 assert_equal NUM_REV, @repository.changesets.count
132 132 extra_info_heads = @repository.extra_info["heads"].dup
133 133 assert_equal NUM_HEAD, extra_info_heads.size
134 134 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
135 135 assert_equal 4, extra_info_heads.size
136 136
137 137 del_revs = [
138 138 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
139 139 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
140 140 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
141 141 "deff712f05a90d96edbd70facc47d944be5897e3",
142 142 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
143 143 "7e61ac704deecde634b51e59daa8110435dcb3da",
144 144 ]
145 145 @repository.changesets.each do |rev|
146 146 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
147 147 end
148 148 @project.reload
149 149 cs1 = @repository.changesets
150 150 assert_equal NUM_REV - 6, cs1.count
151 151 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
152 152 h = {}
153 153 h["heads"] = extra_info_heads
154 154 @repository.merge_extra_info(h)
155 155 @repository.save
156 156 @project.reload
157 157 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
158 158 @repository.fetch_changesets
159 159 @project.reload
160 160 assert_equal NUM_REV, @repository.changesets.count
161 161 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
162 162 assert @repository.extra_info["heads"].index("83ca5fd546063a3c7dc2e568ba3355661a9e2b2c")
163 163 end
164 164
165 165 def test_fetch_changesets_history_editing
166 166 assert_equal 0, @repository.changesets.count
167 167 @repository.fetch_changesets
168 168 @project.reload
169 169 assert_equal NUM_REV, @repository.changesets.count
170 170 extra_info_heads = @repository.extra_info["heads"].dup
171 171 assert_equal NUM_HEAD, extra_info_heads.size
172 172 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
173 173 assert_equal 4, extra_info_heads.size
174 174
175 175 del_revs = [
176 176 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
177 177 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
178 178 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
179 179 "deff712f05a90d96edbd70facc47d944be5897e3",
180 180 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
181 181 "7e61ac704deecde634b51e59daa8110435dcb3da",
182 182 ]
183 183 @repository.changesets.each do |rev|
184 184 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
185 185 end
186 186 @project.reload
187 187 assert_equal NUM_REV - 6, @repository.changesets.count
188 188
189 189 c = Changeset.new(:repository => @repository,
190 190 :committed_on => Time.now,
191 191 :revision => "abcd1234efgh",
192 192 :scmid => "abcd1234efgh",
193 193 :comments => 'test')
194 194 assert c.save
195 195 @project.reload
196 196 assert_equal NUM_REV - 5, @repository.changesets.count
197 197
198 198 extra_info_heads << "1234abcd5678"
199 199 h = {}
200 200 h["heads"] = extra_info_heads
201 201 @repository.merge_extra_info(h)
202 202 @repository.save
203 203 @project.reload
204 204 h1 = @repository.extra_info["heads"].dup
205 205 assert h1.index("1234abcd5678")
206 206 assert_equal 5, h1.size
207 207
208 208 @repository.fetch_changesets
209 209 @project.reload
210 210 assert_equal NUM_REV - 5, @repository.changesets.count
211 211 h2 = @repository.extra_info["heads"].dup
212 212 assert_equal h1, h2
213 213 end
214 214
215 def test_keep_extra_report_last_commit_in_clear_changesets
216 assert_nil @repository.extra_info
217 h = {}
218 h["extra_report_last_commit"] = 1
219 @repository.merge_extra_info(h)
220 @repository.save
221 @project.reload
222
223 assert_equal 0, @repository.changesets.count
224 @repository.fetch_changesets
225 @project.reload
226
227 assert_equal NUM_REV, @repository.changesets.count
228 @repository.send(:clear_changesets)
229 assert_equal 1, @repository.extra_info.size
230 assert_equal 1, @repository.extra_info["extra_report_last_commit"]
231 end
232
233 def test_refetch_after_clear_changesets
234 assert_nil @repository.extra_info
235 assert_equal 0, @repository.changesets.count
236 @repository.fetch_changesets
237 @project.reload
238 assert_equal NUM_REV, @repository.changesets.count
239
240 @repository.send(:clear_changesets)
241 @project.reload
242 assert_equal 0, @repository.changesets.count
243
244 @repository.fetch_changesets
245 @project.reload
246 assert_equal NUM_REV, @repository.changesets.count
247 end
248
215 249 def test_parents
216 250 assert_equal 0, @repository.changesets.count
217 251 @repository.fetch_changesets
218 252 @project.reload
219 253 assert_equal NUM_REV, @repository.changesets.count
220 254 r1 = @repository.find_changeset_by_name("7234cb2750b63")
221 255 assert_equal [], r1.parents
222 256 r2 = @repository.find_changeset_by_name("899a15dba03a3")
223 257 assert_equal 1, r2.parents.length
224 258 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
225 259 r2.parents[0].identifier
226 260 r3 = @repository.find_changeset_by_name("32ae898b720c2")
227 261 assert_equal 2, r3.parents.length
228 262 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
229 263 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", r4[0]
230 264 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da", r4[1]
231 265 end
232 266
233 267 def test_db_consistent_ordering_init
234 268 assert_nil @repository.extra_info
235 269 assert_equal 0, @repository.changesets.count
236 270 @repository.fetch_changesets
237 271 @project.reload
238 272 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
239 273 end
240 274
241 275 def test_db_consistent_ordering_before_1_2
242 276 assert_nil @repository.extra_info
243 277 assert_equal 0, @repository.changesets.count
244 278 @repository.fetch_changesets
245 279 @project.reload
246 280 assert_equal NUM_REV, @repository.changesets.count
247 281 assert_not_nil @repository.extra_info
248 282 h = {}
249 283 h["heads"] = []
250 284 h["branches"] = {}
251 285 h["db_consistent"] = {}
252 286 @repository.merge_extra_info(h)
253 287 @repository.save
254 288 assert_equal NUM_REV, @repository.changesets.count
255 289 @repository.fetch_changesets
256 290 @project.reload
257 291 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
258 292
259 293 extra_info_heads = @repository.extra_info["heads"].dup
260 294 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
261 295 del_revs = [
262 296 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
263 297 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
264 298 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
265 299 "deff712f05a90d96edbd70facc47d944be5897e3",
266 300 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
267 301 "7e61ac704deecde634b51e59daa8110435dcb3da",
268 302 ]
269 303 @repository.changesets.each do |rev|
270 304 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
271 305 end
272 306 @project.reload
273 307 cs1 = @repository.changesets
274 308 assert_equal NUM_REV - 6, cs1.count
275 309 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
276 310
277 311 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
278 312 h = {}
279 313 h["heads"] = extra_info_heads
280 314 @repository.merge_extra_info(h)
281 315 @repository.save
282 316 @project.reload
283 317 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
284 318 @repository.fetch_changesets
285 319 @project.reload
286 320 assert_equal NUM_REV, @repository.changesets.count
287 321 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
288 322
289 323 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
290 324 end
291 325
292 326 def test_heads_from_branches_hash
293 327 assert_nil @repository.extra_info
294 328 assert_equal 0, @repository.changesets.count
295 329 assert_equal [], @repository.heads_from_branches_hash
296 330 h = {}
297 331 h["branches"] = {}
298 332 h["branches"]["test1"] = {}
299 333 h["branches"]["test1"]["last_scmid"] = "1234abcd"
300 334 h["branches"]["test2"] = {}
301 335 h["branches"]["test2"]["last_scmid"] = "abcd1234"
302 336 @repository.merge_extra_info(h)
303 337 @repository.save
304 338 @project.reload
305 339 assert_equal ["1234abcd", "abcd1234"], @repository.heads_from_branches_hash.sort
306 340 end
307 341
308 342 def test_latest_changesets
309 343 assert_equal 0, @repository.changesets.count
310 344 @repository.fetch_changesets
311 345 @project.reload
312 346 assert_equal NUM_REV, @repository.changesets.count
313 347 # with limit
314 348 changesets = @repository.latest_changesets('', 'master', 2)
315 349 assert_equal 2, changesets.size
316 350
317 351 # with path
318 352 changesets = @repository.latest_changesets('images', 'master')
319 353 assert_equal [
320 354 'deff712f05a90d96edbd70facc47d944be5897e3',
321 355 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
322 356 '7234cb2750b63f47bff735edc50a1c0a433c2518',
323 357 ], changesets.collect(&:revision)
324 358
325 359 changesets = @repository.latest_changesets('README', nil)
326 360 assert_equal [
327 361 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
328 362 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
329 363 '713f4944648826f558cf548222f813dabe7cbb04',
330 364 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
331 365 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
332 366 '7234cb2750b63f47bff735edc50a1c0a433c2518',
333 367 ], changesets.collect(&:revision)
334 368
335 369 # with path, revision and limit
336 370 changesets = @repository.latest_changesets('images', '899a15dba')
337 371 assert_equal [
338 372 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
339 373 '7234cb2750b63f47bff735edc50a1c0a433c2518',
340 374 ], changesets.collect(&:revision)
341 375
342 376 changesets = @repository.latest_changesets('images', '899a15dba', 1)
343 377 assert_equal [
344 378 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
345 379 ], changesets.collect(&:revision)
346 380
347 381 changesets = @repository.latest_changesets('README', '899a15dba')
348 382 assert_equal [
349 383 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
350 384 '7234cb2750b63f47bff735edc50a1c0a433c2518',
351 385 ], changesets.collect(&:revision)
352 386
353 387 changesets = @repository.latest_changesets('README', '899a15dba', 1)
354 388 assert_equal [
355 389 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
356 390 ], changesets.collect(&:revision)
357 391
358 392 # with path, tag and limit
359 393 changesets = @repository.latest_changesets('images', 'tag01.annotated')
360 394 assert_equal [
361 395 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
362 396 '7234cb2750b63f47bff735edc50a1c0a433c2518',
363 397 ], changesets.collect(&:revision)
364 398
365 399 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
366 400 assert_equal [
367 401 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
368 402 ], changesets.collect(&:revision)
369 403
370 404 changesets = @repository.latest_changesets('README', 'tag01.annotated')
371 405 assert_equal [
372 406 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
373 407 '7234cb2750b63f47bff735edc50a1c0a433c2518',
374 408 ], changesets.collect(&:revision)
375 409
376 410 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
377 411 assert_equal [
378 412 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
379 413 ], changesets.collect(&:revision)
380 414
381 415 # with path, branch and limit
382 416 changesets = @repository.latest_changesets('images', 'test_branch')
383 417 assert_equal [
384 418 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
385 419 '7234cb2750b63f47bff735edc50a1c0a433c2518',
386 420 ], changesets.collect(&:revision)
387 421
388 422 changesets = @repository.latest_changesets('images', 'test_branch', 1)
389 423 assert_equal [
390 424 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
391 425 ], changesets.collect(&:revision)
392 426
393 427 changesets = @repository.latest_changesets('README', 'test_branch')
394 428 assert_equal [
395 429 '713f4944648826f558cf548222f813dabe7cbb04',
396 430 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
397 431 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
398 432 '7234cb2750b63f47bff735edc50a1c0a433c2518',
399 433 ], changesets.collect(&:revision)
400 434
401 435 changesets = @repository.latest_changesets('README', 'test_branch', 2)
402 436 assert_equal [
403 437 '713f4944648826f558cf548222f813dabe7cbb04',
404 438 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
405 439 ], changesets.collect(&:revision)
406 440
407 441 if WINDOWS_PASS
408 442 puts WINDOWS_SKIP_STR
409 443 elsif JRUBY_SKIP
410 444 puts JRUBY_SKIP_STR
411 445 else
412 446 # latin-1 encoding path
413 447 changesets = @repository.latest_changesets(
414 448 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
415 449 assert_equal [
416 450 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
417 451 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
418 452 ], changesets.collect(&:revision)
419 453
420 454 changesets = @repository.latest_changesets(
421 455 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
422 456 assert_equal [
423 457 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
424 458 ], changesets.collect(&:revision)
425 459 end
426 460 end
427 461
428 462 def test_latest_changesets_latin_1_dir
429 463 if WINDOWS_PASS
430 464 puts WINDOWS_SKIP_STR
431 465 elsif JRUBY_SKIP
432 466 puts JRUBY_SKIP_STR
433 467 else
434 468 assert_equal 0, @repository.changesets.count
435 469 @repository.fetch_changesets
436 470 @project.reload
437 471 assert_equal NUM_REV, @repository.changesets.count
438 472 changesets = @repository.latest_changesets(
439 473 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
440 474 assert_equal [
441 475 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
442 476 ], changesets.collect(&:revision)
443 477 end
444 478 end
445 479
446 480 def test_find_changeset_by_name
447 481 assert_equal 0, @repository.changesets.count
448 482 @repository.fetch_changesets
449 483 @project.reload
450 484 assert_equal NUM_REV, @repository.changesets.count
451 485 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
452 486 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
453 487 @repository.find_changeset_by_name(r).revision
454 488 end
455 489 end
456 490
457 491 def test_find_changeset_by_empty_name
458 492 assert_equal 0, @repository.changesets.count
459 493 @repository.fetch_changesets
460 494 @project.reload
461 495 assert_equal NUM_REV, @repository.changesets.count
462 496 ['', ' ', nil].each do |r|
463 497 assert_nil @repository.find_changeset_by_name(r)
464 498 end
465 499 end
466 500
467 501 def test_identifier
468 502 assert_equal 0, @repository.changesets.count
469 503 @repository.fetch_changesets
470 504 @project.reload
471 505 assert_equal NUM_REV, @repository.changesets.count
472 506 c = @repository.changesets.find_by_revision(
473 507 '7234cb2750b63f47bff735edc50a1c0a433c2518')
474 508 assert_equal c.scmid, c.identifier
475 509 end
476 510
477 511 def test_format_identifier
478 512 assert_equal 0, @repository.changesets.count
479 513 @repository.fetch_changesets
480 514 @project.reload
481 515 assert_equal NUM_REV, @repository.changesets.count
482 516 c = @repository.changesets.find_by_revision(
483 517 '7234cb2750b63f47bff735edc50a1c0a433c2518')
484 518 assert_equal '7234cb27', c.format_identifier
485 519 end
486 520
487 521 def test_activities
488 522 c = Changeset.new(:repository => @repository,
489 523 :committed_on => Time.now,
490 524 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
491 525 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
492 526 :comments => 'test')
493 527 assert c.event_title.include?('abc7234c:')
494 528 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
495 529 end
496 530
497 531 def test_log_utf8
498 532 assert_equal 0, @repository.changesets.count
499 533 @repository.fetch_changesets
500 534 @project.reload
501 535 assert_equal NUM_REV, @repository.changesets.count
502 536 str_felix_hex = FELIX_HEX.dup
503 537 if str_felix_hex.respond_to?(:force_encoding)
504 538 str_felix_hex.force_encoding('UTF-8')
505 539 end
506 540 c = @repository.changesets.find_by_revision(
507 541 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
508 542 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
509 543 end
510 544
511 545 def test_previous
512 546 assert_equal 0, @repository.changesets.count
513 547 @repository.fetch_changesets
514 548 @project.reload
515 549 assert_equal NUM_REV, @repository.changesets.count
516 550 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
517 551 changeset = @repository.find_changeset_by_name(r1)
518 552 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
519 553 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
520 554 end
521 555 end
522 556 end
523 557
524 558 def test_previous_nil
525 559 assert_equal 0, @repository.changesets.count
526 560 @repository.fetch_changesets
527 561 @project.reload
528 562 assert_equal NUM_REV, @repository.changesets.count
529 563 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb275|.each do |r1|
530 564 changeset = @repository.find_changeset_by_name(r1)
531 565 assert_nil changeset.previous
532 566 end
533 567 end
534 568
535 569 def test_next
536 570 assert_equal 0, @repository.changesets.count
537 571 @repository.fetch_changesets
538 572 @project.reload
539 573 assert_equal NUM_REV, @repository.changesets.count
540 574 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
541 575 changeset = @repository.find_changeset_by_name(r2)
542 576 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
543 577 assert_equal @repository.find_changeset_by_name(r1), changeset.next
544 578 end
545 579 end
546 580 end
547 581
548 582 def test_next_nil
549 583 assert_equal 0, @repository.changesets.count
550 584 @repository.fetch_changesets
551 585 @project.reload
552 586 assert_equal NUM_REV, @repository.changesets.count
553 587 %w|2a682156a3b6e77a8bf9cd4590e8db757f3c6c78 2a682156a3b6e77a|.each do |r1|
554 588 changeset = @repository.find_changeset_by_name(r1)
555 589 assert_nil changeset.next
556 590 end
557 591 end
558 592 else
559 593 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
560 594 def test_fake; assert true end
561 595 end
562 596 end
General Comments 0
You need to be logged in to leave comments. Login now