stagit

custom fork of stagit
Index Commits Files Refs README LICENSE
commit d77d972007d6f996ab4667b9dbbd1e241304c61e
parent 23fdbb0c8cd8f875e678c17ef79919a22d704c7a
Author: Eivind Uggedal <eivind@uggedal.com>
Date:   Thu, 10 Dec 2015 18:13:08 +0000

file page improvements

- header with filename and size
- handle binary files
- small style changes

Diffstat:
Murmoms.c | 36+++++++++++++++++++++---------------
1 file changed, 21 insertions(+), 15 deletions(-)
diff --git 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);