fix when commit has no parent - stagit-gopher - A git gopher frontend. (mirror)
 (HTM) git clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 55b823b226194cd25864f1b61bc5b4f343e4e822
 (DIR) parent a523491d6cea4d7fff9b3bdeeb79842412dc31cd
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Mon,  7 Dec 2015 21:16:28 +0100
       
       fix when commit has no parent
       
       also dont show parent when there is no id for it.
       
       Diffstat:
         M urmoms.c                            |      41 ++++++++++++++++++++-----------
       
       1 file changed, 26 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/urmoms.c b/urmoms.c
       @@ -168,7 +168,7 @@ printcommit(FILE *fp, git_commit *commit)
                fprintf(fp, "<b>commit</b> <a href=\"%scommit/%s.html\">%s</a>\n",
                        relpath, buf, buf);
        
       -        if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)))
       +        if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)) && buf[0])
                        fprintf(fp, "<b>parent</b> <a href=\"%scommit/%s.html\">%s</a>\n",
                                relpath, buf, buf);
        
       @@ -225,12 +225,15 @@ printshowfile(git_commit *commit)
                writeheader(fp);
                printcommit(fp, commit);
        
       -        if ((error = git_commit_parent(&parent, commit, 0)))
       -                return;
                if ((error = git_commit_tree(&commit_tree, commit)))
                        goto err;
       -        if ((error = git_commit_tree(&parent_tree, parent)))
       -                goto err;
       +        if (!(error = git_commit_parent(&parent, commit, 0))) {
       +                if ((error = git_commit_tree(&parent_tree, parent)))
       +                        goto err; /* TODO: handle error */
       +        } else {
       +                parent = NULL;
       +                parent_tree = NULL;
       +        }
                if ((error = git_diff_tree_to_tree(&diff, repo, parent_tree, commit_tree, NULL)))
                        goto err;
        
       @@ -334,7 +337,7 @@ writelog(FILE *fp)
                size_t i, nfiles, ndel, nadd;
                const char *summary;
                char buf[GIT_OID_HEXSZ + 1];
       -        int error;
       +        int error, ret = 0;
        
                mkdir("commit", 0755);
        
       @@ -352,14 +355,20 @@ writelog(FILE *fp)
        
                        relpath = "";
        
       -                if (git_commit_lookup(&commit, repo, &id))
       -                        return 1; /* TODO: error */
       -                if ((error = git_commit_parent(&parent, commit, 0)))
       -                        continue; /* TODO: handle error */
       +                if (git_commit_lookup(&commit, repo, &id)) {
       +                        ret = 1;
       +                        goto err;
       +                }
                        if ((error = git_commit_tree(&commit_tree, commit)))
       -                        continue; /* TODO: handle error */
       -                if ((error = git_commit_tree(&parent_tree, parent)))
       -                        continue; /* TODO: handle error */
       +                        goto errdiff; /* TODO: handle error */
       +                if (!(error = git_commit_parent(&parent, commit, 0))) {
       +                        if ((error = git_commit_tree(&parent_tree, parent)))
       +                                goto errdiff; /* TODO: handle error */
       +                } else {
       +                        parent = NULL;
       +                        parent_tree = NULL;
       +                }
       +
                        if ((error = git_diff_tree_to_tree(&diff, repo, parent_tree, commit_tree, NULL)))
                                continue; /* TODO: handle error */
                        if (git_diff_get_stats(&stats, diff))
       @@ -399,14 +408,16 @@ writelog(FILE *fp)
                        relpath = "../";
                        printshowfile(commit);
        
       +errdiff:
                        git_diff_free(diff);
                        git_commit_free(commit);
                }
                fprintf(fp, "</tbody></table>");
       +err:
                git_revwalk_free(w);
                relpath = "";
        
       -        return 0;
       +        return ret;
        }
        
        void
       @@ -439,7 +450,7 @@ printcommitatom(FILE *fp, git_commit *commit)
        
                fputs("<content type=\"text\">", fp);
                fprintf(fp, "commit %s\n", buf);
       -        if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)))
       +        if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)) && buf[0])
                        fprintf(fp, "parent %s\n", buf);
        
                if ((count = (int)git_commit_parentcount(commit)) > 1) {