Skip to content

Instantly share code, notes, and snippets.

@skmp
Last active June 14, 2019 18:35
Show Gist options
  • Save skmp/be012a02b4510ed5438639481eb8cd1d to your computer and use it in GitHub Desktop.
Save skmp/be012a02b4510ed5438639481eb8cd1d to your computer and use it in GitHub Desktop.
Used to recover reicast/reicast-emulator labels after the repo loss from the issue event stream
# Used to recover reicast/reicast-emulator labels after the repo loss
# The labels were missing, however the event stream was fine for each issue
# Uses octokit
require 'set'
require 'json'
require 'net/http'
require 'octokit'
client = Octokit::Client.new(:access_token => '<a personal access token>')
for number in 1637.downto(1) do
puts "****************"
puts "Issue #{number}:"
response = client.issue_events("reicast/reicast-emulator", number)
puts "#{response.length} events"
labels = Set[]
response.map { |e|
{ :type => e["event"], :url => e["url"], :id => e["id"]}
}.each { |e|
begin
if e[:type] == "unlabeled" || e[:type] == "labeled" then
event = client.issue_event("reicast/reicast-emulator", e[:id])
lbl = event["label"]["name"]
if e[:type] == "labeled" then labels.add(lbl) else labels.delete(lbl) end
puts "#{e[:type]}, #{lbl}"
end
rescue => e
puts "Error #{e}"
end
}
puts "Final set: #{labels}, #{labels.length}"
if labels.length > 0 then
client.add_labels_to_an_issue("reicast/reicast-emulator", number, labels.to_a)
puts "done"
end
puts
puts
puts
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment