pkgtools/R2pkg: format source code

This commit is contained in:
rillig 2019-10-25 19:00:16 +00:00
parent 1ef43e905b
commit e21dca09cc
2 changed files with 761 additions and 839 deletions

View file

@ -1,4 +1,4 @@
# $NetBSD: R2pkg.R,v 1.26 2019/10/19 22:10:58 rillig Exp $
# $NetBSD: R2pkg.R,v 1.27 2019/10/25 19:00:16 rillig Exp $
#
# Copyright (c) 2014,2015,2016,2017,2018,2019
# Brook Milligan. All rights reserved.
@ -141,41 +141,37 @@ licenses[['POSTGRESQL']] <- 'postgresql-license'
adjacent.duplicates <- function(lines)
c(FALSE, lines[-length(lines)] == lines[-1])
paste2 <- function(s1,s2)
{
if (is.na(s1) && is.na(s2)) return ('')
if (is.na(s1) && !is.na(s2)) return (s2)
if (!is.na(s1) && is.na(s2)) return (s1)
if (!is.na(s1) && !is.na(s2)) return (paste(s1,s2))
paste2 <- function(s1, s2) {
if (is.na(s1) && is.na(s2)) return('')
if (is.na(s1) && !is.na(s2)) return(s2)
if (!is.na(s1) && is.na(s2)) return(s1)
if (!is.na(s1) && !is.na(s2)) return(paste(s1, s2))
}
end.paragraph <- function(lines)
if (length(lines) > 0) append(lines, '') else lines
as.sorted.list <- function(df)
{
as.sorted.list <- function(df) {
l <- list()
df <- df[!duplicated(df),]
if (nrow(df) > 0)
{
key <- as.vector(df[,1])
value <- as.vector(df[,2])
key <- order(key,value)
l <- as.list(value[key])
}
{
key <- as.vector(df[, 1])
value <- as.vector(df[, 2])
key <- order(key, value)
l <- as.list(value[key])
}
l
}
mklines.get_value <- function(mklines, varname, default = '')
{
mklines.get_value <- function(mklines, varname, default = '') {
values <- mklines$old_value[mklines$key == varname]
if (length(values) == 0)
values <- mklines$old_value[mklines$key == paste0('#', varname)]
if (length(values) == 1) values[1] else default
}
categorize.key_value <- function(df,line='line')
{
categorize.key_value <- function(df, line='line') {
re_varassign <- paste0(
'^',
' *',
@ -198,8 +194,7 @@ categorize.key_value <- function(df,line='line')
df
}
categorize.depends <- function(df, line='line')
{
categorize.depends <- function(df, line='line') {
df$depends <- df$key_value & df$key == 'DEPENDS'
df$category[df$depends] <- unlist(relpath_category(df[df$depends, line]))
df
@ -212,32 +207,29 @@ categorize.buildlink <- function(df, line='line')
df
}
fix.continued.lines <- function(df,line='line')
{
fix.continued.lines <- function(df, line='line') {
if (nrow(df) < 2)
return(df)
continued <- grepl('\\\\$', df[, line])
continued_key_value <- df$key_value & continued
if (FALSE %in% df[continued,'key_value'])
if (FALSE %in% df[continued, 'key_value'])
level.warning('unhandled continued line(s)')
for (i in 1 : (nrow(df) - 1))
{
if (!continued_key_value[i])
next
for (i in 1:(nrow(df) - 1)) {
if (!continued_key_value[i])
next
df[i, line] <- sub('[\t ]*\\\\$', '', df[i, line])
df$key_value[i + 1] <- TRUE
df$key[i + 1] <- df$key[i]
df[i + 1, line] <- paste0(df$key[i], '+=', df[i + 1, line])
}
df[i, line] <- sub('[\t ]*\\\\$', '', df[i, line])
df$key_value[i + 1] <- TRUE
df$key[i + 1] <- df$key[i]
df[i + 1, line] <- paste0(df$key[i], '+=', df[i + 1, line])
}
df
}
read_mklines <- function(filename)
{
read_mklines <- function(filename) {
df <- data.frame()
for (line in as.list(readLines(filename)))
df <- rbind(df, data.frame(line = line, stringsAsFactors = FALSE))
@ -252,16 +244,14 @@ read_mklines <- function(filename)
df
}
read.file.as.list <- function(filename)
{
read.file.as.list <- function(filename) {
result <- list()
info <- file.info(filename)
size <- info[filename,'size']
if (!is.na(size) && size > 0)
{
contents <- readLines(filename)
result <- as.list(contents)
}
size <- info[filename, 'size']
if (!is.na(size) && size > 0) {
contents <- readLines(filename)
result <- as.list(contents)
}
result
}
@ -270,22 +260,19 @@ remove.punctuation <- function(s) gsub('[,-]', '', s)
remove.quotes <- function(s) gsub('[\'`"]', '', s)
remove.articles <- function(s) gsub('\\b[Aa]n?\\b', '\\1', s)
case.insensitive.equals <- function(s1,s2)
{
case.insensitive.equals <- function(s1, s2) {
s1.lower <- tolower(simplify.whitespace(s1))
s2.lower <- tolower(simplify.whitespace(s2))
s1.lower == s2.lower
}
weakly.equals <- function(s1,s2)
{
weakly.equals <- function(s1, s2) {
case.insensitive.equals(
remove.articles(remove.quotes(remove.punctuation(s1))),
remove.articles(remove.quotes(remove.punctuation(s2))))
}
license <- function(mklines, s)
{
license <- function(mklines, s) {
license <- licenses[[s]]
if (is.null(license))
license <- s
@ -298,68 +285,59 @@ license <- function(mklines, s)
find.Rcpp <- function(imps, deps)
any(grepl('Rcpp', paste(imps, deps)))
buildlink3.mk <- function(imps,deps)
{
buildlink3.mk <- function(imps, deps) {
BUILDLINK3.MK <- data.frame()
buildlink3.mk.list <- read.file.as.list('BUILDLINK3.MK')
for (line in buildlink3.mk.list)
{
fields <- strsplit(line[[1]],'/',fixed=TRUE)
key <- fields[[1]][3]
value <- line
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
}
if (find.Rcpp(imps,deps))
{
buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
key <- 'devel'
value <- buildlink3.line
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
}
for (line in buildlink3.mk.list) {
fields <- strsplit(line[[1]], '/', fixed = TRUE)
key <- fields[[1]][3]
value <- line
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = key, value = value))
}
if (find.Rcpp(imps, deps)) {
buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
key <- 'devel'
value <- buildlink3.line
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = key, value = value))
}
BUILDLINK3.MK
}
varassigns <- function(key, values)
{
varassigns <- function(key, values) {
fields <- list()
for (l in values)
{
value <- unlist(l)
if (value != '')
fields <- append(fields, varassign(key, list(value)))
else
fields <- append(fields, list(''))
}
for (l in values) {
value <- unlist(l)
if (value != '')
fields <- append(fields, varassign(key, list(value)))
else
fields <- append(fields, list(''))
}
fields
}
categories <- function() basename(dirname(getwd()))
filter.imports <- function(s)
{
for (pkg in base.packages)
{
re.pkg <- paste('^',pkg,sep='')
s <- s[!grepl(re.pkg,s)]
}
filter.imports <- function(s) {
for (pkg in base.packages) {
re.pkg <- paste('^', pkg, sep = '')
s <- s[!grepl(re.pkg, s)]
}
s
}
make.imports <- function(s1,s2)
{
s <- paste2(s1,s2)
s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?','\\1 \\2,',s)
imports <- na.omit(unlist(strsplit(s,',[[:blank:]]*')))
make.imports <- function(s1, s2) {
s <- paste2(s1, s2)
s <- gsub('([[:alnum:]]+)[[:blank:]]+(\\([^\\)]*\\))?[[:blank:]]*,?', '\\1 \\2,', s)
imports <- na.omit(unlist(strsplit(s, ',[[:blank:]]*')))
imports <- trim.space(imports)
imports <- filter.imports(imports)
imports
}
make.dependency <- function(s)
{
s <- gsub('\\)','',s)
s <- gsub('-','.',s)
unlist(strsplit(s,'\\('))
make.dependency <- function(s) {
s <- gsub('\\)', '', s)
s <- gsub('-', '.', s)
unlist(strsplit(s, '\\('))
}
depends <- function(dependency) dependency[1]
@ -370,20 +348,17 @@ depends.pkg <- function(dependency)
new.depends.pkg <- function(dependency)
Sys.glob(paste0('../../wip/R-', depends(dependency)))
depends.pkg.fullname <- function(dependency,index=1)
{
result <- system(paste('cd',depends.pkg(dependency)[index],'&& bmake show-var VARNAME=PKGNAME'),intern=TRUE)
depends.pkg.fullname <- function(dependency, index=1) {
result <- system(paste('cd', depends.pkg(dependency)[index], '&& bmake show-var VARNAME=PKGNAME'), intern = TRUE)
result
}
depends.pkg.vers <- function(dependency,index=1)
{
result <- sub('^(.*)-([^-]*)$','\\2',depends.pkg.fullname(dependency,index))
depends.pkg.vers <- function(dependency, index=1) {
result <- sub('^(.*)-([^-]*)$', '\\2', depends.pkg.fullname(dependency, index))
result
}
depends.vers <- function(dependency, index=1)
{
depends.vers <- function(dependency, index=1) {
if (length(dependency) == 2)
trim.space(dependency[2])
else
@ -393,23 +368,20 @@ depends.vers <- function(dependency, index=1)
depends.vers.2 <- function(dependency)
ifelse(length(dependency) == 2, trim.space(dependency[2]), '>=???')
depends.dir <- function(dependency, index=1)
{
depends.dir <- function(dependency, index=1) {
fields <- strsplit(depends.pkg(dependency)[index], '/', fixed = TRUE)
fields[[1]][3]
}
depends.line <- function(dependency,index=1)
{
depends.line <- function(dependency, index=1) {
paste0('DEPENDS+=\tR-', depends(dependency), depends.vers(dependency, index), ':', depends.pkg(dependency)[index])
}
depends.line.2 <- function(dependency)
{
result <- paste0('DEPENDS+=\tR-',depends,depends.vers.2(dependency),':../../???/R-',depends)
result <- paste0(result,'\t# XXX - found')
depends.line.2 <- function(dependency) {
result <- paste0('DEPENDS+=\tR-', depends, depends.vers.2(dependency), ':../../???/R-', depends)
result <- paste0(result, '\t# XXX - found')
for (pkg in depends.pkg(dependency))
result <- paste(result,pkg)
result <- paste(result, pkg)
result
}
@ -419,23 +391,20 @@ buildlink3.file <- function(dependency, index=1)
buildlink3.line <- function(dependency, index=1)
sprintf('.include "%s"', buildlink3.file(dependency, index))
dependency.dir <- function(dependency)
{
result <- paste0('../../wip/R-',depends(dependency))
dependency.dir <- function(dependency) {
result <- paste0('../../wip/R-', depends(dependency))
result
}
message.wip.dependency <- function(dependency,index=1)
{
dir <- depends.dir(dependency,index)
dir.in.wip <- grepl('wip',dir)
wd.in.wip <- grepl('/wip/',getwd())
message.wip.dependency <- function(dependency, index=1) {
dir <- depends.dir(dependency, index)
dir.in.wip <- grepl('wip', dir)
wd.in.wip <- grepl('/wip/', getwd())
if (dir.in.wip && !wd.in.wip)
level.warning('R-',arg.rpkg,' should not depend on a wip package: ',depends.pkg(dependency)[index])
level.warning('R-', arg.rpkg, ' should not depend on a wip package: ', depends.pkg(dependency)[index])
}
update.dependency <- function(dependency, index=1)
{
update.dependency <- function(dependency, index=1) {
level.message('updating dependency for ', depends(dependency), ': ', depends.pkg(dependency)[index])
command <- sprintf(
'grep -E -q -e "%s" %s || (cd %s && %s %s %s)',
@ -446,92 +415,76 @@ update.dependency <- function(dependency, index=1)
level.warning('error updating dependency for ', depends(dependency))
}
make.depends <- function(imps,deps)
{
make.depends <- function(imps, deps) {
warn_too_many_dependencies <- function(dependency) {
level.warning(sprintf('too many dependencies found for %s: %s',
depends(dependency), paste(depends.pkg(dependency))))
depends(dependency), paste(depends.pkg(dependency))))
}
imports <- make.imports(imps,deps)
# XXX message('===> imports:')
# XXX print(imports)
imports <- make.imports(imps, deps)
# XXX message('===> imports:')
# XXX print(imports)
DEPENDS <- data.frame()
BUILDLINK3.MK <- buildlink3.mk(imps,deps)
if (length(imports) > 0)
{
for (i in 1:length(imports))
{
dependency <- make.dependency(imports[i])
depdirs <- depends.pkg(dependency)
# XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency))
if (length(depdirs) == 0) # a dependency cannot be found
{
level.message('0 dependencies match ',dependency)
if (arg.recursive)
{
dir.create(path=dependency.dir(dependency),recursive=TRUE)
update.dependency(dependency)
}
else
level.warning('dependency needed for ',depends(dependency))
}
else if (length(depdirs) == 1) # a unique dependency found
{
level.message('1 dependency matches ',dependency,': ',depdirs)
message.wip.dependency(dependency)
if (arg.recursive && arg.update)
update.dependency(dependency)
if (file.exists(buildlink3.file(dependency)))
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency),value=buildlink3.line(dependency)))
else
DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency),value=depends.line(dependency)))
}
else if (length(depdirs) == 2) # two dependencies found
{
index <- grep('/wip/',depdirs,invert=TRUE)
level.message('2 dependencies match ',dependency,':',paste(' ',depdirs))
# message('===> depends(dependency): ',depends(dependency))
# message('===> depends.pkg(dependency):',paste(' ',d))
# message('===> index: ',index)
# message('===> buildlink3.line(): ',buildlink3.line(dependency,index))
if (length(index) == 1) # a unique, non-wip, dependency found
{
level.message('choosing unique non-wip dependency for ',dependency,': ',depdirs[index])
if (arg.recursive && arg.update)
update.dependency(dependency,index)
if (file.exists(buildlink3.file(dependency,index)))
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=depends.dir(dependency,index),value=buildlink3.line(dependency,index)))
else
DEPENDS <- rbind(DEPENDS,data.frame(key=depends.dir(dependency,index),value=depends.line(dependency,index)))
}
else
{
level.message('no unique non-wip dependency matches')
warn_too_many_dependencies(dependency)
DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
}
}
else # more than 2 dependencies found
{
level.message(length(depdirs),' dependencies match ',dependency,':',paste(' ',depdirs))
warn_too_many_dependencies(dependency)
DEPENDS <- rbind(DEPENDS,data.frame(key='???',value=depends.line.2(dependency)))
}
if (length(new.depends.pkg(dependency)) > 0)
system(paste('echo', depends(dependency), arg.rpkg, '>>', arg.dependency_list))
BUILDLINK3.MK <- buildlink3.mk(imps, deps)
if (length(imports) > 0) {
for (i in 1:length(imports)) {
dependency <- make.dependency(imports[i])
depdirs <- depends.pkg(dependency)
# XXX message('[ ',${LEVEL},' ] ===> ',i,' / ',length(imports),': ',depends(dependency))
if (length(depdirs) == 0) { # a dependency cannot be found
level.message('0 dependencies match ', dependency)
if (arg.recursive) {
dir.create(path = dependency.dir(dependency), recursive = TRUE)
update.dependency(dependency)
} else
level.warning('dependency needed for ', depends(dependency))
} else if (length(depdirs) == 1) { # a unique dependency found
level.message('1 dependency matches ', dependency, ': ', depdirs)
message.wip.dependency(dependency)
if (arg.recursive && arg.update)
update.dependency(dependency)
if (file.exists(buildlink3.file(dependency)))
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = depends.dir(dependency), value = buildlink3.line(dependency)))
else
DEPENDS <- rbind(DEPENDS, data.frame(key = depends.dir(dependency), value = depends.line(dependency)))
} else if (length(depdirs) == 2) { # two dependencies found
index <- grep('/wip/', depdirs, invert = TRUE)
level.message('2 dependencies match ', dependency, ':', paste(' ', depdirs))
# message('===> depends(dependency): ',depends(dependency))
# message('===> depends.pkg(dependency):',paste(' ',d))
# message('===> index: ',index)
# message('===> buildlink3.line(): ',buildlink3.line(dependency,index))
if (length(index) == 1) { # a unique, non-wip, dependency found
level.message('choosing unique non-wip dependency for ', dependency, ': ', depdirs[index])
if (arg.recursive && arg.update)
update.dependency(dependency, index)
if (file.exists(buildlink3.file(dependency, index)))
BUILDLINK3.MK <- rbind(BUILDLINK3.MK, data.frame(key = depends.dir(dependency, index), value = buildlink3.line(dependency, index)))
else
DEPENDS <- rbind(DEPENDS, data.frame(key = depends.dir(dependency, index), value = depends.line(dependency, index)))
} else {
level.message('no unique non-wip dependency matches')
warn_too_many_dependencies(dependency)
DEPENDS <- rbind(DEPENDS, data.frame(key = '???', value = depends.line.2(dependency)))
}
} else { # more than 2 dependencies found
level.message(length(depdirs), ' dependencies match ', dependency, ':', paste(' ', depdirs))
warn_too_many_dependencies(dependency)
DEPENDS <- rbind(DEPENDS, data.frame(key = '???', value = depends.line.2(dependency)))
}
if (length(new.depends.pkg(dependency)) > 0)
system(paste('echo', depends(dependency), arg.rpkg, '>>', arg.dependency_list))
}
}
DEPENDS <- end.paragraph(as.sorted.list(DEPENDS))
BUILDLINK3.MK <- as.sorted.list(BUILDLINK3.MK)
list(DEPENDS,BUILDLINK3.MK)
list(DEPENDS, BUILDLINK3.MK)
}
use_languages <- function(imps, deps)
if (find.Rcpp(imps, deps)) 'c c++' else '# none'
write.Makefile <- function(orig_mklines, metadata)
{
write.Makefile <- function(orig_mklines, metadata) {
maintainer <- mklines.get_value(orig_mklines, 'MAINTAINER', arg.maintainer_email)
license <- license(orig_mklines, metadata$License)
use_languages <- use_languages(metadata$Imports, metadata$Depends)
@ -559,24 +512,21 @@ write.Makefile <- function(orig_mklines, metadata)
writeLines(lines, 'Makefile')
}
element <- function(mklines, varname, field, quiet=FALSE)
{
element <- function(mklines, varname, field, quiet=FALSE) {
i <- match(varname, mklines$key, 0)
if (i != 0 && mklines$key_value[i])
return(mklines[i, field])
if (!quiet)
{
if (i == 0)
level.warning(varname, ' not found')
else
level.warning(varname, ' is not a key-value field')
}
if (!quiet) {
if (i == 0)
level.warning(varname, ' not found')
else
level.warning(varname, ' is not a key-value field')
}
'???'
}
make.categories <- function(mklines)
{
make.categories <- function(mklines) {
directory <- basename(dirname(getwd()))
categories <- unlist(element(mklines, 'CATEGORIES', 'old_value'))
categories <- unlist(strsplit(categories, '[[:blank:]]+'))
@ -588,15 +538,13 @@ make.categories <- function(mklines)
paste(categories, collapse = ' ')
}
make.maintainer <- function(mklines)
{
make.maintainer <- function(mklines) {
old.maintainer <- element(mklines, 'MAINTAINER', 'old_value')
new.maintainer <- element(mklines, 'MAINTAINER', 'new_value')
if (old.maintainer == '') new.maintainer else old.maintainer
}
make.comment <- function(mklines)
{
make.comment <- function(mklines) {
old.comment <- element(mklines, 'COMMENT', 'old_value')
new.comment <- element(mklines, 'COMMENT', 'new_value')
if (weakly.equals(old.comment, new.comment))
@ -605,23 +553,21 @@ make.comment <- function(mklines)
paste0(old.comment, '\t# [R2pkg] updated to: ', new.comment)
}
make.new_license <- function(df,license)
{
make.new_license <- function(df, license) {
new_license <- licenses[[license]]
if (is.null(new_license))
new_license <- license
new_license <- license
df$new_value[df$key == 'LICENSE'] <- new_license
df
}
license.in.pkgsrc <- function(license) license %in% sapply(licenses, '[', 1)
make.license <- function(df)
{
make.license <- function(df) {
# message('===> make.license():')
old_license <- element(df,'LICENSE','old_value')
old_todo <- element(df,'LICENSE','old_todo')
new_license <- element(df,'LICENSE','new_value')
old_license <- element(df, 'LICENSE', 'old_value')
old_todo <- element(df, 'LICENSE', 'old_todo')
new_license <- element(df, 'LICENSE', 'new_value')
old_known <- license.in.pkgsrc(old_license)
new_known <- license.in.pkgsrc(new_license)
@ -641,17 +587,15 @@ make.license <- function(df)
df
}
find.order <- function(df,key,field)
{
x <- df[,key]
value <- match(TRUE,x)
find.order <- function(df, key, field) {
x <- df[, key]
value <- match(TRUE, x)
if (!is.na(value))
value <- df[value,field]
value <- df[value, field]
value
}
mklines.update_with_metadata <- function(df, metadata)
{
mklines.update_with_metadata <- function(df, metadata) {
df$new_value <- NA
df <- make.new_license(df, metadata$License)
@ -663,8 +607,7 @@ mklines.update_with_metadata <- function(df, metadata)
df
}
mklines.update_value <- function(df)
{
mklines.update_value <- function(df) {
df$value <- NA
df$todo <- ''
df <- make.license(df)
@ -675,8 +618,7 @@ mklines.update_value <- function(df)
df
}
mklines.update_new_line <- function(df)
{
mklines.update_new_line <- function(df) {
df$new_line <- df$line
va <- df$key_value & !is.na(df$value)
@ -686,8 +628,7 @@ mklines.update_new_line <- function(df)
df
}
mklines.annotate_distname <- function(mklines)
{
mklines.annotate_distname <- function(mklines) {
match <- grepl('^[[:blank:]]*DISTNAME', mklines$new_line)
line <- mklines$new_line[match]
value <- sub('^[[:blank:]]*DISTNAME[[:blank:]]*=[[:blank:]]*', '', line)
@ -699,109 +640,97 @@ mklines.annotate_distname <- function(mklines)
mklines
}
mklines.remove_lines_before_update <- function(mklines)
{
mklines.remove_lines_before_update <- function(mklines) {
remove <- (
grepl('^[[:blank:]]*MASTER_SITES', mklines$new_line) |
grepl('^[[:blank:]]*HOMEPAGE', mklines$new_line) |
grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS', mklines$new_line) |
grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS', mklines$new_line))
grepl('^[[:blank:]]*HOMEPAGE', mklines$new_line) |
grepl('^[[:blank:]]*BUILDLINK_ABI_DEPENDS', mklines$new_line) |
grepl('^[[:blank:]]*BUILDLINK_API_DEPENDS', mklines$new_line))
mklines[!remove,]
}
mklines.reassign_order <- function(mklines)
{
mklines.reassign_order <- function(mklines) {
r_pkgname.order <- element(mklines, 'R_PKGNAME', 'order')
categories.order <- element(mklines, 'CATEGORIES', 'order')
if (r_pkgname.order > categories.order)
{
r_pkgname.index <- mklines$key == 'R_PKGNAME'
r_pkgname.index[is.na(r_pkgname.index)] <- FALSE
r_pkgver.index <- mklines$key == 'R_PKGVER'
r_pkgver.index[is.na(r_pkgver.index)] <- FALSE
mklines[r_pkgname.index, 'order'] <- categories.order - 0.2
mklines[r_pkgver.index, 'order'] <- categories.order - 0.1
}
if (r_pkgname.order > categories.order) {
r_pkgname.index <- mklines$key == 'R_PKGNAME'
r_pkgname.index[is.na(r_pkgname.index)] <- FALSE
r_pkgver.index <- mklines$key == 'R_PKGVER'
r_pkgver.index[is.na(r_pkgver.index)] <- FALSE
mklines[r_pkgname.index, 'order'] <- categories.order - 0.2
mklines[r_pkgver.index, 'order'] <- categories.order - 0.1
}
mklines
}
conflicts <- function(pkg)
{
conflicts <- function(pkg) {
conflict <- sprintf('R>=%s.%s', R.version$major, R.version$minor)
conflicts <- list()
if (pkg %in% base.packages)
{
conflicts <- append(conflicts, varassign('CONFLICTS', conflict))
conflicts <- end.paragraph(conflicts)
}
if (pkg %in% base.packages) {
conflicts <- append(conflicts, varassign('CONFLICTS', conflict))
conflicts <- end.paragraph(conflicts)
}
conflicts
}
make.df.conflicts <- function(df,metadata)
{
make.df.conflicts <- function(df, metadata) {
df.conflicts <- data.frame()
conflicts.exist <- element(df,'CONFLICTS','old_value',quiet=TRUE) != '???'
if (!conflicts.exist)
{
c <- conflicts(metadata$Package)
order <- element(df, 'COMMENT', 'order') + 2.5
i <- 0
for (conflict in c)
{
i <- i + 1
category <- as.character(i)
depends <- FALSE
buildlink3.mk <- FALSE
x <- data.frame(new_line=conflict,order=order,category=category,depends=depends,buildlink3.mk=buildlink3.mk)
df.conflicts <- rbind(df.conflicts,x)
}
conflicts.exist <- element(df, 'CONFLICTS', 'old_value', quiet = TRUE) != '???'
if (!conflicts.exist) {
c <- conflicts(metadata$Package)
order <- element(df, 'COMMENT', 'order') + 2.5
i <- 0
for (conflict in c) {
i <- i + 1
category <- as.character(i)
depends <- FALSE
buildlink3.mk <- FALSE
x <- data.frame(new_line = conflict, order = order, category = category, depends = depends, buildlink3.mk = buildlink3.mk)
df.conflicts <- rbind(df.conflicts, x)
}
}
df.conflicts
}
make.df.depends <- function(df,DEPENDS)
{
make.df.depends <- function(df, DEPENDS) {
# message('===> make.df.depends():')
# str(df)
# print(df)
df.depends <- data.frame()
if (TRUE %in% df$depends)
df.depends <- data.frame(new_line=df[df$depends,'line'],stringsAsFactors=FALSE)
df.depends <- data.frame(new_line = df[df$depends, 'line'], stringsAsFactors = FALSE)
for (line in DEPENDS)
df.depends <- rbind(df.depends,data.frame(new_line=line,stringsAsFactors=FALSE))
if (nrow(df.depends) > 0)
{
df.depends$category <- NA
df.depends$buildlink3.mk <- FALSE
df.depends <- categorize.key_value(df.depends,'new_line')
df.depends <- categorize.depends(df.depends,'new_line')
df.depends$key_value <- NULL
df.depends$key <- NULL
df.depends <- df.depends[!duplicated(df.depends),]
df.depends$order <- find.order(df,'depends','order')
}
df.depends <- rbind(df.depends, data.frame(new_line = line, stringsAsFactors = FALSE))
if (nrow(df.depends) > 0) {
df.depends$category <- NA
df.depends$buildlink3.mk <- FALSE
df.depends <- categorize.key_value(df.depends, 'new_line')
df.depends <- categorize.depends(df.depends, 'new_line')
df.depends$key_value <- NULL
df.depends$key <- NULL
df.depends <- df.depends[!duplicated(df.depends),]
df.depends$order <- find.order(df, 'depends', 'order')
}
# message('===> df.depends:')
# str(df.depends)
# print(df.depends)
df.depends
}
make.df.buildlink3 <- function(df,BUILDLINK3.MK)
{
make.df.buildlink3 <- function(df, BUILDLINK3.MK) {
# message('===> make.df.buildlink3():')
df.buildlink3.mk <- data.frame()
if (TRUE %in% df$buildlink3.mk)
df.buildlink3.mk <- data.frame(new_line=df[df$buildlink3.mk,'line'],stringsAsFactors=FALSE)
df.buildlink3.mk <- data.frame(new_line = df[df$buildlink3.mk, 'line'], stringsAsFactors = FALSE)
for (line in BUILDLINK3.MK)
df.buildlink3.mk <- rbind(df.buildlink3.mk,data.frame(new_line=line,stringsAsFactors=FALSE))
if (nrow(df.buildlink3.mk) > 0)
{
df.buildlink3.mk$category <- NA
df.buildlink3.mk$depends <- FALSE
df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk,'new_line')
df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),]
df.buildlink3.mk$order <- find.order(df,'buildlink3.mk','order')
}
df.buildlink3.mk <- rbind(df.buildlink3.mk, data.frame(new_line = line, stringsAsFactors = FALSE))
if (nrow(df.buildlink3.mk) > 0) {
df.buildlink3.mk$category <- NA
df.buildlink3.mk$depends <- FALSE
df.buildlink3.mk <- categorize.buildlink(df.buildlink3.mk, 'new_line')
df.buildlink3.mk <- df.buildlink3.mk[!duplicated(df.buildlink3.mk),]
df.buildlink3.mk$order <- find.order(df, 'buildlink3.mk', 'order')
}
# str(df.buildlink3.mk)
# print(df.buildlink3.mk)
df.buildlink3.mk
@ -809,18 +738,16 @@ make.df.buildlink3 <- function(df,BUILDLINK3.MK)
#' updates the dependencies and returns the lines to be written to the
#' updated package Makefile.
mklines.lines <- function(mklines, df.conflicts, df.depends, df.buildlink3.mk)
{
mklines.lines <- function(mklines, df.conflicts, df.depends, df.buildlink3.mk) {
fields <- c('new_line', 'order', 'category', 'depends', 'buildlink3.mk')
lines <- mklines[! mklines$depends & ! mklines$buildlink3.mk, fields]
lines <- mklines[!mklines$depends & !mklines$buildlink3.mk, fields]
lines <- rbind(lines, df.conflicts, df.depends, df.buildlink3.mk)
lines <- lines[order(lines$order, lines$category, lines$new_line),]
lines <- lines[! adjacent.duplicates(lines$new_line),]
lines <- lines[!adjacent.duplicates(lines$new_line),]
lines$new_line
}
update.Makefile <- function(mklines, metadata)
{
update.Makefile <- function(mklines, metadata) {
DEPENDENCIES <- make.depends(metadata$Imports, metadata$Depends)
DEPENDS <- DEPENDENCIES[[1]]
BUILDLINK3.MK <- DEPENDENCIES[[2]]
@ -840,8 +767,7 @@ update.Makefile <- function(mklines, metadata)
write(lines, 'Makefile')
}
create.Makefile <- function(metadata)
{
create.Makefile <- function(metadata) {
if (arg.update && file.exists('Makefile.orig'))
update.Makefile(read_mklines('Makefile.orig'), metadata)
else
@ -853,25 +779,22 @@ create.DESCR <- function(metadata) {
write(descr, 'DESCR')
}
make.metadata <- function(description.filename)
{
make.metadata <- function(description.filename) {
fields <- c('Package', 'Version', 'Title', 'Description', 'License', 'Imports', 'Depends')
metadata <- as.list(read.dcf(description.filename, fields))
names(metadata) <- fields
metadata
}
main <- function()
{
main <- function() {
Sys.setlocale('LC_ALL', 'C')
error <- download.file(url=arg.rpkg_description_url,destfile='DESCRIPTION',quiet=arg.quiet_curl,method='curl')
if (error)
{
message('ERROR: Downloading the DESCRIPTION file for ',arg.rpkg,' failed;')
message(' perhaps the package no longer exists?')
quit(save='no',status=error)
}
error <- download.file(url = arg.rpkg_description_url, destfile = 'DESCRIPTION', quiet = arg.quiet_curl, method = 'curl')
if (error) {
message('ERROR: Downloading the DESCRIPTION file for ', arg.rpkg, ' failed;')
message(' perhaps the package no longer exists?')
quit(save = 'no', status = error)
}
metadata <- make.metadata('DESCRIPTION')
create.Makefile(metadata)

File diff suppressed because it is too large Load diff