>-----Original Message----- On Monday, May 29, 2023 9:39 AM, Paul Jolly wrote: >I would appreciate some advice on the best way to solve the following problem. > >As part of my project, I have a code generation script that sha256 hashes a number of >files to another file. This produces a deterministic "has this part of the project >changed" indicator via the code generated file's content, that I then use in various >cache invalidation steps. > >This means, however, that I need to re-run that code generation script as part of each >commit in order to ensure that the code generated hash file is current (I have a step >in CI that detects if it is not, which re-runs the code generation script to then see if >the commit is "clean"). > >As part of my development setup I do a lot of interactive rebasing to edit earlier >commits in a branch (these "stacks" of changes are reviewed via Gerrit, which >understands a relation chain of changes). >Via this workflow, I often do a git rebase and edit an earlier commit in such a way >that I need to re-run the code generation script. > >The challenge is that any commit in such a "stack" of commits might need me to re- >run the code generation script. But I clearly don't want to do this manually! > >What I'm looking for is a way to automatically re-run this code generation script >when I commit changes, or perform a rebase-edit step etc. > >I've tried to experiment with how I might do this using git commit hooks. But so far, >my git foo is failing me. It mainly fails because when doing an edit of an earlier >commit via an interactive rebase, later changes might well conflict (in the generated >file) with the results of the code generator having been re-run on the edited commit. >At this point, my git rebase --continue stops until I have fixed the conflict. But in >almost all situations, the conflict comes in the generated hash file. Which I fix by >simply re-running the code generation script (I could optionally fix it by doing a git >checkout --theirs, and then re-running the code generation script). > >This all feels tantalisingly close to being a perfect workflow! But I can't quite figure >out how to make the git hooks "work" in such a way that doesn't require any >intervention from me (except in those situations where there is a conflict during the >rebase that is _not_ in the code generated file and so does require my intervention). > >The code generation step is incredibly fast if there is nothing to do, and is quite fast >even when there is something to do (in any case it can't avoid doing this work). > >Please can someone help nudge me in the right direction? I wonder whether setting up a clean/smudge filter might help. You might want to look into a clean filter that runs your code generator. --Randall