Index: app/models/changeset.rb
===================================================================
--- app/models/changeset.rb (revision 18510)
+++ app/models/changeset.rb (revision 18511)
@@ -88,21 +88,35 @@
return if kw_regexp.blank?
referenced_issues = []
-
+ log_time = []
+
+ logger.debug "Changeset comment: #{comments}" if logger && logger.debug?
+
if ref_keywords.delete('*')
# find any issue ID in the comments
target_issue_ids = []
- comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
+ comments.scan(%r{([\s\(\[,-]|^)#(\d+)([\s]*@(\d+[.]\d+|(\d+[hm]\s?){1,2}))?(?=[[:punct:]]|\s|<|$)}).each do |m|
+ target_issue_ids << m[1]
+ log_time << [m[1], (m[2] != nil ? m[2].scan(/(\d+[.]\d+|(\d+[hm]\s?){1,2})/)[0][0] : 0)]
+ end
+
referenced_issues += find_referenced_issues_by_id(target_issue_ids)
end
- comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
+ comments.scan(Regexp.new("(#{kw_regexp})[\s:]+((([\s,;&]*([^@]|#?)\\d+)([\s]*@(\\d+[.]\\d+|(\\d+[hm]\s?){1,2}))?)+)", Regexp::IGNORECASE)).each do |match|
action = match[0]
- target_issue_ids = match[1].scan(/\d+/)
+
+ target_issues_with_log = match[1].scan(/([\s,;&]*([^@]|#?)\d+)([\s]*@(\d+[.]\d+|(\d+[hm]\s?){1,2}))/)
+ target_issues_with_log.collect! { |x| [ x[0].scan(/\d+/)[0], (x[2] != nil ? x[3].scan(/(\d+[.]\d+|(\d+[hm]\s?){1,2})/)[0][0] : 0) ] }
+
+ log_time += target_issues_with_log
+
+ target_issue_ids = target_issues_with_log.collect {|x| x[0]}
target_issues = find_referenced_issues_by_id(target_issue_ids)
+
if fix_status && fix_keywords.include?(action.downcase)
# update status of issues
- logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
+ logger.debug "Issues fixed by changeset #{self.revision}: #{target_issue_ids.join(', ')}." if logger && logger.debug?
target_issues.each do |issue|
# the issue may have been updated by the closure of another one (eg. duplicate)
issue.reload
@@ -120,8 +134,60 @@
issue.save
end
end
+
referenced_issues += target_issues
end
+
+ if Setting.commit_logtime_enabled?
+ log_time.uniq.each do |issue_wl|
+ next if issue_wl[1] == nil || issue_wl[1] == 0
+
+ issue_id = issue_wl[0]
+ issue_hours = issue_wl[1]
+
+ match = issue_hours.match(/\d+[.]\d+/)
+
+ if match != nil
+ issue_hours = match[0].to_f
+ else
+ hours = ((match = issue_hours.scan(/(\d+)h/)).size == 1 ? match[0][0] : 0)
+ minutes = ((match = issue_hours.scan(/(\d+)m/)).size == 1 ? match[0][0] : 0)
+
+ hours = (hours == nil ? 0 : hours.to_i)
+ minutes = (minutes == nil ? 0 : minutes.to_i)
+
+ issue_hours = ((hours.to_f + minutes.to_f / 60.0) * 100.0).round / 100.0
+ end
+
+ next if issue_hours.to_f <= 0
+
+ logger.debug "Log time for issue #{issue_id} - #{issue_hours}." if logger && logger.debug?
+
+ issue = repository.project.issues.find_by_id(issue_id)
+
+ activity = TimeEntryActivity.default
+ if activity == nil
+ activity = TimeEntryActivity.find(:first)
+ end
+
+ next if activity == nil || issue == nil || user == nil
+
+ csettext = "from revision r#{self.revision}"
+ if self.scmid && (! (csettext =~ /^r[0-9]+$/))
+ csettext = "from revision \"#{self.scmid}\""
+ end
+
+ timeentry = TimeEntry.create(:project => repository.project,
+ :issue => issue,
+ :user => user,
+ :spent_on => self.commit_date,
+ :hours => issue_hours,
+ :activity_id => activity.id,
+ :comments => csettext)
+
+ timeentry.save
+ end
+ end
self.issues = referenced_issues.uniq
end
Index: app/views/settings/_repositories.rhtml
===================================================================
--- app/views/settings/_repositories.rhtml (revision 18510)
+++ app/views/settings/_repositories.rhtml (revision 18511)
@@ -31,6 +31,10 @@
<%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
<%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
<%= l(:text_comma_separated) %>
+
+
+<%= hidden_field_tag 'settings[commit_logtime_enabled]', 0 %><%= check_box_tag 'settings[commit_logtime_enabled]', 1, Setting.commit_logtime_enabled? %>
+
<%= l(:text_commit_logtime) %>
<%= submit_tag l(:button_save) %>
Index: config/settings.yml
===================================================================
--- config/settings.yml (revision 18510)
+++ config/settings.yml (revision 18511)
@@ -96,6 +96,9 @@
default: 0
commit_fix_done_ratio:
default: 100
+commit_logtime_enabled:
+ format: int
+ default: 0
# autologin duration in days
# 0 means autologin is disabled
autologin:
Index: config/locales/ro.yml
===================================================================
--- config/locales/ro.yml (revision 18510)
+++ config/locales/ro.yml (revision 18511)
@@ -831,6 +831,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/zh.yml
===================================================================
--- config/locales/zh.yml (revision 18510)
+++ config/locales/zh.yml (revision 18511)
@@ -377,6 +377,9 @@
permission_view_issue_watchers: 查看跟踪者列表
permission_add_issue_watchers: 添加跟踪者
permission_delete_issue_watchers: 删除跟踪者
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
permission_log_time: 登记工时
permission_view_time_entries: 查看耗时
permission_edit_time_entries: 编辑耗时
Index: config/locales/pt.yml
===================================================================
--- config/locales/pt.yml (revision 18510)
+++ config/locales/pt.yml (revision 18511)
@@ -846,6 +846,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/ca.yml
===================================================================
--- config/locales/ca.yml (revision 18510)
+++ config/locales/ca.yml (revision 18511)
@@ -831,6 +831,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/tr.yml
===================================================================
--- config/locales/tr.yml (revision 18510)
+++ config/locales/tr.yml (revision 18511)
@@ -861,6 +861,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/el.yml
===================================================================
--- config/locales/el.yml (revision 18510)
+++ config/locales/el.yml (revision 18511)
@@ -834,6 +834,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/en.yml
===================================================================
--- config/locales/en.yml (revision 18510)
+++ config/locales/en.yml (revision 18511)
@@ -899,4 +899,7 @@
enumeration_doc_categories: Document categories
enumeration_activities: Activities (time tracking)
enumeration_system_activity: System Activity
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
Index: config/locales/gl.yml
===================================================================
--- config/locales/gl.yml (revision 18510)
+++ config/locales/gl.yml (revision 18511)
@@ -854,6 +854,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/cs.yml
===================================================================
--- config/locales/cs.yml (revision 18510)
+++ config/locales/cs.yml (revision 18511)
@@ -834,6 +834,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/it.yml
===================================================================
--- config/locales/it.yml (revision 18510)
+++ config/locales/it.yml (revision 18511)
@@ -841,6 +841,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/sk.yml
===================================================================
--- config/locales/sk.yml (revision 18510)
+++ config/locales/sk.yml (revision 18511)
@@ -833,6 +833,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/sl.yml
===================================================================
--- config/locales/sl.yml (revision 18510)
+++ config/locales/sl.yml (revision 18511)
@@ -830,6 +830,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/uk.yml
===================================================================
--- config/locales/uk.yml (revision 18510)
+++ config/locales/uk.yml (revision 18511)
@@ -830,6 +830,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/da.yml
===================================================================
--- config/locales/da.yml (revision 18510)
+++ config/locales/da.yml (revision 18511)
@@ -854,6 +854,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/sr.yml
===================================================================
--- config/locales/sr.yml (revision 18510)
+++ config/locales/sr.yml (revision 18511)
@@ -849,6 +849,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/bg.yml
===================================================================
--- config/locales/bg.yml (revision 18510)
+++ config/locales/bg.yml (revision 18511)
@@ -828,6 +828,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/he.yml
===================================================================
--- config/locales/he.yml (revision 18510)
+++ config/locales/he.yml (revision 18511)
@@ -838,6 +838,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/fi.yml
===================================================================
--- config/locales/fi.yml (revision 18510)
+++ config/locales/fi.yml (revision 18511)
@@ -864,6 +864,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/bs.yml
===================================================================
--- config/locales/bs.yml (revision 18510)
+++ config/locales/bs.yml (revision 18511)
@@ -852,6 +852,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/fr.yml
===================================================================
--- config/locales/fr.yml (revision 18510)
+++ config/locales/fr.yml (revision 18511)
@@ -906,5 +906,8 @@
text_journal_deleted: "{{label}} {{old}} supprimé"
text_journal_added: "{{label}} {{value}} ajouté"
enumeration_system_activity: Activité système
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
label_board_sticky: Sticky
label_board_locked: Verrouillé
Index: config/locales/nl.yml
===================================================================
--- config/locales/nl.yml (revision 18510)
+++ config/locales/nl.yml (revision 18511)
@@ -816,6 +816,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/hr.yml
===================================================================
--- config/locales/hr.yml (revision 18510)
+++ config/locales/hr.yml (revision 18511)
@@ -353,6 +353,9 @@
permission_view_issue_watchers: Pregledaj listu promatraca
permission_add_issue_watchers: Dodaj promatrača
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
permission_log_time: Dnevnik utrošenog vremena
permission_view_time_entries: Pregledaj utrošeno vrijeme
permission_edit_time_entries: Uredi vremenske dnevnike
Index: config/locales/th.yml
===================================================================
--- config/locales/th.yml (revision 18510)
+++ config/locales/th.yml (revision 18511)
@@ -831,6 +831,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/no.yml
===================================================================
--- config/locales/no.yml (revision 18510)
+++ config/locales/no.yml (revision 18511)
@@ -829,6 +829,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/hu.yml
===================================================================
--- config/locales/hu.yml (revision 18510)
+++ config/locales/hu.yml (revision 18511)
@@ -859,6 +859,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open
Index: config/locales/vi.yml
===================================================================
--- config/locales/vi.yml (revision 18510)
+++ config/locales/vi.yml (revision 18511)
@@ -893,6 +893,9 @@
field_active: Active
enumeration_system_activity: System Activity
permission_delete_issue_watchers: Delete watchers
+ setting_commit_logtime_enabled: Enable time logging
+ text_commit_logtime: "Allows to log time in commit messages. Examples: refs #123 @1.5 or refs #123 @1h30m or fixes #123 @1h 30m (logs one hour and 30 minutes for issue #123)"
+
version_status_closed: closed
version_status_locked: locked
version_status_open: open