Introduction

Some time ago the R core team requested help with bugs in bugzilla. Some time later on a thank you post they reported bugs closed over time. Which pointed out that we, users, package developer might not be helping enough. This packages tries to lower the barrier to improve R by finding bugs, testing and checking they are reproducible.

To do so this package is to support ease the interaction with bugzilla for a user who wants to:

  • see what happened/what’s happening.

  • submit/validate/comment on existing issues.

To do so it uses the Bugzilla API1 and sometimes the accessible xml files.

The package

We can check if there has been an update recently with:

check_last_audit()
#> [1] "2021-11-01 18:57:55 UTC"

Getting data

Issues

To get information about which issues exists you can call get_bug() :

bugs <- get_bug(1:100)
head(bugs)
#>            depends_on               cc keywords
#> 1 15763, 15764, 15862    simon.urbanek       NA
#> 2                  NA               NA       NA
#> 3                  NA               NA       NA
#> 4                  NA               NA       NA
#> 5                  NA               NA       NA
#> 6                  NA manish0731582008       NA
#>                                                                  summary
#> 1                                              Test bug report - summary
#> 2 [Prof Brian Ripley <ripley@stats.ox.ac.uk>] ... matching (still a bug)
#> 3                               aov(y ~ 0)  should work {g}lm(....) does
#> 4                                     row.names<- is incompatible with S
#> 5                                                 plot() hangs on DU 4.0
#> 6                         PRIVATE: `improvement' in summary.lm is broken
#>   resolution                            cc_detail is_creator_accessible
#> 1      FIXED      Simon Urbanek, 5, simon.urbanek                  TRUE
#> 2      FIXED                                   NA                  TRUE
#> 3      FIXED                                   NA                  TRUE
#> 4      FIXED                                   NA                  TRUE
#> 5      FIXED                                   NA                  TRUE
#> 6      FIXED manish0731582008, 1505, Manish Singh                  TRUE
#>            creator id flags       component classification
#> 1            admin  1    NA            Misc   Unclassified
#> 2 jitterbug-import  3    NA        Language   Unclassified
#> 3 jitterbug-import  4    NA          Models   Unclassified
#> 4 jitterbug-import  5    NA        Language   Unclassified
#> 5 jitterbug-import  7    NA System-specific   Unclassified
#> 6 jitterbug-import  8    NA          Models   Unclassified
#>                                     assigned_to_detail whiteboard
#> 1                              admin, 1, Simon Urbanek           
#> 2 Jitterbug compatibility account, 2, jitterbug-import           
#> 3 Jitterbug compatibility account, jitterbug-import, 2           
#> 4 Jitterbug compatibility account, 2, jitterbug-import           
#> 5 jitterbug-import, 2, Jitterbug compatibility account           
#> 6 Jitterbug compatibility account, 2, jitterbug-import           
#>        assigned_to priority         op_sys    last_change_time see_also is_open
#> 1            admin       P5 Mac OS X v10.4 2018-01-16 16:21:14       NA   FALSE
#> 2 jitterbug-import       P5            All 1998-08-10 02:50:29       NA   FALSE
#> 3 jitterbug-import       P5        Solaris 1998-08-10 20:23:26       NA   FALSE
#> 4 jitterbug-import       P5        Solaris 1998-08-18 02:44:49       NA   FALSE
#> 5 jitterbug-import       P5          Other 1998-08-17 20:58:15       NA   FALSE
#> 6 jitterbug-import       P5          Other 2013-12-10 08:40:58       NA   FALSE
#>   alias groups product platform status blocks
#> 1    NA     NA       R  PowerPC CLOSED     NA
#> 2    NA     NA       R      All CLOSED     NA
#> 3    NA     NA       R      All CLOSED     NA
#> 4    NA     NA       R      All CLOSED     NA
#> 5    NA     NA       R      All CLOSED     NA
#> 6    NA     NA       R      All CLOSED     NA
#>                                         creator_detail             url
#> 1                              admin, 1, Simon Urbanek http://url.com/
#> 2 2, jitterbug-import, Jitterbug compatibility account                
#> 3 Jitterbug compatibility account, jitterbug-import, 2                
#> 4 Jitterbug compatibility account, jitterbug-import, 2                
#> 5 Jitterbug compatibility account, 2, jitterbug-import                
#> 6 2, jitterbug-import, Jitterbug compatibility account                
#>   qa_contact deadline version is_cc_accessible       creation_time is_confirmed
#> 1                  NA R 2.y.z             TRUE 2010-02-15 18:29:54         TRUE
#> 2                  NA     old             TRUE 1998-08-08 03:25:05         TRUE
#> 3                  NA     old             TRUE 1998-08-10 20:23:26         TRUE
#> 4                  NA     old             TRUE 1998-08-13 14:30:36         TRUE
#> 5                  NA     old             TRUE 1998-08-17 05:41:33         TRUE
#> 6                  NA     old             TRUE 1998-08-17 15:57:01         TRUE
#>   dupe_of target_milestone severity
#> 1      NA              ---   normal
#> 2      NA              ---   normal
#> 3      NA              ---   normal
#> 4      NA              ---   normal
#> 5      NA              ---   normal
#> 6      NA              ---   normal
plot(bugs$id, bugs$creation_time, 
     main = "Bug ID vs creation time", xlab = "ID", 
     ylab = "Creation Time")

