revision traversal and pack: notice and die on missing commit

cc0e6c5 (Handle return code of parse_commit in revision machinery,
2007-05-04) attempted to tighten error checking in the revision machinery,
but it wasn't enough.  When get_revision_1() was asked for the next commit
to return, it tries to read and simplify the parents of the commit to be
returned, but an error while doing so was silently ignored and reported as
a truncated history to the caller instead.

This resulted in an early end of "git log" output or a pack that lacks
older commits from "git pack-objects", without any error indication in the
exit status from these commands, even though the underlying parse_commit()
issues an error message to the end user.

Note that the codepath in add_parents_list() that paints parents of an
UNINTERESTING commit UNINTERESTING silently ignores the error when
parse_commit() fails; this is deliberate and in line with aeeae1b
(revision traversal: allow UNINTERESTING objects to be missing,
2009-01-27).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 files changed
tree: bc1aad9418072be3a01c1002cafb34af41327302
  1. arm/
  2. compat/
  3. contrib/
  4. Documentation/
  5. git-gui/
  6. gitk-git/
  7. gitweb/
  8. mozilla-sha1/
  9. perl/
  10. ppc/
  11. t/
  12. templates/
  13. xdiff/
  14. .gitignore
  15. .mailmap
  16. alloc.c
  17. archive-tar.c
  18. archive-zip.c
  19. archive.c
  20. archive.h
  21. attr.c
  22. attr.h
  23. base85.c
  24. blob.c
  25. blob.h
  26. builtin-add.c
  27. builtin-annotate.c
  28. builtin-apply.c
  29. builtin-archive.c
  30. builtin-blame.c
  31. builtin-branch.c
  32. builtin-bundle.c
  33. builtin-cat-file.c
  34. builtin-check-attr.c
  35. builtin-check-ref-format.c
  36. builtin-checkout-index.c
  37. builtin-clean.c
  38. builtin-commit-tree.c
  39. builtin-commit.c
  40. builtin-config.c
  41. builtin-count-objects.c
  42. builtin-describe.c
  43. builtin-diff-files.c
  44. builtin-diff-index.c
  45. builtin-diff-tree.c
  46. builtin-diff.c
  47. builtin-fast-export.c
  48. builtin-fetch--tool.c
  49. builtin-fetch-pack.c
  50. builtin-fetch.c
  51. builtin-fmt-merge-msg.c
  52. builtin-for-each-ref.c
  53. builtin-fsck.c
  54. builtin-gc.c
  55. builtin-grep.c
  56. builtin-http-fetch.c
  57. builtin-init-db.c
  58. builtin-log.c
  59. builtin-ls-files.c
  60. builtin-ls-remote.c
  61. builtin-ls-tree.c
  62. builtin-mailinfo.c
  63. builtin-mailsplit.c
  64. builtin-merge-base.c
  65. builtin-merge-file.c
  66. builtin-merge-ours.c
  67. builtin-mv.c
  68. builtin-name-rev.c
  69. builtin-pack-objects.c
  70. builtin-pack-refs.c
  71. builtin-prune-packed.c
  72. builtin-prune.c
  73. builtin-push.c
  74. builtin-read-tree.c
  75. builtin-reflog.c
  76. builtin-rerere.c
  77. builtin-reset.c
  78. builtin-rev-list.c
  79. builtin-rev-parse.c
  80. builtin-revert.c
  81. builtin-rm.c
  82. builtin-send-pack.c
  83. builtin-shortlog.c
  84. builtin-show-branch.c
  85. builtin-show-ref.c
  86. builtin-stripspace.c
  87. builtin-symbolic-ref.c
  88. builtin-tag.c
  89. builtin-tar-tree.c
  90. builtin-unpack-objects.c
  91. builtin-update-index.c
  92. builtin-update-ref.c
  93. builtin-upload-archive.c
  94. builtin-verify-pack.c
  95. builtin-verify-tag.c
  96. builtin-write-tree.c
  97. builtin.h
  98. bundle.c
  99. bundle.h
  100. cache-tree.c
  101. cache-tree.h
  102. cache.h
  103. check-builtins.sh
  104. check-racy.c
  105. color.c
  106. color.h
  107. combine-diff.c
  108. command-list.txt
  109. commit.c
  110. commit.h
  111. config.c
  112. config.mak.in
  113. configure.ac
  114. connect.c
  115. convert.c
  116. copy.c
  117. COPYING
  118. csum-file.c
  119. csum-file.h
  120. ctype.c
  121. daemon.c
  122. date.c
  123. decorate.c
  124. decorate.h
  125. delta.h
  126. diff-delta.c
  127. diff-lib.c
  128. diff.c
  129. diff.h
  130. diffcore-break.c
  131. diffcore-delta.c
  132. diffcore-order.c
  133. diffcore-pickaxe.c
  134. diffcore-rename.c
  135. diffcore.h
  136. dir.c
  137. dir.h
  138. dump-cache-tree.c
  139. entry.c
  140. environment.c
  141. exec_cmd.c
  142. exec_cmd.h
  143. fast-import.c
  144. fetch-pack.h
  145. fixup-builtins
  146. generate-cmdlist.sh
  147. git-add--interactive.perl
  148. git-am.sh
  149. git-archimport.perl
  150. git-bisect.sh
  151. git-checkout.sh
  152. git-clone.sh
  153. git-compat-util.h
  154. git-cvsexportcommit.perl
  155. git-cvsimport.perl
  156. git-cvsserver.perl
  157. git-filter-branch.sh
  158. git-help--browse.sh
  159. git-instaweb.sh
  160. git-lost-found.sh
  161. git-merge-octopus.sh
  162. git-merge-one-file.sh
  163. git-merge-resolve.sh
  164. git-merge-stupid.sh
  165. git-merge.sh
  166. git-mergetool.sh
  167. git-parse-remote.sh
  168. git-pull.sh
  169. git-quiltimport.sh
  170. git-rebase--interactive.sh
  171. git-rebase.sh
  172. git-relink.perl
  173. git-remote.perl
  174. git-repack.sh
  175. git-request-pull.sh
  176. git-send-email.perl
  177. git-sh-setup.sh
  178. git-stash.sh
  179. git-submodule.sh
  180. git-svn.perl
  181. GIT-VERSION-GEN
  182. git.c
  183. git.spec.in
  184. grep.c
  185. grep.h
  186. hash-object.c
  187. hash.c
  188. hash.h
  189. help.c
  190. http-push.c
  191. http-walker.c
  192. http.c
  193. http.h
  194. ident.c
  195. imap-send.c
  196. index-pack.c
  197. INSTALL
  198. interpolate.c
  199. interpolate.h
  200. list-objects.c
  201. list-objects.h
  202. lockfile.c
  203. log-tree.c
  204. log-tree.h
  205. mailmap.c
  206. mailmap.h
  207. Makefile
  208. match-trees.c
  209. merge-file.c
  210. merge-index.c
  211. merge-recursive.c
  212. merge-tree.c
  213. mktag.c
  214. mktree.c
  215. object-refs.c
  216. object.c
  217. object.h
  218. pack-check.c
  219. pack-redundant.c
  220. pack-write.c
  221. pack.h
  222. pager.c
  223. parse-options.c
  224. parse-options.h
  225. patch-delta.c
  226. patch-id.c
  227. patch-ids.c
  228. patch-ids.h
  229. path-list.c
  230. path-list.h
  231. path.c
  232. pkt-line.c
  233. pkt-line.h
  234. pretty.c
  235. progress.c
  236. progress.h
  237. quote.c
  238. quote.h
  239. reachable.c
  240. reachable.h
  241. read-cache.c
  242. README
  243. receive-pack.c
  244. reflog-walk.c
  245. reflog-walk.h
  246. refs.c
  247. refs.h
  248. remote.c
  249. remote.h
  250. revision.c
  251. revision.h
  252. run-command.c
  253. run-command.h
  254. send-pack.h
  255. server-info.c
  256. setup.c
  257. sha1_file.c
  258. sha1_name.c
  259. shallow.c
  260. shell.c
  261. show-index.c
  262. sideband.c
  263. sideband.h
  264. strbuf.c
  265. strbuf.h
  266. symlinks.c
  267. tag.c
  268. tag.h
  269. tar.h
  270. test-absolute-path.c
  271. test-chmtime.c
  272. test-date.c
  273. test-delta.c
  274. test-genrandom.c
  275. test-match-trees.c
  276. test-parse-options.c
  277. test-sha1.c
  278. test-sha1.sh
  279. trace.c
  280. transport.c
  281. transport.h
  282. tree-diff.c
  283. tree-walk.c
  284. tree-walk.h
  285. tree.c
  286. tree.h
  287. unpack-file.c
  288. unpack-trees.c
  289. unpack-trees.h
  290. update-server-info.c
  291. upload-pack.c
  292. usage.c
  293. utf8.c
  294. utf8.h
  295. var.c
  296. walker.c
  297. walker.h
  298. write_or_die.c
  299. ws.c
  300. wt-status.c
  301. wt-status.h
  302. xdiff-interface.c
  303. xdiff-interface.h