Move import data out of project so it doesn't take ages to load.
This commit is contained in:
parent
dfebcb89e6
commit
7d98c8842d
8 changed files with 63 additions and 30 deletions
|
@ -27,7 +27,6 @@
|
|||
# import_type :string(255)
|
||||
# import_source :string(255)
|
||||
# avatar :string(255)
|
||||
# import_data :text
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
|
@ -51,8 +50,6 @@ class Project < ActiveRecord::Base
|
|||
default_value_for :wall_enabled, false
|
||||
default_value_for :snippets_enabled, gitlab_config_features.snippets
|
||||
|
||||
serialize :import_data, JSON
|
||||
|
||||
# set last_activity_at to the same as created_at
|
||||
after_create :set_last_activity_at
|
||||
def set_last_activity_at
|
||||
|
@ -117,6 +114,8 @@ class Project < ActiveRecord::Base
|
|||
has_many :users_star_projects, dependent: :destroy
|
||||
has_many :starrers, through: :users_star_projects, source: :user
|
||||
|
||||
has_one :import_data, dependent: :destroy, class_name: "ProjectImportData"
|
||||
|
||||
delegate :name, to: :owner, allow_nil: true, prefix: true
|
||||
delegate :members, to: :team, prefix: true
|
||||
|
||||
|
@ -267,8 +266,7 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def clear_import_data
|
||||
self.import_data = nil
|
||||
self.save
|
||||
self.import_data.destroy if self.import_data
|
||||
end
|
||||
|
||||
def import?
|
||||
|
|
19
app/models/project_import_data.rb
Normal file
19
app/models/project_import_data.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: project_import_datas
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# data :text
|
||||
#
|
||||
|
||||
require 'carrierwave/orm/activerecord'
|
||||
require 'file_size_validator'
|
||||
|
||||
class ProjectImportData < ActiveRecord::Base
|
||||
belongs_to :project
|
||||
|
||||
serialize :data, JSON
|
||||
|
||||
validates :project, presence: true
|
||||
end
|
8
db/migrate/20150417121913_create_project_import_data.rb
Normal file
8
db/migrate/20150417121913_create_project_import_data.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
class CreateProjectImportData < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :project_import_data do |t|
|
||||
t.references :project
|
||||
t.text :data
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class RemoveImportDataFromProject < ActiveRecord::Migration
|
||||
def change
|
||||
remove_column :projects, :import_data
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20150413192223) do
|
||||
ActiveRecord::Schema.define(version: 20150417122318) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -323,6 +323,11 @@ ActiveRecord::Schema.define(version: 20150413192223) do
|
|||
add_index "oauth_applications", ["owner_id", "owner_type"], name: "index_oauth_applications_on_owner_id_and_owner_type", using: :btree
|
||||
add_index "oauth_applications", ["uid"], name: "index_oauth_applications_on_uid", unique: true, using: :btree
|
||||
|
||||
create_table "project_import_data", force: true do |t|
|
||||
t.integer "project_id"
|
||||
t.text "data"
|
||||
end
|
||||
|
||||
create_table "projects", force: true do |t|
|
||||
t.string "name"
|
||||
t.string "path"
|
||||
|
@ -348,7 +353,6 @@ ActiveRecord::Schema.define(version: 20150413192223) do
|
|||
t.integer "star_count", default: 0, null: false
|
||||
t.string "import_type"
|
||||
t.string "import_source"
|
||||
t.text "import_data"
|
||||
end
|
||||
|
||||
add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree
|
||||
|
|
|
@ -5,7 +5,10 @@ module Gitlab
|
|||
|
||||
def initialize(project)
|
||||
@project = project
|
||||
@repo = GoogleCodeImport::Repository.new(project.import_data["repo"])
|
||||
|
||||
import_data = project.import_data.try(:data)
|
||||
repo_data = import_data["repo"] if import_data
|
||||
@repo = GoogleCodeImport::Repository.new(repo_data)
|
||||
|
||||
@closed_statuses = []
|
||||
@known_labels = Set.new
|
||||
|
@ -27,9 +30,10 @@ module Gitlab
|
|||
|
||||
def user_map
|
||||
@user_map ||= begin
|
||||
user_map = Hash.new { |hash, user| hash[user] = Client.mask_email(user) }
|
||||
user_map = Hash.new { |hash, user| Client.mask_email(user) }
|
||||
|
||||
stored_user_map = project.import_data["user_map"]
|
||||
import_data = project.import_data.try(:data)
|
||||
stored_user_map = import_data["user_map"] if import_data
|
||||
user_map.update(stored_user_map) if stored_user_map
|
||||
|
||||
user_map
|
||||
|
|
|
@ -11,12 +11,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def execute
|
||||
import_data = {
|
||||
"repo" => repo.raw_data,
|
||||
"user_map" => user_map
|
||||
}
|
||||
|
||||
@project = Project.new(
|
||||
project = ::Projects::CreateService.new(current_user,
|
||||
name: repo.name,
|
||||
path: repo.name,
|
||||
description: repo.summary,
|
||||
|
@ -25,21 +20,17 @@ module Gitlab
|
|||
visibility_level: Gitlab::VisibilityLevel::PUBLIC,
|
||||
import_type: "google_code",
|
||||
import_source: repo.name,
|
||||
import_url: repo.import_url,
|
||||
import_data: import_data
|
||||
import_url: repo.import_url
|
||||
).execute
|
||||
|
||||
import_data = project.create_import_data(
|
||||
data: {
|
||||
"repo" => repo.raw_data,
|
||||
"user_map" => user_map
|
||||
}
|
||||
)
|
||||
|
||||
if @project.save!
|
||||
@project.reload
|
||||
|
||||
if @project.import_failed?
|
||||
@project.import_retry
|
||||
else
|
||||
@project.import_start
|
||||
end
|
||||
end
|
||||
|
||||
@project
|
||||
project
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,9 +12,13 @@ describe Gitlab::GoogleCodeImport::Importer do
|
|||
}
|
||||
}
|
||||
}
|
||||
let(:project) { create(:project, import_data: import_data) }
|
||||
let(:project) { create(:project) }
|
||||
subject { described_class.new(project) }
|
||||
|
||||
before do
|
||||
project.create_import_data(data: import_data)
|
||||
end
|
||||
|
||||
describe "#execute" do
|
||||
|
||||
it "imports status labels" do
|
||||
|
|
Loading…
Reference in a new issue