We can see that the first issue is created in 2010 while the next issues are from before 2000. This is because the first issues is a test and next issues were ported from jitterbug.

We can also see that there are some blank spaces between bugs ids. Perhaps some reports where deleted or simply they didn’t got filled.

There’s information about who created, about what, version, resolution, priority…

Comments

We can now collect information about comments on issues:

get_comment(issue = 1)
#>         creator count
#> 1         admin     0
#> 2         admin     1
#> 3         admin     2
#> 4 simon.urbanek     3
#> 5         admin     4
#>                                                                     text bug_id
#> 1                          Bug report description.\n\nAnother paragraph.      1
#> 2                                                   Another response ...      1
#> 3 Created attachment 1\ntest attachment ...\n\nAttaching a test file ...      1
#> 4                      Additional comment ... test, as you may guess ...      1
#> 5                                         Msrking the test bug as fixed.      1
#>         creation_time    id is_markdown                time attachment_id tags
#> 1 2010-02-15 18:29:54     1       FALSE 2010-02-15 18:29:54            NA   NA
#> 2 2010-02-15 18:33:25     2       FALSE 2010-02-15 18:33:25            NA   NA
#> 3 2010-02-16 17:42:59     3       FALSE 2010-02-16 17:42:59             1   NA
#> 4 2010-03-09 18:14:23 83214       FALSE 2010-03-09 18:14:23            NA   NA
#> 5 2010-03-10 16:54:39 83218       FALSE 2010-03-10 16:54:39            NA   NA
#>   is_private
#> 1      FALSE
#> 2      FALSE
#> 3      FALSE
#> 4      FALSE
#> 5      FALSE

Or if we know the id of the comment, of just that comment:

get_comment(comment = 1)
#>   creator count bug_id                                          text
#> 1   admin     0      1 Bug report description.\n\nAnother paragraph.
#>         creation_time id                time is_markdown attachment_id tags
#> 1 2010-02-15 18:29:54  1 2010-02-15 18:29:54       FALSE            NA   NA
#>   is_private
#> 1      FALSE

Attachments

If you look carefully you’ll see that the third comment on the first issue has an attachment id. We can also explore what it is:

get_attachment(issue = 1)
#>               summary is_private is_patch is_obsolete content_type
#> 1 test attachment ...      FALSE    FALSE       FALSE   text/plain
#>      last_change_time file_name size       creation_time id flags bug_id
#> 1 2010-02-16 17:43:29      ed.c  134 2010-02-16 17:42:59  1    NA      1
#>   creator
#> 1   admin
#>                                                                                                                                                                                   data
#> 1 I2luY2x1ZGUgPFJpbnRlcm5hbHMuaD4KClNFWFAgbXlFdmFsKFNFWFAgRk4sIFNFWFAgZmlyc3RfYXJnKSB7CiAgcmV0dXJuIGV2YWwoTENPTlMoRk4sIENPTlMoZmlyc3RfYXJnLCBSX05pbFZhbHVlKSksIFJfR2xvYmFsRW52KTsKfQo=
# Similar to get_comment we can also do
# get_attachment(attachment = 1)

History

If you want to know what changed you can with get_history() :

get_history(issue = 1)
#>                  when                         who
#> 1 2010-02-16 17:43:29          admin@urbanek.info
#> 2 2010-03-09 18:14:23 simon.urbanek@r-project.org
#> 3 2010-03-10 16:54:39          admin@urbanek.info
#> 4 2014-04-19 11:23:06  shanghaihuinanzhen@163.com
#> 5 2014-04-19 11:25:51  shanghaihuinanzhen@163.com
#> 6 2014-07-08 07:00:35      kaushjaiswal@gmail.com
#> 7 2015-12-14 13:44:54  maechler@stat.math.ethz.ch
#> 8 2018-01-16 16:21:14  maechler@stat.math.ethz.ch
#>                                                         changes issue
#> 1 text/plain, attachments.mimetype, application/octet-stream, 1     1
#> 2                             , cc, simon.urbanek@r-project.org     1
#> 3                    RESOLVED, NEW, status, FIXED, resolution,      1
#> 4                                           depends_on, , 15763     1
#> 5                                           , depends_on, 15764     1
#> 6                                           , depends_on, 15862     1
#> 7                                      CLOSED, RESOLVED, status     1
#> 8                                    R 2.11.0, version, R 2.y.z     1

Authenticated operations

If you want to post or comment you’ll need to be authenticated. To set up an authentication you’ll need a user (You have to ask for an account to bug-report-request@r-project.org), and then create an API key.

This will ask you to save your API key to a configuration file. To check that the api key is working you have:

Probably you’ll want to validate a bug so you’ll post a comment with

If you have found a bug you can create it with.

Note that this will guide you asking some questions before opening a bug report.


  1. The full documentation of the API is here.↩︎