mirror of
				https://git.launchpad.net/ubuntu-dev-tools
				synced 2025-11-04 07:54:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			199 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
# -*- coding: UTF-8 -*-
 | 
						|
 | 
						|
# Copyright © 2009 James Westby <james.westby@ubuntu.com>,
 | 
						|
#             2010 Stefano Rivera <stefanor@ubuntu.com>
 | 
						|
#
 | 
						|
# ##################################################################
 | 
						|
#
 | 
						|
# This program is free software; you can redistribute it and/or
 | 
						|
# modify it under the terms of the GNU General Public License
 | 
						|
# as published by the Free Software Foundation; either version 2
 | 
						|
# of the License, or (at your option) any later version.
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# You should have received a copy of the GNU General Public License along
 | 
						|
# with this program; if not, write to the Free Software Foundation, Inc.,
 | 
						|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
						|
#
 | 
						|
# ##################################################################
 | 
						|
 | 
						|
from optparse import OptionParser, SUPPRESS_HELP
 | 
						|
import re
 | 
						|
import sys
 | 
						|
import subprocess
 | 
						|
 | 
						|
try:
 | 
						|
    import SOAPpy
 | 
						|
except ImportError:
 | 
						|
    print >> sys.stderr, ("Please install 'python-soappy' in order to use "
 | 
						|
                          "this utility.")
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
from launchpadlib.launchpad import Launchpad
 | 
						|
 | 
						|
from ubuntutools.config import UDTConfig
 | 
						|
 | 
						|
def main():
 | 
						|
    bug_re = re.compile(r"bug=(\d+)")
 | 
						|
 | 
						|
    url = 'http://bugs.debian.org/cgi-bin/soap.cgi'
 | 
						|
    namespace = 'Debbugs/SOAP'
 | 
						|
    debbugs = SOAPpy.SOAPProxy(url, namespace)
 | 
						|
 | 
						|
    # debug
 | 
						|
    #debbugs.config.dumpSOAPOut = 1
 | 
						|
    #debbugs.config.dumpSOAPIn = 1
 | 
						|
 | 
						|
    parser = OptionParser(usage="%prog [option] bug ...")
 | 
						|
    parser.add_option("-b", "--browserless",
 | 
						|
                      help="Don't open the bug in the browser at the end",
 | 
						|
                      dest="browserless", action="store_true")
 | 
						|
    parser.add_option("-l", "--lpinstance", metavar="INSTANCE",
 | 
						|
                      help="Launchpad instance to connect to "
 | 
						|
                           "(default: production)",
 | 
						|
                      dest="lpinstance", default=None)
 | 
						|
    parser.add_option("-n", "--dry-run",
 | 
						|
                      help=SUPPRESS_HELP,
 | 
						|
                      dest="lpinstance", action="store_const", const="staging")
 | 
						|
    parser.add_option("-p", "--package", metavar="PACKAGE",
 | 
						|
                      help="Launchpad package to file bug against "
 | 
						|
                           "(default: Same as Debian)",
 | 
						|
                      dest="package", default=None)
 | 
						|
    parser.add_option("--no-conf", dest="no_conf", default=False,
 | 
						|
                      help="Don't read config files or environment variables.",
 | 
						|
                      action="store_true")
 | 
						|
    (options, args) = parser.parse_args()
 | 
						|
 | 
						|
    config = UDTConfig(options.no_conf)
 | 
						|
    if options.lpinstance is None:
 | 
						|
        options.lpinstance = config.get_value("LPINSTANCE")
 | 
						|
 | 
						|
    try:
 | 
						|
        launchpad = Launchpad.login_with("ubuntu-dev-tools", options.lpinstance)
 | 
						|
    except IOError, msg:
 | 
						|
        print msg
 | 
						|
        print "No credentials, can't continue"
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    debian = launchpad.distributions['debian']
 | 
						|
    ubuntu = launchpad.distributions['ubuntu']
 | 
						|
    lp_debbugs = launchpad.bug_trackers.getByName(name='debbugs')
 | 
						|
 | 
						|
    bug_nums = []
 | 
						|
 | 
						|
    for bug_num in args:
 | 
						|
        if bug_num.startswith("http"):
 | 
						|
            # bug URL
 | 
						|
            match = bug_re.search(bug_num)
 | 
						|
            if match is None:
 | 
						|
                raise ValueError("Can't determine bug number from %s" % bug_num)
 | 
						|
            bug_num = match.groups()[0]
 | 
						|
        bug_num = bug_num.lstrip("#")
 | 
						|
        bug_num = int(bug_num)
 | 
						|
        bug_nums.append(bug_num)
 | 
						|
 | 
						|
    bugs = debbugs.get_status(*bug_nums)
 | 
						|
 | 
						|
    if len(bug_nums) > 1:
 | 
						|
        bugs = bugs[0]
 | 
						|
 | 
						|
    #import pdb; pdb.set_trace()
 | 
						|
    for bug in bugs:
 | 
						|
        bug = bug.value
 | 
						|
        package = bug.package
 | 
						|
        ubupackage = package
 | 
						|
        if options.package:
 | 
						|
            ubupackage = options.package
 | 
						|
        bug_num = bug.bug_num
 | 
						|
        subject = bug.subject
 | 
						|
        log = debbugs.get_bug_log(bug_num)
 | 
						|
        summary = log[0][0]
 | 
						|
        target = ubuntu.getSourcePackage(name=ubupackage)
 | 
						|
        u_bug = launchpad.bugs.createBug(target=target, title=subject,
 | 
						|
                description='Imported from Debian bug '
 | 
						|
                            'http://bugs.debian.org/%d:\n\n%s'
 | 
						|
                            % (bug_num, summary))
 | 
						|
        d_sp = debian.getSourcePackage(name=package)
 | 
						|
        if d_sp is None and options.package:
 | 
						|
            d_sp = debian.getSourcePackage(name=options.package)
 | 
						|
        d_task = u_bug.addTask(target=d_sp)
 | 
						|
        d_watch = u_bug.addWatch(remote_bug=bug_num, bug_tracker=lp_debbugs)
 | 
						|
        d_task.bug_watch = d_watch
 | 
						|
        d_task.lp_save()
 | 
						|
        print "Opened %s" % u_bug.web_link
 | 
						|
        if not options.browserless:
 | 
						|
            subprocess.call(["xdg-open", u_bug.web_link])
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 | 
						|
 | 
						|
