FreeBSD uses bugzilla for tracking bugs, taking feature requests, regressions and issues in the Operating System. The web interface for bugzilla is okay, but if you want to do a lot of batch operations it is slow to deal with. We are planning to run a bugsquash in July and that really needs some tooling to help any hackers that show up process the giant bug list we have.
Thankfully there is a python3 command line tool for interacting with bugzilla,
bugz allows you to search through, up date and modify
bugs without having to use a web browser. Getting
bugz going was not very
intuitive and it took me a bit of faffing.
bugz ships with a configuration for connecting to the FreeBSD bugzilla you
use it by selecting it as a
connection. The supported connections are dumped
out if you try and do an operation with the
-d 3 debug flag. This flag is
really helpful for figuring out how to use
bugz because while it documents
itself, it holds on to the documentation like a powerful secret.
bugz really wants you to authenticate before you do anything, it won't show
you help for commands without auth. There is however a
--skip-auth flag. With
this you can search for bugs, lets look for ipv6 issues with a patch in the
$ bugz --connection FreeBSD --skip-auth search --product "Base System" "patch ipv6" * Info: Using [FreeBSD] (https://bugs.freebsd.org/bugzilla/xmlrpc.cgi) * Info: Searching for bugs meeting the following criteria: * Info: product = ['Base System'] * Info: status = ['New', 'Open', 'In Progress', 'UNCONFIRMED'] * Info: summary = ['patch ipv6'] 88821 bugs [patch] IPv6 support for ggated(8) 186133 bugs [patch] tcpdump(1): zero checksums are invalid for UDP over IPv6 174225 bugs [network.subr] [patch] add support for ipv6_addrs_IF style aliases to rc.conf(5) 178881 bdrewery [patch] getifaddrs(3) does not report IPv6 addresses properly in 32-bit compatibility mode 180572 rc [network.subr] [patch] SLAAC is enabled for ipv6_cpe_wanif 133227 bugs [patch] whois(1): add support for SLD whois server lookups and IPv6 address lookups 104851 bugs [inet6] [patch] On link routes not configured when using both IPv6 autoconfiguration and manual configuration 147681 bugs [network.subr][patch] Add inet6 keyword if it wasn't specified in ifconfig_IF_ipv6 130657 bugs [ip6] [patch] ipv6 class option 165190 bugs [ipfw] [lo] [patch] loopback interface is not marking ipv6 packets 245103 bz [patch] [ipv6] IPv6: update v6 temporary address lifetime according to rfc4941bis * Info: 11 bug(s) found.
We can also filter our search by component:
$ bugz --connection FreeBSD --skip-auth search --product "Base System" --component bhyve
bugz supports modifying and updating bugz from the command line, this is the
main focus of the README on github. To authenticate
bugz takes a
username and password on the command line, I am not suggesting you fill your
history with your bugzilla password, I did something like:
$ bugz --connection FreeBSD -u firstname.lastname@example.org --password `pass show FreeBSD/bugz | head -n 1` search udp
There is a
-k flag that takes a key file, but I didn't want to dig into the
bugz to figure out what this actually is.
Our bug squash is probably going to focus on clearing bugs with patches and the
readme has a workflow for finding bugs and grabbing any diffs. More tools can
and should be written around
bugz this is just a start. Just playing with
this I have spotted bugs than can easily be closed from the tracker.
Finally, you are going to need the help while using
bugz, it took me longer
than I liked to figure out that each sub command documents its own help and
they all take the
-h after the command. You need auth (or to skip auth)
before you can use this flag.
$ bugz --connection FreeBSD --skip-auth search -h