|
7 | 7 | #' @param desc_file When \code{owner} or \code{repo} are NULL, |
8 | 8 | #' these arguments are inferred from the \emph{DESCRIPTION} file. |
9 | 9 | #' @inheritParams rworkflows::get_description |
| 10 | +#' @inheritDotParams rworkflows::get_description |
10 | 11 | #' @inheritParams github_files |
11 | 12 | #' @inheritParams description_authors |
12 | 13 | #' @returns A named list or \link[data.table]{data.table}. |
|
15 | 16 | #' @importFrom rworkflows get_description |
16 | 17 | #' @importFrom data.table as.data.table |
17 | 18 | #' @examples |
18 | | -#' res <- description_extract(ref="RajLabMSSM/echolocatoR") |
| 19 | +#' res <- description_extract(refs="RajLabMSSM/echolocatoR") |
19 | 20 | description_extract <- function(desc_file = NULL, |
20 | | - ref = NULL, |
| 21 | + refs = NULL, |
21 | 22 | fields = c("owner", |
22 | 23 | "repo", |
23 | 24 | "authors"), |
24 | 25 | names_only = TRUE, |
25 | 26 | add_html = FALSE, |
26 | 27 | as_datatable = FALSE, |
27 | | - verbose = TRUE){ |
| 28 | + nThread = 1, |
| 29 | + verbose = TRUE, |
| 30 | + ...){ |
28 | 31 |
|
29 | | - # devoptera::args2vars(description_extract) |
30 | | - #### Find or read DESCRIPTION file #### |
31 | | - if(is.null(desc_file)){ |
32 | | - desc_file <- rworkflows::get_description(ref = ref, |
33 | | - path = desc_file) |
34 | | - } |
35 | | - force(desc_file) |
36 | | - all_fields <- unique(c("owner","repo","authors","github_url", |
37 | | - desc_file$fields())) |
38 | | - if(is.null(desc_file)) { |
39 | | - stopper("desc_file is required for description_extract") |
40 | | - } |
41 | | - if(is.null(fields)) { |
42 | | - fields <- all_fields |
43 | | - } |
44 | | - fields <- unique(fields) |
45 | | - fields <- fields[fields %in% all_fields] |
46 | | - #### Check package name #### |
47 | | - if(!desc_file$has_fields("Package")){ |
48 | | - messager("WARNING:","Package field is missing from DECRIPTION.") |
49 | | - } else { |
50 | | - pkg <- desc_file$get_field("Package") |
| 32 | + # devoptera::args2vars(description_extract) |
| 33 | + |
| 34 | + refs <- check_pkgs(pkgs = refs) |
| 35 | + if(length(refs)==0 && is.null(desc_file)){ |
| 36 | + messager("Must supply either refs or desc_file.", |
| 37 | + "Returning NULL.",v=verbose) |
| 38 | + return(NULL) |
51 | 39 | } |
52 | | - |
53 | | - #### Extract info #### |
54 | | - messager("Extracting",length(fields),"DESCRIPTION field(s)", |
55 | | - "for the package:",pkg,v=verbose) |
56 | | - res <- lapply(stats::setNames(fields, |
57 | | - fields), |
58 | | - function(f){ |
59 | | - # messager("Inferring",f,"from DESCRIPTION file.",v=verbose) |
60 | | - #### Check fields #### |
61 | | - if(f %in% author_fields()) { |
62 | | - authors <- description_authors(desc_file = desc_file, |
63 | | - add_html = add_html, |
64 | | - names_only = names_only) |
65 | | - return(authors) |
66 | | - } else if(desc_file$has_fields(f)){ |
67 | | - return(desc_file$get_field(f)) |
68 | | - } else if(f=="github_url"){ |
69 | | - gh_url <- get_github_url(desc_file = desc_file) |
70 | | - return(gh_url) |
71 | | - } else if(f=="owner"){ |
72 | | - gh_url <- get_github_url(desc_file = desc_file) |
73 | | - if(is.null(gh_url)) { |
74 | | - return(NULL) |
75 | | - } else { |
76 | | - return( |
77 | | - strsplit(gsub("https://github.com/","",gh_url),"/")[[1]][1] |
78 | | - ) |
79 | | - } |
80 | | - } else if(f=="repo"){ |
81 | | - gh_url <- get_github_url(desc_file = desc_file) |
82 | | - if(is.null(gh_url)) { |
83 | | - return(NULL) |
84 | | - } else { |
85 | | - return( |
86 | | - strsplit(gsub("https://github.com/","",gh_url),"/")[[1]][2] |
87 | | - ) |
88 | | - } |
89 | | - } |
90 | | - }) |
91 | | - #### Return #### |
92 | | - if(isTRUE(as_datatable)){ |
93 | | - return(data.table::as.data.table(res)) |
| 40 | + dl <- rworkflows::get_description(refs = refs$package, |
| 41 | + paths = desc_file, |
| 42 | + verbose = verbose, |
| 43 | + ...) |
| 44 | + meta_desc <- lapply(dl, function(desc_file){ |
| 45 | + description_extract_i(desc_file= desc_file, |
| 46 | + fields = fields, |
| 47 | + as_datatable = TRUE, |
| 48 | + verbose = FALSE) |
| 49 | + }) |> |
| 50 | + data.table::rbindlist(fill = TRUE, use.names = TRUE, idcol = "package") |
| 51 | + if(nrow(meta_desc)==0){ |
| 52 | + messager("WARNING: No metadata retrieved from any DESCRIPTION files.", |
| 53 | + v=verbose) |
94 | 54 | } else { |
95 | | - return(res) |
96 | | - } |
| 55 | + if("repo" %in% names(meta_desc)) data.table::setkeyv(meta_desc,"repo") |
| 56 | + } |
| 57 | + return(meta_desc) |
| 58 | + |
97 | 59 | } |
0 commit comments