commit - c1696d0f5debe80ec8662a1e4dbcafe6856bf67e
commit + ebc8ef350dc7f15520ce1d1474510170bd055226
blob - a431102c044792d034104d386d7ac6962d471951
blob + db7f080f5acaf39c23610da95bf5f1ab7771c2a3
--- lib/pack_create.c
+++ lib/pack_create.c
struct got_object_idset *set, struct got_object_idset *skip,
struct got_repository *repo)
{
- const struct got_error *err;
+ const struct got_error *err = NULL;
struct got_object_id_queue ids;
- struct got_object_qid *qid;
- struct got_commit_object *commit;
+ struct got_object_qid *qid = NULL;
+ struct got_commit_object *commit = NULL;
const struct got_object_id_queue *parents;
+ struct got_object_idset *traversed;
STAILQ_INIT(&ids);
+ traversed = got_object_idset_alloc();
+ if (traversed == NULL)
+ return got_error_from_errno("got_object_idset_alloc");
+
err = got_object_open_as_commit(&commit, repo, commit_id);
if (err)
return err;
got_object_idset_contains(skip, &pid->id))
continue;
+ if (got_object_idset_contains(traversed,
+ &pid->id))
+ continue;
err = got_pack_queue_commit_id(&ids, &pid->id,
color, repo);
if (err)
break;
+ err = got_object_idset_add(traversed,
+ &pid->id, NULL);
+ if (err)
+ goto done;
}
}
got_object_commit_close(commit);
got_object_qid_free(qid);
qid = NULL;
}
-
+done:
if (commit)
got_object_commit_close(commit);
if (qid)
got_object_qid_free(qid);
got_object_id_queue_free(&ids);
+ got_object_idset_free(traversed);
return err;
}