Skip to content

Commit 24999dd

Browse files
authored
Merge pull request #41 from ropensci-review-tools/approvals
review cycle metrics for #4
2 parents c712e11 + c10ccf5 commit 24999dd

File tree

7 files changed

+80
-4
lines changed

7 files changed

+80
-4
lines changed

DESCRIPTION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: repometrics
22
Title: Metrics for Your Code Repository
3-
Version: 0.1.1.117
3+
Version: 0.1.1.120
44
Authors@R:
55
person("Mark", "Padgham", , "mark.padgham@email.com", role = c("aut", "cre"),
66
comment = c(ORCID = "0000-0003-2172-5265"))

R/cm-data-gh-prs.R

+22
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ gh_prs_qry <- function (org = "ropensci-review-tools",
4343
author {
4444
login
4545
}
46+
createdAt
4647
submittedAt
4748
state
4849
body
@@ -182,16 +183,37 @@ cm_data_prs_from_gh_api_internal <- function (path, n_per_page = 30L) {
182183
character (1L)
183184
)
184185
state <- vapply (i$reviews$nodes, function (j) j$state, character (1L))
186+
created_at <- vapply (
187+
i$reviews$nodes,
188+
function (j) null2na_char (j$createdAt),
189+
character (1L)
190+
)
185191
submitted_at <- vapply (
186192
i$reviews$nodes,
187193
function (j) null2na_char (j$submittedAt),
188194
character (1L)
189195
)
190196
body <- vapply (i$reviews$nodes, function (j) j$body, character (1L))
197+
198+
num_comments <- i$totalCommentsCount
199+
200+
lens <- c (length (login), length (state), length (created_at), length (submitted_at))
201+
has_content <- any (lens > 0L) | num_comments > 0L
202+
203+
if (has_content) {
204+
login <- null2na_char (login)
205+
state <- null2na_char (state)
206+
submitted_at <- null2na_char (submitted_at)
207+
body <- null2na_char (body)
208+
} else {
209+
num_comments <- integer (0L)
210+
}
211+
191212
data.frame (
192213
login = login,
193214
state = state,
194215
submitted_at = submitted_at,
216+
num_comments = num_comments,
195217
body = body
196218
)
197219
})

R/cm-metric-pr-reviews.R

+36-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ cm_metric_pr_reviews <- function (path, end_date = Sys.Date ()) {
4040
}
4141

4242
mean_to_na <- function (x) {
43-
ifelse (length (x) == 0L, NA, mean (x))
43+
ifelse (length (x) == 0L, NA_real_, mean (x))
4444
}
4545

4646
pr_duration <- difftime (prs$closed_at, prs$created_at, units = "days")
@@ -88,3 +88,38 @@ cm_metric_pr_reviews <- function (path, end_date = Sys.Date ()) {
8888

8989
return (ret)
9090
}
91+
92+
cm_metric_pr_review_duration <- function (path, end_date = Sys.Date ()) {
93+
94+
prs <- get_prs_in_period (path, end_date) # in cm-metrics-change-req.R
95+
96+
prs$created_at <- as.Date (prs$created_at)
97+
prs$closed_at <- as.Date (prs$closed_at)
98+
99+
index_approved <- which (prs$review_decision == "APPROVED")
100+
101+
cycle_dur <- vapply (prs$reviews, function (i) {
102+
dates <- as.Date (i$submitted_at)
103+
ret <- NA_real_
104+
if (length (dates) > 1L) {
105+
dt <- diff (dates, units = "days")
106+
ret <- mean (as.integer (dt))
107+
}
108+
return (ret)
109+
}, numeric (1L))
110+
cycle_dur <- as.numeric (cycle_dur)
111+
cycle_dur_mn <- mean (cycle_dur [index_approved], na.rm = TRUE)
112+
cycle_dur_md <- stats::median (cycle_dur [index_approved], na.rm = TRUE)
113+
114+
review_dur <- difftime (prs$closed_at, prs$created_at, units = "days")
115+
review_dur <- as.numeric (review_dur)
116+
review_dur_mn <- mean (review_dur [index_approved], na.rm = TRUE)
117+
review_dur_md <- stats::median (review_dur [index_approved], na.rm = TRUE)
118+
119+
c (
120+
cycle_dur_mn = cycle_dur_mn,
121+
cycle_dur_md = cycle_dur_md,
122+
review_dur_mn = review_dur_mn,
123+
review_dur_md = review_dur_md
124+
)
125+
}

codemeta.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"codeRepository": "https://github.com/ropensci-review-tools/repometrics",
99
"issueTracker": "https://github.com/ropensci-review-tools/repometrics/issues",
1010
"license": "https://spdx.org/licenses/GPL-3.0",
11-
"version": "0.1.1.117",
11+
"version": "0.1.1.120",
1212
"programmingLanguage": {
1313
"@type": "ComputerLanguage",
1414
"name": "R",

tests/testthat/gh_api_ctbs/ghusers/gaborcsardi.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"twitter_username": null,
2929
"public_repos": 194,
3030
"public_gists": 19,
31-
"followers": 1432,
31+
"followers": 1431,
3232
"following": 0,
3333
"created_at": "2011-03-09T17:29:25Z",
3434
"updated_at": "2024-11-18T09:12:36Z"

tests/testthat/gh_api_prs/api.github.com/graphql-5ab71e-POST.json tests/testthat/gh_api_prs/api.github.com/graphql-d5112a-POST.json

+4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@
112112
"author": {
113113
"login": "gaborcsardi"
114114
},
115+
"createdAt": "2016-12-01T10:36:38Z",
115116
"submittedAt": "2016-12-01T10:41:46Z",
116117
"state": "COMMENTED",
117118
"body": ""
@@ -120,6 +121,7 @@
120121
"author": {
121122
"login": "LiNk-NY"
122123
},
124+
"createdAt": "2016-12-23T18:51:38Z",
123125
"submittedAt": "2016-12-23T18:51:38Z",
124126
"state": "COMMENTED",
125127
"body": ""
@@ -128,6 +130,7 @@
128130
"author": {
129131
"login": "LiNk-NY"
130132
},
133+
"createdAt": "2016-12-23T18:52:02Z",
131134
"submittedAt": "2016-12-23T18:52:02Z",
132135
"state": "COMMENTED",
133136
"body": ""
@@ -136,6 +139,7 @@
136139
"author": {
137140
"login": "LiNk-NY"
138141
},
142+
"createdAt": "2016-12-23T18:55:59Z",
139143
"submittedAt": "2016-12-23T18:55:59Z",
140144
"state": "COMMENTED",
141145
"body": ""

tests/testthat/test-cm-metrics.R

+15
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,18 @@ test_that ("cm metrics code change lines", {
164164
}
165165
expect_true (x2 > x1)
166166
})
167+
168+
test_that ("cm metrics review duration", {
169+
170+
Sys.setenv ("REPOMETRICS_TESTS" = "true")
171+
mock_cm_data ()
172+
path <- generate_test_pkg ()
173+
revs <- cm_metric_pr_review_duration (path, end_date = end_date)
174+
fs::dir_delete (path)
175+
176+
expect_type (revs, "double")
177+
expect_length (revs, 4L)
178+
expect_named (revs)
179+
nms <- c ("cycle_dur_mn", "cycle_dur_md", "review_dur_mn", "review_dur_md")
180+
expect_equal (names (revs), nms)
181+
})

0 commit comments

Comments
 (0)