1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #!/bin/sh
- # Give this a commit-ID specification. It will edit the associated comment.
- # Usual caveats apply; the edited one and all commits after will change IDs,
- # and pushing them to a repo with the old commits will wreak havoc.
- # Note also that this cavalierly overwrites refs/original.
- #
- # This script by Eric S. Raymond, March 2010, all rites perverted. It's based
- # on an idea by thiago from #git, but debugged and with a safety check.
- # It contains porcelain and porcelain byproducts.
- topdir=`git rev-parse --show-cdup`
- test -n "$topdir" && cd "$topdir"
- my_commit=`git rev-parse $1` || exit $?
- # Run a safety check before edits that could hose remotes.
- if test -n "`git branch -r --contains $mycommit`"
- then
- echo -n "Commit has been pushed. Really edit? "
- read yn
- if test "$yn" != 'y'
- then
- exit 0
- fi
- fi
- my_file=COMMIT_EDITMSG
- test -d .git && myfile=.git/COMMIT_EDITMSG
- # This effort to invoke the user's normal editor fails.
- # the problem is that anything the editor writes to stdout on the
- # controlling terminal becomes part of the commit message. So
- # the editor needs to actually run inside another window.
- #test -z "$GIT_EDITOR" && GIT_EDITOR=$EDITOR
- #test -z "$GIT_EDITOR" && GIT_EDITOR=vi
- #my_editor=$GIT_EDITOR
- # xterm -e vi should also work.
- my_editor=emacsclient
- export my_file my_commit my_editor
- exec git filter-branch -f --tag-name-filter cat --msg-filter '
- if test "$GIT_COMMIT" = "$my_commit"; then
- cat > $my_file;
- $my_editor $my_file >/dev/null;
- cat $my_file
- else
- cat
- fi' "$1~.."
- # End
|