R/cran_actions.R

Defines functions warnings_actions cran_all_actions cran_actions

Documented in cran_actions

## What are the times between archival and unarchival?

#' Look at the CRAN actions db
#'
#' CRAN tracks movements of packages and the actions used (for example to report
#' the number of manual actions taken by the volunteers).
#' @inheritParams base_alias
#' @return A data.frame with Date, Time, User, Action, Package and Version columns.
#' @importFrom stats na.omit
#' @importFrom utils head
#' @keywords internal
cran_actions <- function(packages = NULL, silent = FALSE) {
    save_state("full_cran_actions", cran_all_actions())
    check_packages(packages, NA)
    actions <- get_package_subset("full_cran_actions", packages)
    first_package <- !duplicated(actions$Package)

    if (isTRUE(silent)) {
        warnings_actions(actions)
    }
    actions
}

cran_all_actions <- function() {
    env <- "full_cran_actions"
    if (!empty_env(env)) {
        return(pkg_state[[env]])
    }

    actions_f <- system.file(package = "repo.data", "data", "actions.rds")
    if (!nzchar(actions_f)) {
        stop("Data not released open, sorry can't share it (yet?)")
    }
    actions <- readRDS(actions_f)
    actions <- unique(actions)
    actions$Date <- charToDate(actions$Date, "%F")
    actions$User <- as.factor(actions$User)
    lev <- c("publish", "archive", "remove")
    if (any(!na.omit(actions$Action) %in% lev)) {
        warning("New action by CRAN: ", na.omit(setdiff(actions$Action, lev)))
    }
    actions$Action <- factor(actions$Action, levels = lev)
    actions$Package <- as.factor(actions$Package)
    actions <- sort_by(actions, ~Package + datetime2POSIXct(Date, Time) + Action)
    rownames(actions) <- NULL
    pkg_state[[env]] <- actions
    actions
}

warnings_actions <- function(actions) {
    first_package <- !duplicated(actions$Package)
    w <- sum(first_package & (actions$Action == "archive" | is.na(actions$Action)))
    if (w) {
        warning("There are ", w, " packages starting with an archive action!", call. = FALSE)
    }
    dup <- duplicated(actions[, c("Package", "Version", "Action")])
    if (any(dup)) {
        warning("There are ", sum(dup), " packages with duplicated actions for the same version.\n",
                "Explanation: This indicate a manual intervetion of the CRAN team.", call. = FALSE)
    }
}

Try the repo.data package in your browser

Any scripts or data that you put into this service are public.

repo.data documentation built on Sept. 15, 2025, 9:08 a.m.