Commit 81952b61 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce

parents b8af2ecc 43b444f4
...@@ -157,11 +157,11 @@ class Commit ...@@ -157,11 +157,11 @@ class Commit
end end
def author def author
User.find_for_commit(author_email, author_name) @author ||= User.find_by_any_email(author_email)
end end
def committer def committer
User.find_for_commit(committer_email, committer_name) @committer ||= User.find_by_any_email(committer_email)
end end
def notes def notes
......
...@@ -225,7 +225,8 @@ class User < ActiveRecord::Base ...@@ -225,7 +225,8 @@ class User < ActiveRecord::Base
end end
end end
def find_for_commit(email, name) # Find a User by their primary email or any associated secondary email
def find_by_any_email(email)
user_table = arel_table user_table = arel_table
email_table = Email.arel_table email_table = Email.arel_table
...@@ -237,13 +238,8 @@ class User < ActiveRecord::Base ...@@ -237,13 +238,8 @@ class User < ActiveRecord::Base
join(email_table, Arel::Nodes::OuterJoin). join(email_table, Arel::Nodes::OuterJoin).
# ON "users"."id" = "emails"."user_id" # ON "users"."id" = "emails"."user_id"
on(user_table[:id].eq(email_table[:user_id])). on(user_table[:id].eq(email_table[:user_id])).
# WHERE ("user"."email" = '<email>' OR "user"."name" = '<name>') # WHERE ("user"."email" = '<email>' OR "emails"."email" = '<email>')
# OR "emails"."email" = '<email>' where(user_table[:email].eq(email).or(email_table[:email].eq(email)))
where(
user_table[:email].eq(email).
or(user_table[:name].eq(name)).
or(email_table[:email].eq(email))
)
find_by_sql(query.to_sql).first find_by_sql(query.to_sql).first
end end
......
...@@ -366,28 +366,22 @@ describe User do ...@@ -366,28 +366,22 @@ describe User do
end end
end end
describe '.find_for_commit' do describe '.find_by_any_email' do
it 'finds by primary email' do it 'finds by primary email' do
user = create(:user, email: 'foo@example.com') user = create(:user, email: 'foo@example.com')
expect(User.find_for_commit(user.email, '')).to eq user expect(User.find_by_any_email(user.email)).to eq user
end end
it 'finds by secondary email' do it 'finds by secondary email' do
email = create(:email, email: 'foo@example.com') email = create(:email, email: 'foo@example.com')
user = email.user user = email.user
expect(User.find_for_commit(email.email, '')).to eq user expect(User.find_by_any_email(email.email)).to eq user
end
it 'finds by name' do
user = create(:user, name: 'Joey JoJo')
expect(User.find_for_commit('', 'Joey JoJo')).to eq user
end end
it 'returns nil when nothing found' do it 'returns nil when nothing found' do
expect(User.find_for_commit('', '')).to be_nil expect(User.find_by_any_email('')).to be_nil
end end
end end
......
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