@@ -0,0 +1,13 | |||
|
1 | class CreateChangesetsIssues < ActiveRecord::Migration | |
|
2 | def self.up | |
|
3 | create_table :changesets_issues, :id => false do |t| | |
|
4 | t.column :changeset_id, :integer, :null => false | |
|
5 | t.column :issue_id, :integer, :null => false | |
|
6 | end | |
|
7 | add_index :changesets_issues, [:changeset_id, :issue_id], :unique => true, :name => :changesets_issues_ids | |
|
8 | end | |
|
9 | ||
|
10 | def self.down | |
|
11 | drop_table :changesets_issues | |
|
12 | end | |
|
13 | end |
@@ -0,0 +1,38 | |||
|
1 | --- | |
|
2 | changesets_001: | |
|
3 | commit_date: 2007-04-11 | |
|
4 | committed_on: 2007-04-11 15:14:44 +02:00 | |
|
5 | revision: 1 | |
|
6 | id: 100 | |
|
7 | comment: My very first commit | |
|
8 | repository_id: 10 | |
|
9 | committer: dlopper | |
|
10 | changesets_002: | |
|
11 | commit_date: 2007-04-12 | |
|
12 | committed_on: 2007-04-12 15:14:44 +02:00 | |
|
13 | revision: 2 | |
|
14 | id: 101 | |
|
15 | comment: 'This commit fixes #1, #2 and references #3' | |
|
16 | repository_id: 10 | |
|
17 | committer: dlopper | |
|
18 | changesets_003: | |
|
19 | commit_date: 2007-04-12 | |
|
20 | committed_on: 2007-04-12 15:14:44 +02:00 | |
|
21 | revision: 3 | |
|
22 | id: 102 | |
|
23 | comment: |- | |
|
24 | A commit with wrong issue ids | |
|
25 | IssueID 666 3 | |
|
26 | repository_id: 10 | |
|
27 | committer: dlopper | |
|
28 | changesets_004: | |
|
29 | commit_date: 2007-04-12 | |
|
30 | committed_on: 2007-04-12 15:14:44 +02:00 | |
|
31 | revision: 4 | |
|
32 | id: 103 | |
|
33 | comment: |- | |
|
34 | A commit with an issue id of an other project | |
|
35 | IssueID 4 2 | |
|
36 | repository_id: 10 | |
|
37 | committer: dlopper | |
|
38 | No newline at end of file |
@@ -0,0 +1,8 | |||
|
1 | --- | |
|
2 | repositories_001: | |
|
3 | project_id: 1 | |
|
4 | url: svn://localhost/test | |
|
5 | id: 10 | |
|
6 | root_url: svn://localhost | |
|
7 | password: "" | |
|
8 | login: "" |
@@ -0,0 +1,59 | |||
|
1 | # redMine - project management software | |
|
2 | # Copyright (C) 2006-2007 Jean-Philippe Lang | |
|
3 | # | |
|
4 | # This program is free software; you can redistribute it and/or | |
|
5 | # modify it under the terms of the GNU General Public License | |
|
6 | # as published by the Free Software Foundation; either version 2 | |
|
7 | # of the License, or (at your option) any later version. | |
|
8 | # | |
|
9 | # This program is distributed in the hope that it will be useful, | |
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
|
12 | # GNU General Public License for more details. | |
|
13 | # | |
|
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 | |
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
|
17 | ||
|
18 | require File.dirname(__FILE__) + '/../test_helper' | |
|
19 | ||
|
20 | class RepositoryTest < Test::Unit::TestCase | |
|
21 | fixtures :projects, :repositories, :issues, :issue_statuses, :changesets | |
|
22 | ||
|
23 | def test_create | |
|
24 | repository = Repository.new(:project => Project.find(2)) | |
|
25 | assert !repository.save | |
|
26 | ||
|
27 | repository.url = "svn://localhost" | |
|
28 | assert repository.save | |
|
29 | repository.reload | |
|
30 | ||
|
31 | project = Project.find(2) | |
|
32 | assert_equal repository, project.repository | |
|
33 | end | |
|
34 | ||
|
35 | def test_cant_change_url | |
|
36 | repository = Project.find(1).repository | |
|
37 | url = repository.url | |
|
38 | repository.url = "svn://anotherhost" | |
|
39 | assert_equal url, repository.url | |
|
40 | end | |
|
41 | ||
|
42 | def test_scan_changesets_for_issue_ids | |
|
43 | # choosing a status to apply to fix issues | |
|
44 | Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id | |
|
45 | ||
|
46 | # make sure issue 1 is not already closed | |
|
47 | assert !Issue.find(1).status.is_closed? | |
|
48 | ||
|
49 | Repository.scan_changesets_for_issue_ids | |
|
50 | assert_equal [101, 102], Issue.find(3).changeset_ids | |
|
51 | ||
|
52 | # fixed issues | |
|
53 | assert Issue.find(1).status.is_closed? | |
|
54 | assert_equal [101], Issue.find(1).changeset_ids | |
|
55 | ||
|
56 | # ignoring commits referencing an issue of another project | |
|
57 | assert_equal [], Issue.find(4).changesets | |
|
58 | end | |
|
59 | end |
@@ -18,6 +18,7 | |||
|
18 | 18 | class Changeset < ActiveRecord::Base |
|
19 | 19 | belongs_to :repository |
|
20 | 20 | has_many :changes, :dependent => :delete_all |
|
21 | has_and_belongs_to_many :issues | |
|
21 | 22 | |
|
22 | 23 | validates_presence_of :repository_id, :revision, :committed_on, :commit_date |
|
23 | 24 | validates_numericality_of :revision, :only_integer => true |
@@ -27,4 +28,41 class Changeset < ActiveRecord::Base | |||
|
27 | 28 | self.commit_date = date |
|
28 | 29 | super |
|
29 | 30 | end |
|
31 | ||
|
32 | def after_create | |
|
33 | scan_comment_for_issue_ids | |
|
34 | end | |
|
35 | ||
|
36 | def scan_comment_for_issue_ids | |
|
37 | return if comment.blank? | |
|
38 | # keywords used to reference issues | |
|
39 | ref_keywords = Setting.commit_ref_keywords.downcase.split(",") | |
|
40 | # keywords used to fix issues | |
|
41 | fix_keywords = Setting.commit_fix_keywords.downcase.split(",") | |
|
42 | # status applied | |
|
43 | fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) | |
|
44 | ||
|
45 | kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw.strip)}.join("|") | |
|
46 | return if kw_regexp.blank? | |
|
47 | ||
|
48 | # remove any associated issues | |
|
49 | self.issues.clear | |
|
50 | ||
|
51 | comment.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match| | |
|
52 | action = match[0] | |
|
53 | target_issue_ids = match[1].scan(/\d+/) | |
|
54 | target_issues = repository.project.issues.find_all_by_id(target_issue_ids) | |
|
55 | if fix_status && fix_keywords.include?(action.downcase) | |
|
56 | # update status of issues | |
|
57 | logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? | |
|
58 | target_issues.each do |issue| | |
|
59 | # don't change the status is the issue is already closed | |
|
60 | next if issue.status.is_closed? | |
|
61 | issue.status = fix_status | |
|
62 | issue.save | |
|
63 | end | |
|
64 | end | |
|
65 | self.issues << target_issues | |
|
66 | end | |
|
67 | end | |
|
30 | 68 | end |
@@ -31,7 +31,8 class Issue < ActiveRecord::Base | |||
|
31 | 31 | has_many :time_entries |
|
32 | 32 | has_many :custom_values, :dependent => :delete_all, :as => :customized |
|
33 | 33 | has_many :custom_fields, :through => :custom_values |
|
34 | ||
|
34 | has_and_belongs_to_many :changesets, :order => "revision ASC" | |
|
35 | ||
|
35 | 36 | acts_as_watchable |
|
36 | 37 | |
|
37 | 38 | validates_presence_of :subject, :description, :priority, :tracker, :author, :status |
@@ -79,10 +79,19 class Repository < ActiveRecord::Base | |||
|
79 | 79 | end |
|
80 | 80 | end |
|
81 | 81 | |
|
82 | def scan_changesets_for_issue_ids | |
|
83 | self.changesets.each(&:scan_comment_for_issue_ids) | |
|
84 | end | |
|
85 | ||
|
82 | 86 | # fetch new changesets for all repositories |
|
83 | 87 | # can be called periodically by an external script |
|
84 | 88 | # eg. ruby script/runner "Repository.fetch_changesets" |
|
85 | 89 | def self.fetch_changesets |
|
86 | 90 | find(:all).each(&:fetch_changesets) |
|
87 | 91 | end |
|
92 | ||
|
93 | # scan changeset comments to find related and fixed issues for all repositories | |
|
94 | def self.scan_changesets_for_issue_ids | |
|
95 | find(:all).each(&:scan_changesets_for_issue_ids) | |
|
96 | end | |
|
88 | 97 | end |
@@ -44,7 +44,12 end %> | |||
|
44 | 44 | </tr> |
|
45 | 45 | </table> |
|
46 | 46 | <hr /> |
|
47 | <br /> | |
|
47 | ||
|
48 | <% if @issue.changesets.any? %> | |
|
49 | <div style="float:right;"> | |
|
50 | <em><%= l(:label_revision_plural) %>: <%= @issue.changesets.collect{|changeset| link_to(changeset.revision, :controller => 'repositories', :action => 'revision', :id => @project, :rev => changeset.revision)}.join(", ") %></em> | |
|
51 | </div> | |
|
52 | <% end %> | |
|
48 | 53 | |
|
49 | 54 | <b><%=l(:field_description)%> :</b><br /><br /> |
|
50 | 55 | <%= textilizable @issue.description %> |
@@ -10,6 +10,15 | |||
|
10 | 10 | <p><em><%= @changeset.committer %>, <%= format_time(@changeset.committed_on) %></em></p> |
|
11 | 11 | <%= textilizable @changeset.comment %> |
|
12 | 12 | |
|
13 | <% if @changeset.issues.any? %> | |
|
14 | <h3><%= l(:label_related_issues) %></h3> | |
|
15 | <ul> | |
|
16 | <% @changeset.issues.each do |issue| %> | |
|
17 | <li><%= link_to_issue issue %>: <%=h issue.subject %></li> | |
|
18 | <% end %> | |
|
19 | </ul> | |
|
20 | <% end %> | |
|
21 | ||
|
13 | 22 | <div style="float:right;"> |
|
14 | 23 | <div class="square action_A"></div> <div style="float:left;"><%= l(:label_added) %> </div> |
|
15 | 24 | <div class="square action_M"></div> <div style="float:left;"><%= l(:label_modified) %> </div> |
@@ -50,8 +50,18 | |||
|
50 | 50 | |
|
51 | 51 | <p><label><%= l(:setting_sys_api_enabled) %></label> |
|
52 | 52 | <%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %><%= hidden_field_tag 'settings[sys_api_enabled]', 0 %></p> |
|
53 | ||
|
54 | 53 | </div> |
|
54 | ||
|
55 | <fieldset class="box"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend> | |
|
56 | <p><label><%= l(:setting_commit_ref_keywords) %></label> | |
|
57 | <%= text_field_tag 'settings[commit_ref_keywords]', Setting.commit_ref_keywords, :size => 30 %><br /><em><%= l(:text_coma_separated) %></em></p> | |
|
58 | ||
|
59 | <p><label><%= l(:setting_commit_fix_keywords) %></label> | |
|
60 | <%= text_field_tag 'settings[commit_fix_keywords]', Setting.commit_fix_keywords, :size => 30 %> | |
|
61 | <%= l(:label_applied_status) %>: <%= select_tag 'settings[commit_fix_status_id]', options_for_select( [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, Setting.commit_fix_status_id) %> | |
|
62 | <br /><em><%= l(:text_coma_separated) %></em></p> | |
|
63 | </fieldset> | |
|
64 | ||
|
55 | 65 | <%= submit_tag l(:button_save) %> |
|
56 | 66 | </div> |
|
57 | 67 | <% end %> No newline at end of file |
@@ -54,3 +54,11 autofetch_changesets: | |||
|
54 | 54 | default: 1 |
|
55 | 55 | sys_api_enabled: |
|
56 | 56 | default: 0 |
|
57 | commit_ref_keywords: | |
|
58 | default: 'refs,references,IssueID' | |
|
59 | commit_fix_keywords: | |
|
60 | default: 'fixes,closes' | |
|
61 | commit_fix_status_id: | |
|
62 | format: int | |
|
63 | default: 0 | |
|
64 | No newline at end of file |
@@ -164,6 +164,8 setting_wiki_compression: Wiki-Historie komprimieren | |||
|
164 | 164 | setting_feeds_limit: Limit Feed Inhalt |
|
165 | 165 | setting_autofetch_changesets: Autofetch SVN commits |
|
166 | 166 | setting_sys_api_enabled: Enable WS for repository management |
|
167 | setting_commit_ref_keywords: Referencing keywords | |
|
168 | setting_commit_fix_keywords: Fixing keywords | |
|
167 | 169 | |
|
168 | 170 | label_user: Benutzer |
|
169 | 171 | label_user_plural: Benutzer |
@@ -358,6 +360,8 label_options: Options | |||
|
358 | 360 | label_copy_workflow_from: Copy workflow from |
|
359 | 361 | label_permissions_report: Permissions report |
|
360 | 362 | label_watched_issues: Watched issues |
|
363 | label_related_issues: Related issues | |
|
364 | label_applied_status: Applied status | |
|
361 | 365 | |
|
362 | 366 | button_login: Einloggen |
|
363 | 367 | button_submit: OK |
@@ -408,6 +412,8 text_caracters_maximum: %d characters maximum. | |||
|
408 | 412 | text_length_between: Length between %d and %d characters. |
|
409 | 413 | text_tracker_no_workflow: No workflow defined for this tracker |
|
410 | 414 | text_unallowed_characters: Unallowed characters |
|
415 | text_coma_separated: Multiple values allowed (coma separated). | |
|
416 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Manager |
|
413 | 419 | default_role_developper: Developer |
@@ -164,6 +164,8 setting_wiki_compression: Wiki history compression | |||
|
164 | 164 | setting_feeds_limit: Feed content limit |
|
165 | 165 | setting_autofetch_changesets: Autofetch SVN commits |
|
166 | 166 | setting_sys_api_enabled: Enable WS for repository management |
|
167 | setting_commit_ref_keywords: Referencing keywords | |
|
168 | setting_commit_fix_keywords: Fixing keywords | |
|
167 | 169 | |
|
168 | 170 | label_user: User |
|
169 | 171 | label_user_plural: Users |
@@ -358,6 +360,8 label_options: Options | |||
|
358 | 360 | label_copy_workflow_from: Copy workflow from |
|
359 | 361 | label_permissions_report: Permissions report |
|
360 | 362 | label_watched_issues: Watched issues |
|
363 | label_related_issues: Related issues | |
|
364 | label_applied_status: Applied status | |
|
361 | 365 | |
|
362 | 366 | button_login: Login |
|
363 | 367 | button_submit: Submit |
@@ -408,6 +412,8 text_caracters_maximum: %d characters maximum. | |||
|
408 | 412 | text_length_between: Length between %d and %d characters. |
|
409 | 413 | text_tracker_no_workflow: No workflow defined for this tracker |
|
410 | 414 | text_unallowed_characters: Unallowed characters |
|
415 | text_coma_separated: Multiple values allowed (coma separated). | |
|
416 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Manager |
|
413 | 419 | default_role_developper: Developer |
@@ -164,6 +164,8 setting_wiki_compression: Compresión de la historia de Wiki | |||
|
164 | 164 | setting_feeds_limit: Feed content limit |
|
165 | 165 | setting_autofetch_changesets: Autofetch SVN commits |
|
166 | 166 | setting_sys_api_enabled: Enable WS for repository management |
|
167 | setting_commit_ref_keywords: Referencing keywords | |
|
168 | setting_commit_fix_keywords: Fixing keywords | |
|
167 | 169 | |
|
168 | 170 | label_user: Usuario |
|
169 | 171 | label_user_plural: Usuarios |
@@ -358,6 +360,8 label_options: Options | |||
|
358 | 360 | label_copy_workflow_from: Copy workflow from |
|
359 | 361 | label_permissions_report: Permissions report |
|
360 | 362 | label_watched_issues: Watched issues |
|
363 | label_related_issues: Related issues | |
|
364 | label_applied_status: Applied status | |
|
361 | 365 | |
|
362 | 366 | button_login: Conexión |
|
363 | 367 | button_submit: Someter |
@@ -408,6 +412,8 text_caracters_maximum: %d characters maximum. | |||
|
408 | 412 | text_length_between: Length between %d and %d characters. |
|
409 | 413 | text_tracker_no_workflow: No workflow defined for this tracker |
|
410 | 414 | text_unallowed_characters: Unallowed characters |
|
415 | text_coma_separated: Multiple values allowed (coma separated). | |
|
416 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Manager |
|
413 | 419 | default_role_developper: Desarrollador |
@@ -164,6 +164,8 setting_wiki_compression: Compression historique wiki | |||
|
164 | 164 | setting_feeds_limit: Limite du contenu des flux RSS |
|
165 | 165 | setting_autofetch_changesets: Récupération auto. des commits SVN |
|
166 | 166 | setting_sys_api_enabled: Activer les WS pour la gestion des dépôts |
|
167 | setting_commit_ref_keywords: Mot-clés de référencement | |
|
168 | setting_commit_fix_keywords: Mot-clés de résolution | |
|
167 | 169 | |
|
168 | 170 | label_user: Utilisateur |
|
169 | 171 | label_user_plural: Utilisateurs |
@@ -358,6 +360,8 label_options: Options | |||
|
358 | 360 | label_copy_workflow_from: Copier le workflow de |
|
359 | 361 | label_permissions_report: Synthèse des permissions |
|
360 | 362 | label_watched_issues: Demandes surveillées |
|
363 | label_related_issues: Demandes liées | |
|
364 | label_applied_status: Statut appliqué | |
|
361 | 365 | |
|
362 | 366 | button_login: Connexion |
|
363 | 367 | button_submit: Soumettre |
@@ -408,6 +412,8 text_caracters_maximum: %d caractères maximum. | |||
|
408 | 412 | text_length_between: Longueur comprise entre %d et %d caractères. |
|
409 | 413 | text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker |
|
410 | 414 | text_unallowed_characters: Caractères non autorisés |
|
415 | text_coma_separated: Plusieurs valeurs possibles (séparées par des virgules). | |
|
416 | text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires SVN | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Manager |
|
413 | 419 | default_role_developper: Développeur |
@@ -164,6 +164,8 setting_wiki_compression: Compressione di storia di Wiki | |||
|
164 | 164 | setting_feeds_limit: Limite contenuti del feed |
|
165 | 165 | setting_autofetch_changesets: Acquisisci automaticamente le commit SVN |
|
166 | 166 | setting_sys_api_enabled: Abilita WS per la gestione del repository |
|
167 | setting_commit_ref_keywords: Referencing keywords | |
|
168 | setting_commit_fix_keywords: Fixing keywords | |
|
167 | 169 | |
|
168 | 170 | label_user: Utente |
|
169 | 171 | label_user_plural: Utenti |
@@ -358,6 +360,8 label_options: Opzioni | |||
|
358 | 360 | label_copy_workflow_from: Copia workflow da |
|
359 | 361 | label_permissions_report: Report permessi |
|
360 | 362 | label_watched_issues: Watched issues |
|
363 | label_related_issues: Related issues | |
|
364 | label_applied_status: Applied status | |
|
361 | 365 | |
|
362 | 366 | button_login: Login |
|
363 | 367 | button_submit: Invia |
@@ -408,6 +412,8 text_caracters_maximum: massimo %d caratteri. | |||
|
408 | 412 | text_length_between: Lunghezza compresa tra %d e %d caratteri. |
|
409 | 413 | text_tracker_no_workflow: Nessun workflow definito per questo tracker |
|
410 | 414 | text_unallowed_characters: Unallowed characters |
|
415 | text_coma_separated: Multiple values allowed (coma separated). | |
|
416 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Manager |
|
413 | 419 | default_role_developper: Sviluppatore |
@@ -165,6 +165,8 setting_wiki_compression: Wiki履歴を圧縮する | |||
|
165 | 165 | setting_feeds_limit: フィード内容の上限 |
|
166 | 166 | setting_autofetch_changesets: SVNコミットを自動取得する |
|
167 | 167 | setting_sys_api_enabled: リポジトリ管理用のWeb Serviceを有効化する |
|
168 | setting_commit_ref_keywords: Referencing keywords | |
|
169 | setting_commit_fix_keywords: Fixing keywords | |
|
168 | 170 | |
|
169 | 171 | label_user: ユーザ |
|
170 | 172 | label_user_plural: ユーザ |
@@ -359,6 +361,8 label_options: オプション | |||
|
359 | 361 | label_copy_workflow_from: ワークフローをここからコピー |
|
360 | 362 | label_permissions_report: 権限レポート |
|
361 | 363 | label_watched_issues: Watched issues |
|
364 | label_related_issues: Related issues | |
|
365 | label_applied_status: Applied status | |
|
362 | 366 | |
|
363 | 367 | button_login: ログイン |
|
364 | 368 | button_submit: 変更 |
@@ -409,6 +413,8 text_caracters_maximum: 最大 %d 文字です。 | |||
|
409 | 413 | text_length_between: 長さは %d から %d 文字までです。 |
|
410 | 414 | text_tracker_no_workflow: このトラッカーにワークフローが定義されていません |
|
411 | 415 | text_unallowed_characters: Unallowed characters |
|
416 | text_coma_separated: Multiple values allowed (coma separated). | |
|
417 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
412 | 418 | |
|
413 | 419 | default_role_manager: 管理者 |
|
414 | 420 | default_role_developper: 開発者 |
@@ -164,6 +164,8 setting_wiki_compression: Compactacao do historio do Wiki | |||
|
164 | 164 | setting_feeds_limit: Limite do Feed |
|
165 | 165 | setting_autofetch_changesets: Autofetch SVN commits |
|
166 | 166 | setting_sys_api_enabled: Ativa WS para gerenciamento do repositorio |
|
167 | setting_commit_ref_keywords: Referencing keywords | |
|
168 | setting_commit_fix_keywords: Fixing keywords | |
|
167 | 169 | |
|
168 | 170 | label_user: Usuario |
|
169 | 171 | label_user_plural: Usuarios |
@@ -358,6 +360,8 label_options: Opcoes | |||
|
358 | 360 | label_copy_workflow_from: Copiar workflow de |
|
359 | 361 | label_permissions_report: Relatorio de permissoes |
|
360 | 362 | label_watched_issues: Watched issues |
|
363 | label_related_issues: Related issues | |
|
364 | label_applied_status: Applied status | |
|
361 | 365 | |
|
362 | 366 | button_login: Login |
|
363 | 367 | button_submit: Enviar |
@@ -408,6 +412,8 text_caracters_maximum: %d maximo de caracteres | |||
|
408 | 412 | text_length_between: Tamanho entre %d e %d caracteres. |
|
409 | 413 | text_tracker_no_workflow: Sem workflow definido para este tipo. |
|
410 | 414 | text_unallowed_characters: Unallowed characters |
|
415 | text_coma_separated: Multiple values allowed (coma separated). | |
|
416 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
411 | 417 | |
|
412 | 418 | default_role_manager: Analista de Negocio ou Gerente de Projeto |
|
413 | 419 | default_role_developper: Desenvolvedor |
@@ -167,6 +167,8 setting_wiki_compression: Wiki history compression | |||
|
167 | 167 | setting_feeds_limit: Feed content limit |
|
168 | 168 | setting_autofetch_changesets: Autofetch SVN commits |
|
169 | 169 | setting_sys_api_enabled: Enable WS for repository management |
|
170 | setting_commit_ref_keywords: Referencing keywords | |
|
171 | setting_commit_fix_keywords: Fixing keywords | |
|
170 | 172 | |
|
171 | 173 | label_user: 用户 |
|
172 | 174 | label_user_plural: 用户列表 |
@@ -361,6 +363,8 label_options: Options | |||
|
361 | 363 | label_copy_workflow_from: Copy workflow from |
|
362 | 364 | label_permissions_report: Permissions report |
|
363 | 365 | label_watched_issues: Watched issues |
|
366 | label_related_issues: Related issues | |
|
367 | label_applied_status: Applied status | |
|
364 | 368 | |
|
365 | 369 | button_login: 登录 |
|
366 | 370 | button_submit: 提交 |
@@ -411,6 +415,8 text_caracters_maximum: %d characters maximum. | |||
|
411 | 415 | text_length_between: Length between %d and %d characters. |
|
412 | 416 | text_tracker_no_workflow: No workflow defined for this tracker |
|
413 | 417 | text_unallowed_characters: Unallowed characters |
|
418 | text_coma_separated: Multiple values allowed (coma separated). | |
|
419 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
|
414 | 420 | |
|
415 | 421 | default_role_manager: 管理员 |
|
416 | 422 | default_role_developper: 开发人员 |
@@ -602,8 +602,8 margin*/ | |||
|
602 | 602 | color: #cc0000; |
|
603 | 603 | } |
|
604 | 604 | |
|
605 |
#settings .tabular p{ padding-left: |
|
|
606 |
#settings .tabular label{ margin-left: - |
|
|
605 | #settings .tabular p{ padding-left: 300px; } | |
|
606 | #settings .tabular label{ margin-left: -300px; width: 295px; } | |
|
607 | 607 | |
|
608 | 608 | /*.threepxfix class below: |
|
609 | 609 | Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents. |
@@ -41,3 +41,18 issues_003: | |||
|
41 | 41 | assigned_to_id: |
|
42 | 42 | author_id: 2 |
|
43 | 43 | status_id: 1 |
|
44 | issues_004: | |
|
45 | created_on: 2006-07-19 21:07:27 +02:00 | |
|
46 | project_id: 2 | |
|
47 | updated_on: 2006-07-19 21:07:27 +02:00 | |
|
48 | priority_id: 4 | |
|
49 | subject: Issue on project 2 | |
|
50 | id: 4 | |
|
51 | fixed_version_id: | |
|
52 | category_id: | |
|
53 | description: Issue on project 2 | |
|
54 | tracker_id: 1 | |
|
55 | assigned_to_id: | |
|
56 | author_id: 2 | |
|
57 | status_id: 1 | |
|
58 | No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now