Compare commits
	
		
			9 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 65662b3847 | ||
|  | 6984396b11 | ||
|  | 485dc7d559 | ||
|  | a1b904441e | ||
|  | 0d844c0780 | ||
|  | c2f31d908e | ||
|  | 38a48a627c | ||
|  | 10f7278e9a | ||
|  | 39e84d174d | 
							
								
								
									
										10
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | ## 2.5.1 | ||||||
|  |  | ||||||
|  | - Fix some local images not having their EXIF metadata stripped on upload (#8714) | ||||||
|  | - Fix class autoloading issue in ActivityPub Create handler (#8820) | ||||||
|  | - Fix cache statistics not being sent via statsd when statsd enabled (#8831) | ||||||
|  | - Fix being able to enable a disabled relay via ActivityPub Accept handler (#8864) | ||||||
|  | - Bump nokogiri from 1.8.4 to 1.8.5 (#8881) | ||||||
|  | - Bump puma from 3.11.4 to 3.12.0 (#8883) | ||||||
|  | - Fix database migrations for PostgreSQL below 9.5 (#8903) | ||||||
|  | - Fix being able to report statuses not belonging to the reported account (#8916) | ||||||
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ ruby '>= 2.3.0', '< 2.6.0' | |||||||
|  |  | ||||||
| gem 'pkg-config', '~> 1.3' | gem 'pkg-config', '~> 1.3' | ||||||
|  |  | ||||||
| gem 'puma', '~> 3.11' | gem 'puma', '~> 3.12' | ||||||
| gem 'rails', '~> 5.2.1' | gem 'rails', '~> 5.2.1' | ||||||
| gem 'thor', '~> 0.20' | gem 'thor', '~> 0.20' | ||||||
|  |  | ||||||
|   | |||||||
| @@ -347,7 +347,7 @@ GEM | |||||||
|       net-ssh (>= 2.6.5) |       net-ssh (>= 2.6.5) | ||||||
|     net-ssh (4.2.0) |     net-ssh (4.2.0) | ||||||
|     nio4r (2.3.1) |     nio4r (2.3.1) | ||||||
|     nokogiri (1.8.4) |     nokogiri (1.8.5) | ||||||
|       mini_portile2 (~> 2.3.0) |       mini_portile2 (~> 2.3.0) | ||||||
|     nokogumbo (1.5.0) |     nokogumbo (1.5.0) | ||||||
|       nokogiri |       nokogiri | ||||||
| @@ -412,7 +412,7 @@ GEM | |||||||
|     pry-rails (0.3.6) |     pry-rails (0.3.6) | ||||||
|       pry (>= 0.10.4) |       pry (>= 0.10.4) | ||||||
|     public_suffix (3.0.2) |     public_suffix (3.0.2) | ||||||
|     puma (3.11.4) |     puma (3.12.0) | ||||||
|     pundit (1.1.0) |     pundit (1.1.0) | ||||||
|       activesupport (>= 3.0.0) |       activesupport (>= 3.0.0) | ||||||
|     rack (2.0.5) |     rack (2.0.5) | ||||||
| @@ -721,7 +721,7 @@ DEPENDENCIES | |||||||
|   private_address_check (~> 0.4.1) |   private_address_check (~> 0.4.1) | ||||||
|   pry-byebug (~> 3.6) |   pry-byebug (~> 3.6) | ||||||
|   pry-rails (~> 0.3) |   pry-rails (~> 0.3) | ||||||
|   puma (~> 3.11) |   puma (~> 3.12) | ||||||
|   pundit (~> 1.1) |   pundit (~> 1.1) | ||||||
|   rack-attack (~> 5.2) |   rack-attack (~> 5.2) | ||||||
|   rack-cors (~> 1.0) |   rack-cors (~> 1.0) | ||||||
| @@ -765,4 +765,4 @@ RUBY VERSION | |||||||
|    ruby 2.5.0p0 |    ruby 2.5.0p0 | ||||||
|  |  | ||||||
| BUNDLED WITH | BUNDLED WITH | ||||||
|    1.16.3 |    1.16.5 | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ class Api::V1::ReportsController < Api::BaseController | |||||||
|   private |   private | ||||||
|  |  | ||||||
|   def reported_status_ids |   def reported_status_ids | ||||||
|     Status.find(status_ids).pluck(:id) |     reported_account.statuses.find(status_ids).pluck(:id) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def status_ids |   def status_ids | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def relay |   def relay | ||||||
|     @relay ||= Relay.find_by(follow_activity_id: object_uri) |     @relay ||= Relay.find_by(follow_activity_id: object_uri) unless object_uri.nil? | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def relay_follow? |   def relay_follow? | ||||||
|   | |||||||
| @@ -92,7 +92,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity | |||||||
|     return if tag['href'].blank? |     return if tag['href'].blank? | ||||||
|  |  | ||||||
|     account = account_from_uri(tag['href']) |     account = account_from_uri(tag['href']) | ||||||
|     account = FetchRemoteAccountService.new.call(tag['href'], id: false) if account.nil? |     account = ::FetchRemoteAccountService.new.call(tag['href'], id: false) if account.nil? | ||||||
|     return if account.nil? |     return if account.nil? | ||||||
|     account.mentions.create(status: status) |     account.mentions.create(status: status) | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def delete_note |   def delete_note | ||||||
|  |     return if object_uri.nil? | ||||||
|  |  | ||||||
|     @status   = Status.find_by(uri: object_uri, account: @account) |     @status   = Status.find_by(uri: object_uri, account: @account) | ||||||
|     @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? |     @status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? | ||||||
|  |  | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def relay |   def relay | ||||||
|     @relay ||= Relay.find_by(follow_activity_id: object_uri) |     @relay ||= Relay.find_by(follow_activity_id: object_uri) unless object_uri.nil? | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def relay_follow? |   def relay_follow? | ||||||
|   | |||||||
| @@ -19,6 +19,8 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity | |||||||
|   private |   private | ||||||
|  |  | ||||||
|   def undo_announce |   def undo_announce | ||||||
|  |     return if object_uri.nil? | ||||||
|  |  | ||||||
|     status   = Status.find_by(uri: object_uri, account: @account) |     status   = Status.find_by(uri: object_uri, account: @account) | ||||||
|     status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? |     status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present? | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ if ENV['STATSD_ADDR'].present? | |||||||
|   ::NSA.inform_statsd(statsd) do |informant| |   ::NSA.inform_statsd(statsd) do |informant| | ||||||
|     informant.collect(:action_controller, :web) |     informant.collect(:action_controller, :web) | ||||||
|     informant.collect(:active_record, :db) |     informant.collect(:active_record, :db) | ||||||
|     informant.collect(:cache, :cache) |     informant.collect(:active_support_cache, :cache) | ||||||
|     informant.collect(:sidekiq, :sidekiq) |     informant.collect(:sidekiq, :sidekiq) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -3,15 +3,10 @@ class CopyStatusStats < ActiveRecord::Migration[5.2] | |||||||
|  |  | ||||||
|   def up |   def up | ||||||
|     safety_assured do |     safety_assured do | ||||||
|       Status.unscoped.select('id').find_in_batches(batch_size: 5_000) do |statuses| |       if supports_upsert? | ||||||
|         execute <<-SQL.squish |         up_fast | ||||||
|           INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at) |       else | ||||||
|           SELECT id, reblogs_count, favourites_count, created_at, updated_at |         up_slow | ||||||
|           FROM statuses |  | ||||||
|           WHERE id IN (#{statuses.map(&:id).join(', ')}) |  | ||||||
|           ON CONFLICT (status_id) DO UPDATE |  | ||||||
|           SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count |  | ||||||
|         SQL |  | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| @@ -19,4 +14,41 @@ class CopyStatusStats < ActiveRecord::Migration[5.2] | |||||||
|   def down |   def down | ||||||
|     # Nothing |     # Nothing | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   private | ||||||
|  |  | ||||||
|  |   def supports_upsert? | ||||||
|  |     version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i | ||||||
|  |     version >= 90500 | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def up_fast | ||||||
|  |     say 'Upsert is available, importing counters using the fast method' | ||||||
|  |  | ||||||
|  |     Status.unscoped.select('id').find_in_batches(batch_size: 5_000) do |statuses| | ||||||
|  |       execute <<-SQL.squish | ||||||
|  |         INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at) | ||||||
|  |         SELECT id, reblogs_count, favourites_count, created_at, updated_at | ||||||
|  |         FROM statuses | ||||||
|  |         WHERE id IN (#{statuses.map(&:id).join(', ')}) | ||||||
|  |         ON CONFLICT (status_id) DO UPDATE | ||||||
|  |         SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count | ||||||
|  |       SQL | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def up_slow | ||||||
|  |     say 'Upsert is not available in PostgreSQL below 9.5, falling back to slow import of counters' | ||||||
|  |  | ||||||
|  |     # We cannot use bulk INSERT or overarching transactions here because of possible | ||||||
|  |     # uniqueness violations that we need to skip over | ||||||
|  |     Status.unscoped.select('id, reblogs_count, favourites_count, created_at, updated_at').find_each do |status| | ||||||
|  |       begin | ||||||
|  |         params = [[nil, status.id], [nil, status.reblogs_count], [nil, status.favourites_count], [nil, status.created_at], [nil, status.updated_at]] | ||||||
|  |         exec_insert('INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at) VALUES ($1, $2, $3, $4, $5)', nil, params) | ||||||
|  |       rescue ActiveRecord::RecordNotUnique | ||||||
|  |         next | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ module Mastodon | |||||||
|     end |     end | ||||||
|  |  | ||||||
|     def patch |     def patch | ||||||
|       0 |       1 | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     def pre |     def pre | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ module Paperclip | |||||||
|     private |     private | ||||||
|  |  | ||||||
|     def needs_convert? |     def needs_convert? | ||||||
|       needs_different_geometry? || needs_different_format? |       needs_different_geometry? || needs_different_format? || needs_metadata_stripping? | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     def needs_different_geometry? |     def needs_different_geometry? | ||||||
| @@ -31,5 +31,9 @@ module Paperclip | |||||||
|     def needs_different_format? |     def needs_different_format? | ||||||
|       @format.present? && @current_format != @format |       @format.present? && @current_format != @format | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     def needs_metadata_stripping? | ||||||
|  |       @attachment.instance.respond_to?(:local?) && @attachment.instance.local? | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user