# Generate renv lockfile from log file

    library(logrx)
    library(stringr)
    library(dplyr)
    library(tidyr)
    library(renv)

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)
    # }