commit-graph: extract fill_oids_from_packs()

The write_commit_graph() method is too complex, so we are extracting helper functions one by one. This extracts fill_oids_from_packs() that reads the given pack-file list and fills the oid list in the context. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Derrick Stolee committed Jun 12, 2019 at 06:29 UTC ef5b83f2cfe11c2feb98b962881e9a8e6281e3ff
1 file changed +47 -36
commit-graph.c
+47 -36
@@ -867,6 +867,51 @@ int write_commit_graph_reachable(const char *obj_dir, unsigned int flags)
867 return result;
868 }
869
870 +static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
871 + struct string_list *pack_indexes)
872 +{
873 + uint32_t i;
874 + struct strbuf progress_title = STRBUF_INIT;
875 + struct strbuf packname = STRBUF_INIT;
876 + int dirlen;
877 +
878 + strbuf_addf(&packname, "%s/pack/", ctx->obj_dir);
879 + dirlen = packname.len;
880 + if (ctx->report_progress) {
881 + strbuf_addf(&progress_title,
882 + Q_("Finding commits for commit graph in %d pack",
883 + "Finding commits for commit graph in %d packs",
884 + pack_indexes->nr),
885 + pack_indexes->nr);
886 + ctx->progress = start_delayed_progress(progress_title.buf, 0);
887 + ctx->progress_done = 0;
888 + }
889 + for (i = 0; i < pack_indexes->nr; i++) {
890 + struct packed_git *p;
891 + strbuf_setlen(&packname, dirlen);
892 + strbuf_addstr(&packname, pack_indexes->items[i].string);
893 + p = add_packed_git(packname.buf, packname.len, 1);
894 + if (!p) {
895 + error(_("error adding pack %s"), packname.buf);
896 + return -1;
897 + }
898 + if (open_pack_index(p)) {
899 + error(_("error opening index for %s"), packname.buf);
900 + return -1;
901 + }
902 + for_each_object_in_pack(p, add_packed_commits, ctx,
903 + FOR_EACH_OBJECT_PACK_ORDER);
904 + close_pack(p);
905 + free(p);
906 + }
907 +
908 + stop_progress(&ctx->progress);
909 + strbuf_reset(&progress_title);
910 + strbuf_release(&packname);
911 +
912 + return 0;
913 +}
914 +
915 int write_commit_graph(const char *obj_dir,
916 struct string_list *pack_indexes,
917 struct string_list *commit_hex,
@@ -916,42 +961,8 @@ int write_commit_graph(const char *obj_dir,
961 }
962
963 if (pack_indexes) {
919 - struct strbuf packname = STRBUF_INIT;
920 - int dirlen;
921 - strbuf_addf(&packname, "%s/pack/", obj_dir);
922 - dirlen = packname.len;
923 - if (ctx->report_progress) {
924 - strbuf_addf(&progress_title,
925 - Q_("Finding commits for commit graph in %d pack",
926 - "Finding commits for commit graph in %d packs",
927 - pack_indexes->nr),
928 - pack_indexes->nr);
929 - ctx->progress = start_delayed_progress(progress_title.buf, 0);
930 - ctx->progress_done = 0;
931 - }
932 - for (i = 0; i < pack_indexes->nr; i++) {
933 - struct packed_git *p;
934 - strbuf_setlen(&packname, dirlen);
935 - strbuf_addstr(&packname, pack_indexes->items[i].string);
936 - p = add_packed_git(packname.buf, packname.len, 1);
937 - if (!p) {
938 - error(_("error adding pack %s"), packname.buf);
939 - res = -1;
940 - goto cleanup;
941 - }
942 - if (open_pack_index(p)) {
943 - error(_("error opening index for %s"), packname.buf);
944 - res = -1;
945 - goto cleanup;
946 - }
947 - for_each_object_in_pack(p, add_packed_commits, ctx,
948 - FOR_EACH_OBJECT_PACK_ORDER);
949 - close_pack(p);
950 - free(p);
951 - }
952 - stop_progress(&ctx->progress);
953 - strbuf_reset(&progress_title);
954 - strbuf_release(&packname);
964 + if ((res = fill_oids_from_packs(ctx, pack_indexes)))
965 + goto cleanup;
966 }
967
968 if (commit_hex) {