From d25381b10976380ac06a94d3b0fcc174ef7481df Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Thu, 30 Apr 2015 18:14:00 +0300 Subject: forking projects --- app/models/fork.rb | 12 ++++++++++++ app/services/create_project_service.rb | 2 +- app/views/builds/show.html.haml | 2 +- app/views/projects/_gitlab.html.haml | 5 +---- app/views/projects/_project.html.haml | 10 ++++++++-- db/migrate/20150429000160_add_parent_id_to_project.rb | 1 + db/schema.rb | 1 + 7 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 app/models/fork.rb diff --git a/app/models/fork.rb b/app/models/fork.rb new file mode 100644 index 0000000..55e8ac2 --- /dev/null +++ b/app/models/fork.rb @@ -0,0 +1,12 @@ +class Fork < Project + has_many :jobs, primary_key: :parent_id, foreign_key: :project_id, dependent: nil + + # Fork has no own jobs + def build_default_job + nil + end + + def self.model_name + Project.model_name + end +end \ No newline at end of file diff --git a/app/services/create_project_service.rb b/app/services/create_project_service.rb index 5cca00f..2b6dc91 100644 --- a/app/services/create_project_service.rb +++ b/app/services/create_project_service.rb @@ -2,7 +2,7 @@ class CreateProjectService include Rails.application.routes.url_helpers def execute(current_user, params, project_route, forked_project = nil) - @project = Project.parse(params) + @project = forked_project? ? Fork.parse(params) : Project.parse(params) Project.transaction do @project.build_default_job diff --git a/app/views/builds/show.html.haml b/app/views/builds/show.html.haml index d26bee0..9be3a58 100644 --- a/app/views/builds/show.html.haml +++ b/app/views/builds/show.html.haml @@ -2,7 +2,7 @@ = link_to @project.name, @project @ = @commit.short_sha - - if current_user.can_manage_project?(@project.gitlab_id) + - if current_user.can_manage_project?(@project.gitlab_id) && !@project.fork? .pull-right = link_to project_jobs_path(@project), class: "btn btn-default btn-small" do %i.icon-edit.icon-white diff --git a/app/views/projects/_gitlab.html.haml b/app/views/projects/_gitlab.html.haml index 9847842..55a959d 100644 --- a/app/views/projects/_gitlab.html.haml +++ b/app/views/projects/_gitlab.html.haml @@ -16,18 +16,15 @@ %table.table.projects-table %thead %tr - %th ID %th Project Name %th Last commit %th Access %th Commits - = render @projects + = render partial: "project", collection: @projects - @gl_projects.sort_by(&:name_with_namespace).each do |project| %tr.light - %td - \- %td = project.name_with_namespace %td diff --git a/app/views/projects/_project.html.haml b/app/views/projects/_project.html.haml index af2e123..ce25f51 100644 --- a/app/views/projects/_project.html.haml +++ b/app/views/projects/_project.html.haml @@ -1,10 +1,16 @@ - last_commit = project.last_commit %tr.alert{class: commit_status_alert_class(last_commit) } - %td - = project.id + %td = link_to project do %strong= project.name + +   + - if project.fork? + %i.icon-code-fork + - else + %i.icon-code + %td - if last_commit #{last_commit.status} (#{commit_link(last_commit)}) diff --git a/db/migrate/20150429000160_add_parent_id_to_project.rb b/db/migrate/20150429000160_add_parent_id_to_project.rb index 9c728b4..d55be41 100644 --- a/db/migrate/20150429000160_add_parent_id_to_project.rb +++ b/db/migrate/20150429000160_add_parent_id_to_project.rb @@ -1,5 +1,6 @@ class AddParentIdToProject < ActiveRecord::Migration def change add_column :projects, :parent_id, :integer + add_column :projects, :type, :string end end diff --git a/db/schema.rb b/db/schema.rb index 77cceaa..5f86d22 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -101,6 +101,7 @@ ActiveRecord::Schema.define(version: 20150429000160) do t.string "coverage_regex" t.boolean "shared_runners_enabled", default: false t.integer "parent_id" + t.string "type" end create_table "runner_projects", force: true do |t| -- cgit v1.2.1