Commit 9cb7e93f authored by Stan Hu's avatar Stan Hu

Fix project dashboard showing the wrong timestamps

Use the max of the `last_activity_at` and `last_repository_updated_at`
columns. The latter is updated only when a push happens, but the former is
updated whenever any activity (e.g. issue creation) happens.

Closes #27181
parent 8a0052c0
...@@ -274,7 +274,8 @@ class Project < ActiveRecord::Base ...@@ -274,7 +274,8 @@ class Project < ActiveRecord::Base
scope :without_storage_feature, ->(feature) { where('storage_version < :version OR storage_version IS NULL', version: HASHED_STORAGE_FEATURES[feature]) } scope :without_storage_feature, ->(feature) { where('storage_version < :version OR storage_version IS NULL', version: HASHED_STORAGE_FEATURES[feature]) }
scope :with_unmigrated_storage, -> { where('storage_version < :version OR storage_version IS NULL', version: LATEST_STORAGE_VERSION) } scope :with_unmigrated_storage, -> { where('storage_version < :version OR storage_version IS NULL', version: LATEST_STORAGE_VERSION) }
scope :sorted_by_activity, -> { reorder(last_activity_at: :desc) } # last_activity_at is throttled every minute, but last_repository_updated_at is updated with every push
scope :sorted_by_activity, -> { reorder("GREATEST(COALESCE(last_activity_at, '1970-01-01'), COALESCE(last_repository_updated_at, '1970-01-01')) DESC") }
scope :sorted_by_stars, -> { reorder('projects.star_count DESC') } scope :sorted_by_stars, -> { reorder('projects.star_count DESC') }
scope :in_namespace, ->(namespace_ids) { where(namespace_id: namespace_ids) } scope :in_namespace, ->(namespace_ids) { where(namespace_id: namespace_ids) }
...@@ -776,7 +777,7 @@ class Project < ActiveRecord::Base ...@@ -776,7 +777,7 @@ class Project < ActiveRecord::Base
end end
def last_activity_date def last_activity_date
last_repository_updated_at || last_activity_at || updated_at [last_activity_at, last_repository_updated_at, updated_at].compact.max
end end
def project_id def project_id
......
---
title: Fix project dashboard showing the wrong timestamps
merge_request:
author:
type: fixed
...@@ -37,6 +37,14 @@ feature 'Dashboard Projects' do ...@@ -37,6 +37,14 @@ feature 'Dashboard Projects' do
expect(page).to have_xpath("//time[@datetime='#{project.last_repository_updated_at.getutc.iso8601}']") expect(page).to have_xpath("//time[@datetime='#{project.last_repository_updated_at.getutc.iso8601}']")
end end
it 'shows the last_activity_at attribute as the update date' do
project.update_attributes!(last_repository_updated_at: 1.hour.ago, last_activity_at: Time.now)
visit dashboard_projects_path
expect(page).to have_xpath("//time[@datetime='#{project.last_activity_at.getutc.iso8601}']")
end
end end
context 'when last_repository_updated_at and last_activity_at are missing' do context 'when last_repository_updated_at and last_activity_at are missing' do
......
...@@ -517,6 +517,20 @@ describe Project do ...@@ -517,6 +517,20 @@ describe Project do
it 'returns the project\'s last update date if it has no events' do it 'returns the project\'s last update date if it has no events' do
expect(project.last_activity_date).to eq(project.updated_at) expect(project.last_activity_date).to eq(project.updated_at)
end end
it 'returns the most recent timestamp' do
project.update_attributes(updated_at: nil,
last_activity_at: timestamp,
last_repository_updated_at: timestamp - 1.hour)
expect(project.last_activity_date).to eq(timestamp)
project.update_attributes(updated_at: timestamp,
last_activity_at: timestamp - 1.hour,
last_repository_updated_at: nil)
expect(project.last_activity_date).to eq(timestamp)
end
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