This MR extends the commit calendar so it searches for commits made with every email address the user has associated with his account.

This fixes one of the problems mentioned in gitlab-org/gitlab-ce#1162 and makes the behavior of the commit calendar as described in the profile.
"All email addresses will be used to identify your commits."
This commit is contained in:
Stan Hu 2015-03-09 15:10:59 -07:00
parent 21c99e6a77
commit b26ab0ceeb
3 changed files with 44 additions and 1 deletions

View File

@ -146,7 +146,8 @@ class Repository
end
def timestamps_by_user_log(user)
args = %W(git log --author=#{user.email} --since=#{(Date.today - 1.year).to_s} --branches --pretty=format:%cd --date=short)
author_emails = '(' + user.all_emails.map{ |e| Regexp.escape(e) }.join('|') + ')'
args = %W(git log -E --author=#{author_emails} --since=#{(Date.today - 1.year).to_s} --branches --pretty=format:%cd --date=short)
dates = Gitlab::Popen.popen(args, path_to_repo).first.split("\n")
if dates.present?

View File

@ -18,4 +18,27 @@ describe Repository do
it { is_expected.to eq('c1acaa58bbcbc3eafe538cb8274ba387047b69f8') }
end
context :timestamps_by_user_log do
before do
Date.stub(:today).and_return(Date.new(2015, 03, 01))
end
describe 'single e-mail for user' do
let(:user) { create(:user, email: sample_commit.author_email) }
subject { repository.timestamps_by_user_log(user) }
it { is_expected.to eq(["2014-08-06", "2014-07-31", "2014-07-31"]) }
end
describe 'multiple emails for user' do
let(:email_alias) { create(:email, email: another_sample_commit.author_email) }
let(:user) { create(:user, email: sample_commit.author_email, emails: [email_alias]) }
subject { repository.timestamps_by_user_log(user) }
it { is_expected.to eq(["2015-01-10", "2014-08-06", "2014-07-31", "2014-07-31"]) }
end
end
end

View File

@ -43,6 +43,25 @@ eos
)
end
def another_sample_commit
OpenStruct.new(
id: "e56497bb5f03a90a51293fc6d516788730953899",
parent_id: '4cd80ccab63c82b4bad16faa5193fbd2aa06df40',
author_full_name: "Sytse Sijbrandij",
author_email: "sytse@gitlab.com",
files_changed_count: 1,
message: <<eos
Add directory structure for tree_helper spec
This directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module
See [merge request #275](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/275#note_732774)
See merge request !2
eos
)
end
def sample_big_commit
OpenStruct.new(
id: "913c66a37b4a45b9769037c55c2d238bd0942d2e",