file page improvements
authorEivind Uggedal <eivind@uggedal.com>
Thu, 10 Dec 2015 18:13:08 +0000 (18:13 +0000)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Thu, 10 Dec 2015 18:50:03 +0000 (19:50 +0100)
- header with filename and size
- handle binary files
- small style changes

urmoms.c

index 71ce3a0fbeb59e30bde881dd9dbfd10e276f1426..fa4794701153a43d119d4000d1f6647792b21a86 100644 (file)
--- a/urmoms.c
+++ b/urmoms.c
@@ -529,31 +529,37 @@ writeatom(FILE *fp)
 }
 
 int
-writeblob(const char *path)
+writeblob(git_index_entry *entry)
 {
-       char htmlpath[PATH_MAX];
-       char refpath[PATH_MAX];
+       char fpath[PATH_MAX];
+       char ref[PATH_MAX];
        git_object *obj = NULL;
        FILE *fp;
 
-       snprintf(htmlpath, sizeof(htmlpath), "file/%s.html", path);
-       snprintf(refpath, sizeof(refpath), "HEAD:%s", path);
+       snprintf(fpath, sizeof(fpath), "file/%s.html", entry->path);
+       snprintf(ref, sizeof(ref), "HEAD:%s", entry->path);
 
-       if (git_revparse_single(&obj, repo, refpath))
-               return 1; /* TODO: handle error */
+       if (git_revparse_single(&obj, repo, ref))
+               return 1;
 
-       mkdirp(dirname(htmlpath));
+       if (mkdirp(dirname(fpath)))
+               return 1;
 
        relpath = "../"; /* TODO: dynamic relpath based on number of /'s */
 
-       fp = efopen(htmlpath, "w+b");
+       fp = efopen(fpath, "w+b");
        writeheader(fp);
-       fputs("<pre>\n", fp);
-       writeblobhtml(fp, (git_blob *)obj);
-       if (ferror(fp))
-               err(1, "fwrite");
+       fprintf(fp, "<p>%s (%" PRIu64 "b)</p><hr/>", entry->path, entry->file_size);
+       if (git_blob_is_binary((git_blob *)obj)) {
+               fprintf(fp, "<p>Binary file</p>\n");
+       } else {
+               fputs("<pre>\n", fp);
+               writeblobhtml(fp, (git_blob *)obj);
+               if (ferror(fp))
+                       err(1, "fwrite");
+               fputs("</pre>\n", fp);
+       }
        git_object_free(obj);
-       fputs("</pre>\n", fp);
        writefooter(fp);
        fclose(fp);
 
@@ -589,7 +595,7 @@ writefiles(FILE *fp)
                fprintf(fp, "%" PRIu64, entry->file_size);
                fputs("</td></tr>\n", fp);
 
-               writeblob(entry->path);
+               writeblob(entry);
        }
 
        fputs("</tbody></table>", fp);