Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
gitlab-ce
Commits
e6d2e569
Commit
e6d2e569
authored
Jan 23, 2013
by
Andrew8xx8
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue tracker field added to projects
parent
8f621c9e
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
69 additions
and
315 deletions
+69
-315
app/helpers/issues_helper.rb
app/helpers/issues_helper.rb
+27
-0
app/models/project.rb
app/models/project.rb
+5
-1
app/views/projects/_form.html.haml
app/views/projects/_form.html.haml
+4
-0
config/gitlab.yml.example
config/gitlab.yml.example
+6
-0
db/migrate/20130123114545_add_issues_tracker_to_project.rb
db/migrate/20130123114545_add_issues_tracker_to_project.rb
+5
-0
db/schema.rb
db/schema.rb
+0
-312
lib/gitlab/markdown.rb
lib/gitlab/markdown.rb
+5
-2
spec/helpers/gitlab_markdown_helper_spec.rb
spec/helpers/gitlab_markdown_helper_spec.rb
+1
-0
spec/lib/issues_tracker_spec.rb
spec/lib/issues_tracker_spec.rb
+16
-0
No files found.
app/helpers/issues_helper.rb
View file @
e6d2e569
...
...
@@ -40,4 +40,31 @@ module IssuesHelper
def
issues_active_milestones
@project
.
milestones
.
active
.
order
(
"id desc"
).
all
end
def
url_for_issue
(
issue_id
)
if
@project
.
issues_tracker
==
Project
.
issues_tracker
.
default_value
url
=
project_issue_url
project_id:
@project
,
id:
issue_id
else
url
=
Settings
[
:issues_tracker
][
@project
.
issues_tracker
][
"issues_url"
]
url
.
gsub
(
':id'
,
issue_id
.
to_s
).
gsub
(
':project_id'
,
@project
.
id
.
to_s
)
end
end
def
title_for_issue
(
issue_id
)
if
issue
=
@project
.
issues
.
where
(
id:
issue_id
).
first
issue
.
title
else
""
end
end
def
issue_exists?
(
issue_id
)
return
false
if
@project
.
nil?
if
@project
.
issues_tracker
==
Project
.
issues_tracker
.
default_value
@project
.
issues
.
where
(
id:
issue_id
).
first
.
present?
else
true
end
end
end
app/models/project.rb
View file @
e6d2e569
...
...
@@ -11,6 +11,7 @@
# creator_id :integer
# default_branch :string(255)
# issues_enabled :boolean default(TRUE), not null
# issues_tracker :string not null
# wall_enabled :boolean default(TRUE), not null
# merge_requests_enabled :boolean default(TRUE), not null
# wiki_enabled :boolean default(TRUE), not null
...
...
@@ -22,10 +23,11 @@ require "grit"
class
Project
<
ActiveRecord
::
Base
include
Gitolited
extend
Enumerize
class
TransferError
<
StandardError
;
end
attr_accessible
:name
,
:path
,
:description
,
:default_branch
,
attr_accessible
:name
,
:path
,
:description
,
:default_branch
,
:issues_tracker
,
:issues_enabled
,
:wall_enabled
,
:merge_requests_enabled
,
:wiki_enabled
,
:public
,
:import_url
,
as:
[
:default
,
:admin
]
...
...
@@ -93,6 +95,8 @@ class Project < ActiveRecord::Base
scope
:joined
,
->
(
user
)
{
where
(
"namespace_id != ?"
,
user
.
namespace_id
)
}
scope
:public_only
,
->
{
where
(
public:
true
)
}
enumerize
:issues_tracker
,
:in
=>
(
Settings
[
:issues_tracker
].
keys
).
append
(
:gitlab
),
:default
=>
:gitlab
class
<<
self
def
abandoned
project_ids
=
Event
.
select
(
'max(created_at) as latest_date, project_id'
).
...
...
app/views/projects/_form.html.haml
View file @
e6d2e569
...
...
@@ -24,6 +24,10 @@
=
f
.
check_box
:issues_enabled
%span
.descr
Lightweight issue tracking system for this project
.control-group
=
f
.
label
:issues_tracker
,
"Issues tracker"
,
class:
'control-label'
.input
=
f
.
select
(
:issues_tracker
,
Project
.
issues_tracker
.
values
,
{},
{
disabled:
!
@project
.
issues_enabled
})
.control-group
=
f
.
label
:merge_requests_enabled
,
"Merge Requests"
,
class:
'control-label'
.controls
...
...
config/gitlab.yml.example
View file @
e6d2e569
...
...
@@ -7,6 +7,7 @@
# 2. Replace gitlab -> host with your domain
# 3. Replace gitlab -> email_from
<<<<<<< HEAD
production: &base
#
# 1. GitLab app settings
...
...
@@ -37,6 +38,11 @@ production: &base
# signup_enabled: true # default: false - Account passwords are not sent via the email if signup is enabled.
# username_changing_enabled: false # default: true - User can change her username/namespace
## Available issues trackers
issues_tracker:
redmine:
issues_url: "http://redmine.sample/issues/:id"
## Gravatar
gravatar:
enabled: true # Use user avatar images from Gravatar.com (default: true)
...
...
db/migrate/20130123114545_add_issues_tracker_to_project.rb
0 → 100644
View file @
e6d2e569
class
AddIssuesTrackerToProject
<
ActiveRecord
::
Migration
def
change
add_column
:projects
,
:issues_tracker
,
:string
,
default: :gitlab
,
null:
false
end
end
db/schema.rb
deleted
100644 → 0
View file @
8f621c9e
# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
:version
=>
20130220133245
)
do
create_table
"events"
,
:force
=>
true
do
|
t
|
t
.
string
"target_type"
t
.
integer
"target_id"
t
.
string
"title"
t
.
text
"data"
t
.
integer
"project_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
integer
"action"
t
.
integer
"author_id"
end
add_index
"events"
,
[
"action"
],
:name
=>
"index_events_on_action"
add_index
"events"
,
[
"author_id"
],
:name
=>
"index_events_on_author_id"
add_index
"events"
,
[
"created_at"
],
:name
=>
"index_events_on_created_at"
add_index
"events"
,
[
"project_id"
],
:name
=>
"index_events_on_project_id"
add_index
"events"
,
[
"target_id"
],
:name
=>
"index_events_on_target_id"
add_index
"events"
,
[
"target_type"
],
:name
=>
"index_events_on_target_type"
create_table
"issues"
,
:force
=>
true
do
|
t
|
t
.
string
"title"
t
.
integer
"assignee_id"
t
.
integer
"author_id"
t
.
integer
"project_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
integer
"position"
,
:default
=>
0
t
.
string
"branch_name"
t
.
text
"description"
t
.
integer
"milestone_id"
t
.
string
"state"
end
add_index
"issues"
,
[
"assignee_id"
],
:name
=>
"index_issues_on_assignee_id"
add_index
"issues"
,
[
"author_id"
],
:name
=>
"index_issues_on_author_id"
add_index
"issues"
,
[
"created_at"
],
:name
=>
"index_issues_on_created_at"
add_index
"issues"
,
[
"milestone_id"
],
:name
=>
"index_issues_on_milestone_id"
add_index
"issues"
,
[
"project_id"
],
:name
=>
"index_issues_on_project_id"
add_index
"issues"
,
[
"title"
],
:name
=>
"index_issues_on_title"
create_table
"keys"
,
:force
=>
true
do
|
t
|
t
.
integer
"user_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
text
"key"
t
.
string
"title"
t
.
string
"identifier"
t
.
integer
"project_id"
end
add_index
"keys"
,
[
"identifier"
],
:name
=>
"index_keys_on_identifier"
add_index
"keys"
,
[
"project_id"
],
:name
=>
"index_keys_on_project_id"
add_index
"keys"
,
[
"user_id"
],
:name
=>
"index_keys_on_user_id"
create_table
"merge_requests"
,
:force
=>
true
do
|
t
|
t
.
string
"target_branch"
,
:null
=>
false
t
.
string
"source_branch"
,
:null
=>
false
t
.
integer
"project_id"
,
:null
=>
false
t
.
integer
"author_id"
t
.
integer
"assignee_id"
t
.
string
"title"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
text
"st_commits"
,
:limit
=>
2147483647
t
.
text
"st_diffs"
,
:limit
=>
2147483647
t
.
integer
"milestone_id"
t
.
string
"state"
t
.
string
"merge_status"
end
add_index
"merge_requests"
,
[
"assignee_id"
],
:name
=>
"index_merge_requests_on_assignee_id"
add_index
"merge_requests"
,
[
"author_id"
],
:name
=>
"index_merge_requests_on_author_id"
add_index
"merge_requests"
,
[
"created_at"
],
:name
=>
"index_merge_requests_on_created_at"
add_index
"merge_requests"
,
[
"milestone_id"
],
:name
=>
"index_merge_requests_on_milestone_id"
add_index
"merge_requests"
,
[
"project_id"
],
:name
=>
"index_merge_requests_on_project_id"
add_index
"merge_requests"
,
[
"source_branch"
],
:name
=>
"index_merge_requests_on_source_branch"
add_index
"merge_requests"
,
[
"target_branch"
],
:name
=>
"index_merge_requests_on_target_branch"
add_index
"merge_requests"
,
[
"title"
],
:name
=>
"index_merge_requests_on_title"
create_table
"milestones"
,
:force
=>
true
do
|
t
|
t
.
string
"title"
,
:null
=>
false
t
.
integer
"project_id"
,
:null
=>
false
t
.
text
"description"
t
.
date
"due_date"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"state"
end
add_index
"milestones"
,
[
"due_date"
],
:name
=>
"index_milestones_on_due_date"
add_index
"milestones"
,
[
"project_id"
],
:name
=>
"index_milestones_on_project_id"
create_table
"namespaces"
,
:force
=>
true
do
|
t
|
t
.
string
"name"
,
:null
=>
false
t
.
string
"path"
,
:null
=>
false
t
.
integer
"owner_id"
,
:null
=>
false
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"type"
end
add_index
"namespaces"
,
[
"name"
],
:name
=>
"index_namespaces_on_name"
add_index
"namespaces"
,
[
"owner_id"
],
:name
=>
"index_namespaces_on_owner_id"
add_index
"namespaces"
,
[
"path"
],
:name
=>
"index_namespaces_on_path"
add_index
"namespaces"
,
[
"type"
],
:name
=>
"index_namespaces_on_type"
create_table
"notes"
,
:force
=>
true
do
|
t
|
t
.
text
"note"
t
.
string
"noteable_type"
t
.
integer
"author_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
integer
"project_id"
t
.
string
"attachment"
t
.
string
"line_code"
t
.
string
"commit_id"
t
.
integer
"noteable_id"
end
add_index
"notes"
,
[
"commit_id"
],
:name
=>
"index_notes_on_commit_id"
add_index
"notes"
,
[
"created_at"
],
:name
=>
"index_notes_on_created_at"
add_index
"notes"
,
[
"noteable_type"
],
:name
=>
"index_notes_on_noteable_type"
add_index
"notes"
,
[
"project_id"
,
"noteable_type"
],
:name
=>
"index_notes_on_project_id_and_noteable_type"
add_index
"notes"
,
[
"project_id"
],
:name
=>
"index_notes_on_project_id"
create_table
"projects"
,
:force
=>
true
do
|
t
|
t
.
string
"name"
t
.
string
"path"
t
.
text
"description"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
integer
"creator_id"
t
.
string
"default_branch"
t
.
boolean
"issues_enabled"
,
:default
=>
true
,
:null
=>
false
t
.
boolean
"wall_enabled"
,
:default
=>
true
,
:null
=>
false
t
.
boolean
"merge_requests_enabled"
,
:default
=>
true
,
:null
=>
false
t
.
boolean
"wiki_enabled"
,
:default
=>
true
,
:null
=>
false
t
.
integer
"namespace_id"
t
.
boolean
"public"
,
:default
=>
false
,
:null
=>
false
end
add_index
"projects"
,
[
"creator_id"
],
:name
=>
"index_projects_on_owner_id"
add_index
"projects"
,
[
"namespace_id"
],
:name
=>
"index_projects_on_namespace_id"
create_table
"protected_branches"
,
:force
=>
true
do
|
t
|
t
.
integer
"project_id"
,
:null
=>
false
t
.
string
"name"
,
:null
=>
false
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
end
create_table
"services"
,
:force
=>
true
do
|
t
|
t
.
string
"type"
t
.
string
"title"
t
.
string
"token"
t
.
integer
"project_id"
,
:null
=>
false
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
boolean
"active"
,
:default
=>
false
,
:null
=>
false
t
.
string
"project_url"
end
add_index
"services"
,
[
"project_id"
],
:name
=>
"index_services_on_project_id"
create_table
"snippets"
,
:force
=>
true
do
|
t
|
t
.
string
"title"
t
.
text
"content"
t
.
integer
"author_id"
,
:null
=>
false
t
.
integer
"project_id"
,
:null
=>
false
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"file_name"
t
.
datetime
"expires_at"
end
add_index
"snippets"
,
[
"created_at"
],
:name
=>
"index_snippets_on_created_at"
add_index
"snippets"
,
[
"expires_at"
],
:name
=>
"index_snippets_on_expires_at"
add_index
"snippets"
,
[
"project_id"
],
:name
=>
"index_snippets_on_project_id"
create_table
"taggings"
,
:force
=>
true
do
|
t
|
t
.
integer
"tag_id"
t
.
integer
"taggable_id"
t
.
string
"taggable_type"
t
.
integer
"tagger_id"
t
.
string
"tagger_type"
t
.
string
"context"
t
.
datetime
"created_at"
end
add_index
"taggings"
,
[
"tag_id"
],
:name
=>
"index_taggings_on_tag_id"
add_index
"taggings"
,
[
"taggable_id"
,
"taggable_type"
,
"context"
],
:name
=>
"index_taggings_on_taggable_id_and_taggable_type_and_context"
create_table
"tags"
,
:force
=>
true
do
|
t
|
t
.
string
"name"
end
create_table
"user_team_project_relationships"
,
:force
=>
true
do
|
t
|
t
.
integer
"project_id"
t
.
integer
"user_team_id"
t
.
integer
"greatest_access"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
end
create_table
"user_team_user_relationships"
,
:force
=>
true
do
|
t
|
t
.
integer
"user_id"
t
.
integer
"user_team_id"
t
.
boolean
"group_admin"
t
.
integer
"permission"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
end
create_table
"user_teams"
,
:force
=>
true
do
|
t
|
t
.
string
"name"
t
.
string
"path"
t
.
integer
"owner_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
end
create_table
"users"
,
:force
=>
true
do
|
t
|
t
.
string
"email"
,
:default
=>
""
,
:null
=>
false
t
.
string
"encrypted_password"
,
:default
=>
""
,
:null
=>
false
t
.
string
"reset_password_token"
t
.
datetime
"reset_password_sent_at"
t
.
datetime
"remember_created_at"
t
.
integer
"sign_in_count"
,
:default
=>
0
t
.
datetime
"current_sign_in_at"
t
.
datetime
"last_sign_in_at"
t
.
string
"current_sign_in_ip"
t
.
string
"last_sign_in_ip"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"name"
t
.
boolean
"admin"
,
:default
=>
false
,
:null
=>
false
t
.
integer
"projects_limit"
,
:default
=>
10
t
.
string
"skype"
,
:default
=>
""
,
:null
=>
false
t
.
string
"linkedin"
,
:default
=>
""
,
:null
=>
false
t
.
string
"twitter"
,
:default
=>
""
,
:null
=>
false
t
.
string
"authentication_token"
t
.
boolean
"dark_scheme"
,
:default
=>
false
,
:null
=>
false
t
.
integer
"theme_id"
,
:default
=>
1
,
:null
=>
false
t
.
string
"bio"
t
.
boolean
"blocked"
,
:default
=>
false
,
:null
=>
false
t
.
integer
"failed_attempts"
,
:default
=>
0
t
.
datetime
"locked_at"
t
.
string
"extern_uid"
t
.
string
"provider"
t
.
string
"username"
t
.
boolean
"can_create_group"
,
:default
=>
true
,
:null
=>
false
t
.
boolean
"can_create_team"
,
:default
=>
true
,
:null
=>
false
end
add_index
"users"
,
[
"admin"
],
:name
=>
"index_users_on_admin"
add_index
"users"
,
[
"blocked"
],
:name
=>
"index_users_on_blocked"
add_index
"users"
,
[
"email"
],
:name
=>
"index_users_on_email"
,
:unique
=>
true
add_index
"users"
,
[
"extern_uid"
,
"provider"
],
:name
=>
"index_users_on_extern_uid_and_provider"
,
:unique
=>
true
add_index
"users"
,
[
"name"
],
:name
=>
"index_users_on_name"
add_index
"users"
,
[
"reset_password_token"
],
:name
=>
"index_users_on_reset_password_token"
,
:unique
=>
true
add_index
"users"
,
[
"username"
],
:name
=>
"index_users_on_username"
create_table
"users_projects"
,
:force
=>
true
do
|
t
|
t
.
integer
"user_id"
,
:null
=>
false
t
.
integer
"project_id"
,
:null
=>
false
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
integer
"project_access"
,
:default
=>
0
,
:null
=>
false
end
add_index
"users_projects"
,
[
"project_access"
],
:name
=>
"index_users_projects_on_project_access"
add_index
"users_projects"
,
[
"project_id"
],
:name
=>
"index_users_projects_on_project_id"
add_index
"users_projects"
,
[
"user_id"
],
:name
=>
"index_users_projects_on_user_id"
create_table
"web_hooks"
,
:force
=>
true
do
|
t
|
t
.
string
"url"
t
.
integer
"project_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"type"
,
:default
=>
"ProjectHook"
t
.
integer
"service_id"
end
create_table
"wikis"
,
:force
=>
true
do
|
t
|
t
.
string
"title"
t
.
text
"content"
t
.
integer
"project_id"
t
.
datetime
"created_at"
,
:null
=>
false
t
.
datetime
"updated_at"
,
:null
=>
false
t
.
string
"slug"
t
.
integer
"user_id"
end
add_index
"wikis"
,
[
"project_id"
],
:name
=>
"index_wikis_on_project_id"
add_index
"wikis"
,
[
"slug"
],
:name
=>
"index_wikis_on_slug"
end
lib/gitlab/markdown.rb
View file @
e6d2e569
...
...
@@ -163,8 +163,11 @@ module Gitlab
end
def
reference_issue
(
identifier
)
if
issue
=
@project
.
issues
.
where
(
id:
identifier
).
first
link_to
(
"#
#{
identifier
}
"
,
project_issue_url
(
@project
,
issue
),
html_options
.
merge
(
title:
"Issue:
#{
issue
.
title
}
"
,
class:
"gfm gfm-issue
#{
html_options
[
:class
]
}
"
))
if
issue_exists?
identifier
url
=
url_for_issue
(
identifier
)
title
=
title_for_issue
(
identifier
)
link_to
(
"#
#{
identifier
}
"
,
url
,
html_options
.
merge
(
title:
"Issue:
#{
title
}
"
,
class:
"gfm gfm-issue
#{
html_options
[
:class
]
}
"
))
end
end
...
...
spec/helpers/gitlab_markdown_helper_spec.rb
View file @
e6d2e569
...
...
@@ -2,6 +2,7 @@ require "spec_helper"
describe
GitlabMarkdownHelper
do
include
ApplicationHelper
include
IssuesHelper
let!
(
:project
)
{
create
(
:project
)
}
...
...
spec/lib/issues_tracker_spec.rb
0 → 100644
View file @
e6d2e569
require
'spec_helper'
describe
IssuesTracker
do
let
(
:project
)
{
double
(
'project'
)
}
before
do
@project
=
project
project
.
stub
(
repository:
stub
(
ref_names:
[
'master'
,
'foo/bar/baz'
,
'v1.0.0'
,
'v2.0.0'
]))
project
.
stub
(
path_with_namespace:
'gitlab/gitlab-ci'
)
end
it
'returns url for issue'
do
ololo
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment