Revert "Replace zero-length array decls with []."
[git/git.git] / git-revert-script
CommitLineData
045f82cb
JH
1#!/bin/sh
2. git-sh-setup-script || die "Not a git archive"
3
4# We want a clean tree and clean index to be able to revert.
5status=$(git status)
6case "$status" in
7'nothing to commit') ;;
8*)
9 echo "$status"
10 die "Your working tree is dirty; cannot revert a previous patch." ;;
11esac
12
ff84d327 13rev=$(git-rev-parse --verify "$@") &&
045f82cb
JH
14commit=$(git-rev-parse --verify "$rev^0") || exit
15if git-diff-tree -R -M -p $commit | git-apply --index &&
16 msg=$(git-rev-list --pretty=oneline --max-count=1 $commit)
17then
18 {
19 echo "$msg" | sed -e '
20 s/^[^ ]* /Revert "/
21 s/$/"/'
22 echo
23 echo "This reverts $commit commit."
24 test "$rev" = "$commit" ||
25 echo "(original 'git revert' arguments: $@)"
26 } | git commit -F -
27else
28 # Now why did it fail?
29 parents=`git-cat-file commit "$commit" 2>/dev/null |
30 sed -ne '/^$/q;/^parent /p' |
31 wc -l`
32 case $parents in
33 0) die "Cannot revert the root commit nor non commit-ish." ;;
34 1) die "The patch does not apply." ;;
35 *) die "Cannot revert a merge commit." ;;
36 esac
37fi