Skip to content

Instantly share code, notes, and snippets.

@dugancathal
Created September 21, 2017 20:16
Show Gist options
  • Save dugancathal/afc2cd96d16889998d16fc8566b1da64 to your computer and use it in GitHub Desktop.
Save dugancathal/afc2cd96d16889998d16fc8566b1da64 to your computer and use it in GitHub Desktop.
TRACKER_TOKEN=0293810923 ./git-to-tracker.rb --projects 39483 head~
#!/usr/bin/env ruby
require 'net/http'
require 'optparse'
require 'json'
opts = {}
parser = OptionParser.new do |opt|
opt.on('-p PROJECTS', '--projects=PROJECTS', Array) do |projects|
opts[:projects] = projects
end
end.parse!
tracker_token = ENV.fetch('TRACKER_TOKEN')
start_commit = ARGV[0]
end_commit = ARGV[1] || 'head'
DEFAULT_HEADERS = {'X-TrackerToken' => tracker_token}
Story = Struct.new(:project_id, :story_id, :name)
story_ids = `git log --pretty='%B' #{start_commit}...#{end_commit}`.scan(/\[?#(\d+)/).flatten
stories = story_ids.flat_map do |story_id|
story_titles = []
Net::HTTP.start('www.pivotaltracker.com', '443', use_ssl: true) do |http|
story_titles = opts[:projects].map do |project_id|
uri = URI("https://www.pivotaltracker.com/services/v5/projects/#{project_id}/stories/#{story_id}")
response = http.request Net::HTTP::Get.new(uri, DEFAULT_HEADERS)
Story.new(project_id, story_id, JSON.parse(response.body)['name']) if response.is_a?(Net::HTTPSuccess)
end
end
story_titles.compact
end
puts "Project\t\tStory # \t\tTitle"
stories.each do |story|
puts "%s\t\t%s\t\t%s" % [story.project_id, story.story_id, story.name]
end
@dugancathal
Copy link
Author

dugancathal commented Sep 21, 2017

Run this from the directory of the project that you want to get data for:

TRACKER_TOKEN=$TRACKER_TOKEN ./git-to-tracker.rb --projects $PROJECT_ID v1.3.x master

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment