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