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

Version Path
houston-core-0.8.0.pre db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.7.0 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.7.0.beta4 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.7.0.beta3 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.7.0.beta2 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.7.0.beta db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.6.3 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.6.2 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.6.1 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.6.0 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.6 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.5 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.4 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.3 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.2 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.1 db/migrate/20131112010815_delete_duplicate_commits.rb
houston-core-0.5.0 db/migrate/20131112010815_delete_duplicate_commits.rb