Git Mailing List Archive mirror
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Paul Jolly <paul@myitcv.io>, git@vger.kernel.org
Subject: Re: Automatically re-running commands during an interactive rebase or post commit
Date: Mon, 29 May 2023 18:53:25 +0100	[thread overview]
Message-ID: <198eea19-fc40-de0c-8854-3cdc94925f32@gmail.com> (raw)
In-Reply-To: <CACoUkn6F_=JR5SYBWL2sVDxDVAZbxcV5Ruif6wLba-_q_QNiZg@mail.gmail.com>

Hi Paul

On 29/05/2023 17:02, Paul Jolly wrote:
>> 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
done


You 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

> 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.


  reply	other threads:[~2023-05-29 17:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-29 13:38 Automatically re-running commands during an interactive rebase or post commit Paul Jolly
2023-05-29 13:41 ` rsbecker
2023-05-29 14:01   ` Paul Jolly
2023-05-29 16:02 ` Paul Jolly
2023-05-29 17:53   ` Phillip Wood [this message]
2023-05-29 19:08     ` Paul Jolly
2023-05-29 19:48       ` Phillip Wood
2023-05-31  4:14         ` Elijah Newren
2023-06-02  9:57           ` Phillip Wood
2023-06-08  5:11           ` Paul Jolly
2023-05-30  7:22 ` Son Luong Ngoc
2023-05-30  9:44 ` Oswald Buddenhagen
2023-05-30 10:27   ` Paul Jolly

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=198eea19-fc40-de0c-8854-3cdc94925f32@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=paul@myitcv.io \
    --cc=phillip.wood@dunelm.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).