diff --git a/git-filter-repo b/git-filter-repo index 28a063a7..edf570fd 100755 --- a/git-filter-repo +++ b/git-filter-repo @@ -3100,7 +3100,9 @@ class RepoFilter(object): for cmd in cleanup_cmds: if show_debuginfo: print("[DEBUG] Running{}: {}".format(location_info, ' '.join(cmd))) - subproc.call(cmd, cwd=repo) + ret = subproc.call(cmd, cwd=repo) + if ret != 0: + raise SystemExit("fatal: running '%s' failed!" % ' '.join(cmd)) if cmd[0:3] == 'git reflog expire'.split(): self._write_stash() diff --git a/t/t9390-filter-repo.sh b/t/t9390-filter-repo.sh index 179f4171..fd81fb96 100755 --- a/t/t9390-filter-repo.sh +++ b/t/t9390-filter-repo.sh @@ -1959,4 +1959,22 @@ test_expect_success 'rewrite stash' ' ) ' +test_expect_success 'failure to run cleanup' ' + test_create_repo fail_to_cleanup && + ( + cd fail_to_cleanup && + + git init && + test_write_lines 1 2 3 4 5 6 7 8 9 10 >numbers && + git add numbers && + git commit -qm initial && + + chmod u-w .git/logs && + test_must_fail git filter-repo --force \ + --path-rename numbers:values 2> ../err && + chmod u+w .git/logs && + grep fatal.*git.reflog.expire.*failed ../err + ) +' + test_done