| timplify and restructure code - stagit - static git page generator | |
| git clone git://src.adamsgaard.dk/stagit | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 934980659a7c1d7ccebec69a65eef2bf96a6c7a2 | |
| parent efe16db1e509b1c8f8b06a003126c19f4f8dacaa | |
| Author: Hiltjo Posthuma <[email protected]> | |
| Date: Fri, 8 Jan 2016 20:08:40 +0100 | |
| implify and restructure code | |
| - remove commit message and lines changed from refs page. | |
| - resolve HEAD once. | |
| - dont make filepath in writeblob() | |
| Diffstat: | |
| M stagit.c | 107 +++++++++++------------------… | |
| 1 file changed, 37 insertions(+), 70 deletions(-) | |
| --- | |
| diff --git a/stagit.c b/stagit.c | |
| t@@ -329,12 +329,11 @@ printcommit(FILE *fp, struct commitinfo *ci) | |
| printtime(fp, &(ci->author->when)); | |
| fputc('\n', fp); | |
| } | |
| - fputc('\n', fp); | |
| - | |
| - if (ci->msg) | |
| + if (ci->msg) { | |
| + fputc('\n', fp); | |
| xmlencode(fp, ci->msg, strlen(ci->msg)); | |
| - | |
| - fputc('\n', fp); | |
| + fputc('\n', fp); | |
| + } | |
| } | |
| void | |
| t@@ -357,19 +356,18 @@ printshowfile(struct commitinfo *ci) | |
| fp = efopen(path, "w"); | |
| writeheader(fp); | |
| - fputs("<pre>\n", fp); | |
| + fputs("<pre>", fp); | |
| printcommit(fp, ci); | |
| memset(&statsbuf, 0, sizeof(statsbuf)); | |
| /* diff stat */ | |
| - if (ci->stats) { | |
| - if (!git_diff_stats_to_buf(&statsbuf, ci->stats, | |
| - GIT_DIFF_STATS_FULL | GIT_DIFF_STATS_SHORT, 80)) { | |
| - if (statsbuf.ptr && statsbuf.ptr[0]) { | |
| - fputs("<b>Diffstat:</b>\n", fp); | |
| - fputs(statsbuf.ptr, fp); | |
| - } | |
| + if (ci->stats && | |
| + !git_diff_stats_to_buf(&statsbuf, ci->stats, | |
| + GIT_DIFF_STATS_FULL | GIT_DIFF_STATS_SHORT,… | |
| + if (statsbuf.ptr && statsbuf.ptr[0]) { | |
| + fputs("<b>Diffstat:</b>\n", fp); | |
| + xmlencode(fp, statsbuf.ptr, strlen(statsbuf.ptr)); | |
| } | |
| } | |
| t@@ -430,21 +428,13 @@ printshowfile(struct commitinfo *ci) | |
| } | |
| int | |
| -writelog(FILE *fp, const char *branch) | |
| +writelog(FILE *fp, const git_oid *oid) | |
| { | |
| struct commitinfo *ci; | |
| - const git_oid *oid; | |
| git_revwalk *w = NULL; | |
| - git_object *obj = NULL; | |
| git_oid id; | |
| size_t len; | |
| - mkdir("commit", 0755); | |
| - | |
| - if (git_revparse_single(&obj, repo, branch)) | |
| - return -1; | |
| - oid = git_object_id(obj); | |
| - | |
| git_revwalk_new(&w, repo); | |
| git_revwalk_push(w, oid); | |
| git_revwalk_sorting(w, GIT_SORT_TIME); | |
| t@@ -493,7 +483,6 @@ writelog(FILE *fp, const char *branch) | |
| fputs("</tbody></table>", fp); | |
| git_revwalk_free(w); | |
| - git_object_free(obj); | |
| relpath = ""; | |
| t@@ -579,14 +568,13 @@ writeatom(FILE *fp) | |
| } | |
| int | |
| -writeblob(git_object *obj, const char *filename, git_off_t filesize) | |
| +writeblob(git_object *obj, const char *fpath, const char *filename, git_off_t … | |
| { | |
| - char fpath[PATH_MAX]; | |
| char tmp[PATH_MAX] = ""; | |
| - char *d, *p; | |
| + char *d; | |
| + const char *p; | |
| FILE *fp; | |
| - snprintf(fpath, sizeof(fpath), "file/%s.html", filename); | |
| d = xdirname(fpath); | |
| if (mkdirp(d)) { | |
| free(d); | |
| t@@ -698,35 +686,32 @@ writefilestree(FILE *fp, git_tree *tree, const char *bra… | |
| git_object_free(obj); | |
| continue; | |
| } | |
| - if (path[0]) { | |
| - snprintf(filepath, sizeof(filepath), "%s/%s", | |
| + if (path[0]) | |
| + snprintf(filepath, sizeof(filepath), "file/%s/%s.html", | |
| path, filename); | |
| - filename = filepath; | |
| - } | |
| + else | |
| + snprintf(filepath, sizeof(filepath), "file/%s.html", | |
| + filename); | |
| filesize = git_blob_rawsize((git_blob *)obj); | |
| fputs("<tr><td>", fp); | |
| - fprintf(fp, "%s", filemode(git_tree_entry_filemode(entry))); | |
| - fprintf(fp, "</td><td><a href=\"%sfile/", relpath); | |
| - xmlencode(fp, filename, strlen(filename)); | |
| - fputs(".html\">", fp); | |
| + fputs(filemode(git_tree_entry_filemode(entry)), fp); | |
| + fprintf(fp, "</td><td><a href=\"%s%s\">", relpath, filepath); | |
| xmlencode(fp, filename, strlen(filename)); | |
| fputs("</a></td><td class=\"num\">", fp); | |
| fprintf(fp, "%ju", (uintmax_t)filesize); | |
| fputs("</td></tr>\n", fp); | |
| - writeblob(obj, filename, filesize); | |
| + writeblob(obj, filepath, filename, filesize); | |
| } | |
| return 0; | |
| } | |
| int | |
| -writefiles(FILE *fp, const char *branch) | |
| +writefiles(FILE *fp, const git_oid *id, const char *branch) | |
| { | |
| - const git_oid *id; | |
| git_tree *tree = NULL; | |
| - git_object *obj = NULL; | |
| git_commit *commit = NULL; | |
| int ret = -1; | |
| t@@ -734,9 +719,6 @@ writefiles(FILE *fp, const char *branch) | |
| "<td>Mode</td><td>Name</td><td class=\"num\">Size</td>" | |
| "</tr>\n</thead><tbody>\n", fp); | |
| - if (git_revparse_single(&obj, repo, branch)) | |
| - goto err; | |
| - id = git_object_id(obj); | |
| if (git_commit_lookup(&commit, repo, id) || | |
| git_commit_tree(&tree, commit)) | |
| goto err; | |
| t@@ -745,7 +727,6 @@ writefiles(FILE *fp, const char *branch) | |
| err: | |
| fputs("</tbody></table>", fp); | |
| - git_object_free(obj); | |
| git_commit_free(commit); | |
| git_tree_free(tree); | |
| t@@ -778,7 +759,7 @@ writerefs(FILE *fp) | |
| git_reference *dref = NULL, *r, *ref = NULL; | |
| git_reference_iterator *it = NULL; | |
| git_reference **refs = NULL; | |
| - size_t count, i, j, len, refcount = 0; | |
| + size_t count, i, j, refcount = 0; | |
| const char *cols[] = { "Branch", "Tag" }; /* first column title */ | |
| const char *titles[] = { "Branches", "Tags" }; | |
| const char *ids[] = { "branches", "tags" }; | |
| t@@ -827,9 +808,7 @@ writerefs(FILE *fp) | |
| /* print header if it has an entry (first). */ | |
| if (++count == 1) { | |
| fprintf(fp, "<h2>%s</h2><table id=\"%s\"><thea… | |
| - "<td>Age</td><td>Commit message</td>" | |
| - "<td>Author</td><td>Files</td><td class=… | |
| - "<td class=\"num\">-</td></tr>\n</thead>… | |
| + "<td>Age</td><td>Author</td>\n</tr>\n</t… | |
| titles[j], ids[j], cols[j]); | |
| } | |
| t@@ -842,28 +821,8 @@ writerefs(FILE *fp) | |
| if (ci->author) | |
| printtimeshort(fp, &(ci->author->when)); | |
| fputs("</td><td>", fp); | |
| - if (ci->summary) { | |
| - if (j) | |
| - fprintf(fp, "<a href=\"%scommit/%s.htm… | |
| - relpath, ci->oid); | |
| - if ((len = strlen(ci->summary)) > summarylen) { | |
| - xmlencode(fp, ci->summary, summarylen … | |
| - fputs("…", fp); | |
| - } else { | |
| - xmlencode(fp, ci->summary, len); | |
| - } | |
| - if (j) | |
| - fputs("</a>", fp); | |
| - } | |
| - fputs("</td><td>", fp); | |
| if (ci->author) | |
| xmlencode(fp, ci->author->name, strlen(ci->aut… | |
| - fputs("</td><td class=\"num\">", fp); | |
| - fprintf(fp, "%zu", ci->filecount); | |
| - fputs("</td><td class=\"num\">", fp); | |
| - fprintf(fp, "+%zu", ci->addcount); | |
| - fputs("</td><td class=\"num\">", fp); | |
| - fprintf(fp, "-%zu", ci->delcount); | |
| fputs("</td></tr>\n", fp); | |
| relpath = "../"; | |
| t@@ -876,7 +835,7 @@ writerefs(FILE *fp) | |
| } | |
| /* table footer */ | |
| if (count) | |
| - fputs("</tbody></table>", fp); | |
| + fputs("</tbody></table><br/>", fp); | |
| } | |
| err: | |
| t@@ -894,6 +853,7 @@ int | |
| main(int argc, char *argv[]) | |
| { | |
| git_object *obj = NULL; | |
| + const git_oid *head = NULL; | |
| const git_error *e = NULL; | |
| FILE *fp, *fpread; | |
| char path[PATH_MAX], *p; | |
| t@@ -914,6 +874,12 @@ main(int argc, char *argv[]) | |
| return status; | |
| } | |
| + /* find HEAD */ | |
| + if (git_revparse_single(&obj, repo, "HEAD")) | |
| + return 1; | |
| + head = git_object_id(obj); | |
| + git_object_free(obj); | |
| + | |
| /* use directory name as name */ | |
| name = xbasename(repodir); | |
| t@@ -964,14 +930,15 @@ main(int argc, char *argv[]) | |
| fp = efopen("log.html", "w"); | |
| relpath = ""; | |
| writeheader(fp); | |
| - writelog(fp, "HEAD"); | |
| + mkdir("commit", 0755); | |
| + writelog(fp, head); | |
| writefooter(fp); | |
| fclose(fp); | |
| /* files for HEAD */ | |
| fp = efopen("files.html", "w"); | |
| writeheader(fp); | |
| - writefiles(fp, "HEAD"); | |
| + writefiles(fp, head, "HEAD"); | |
| writefooter(fp); | |
| fclose(fp); | |