From 76efdea78839af27127cc81358ea1ffd911191f4 Mon Sep 17 00:00:00 2001
From: James Lopez <james@jameslopez.es>
Date: Fri, 11 Mar 2016 18:17:57 +0100
Subject: [PATCH] fixing MR issues with import

---
 app/models/merge_request.rb                                 | 4 +++-
 .../projects/import_export/project_tree_restorer.rb         | 2 +-
 app/services/projects/import_export/relation_factory.rb     | 6 ++++++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 8271dc83116..714d55323d4 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -50,6 +50,8 @@ class MergeRequest < ActiveRecord::Base
 
   delegate :commits, :diffs, :real_size, to: :merge_request_diff, prefix: nil
 
+  attr_accessor :importing
+
   # When this attribute is true some MR validation is ignored
   # It allows us to close or modify broken merge requests
   attr_accessor :allow_broken
@@ -128,7 +130,7 @@ class MergeRequest < ActiveRecord::Base
   validates :target_project, presence: true
   validates :target_branch, presence: true
   validates :merge_user, presence: true, if: :merge_when_build_succeeds?
-  validate :validate_branches
+  validate :validate_branches, unless: :importing
   validate :validate_fork
 
   scope :of_group, ->(group) { where("source_project_id in (:group_project_ids) OR target_project_id in (:group_project_ids)", group_project_ids: group.projects.select(:id).reorder(nil)) }
diff --git a/app/services/projects/import_export/project_tree_restorer.rb b/app/services/projects/import_export/project_tree_restorer.rb
index 87b78197cd6..ac9b7132004 100644
--- a/app/services/projects/import_export/project_tree_restorer.rb
+++ b/app/services/projects/import_export/project_tree_restorer.rb
@@ -44,7 +44,7 @@ module Projects
       def create_relation(relation, relation_hash_list)
         relation_hash_list.map do |relation_hash|
           Projects::ImportExport::RelationFactory.create(
-            relation_sym: relation, relation_hash: relation_hash.merge(project_id: project.id), members_map: members_map)
+            relation_sym: relation, relation_hash: relation_hash.merge('project_id' => project.id), members_map: members_map)
         end
       end
     end
diff --git a/app/services/projects/import_export/relation_factory.rb b/app/services/projects/import_export/relation_factory.rb
index 39ac29e3f80..1b9bd234a43 100644
--- a/app/services/projects/import_export/relation_factory.rb
+++ b/app/services/projects/import_export/relation_factory.rb
@@ -10,6 +10,12 @@ module Projects
         relation_sym = parse_relation_sym(relation_sym)
         klass = relation_class(relation_sym)
         relation_hash.delete('id') #screw IDs for now
+        #TODO refactor this...
+        if relation_sym == :merge_requests
+          relation_hash['target_project_id'] = relation_hash.delete('project_id')
+          relation_hash['source_project_id'] = -1
+          relation_hash['importing'] = true
+        end
         update_user_references(relation_hash, members_map)
         klass.new(relation_hash)
       end
-- 
GitLab