Skip to content

Commit

Permalink
provide basename2 for to long strings
Browse files Browse the repository at this point in the history
  • Loading branch information
JanMarvin committed Aug 23, 2023
1 parent 84e518c commit 92a2429
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
15 changes: 15 additions & 0 deletions R/helper-functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -1336,3 +1336,18 @@ solve_merge <- function(have, want) {

vapply(pieces, dataframe_to_dims, NA_character_)
}

#' get the basename
#' on windows [basename()] only handles strings up to 255 characters, but we
#' can have longer strings when loading file systems
#' @param path a character string
#' @keywords internal
#' @noRd
basename2 <- function(path) {
is_to_long <- vapply(path, to_long, NA)
if (any(is_to_long)) {
return(gsub(".*[\\/]", "", path))
} else {
return(basename(path))
}
}
4 changes: 2 additions & 2 deletions R/wb_load.R
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,7 @@ wb_load <- function(
# we do not ship this binary blob, therefore spreadsheet software may
# stumble over this non existent reference. In the future we might want
# to check if the references are valid pre file saving.
sel_row <- !grepl("printerSettings", basename(xml_relship$Target))
sel_row <- !grepl("printerSettings", basename2(xml_relship$Target))
sel_col <- c("Id", "Type", "Target", "TargetMode")
# return as xml
xml <- df_to_xml("Relationship", xml_relship[sel_row, sel_col])
Expand All @@ -859,7 +859,7 @@ wb_load <- function(

if (ncol(wb_rels)) {
# since target can be any hyperlink, we have to expect various things here like uint64
wb_rels$tid <- suppressWarnings(as.integer(gsub("\\D+", "", basename(wb_rels$Target))))
wb_rels$tid <- suppressWarnings(as.integer(gsub("\\D+", "", basename2(wb_rels$Target))))
wb_rels$typ <- basename(wb_rels$Type)

cmmts <- wb_rels$tid[wb_rels$typ == "comments"]
Expand Down
17 changes: 17 additions & 0 deletions tests/testthat/test-helper-functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -218,3 +218,20 @@ test_that("validate_colors() works", {
expect_equal(exp, got)

})

test_that("basename2() works", {

long_path <- paste0(
paste0(rep("foldername/", 40), collapse = ""),
paste0(rep("filename", 40), collapse = ""),
".txt"
)

if (to_long(long_path))
expect_error(basename(long_path))

exp <- "filenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilenamefilename.txt"
got <- basename2(long_path)
expect_equal(exp, got)

})

0 comments on commit 92a2429

Please sign in to comment.