lp-mark-bugs-released revision ac4dc8c32116eb4089277fd2ef8c3e4700a429a2
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson#!/usr/bin/python
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson# Copyright (c) 2010 Canonical Ltd.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# This program is free software; you can redistribute it and/or modify it
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# under the terms of the GNU General Public License version 3 as published
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson# by the # Free Software Foundation
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# lp-mark-bugs-released is distributed in the hope that it will be useful, but
83a28ca274521e15086fc39febde507bcc4e145eMark Andrews# WITHOUT ANY WARRANTY; without even the implied warranty of
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# General Public License for more details.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein'''Mark bugs that are Fix Committed on a release to be Fix Released'''
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntimport datetime
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinimport os
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafssonimport sys
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinimport tempfile
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinfrom launchpadlib.launchpad import Launchpad
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinfrom launchpadlib.errors import HTTPError
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafssonopt_dry_run = False
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeindef mark_released (bug):
194e2dfffa6a167b8eef0ad11864026b423a1c30Mark Andrews if bug.status == 'Fix Committed':
194e2dfffa6a167b8eef0ad11864026b423a1c30Mark Andrews print "Marking bug " + str(bug.bug.id) + " as 'Fix Released'"
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein bug.status = "Fix Released"
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein if not opt_dry_run:
c1a883f2e04d94e99c433b1f6cfd0c0338f4ed85Mark Andrews bug.lp_save()
938440694b33cd752e9e4b71a526368b4811c177Tinderbox User
19c7b1a0293498a3e36692c59646ed6e15ffc8d0Tinderbox Userdef main():
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews if len(sys.argv) != 3:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein print >> sys.stderr, '''Mark bugs 'Fix Committed' on a release as released
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein Usage: %s <project name> <version>''' % sys.argv[0]
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson sys.exit(1)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein (project, version) = sys.argv[1:]
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein try:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein launchpad = Launchpad.login_with('ubuntu-dev-tools', 'production')
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein except Exception, error:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein print >> sys.stderr, 'Could not connect to Launchpad:', str(error)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein sys.exit(2)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein try:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein # Look up the project using the Launchpad instance.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein proj = launchpad.projects[project]
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein # Find the release in the project's releases collection.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein release = None
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein for rel in proj.releases:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein if rel.version == version:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein release = rel
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein break
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein if not release:
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson print >> sys.stderr, '''Unable to find release: %s''' % version
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein sys.exit(1)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein # Mark any fix committed bugs released
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson for task in release.milestone.searchTasks(status="Fix Committed"):
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson if task.milestone is None:
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson for othertask in task.related_tasks:
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson if othertask.milestone.name == release.milestone.name:
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson mark_released(othertask)
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson else:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein mark_released(task)
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson except HTTPError, error:
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein print 'An error happened in the upload: %s\n%s' %(
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein error.content,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein error.__dict__)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein sys.exit(1)
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafssonif __name__ == '__main__':
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein main()
9ffbbce6a624b6051b3d001edcbad1e02c69bd45Andreas Gustafsson