Type: | Package |
Title: | Find Pattern in Files of All Branches of a 'git' Repository |
Version: | 0.1.1 |
Description: | Creates a HTML widget which displays the results of searching for a pattern in files in a given 'git' repository, including all its branches. The results can also be returned in a dataframe. |
License: | GPL-3 |
Encoding: | UTF-8 |
SystemRequirements: | grep, git |
Imports: | stringr, crayon, htmlwidgets |
Suggests: | shiny, R.utils |
URL: | https://github.com/stla/findInGit |
BugReports: | https://github.com/stla/findInGit/issues |
RoxygenNote: | 7.1.1 |
NeedsCompilation: | no |
Packaged: | 2021-07-28 09:58:37 UTC; SDL96354 |
Author: | Stéphane Laurent [aut, cre], Rob Burns [cph] ('ansi-to-html' library) |
Maintainer: | Stéphane Laurent <laurent_step@outlook.fr> |
Repository: | CRAN |
Date/Publication: | 2021-07-28 10:10:06 UTC |
Output of 'findInGit' as a dataframe
Description
Returns the results of findInGit
in a dataframe, when the
option output = "viewer+dataframe"
is used. See the example in
findInGit
.
Usage
FIG2dataframe(fig)
Arguments
fig |
the output of |
Value
The results of findInGit
in a dataframe.
Find pattern in files of a 'git' repository
Description
Find a pattern in the files with a given extension, in all branches of a 'git' repository.
Usage
findInGit(
ext,
pattern,
wholeWord = FALSE,
ignoreCase = FALSE,
perl = FALSE,
excludePattern = NULL,
excludeFoldersPattern = NULL,
root = ".",
output = "viewer"
)
Arguments
ext |
file extension, e.g. |
pattern |
pattern to search for, a regular expression, e.g.
|
wholeWord |
logical, whether to match the whole pattern |
ignoreCase |
logical, whether to ignore the case |
perl |
logical, whether |
excludePattern |
a pattern; exclude from search the files and folders which match this pattern |
excludeFoldersPattern |
a pattern; exclude from search the folders which match this pattern |
root |
path to the root directory to search from |
output |
one of |
Value
A dataframe if output="dataframe"
, otherwise a
htmlwidget
object.
Examples
findGit <- Sys.which("git") != ""
if(findGit){
library(findInGit)
library(R.utils) # to use the `copyDirectory` function
folder1 <- system.file("htmlwidgets", package = "findInGit")
folder2 <- system.file("htmlwidgets", "lib", package = "findInGit")
tmpDir <- paste0(tempdir(), "_gitrepo")
dir.create(tmpDir)
# set tmpDir as the working directory
cd <- setwd(tmpDir)
# copy folder1 in tmpDir
copyDirectory(folder1, recursive = FALSE)
# initialize git repo
system("git init")
# add all files to git
system("git add -A")
# commit files
system('git commit -m "mycommit1"')
# create a new branch
system("git checkout -b newbranch")
# copy folder2 in tmpDir, under the new branch
copyDirectory(folder2, recursive = FALSE)
# add all files to git
system("git add -A")
# commit files
system('git commit -m "mycommit2"')
# now we can try `findInGit`
findInGit(ext = "js", pattern = "ansi")
# get results in a dataframe:
findInGit(ext = "js", pattern = "ansi", output = "dataframe")
# one can also get the widget and the dataframe:
fig <- findInGit(ext = "css", pattern = "color", output = "viewer+dataframe")
fig
FIG2dataframe(fig)
# return to initial current directory
setwd(cd)
# delete tmpDir
unlink(tmpDir, recursive = TRUE, force = TRUE)
}
Shiny bindings for findInGit
Description
Output and render functions for using findInGit
within Shiny
applications and interactive Rmd documents.
Usage
FIGOutput(outputId, width = "100%", height = "400px")
renderFIG(expr, env = parent.frame(), quoted = FALSE)
Arguments
outputId |
output variable to read from |
width , height |
a valid CSS unit (like |
expr |
an expression that generates a ' |
env |
the environment in which to evaluate |
quoted |
logical, whether |
Value
FIGOutput
returns an output element that can be included in a
Shiny UI definition, and renderFIG
returns a
shiny.render.function
object that can be included in a Shiny
server definition.
Examples
findGit <- Sys.which("git") != ""
if(findGit){
library(findInGit)
library(shiny)
# First, we create a temporary git repo
library(R.utils) # to use the `copyDirectory` function
folder1 <- system.file("htmlwidgets", package = "findInGit")
folder2 <- system.file("htmlwidgets", "lib", package = "findInGit")
tmpDir <- paste0(tempdir(), "_gitrepo")
dir.create(tmpDir)
# set tmpDir as the working directory
cd <- setwd(tmpDir)
# copy folder1 in tmpDir
copyDirectory(folder1, recursive = FALSE)
# initialize git repo
system("git init")
# add all files to git
system("git add -A")
# commit files
system('git commit -m "mycommit1"')
# create a new branch
system("git checkout -b newbranch")
# copy folder2 in tmpDir, under the new branch
copyDirectory(folder2, recursive = FALSE)
# add all files to git
system("git add -A")
# commit files
system('git commit -m "mycommit2"')
# Now let's play with Shiny
onKeyDown <- HTML(
'function onKeyDown(event) {',
' var key = event.which || event.keyCode;',
' if(key === 13) {',
' Shiny.setInputValue(',
' "pattern", event.target.value, {priority: "event"}',
' );',
' }',
'}'
)
ui <- fluidPage(
tags$head(tags$script(onKeyDown)),
br(),
sidebarLayout(
sidebarPanel(
selectInput(
"ext", "Extension",
choices = c("js", "css")
),
tags$div(
class = "form-group shiny-input-container",
tags$label(
class = "control-label",
"Pattern"
),
tags$input(
type = "text",
class = "form-control",
onkeydown = "onKeyDown(event);",
placeholder = "Press Enter when ready"
)
),
checkboxInput(
"wholeWord", "Whole word"
),
checkboxInput(
"ignoreCase", "Ignore case"
)
),
mainPanel(
FIGOutput("results")
)
)
)
Clean <- function(){
setwd(cd)
unlink(tmpDir, recursive = TRUE, force = TRUE)
}
server <- function(input, output){
onSessionEnded(Clean)
output[["results"]] <- renderFIG({
req(input[["pattern"]])
findInGit(
ext = isolate(input[["ext"]]),
pattern = input[["pattern"]],
wholeWord = isolate(input[["wholeWord"]]),
ignoreCase = isolate(input[["ignoreCase"]])
)
})
}
if(interactive()){
shinyApp(ui, server)
}else{
Clean()
}
}