stacked-git / stgit

Stacked Git
https://stacked-git.github.io/
GNU General Public License v2.0
535 stars 61 forks source link

fix: stg import --reject should create empty commit #477

Closed dtor closed 2 months ago

dtor commented 3 months ago

When trying to import a patch that does not apply cleanly, and using --reject option, stg should apply what it can, leave the rest in .rej files, and create an empty commit. The work to apply the patch is outsourced to "git apply --reject" which exits with status code 1 if patch is applied partially and it is treated as error by stg import.

Fix the issue by not treating return code of 1 from "git apply" as an error when "--reject" option is specified, but rather saving its output, printing it for the user, and continuing with the rest of the import logic. Exit with CONFLICT_ERROR rather than COMMAND_ERROR when the patch does not import/apply cleanly.

"stg fold" reuses much of the same code so it has to be adjusted in the similar fashion. It will also exit with CONFLICT_ERROR when a patch does not apply cleanly.

Also add a test case and fix up documentation for "stg import" and adjust test case for "stg fold".

Closes: #471

jpgrayson commented 2 months ago

Thank you for this fix @dtor. It is very much appreciated. Apologies for taking so long to look at this PR.