Sha256: fd315177dd2ca94b22ea33ccbb791db44ec1d79f6c4dad16d2ff0a3cfae94c83
Contents?: true
Size: 1.36 KB
Versions: 17
Compression:
Stored size: 1.36 KB
Contents
class DeleteDuplicateCommits < ActiveRecord::Migration def up commits_by_sha = Hash.new { |hash, sha| hash[sha] = [] } select_rows("SELECT id, sha FROM commits").each do |(id, sha)| commits_by_sha[sha].push(id) end commits_by_sha.keep_if { |sha, ids| ids.length > 1 } puts "\e[33;1m#{Commit.count}\e[0;33m commits total; \e[1m#{commits_by_sha.values.flatten.count}\e[0;33m share \e[1m#{commits_by_sha.keys.count}\e[0;33m shas\e[0m" ids_to_delete = [] commits_by_sha.each do |sha, ids| release_ids = select_values("SELECT release_id FROM commits_releases WHERE commit_id IN (#{ids.join(", ")})").uniq ticket_ids = select_values("SELECT ticket_id FROM commits_tickets WHERE commit_id IN (#{ids.join(", ")})").uniq committer_ids = select_values("SELECT user_id FROM commits_users WHERE commit_id IN (#{ids.join(", ")})").uniq id_to_keep = ids.shift ids_to_delete.concat ids commit = Commit.find(id_to_keep) commit.release_ids = Release.where(id: release_ids).pluck(:id) commit.ticket_ids = Ticket.where(id: ticket_ids).pluck(:id) commit.committer_ids = User.where(id: committer_ids).pluck(:id) end execute "DELETE FROM commits WHERE commits.id IN (#{ids_to_delete.join(", ")})" if ids_to_delete.any? puts "\e[33;1m#{Commit.count}\e[0;33m commits left\e[0m" end def down end end
Version data entries
17 entries across 17 versions & 1 rubygems