Create dir with namespace. Create namespace with user
This commit is contained in:
parent
f17ddeb394
commit
ab9d023651
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
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
|
||||||
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 @@
|
||||||
.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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
- if current_user.several_namespaces?
|
||||||
|
.clearfix
|
||||||
|
= f.label :namespace_id do
|
||||||
|
%span.cgray Namespace
|
||||||
|
.input
|
||||||
|
= f.select :namespace_id, namespaces_options, {}, {class: 'chosen'}
|
||||||
%hr
|
%hr
|
||||||
%div.adv_settings
|
%p.padded
|
||||||
%h6 Advanced settings:
|
All created project are private. You choose who can see project and commit to repository.
|
||||||
- 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
|
|
||||||
= f.label :code do
|
|
||||||
URL
|
|
||||||
.input
|
|
||||||
.input-prepend
|
|
||||||
%span.add-on= web_app_url
|
|
||||||
= f.text_field :code, placeholder: "example"
|
|
||||||
|
|
Loading…
Reference in a new issue