From a6eb28abc5e4d90780f63e30fbcb7857989ef7ac Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 11 Mar 2014 18:23:03 +0200 Subject: Better explanation for import url Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/new.html.haml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 9cc28c7f535..83bbbb058f0 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -23,6 +23,7 @@ .col-sm-2 .col-sm-10 = link_to "#", class: 'js-toggle-button' do + %i.icon-edit %span Customize repository name? .js-toggle-content.hide .form-group @@ -46,8 +47,10 @@ %span Import existing repo .col-sm-10 = f.text_field :import_url, class: 'form-control', placeholder: 'https://github.com/randx/six.git' - .light - URL must be cloneable + %p.help-block + 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 + Import timeout is 2 minutes. For big repositories use clone/push combination. %hr .form-group -- cgit v1.2.1 From dff9221c407bdb277db14b3daef6fc230f38ac7c Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 11 Mar 2014 18:34:43 +0200 Subject: Show import notice in callout block Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/new.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 83bbbb058f0..3f9d05cff2d 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -47,7 +47,7 @@ %span Import existing repo .col-sm-10 = f.text_field :import_url, class: 'form-control', placeholder: 'https://github.com/randx/six.git' - %p.help-block + .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 Import timeout is 2 minutes. For big repositories use clone/push combination. -- cgit v1.2.1 From 42f25e75f84622f57073e4ba64f292eac2dac78d Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 10:25:37 +0200 Subject: Improve import notice Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/new.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 3f9d05cff2d..5d5637c1588 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -50,7 +50,7 @@ .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 - Import timeout is 2 minutes. For big repositories use clone/push combination. + The import will time out after 2 minutes. For big repositories, use a clone/push combination. %hr .form-group -- cgit v1.2.1 From e603da7360dd8141a00b8096cb67acda0e039940 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 17:14:28 +0200 Subject: Add Project#import_status field Signed-off-by: Dmitriy Zaporozhets --- .../20140312145357_add_import_status_to_project.rb | 5 + db/schema.rb | 101 +++++++++++---------- 2 files changed, 60 insertions(+), 46 deletions(-) create mode 100644 db/migrate/20140312145357_add_import_status_to_project.rb diff --git a/db/migrate/20140312145357_add_import_status_to_project.rb b/db/migrate/20140312145357_add_import_status_to_project.rb new file mode 100644 index 00000000000..ef972e8342a --- /dev/null +++ b/db/migrate/20140312145357_add_import_status_to_project.rb @@ -0,0 +1,5 @@ +class AddImportStatusToProject < ActiveRecord::Migration + def change + add_column :projects, :import_status, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index ec6673b6d37..00627c945a7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,15 +11,18 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140304005354) do +ActiveRecord::Schema.define(version: 20140312145357) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" create_table "broadcast_messages", force: true do |t| t.text "message", null: false t.datetime "starts_at" t.datetime "ends_at" t.integer "alert_type" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.string "color" t.string "font" end @@ -27,8 +30,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do create_table "deploy_keys_projects", force: true do |t| t.integer "deploy_key_id", null: false t.integer "project_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" end add_index "deploy_keys_projects", ["project_id"], name: "index_deploy_keys_projects_on_project_id", using: :btree @@ -49,8 +52,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.string "title" t.text "data" t.integer "project_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.integer "action" t.integer "author_id" end @@ -65,8 +68,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do create_table "forked_project_links", force: true do |t| t.integer "forked_to_project_id", null: false t.integer "forked_from_project_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" end add_index "forked_project_links", ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree @@ -106,10 +109,10 @@ ActiveRecord::Schema.define(version: 20140304005354) do add_index "keys", ["user_id"], name: "index_keys_on_user_id", using: :btree create_table "merge_request_diffs", force: true do |t| - t.string "state", default: "collected", null: false - t.text "st_commits", limit: 2147483647 - t.text "st_diffs", limit: 2147483647 - t.integer "merge_request_id", null: false + t.string "state", default: "collected", null: false + t.text "st_commits" + t.text "st_diffs" + t.integer "merge_request_id", null: false t.datetime "created_at" t.datetime "updated_at" end @@ -138,7 +141,7 @@ ActiveRecord::Schema.define(version: 20140304005354) do add_index "merge_requests", ["created_at"], name: "index_merge_requests_on_created_at", using: :btree add_index "merge_requests", ["milestone_id"], name: "index_merge_requests_on_milestone_id", using: :btree add_index "merge_requests", ["source_branch"], name: "index_merge_requests_on_source_branch", using: :btree - add_index "merge_requests", ["source_project_id"], name: "index_merge_requests_on_project_id", using: :btree + add_index "merge_requests", ["source_project_id"], name: "index_merge_requests_on_source_project_id", using: :btree add_index "merge_requests", ["target_branch"], name: "index_merge_requests_on_target_branch", using: :btree add_index "merge_requests", ["title"], name: "index_merge_requests_on_title", using: :btree @@ -147,8 +150,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.integer "project_id", null: false t.text "description" t.date "due_date" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.string "state" t.integer "iid" end @@ -160,8 +163,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.string "name", null: false t.string "path", null: false t.integer "owner_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.string "type" t.string "description", default: "", null: false t.string "avatar" @@ -183,8 +186,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.string "line_code" t.string "commit_id" t.integer "noteable_id" - t.text "st_diff" t.boolean "system", default: false, null: false + t.text "st_diff" end add_index "notes", ["author_id"], name: "index_notes_on_author_id", using: :btree @@ -215,17 +218,18 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.string "import_url" t.integer "visibility_level", default: 0, null: false t.boolean "archived", default: false, null: false + t.string "import_status" end - add_index "projects", ["creator_id"], name: "index_projects_on_owner_id", using: :btree + add_index "projects", ["creator_id"], name: "index_projects_on_creator_id", using: :btree add_index "projects", ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree add_index "projects", ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree create_table "protected_branches", force: true do |t| t.integer "project_id", null: false t.string "name", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" end add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree @@ -235,8 +239,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.string "title" t.string "token" t.integer "project_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.boolean "active", default: false, null: false t.string "project_url" t.string "subdomain" @@ -249,14 +253,14 @@ ActiveRecord::Schema.define(version: 20140304005354) do create_table "snippets", force: true do |t| t.string "title" - t.text "content", limit: 2147483647 - t.integer "author_id", null: false + t.text "content" + t.integer "author_id", null: false t.integer "project_id" t.datetime "created_at" t.datetime "updated_at" t.string "file_name" t.datetime "expires_at" - t.boolean "private", default: true, null: false + t.boolean "private", default: true, null: false t.string "type" end @@ -275,17 +279,20 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.datetime "created_at" end + add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id", using: :btree + add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree + create_table "tags", force: true do |t| t.string "name" end create_table "users", force: true do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", limit: 128, default: "", null: false + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0 + t.integer "sign_in_count", default: 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" @@ -293,40 +300,41 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.datetime "created_at" t.datetime "updated_at" t.string "name" - t.boolean "admin", default: false, null: false - t.integer "projects_limit", default: 10 - t.string "skype", default: "", null: false - t.string "linkedin", default: "", null: false - t.string "twitter", default: "", null: false + t.boolean "admin", default: false, null: false + t.integer "projects_limit", default: 10 + t.string "skype", default: "", null: false + t.string "linkedin", default: "", null: false + t.string "twitter", default: "", null: false t.string "authentication_token" - t.integer "theme_id", default: 1, null: false + t.integer "theme_id", default: 1, null: false t.string "bio" - t.integer "failed_attempts", default: 0 + t.integer "failed_attempts", default: 0 t.datetime "locked_at" t.string "extern_uid" t.string "provider" t.string "username" - t.boolean "can_create_group", default: true, null: false - t.boolean "can_create_team", default: true, null: false + t.boolean "can_create_group", default: true, null: false + t.boolean "can_create_team", default: true, null: false t.string "state" - t.integer "color_scheme_id", default: 1, null: false - t.integer "notification_level", default: 1, null: false + t.integer "color_scheme_id", default: 1, null: false + t.integer "notification_level", default: 1, null: false t.datetime "password_expires_at" t.integer "created_by_id" + t.datetime "last_credential_check_at" t.string "avatar" t.string "confirmation_token" t.datetime "confirmed_at" t.datetime "confirmation_sent_at" t.string "unconfirmed_email" - t.boolean "hide_no_ssh_key", default: false - t.string "website_url", default: "", null: false - t.datetime "last_credential_check_at" + t.boolean "hide_no_ssh_key", default: false + t.string "website_url", default: "", null: false end add_index "users", ["admin"], name: "index_users_on_admin", using: :btree add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree + add_index "users", ["extern_uid", "provider"], name: "index_users_on_extern_uid_and_provider", unique: true, using: :btree add_index "users", ["name"], name: "index_users_on_name", using: :btree add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree add_index "users", ["username"], name: "index_users_on_username", using: :btree @@ -335,8 +343,8 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.integer "group_access", null: false t.integer "group_id", null: false t.integer "user_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at" + t.datetime "updated_at" t.integer "notification_level", default: 3, null: false end @@ -365,6 +373,7 @@ ActiveRecord::Schema.define(version: 20140304005354) do t.boolean "push_events", default: true, null: false t.boolean "issues_events", default: false, null: false t.boolean "merge_requests_events", default: false, null: false + t.boolean "tag_push_events", default: false end add_index "web_hooks", ["project_id"], name: "index_web_hooks_on_project_id", using: :btree -- cgit v1.2.1 From 7f50c7f62c083ef5599b2ffe24723683c246bfb0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 17:14:48 +0200 Subject: Move project creation to service Signed-off-by: Dmitriy Zaporozhets --- app/observers/project_observer.rb | 26 +------------------------- app/services/projects/create_service.rb | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/app/observers/project_observer.rb b/app/observers/project_observer.rb index 4e3deec01bf..ad41ddad58f 100644 --- a/app/observers/project_observer.rb +++ b/app/observers/project_observer.rb @@ -1,30 +1,6 @@ class ProjectObserver < BaseObserver def after_create(project) - project.update_column(:last_activity_at, project.created_at) - - return true if project.forked? - - if project.import? - RepositoryImportWorker.perform_in(5.seconds, project.id) - else - GitlabShellWorker.perform_async( - :add_repository, - project.path_with_namespace - ) - - log_info("#{project.owner.name} created a new project \"#{project.name_with_namespace}\"") - end - - if project.wiki_enabled? - begin - # force the creation of a wiki, - GollumWiki.new(project, project.owner).wiki - rescue GollumWiki::CouldNotCreateWikiError => ex - # Prevent project observer crash - # if failed to create wiki - nil - end - end + log_info("#{project.owner.name} created a new project \"#{project.name_with_namespace}\"") end def after_update(project) diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index ba131d8ffbe..b3f97a7c9c1 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -58,6 +58,29 @@ module Projects user: current_user ) end + + @project.update_column(:last_activity_at, @project.created_at) + + if @project.import? + RepositoryImportWorker.perform_in(5.seconds, @project.id) + else + GitlabShellWorker.perform_async( + :add_repository, + @project.path_with_namespace + ) + + end + + if @project.wiki_enabled? + begin + # force the creation of a wiki, + GollumWiki.new(@project, @project.owner).wiki + rescue GollumWiki::CouldNotCreateWikiError => ex + # Prevent project observer crash + # if failed to create wiki + nil + end + end end @project -- cgit v1.2.1 From 1436433c7b982fbe17b10f744f2f65f208305d3c Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 17:15:03 +0200 Subject: Add project import state machine Signed-off-by: Dmitriy Zaporozhets --- app/models/project.rb | 28 ++++++++++++++++++---------- app/workers/repository_import_worker.rb | 6 ++++-- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 47dc8a1fdb0..90c33822568 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -59,13 +59,10 @@ class Project < ActiveRecord::Base has_one :gemnasium_service, dependent: :destroy has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id" has_one :forked_from_project, through: :forked_project_link - # Merge Requests for target project should be removed with it has_many :merge_requests, dependent: :destroy, foreign_key: "target_project_id" - # Merge requests from source project should be kept when source project was removed has_many :fork_merge_requests, foreign_key: "source_project_id", class_name: MergeRequest - has_many :issues, -> { order "state DESC, created_at DESC" }, dependent: :destroy has_many :services, dependent: :destroy has_many :events, dependent: :destroy @@ -74,10 +71,8 @@ class Project < ActiveRecord::Base has_many :snippets, dependent: :destroy, class_name: "ProjectSnippet" has_many :hooks, dependent: :destroy, class_name: "ProjectHook" has_many :protected_branches, dependent: :destroy - has_many :users_projects, dependent: :destroy has_many :users, through: :users_projects - has_many :deploy_keys_projects, dependent: :destroy has_many :deploy_keys, through: :deploy_keys_projects @@ -97,15 +92,12 @@ class Project < ActiveRecord::Base validates :issues_enabled, :wall_enabled, :merge_requests_enabled, :wiki_enabled, inclusion: { in: [true, false] } validates :issues_tracker_id, length: { maximum: 255 }, allow_blank: true - validates :namespace, presence: true validates_uniqueness_of :name, scope: :namespace_id validates_uniqueness_of :path, scope: :namespace_id - validates :import_url, format: { with: URI::regexp(%w(git http https)), message: "should be a valid url" }, if: :import? - validate :check_limit, on: :create # Scopes @@ -118,14 +110,30 @@ class Project < ActiveRecord::Base scope :sorted_by_activity, -> { reorder("projects.last_activity_at DESC") } scope :personal, ->(user) { where(namespace_id: user.namespace_id) } scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) } - scope :public_only, -> { where(visibility_level: Project::PUBLIC) } scope :public_and_internal_only, -> { where(visibility_level: Project.public_and_internal_levels) } - scope :non_archived, -> { where(archived: false) } enumerize :issues_tracker, in: (Gitlab.config.issues_tracker.keys).append(:gitlab), default: :gitlab + state_machine :import_status, initial: :none do + event :import_start do + transition :none => :started + end + + event :import_finish do + transition :started => :finished + end + + event :import_fail do + transition :started => :timeout + end + + state :started + state :finished + state :timeout + end + class << self def public_and_internal_levels [Project::PUBLIC, Project::INTERNAL] diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb index 95b80bca7c0..c577cb0273f 100644 --- a/app/workers/repository_import_worker.rb +++ b/app/workers/repository_import_worker.rb @@ -6,16 +6,18 @@ class RepositoryImportWorker def perform(project_id) project = Project.find(project_id) + project.import_start + result = gitlab_shell.send(:import_repository, project.path_with_namespace, project.import_url) if result - project.imported = true + project.import_finish project.save project.satellite.create unless project.satellite.exists? else - project.imported = false + project.import_fail end end end -- cgit v1.2.1 From 37db76a31b8d9676aeadcaf6e2e175ead0f68d74 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 19:25:48 +0200 Subject: Project import and retry import scaffold Signed-off-by: Dmitriy Zaporozhets --- app/controllers/projects_controller.rb | 37 ++++++++++++------ app/views/projects/create.js.haml | 8 +++- app/views/projects/empty.html.haml | 70 ++++++++++++++-------------------- app/views/projects/import.html.haml | 29 ++++++++++++++ 4 files changed, 89 insertions(+), 55 deletions(-) create mode 100644 app/views/projects/import.html.haml diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f1c0336e6ea..f4087b884c8 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -5,7 +5,7 @@ class ProjectsController < ApplicationController # Authorize 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] layout 'navless', only: [:new, :create, :fork] @@ -21,16 +21,9 @@ class ProjectsController < ApplicationController def create @project = ::Projects::CreateService.new(current_user, params[:project]).execute + flash[:notice] = 'Project was successfully created.' if @project.saved? 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 end end @@ -67,9 +60,7 @@ class ProjectsController < ApplicationController if @project.empty_repo? render "projects/empty", layout: user_layout else - if current_user - @last_push = current_user.recent_push(@project.id) - end + @last_push = current_user.recent_push(@project.id) if current_user render :show, layout: user_layout end end @@ -77,6 +68,28 @@ class ProjectsController < ApplicationController 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 return access_denied! unless can?(current_user, :remove_project, project) diff --git a/app/views/projects/create.js.haml b/app/views/projects/create.js.haml index a444b8b59a6..89710d3a09a 100644 --- a/app/views/projects/create.js.haml +++ b/app/views/projects/create.js.haml @@ -1,6 +1,10 @@ - if @project.saved? - :plain - location.href = "#{project_path(@project)}"; + - if @project.import? + :plain + location.href = "#{import_project_path(@project)}"; + - else + :plain + location.href = "#{project_path(@project)}"; - else :plain $(".project-edit-errors").html("#{escape_javascript(render('errors'))}"); diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index 489b9b0e951..97dc73bce14 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -1,46 +1,34 @@ = render "home_panel" -- if @project.import? && !@project.imported - .save-project-loader - %center - %h2 - %i.icon-spinner.icon-spin - Importing repository. - %p.monospace git clone --bare #{@project.import_url} - %p Please wait while we import the repository for you. Refresh at will. - :javascript - new ProjectImport(); +%div.git-empty + %fieldset + %legend Git global setup: + %pre.dark + :preserve + git config --global user.name "#{git_user_name}" + git config --global user.email "#{git_user_email}" -- else - %div.git-empty - %fieldset - %legend Git global setup: - %pre.dark - :preserve - git config --global user.name "#{git_user_name}" - git config --global user.email "#{git_user_email}" + %fieldset + %legend Create Repository + %pre.dark + :preserve + mkdir #{@project.path} + cd #{@project.path} + git init + 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 - %legend Create Repository - %pre.dark - :preserve - mkdir #{@project.path} - cd #{@project.path} - git init - 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 + %legend Existing Git Repo? + %pre.dark + :preserve + cd existing_git_repo + git remote add origin #{ content_tag(:span, default_url_to_repo, class: 'clone')} + git push -u origin master - %fieldset - %legend Existing Git Repo? - %pre.dark - :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" +- 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" diff --git a/app/views/projects/import.html.haml b/app/views/projects/import.html.haml new file mode 100644 index 00000000000..c9fb6c5c6ab --- /dev/null +++ b/app/views/projects/import.html.haml @@ -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 -- cgit v1.2.1 From b47646ef13597836cad342a4d9372316289f0155 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 12 Mar 2014 19:26:09 +0200 Subject: Add retry feature to project import Signed-off-by: Dmitriy Zaporozhets --- app/models/project.rb | 28 +++++++++++++++++++++++++--- app/services/projects/create_service.rb | 2 +- app/workers/repository_import_worker.rb | 2 -- config/routes.rb | 2 ++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 90c33822568..c2ba21ac7e9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -126,12 +126,18 @@ class Project < ActiveRecord::Base end event :import_fail do - transition :started => :timeout + transition :started => :failed + end + + event :import_retry do + transition :failed => :started end state :started state :finished - state :timeout + state :failed + + after_transition any => :started, :do => :add_import_job end class << self @@ -210,12 +216,28 @@ class Project < ActiveRecord::Base id && persisted? end + def add_import_job + RepositoryImportWorker.perform_in(2.seconds, id) + end + def import? import_url.present? end def imported? - imported + import_finished? + end + + def import_in_progress? + import? && import_status == 'started' + end + + def import_failed? + import_status == 'failed' + end + + def import_finished? + import_status == 'finished' end def check_limit diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index b3f97a7c9c1..4d3d518a509 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -62,7 +62,7 @@ module Projects @project.update_column(:last_activity_at, @project.created_at) if @project.import? - RepositoryImportWorker.perform_in(5.seconds, @project.id) + @project.import_start else GitlabShellWorker.perform_async( :add_repository, diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb index c577cb0273f..e66df8c4db1 100644 --- a/app/workers/repository_import_worker.rb +++ b/app/workers/repository_import_worker.rb @@ -6,8 +6,6 @@ class RepositoryImportWorker def perform(project_id) project = Project.find(project_id) - project.import_start - result = gitlab_shell.send(:import_repository, project.path_with_namespace, project.import_url) diff --git a/config/routes.rb b/config/routes.rb index fdca1e62661..628d1f631bc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -179,6 +179,8 @@ Gitlab::Application.routes.draw do post :archive post :unarchive get :autocomplete_sources + get :import + put :retry_import end scope module: :projects do -- cgit v1.2.1 From aaff356655e47d78d1da6adca314ccf11f02268c Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Mar 2014 10:27:05 +0200 Subject: Redirect to import page from show when import in progress Signed-off-by: Dmitriy Zaporozhets --- app/controllers/projects_controller.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f4087b884c8..8d24052f724 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -48,6 +48,11 @@ class ProjectsController < ApplicationController end def show + if @project.import_in_progress? + redirect_to import_project_path(@project) + return + end + return authenticate_user! unless @project.public? || current_user limit = (params[:limit] || 20).to_i -- cgit v1.2.1 From 44c940391701c8ac6715a90a707db0c255e016d9 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Mar 2014 10:27:20 +0200 Subject: Hide retry import form for non masters Signed-off-by: Dmitriy Zaporozhets --- app/views/projects/import.html.haml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/views/projects/import.html.haml b/app/views/projects/import.html.haml index c9fb6c5c6ab..d11372be61b 100644 --- a/app/views/projects/import.html.haml +++ b/app/views/projects/import.html.haml @@ -15,15 +15,16 @@ %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 + - if can?(current_user, :admin_project, @project) + = 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 -- cgit v1.2.1 From 10c0cb8ca763861b8c636ccece7278407650f1c8 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Mar 2014 11:28:41 +0200 Subject: Add migration for already imported projects Signed-off-by: Dmitriy Zaporozhets --- ...0313092127_migrate_already_imported_projects.rb | 12 ++++ db/schema.rb | 83 +++++++++++----------- 2 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 db/migrate/20140313092127_migrate_already_imported_projects.rb diff --git a/db/migrate/20140313092127_migrate_already_imported_projects.rb b/db/migrate/20140313092127_migrate_already_imported_projects.rb new file mode 100644 index 00000000000..f4392c0f05e --- /dev/null +++ b/db/migrate/20140313092127_migrate_already_imported_projects.rb @@ -0,0 +1,12 @@ +class MigrateAlreadyImportedProjects < ActiveRecord::Migration + def up + Project.where(imported: true).update_all(import_status: "finished") + Project.where(imported: false).update_all(import_status: "none") + remove_column :projects, :imported + end + + def down + add_column :projects, :imported, :boolean, default: false + Project.where(import_status: 'finished').update_all(imported: true) + end +end diff --git a/db/schema.rb b/db/schema.rb index 00627c945a7..2c5f46b2e97 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140312145357) do +ActiveRecord::Schema.define(version: 20140313092127) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -21,8 +21,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.datetime "starts_at" t.datetime "ends_at" t.integer "alert_type" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "color" t.string "font" end @@ -30,8 +30,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do create_table "deploy_keys_projects", force: true do |t| t.integer "deploy_key_id", null: false t.integer "project_id", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_index "deploy_keys_projects", ["project_id"], name: "index_deploy_keys_projects_on_project_id", using: :btree @@ -52,8 +52,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "title" t.text "data" t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "action" t.integer "author_id" end @@ -68,8 +68,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do create_table "forked_project_links", force: true do |t| t.integer "forked_to_project_id", null: false t.integer "forked_from_project_id", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_index "forked_project_links", ["forked_to_project_id"], name: "index_forked_project_links_on_forked_to_project_id", unique: true, using: :btree @@ -79,8 +79,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.integer "assignee_id" t.integer "author_id" t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "position", default: 0 t.string "branch_name" t.text "description" @@ -98,8 +98,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do create_table "keys", force: true do |t| t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.text "key" t.string "title" t.string "type" @@ -126,8 +126,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.integer "author_id" t.integer "assignee_id" t.string "title" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "milestone_id" t.string "state" t.string "merge_status" @@ -141,7 +141,7 @@ ActiveRecord::Schema.define(version: 20140312145357) do add_index "merge_requests", ["created_at"], name: "index_merge_requests_on_created_at", using: :btree add_index "merge_requests", ["milestone_id"], name: "index_merge_requests_on_milestone_id", using: :btree add_index "merge_requests", ["source_branch"], name: "index_merge_requests_on_source_branch", using: :btree - add_index "merge_requests", ["source_project_id"], name: "index_merge_requests_on_source_project_id", using: :btree + add_index "merge_requests", ["source_project_id"], name: "index_merge_requests_on_project_id", using: :btree add_index "merge_requests", ["target_branch"], name: "index_merge_requests_on_target_branch", using: :btree add_index "merge_requests", ["title"], name: "index_merge_requests_on_title", using: :btree @@ -150,8 +150,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.integer "project_id", null: false t.text "description" t.date "due_date" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "state" t.integer "iid" end @@ -163,8 +163,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "name", null: false t.string "path", null: false t.integer "owner_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "type" t.string "description", default: "", null: false t.string "avatar" @@ -179,15 +179,15 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.text "note" t.string "noteable_type" t.integer "author_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "project_id" t.string "attachment" t.string "line_code" t.string "commit_id" t.integer "noteable_id" - t.boolean "system", default: false, null: false t.text "st_diff" + t.boolean "system", default: false, null: false end add_index "notes", ["author_id"], name: "index_notes_on_author_id", using: :btree @@ -202,8 +202,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "name" t.string "path" t.text "description" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "creator_id" t.boolean "issues_enabled", default: true, null: false t.boolean "wall_enabled", default: true, null: false @@ -214,22 +214,21 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "issues_tracker_id" t.boolean "snippets_enabled", default: true, null: false t.datetime "last_activity_at" - t.boolean "imported", default: false, null: false t.string "import_url" t.integer "visibility_level", default: 0, null: false t.boolean "archived", default: false, null: false t.string "import_status" end - add_index "projects", ["creator_id"], name: "index_projects_on_creator_id", using: :btree + add_index "projects", ["creator_id"], name: "index_projects_on_owner_id", using: :btree add_index "projects", ["last_activity_at"], name: "index_projects_on_last_activity_at", using: :btree add_index "projects", ["namespace_id"], name: "index_projects_on_namespace_id", using: :btree create_table "protected_branches", force: true do |t| t.integer "project_id", null: false t.string "name", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree @@ -239,8 +238,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "title" t.string "token" t.integer "project_id", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.boolean "active", default: false, null: false t.string "project_url" t.string "subdomain" @@ -256,8 +255,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.text "content" t.integer "author_id", null: false t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "file_name" t.datetime "expires_at" t.boolean "private", default: true, null: false @@ -297,8 +296,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "name" t.boolean "admin", default: false, null: false t.integer "projects_limit", default: 10 @@ -320,7 +319,6 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.integer "notification_level", default: 1, null: false t.datetime "password_expires_at" t.integer "created_by_id" - t.datetime "last_credential_check_at" t.string "avatar" t.string "confirmation_token" t.datetime "confirmed_at" @@ -328,6 +326,7 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.string "unconfirmed_email" t.boolean "hide_no_ssh_key", default: false t.string "website_url", default: "", null: false + t.datetime "last_credential_check_at" end add_index "users", ["admin"], name: "index_users_on_admin", using: :btree @@ -343,8 +342,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do t.integer "group_access", null: false t.integer "group_id", null: false t.integer "user_id", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "notification_level", default: 3, null: false end @@ -353,8 +352,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do create_table "users_projects", force: true do |t| t.integer "user_id", null: false t.integer "project_id", null: false - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.integer "project_access", default: 0, null: false t.integer "notification_level", default: 3, null: false end @@ -366,8 +365,8 @@ ActiveRecord::Schema.define(version: 20140312145357) do create_table "web_hooks", force: true do |t| t.string "url" t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "type", default: "ProjectHook" t.integer "service_id" t.boolean "push_events", default: true, null: false -- cgit v1.2.1 From d1bee5e374595231327525472fab391bc078fa81 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Mar 2014 20:35:11 +0200 Subject: Remove default value for Project#imported Signed-off-by: Dmitriy Zaporozhets --- app/models/project.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index c2ba21ac7e9..392c38cc5d9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -28,7 +28,6 @@ class Project < ActiveRecord::Base include Gitlab::VisibilityLevel extend Enumerize - default_value_for :imported, false default_value_for :archived, false ActsAsTaggableOn.strict_case_match = true -- cgit v1.2.1 From 9064fba071d06439ead76890015c3d38ffa63375 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 13 Mar 2014 21:15:18 +0200 Subject: Mention retry feature for repository import in CHANGELOG Signed-off-by: Dmitriy Zaporozhets --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index f24cc8b5092..bcacc162b87 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,6 +15,7 @@ v 6.7.0 - Fixes a bug with group member administration (Matt DeTullio) - Sort tag names using VersionSorter (Robert Speicher) - Add GFM autocompletion for MergeRequests (Robert Speicher) + - Add retry feature for repository import v 6.6.2 - Fix 500 error on branch/tag create or remove via UI -- cgit v1.2.1 From b007cadf5534e4202a955825770019787a37f7d6 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 14 Mar 2014 12:19:02 +0200 Subject: Fix project creation test Signed-off-by: Dmitriy Zaporozhets --- features/project/create.feature | 3 ++- features/steps/project/create.rb | 2 +- lib/tasks/test.rake | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/features/project/create.feature b/features/project/create.feature index 395a3218b2b..bb8e3a368ed 100644 --- a/features/project/create.feature +++ b/features/project/create.feature @@ -3,6 +3,7 @@ Feature: Create Project A user with ability to create a project Should be able to create a new one + @javascript Scenario: User create a project Given I sign in as a user When I visit new project page @@ -19,4 +20,4 @@ Feature: Create Project And I click on HTTP Then Remote url should update to http link And If I click on SSH - Then Remote url should update to ssh link \ No newline at end of file + Then Remote url should update to ssh link diff --git a/features/steps/project/create.rb b/features/steps/project/create.rb index b59345e7078..b42e5bd3623 100644 --- a/features/steps/project/create.rb +++ b/features/steps/project/create.rb @@ -8,8 +8,8 @@ class CreateProject < Spinach::FeatureSteps end Then 'I should see project page' do - current_path.should == project_path(Project.last) page.should have_content "Empty" + current_path.should == project_path(Project.last) end And 'I should see empty project instuctions' do diff --git a/lib/tasks/test.rake b/lib/tasks/test.rake index 24d55b9455a..f19da1bb437 100644 --- a/lib/tasks/test.rake +++ b/lib/tasks/test.rake @@ -4,4 +4,3 @@ desc "GITLAB | Run all tests" task :test do Rake::Task["gitlab:test"].invoke end - -- cgit v1.2.1 From ac6b9fafdc78a3c5d7fc5c5903e7d28d2f626d41 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 14 Mar 2014 12:53:05 +0200 Subject: Fix specs Signed-off-by: Dmitriy Zaporozhets --- spec/observers/users_project_observer_spec.rb | 24 ------------------------ spec/services/projects_create_service_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb index dea90b2bfa7..be277b4dbd2 100644 --- a/spec/observers/users_project_observer_spec.rb +++ b/spec/observers/users_project_observer_spec.rb @@ -47,30 +47,6 @@ describe UsersProjectObserver do end describe "#after_create" do - context 'wiki_enabled creates repository directory' do - context 'wiki_enabled true creates wiki repository directory' do - before do - @project = create(:project, wiki_enabled: true) - @path = GollumWiki.new(@project, user).send(:path_to_repo) - end - - after do - FileUtils.rm_rf(@path) - end - - it { File.exists?(@path).should be_true } - end - - context 'wiki_enabled false does not create wiki repository directory' do - before do - @project = create(:project, wiki_enabled: false) - @path = GollumWiki.new(@project, user).send(:path_to_repo) - end - - it { File.exists?(@path).should be_false } - end - end - it "should send email to user" do subject.should_receive(:notification) Event.stub(create: true) diff --git a/spec/services/projects_create_service_spec.rb b/spec/services/projects_create_service_spec.rb index 0a41832a211..f2a784df103 100644 --- a/spec/services/projects_create_service_spec.rb +++ b/spec/services/projects_create_service_spec.rb @@ -38,6 +38,27 @@ describe Projects::CreateService do it { @project.namespace.should == @group } end + context 'wiki_enabled creates repository directory' do + context 'wiki_enabled true creates wiki repository directory' do + before do + @project = create_project(@user, @opts) + @path = GollumWiki.new(@project, @user).send(:path_to_repo) + end + + it { File.exists?(@path).should be_true } + end + + context 'wiki_enabled false does not create wiki repository directory' do + before do + @opts.merge!(wiki_enabled: false) + @project = create_project(@user, @opts) + @path = GollumWiki.new(@project, @user).send(:path_to_repo) + end + + it { File.exists?(@path).should be_false } + end + end + context 'respect configured visibility setting' do before(:each) do @settings = double("settings") -- cgit v1.2.1