Skip to contents

Axecute a script and get the log file.

scriptPath <- tempfile()

logDir <- tempdir()
writeLines(
  c(
    "print('hello logrx')",
    "library(dplyr)",
    "count(iris, Species)"
  ),
  con = scriptPath
)

filePath <- file.path(logDir, "log_out_parse")

axecute(scriptPath, log_name = "log_out_parse", log_path = logDir, show_repo_url = TRUE)

Later on read (and parse) previous log file as list of objects.

parsedFile <- read_log_file(filePath)

Create a renv lockfile based on the used packages mentioned in the log file.

pkgs <- parsedFile$`Used Package and Functions` %>%
  transmute(package_name = str_extract(library, "(?<=package\\:).+"))

used_pkgs <- parsedFile$`Session Information`$Packages %>%
  filter(package %in% pkgs$package_name)

repo_urls <- parsedFile$`Repo URLs`

temp_lockfile <- tempfile(fileext = ".lockfile")

# Create lockfile based on used packages
x <- renv::lockfile_create(
  packages = c(
    Package = used_pkgs$package
  )
)

# Update repo URL for lockfile
lockfile_repos <- repo_urls$Name
names(lockfile_repos) <- repo_urls$URL
x <- renv::lockfile_modify(
  lockfile = x,
  repos = lockfile_repos
)

# Write lockfile
renv::lockfile_write(
  lockfile = x,
  file = temp_lockfile,
  type = "custom",
)

# Update package versions based on session info
renv::record(
  records = list(
    digest = list(
      Package = used_pkgs$package,
      Version = used_pkgs$version,
      Source = "Repository",
      Repository = used_pkgs$source
    )
  ),
  lockfile = temp_lockfile
)

# Open the lockfile you just created to confirm it looks as expected
# uncomment the lines below to open the lockfile in RStudio
# if (require("rstudioapi") && rstudioapi::isAvailable()) {
#   rstudioapi::documentOpen(temp_lockfile)
# }