diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2018-07-05 15:24:53 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2018-07-11 12:22:57 +0300 |
commit | 68f8ae26bf7ae73b70ce31be1fae9fe36cd012f3 (patch) | |
tree | c716f3616d7901ffc68abc1973068cf6001c0b14 /app/controllers/import | |
parent | 237a35975b2d2fa5b4a25219e8a9437883f5e8a3 (diff) | |
download | gitlab-ce-68f8ae26bf7ae73b70ce31be1fae9fe36cd012f3.tar.gz |
Improve manifest import logic
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/controllers/import')
-rw-r--r-- | app/controllers/import/manifest_controller.rb | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/app/controllers/import/manifest_controller.rb b/app/controllers/import/manifest_controller.rb index 639431690bb..c183bbe1ded 100644 --- a/app/controllers/import/manifest_controller.rb +++ b/app/controllers/import/manifest_controller.rb @@ -1,17 +1,16 @@ class Import::ManifestController < Import::BaseController - before_action :ensure_session, only: [:create, :status, :jobs] - before_action :group, only: [:status, :create] + before_action :ensure_import_vars, only: [:create, :status] def new end def status - @repos = session[:projects] + @already_added_projects = find_already_added_projects + already_added_import_urls = @already_added_projects.pluck(:import_url) - @already_added_projects = find_already_added_projects('manifest').where(namespace_id: group) - already_added_projects_names = @already_added_projects.pluck(:import_url) - - @repos = @repos.to_a.reject { |repo| already_added_projects_names.include? repo[:url] } + @pending_repositories = repositories.to_a.reject do |repository| + already_added_import_urls.include?(repository[:url]) + end end def upload @@ -26,11 +25,9 @@ class Import::ManifestController < Import::BaseController manifest = Gitlab::ManifestImport::Manifest.new(params[:manifest].tempfile) if manifest.valid? - session[:projects] = manifest.projects + session[:repositories] = manifest.projects session[:group_id] = group.id - flash[:notice] = "Import successfully started." - redirect_to status_import_manifest_path else @errors = manifest.errors @@ -40,11 +37,11 @@ class Import::ManifestController < Import::BaseController end def jobs - render json: find_jobs('manifest') + render json: find_jobs end def create - repository = session[:projects].find do |project| + repository = repositories.find do |project| project[:id] == params[:repo_id].to_i end @@ -59,13 +56,28 @@ class Import::ManifestController < Import::BaseController private - def ensure_session - if session[:projects].blank? || session[:group_id].blank? + def ensure_import_vars + unless group && repositories.present? redirect_to(new_import_manifest_path) end end def group - @group ||= Group.find(session[:group_id]) + @group ||= Group.find_by(id: session[:group_id]) + end + + def repositories + @repositories ||= session[:repositories] + end + + def find_jobs + find_already_added_projects.to_json(only: [:id], methods: [:import_status]) + end + + def find_already_added_projects + group.all_projects + .where(import_type: 'manifest') + .where(creator_id: current_user) + .includes(:import_state) end end |