Skip to content

Commit d8d0b3b

Browse files
committed
Add more dockerignore functions & components.
1 parent 418d7bc commit d8d0b3b

25 files changed

+1149
-0
lines changed

NAMESPACE

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,25 @@ export(dfi_stopsignal)
2323
export(dfi_user)
2424
export(dfi_volume)
2525
export(dfi_workdir)
26+
export(di_add)
27+
export(di_remove)
28+
export(di_replace)
29+
export(dk_template_ignore_common)
30+
export(dk_template_ignore_data)
31+
export(dk_template_ignore_editor)
32+
export(dk_template_ignore_git)
33+
export(dk_template_ignore_node)
34+
export(dk_template_ignore_os)
35+
export(dk_template_ignore_packrat)
36+
export(dk_template_ignore_python)
37+
export(dk_template_ignore_r)
38+
export(dk_template_ignore_raw_data)
39+
export(dk_template_ignore_renv)
2640
export(dockerfile)
2741
export(dockerignore)
2842
export(get_package_manager)
2943
export(has_instruction)
3044
export(is_dockerfile)
3145
export(is_dockerignore)
46+
export(read_dockerignore)
47+
export(write_dockerignore)

R/dockerignore-instructions.R

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#' Add patterns to a dockerignore object
2+
#'
3+
#' @param dockerignore A dockerignore object
4+
#' @param pattern Character vector of patterns to add
5+
#' @return Updated dockerignore object
6+
#' @export
7+
di_add <- function(dockerignore, pattern) {
8+
check_dockerignore(dockerignore)
9+
10+
# Handle vector input
11+
for (p in pattern) {
12+
# Add pattern if not already present
13+
if (!p %in% dockerignore$patterns) {
14+
dockerignore$patterns <- c(dockerignore$patterns, p)
15+
}
16+
}
17+
18+
dockerignore
19+
}
20+
21+
#' Remove patterns from a dockerignore object
22+
#'
23+
#' @param dockerignore A dockerignore object
24+
#' @param pattern Character vector of patterns to remove
25+
#' @return Updated dockerignore object
26+
#' @export
27+
di_remove <- function(dockerignore, pattern) {
28+
check_dockerignore(dockerignore)
29+
30+
# Remove patterns if present
31+
dockerignore$patterns <- dockerignore$patterns[!dockerignore$patterns %in% pattern]
32+
33+
dockerignore
34+
}
35+
36+
#' Replace patterns in a dockerignore object
37+
#'
38+
#' @param dockerignore A dockerignore object
39+
#' @param old_pattern Pattern(s) to replace
40+
#' @param new_pattern New pattern(s)
41+
#' @return Updated dockerignore object
42+
#' @export
43+
di_replace <- function(dockerignore, old_pattern, new_pattern) {
44+
check_dockerignore(dockerignore)
45+
46+
# Handle different input cases
47+
if (length(old_pattern) == 1 && length(new_pattern) == 1) {
48+
# Simple case: replace single pattern with single pattern
49+
idx <- which(dockerignore$patterns == old_pattern)
50+
if (length(idx) > 0) {
51+
dockerignore$patterns[idx] <- new_pattern
52+
}
53+
} else if (length(old_pattern) > 1 && length(new_pattern) == 1) {
54+
# Replace multiple patterns with a single pattern
55+
for (op in old_pattern) {
56+
idx <- which(dockerignore$patterns == op)
57+
if (length(idx) > 0) {
58+
dockerignore$patterns[idx] <- new_pattern
59+
}
60+
}
61+
} else if (length(old_pattern) == length(new_pattern)) {
62+
# Replace each old pattern with corresponding new pattern
63+
for (i in seq_along(old_pattern)) {
64+
idx <- which(dockerignore$patterns == old_pattern[i])
65+
if (length(idx) > 0) {
66+
dockerignore$patterns[idx] <- new_pattern[i]
67+
}
68+
}
69+
} else {
70+
cli::cli_abort("old_pattern and new_pattern must have the same length or new_pattern must be length 1")
71+
}
72+
73+
dockerignore
74+
}

R/dockerignore-io.R

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#' Read a .dockerignore file
2+
#'
3+
#' @param file Path to .dockerignore file
4+
#' @return A dockerignore object
5+
#' @export
6+
read_dockerignore <- function(file = ".dockerignore") {
7+
if (!file.exists(file)) {
8+
cli::cli_abort("File not found: {file}")
9+
}
10+
11+
# Read lines from file
12+
lines <- readLines(file)
13+
14+
# Filter out empty lines and comments
15+
lines <- lines[!grepl("^\\s*$", lines) & !grepl("^\\s*#", lines)]
16+
17+
# Create a new dockerignore object
18+
di <- dockerignore()
19+
di$patterns <- lines
20+
21+
di
22+
}
23+
24+
#' Write a dockerignore object to a file
25+
#'
26+
#' @param dockerignore A dockerignore object
27+
#' @param file Output file path (default: ".dockerignore")
28+
#' @return Invisible dockerignore object
29+
#' @export
30+
write_dockerignore <- function(dockerignore, file = ".dockerignore") {
31+
check_dockerignore(dockerignore)
32+
33+
# Write to file
34+
writeLines(dockerignore$patterns, file)
35+
36+
cli::cli_alert_success(".dockerignore written to {file}")
37+
invisible(dockerignore)
38+
}

0 commit comments

Comments
 (0)