diff --git a/app/models/user.rb b/app/models/user.rb index 1bc070f040d..c2486fd3a16 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -77,7 +77,6 @@ class User < ActiveRecord::Base delegate :path, to: :namespace, allow_nil: true, prefix: true # Scopes - scope :not_in_project, ->(project) { where("id not in (:ids)", ids: project.users.map(&:id) ) } scope :admins, where(admin: true) scope :blocked, where(blocked: true) scope :active, where(blocked: false) @@ -93,6 +92,14 @@ class User < ActiveRecord::Base end end + def not_in_project(project) + if project.users.present? + where("id not in (:ids)", ids: project.users.map(&:id) ) + else + scoped + end + end + def without_projects where('id NOT IN (SELECT DISTINCT(user_id) FROM users_projects)') end diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml index 310cfa53890..0b9f91f7a5f 100644 --- a/app/views/admin/projects/index.html.haml +++ b/app/views/admin/projects/index.html.haml @@ -1,5 +1,5 @@ %h3.page_title - Projects (#{@projects.count}) + Projects (#{Project.count}) = link_to 'New Project', new_project_path, class: "btn small right" %br = form_tag admin_projects_path, method: :get, class: 'form-inline' do diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 1df4f590bcb..87290abe7a6 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -1,5 +1,5 @@ %h3.page_title - Users (#{@admin_users.count}) + Users = link_to 'New User', new_admin_user_path, class: "btn small right" %br @@ -8,16 +8,21 @@ = submit_tag "Search", class: "btn submit primary" %ul.nav.nav-tabs %li{class: "#{'active' unless params[:filter]}"} - = link_to "Active", admin_users_path + = link_to admin_users_path do + Active + %span.badge= User.active.count %li{class: "#{'active' if params[:filter] == "admins"}"} = link_to admin_users_path(filter: "admins") do Admins + %span.badge= User.admins.count %li{class: "#{'active' if params[:filter] == "blocked"}"} = link_to admin_users_path(filter: "blocked") do Blocked + %span.badge= User.blocked.count %li{class: "#{'active' if params[:filter] == "wop"}"} = link_to admin_users_path(filter: "wop") do Without projects + %span.badge= User.without_projects.count %table %thead diff --git a/db/fixtures/development/001_admin.rb b/db/fixtures/development/001_admin.rb index fa8addbe199..fbe41e4d22d 100644 --- a/db/fixtures/development/001_admin.rb +++ b/db/fixtures/development/001_admin.rb @@ -9,13 +9,3 @@ User.seed(:id, [ admin: true, } ]) - - -Key.seed(:id, [ - { - id: 1, - title: "Sample key", - key: "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=", - user_id: 1, - } -]) diff --git a/db/fixtures/development/002_project.rb b/db/fixtures/development/002_project.rb index 4db11a878ec..d145cc6254f 100644 --- a/db/fixtures/development/002_project.rb +++ b/db/fixtures/development/002_project.rb @@ -1,14 +1,26 @@ Group.seed(:id, [ + { id: 99, name: "GitLab", path: 'gitlab', owner_id: 1 }, { id: 100, name: "Brightbox", path: 'brightbox', owner_id: 1 }, { id: 101, name: "KDE", path: 'kde', owner_id: 1 }, ]) Project.seed(:id, [ + + # Global { id: 1, name: "Underscore.js", path: "underscore", owner_id: 1 }, { id: 2, name: "Diaspora", path: "diaspora", owner_id: 1 }, + + # Brightbox { id: 3, namespace_id: 100, name: "Brightbox CLI", path: "brightbox-cli", owner_id: 1 }, { id: 4, namespace_id: 100, name: "Puppet", path: "puppet", owner_id: 1 }, + + # KDE { id: 5, namespace_id: 101, name: "kdebase", path: "kdebase", owner_id: 1}, { id: 6, namespace_id: 101, name: "kdelibs", path: "kdelibs", owner_id: 1}, { id: 7, namespace_id: 101, name: "amarok", path: "amarok", owner_id: 1}, + + # GitLab + { id: 8, namespace_id: 99, name: "gitlabhq", path: "gitlabhq", owner_id: 1}, + { id: 9, namespace_id: 99, name: "gitlab-ci", path: "gitlab-ci", owner_id: 1}, + { id: 10, namespace_id: 99, name: "gitlab-recipes", path: "gitlab-recipes", owner_id: 1}, ]) diff --git a/db/fixtures/development/003_users.rb b/db/fixtures/development/003_users.rb index 25705f1b726..abcb0259618 100644 --- a/db/fixtures/development/003_users.rb +++ b/db/fixtures/development/003_users.rb @@ -1,11 +1,15 @@ -User.seed(:id, [ - { id: 2, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 3, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 4, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 5, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 6, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 7, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 8, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email}, - { id: 9, username: Faker::Internet.user_name, name: Faker::Name.name, email: Faker::Internet.email} -]) - +Gitlab::Seeder.quiet do + (2..300).each do |i| + begin + User.seed(:id, [{ + id: i, + username: Faker::Internet.user_name, + name: Faker::Name.name, + email: Faker::Internet.email, + }]) + print '.' + rescue ActiveRecord::RecordNotSaved + print 'F' + end + end +end diff --git a/db/fixtures/development/004_teams.rb b/db/fixtures/development/004_teams.rb index 2752cb44e1d..7a8f9139d3f 100644 --- a/db/fixtures/development/004_teams.rb +++ b/db/fixtures/development/004_teams.rb @@ -1,24 +1,26 @@ UsersProject.skip_callback(:save, :after, :update_repository) -UsersProject.seed(:id, [ - { :id => 1, :project_id => 1, :user_id => 1, :project_access => UsersProject::MASTER }, - { :id => 2, :project_id => 1, :user_id => 2, :project_access => UsersProject::REPORTER}, - { :id => 3, :project_id => 1, :user_id => 3, :project_access => UsersProject::REPORTER}, - { :id => 4, :project_id => 1, :user_id => 4, :project_access => UsersProject::REPORTER}, - { :id => 5, :project_id => 1, :user_id => 5, :project_access => UsersProject::REPORTER}, +Gitlab::Seeder.quiet do - { :id => 6, :project_id => 2, :user_id => 1, :project_access => UsersProject::MASTER }, - { :id => 7, :project_id => 2, :user_id => 2, :project_access => UsersProject::REPORTER}, - { :id => 8, :project_id => 2, :user_id => 3, :project_access => UsersProject::REPORTER}, - { :id => 9, :project_id => 2, :user_id => 4, :project_access => UsersProject::MASTER}, - { :id => 11, :project_id => 2, :user_id => 5, :project_access => UsersProject::MASTER}, + (1..300).each do |i| + # Random Project + project = Project.scoped.sample - { :id => 12, :project_id => 3, :user_id => 1, :project_access => UsersProject::MASTER }, - { :id => 13, :project_id => 3, :user_id => 2, :project_access => UsersProject::REPORTER}, - { :id => 14, :project_id => 3, :user_id => 3, :project_access => UsersProject::MASTER}, - { :id => 15, :project_id => 3, :user_id => 4, :project_access => UsersProject::REPORTER}, - { :id => 16, :project_id => 3, :user_id => 5, :project_access => UsersProject::MASTER} -]) + # Random user + user = User.not_in_project(project).sample + + next unless user + + UsersProject.seed(:id, [{ + id: i, + project_id: project.id, + user_id: user.id, + project_access: UsersProject.access_roles.values.sample + }]) + + print('.') + end +end UsersProject.set_callback(:save, :after, :update_repository) diff --git a/db/fixtures/development/006_wall.rb b/db/fixtures/development/006_wall.rb index a9fb66dda6b..c4e304cc217 100644 --- a/db/fixtures/development/006_wall.rb +++ b/db/fixtures/development/006_wall.rb @@ -1,16 +1,18 @@ Gitlab::Seeder.quiet do (1..300).each do |i| # Random Project - project_id = rand(2) + 1 - project = Project.find(project_id) + project = Project.all.sample # Random user user = project.users.sample + + next unless user + user_id = user.id Note.seed(:id, [{ id: i, - project_id: project_id, + project_id: project.id, author_id: user_id, note: Faker::Lorem.sentence(6) }]) diff --git a/db/fixtures/development/007_issues.rb b/db/fixtures/development/007_issues.rb index 98e32fccc3d..8978db4742b 100644 --- a/db/fixtures/development/007_issues.rb +++ b/db/fixtures/development/007_issues.rb @@ -1,17 +1,19 @@ Gitlab::Seeder.quiet do (1..300).each do |i| # Random Project - project_id = rand(2) + 1 - project = Project.find(project_id) + project = Project.all.sample # Random user user = project.users.sample + + next unless user + user_id = user.id IssueObserver.current_user = user Issue.seed(:id, [{ id: i, - project_id: project_id, + project_id: project.id, author_id: user_id, assignee_id: user_id, closed: [true, false].sample, diff --git a/db/fixtures/development/008_merge_requests.rb b/db/fixtures/development/008_merge_requests.rb index 698c55ad95f..9904b4a1505 100644 --- a/db/fixtures/development/008_merge_requests.rb +++ b/db/fixtures/development/008_merge_requests.rb @@ -1,19 +1,20 @@ Gitlab::Seeder.quiet do (1..300).each do |i| # Random Project - project_id = rand(2) + 1 - project = Project.find(project_id) + project = Project.all.sample # Random user user = project.users.sample + + next unless user + user_id = user.id MergeRequestObserver.current_user = user - MergeRequest.seed(:id, [{ id: i, source_branch: 'master', target_branch: 'feature', - project_id: project_id, + project_id: project.id, author_id: user_id, assignee_id: user_id, closed: [true, false].sample, diff --git a/db/fixtures/development/009_source_code.rb b/db/fixtures/development/009_source_code.rb index 6b9b6584a58..d3fe69c6f55 100644 --- a/db/fixtures/development/009_source_code.rb +++ b/db/fixtures/development/009_source_code.rb @@ -1,16 +1,18 @@ -root = Gitlab.config.git_base_path +root = Gitlab.config.gitolite.repos_path projects = [ - { path: 'underscore.git', git: 'https://github.com/documentcloud/underscore.git' }, - { path: 'diaspora.git', git: 'https://github.com/diaspora/diaspora.git' }, + { path: 'underscore.git', git: 'https://github.com/documentcloud/underscore.git' }, + { path: 'diaspora.git', git: 'https://github.com/diaspora/diaspora.git' }, { path: 'brightbox/brightbox-cli.git', git: 'https://github.com/brightbox/brightbox-cli.git' }, - { path: 'brightbox/puppet.git', git: 'https://github.com/brightbox/puppet.git' }, + { path: 'brightbox/puppet.git', git: 'https://github.com/brightbox/puppet.git' }, + { path: 'gitlab/gitlabhq.git', git: 'https://github.com/gitlabhq/gitlabhq.git' }, + { path: 'gitlab/gitlab-ci.git', git: 'https://github.com/gitlabhq/gitlab-ci.git' }, + { path: 'gitlab/gitlab-recipres.git', git: 'https://github.com/gitlabhq/gitlab-recipes.git' }, ] projects.each do |project| project_path = File.join(root, project[:path]) - next if File.exists?(project_path) cmds = [ diff --git a/db/fixtures/development/010_keys.rb b/db/fixtures/development/010_keys.rb new file mode 100644 index 00000000000..d17e73db56b --- /dev/null +++ b/db/fixtures/development/010_keys.rb @@ -0,0 +1,8 @@ +Key.seed(:id, [ + { + id: 1, + title: "Sample key", + key: "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=", + user_id: 1, + } +]) diff --git a/lib/support/truncate_repositories.sh b/lib/support/truncate_repositories.sh new file mode 100755 index 00000000000..3b14e2ee362 --- /dev/null +++ b/lib/support/truncate_repositories.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Danger!!! Data Loss" +while true; do + read -p "Do you wish to all directories except gitolite-admin.git from /home/git/repositories/ (y/n) ?: " yn + case $yn in + [Yy]* ) sh -c "find /home/git/repositories/. -maxdepth 1 -not -name 'gitolite-admin.git' -not -name '.' | xargs sudo rm -rf"; break;; + [Nn]* ) exit;; + * ) echo "Please answer yes or no.";; + esac +done