Hi folks, We've just deployed the new work items UI and migrated the work items of all Linaro blueprints. As we expected, though, not all of them could be migrated (~10% of them failed to parse), so we emailed the owners/assignees of those Blueprints asking them to do so manually. The script.txt file attached here has all the steps necessary to do so, for when the time comes to do the migration of Ubuntu blueprints.
Hope it helps. -- Guilherme Salgado <https://launchpad.net/~salgado>
1. Get the logs /srv/launchpad.net-logs/scripts/ackee/garbo-frequently.log 2. Every time the garbo runs it will try to parse all BPs that have the 'work items' string in their whiteboard, so you need to save only the logs of the last run into a separate file (failed-to-migrate.txt) 3. Extract the IDs of the Specifications we failed to migrate: $ grep -o "<Specification [0-9]*" failed-to-migrate.txt | cut -f 2 -d " " 4. Use those IDs on the query below 5. Ask webops to run it on production (including the pset commands) 6. Ask them to send you the output.csv file 7. Place output.csv on the same directory as parse_bps_to_notify.py 8. Run parse_bps_to_notify.py 9. Run spam.py (from lp-dev-utils) passing the final.csv file and the file named 'template' \pset format unaligned \pset fieldsep , \pset tuples_only on \o output.csv SELECT specification.name, product.name, distribution.name, e1.email as assignee_email, p1.displayname as assignee_name, e2.email as owner_email, p2.displayname as owner_name FROM specification JOIN person p1 on p1.id = assignee JOIN emailaddress e1 on e1.person = assignee JOIN person p2 on p2.id = owner JOIN emailaddress e2 on e2.person = owner LEFT JOIN product on product.id = specification.product LEFT JOIN distribution on distribution.id = specification.distribution WHERE e1.status = 4 and e2.status = 4 and specification.datecreated > '2011-08-01' and specification.id in ( $SPEC_IDS );
import csv fieldnames = ['name', 'product', 'distribution', 'assignee_email', 'assignee_name', 'owner_email', 'owner_name'] reader = csv.DictReader(open('output.csv'), fieldnames) bps_to_people = {} def make_url(item): pillar = item['product'] or item['distribution'] return 'https://blueprints.launchpad.net/%s/+spec/%s' % ( pillar, item['name']) for item in reader: url = make_url(item) assignee = (item['assignee_email'], item['assignee_name']) owner = (item['owner_email'], item['owner_name']) if assignee not in bps_to_people: bps_to_people[assignee] = set() if owner not in bps_to_people: bps_to_people[owner] = set() bps_to_people[assignee].add(url) if owner != assignee: bps_to_people[owner].add(url) fieldnames = ['display_name', 'email', 'urls'] writer = csv.DictWriter(open('final.csv', 'w'), fieldnames) writer.writeheader() for key, value in bps_to_people.items(): email, display_name = key urls = "\n ".join(value) urls = " " + urls writer.writerow(dict(email=email, display_name=display_name, urls=urls))
Hello $display_name, News about one or more of your blueprints ------------------------------------------ Launchpad now supports blueprint work items natively! See the Launchpad blog [1] for details. You have one or more blueprints that appeared to have work items in the whiteboard. When our script tried to convert those to native work items, there was a problem. If those blueprints are still relevant, please check them and manually move the work items from the whiteboard to the new work items text box. The blueprints we had a problem with were: $urls If you have any questions, please join us in #launchpad on Freenode or reply to this email. Thanks, The Launchpad team. 1. http://blog.launchpad.net
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Mailing list: https://launchpad.net/~launchpad-dev Post to : launchpad-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~launchpad-dev More help : https://help.launchpad.net/ListHelp