Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine If Any File Changed In Directory For Latest Git Commit

Tags:

git

githooks

I'm writing a post-commit hook for git. I would like to know if the latest commit changed any of the files in a particular directory. If there were any changes I can then proceed and call some expensive code, otherwise I can just skip it.

So, far I'm getting the short hash like so:

# get last commit hash prepended with @ (i.e. @8a323d0)
function parse_git_hash() {
  git rev-parse --short HEAD 2> /dev/null | sed "s/\(.*\)/@\1/"
}

Now, I need to determine if there were any changes to the specified directory. But I'm not sure how to go about that. I've looked at and played with git-log and git-show but without success so far.

So, I need to do something like this.

if [directory-changed()] {
  echo "start expensive operation"
}

This actually gets me part way there: Actually it grabs the last commit not the one specified.

git log  -U a79851b -1 my/directory/path

Thanks in advance.

like image 559
Jon49 Avatar asked Jul 12 '17 20:07

Jon49


1 Answers

You can get the added, modified, deleted and renamed files in the latest commit with:

git diff --name-only --diff-filter=AMDR --cached @~..@

To get the changes affecting a specific directory, filter the output using grep. For example:

changes() {
  git diff --name-only --diff-filter=AMDR --cached @~..@
}

if changes | grep -q dirname {
  echo "start expensive operation"
}
like image 114
janos Avatar answered Sep 21 '22 09:09

janos