commit - 675d71c4343c11708d0df6b8965cb4e6f3a42ea2
commit + 7e66511645edba471993334510005bb30c00cefc
blob - 46570b469f891b3661e5361cc7bfe505ebc3afc4
blob + c9ea7a877089fb35835cb3d796c4f8efae413fbc
--- got/got.c
+++ got/got.c
while (!TAILQ_EMPTY(&commits)) {
struct got_parent_id *pid;
+ struct got_object *obj;
+ struct got_commit_object *pcommit;
+ struct commit_queue_entry *pentry;
entry = TAILQ_FIRST(&commits);
+
err = print_commit(entry->commit, entry->id, repo, show_patch);
if (err)
break;
if (limit && --limit == 0)
break;
-
- SIMPLEQ_FOREACH(pid, &entry->commit->parent_ids, entry) {
- struct got_object *obj;
- struct got_commit_object *pcommit;
- struct commit_queue_entry *pentry;
- err = got_object_open(&obj, repo, pid->id);
- if (err)
- break;
- if (got_object_get_type(obj) != GOT_OBJ_TYPE_COMMIT) {
- err = got_error(GOT_ERR_OBJ_TYPE);
- break;
- }
+ if (entry->commit->nparents == 0)
+ break;
- err = got_object_commit_open(&pcommit, repo, obj);
- got_object_close(obj);
- if (err)
- break;
-
- pentry = calloc(1, sizeof(*pentry));
- if (pentry == NULL) {
- err = got_error_from_errno();
- got_object_commit_close(pcommit);
- break;
- }
- pentry->id = got_object_id_dup(pid->id);
- if (pentry->id == NULL) {
- err = got_error_from_errno();
- got_object_commit_close(pcommit);
- break;
- }
- pentry->commit = pcommit;
- TAILQ_INSERT_TAIL(&commits, pentry, entry);
+ /* Follow the first parent (TODO: handle merge commits). */
+ pid = SIMPLEQ_FIRST(&entry->commit->parent_ids);
+ err = got_object_open(&obj, repo, pid->id);
+ if (err)
+ break;
+ if (got_object_get_type(obj) != GOT_OBJ_TYPE_COMMIT) {
+ err = got_error(GOT_ERR_OBJ_TYPE);
+ break;
+ }
+
+ err = got_object_commit_open(&pcommit, repo, obj);
+ got_object_close(obj);
+ if (err)
+ break;
+
+ pentry = calloc(1, sizeof(*pentry));
+ if (pentry == NULL) {
+ err = got_error_from_errno();
+ got_object_commit_close(pcommit);
+ break;
}
+ pentry->id = got_object_id_dup(pid->id);
+ if (pentry->id == NULL) {
+ err = got_error_from_errno();
+ got_object_commit_close(pcommit);
+ break;
+ }
+ pentry->commit = pcommit;
+ TAILQ_INSERT_TAIL(&commits, pentry, entry);
TAILQ_REMOVE(&commits, entry, entry);
got_object_commit_close(entry->commit);