I have by accident done "git push" when I intended to write "guilt push" a couple of times. If there are guilt patches applied when I do this the result is that (part of) my half-finished patch series is pushed to the master branch. That is of course not good.
TopGit avoids this issue since I'm on a separate branch when patches are applied.
Mercurial Queues prevents this. If I try to do "hg push" with a patch applied, I get this error:
> pushing to /home/cederp/pushstop/hgmaster > abort: source has mq patches applied
I'd like to add something similar to Guilt, to avoid making this mistake ever again. (It is quite embarrassing to clean up after you push a couple of half-baked patches.) But I don't know how the feature should be designed. Some ideas:
- Add pre-push hooks to Git, like the one proposed back in 2008 in
<http://thread.gmane.org/gmane.comp.version-control.git/92900>.
Have Guilt automatically install a pre-push hook that produces an
error message if Guilt patches are applied. - Have Guilt create a status file (maybe .git/PUSH_FORBIDDEN)
whenever patches are applied, and remove the file when it pops all
patches. The file would contain the following text: "Refusing to
push while guilt patches are applied. Hint: see 'guilt -h
commit'." Have "git push" check for that file, and print its
contents if it exists. (Or should "git push" check for any file
matching the glob pattern ".git/PUSH_FORBIDDEN.*" and Guilt create
.git/PUSH_FORBIDDEN.Guilt so that this mechanism is more
extensible?) - Have Guilt remove all remotes when patches are pushed, and restore
them when all patches are popped. (I don't like this idea; there
are too many things that could go wrong. But it would be possible
to implement without doing any changes to Git itself.)I hope the Git community can come up with a better design for this feature.
/ceder