Commit 8bf8c70c4bdd14502c6f3ae314207b99aa2c9f49
1 parent
ab0cfc00
Exists in
master
and in
4 other branches
Import repo feature
Showing
5 changed files
with
40 additions
and
5 deletions
Show diff stats
app/assets/javascripts/main.js.coffee
| @@ -36,6 +36,10 @@ $ -> | @@ -36,6 +36,10 @@ $ -> | ||
| 36 | # Click a .one_click_select field, select the contents | 36 | # Click a .one_click_select field, select the contents |
| 37 | $(".one_click_select").on 'click', -> $(@).select() | 37 | $(".one_click_select").on 'click', -> $(@).select() |
| 38 | 38 | ||
| 39 | + # Click a .appear-link, appear-data fadeout | ||
| 40 | + $(".appear-link").on 'click', -> | ||
| 41 | + $('.appear-data').fadeIn() | ||
| 42 | + | ||
| 39 | # Initialize chosen selects | 43 | # Initialize chosen selects |
| 40 | $('select.chosen').chosen() | 44 | $('select.chosen').chosen() |
| 41 | 45 |
app/assets/stylesheets/common.scss
app/contexts/projects/create_context.rb
| @@ -34,13 +34,23 @@ module Projects | @@ -34,13 +34,23 @@ module Projects | ||
| 34 | 34 | ||
| 35 | @project.creator = current_user | 35 | @project.creator = current_user |
| 36 | 36 | ||
| 37 | + # Import project from cloneable resource | ||
| 38 | + if @project.valid? && @project.import_url.present? | ||
| 39 | + shell = Gitlab::Shell.new | ||
| 40 | + if shell.import_repository(@project.path_with_namespace, @project.import_url) | ||
| 41 | + true | ||
| 42 | + else | ||
| 43 | + @project.errors.add(:import_url, 'cannot clone repo') | ||
| 44 | + end | ||
| 45 | + end | ||
| 46 | + | ||
| 37 | if @project.save | 47 | if @project.save |
| 38 | @project.users_projects.create(project_access: UsersProject::MASTER, user: current_user) | 48 | @project.users_projects.create(project_access: UsersProject::MASTER, user: current_user) |
| 39 | end | 49 | end |
| 40 | 50 | ||
| 41 | @project | 51 | @project |
| 42 | - rescue => ex | ||
| 43 | - @project.errors.add(:base, "Can't save project. Please try again later") | 52 | + #rescue => ex |
| 53 | + #@project.errors.add(:base, "Can't save project. Please try again later") | ||
| 44 | @project | 54 | @project |
| 45 | end | 55 | end |
| 46 | 56 |
app/models/project.rb
| @@ -25,12 +25,13 @@ class Project < ActiveRecord::Base | @@ -25,12 +25,13 @@ class Project < ActiveRecord::Base | ||
| 25 | 25 | ||
| 26 | class TransferError < StandardError; end | 26 | class TransferError < StandardError; end |
| 27 | 27 | ||
| 28 | - attr_accessible :name, :path, :description, :default_branch, :issues_enabled, | ||
| 29 | - :wall_enabled, :merge_requests_enabled, :wiki_enabled, :public, as: [:default, :admin] | 28 | + attr_accessible :name, :path, :description, :default_branch, |
| 29 | + :issues_enabled, :wall_enabled, :merge_requests_enabled, | ||
| 30 | + :wiki_enabled, :public, :import_url, as: [:default, :admin] | ||
| 30 | 31 | ||
| 31 | attr_accessible :namespace_id, :creator_id, as: :admin | 32 | attr_accessible :namespace_id, :creator_id, as: :admin |
| 32 | 33 | ||
| 33 | - attr_accessor :error_code | 34 | + attr_accessor :import_url |
| 34 | 35 | ||
| 35 | # Relations | 36 | # Relations |
| 36 | belongs_to :creator, foreign_key: "creator_id", class_name: "User" | 37 | belongs_to :creator, foreign_key: "creator_id", class_name: "User" |
| @@ -75,6 +76,8 @@ class Project < ActiveRecord::Base | @@ -75,6 +76,8 @@ class Project < ActiveRecord::Base | ||
| 75 | validates_uniqueness_of :name, scope: :namespace_id | 76 | validates_uniqueness_of :name, scope: :namespace_id |
| 76 | validates_uniqueness_of :path, scope: :namespace_id | 77 | validates_uniqueness_of :path, scope: :namespace_id |
| 77 | 78 | ||
| 79 | + validates :import_url, format: { with: URI::regexp(%w(http https)), message: "should be a valid url" } | ||
| 80 | + | ||
| 78 | validate :check_limit, :repo_name | 81 | validate :check_limit, :repo_name |
| 79 | 82 | ||
| 80 | # Scopes | 83 | # Scopes |
app/views/projects/_new_form.html.haml
| @@ -16,6 +16,20 @@ | @@ -16,6 +16,20 @@ | ||
| 16 | .input | 16 | .input |
| 17 | = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'} | 17 | = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'} |
| 18 | 18 | ||
| 19 | + | ||
| 20 | + .clearfix | ||
| 21 | + .input | ||
| 22 | + = link_to "#", class: 'appear-link' do | ||
| 23 | + %i.icon-upload-alt | ||
| 24 | + %span Import existing repository? | ||
| 25 | + .clearfix.appear-data | ||
| 26 | + = f.label :import_url do | ||
| 27 | + %span Import existing repo | ||
| 28 | + .input | ||
| 29 | + = f.text_field :import_url, class: 'xlarge' | ||
| 30 | + .light | ||
| 31 | + URL should be clonable | ||
| 32 | + | ||
| 19 | %p.padded | 33 | %p.padded |
| 20 | New projects are private by default. You choose who can see the project and commit to repository. | 34 | New projects are private by default. You choose who can see the project and commit to repository. |
| 21 | %hr | 35 | %hr |