From b3b1512a77941c901dbe367b1dfcde63d2be5b0c Mon Sep 17 00:00:00 2001 From: Max Magorsch Date: Thu, 20 Feb 2020 22:34:25 +0100 Subject: Add information about the committer So far, only the author infos have been parsed and displayed. The author and committer (dates) may however differ largely (especially in case of pull requests). That's why the committer infos will also be parsed, stored in the ES index and displayed in the changelog now. Signed-off-by: Max Magorsch --- app/controllers/packages_controller.rb | 2 +- app/helpers/links_helper.rb | 17 +++++++++++++++++ app/models/commit.rb | 9 ++++++--- app/repositories/commit_repository.rb | 9 ++++++--- app/views/feeds/packages.atom.builder | 2 +- app/views/packages/_changelog.html.erb | 2 +- app/views/packages/_changelog_entry.html.erb | 19 ++++++++++++++++--- lib/portage/util/history.rb | 23 +++++++++++++++-------- 8 files changed, 63 insertions(+), 20 deletions(-) diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index 3a4779a..905f9f1 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -42,7 +42,7 @@ class PackagesController < ApplicationController if stale?(etag: @package.updated_at, last_modified: @package.updated_at, public: true) @changelog = Rails.cache.fetch("changelog/#{@package.atom}") do - CommitRepository.find_sorted_by('packages', @package.category + '/' + @package.name, 'date', 'desc', 5) + CommitRepository.find_sorted_by('packages', @package.category + '/' + @package.name, 'committer_date', 'desc', 5) end respond_to do |wants| diff --git a/app/helpers/links_helper.rb b/app/helpers/links_helper.rb index bcdad83..afed16f 100644 --- a/app/helpers/links_helper.rb +++ b/app/helpers/links_helper.rb @@ -1,3 +1,5 @@ +require 'digest/md5' + module LinksHelper # Slash-in-Link-Fix # Replaces the URLencoded slash with a proper slash @@ -12,6 +14,21 @@ module LinksHelper class: 'kk-commit' end + def full_link_to_gitweb_commit(commitid) + link_to commitid, + gitweb_commit_url(commitid), + title: commitid, + class: 'kk-commit' + end + + def gitweb_patch_url(commitid) + 'https://gitweb.gentoo.org/repo/gentoo.git/patch/?id=%s' % commitid + end + + def gravatar_url(email) + 'https://www.gravatar.com/avatar/' + Digest::MD5.hexdigest(email.downcase).to_s + '?s=13&d=retro' + end + def gitweb_commit_url(commitid) 'https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=%s' % commitid end diff --git a/app/models/commit.rb b/app/models/commit.rb index 7989236..0809846 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -3,9 +3,12 @@ class Commit include ActiveModel::Validations ATTRIBUTES = %i[id - author - email - date + author_name + author_email + author_date + committer_name + committer_email + committer_date message files packages diff --git a/app/repositories/commit_repository.rb b/app/repositories/commit_repository.rb index a6e0b33..dc46b71 100644 --- a/app/repositories/commit_repository.rb +++ b/app/repositories/commit_repository.rb @@ -11,9 +11,12 @@ class CommitRepository < BaseRepository mapping dynamic: 'strict' do indexes :id, type: 'keyword' - indexes :author, type: 'keyword' - indexes :email, type: 'keyword' - indexes :date, type: 'date' + indexes :author_name, type: 'keyword' + indexes :author_email, type: 'keyword' + indexes :author_date, type: 'date' + indexes :committer_name, type: 'keyword' + indexes :committer_email, type: 'keyword' + indexes :committer_date, type: 'date' indexes :message, type: 'text' indexes :files do indexes :modified, type: 'keyword' diff --git a/app/views/feeds/packages.atom.builder b/app/views/feeds/packages.atom.builder index ad617b9..776510c 100644 --- a/app/views/feeds/packages.atom.builder +++ b/app/views/feeds/packages.atom.builder @@ -28,7 +28,7 @@ atom_feed(id: atom_id(@feed_type, @feed_id, 'feed')) do |feed| id: atom_id(@feed_type, @feed_id, id), url: absolute_link_to_package(atom) ) do |entry| - entry.updated commit ? commit.date.to_datetime.rfc3339 : Time.now.to_datetime.rfc3339 + entry.updated commit ? commit.author_date.to_datetime.rfc3339 : Time.now.to_datetime.rfc3339 entry.title(t(:feed_keyworded_title, atom: atom, diff --git a/app/views/packages/_changelog.html.erb b/app/views/packages/_changelog.html.erb index b08e2c6..afc10dd 100644 --- a/app/views/packages/_changelog.html.erb +++ b/app/views/packages/_changelog.html.erb @@ -1,4 +1,4 @@ -
+

Changelog

diff --git a/app/views/packages/_changelog_entry.html.erb b/app/views/packages/_changelog_entry.html.erb index b3c1442..c6a2e32 100644 --- a/app/views/packages/_changelog_entry.html.erb +++ b/app/views/packages/_changelog_entry.html.erb @@ -1,9 +1,22 @@
  • <%= annotate_bugs changelog.message.lines.first %> diff --git a/lib/portage/util/history.rb b/lib/portage/util/history.rb index c6f7111..1e158ff 100644 --- a/lib/portage/util/history.rb +++ b/lib/portage/util/history.rb @@ -6,7 +6,7 @@ class Portage::Util::History return [] if KKULEOMI_DISABLE_GIT == true latest_commit_id = KKULEOMI_FIRST_COMMIT - latest_commit = CommitRepository.n_sorted_by(1, 'date', 'desc').first + latest_commit = CommitRepository.n_sorted_by(1, 'committer_date', 'desc').first latest_commit_id = latest_commit.id unless latest_commit.nil? @@ -14,7 +14,7 @@ class Portage::Util::History .cmd(KKULEOMI_GIT) .in(KKULEOMI_RUNTIME_PORTDIR) .args( - 'log', '--name-status', '--no-merges', '--date=iso8601', '--reverse', + 'log', '--name-status', '--no-merges', '--date=iso8601', '--format=fuller', '--reverse', "#{latest_commit_id}..HEAD") .run @@ -35,10 +35,14 @@ class Portage::Util::History _id = commit_lines.shift.gsub('commit ', '').strip commit_lines.shift =~ /^Author:\s+(.*) <([^>]*)>$/ - _author = $1 - _email = $2 + _author_name = $1 + _author_email = $2 + _author_date = Time.parse(commit_lines.shift[/^AuthorDate:\s+(.*)$/, 1]).utc - _date = Time.parse(commit_lines.shift[/^Date:\s+(.*)$/, 1]).utc + commit_lines.shift =~ /^Commit:\s+(.*) <([^>]*)>$/ + _committer_name = $1 + _committer_email = $2 + _committer_date = Time.parse(commit_lines.shift[/^CommitDate:\s+(.*)$/, 1]).utc commit_lines.shift _raw_message = [] @@ -66,9 +70,12 @@ class Portage::Util::History commit = Commit.new commit.id = _id - commit.author = _author - commit.email = _email - commit.date = _date + commit.author_name = _author_name + commit.author_email = _author_email + commit.author_date = _author_date + commit.committer_name = _committer_name + commit.committer_email = _committer_email + commit.committer_date = _committer_date commit.message = _raw_message.map { |l| l.strip }.join("\n") commit.files = _files commit.packages = _packages.to_set -- cgit v1.2.3-65-gdbad