Skip to content

Commit

Permalink
Update milestones by finding their ID from :list_milestones. Assumes …
Browse files Browse the repository at this point in the history
…that milestone names are unique.
  • Loading branch information
frankshearar committed Jun 12, 2013
1 parent 833e218 commit f76088f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
21 changes: 14 additions & 7 deletions lib/octoherder/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 7 additions & 6 deletions spec/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f76088f

Please sign in to comment.