[Merge] ~vorlon/ubuntu-dev-tools:pm-helper into ubuntu-dev-tools:main

Steve Langasek mp+444677 at code.launchpad.net
Wed Jun 14 22:18:14 UTC 2023


Thanks for the review, Bryce!  I've implemented most of your suggestions, and responded to comments.  Would you care to re-review?

Diff comments:

> diff --git a/pm-helper b/pm-helper
> new file mode 100755
> index 0000000..7063675
> --- /dev/null
> +++ b/pm-helper
> @@ -0,0 +1,145 @@
> +#!/usr/bin/python3
> +# Find the next thing to work on for proposed-migration
> +# Copyright (C) 2023 Canonical Ltd.
> +# Author: Steve Langasek <steve.langasek at ubuntu.com>
> +
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License, version 3.
> +
> +# 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 library; if not, write to the Free Software 
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
> +# 02110-1301 USA
> +
> +import lzma
> +from optparse import OptionParser

Thanks, I didn't know offhand which one was newer, and this was copypasta :-)

> +import sys
> +import webbrowser
> +import yaml
> +
> +from launchpadlib.launchpad import Launchpad
> +
> +from ubuntutools.utils import get_url
> +
> +
> +# proposed-migration is only concerned with the devel series; unlike other
> +# tools, don't make this configurable
> +excuses_url = 'https://ubuntu-archive-team.ubuntu.com/proposed-migration/' \
> +              + 'update_excuses.yaml.xz'
> +
> +
> +def get_proposed_version(excuses, package):
> +    for k in excuses['sources']:
> +        if k['source'] == package:
> +            excuse = k
> +            break
> +
> +    if not excuse:
> +        return False
> +
> +    return excuse['new-version']

Thanks, applied

> +
> +
> +def claim_excuses_bug(launchpad, bug, package):
> +    print("LP: #%d: %s" % (bug.id, bug.title))
> +    ubuntu = launchpad.distributions['ubuntu']
> +    series = ubuntu.current_series.fullseriesname
> +
> +    for task in bug.bug_tasks:
> +        # targeting to a series doesn't make the default task disappear,
> +        # it just makes it useless
> +        if task.bug_target_name == "%s (%s)" % (package, series):
> +            our_task = task
> +            break
> +        elif task.bug_target_name == "%s (Ubuntu)" % package:
> +            our_task = task
> +
> +    if our_task.assignee == launchpad.me:
> +        print("Bug already assigned to you.")
> +        return True
> +    elif our_task.assignee:
> +        print("Currently assigned to %s" % our_task.assignee.name)
> +
> +    print('''Do you want to claim this bug? [yN] ''', end="")
> +    sys.stdout.flush()
> +    response = sys.stdin.readline()
> +    if response.strip().lower().startswith('y'):
> +        our_task.assignee = launchpad.me
> +        our_task.lp_save()
> +        return True
> +
> +    return False
> +
> +
> +def create_excuses_bug(launchpad, package, version):
> +    print("Will open a new bug")
> +    bug = launchpad.bugs.createBug(
> +        title = 'proposed-migration for %s %s' % (package, version),
> +        tags = ('update-excuse'),
> +        target = 'https://api.launchpad.net/devel/ubuntu/+source/%s' % package,
> +        description = '%s %s is stuck in -proposed.' % (package, version)
> +    )

While this would make the create_excuses_bug() function more resilient, with your other fixes we wouldn't be calling it all for a non-existent package.  So punting on improving this code for now.

> +
> +    task = bug.bug_tasks[0]
> +    task.assignee = launchpad.me
> +    task.lp_save()
> +
> +    print("Opening %s in browser" % bug.web_link)
> +    webbrowser.open(bug.web_link)
> +    return bug
> +
> +
> +def find_excuses_bugs(launchpad, package):

Done

> +    ubuntu = launchpad.distributions['ubuntu']
> +    tasks = ubuntu.getSourcePackage(name=package).searchTasks(
> +                tags=['update-excuse'], order_by=['id'])
> +

LGTM!

> +    bugs = [task.bug for task in tasks]
> +    if not bugs:
> +        return False
> +
> +    if len(bugs) == 1:
> +        print("There is 1 open update-excuse bug against %s" % package)
> +    else:
> +        print("There are %d open update-excuses bugs against %s" \
> +              % (len(bugs), package))

Fixed the typo

> +
> +    for bug in bugs:
> +        if claim_excuses_bug(launchpad, bug, package):
> +            return True
> +
> +    return True
> +
> +
> +def main():
> +    parser = OptionParser(usage="usage: %prog [options] [package]")
> +    parser.add_option(
> +        "-l", "--launchpad", dest="launchpad_instance", default="production")
> +    parser.add_option(
> +        "-v", "--verbose", default=False, action="store_true",
> +        help="be more verbose (redundant in --dry-run mode)")
> +    options, args = parser.parse_args()
> +
> +    options.launchpad = Launchpad.login_with(
> +        "pm-helper", options.launchpad_instance, version="devel")
> +
> +    f = get_url(excuses_url, False)
> +    lzma_f = lzma.open(f)
> +    excuses = yaml.load(lzma_f, Loader=yaml.CSafeLoader)
> +    lzma_f.close()

Good point, thanks

> +
> +    if args:
> +        if not find_excuses_bugs(options.launchpad, args[0]):
> +            create_excuses_bug(options.launchpad, args[0],
> +                               get_proposed_version(excuses, args[0]))

Punting on this for now; in the near future I expect the normal usage to be to call the command with no arguments and have it offer you things to work on, so calling it with a package argument will be a more advanced usage which I'd prefer be non-interactive.

> +    else:
> +        pass # for now
> +
> +
> +if __name__ == '__main__':
> +    sys.exit(main())


-- 
https://code.launchpad.net/~vorlon/ubuntu-dev-tools/+git/ubuntu-dev-tools/+merge/444677
Your team Ubuntu Development Team is requested to review the proposed merge of ~vorlon/ubuntu-dev-tools:pm-helper into ubuntu-dev-tools:main.




More information about the Ubuntu-reviews mailing list