Hi.
We wrote a post-receive hook that alerts users (via email) when specific paths are modified by their peers. The implementation is pretty simple: whenever a new commit is made, we ask git for the full list of files modified by that commit:
git diff --name-only <COMMIT HASH>^!
This works well for regular commits, but breaks for merge commits.
For example, suppose we have the following basic merge scenario:
B / \ A D \ / C
Root A was branched to B and C, then merged into commit D.
Problem is, the diff for D^! will include all the changes introduced by C.
One obvious solution is to simply ignore merge commits, by parsing `git cat-file commit D` and discarding all commits with parent count > 1. But merge commits may actually contain legitimate modified files if there were any conflict resolutions.
So what's the best solution for this problem, oh wise Git wizards?
Thanks, D.