-
Notifications
You must be signed in to change notification settings - Fork 19
/
prompt.R
106 lines (101 loc) · 3.01 KB
/
prompt.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
.prompt_user_for_change_description <-
function(interact = getOption(
"DataPackageR_interact",
interactive()
)) {
if (interactive()&interact) {
cat(crayon::cyan("Enter a text description of the changes for the NEWS.md file.\n")) #nocov
}else{
cat(crayon::cyan("Non-interactive NEWS.md file update.\n"))
}
change_description <-
ifelse(
interactive() & interact,
readline(prompt = "+ "),
"Package built in non-interactive mode"
)
return(change_description)
}
.update_news_md <- function(version = "Version Not Provided",
interact = getOption(
"DataPackageR_interact",
interactive()
)) {
news_file <- .newsfile()
change_description <-
.prompt_user_for_change_description(interact = interact)
news_con <- file(news_file, open = "r+")
news_file_data <- readLines(news_con)
writeLines(
text = paste0("DataVersion: ", version),
con = news_con,
sep = "\n"
)
writeLines("=======================",
con = news_con,
sep = "\n"
)
writeLines(c(change_description, ""),
con = news_con,
sep = "\n"
)
writeLines(news_file_data,
con = news_con,
sep = "\n"
)
flush(news_con)
close(news_con)
}
.newsfile <- function() {
newsfile <- file.path(usethis::proj_get(), "NEWS.md")
if (!file.exists(newsfile)) {
.multilog_trace("NEWS.md file not found, creating!")
con <- file(newsfile, open = "w+", blocking = FALSE)
} else {
.multilog_trace("NEWS.md file found, updating!")
con <- file(newsfile, open = "r+", blocking = FALSE)
}
close(con)
return(newsfile)
}
.update_news_changed_objects <- function(objectlist) {
news_file <- .newsfile()
news_con <- file(news_file, open = "r+")
news_file_data <- readLines(news_con)
header_1 <- grep("DataVersion", news_file_data)[1]
header_2 <- grep("DataVersion", news_file_data)[2]
ul_1 <- grep("=====", news_file_data)[1]
ul_2 <- grep("=====", news_file_data)[2]
assert_that(header_1 == ul_1 - 1)
assert_that(header_2 == ul_2 - 1)
header <- news_file_data[header_1:ul_1]
news_file_data <- news_file_data[-c(header_1:ul_1)]
#write header
writeLines(
text = header,
con = news_con,
sep = "\n"
)
#write changes
added <- objectlist[["added"]]
deleted <- objectlist[["deleted"]]
changed <- objectlist[["changed"]]
.write_changes <- function(string, news_con, what = NULL) {
if (length(string) != 0) {
cat(crayon::cyan(paste0("* ",what,": ",string,"\n")))
writeLines(text = paste0("* ",what,": ", string),
con = news_con,
sep = "\n")
}
}
.write_changes(added, news_con, "Added")
.write_changes(deleted, news_con, "Deleted")
.write_changes(changed, news_con, "Changed")
#write the rest of the data
writeLines(news_file_data,
con = news_con,
sep = "\n"
)
flush(news_con)
close(news_con)
}