Commit e8466a21ca880b0ecc2682177d07234f6f3725f6

Authored by Marin Jankovski
2 parents 0f080a94 fcdcb1a6

Merge branch 'case_sensitivity' into 'master'

Case Sensitivity for MYSQL

#1014
app/models/namespace.rb
@@ -27,7 +27,7 @@ class Namespace < ActiveRecord::Base @@ -27,7 +27,7 @@ class Namespace < ActiveRecord::Base
27 format: { with: Gitlab::Regex.name_regex, 27 format: { with: Gitlab::Regex.name_regex,
28 message: "only letters, digits, spaces & '_' '-' '.' allowed." } 28 message: "only letters, digits, spaces & '_' '-' '.' allowed." }
29 validates :description, length: { within: 0..255 } 29 validates :description, length: { within: 0..255 }
30 - validates :path, uniqueness: true, presence: true, length: { within: 1..255 }, 30 + validates :path, uniqueness: { case_sensitive: false }, presence: true, length: { within: 1..255 },
31 exclusion: { in: Gitlab::Blacklist.path }, 31 exclusion: { in: Gitlab::Blacklist.path },
32 format: { with: Gitlab::Regex.path_regex, 32 format: { with: Gitlab::Regex.path_regex,
33 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } 33 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
app/models/user.rb
@@ -109,7 +109,7 @@ class User < ActiveRecord::Base @@ -109,7 +109,7 @@ class User < ActiveRecord::Base
109 validates :bio, length: { maximum: 255 }, allow_blank: true 109 validates :bio, length: { maximum: 255 }, allow_blank: true
110 validates :extern_uid, allow_blank: true, uniqueness: {scope: :provider} 110 validates :extern_uid, allow_blank: true, uniqueness: {scope: :provider}
111 validates :projects_limit, presence: true, numericality: {greater_than_or_equal_to: 0} 111 validates :projects_limit, presence: true, numericality: {greater_than_or_equal_to: 0}
112 - validates :username, presence: true, uniqueness: true, 112 + validates :username, presence: true, uniqueness: { case_sensitive: false },
113 exclusion: { in: Gitlab::Blacklist.path }, 113 exclusion: { in: Gitlab::Blacklist.path },
114 format: { with: Gitlab::Regex.username_regex, 114 format: { with: Gitlab::Regex.username_regex,
115 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" } 115 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
doc/install/database_mysql.md 0 → 100644
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
  1 +## Note
  2 +
  3 +We do not recommend using MySQL due to various issues. For example, case [(in)sensitivity](https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html) and [problems](http://bugs.mysql.com/bug.php?id=65830) that [suggested](http://bugs.mysql.com/bug.php?id=50909) [fixes](http://bugs.mysql.com/bug.php?id=65830) [have](http://bugs.mysql.com/bug.php?id=63164).
  4 +
  5 +## MySQL
  6 +
  7 + # Install the database packages
  8 + sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
  9 +
  10 + # Pick a database root password (can be anything), type it and press enter
  11 + # Retype the database root password and press enter
  12 +
  13 + # Secure your installation.
  14 + sudo mysql_secure_installation
  15 +
  16 + # Login to MySQL
  17 + mysql -u root -p
  18 +
  19 + # Type the database root password
  20 +
  21 + # Create a user for GitLab
  22 + # do not type the 'mysql>', this is part of the prompt
  23 + # change $password in the command below to a real password you pick
  24 + mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';
  25 +
  26 + # Create the GitLab production database
  27 + mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
  28 +
  29 + # Grant the GitLab user necessary permissions on the table.
  30 + mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';
  31 +
  32 + # Quit the database session
  33 + mysql> \q
  34 +
  35 + # Try connecting to the new database with the new user
  36 + sudo -u git -H mysql -u git -p -D gitlabhq_production
  37 +
  38 + # Type the password you replaced $password with earlier
  39 +
  40 + # You should now see a 'mysql>' prompt
  41 +
  42 + # Quit the database session
  43 + mysql> \q
  44 +
  45 + # You are done installing the database and can go back to the rest of the installation.
doc/install/databases.md
@@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
1 -# Setup Database  
2 -  
3 -GitLab supports the following databases:  
4 -  
5 -* MySQL (preferred)  
6 -* PostgreSQL  
7 -  
8 -  
9 -## MySQL  
10 -  
11 - # Install the database packages  
12 - sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev  
13 -  
14 - # Pick a database root password (can be anything), type it and press enter  
15 - # Retype the database root password and press enter  
16 -  
17 - # Secure your installation.  
18 - sudo mysql_secure_installation  
19 -  
20 - # Login to MySQL  
21 - mysql -u root -p  
22 -  
23 - # Type the database root password  
24 -  
25 - # Create a user for GitLab  
26 - # do not type the 'mysql>', this is part of the prompt  
27 - # change $password in the command below to a real password you pick  
28 - mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';  
29 -  
30 - # Create the GitLab production database  
31 - mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;  
32 -  
33 - # Grant the GitLab user necessary permissions on the table.  
34 - mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost';  
35 -  
36 - # Quit the database session  
37 - mysql> \q  
38 -  
39 - # Try connecting to the new database with the new user  
40 - sudo -u git -H mysql -u git -p -D gitlabhq_production  
41 -  
42 - # Type the password you replaced $password with earlier  
43 -  
44 - # You should now see a 'mysql>' prompt  
45 -  
46 - # Quit the database session  
47 - mysql> \q  
48 -  
49 - # You are done installing the database and can go back to the rest of the installation.  
50 -  
51 -  
52 -## PostgreSQL  
53 -  
54 - # Install the database packages  
55 - sudo apt-get install -y postgresql-9.1 postgresql-client libpq-dev  
56 -  
57 - # Login to PostgreSQL  
58 - sudo -u postgres psql -d template1  
59 -  
60 - # Create a user for GitLab.  
61 - template1=# CREATE USER git;  
62 -  
63 - # Create the GitLab production database & grant all privileges on database  
64 - template1=# CREATE DATABASE gitlabhq_production OWNER git;  
65 -  
66 - # Quit the database session  
67 - template1=# \q  
68 -  
69 - # Try connecting to the new database with the new user  
70 - sudo -u git -H psql -d gitlabhq_production  
71 -  
doc/install/installation.md
@@ -144,7 +144,25 @@ GitLab Shell is an ssh access and repository management software developed speci @@ -144,7 +144,25 @@ GitLab Shell is an ssh access and repository management software developed speci
144 144
145 # 5. Database 145 # 5. Database
146 146
147 -To setup the MySQL/PostgreSQL database and dependencies please see [doc/install/databases.md](./databases.md). 147 +We recommend using a PostgreSQL database. For MySQL check [MySQL setup guide](doc/install/database_mysql.md).
  148 +
  149 + # Install the database packages
  150 + sudo apt-get install -y postgresql-9.1 postgresql-client libpq-dev
  151 +
  152 + # Login to PostgreSQL
  153 + sudo -u postgres psql -d template1
  154 +
  155 + # Create a user for GitLab.
  156 + template1=# CREATE USER git;
  157 +
  158 + # Create the GitLab production database & grant all privileges on database
  159 + template1=# CREATE DATABASE gitlabhq_production OWNER git;
  160 +
  161 + # Quit the database session
  162 + template1=# \q
  163 +
  164 + # Try connecting to the new database with the new user
  165 + sudo -u git -H psql -d gitlabhq_production
148 166
149 167
150 # 6. GitLab 168 # 6. GitLab