#def get_status(*args):
 | 
						|
#    result = server.get_status(*args)
 | 
						|
#    return result
 | 
						|
#
 | 
						|
#def get_bugs(*args):
 | 
						|
#    result = server.get_bugs(*args)
 | 
						|
#    return result
 | 
						|
#
 | 
						|
#def get_usertag(email, *tags):
 | 
						|
#    result = server.get_usertag(email, *tags)
 | 
						|
#    return result
 | 
						|
#
 | 
						|
#def get_bug_log(bugnumber):
 | 
						|
#    result = server.get_bug_log(bugnumber)
 | 
						|
#    return result
 | 
						|
#
 | 
						|
#def newest_bugs(amount):
 | 
						|
#    result = server.newest_bugs(amount)
 | 
						|
#    return result
 | 
						|
#
 | 
						|
#if __name__ == "__main__":
 | 
						|
#    # Demonstration
 | 
						|
#
 | 
						|
#    # some debug output
 | 
						|
#
 | 
						|
#    # All bugs from one package (returns a list of bugnumbers)
 | 
						|
#    print get_bugs("package", "gtk-qt-engine")
 | 
						|
#
 | 
						|
#    # All bugs of a maintainer
 | 
						|
#    print get_bugs("maint", "debian-qa@lists.debian.org")
 | 
						|
#
 | 
						|
#    # returns the status of those bugs
 | 
						|
#    print get_status(409909, 419920, 421581, 417044, 397993)
 | 
						|
#
 | 
						|
#    # get_status and get_bugs combined:
 | 
						|
#    print get_status(get_bugs("package", "gtk-qt-engine"))
 | 
						|
#
 | 
						|
#    # returns the full log for the given bug number
 | 
						|
#    print get_bug_log(202526)
 | 
						|
#
 | 
						|
#    # retrives the newest 20 bugs
 | 
						|
#    print newest_bugs(20)
 | 
						|
#
 | 
						|
#    # All bugs of a maintainer
 | 
						|
#    print get_bugs("maint", "debian-qa@lists.debian.org")
 | 
						|
#
 | 
						|
#    # returns the status of those bugs
 | 
						|
#    print get_status(409909, 419920, 421581, 417044, 397993)
 | 
						|
#
 | 
						|
#    # get_status and get_bugs combined:
 | 
						|
#    print get_status(get_bugs("package", "gtk-qt-engine"))
 | 
						|
#
 | 
						|
#    # returns the full log for the given bug number
 | 
						|
#    print get_bug_log(202526)
 | 
						|
#
 | 
						|
#    # retrives the newest 20 bugs
 | 
						|
#    print newest_bugs(20)
 | 
						|
#
 | 
						|
#    # returns bugs tagged by the given email
 | 
						|
#    print get_usertag("debian-qa@lists.debian.org")
 | 
						|
#
 | 
						|
#    # returns bugs tagged by the given email, with the given tag
 | 
						|
#    print get_usertag("debian-qa@lists.debian.org", "qa-ftbfs-20070708")
 | 
						|
#
 |