On Thu, Aug 25, 2022 at 10:52:16AM +0200, Arturo Seijas Fernandez wrote: > The command "git config --unset [option]" is not idempotent. It is > currently returning a success code when the property had already been > set and a 5 error code otherwise. > > I would expect the error code to be set according to the current state > when compared to the target state, regardless of the previous state of > the option. You can get what you want in the shell with: # passes "set -e", but could also be used in an "if" git config --unset ... || test $? = 5 That's obviously not as convenient. The flip side is that returning 0 would make it very hard for callers to tell if they removed something (if they care). If we were designing the tool now, I could definitely see an argument for returning 0 in this case. But we have over a decade with the "5" exit code documented for a plumbing tool. We won't change it now without a good reason and without a deprecation schedule, and IMHO this doesn't rise to that level. -Peff