## ----make-repo-1--------------------------------------------------------------
library("miniCRAN")

# define CRAN mirror
mirror <- c(CRAN = "https://cloud.r-project.org")

# Specify list of packages to download
pkgs <- c("foreach")
pkgList <- pkgDep(pkgs, repos = mirror, type = "source", suggests = FALSE, 
                  availPkgs = cranJuly2014)
pkgList

## ----make-repo-2, eval=FALSE--------------------------------------------------
# # Create temporary folder for miniCRAN
# dir.create(pth <- file.path(tempdir(), "miniCRAN"))
# 
# # Make repo for source and win.binary
# makeRepo(pkgList, path = pth, repos = mirror, type = c("source", "win.binary"))

## ----make-repo-3, eval=FALSE--------------------------------------------------
# # List all files in miniCRAN
# list.files(pth, recursive = TRUE, full.names = FALSE)

## ----make-repo-4, eval=FALSE--------------------------------------------------
# # Check for available packages
# pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]

## ----make-repo-5, eval=FALSE--------------------------------------------------
# install.packages(pkgs,
#                  repos = paste0("file:///", pth),
#                  type = "source")

## ----addto-repo-new-1, eval=FALSE---------------------------------------------
# # Add new packages (from CRAN) to the miniCRAN repo
# addPackage("Matrix", path = pth, repos = mirror, type = c("source", "win.binary"))
# pkgAvail(repos = pth, type = "win.binary")[, c(1:3, 5)]

## ----addto-repo-old-1, eval=FALSE---------------------------------------------
# # create a data frame with the package and version info
# oldVers <- data.frame(
#   package = c("foreach", "codetools", "iterators"),
#   version = c("1.4.0", "0.2-7", "1.0.5"),
#   stringsAsFactors = FALSE
# )
# 
# # download old source package version and create repo index
# addOldPackage(pkgList, path = pth, vers = oldVers$version, repos = mirror, type = "source")

## ----addto-repo-old-2, eval=FALSE---------------------------------------------
# # List package versions in the miniCRAN repo (produces warning about duplicates)
# pkgVersionsSrc <- checkVersions(pkgList, path = pth, type = "source")
# pkgVersionsBin <- checkVersions(pkgList, path = pth, type = "win.binary")
# 
# # After inspecting package versions, remove old versions
# basename(pkgVersionsSrc) # duplicate versions
# basename(pkgVersionsBin)
# 
# file.remove(pkgVersionsSrc[c(2,4,6)])
# 
# # rebuild the package index after removing duplicate package versions
# updateRepoIndex(pth, type = c("source", "win.binary"))

## ----addto-repo-old-3, eval=FALSE---------------------------------------------
# pkgAvail(pth, type = "source")[, c(1:3, 5)] # contains the old versions
# pkgAvail(pth, type = "win.binary")[, c(1:3, 5)] # contains the current versions

## ----update-repo-1, eval=FALSE------------------------------------------------
# # Check if updated packages are available
# oldPackages(path = pth, repos = mirror, type = "source")[, 1:3] # should need update
# oldPackages(path = pth, repos = mirror, type = "win.binary")[, 1:3] # should be current

## ----update-repo-2, eval=FALSE------------------------------------------------
# # Update available packages
# updatePackages(path = pth, repos = mirror, type = "source", ask = FALSE) # should need update
# updatePackages(path = pth, repos = mirror, type = "win.binary", ask = FALSE) # should be current

## ----cleanup, include=FALSE, eval=FALSE---------------------------------------
# # Delete temporary folder
# unlink(pth, recursive = TRUE)