diff --git a/lib/octoherder/configuration.rb b/lib/octoherder/configuration.rb index b861ccb..9085548 100644 --- a/lib/octoherder/configuration.rb +++ b/lib/octoherder/configuration.rb @@ -80,17 +80,24 @@ def update_milestones octokit_connection ([master] + repositories).map { |str| Octokit::Repository.new str }.each { |repo| - actual_milestones = octokit_connection.list_milestones(repo).map { |m| - m.fetch('title', '') - } - milestones.reject { |m| actual_milestones.include? m['title'] }.each { |m| + ms = octokit_connection.list_milestones(repo) + + # Map milestone titles to IDs + actual_milestones = Hash[ms.map { |m| + [m.fetch('title'), m.fetch('number')] + }] + + milestone_titles = actual_milestones.keys + + milestones.reject { |m| milestone_titles.include? m.fetch('title') }.each { |m| opts = to_octokit_opts m - octokit_connection.create_milestone(repo, m['title'], opts) + octokit_connection.create_milestone(repo, m.fetch('title'), opts) } - milestones.select { |m| actual_milestones.include? m['title'] }.each { |m| + milestones.select { |m| milestone_titles.include? m.fetch('title') }.each { |m| + milestone_number = actual_milestones[m.fetch('title')] opts = to_octokit_opts m - octokit_connection.update_milestone(repo, m['title'], opts) + octokit_connection.update_milestone(repo, milestone_number, opts) } } self diff --git a/spec/configuration_spec.rb b/spec/configuration_spec.rb index df8357f..bda3584 100644 --- a/spec/configuration_spec.rb +++ b/spec/configuration_spec.rb @@ -89,13 +89,14 @@ module OctoHerder end it "should update existing milestones" do - connection.stub(:list_milestones).and_return([{'title' => 'milestone-1'}, - {'title' => 'milestone-2'}, - {'title' => 'milestone-3'}]) + connection.stub(:list_milestones).and_return([{'number' => 1, 'title' => 'milestone-1'}, + {'number' => 2, 'title' => 'milestone-2'}, + {'number' => 3, 'title' => 'milestone-3'}]) connection.stub(:update_milestone) - connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 'milestone-1', {'state' => 'closed'}).exactly(repo_count).times - connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 'milestone-2', {'due_on' => '2011-04-10T20:09:31Z'}).exactly(repo_count).times - connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 'milestone-3', {'state' => 'open', 'description' => 'The third step in total world domination.'}).exactly(repo_count).times + + connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 1, {'state' => 'closed'}).exactly(repo_count).times + connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 2, {'due_on' => '2011-04-10T20:09:31Z'}).exactly(repo_count).times + connection.should_receive(:update_milestone).with(an_instance_of(Octokit::Repository), 3, {'state' => 'open', 'description' => 'The third step in total world domination.'}).exactly(repo_count).times conf.update_milestones connection end