stagit-gopher

static git page generator for gopher
git clone git://git.2f30.org/stagit-gopher.git
Log | Files | Refs | README | LICENSE

commit 7294b10b65ff8a91bd330108af98441ec4a05307
parent 415e3fdd55b2ecdf2f35680694362a4b35fd1a05
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sat Dec  5 20:43:29 +0100

add README and LICENSE file-detection

Diffstat:
TODO | 2+-
urmoms.c | 62+++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/TODO b/TODO @@ -3,7 +3,7 @@ - add raw link to latest files: raw/file... - add summary page? - add diffstat to diff page? + and - lines summary? -- escape < > ' " etc, maybe even use CDATA ? +- escape HTML: < > ' " etc, maybe even use CDATA ? - shorter date format for logs.html page. - speed up generating files. - for files link to the commit but make the filename a link anchor. diff --git a/urmoms.c b/urmoms.c @@ -1,16 +1,20 @@ #include <err.h> +#include <limits.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include "git2.h" +static git_repository *repo; + static const char *relpath = ""; static const char *name = ""; static const char *description = ""; static const char *repodir = "."; -static git_repository *repo; +static int hasreadme, haslicense; FILE * efopen(const char *name, const char *flags) @@ -102,8 +106,10 @@ writeheader(FILE *fp) fprintf(fp, "<a href=\"%slog.html\">Log</a> |", relpath); fprintf(fp, "<a href=\"%sfiles.html\">Files</a>| ", relpath); fprintf(fp, "<a href=\"%sstats.html\">Stats</a> | ", relpath); - fprintf(fp, "<a href=\"%sreadme.html\">README</a> | ", relpath); - fprintf(fp, "<a href=\"%slicense.html\">LICENSE</a>", relpath); + if (hasreadme) + fprintf(fp, "<a href=\"%sreadme.html\">README</a> | ", relpath); + if (haslicense) + fprintf(fp, "<a href=\"%slicense.html\">LICENSE</a>", relpath); fprintf(fp, "</center><hr/><pre>"); return 0; @@ -181,12 +187,27 @@ writebranches(FILE *fp) } #endif +void +concat(FILE *fp1, FILE *fp2) +{ + char buf[BUFSIZ]; + size_t n; + + while ((n = fread(buf, 1, sizeof(buf), fp1))) { + fwrite(buf, 1, n, fp2); + + if (feof(fp1) || ferror(fp1) || ferror(fp2)) + break; + } +} + int main(int argc, char *argv[]) { - int status; const git_error *e = NULL; - FILE *fp; + FILE *fp, *fpread; + char path[PATH_MAX]; + int status; if (argc != 2) { fprintf(stderr, "%s <repodir>\n", argv[0]); @@ -202,6 +223,37 @@ main(int argc, char *argv[]) exit(status); } + snprintf(path, sizeof(path), "%s%s%s", + repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "LICENSE"); + if ((fpread = fopen(path, "r+b"))) { + fp = efopen("license.html", "w+b"); + writeheader(fp); + concat(fpread, fp); + if (ferror(fpread) || ferror(fp)) + err(1, "concat"); + writefooter(fp); + + fclose(fp); + fclose(fpread); + + haslicense = 1; + } + + snprintf(path, sizeof(path), "%s%s%s", + repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "README"); + if ((fpread = fopen(path, "r+b"))) { + fp = efopen("readme.html", "w+b"); + writeheader(fp); + concat(fpread, fp); + if (ferror(fpread) || ferror(fp)) + err(1, "concat"); + writefooter(fp); + fclose(fp); + fclose(fpread); + + hasreadme = 1; + } + fp = efopen("logs.html", "w+b"); writeheader(fp); writelog(fp);