Re: Bug report: 'git commit --dry-run' corner case: returns error ("nothing to commit") when all conflicts resolved to HEAD
From: Stephen & Linda Smith <hidden>
Date: 2016-06-15 23:08:12
On Monday, February 08, 2016 06:55:17 PM Stephen & Linda Smith wrote:
quoted
#!/bin/bash mkdir test-repository || exit 1 cd test-repository git init echo "Initial contents, unimportant" > test-file git add test-file git commit -m "Initial commit" echo "commit-1-state" > test-file git commit -m "commit 1" -i test-file git tag commit-1 git checkout -b branch-2 HEAD^1 echo "commit-2-state" > test-file git commit -m "commit 2" -i test-file # Creates conflicted state. git merge --no-commit commit-1 # Resolved entirely to commit-2, aka HEAD. echo "commit-2-state" > test-file # If we'd set to commit-1=state, all would work as expected (changes vs HEAD). git add test-file # ===== Bug is here. git commit --dry-run && echo "Git said something to commit" \ || echo "Git said NOTHING to commit"
With the '--dry-run' switch, dry_run_commit() is called which returns 1 since run_status() is returning the wt_status commitable field which has a value of 0. That field is only set in one place (wt_status_print_updated) which isn't getting called directly or indirectly by run_status. I checked this by code inspection as well as by instrumenting the code. I'm not sure that we want to add a call to wt_status_print_updated in run_status since I don't believe we want the print statements. An alternative might be to create a new function.
quoted
git commit -m "Something to commit after all" && echo "Commit went through" git log --pretty=oneline