import uploads. Fixed a few things to do with members, triggers, etc...
This commit is contained in:
parent
92de6309e1
commit
1466997755
|
|
@ -22,6 +22,7 @@ class Member < ActiveRecord::Base
|
||||||
include Gitlab::Access
|
include Gitlab::Access
|
||||||
|
|
||||||
attr_accessor :raw_invite_token
|
attr_accessor :raw_invite_token
|
||||||
|
attr_accessor :importing
|
||||||
|
|
||||||
belongs_to :created_by, class_name: "User"
|
belongs_to :created_by, class_name: "User"
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
@ -54,10 +55,10 @@ class Member < ActiveRecord::Base
|
||||||
scope :owners, -> { where(access_level: OWNER) }
|
scope :owners, -> { where(access_level: OWNER) }
|
||||||
|
|
||||||
before_validation :generate_invite_token, on: :create, if: -> (member) { member.invite_email.present? }
|
before_validation :generate_invite_token, on: :create, if: -> (member) { member.invite_email.present? }
|
||||||
after_create :send_invite, if: :invite?
|
after_create :send_invite, if: :invite?, unless: :importing
|
||||||
after_create :create_notification_setting, unless: :invite?
|
after_create :create_notification_setting, unless: [:invite?, :importing]
|
||||||
after_create :post_create_hook, unless: :invite?
|
after_create :post_create_hook, unless: [:invite?, :importing]
|
||||||
after_update :post_update_hook, unless: :invite?
|
after_update :post_update_hook, unless: [:invite?, :importing]
|
||||||
after_destroy :post_destroy_hook, unless: :invite?
|
after_destroy :post_destroy_hook, unless: :invite?
|
||||||
|
|
||||||
delegate :name, :username, :email, to: :user, prefix: true
|
delegate :name, :username, :email, to: :user, prefix: true
|
||||||
|
|
|
||||||
|
|
@ -27,5 +27,9 @@ module Gitlab
|
||||||
def version
|
def version
|
||||||
VERSION
|
VERSION
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reset_tokens?
|
||||||
|
true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ module Gitlab
|
||||||
def execute
|
def execute
|
||||||
Gitlab::ImportExport::Importer.import(archive_file: @archive_file,
|
Gitlab::ImportExport::Importer.import(archive_file: @archive_file,
|
||||||
shared: @shared)
|
shared: @shared)
|
||||||
if [restore_version, restore_project_tree, restore_repo, restore_wiki_repo].all?
|
if [restore_version, restore_project_tree, restore_repo, restore_wiki_repo, restore_uploads].all?
|
||||||
project_tree.project
|
project_tree.project
|
||||||
else
|
else
|
||||||
project_tree.project.destroy if project_tree.project
|
project_tree.project.destroy if project_tree.project
|
||||||
|
|
@ -52,6 +52,10 @@ module Gitlab
|
||||||
project: ProjectWiki.new(project_tree.project)).restore
|
project: ProjectWiki.new(project_tree.project)).restore
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def restore_uploads
|
||||||
|
Gitlab::ImportExport::UploadsRestorer.restore(project: project_tree.project, shared: @shared)
|
||||||
|
end
|
||||||
|
|
||||||
def path_with_namespace(project_path)
|
def path_with_namespace(project_path)
|
||||||
File.join(@namespace.path, project_path)
|
File.join(@namespace.path, project_path)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -50,11 +50,11 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def member_hash(member)
|
def member_hash(member)
|
||||||
member.except('id').merge(source_id: @project.id)
|
member.except('id').merge(source_id: @project.id, importing: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_project_member_hash
|
def default_project_member_hash
|
||||||
{ user: @user, access_level: ProjectMember::MASTER, source_id: @project.id }
|
{ user: @user, access_level: ProjectMember::MASTER, source_id: @project.id, importing: true }
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_project_user_query(member)
|
def find_project_user_query(member)
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ module Gitlab
|
||||||
builds: 'Ci::Build',
|
builds: 'Ci::Build',
|
||||||
hooks: 'ProjectHook' }.freeze
|
hooks: 'ProjectHook' }.freeze
|
||||||
|
|
||||||
USER_REFERENCES = %w(author_id assignee_id updated_by_id).freeze
|
USER_REFERENCES = %w(author_id assignee_id updated_by_id user_id).freeze
|
||||||
|
|
||||||
def create(relation_sym:, relation_hash:, members_mapper:, user_admin:)
|
def create(relation_sym:, relation_hash:, members_mapper:, user_admin:)
|
||||||
relation_sym = parse_relation_sym(relation_sym)
|
relation_sym = parse_relation_sym(relation_sym)
|
||||||
|
|
@ -21,6 +21,7 @@ module Gitlab
|
||||||
update_missing_author(relation_hash, members_mapper, user_admin) if relation_sym == :notes
|
update_missing_author(relation_hash, members_mapper, user_admin) if relation_sym == :notes
|
||||||
update_user_references(relation_hash, members_mapper.map)
|
update_user_references(relation_hash, members_mapper.map)
|
||||||
update_project_references(relation_hash, klass)
|
update_project_references(relation_hash, klass)
|
||||||
|
reset_tokens(relation_hash) if relation_sym == 'Ci::Trigger'
|
||||||
|
|
||||||
generate_imported_object(klass, relation_hash, relation_sym)
|
generate_imported_object(klass, relation_hash, relation_sym)
|
||||||
end
|
end
|
||||||
|
|
@ -88,6 +89,13 @@ module Gitlab
|
||||||
relation_hash['gl_project_id'] = project_id if relation_hash ['gl_project_id']
|
relation_hash['gl_project_id'] = project_id if relation_hash ['gl_project_id']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reset_tokens(relation_hash)
|
||||||
|
return unless Gitlab::ImportExport.reset_tokens?
|
||||||
|
|
||||||
|
# If we import/export a project to the same instance, tokens will have to be reseated.
|
||||||
|
relation_hash['token'] = nil
|
||||||
|
end
|
||||||
|
|
||||||
def relation_class(relation_sym)
|
def relation_class(relation_sym)
|
||||||
relation_sym.to_s.classify.constantize
|
relation_sym.to_s.classify.constantize
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
module Gitlab
|
||||||
|
module ImportExport
|
||||||
|
class UploadsRestorer < UploadsSaver
|
||||||
|
|
||||||
|
class << self
|
||||||
|
alias_method :restore, :save
|
||||||
|
end
|
||||||
|
|
||||||
|
def save
|
||||||
|
return true unless File.directory?(uploads_export_path)
|
||||||
|
|
||||||
|
copy_files(uploads_export_path, uploads_path)
|
||||||
|
rescue => e
|
||||||
|
@shared.error(e)
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -14,21 +14,26 @@ module Gitlab
|
||||||
def save
|
def save
|
||||||
return true unless File.directory?(uploads_path)
|
return true unless File.directory?(uploads_path)
|
||||||
|
|
||||||
FileUtils.copy_entry(uploads_path, uploads_export_path)
|
copy_files(uploads_path, uploads_export_path)
|
||||||
true
|
|
||||||
rescue => e
|
rescue => e
|
||||||
@shared.error(e.message)
|
@shared.error(e)
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def copy_files(source, destination)
|
||||||
|
FileUtils.mkdir_p(destination)
|
||||||
|
FileUtils.copy_entry(source, destination)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
def uploads_export_path
|
def uploads_export_path
|
||||||
File.join(@shared.export_path, 'uploads')
|
File.join(@shared.export_path, 'uploads')
|
||||||
end
|
end
|
||||||
|
|
||||||
def uploads_path
|
def uploads_path
|
||||||
File.join(Rails.root.join('public/uploads'), project.path_with_namespace)
|
File.join(Rails.root.join('public/uploads'), @project.path_with_namespace)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue