-
-
Save rmflight/8863882 to your computer and use it in GitHub Desktop.
#!/path/2/Rscript | |
# License: CC0 (just be nice and point others to where you got this) | |
# Author: Robert M Flight <[email protected]>, github.com/rmflight | |
# | |
# This is a post-commit hook that after a successful commit subsequently increments the package version in DESCRIPTION | |
# and commits that. Analogous to the pre-commit at https://gist.github.com/rmflight/8863882, but useful if you only have | |
# good reasons for not doing it on the pre-commit. | |
# | |
# To install it, simply copy this into the ".git/hooks/post-commit" file of your git repo, change /path/2/Rscript, and make | |
# it executable. Note that /path/2/Rscript is the same as your /path/2/R/bin/R, or may be in /usr/bin/Rscript depending on | |
# your installation. This has been tested on both Linux and Windows installations. | |
# | |
# In instances where you do NOT want the version incremented, add the environment variable doIncrement=FALSE to your git | |
# call. eg "doIncrement=FALSE git commit -m "commit message"". | |
# This is useful when you change the major version number for example. | |
doIncrement <- TRUE # default | |
# get the environment variable and modify if necessary | |
tmpEnv <- as.logical(Sys.getenv("doIncrement")) | |
if (!is.na(tmpEnv)){ | |
doIncrement <- tmpEnv | |
} | |
if (doIncrement){ | |
currDir <- getwd() # this should be the top level directory of the git repo | |
currDCF <- read.dcf("DESCRIPTION") | |
currVersion <- currDCF[1,"Version"] | |
splitVersion <- strsplit(currVersion, ".", fixed=TRUE)[[1]] | |
nVer <- length(splitVersion) | |
currEndVersion <- as.integer(splitVersion[nVer]) | |
newEndVersion <- as.character(currEndVersion + 1) | |
splitVersion[nVer] <- newEndVersion | |
newVersion <- paste(splitVersion, collapse=".") | |
currDCF[1,"Version"] <- newVersion | |
currDCF[1, "Date"] <- strftime(as.POSIXlt(Sys.Date()), "%Y-%m-%d") | |
write.dcf(currDCF, "DESCRIPTION") | |
system("git add DESCRIPTION") | |
system('doIncrement=FALSE git commit -m "increment package version"') # doIncrement=FALSE is required, otherwise we end up in an infinite loop | |
cat("Incremented package version and committed!\n") | |
} |
#!/path/2/Rscript | |
# License: CC0 (just be nice and point others to where you got this) | |
# Author: Robert M Flight <[email protected]>, github.com/rmflight | |
# | |
# This is a pre-commit hook that checks that there are files to be committed, and if there are, increments the package version | |
# in the DESCRIPTION file. | |
# | |
# To install it, simply copy this into the ".git/hooks/pre-commit" file of your git repo, change /path/2/Rscript, and make it | |
# executable. Note that /path/2/Rscript is the same as your /path/2/R/bin/R, or may be in /usr/bin/Rscript depending on your | |
# installation. This has been tested on both Linux and Windows installations. | |
# | |
# In instances where you do NOT want the version incremented, add the environment variable doIncrement=FALSE to your git call. | |
# eg "doIncrement=FALSE git commit -m "commit message"". | |
# This is useful when you change the major version number for example. | |
doIncrement <- TRUE # default | |
# get the environment variable and modify if necessary | |
tmpEnv <- as.logical(Sys.getenv("doIncrement")) | |
if (!is.na(tmpEnv)){ | |
doIncrement <- tmpEnv | |
} | |
# check that there are files that will be committed, don't want to increment version if there won't be a commit | |
fileDiff <- system("git diff HEAD --name-only", intern=TRUE) | |
if ((length(fileDiff) > 0) && doIncrement){ | |
currDir <- getwd() # this should be the top level directory of the git repo | |
currDCF <- read.dcf("DESCRIPTION") | |
currVersion <- currDCF[1,"Version"] | |
splitVersion <- strsplit(currVersion, ".", fixed=TRUE)[[1]] | |
nVer <- length(splitVersion) | |
currEndVersion <- as.integer(splitVersion[nVer]) | |
newEndVersion <- as.character(currEndVersion + 1) | |
splitVersion[nVer] <- newEndVersion | |
newVersion <- paste(splitVersion, collapse=".") | |
currDCF[1,"Version"] <- newVersion | |
currDCF[1, "Date"] <- strftime(as.POSIXlt(Sys.Date()), "%Y-%m-%d") | |
write.dcf(currDCF, "DESCRIPTION") | |
system("git add DESCRIPTION") | |
cat("Incremented package version and added to commit!\n") | |
} |
(sorry maybe dumb question) - Can anyone explain what is the point of currDir <- getwd()
command? I don't see currDir
variable used anywhere after that
aushev: You seem to be correct that currDir
isn't used anywhere. I'm thinking that it may be vestigial. Perhaps the read.dcf
or write.dcf
commands used to contain full pathnames, created by file.path(currDir, 'DESCRIPTION')
? Or it could be that there was once a check to make sure that the current working directory was a package root? In any case, it shouldn't be necessary and can likely be safely removed.
I know it's been six years since the last activity on these, but I know I'm still using these regularly. I was recently motivated to improve them a bit. To make it easier to track actual changes to the hooks, I've created a proper GH repository for them here: https://github.com/rmflight/r_git_hooks
I've incorporated the idea of only changing the date if present, as well as @gadenbuie changes in their fork for not modifying the version if it's modified and staged.
Thank you for this! In order to get this working when the package directory is not the root, I changed as follows: