Commit ab9d0236 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Create dir with namespace. Create namespace with user

parent f17ddeb3
...@@ -10,6 +10,8 @@ class Namespace < ActiveRecord::Base ...@@ -10,6 +10,8 @@ class Namespace < ActiveRecord::Base
delegate :name, to: :owner, allow_nil: true, prefix: true delegate :name, to: :owner, allow_nil: true, prefix: true
after_save :ensure_dir_exist
scope :root, where('type IS NULL') scope :root, where('type IS NULL')
def self.search query def self.search query
...@@ -23,4 +25,9 @@ class Namespace < ActiveRecord::Base ...@@ -23,4 +25,9 @@ class Namespace < ActiveRecord::Base
def human_name def human_name
owner_name owner_name
end end
def ensure_dir_exist
namespace_dir_path = File.join(Gitlab.config.git_base_path, code)
Dir.mkdir(namespace_dir_path) unless File.exists?(namespace_dir_path)
end
end end
...@@ -67,6 +67,7 @@ class Project < ActiveRecord::Base ...@@ -67,6 +67,7 @@ class Project < ActiveRecord::Base
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
validates :issues_enabled, :wall_enabled, :merge_requests_enabled, validates :issues_enabled, :wall_enabled, :merge_requests_enabled,
:wiki_enabled, inclusion: { in: [true, false] } :wiki_enabled, inclusion: { in: [true, false] }
validate :check_limit, :repo_name validate :check_limit, :repo_name
# Scopes # Scopes
...@@ -89,6 +90,12 @@ class Project < ActiveRecord::Base ...@@ -89,6 +90,12 @@ class Project < ActiveRecord::Base
project = Project.new params project = Project.new params
Project.transaction do Project.transaction do
# Build gitlab-hq code from GitLab HQ name
#
slug = project.name.dup.parameterize
project.code = project.path = slug
project.owner = user project.owner = user
project.namespace_id = namespace_id project.namespace_id = namespace_id
project.save! project.save!
......
...@@ -63,11 +63,14 @@ class User < ActiveRecord::Base ...@@ -63,11 +63,14 @@ class User < ActiveRecord::Base
validates :bio, length: { within: 0..255 } validates :bio, length: { within: 0..255 }
validates :extern_uid, :allow_blank => true, :uniqueness => {:scope => :provider} validates :extern_uid, :allow_blank => true, :uniqueness => {:scope => :provider}
validates :projects_limit, presence: true, numericality: {greater_than_or_equal_to: 0} validates :projects_limit, presence: true, numericality: {greater_than_or_equal_to: 0}
validates :username, presence: true
before_validation :generate_password, on: :create before_validation :generate_password, on: :create
before_save :ensure_authentication_token before_save :ensure_authentication_token
alias_attribute :private_token, :authentication_token alias_attribute :private_token, :authentication_token
delegate :code, to: :namespace, allow_nil: true, prefix: true
# Scopes # Scopes
scope :not_in_project, ->(project) { where("id not in (:ids)", ids: project.users.map(&:id) ) } scope :not_in_project, ->(project) { where("id not in (:ids)", ids: project.users.map(&:id) ) }
scope :admins, where(admin: true) scope :admins, where(admin: true)
...@@ -122,4 +125,8 @@ class User < ActiveRecord::Base ...@@ -122,4 +125,8 @@ class User < ActiveRecord::Base
namespaces = namespaces + Group.all if admin namespaces = namespaces + Group.all if admin
namespaces namespaces
end end
def several_namespaces?
namespaces.size > 1
end
end end
class UserObserver < ActiveRecord::Observer class UserObserver < ActiveRecord::Observer
def after_create(user) def after_create(user)
user.create_namespace(code: user.username, name: user.name)
log_info("User \"#{user.name}\" (#{user.email}) was created") log_info("User \"#{user.name}\" (#{user.email}) was created")
Notify.new_user_email(user.id, user.password).deliver Notify.new_user_email(user.id, user.password).deliver
...@@ -10,7 +12,7 @@ class UserObserver < ActiveRecord::Observer ...@@ -10,7 +12,7 @@ class UserObserver < ActiveRecord::Observer
end end
def after_save user def after_save user
if user.username_changed? if user.username_changed? and user.namespace
user.namespace.update_attributes(code: user.username) user.namespace.update_attributes(code: user.username)
end end
end end
......
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
.input .input
= f.text_field :name = f.text_field :name
%span.help-inline * required %span.help-inline * required
.clearfix
= f.label :username
.input
= f.text_field :username
%span.help-inline * required
.clearfix .clearfix
= f.label :email = f.label :email
.input .input
...@@ -26,11 +31,11 @@ ...@@ -26,11 +31,11 @@
= f.label :force_random_password do = f.label :force_random_password do
%span Generate random password %span Generate random password
.input= f.check_box :force_random_password, {}, true, nil .input= f.check_box :force_random_password, {}, true, nil
%div.password-fields %div.password-fields
.clearfix .clearfix
= f.label :password = f.label :password
.input= f.password_field :password, disabled: f.object.force_random_password .input= f.password_field :password, disabled: f.object.force_random_password
.clearfix .clearfix
= f.label :password_confirmation = f.label :password_confirmation
.input= f.password_field :password_confirmation, disabled: f.object.force_random_password .input= f.password_field :password_confirmation, disabled: f.object.force_random_password
......
...@@ -9,27 +9,12 @@ ...@@ -9,27 +9,12 @@
= f.text_field :name, placeholder: "Example Project", class: "xxlarge" = f.text_field :name, placeholder: "Example Project", class: "xxlarge"
= f.submit 'Create project', class: "btn primary project-submit" = f.submit 'Create project', class: "btn primary project-submit"
%hr - if current_user.several_namespaces?
%div.adv_settings
%h6 Advanced settings:
- if current_user.namespaces.size > 1
.clearfix
= f.label :namespace_id do
Namespace
.input
= f.select :namespace_id, namespaces_options, {}, {class: 'chosen'}
.clearfix
= f.label :path do
Git Clone
.input
.input-prepend
%span.add-on= Gitlab.config.ssh_path
= f.text_field :path, placeholder: "example_project", disabled: !@project.new_record?
%span.add-on= ".git"
.clearfix .clearfix
= f.label :code do = f.label :namespace_id do
URL %span.cgray Namespace
.input .input
.input-prepend = f.select :namespace_id, namespaces_options, {}, {class: 'chosen'}
%span.add-on= web_app_url %hr
= f.text_field :code, placeholder: "example" %p.padded
All created project are private. You choose who can see project and commit to repository.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment