Introduction
Introduction Statistics Contact Development Disclaimer Help
tWrite blobs to files/ - stagit - static git page generator
git clone git://src.adamsgaard.dk/stagit
Log
Files
Refs
README
LICENSE
---
commit 27397b310d2aea881f5064103bb449464329b00c
parent 43a7d4dc2ce288119e15232f2312e19c820d98c4
Author: Eivind Uggedal <[email protected]>
Date: Wed, 9 Dec 2015 22:46:00 +0000
Write blobs to files/
This is work in progress:
- relpath is broken under files/
- mkdirp was stolen from sbase
- strlcpy wrapper might be needed
Diffstat:
M urmoms.c | 101 ++++++++++++++++++++---------…
1 file changed, 65 insertions(+), 36 deletions(-)
---
diff --git a/urmoms.c b/urmoms.c
t@@ -1,6 +1,7 @@
#include <sys/stat.h>
#include <err.h>
+#include <errno.h>
#include <inttypes.h>
#include <libgen.h>
#include <limits.h>
t@@ -123,9 +124,9 @@ writeheader(FILE *fp)
fprintf(fp, "<a href=\"%slog.html\">Log</a> | ", relpath);
fprintf(fp, "<a href=\"%sfiles.html\">Files</a>", relpath);
if (hasreadme)
- fprintf(fp, " | <a href=\"%sreadme.html\">README</a>", relpath…
+ fprintf(fp, " | <a href=\"%sfile/README.html\">README</a>", re…
if (haslicense)
- fprintf(fp, " | <a href=\"%slicense.html\">LICENSE</a>", relpa…
+ fprintf(fp, " | <a href=\"%sfile/LICENSE.html\">LICENSE</a>", …
fputs("</td></tr></table>\n<hr/><div id=\"content\">\n", fp);
return 0;
t@@ -187,6 +188,25 @@ xbasename(const char *path)
return b;
}
+int
+mkdirp(const char *path)
+{
+ char tmp[PATH_MAX], *p;
+
+ strlcpy(tmp, path, sizeof(tmp)); /* TODO: bring in libutil? */
+ for (p = tmp + (tmp[0] == '/'); *p; p++) {
+ if (*p != '/')
+ continue;
+ *p = '\0';
+ if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EE…
+ return -1;
+ *p = '/';
+ }
+ if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST)
+ return -1;
+ return 0;
+}
+
void
printtimeformat(FILE *fp, const git_time *intime, const char *fmt)
{
t@@ -311,7 +331,7 @@ printshowfile(struct commitinfo *ci)
}
delta = git_patch_get_delta(patch);
- fprintf(fp, "<b>diff --git a/<a href=\"%sfile/%s\">%s</a> b/<a…
+ fprintf(fp, "<b>diff --git a/<a href=\"%sfile/%s.html\">%s</a>…
relpath, delta->old_file.path, delta->old_file.path,
relpath, delta->new_file.path, delta->new_file.path);
t@@ -509,6 +529,39 @@ writeatom(FILE *fp)
}
int
+writeblob(const char *path)
+{
+ char htmlpath[PATH_MAX];
+ char refpath[PATH_MAX];
+ char *relp;
+ git_object *obj = NULL;
+ FILE *fp;
+
+ snprintf(htmlpath, sizeof(htmlpath), "file/%s.html", path);
+ snprintf(refpath, sizeof(refpath), "HEAD:%s", path);
+
+ if (git_revparse_single(&obj, repo, refpath))
+ return 1; /* TODO: handle error */
+
+ mkdirp(dirname(htmlpath));
+
+ relpath = "../"; /* TODO: dynamic relpath based on number of /'s */
+
+ fp = efopen(htmlpath, "w+b");
+ writeheader(fp);
+ fputs("<pre>\n", fp);
+ writeblobhtml(fp, (git_blob *)obj);
+ if (ferror(fp))
+ err(1, "fwrite");
+ git_object_free(obj);
+ fputs("</pre>\n", fp);
+ writefooter(fp);
+ fclose(fp);
+ relpath = "";
+ return 0;
+}
+
+int
writefiles(FILE *fp)
{
const git_index_entry *entry;
t@@ -524,15 +577,18 @@ writefiles(FILE *fp)
for (i = 0; i < count; i++) {
entry = git_index_get_byindex(index, i);
+
fputs("<tr><td>", fp);
fprintf(fp, "%u", entry->mode); /* TODO: fancy print, like: "-…
fprintf(fp, "</td><td><a href=\"%sfile/", relpath);
xmlencode(fp, entry->path, strlen(entry->path));
- fputs("\">", fp);
+ fputs(".html\">", fp);
xmlencode(fp, entry->path, strlen(entry->path));
fputs("</a></td><td>", fp);
fprintf(fp, "%" PRIu64, entry->file_size);
fputs("</td></tr>\n", fp);
+
+ writeblob(entry->path);
}
fputs("</tbody></table>", fp);
t@@ -543,7 +599,7 @@ writefiles(FILE *fp)
int
main(int argc, char *argv[])
{
- git_object *obj_license = NULL, *obj_readme = NULL;
+ git_object *obj = NULL;
const git_error *e = NULL;
FILE *fp, *fpread;
char path[PATH_MAX], *p;
t@@ -584,38 +640,11 @@ main(int argc, char *argv[])
}
/* check LICENSE */
- haslicense = !git_revparse_single(&obj_license, repo, "HEAD:LICENSE");
+ haslicense = !git_revparse_single(&obj, repo, "HEAD:LICENSE");
+ git_object_free(obj);
/* check README */
- hasreadme = !git_revparse_single(&obj_readme, repo, "HEAD:README");
-
- /* read LICENSE */
- if (haslicense) {
- fp = efopen("license.html", "w+b");
- writeheader(fp);
- fputs("<pre>\n", fp);
- writeblobhtml(fp, (git_blob *)obj_license);
- git_object_free(obj_license);
- if (ferror(fp))
- err(1, "fwrite");
- fputs("</pre>\n", fp);
- writefooter(fp);
-
- fclose(fp);
- }
-
- /* read README */
- if (hasreadme) {
- fp = efopen("readme.html", "w+b");
- writeheader(fp);
- fputs("<pre>\n", fp);
- writeblobhtml(fp, (git_blob *)obj_readme);
- git_object_free(obj_readme);
- if (ferror(fp))
- err(1, "fwrite");
- fputs("</pre>\n", fp);
- writefooter(fp);
- fclose(fp);
- }
+ hasreadme = !git_revparse_single(&obj, repo, "HEAD:README");
+ git_object_free(obj);
fp = efopen("log.html", "w+b");
writeheader(fp);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.