git-commit-vandalism/builtin
Jeff King 30d1038d1b fsck: return non-zero status on missing ref tips
Fsck tries hard to detect missing objects, and will complain
(and exit non-zero) about any inter-object links that are
missing. However, it will not exit non-zero for any missing
ref tips, meaning that a severely broken repository may
still pass "git fsck && echo ok".

The problem is that we use for_each_ref to iterate over the
ref tips, which hides broken tips. It does at least print an
error from the refs.c code, but fsck does not ever see the
ref and cannot note the problem in its exit code. We can solve
this by using for_each_rawref and noting the error ourselves.

In addition to adding tests for this case, we add tests for
all types of missing-object links (all of which worked, but
which we were not testing).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2014-09-12 10:45:49 -07:00
..
add.c pathspec: convert some match_pathspec_depth() to dir_path_match() 2014-02-24 14:37:09 -08:00
annotate.c annotate: use argv_array 2014-07-16 11:10:11 -07:00
apply.c comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
archive.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
bisect--helper.c Replace deprecated OPT_BOOLEAN by OPT_BOOL 2013-08-05 11:32:19 -07:00
blame.c Merge branch 'js/lift-parent-count-limit' 2014-01-10 10:33:36 -08:00
branch.c Merge branch 'cc/starts-n-ends-with' 2013-12-17 12:02:44 -08:00
bundle.c
cat-file.c Merge branch 'jk/oi-delta-base' 2014-01-10 10:33:11 -08:00
check-attr.c Merge branch 'jc/check-attr-honor-working-tree' into maint 2014-03-18 14:03:03 -07:00
check-ignore.c Merge branch 'dw/check-ignore-sans-index' 2013-09-20 12:37:32 -07:00
check-mailmap.c builtin: add git-check-mailmap command 2013-07-13 10:19:37 -07:00
check-ref-format.c
checkout-index.c Merge branch 'nd/lift-path-max' 2013-10-30 12:10:56 -07:00
checkout.c Merge branch 'jl/nor-or-nand-and' into maint 2014-04-09 12:03:26 -07:00
clean.c Merge branch 'maint-1.8.5' into maint-1.9 2014-07-16 11:10:30 -07:00
clone.c commit: fix patch hunk editing with "commit -p -m" 2014-03-18 11:25:12 -07:00
column.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
commit-tree.c
commit.c Merge branch 'jl/nor-or-nand-and' into maint 2014-04-09 12:03:26 -07:00
config.c repo-config: remove deprecated alias for "git config" 2013-11-12 14:10:17 -08:00
count-objects.c
credential.c
describe.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
diff-files.c convert read_cache_preload() to take struct pathspec 2013-07-15 10:56:08 -07:00
diff-index.c convert read_cache_preload() to take struct pathspec 2013-07-15 10:56:08 -07:00
diff-tree.c
diff.c Merge branch 'tg/diff-no-index-refactor' 2013-12-27 14:58:17 -08:00
fast-export.c Merge branch 'cc/starts-n-ends-with' 2013-12-17 12:02:44 -08:00
fetch-pack.c Merge branch 'nd/shallow-clone' 2014-01-17 12:21:20 -08:00
fetch.c Merge branch 'nd/transport-positive-depth-only' into maint 2014-02-05 13:58:52 -08:00
fmt-merge-msg.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
for-each-ref.c Merge branch 'maint' 2013-12-30 12:27:01 -08:00
fsck.c fsck: return non-zero status on missing ref tips 2014-09-12 10:45:49 -07:00
gc.c commit: fix patch hunk editing with "commit -p -m" 2014-03-18 11:25:12 -07:00
get-tar-commit-id.c stop installing git-tar-tree link 2013-12-03 12:35:22 -08:00
grep.c pathspec: convert some match_pathspec_depth() to dir_path_match() 2014-02-24 14:37:09 -08:00
hash-object.c hash-object: replace stdin parsing OPT_BOOLEAN by OPT_COUNTUP 2013-08-07 08:30:55 -07:00
help.c builtin/help.c: speed up is_git_command() by checking for builtin commands first 2014-01-06 11:26:31 -08:00
index-pack.c Merge branch 'nd/index-pack-error-message' into maint 2014-04-03 13:39:04 -07:00
init-db.c Merge branch 'mh/safe-create-leading-directories' 2014-01-27 10:45:33 -08:00
log.c comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
ls-files.c pathspec: pass directory indicator to match_pathspec_item() 2014-02-24 14:37:19 -08:00
ls-remote.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
ls-tree.c pathspec: rename match_pathspec_depth() to match_pathspec() 2014-02-24 14:37:14 -08:00
mailinfo.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
mailsplit.c
merge-base.c Merge branch 'bm/merge-base-octopus-dedup' into maint 2014-02-13 13:38:59 -08:00
merge-file.c Replace deprecated OPT_BOOLEAN by OPT_BOOL 2013-08-05 11:32:19 -07:00
merge-index.c Convert "struct cache_entry *" to "const ..." wherever possible 2013-07-09 09:12:48 -07:00
merge-ours.c
merge-recursive.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
merge-tree.c
merge.c merge: fix GIT_EDITOR override for commit hook 2014-03-18 11:25:38 -07:00
mktag.c
mktree.c
mv.c mv: prevent mismatched data when ignoring errors. 2014-03-17 11:38:41 -07:00
name-rev.c Merge branch 'cc/starts-n-ends-with' 2013-12-17 12:02:44 -08:00
notes.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
pack-objects.c comments: fix misuses of "nor" 2014-03-31 15:29:27 -07:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c prune-packed: use strbuf to avoid having to worry about PATH_MAX 2013-12-17 10:43:30 -08:00
prune.c Merge branch 'nd/shallow-clone' 2014-01-17 12:21:20 -08:00
push.c Merge branch 'jc/push-refmap' 2013-12-27 14:57:50 -08:00
read-tree.c C: have space around && and || operators 2013-10-16 10:26:39 -07:00
receive-pack.c shallow: automatically clean up shallow tempfiles 2014-02-27 12:07:13 -08:00
reflog.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
remote-ext.c
remote-fd.c
remote.c Merge branch 'cc/starts-n-ends-with' 2013-12-17 12:02:44 -08:00
repack.c Merge branch 'sb/repack-in-c' into maint 2014-02-13 13:38:09 -08:00
replace.c replace info: rename 'full' to 'long' and clarify in-code symbols 2013-12-30 12:33:11 -08:00
rerere.c rerere: convert to use parse_pathspec 2013-07-15 10:56:07 -07:00
reset.c reset: optionally setup worktree and refresh index on --mixed 2014-02-18 14:40:23 -08:00
rev-list.c C: have space around && and || operators 2013-10-16 10:26:39 -07:00
rev-parse.c Merge branch 'ds/rev-parse-required-args' into maint 2014-03-18 14:01:05 -07:00
revert.c Merge branch 'hu/cherry-pick-previous-branch' 2013-10-23 13:21:35 -07:00
rm.c pathspec: convert some match_pathspec_depth() to ce_path_match() 2014-02-24 14:36:52 -08:00
send-pack.c Merge branch 'nd/shallow-clone' 2014-01-17 12:21:20 -08:00
shortlog.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
show-branch.c Merge branch 'cc/starts-n-ends-with' 2013-12-17 12:02:44 -08:00
show-ref.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
stripspace.c builtin/stripspace.c: fix broken indentation 2013-09-06 13:33:17 -07:00
symbolic-ref.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
tag.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
unpack-file.c
unpack-objects.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
update-index.c pathspec: convert some match_pathspec_depth() to ce_path_match() 2014-02-24 14:36:52 -08:00
update-ref.c update-ref: fail create operation over stdin if ref already exists 2014-04-02 10:40:43 -07:00
update-server-info.c i18n: update-server-info: mark parseopt strings for translation 2012-08-22 10:58:29 -07:00
upload-archive.c replace {pre,suf}fixcmp() with {starts,ends}_with() 2013-12-05 14:13:21 -08:00
var.c
verify-pack.c
verify-tag.c
write-tree.c