我们最终实施的解决方案是在本地下载存档,然后手动操作,上传到我们的个人 CRAN 实例。
archive <- readRDS('archive.rds')
archive <- create_metadata_for_package(archive, "package_name", "package_name/package_name_0.9.2.tar.gz", "user")
saveRDS(archive, 'archive.rds')
create_metadata_for_package <- function(archive, package_name, package_path, uname) {
package_to_add <- structure(
list(
size = c(1680436)
, isdir = c(FALSE)
, mode = structure(c(436L), class = "octmode")
, mtime = Sys.time()
, ctime = Sys.time()
, atime = Sys.time()
, uid = c(1001L)
, gid = c(1001L)
, uname = c(uname)
, grname = c("cranadmin")
)
, .Names = c("size", "isdir", "mode", "mtime", "ctime", "atime", "uid", "gid", "uname", "grname")
, row.names = c(package_path)
, class = "data.frame"
)
#check if package_name exists in archive
new_package_name <- is.null(archive[[package_name]])
if(new_package_name) { # new package_name
new_package_meta_data <- data.frame(size=double()
, isdir=logical()
, mode=double()
, mtime=as.Date(character())
, ctime=as.Date(character())
, atime=as.Date(character())
, uid=double()
, gid=double()
, uname=character()
, grname=character())
archive[[package_name]] <- new_package_meta_data
} else { # existing package_name
package_metadata <- archive[[package_name]]
package_versions <- rownames(package_metadata)
#check if package_path is duplicate in existing metadata
if(package_path %in% rownames(archive[[package_name]])) {
return
}
}
# append package_to_add to metadata
archive[[package_name]] <- rbind(archive[[package_name]], package_to_add)
archive
}