Re: Automatically re-running commands during an interactive rebase or post commit
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- May 29, 2023, 17:53 UTC
- Message-ID
- <198eea19-fc40-de0c-8854-3cdc94925f32@gmail.com>
- In-Reply-To
- <CACoUkn6F_=JR5SYBWL2sVDxDVAZbxcV5Ruif6wLba-_q_QNiZg@mail.gmail.com>
Hi Paul
On 29/05/2023 17:02, Paul Jolly wrote:
Show 12 quoted lines
>> I would appreciate some advice on the best way to solve the following problem. > > Replying to self with some updates based on further investigations. > > The lack of pre-commit like hook during a rebase is documented in a > few places (https://adamj.eu/tech/2022/11/07/pre-commit-run-hooks-rebase/ > to list one). The -x flag provides a means by which I can > retrospectively amend the "previous" commit if that is not clean. Not > ideal, but a solution of sorts. > > However, the main problem appears to be the lack of "hook" to do > something when git rebase detects conflicts.
I think you could get around this by using a script that wraps "git rebase". Something like
while true
do
if test -d "$(git rev-parse --git-path rebase-merge)"
then
git rebase --continue
else
git rebase "$@"
fi
if test $? -eq 0
then
exit 0
fi
# Handle conflicts here if automatic-conflict-resolution-failed
then
exit 1
fi
doneYou can get a list of the files that have conflicts with
git diff-index --name-only --diff-filter=U HEAD --
or by parsing the output of
git status --porcelain
I did wonder if you could use a custom merge driver (see man gitattributes) for the file with the checksums but that would be run before all the other files have been merged. Another alternative might be to use a custom merge strategy that runs "git merge-ort" and then cleans up the conflicts in the checksum file. You can specify a custom strategy by naming your script "git-merge-foo" and passing "-s foo" to git rebase.
Best Wishes
Phillip
Show 10 quoted lines
> Ideally, I would like to have a hook be called when git rebase detects > a conflict, a hook in which I could attempt to "recover" the > situation. If that hook failed to fully recover the situation, git > rebase would fail as it currently does. Otherwise, it would be able to > continue as normal. > > My use of git is pretty basic, so part of me feels like I can't be the > first person to run into this problem! > > As ever, any pointers are greatly appreciated.