From 8bf8c70c4bdd14502c6f3ae314207b99aa2c9f49 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 11 Feb 2013 23:00:12 +0200 Subject: [PATCH] Import repo feature --- app/assets/javascripts/main.js.coffee | 4 ++++ app/assets/stylesheets/common.scss | 4 ++++ app/contexts/projects/create_context.rb | 14 ++++++++++++-- app/models/project.rb | 9 ++++++--- app/views/projects/_new_form.html.haml | 14 ++++++++++++++ 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index f6c398c0a..5aaea50cf 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -36,6 +36,10 @@ $ -> # Click a .one_click_select field, select the contents $(".one_click_select").on 'click', -> $(@).select() + # Click a .appear-link, appear-data fadeout + $(".appear-link").on 'click', -> + $('.appear-data').fadeIn() + # Initialize chosen selects $('select.chosen').chosen() diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index c9a11d0a1..7ac8c2dd9 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -564,3 +564,7 @@ img.emoji { vertical-align: middle; width: 20px; } + +.appear-data { + display: none; +} diff --git a/app/contexts/projects/create_context.rb b/app/contexts/projects/create_context.rb index 915bd8be8..8e1da539a 100644 --- a/app/contexts/projects/create_context.rb +++ b/app/contexts/projects/create_context.rb @@ -34,13 +34,23 @@ module Projects @project.creator = current_user + # Import project from cloneable resource + if @project.valid? && @project.import_url.present? + shell = Gitlab::Shell.new + if shell.import_repository(@project.path_with_namespace, @project.import_url) + true + else + @project.errors.add(:import_url, 'cannot clone repo') + end + end + if @project.save @project.users_projects.create(project_access: UsersProject::MASTER, user: current_user) end @project - rescue => ex - @project.errors.add(:base, "Can't save project. Please try again later") + #rescue => ex + #@project.errors.add(:base, "Can't save project. Please try again later") @project end diff --git a/app/models/project.rb b/app/models/project.rb index fee45f577..16f189fd7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -25,12 +25,13 @@ class Project < ActiveRecord::Base class TransferError < StandardError; end - attr_accessible :name, :path, :description, :default_branch, :issues_enabled, - :wall_enabled, :merge_requests_enabled, :wiki_enabled, :public, as: [:default, :admin] + attr_accessible :name, :path, :description, :default_branch, + :issues_enabled, :wall_enabled, :merge_requests_enabled, + :wiki_enabled, :public, :import_url, as: [:default, :admin] attr_accessible :namespace_id, :creator_id, as: :admin - attr_accessor :error_code + attr_accessor :import_url # Relations belongs_to :creator, foreign_key: "creator_id", class_name: "User" @@ -75,6 +76,8 @@ class Project < ActiveRecord::Base validates_uniqueness_of :name, scope: :namespace_id validates_uniqueness_of :path, scope: :namespace_id + validates :import_url, format: { with: URI::regexp(%w(http https)), message: "should be a valid url" } + validate :check_limit, :repo_name # Scopes diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml index 185164955..d05838ae5 100644 --- a/app/views/projects/_new_form.html.haml +++ b/app/views/projects/_new_form.html.haml @@ -16,6 +16,20 @@ .input = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'} + + .clearfix + .input + = link_to "#", class: 'appear-link' do + %i.icon-upload-alt + %span Import existing repository? + .clearfix.appear-data + = f.label :import_url do + %span Import existing repo + .input + = f.text_field :import_url, class: 'xlarge' + .light + URL should be clonable + %p.padded New projects are private by default. You choose who can see the project and commit to repository. %hr -- 2.11.0