Project import and retry import scaffold

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
Dmitriy Zaporozhets 2014-03-12 19:25:48 +02:00
parent 1436433c7b
commit 37db76a31b
No known key found for this signature in database
GPG key ID: 627C5F589F467F17
4 changed files with 89 additions and 55 deletions

View file

@ -5,7 +5,7 @@ class ProjectsController < ApplicationController
# Authorize # Authorize
before_filter :authorize_read_project!, except: [:index, :new, :create] before_filter :authorize_read_project!, except: [:index, :new, :create]
before_filter :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive] before_filter :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive, :retry_import]
before_filter :require_non_empty_project, only: [:blob, :tree, :graph] before_filter :require_non_empty_project, only: [:blob, :tree, :graph]
layout 'navless', only: [:new, :create, :fork] layout 'navless', only: [:new, :create, :fork]
@ -21,16 +21,9 @@ class ProjectsController < ApplicationController
def create def create
@project = ::Projects::CreateService.new(current_user, params[:project]).execute @project = ::Projects::CreateService.new(current_user, params[:project]).execute
flash[:notice] = 'Project was successfully created.' if @project.saved?
respond_to do |format| respond_to do |format|
flash[:notice] = 'Project was successfully created.' if @project.saved?
format.html do
if @project.saved?
redirect_to @project
else
render "new"
end
end
format.js format.js
end end
end end
@ -67,9 +60,7 @@ class ProjectsController < ApplicationController
if @project.empty_repo? if @project.empty_repo?
render "projects/empty", layout: user_layout render "projects/empty", layout: user_layout
else else
if current_user @last_push = current_user.recent_push(@project.id) if current_user
@last_push = current_user.recent_push(@project.id)
end
render :show, layout: user_layout render :show, layout: user_layout
end end
end end
@ -77,6 +68,28 @@ class ProjectsController < ApplicationController
end end
end end
def import
if project.import_finished?
redirect_to @project
return
end
end
def retry_import
unless @project.import_failed?
redirect_to import_project_path(@project)
end
@project.import_url = params[:project][:import_url]
if @project.save
@project.reload
@project.import_retry
end
redirect_to import_project_path(@project)
end
def destroy def destroy
return access_denied! unless can?(current_user, :remove_project, project) return access_denied! unless can?(current_user, :remove_project, project)

View file

@ -1,6 +1,10 @@
- if @project.saved? - if @project.saved?
:plain - if @project.import?
location.href = "#{project_path(@project)}"; :plain
location.href = "#{import_project_path(@project)}";
- else
:plain
location.href = "#{project_path(@project)}";
- else - else
:plain :plain
$(".project-edit-errors").html("#{escape_javascript(render('errors'))}"); $(".project-edit-errors").html("#{escape_javascript(render('errors'))}");

View file

@ -1,46 +1,34 @@
= render "home_panel" = render "home_panel"
- if @project.import? && !@project.imported %div.git-empty
.save-project-loader %fieldset
%center %legend Git global setup:
%h2 %pre.dark
%i.icon-spinner.icon-spin :preserve
Importing repository. git config --global user.name "#{git_user_name}"
%p.monospace git clone --bare #{@project.import_url} git config --global user.email "#{git_user_email}"
%p Please wait while we import the repository for you. Refresh at will.
:javascript
new ProjectImport();
- else %fieldset
%div.git-empty %legend Create Repository
%fieldset %pre.dark
%legend Git global setup: :preserve
%pre.dark mkdir #{@project.path}
:preserve cd #{@project.path}
git config --global user.name "#{git_user_name}" git init
git config --global user.email "#{git_user_email}" touch README
git add README
git commit -m 'first commit'
git remote add origin #{ content_tag(:span, default_url_to_repo, class: 'clone')}
git push -u origin master
%fieldset %fieldset
%legend Create Repository %legend Existing Git Repo?
%pre.dark %pre.dark
:preserve :preserve
mkdir #{@project.path} cd existing_git_repo
cd #{@project.path} git remote add origin #{ content_tag(:span, default_url_to_repo, class: 'clone')}
git init git push -u origin master
touch README
git add README
git commit -m 'first commit'
git remote add origin #{ content_tag(:span, default_url_to_repo, class: 'clone')}
git push -u origin master
%fieldset - if can? current_user, :remove_project, @project
%legend Existing Git Repo? .prepend-top-20
%pre.dark = link_to 'Remove project', @project, data: { confirm: remove_project_message(@project)}, method: :delete, class: "btn btn-remove pull-right"
:preserve
cd existing_git_repo
git remote add origin #{ content_tag(:span, default_url_to_repo, class: 'clone')}
git push -u origin master
- if can? current_user, :remove_project, @project
.prepend-top-20
= link_to 'Remove project', @project, data: { confirm: remove_project_message(@project)}, method: :delete, class: "btn btn-remove pull-right"

View file

@ -0,0 +1,29 @@
- if @project.import_in_progress?
.save-project-loader
%center
%h2
%i.icon-spinner.icon-spin
Import in progress.
%p.monospace git clone --bare #{@project.import_url}
%p Please wait while we import the repository for you. Refresh at will.
:javascript
new ProjectImport();
- elsif @project.import_failed?
.save-project-loader
%center
%h2
Import failed. Retry?
%hr
= form_for @project, url: retry_import_project_path(@project), method: :put, html: { class: 'form-horizontal' } do |f|
.form-group.import-url-data
= f.label :import_url, class: 'control-label' do
%span Import existing repo
.col-sm-10
= f.text_field :import_url, class: 'form-control', placeholder: 'https://github.com/randx/six.git'
.bs-callout.bs-callout-info
This url must be publicly accessible or you can add a username and password like this: https://username:password@gitlab.com/company/project.git.
%br
The import will time out after 2 minutes. For big repositories, use a clone/push combination.
.form-actions
= f.submit 'Retry import', class: "btn btn-create", tabindex: 4