From de6c44e983a788262b72355b85d085a675c9fccc Mon Sep 17 00:00:00 2001
From: James Lopez <james@jameslopez.es>
Date: Thu, 7 Apr 2016 18:14:42 +0200
Subject: [PATCH] using new config

---
 app/services/projects/import_export.rb         | 18 +-----------------
 .../projects/import_export/import_export.yml   |  6 +++++-
 .../import_export/import_export_reader.rb      | 17 ++++++++++++-----
 .../import_export/project_tree_saver.rb        |  2 +-
 4 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/app/services/projects/import_export.rb b/app/services/projects/import_export.rb
index e1d7458a13b..c74f1d31490 100644
--- a/app/services/projects/import_export.rb
+++ b/app/services/projects/import_export.rb
@@ -11,27 +11,11 @@ module Projects
     end
 
     def project_tree
-      %i(issues labels milestones releases events) + [snippets, members, merge_requests, commit_statuses]
+      Projects::ImportExport::ImportExportReader.project_tree
     end
 
     private
 
-    def snippets
-      { snippets: { except: :expired_at } }
-    end
-
-    def merge_requests
-      { merge_requests: { include: :merge_request_diff } }
-    end
-
-    def commit_statuses
-      { commit_statuses: { include: :commit } }
-    end
-
-    def members
-      { project_members: { include: [user: { only: [:id, :email, :username] }] } }
-    end
-
     def storage_path
       File.join(Settings.shared['path'], 'tmp/project_exports')
     end
diff --git a/app/services/projects/import_export/import_export.yml b/app/services/projects/import_export/import_export.yml
index 40fd98b8092..be7680775ba 100644
--- a/app/services/projects/import_export/import_export.yml
+++ b/app/services/projects/import_export/import_export.yml
@@ -28,4 +28,8 @@
   :user:
     - :id
     - :email
-    - :username
\ No newline at end of file
+    - :username
+
+:attributes_except:
+  :snippets:
+    - :expired_at
\ No newline at end of file
diff --git a/app/services/projects/import_export/import_export_reader.rb b/app/services/projects/import_export/import_export_reader.rb
index 77a1abb851b..981f19c0acb 100644
--- a/app/services/projects/import_export/import_export_reader.rb
+++ b/app/services/projects/import_export/import_export_reader.rb
@@ -26,7 +26,14 @@ module Projects
       end
 
       def build_hash(array)
-        array.map { |el| el.is_a?(Hash) ? process_include(el) : el }
+        array.map do |el|
+          if el.is_a?(Hash)
+            process_include(el)
+          else
+            only_except_hash = check_only_and_except(el)
+            only_except_hash.empty? ? el : { el => only_except_hash }
+          end
+        end
       end
 
       def process_include(hash, included_classes_hash = {})
@@ -44,8 +51,8 @@ module Projects
       def process_current_class(hash, included_classes_hash, value)
         value = value.is_a?(Hash) ? process_include(hash, included_classes_hash) : value
         current_key = hash.keys.first
-        current_key_only = check_only_and_except(current_key)
-        included_classes_hash[current_key] ||= current_key_only unless current_key_only.empty?
+        only_except_hash = check_only_and_except(current_key)
+        included_classes_hash[current_key] ||= only_except_hash unless only_except_hash.empty?
         return current_key, value
       end
 
@@ -56,8 +63,8 @@ module Projects
       end
 
       def add_class(current_key, included_classes_hash, value)
-        check_only_hash = check_only_and_except(value)
-        value = { value => check_only_hash } unless check_only_hash.empty?
+        only_except_hash = check_only_and_except(value)
+        value = { value => only_except_hash } unless only_except_hash.empty?
         old_values = included_classes_hash[current_key][:include]
         included_classes_hash[current_key][:include] = ([old_values] + [value]).compact.flatten
       end
diff --git a/app/services/projects/import_export/project_tree_saver.rb b/app/services/projects/import_export/project_tree_saver.rb
index 3ca90d1f79a..44d100acd1d 100644
--- a/app/services/projects/import_export/project_tree_saver.rb
+++ b/app/services/projects/import_export/project_tree_saver.rb
@@ -32,7 +32,7 @@ module Projects
       def project_json_tree
         # TODO confirm children, also add subchildren (i.e comments)
         # TODO confirm atts for children
-        @project.to_json(only: ImportExport.project_atts, include: ImportExport.project_tree)
+        @project.to_json(Projects::ImportExport.project_tree)
       end
     end
   end
-- 
GitLab