iread README and LICENSE from repo, escape as HTML - stagit-gopher - A git gopher frontend. (mirror) Err bitreich.org 70 hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ bitreich.org 70 1Log /scm/stagit-gopher/log.gph bitreich.org 70 1Files /scm/stagit-gopher/files.gph bitreich.org 70 1Refs /scm/stagit-gopher/refs.gph bitreich.org 70 1Tags /scm/stagit-gopher/tag bitreich.org 70 1README /scm/stagit-gopher/file/README.gph bitreich.org 70 1LICENSE /scm/stagit-gopher/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 46eae58e356dde845fd2dbb156a23f20cbee3fb5 /scm/stagit-gopher/commit/46eae58e356dde845fd2dbb156a23f20cbee3fb5.gph bitreich.org 70 1parent 59912de009c27abec4f2be28d95a157bfedbb0d1 /scm/stagit-gopher/commit/59912de009c27abec4f2be28d95a157bfedbb0d1.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 6 Dec 2015 22:34:56 +0100 Err bitreich.org 70 i Err bitreich.org 70 iread README and LICENSE from repo, escape as HTML Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M urmoms.c | 93 ++++++++++++++++++++++--------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 67 insertions(+), 26 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/urmoms.c b/urmoms.c /scm/stagit-gopher/file/urmoms.c.gph bitreich.org 70 i@@ -28,17 +28,21 @@ efopen(const char *name, const char *flags) Err bitreich.org 70 i return fp; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+/* Escape characters below as HTML 2.0 / XML 1.0. */ Err bitreich.org 70 i void Err bitreich.org 70 i-concat(FILE *fp1, FILE *fp2) Err bitreich.org 70 i+xmlencode(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i { Err bitreich.org 70 i- char buf[BUFSIZ]; Err bitreich.org 70 i- size_t n; Err bitreich.org 70 i- Err bitreich.org 70 i- while ((n = fread(buf, 1, sizeof(buf), fp1))) { Err bitreich.org 70 i- fwrite(buf, 1, n, fp2); Err bitreich.org 70 i- Err bitreich.org 70 i- if (feof(fp1) || ferror(fp1) || ferror(fp2)) Err bitreich.org 70 i- break; Err bitreich.org 70 i+ size_t i; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && i < len; s++, i++) { Err bitreich.org 70 i+ switch(*s) { Err bitreich.org 70 i+ case '<': fputs("<", fp); break; Err bitreich.org 70 i+ case '>': fputs(">", fp); break; Err bitreich.org 70 i+ case '\'': fputs("'", fp); break; Err bitreich.org 70 i+ case '&': fputs("&", fp); break; Err bitreich.org 70 i+ case '"': fputs(""", fp); break; Err bitreich.org 70 i+ default: fputc(*s, fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -64,7 +68,7 @@ xbasename(const char *path) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-printtime(FILE *fp, const git_time * intime, const char *prefix) Err bitreich.org 70 i+printtime(FILE *fp, const git_time *intime, const char *prefix) Err bitreich.org 70 i { Err bitreich.org 70 i struct tm *intm; Err bitreich.org 70 i time_t t; Err bitreich.org 70 i@@ -91,7 +95,43 @@ printtime(FILE *fp, const git_time * intime, const char *prefix) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-printcommit(FILE *fp, git_commit * commit) Err bitreich.org 70 i+printcommit(FILE *fp, git_commit *commit) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ const git_signature *sig; Err bitreich.org 70 i+ char buf[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i+ int i, count; Err bitreich.org 70 i+ const char *scan, *eol; Err bitreich.org 70 i+ Err bitreich.org 70 i+ git_oid_tostr(buf, sizeof(buf), git_commit_id(commit)); Err bitreich.org 70 i+ fprintf(fp, "commit %s\n", buf, buf); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((count = (int)git_commit_parentcount(commit)) > 1) { Err bitreich.org 70 i+ fprintf(fp, "Merge:"); Err bitreich.org 70 i+ for (i = 0; i < count; ++i) { Err bitreich.org 70 i+ git_oid_tostr(buf, 8, git_commit_parent_id(commit, i)); Err bitreich.org 70 i+ fprintf(fp, " %s", buf); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ fprintf(fp, "\n"); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if ((sig = git_commit_author(commit)) != NULL) { Err bitreich.org 70 i+ fprintf(fp, "Author: %s <%s>\n", Err bitreich.org 70 i+ sig->name, sig->name, sig->email); Err bitreich.org 70 i+ printtime(fp, &sig->when, "Date: "); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ fprintf(fp, "\n"); Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (scan = git_commit_message(commit); scan && *scan;) { Err bitreich.org 70 i+ for (eol = scan; *eol && *eol != '\n'; ++eol) /* find eol */ Err bitreich.org 70 i+ ; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fprintf(fp, " %.*s\n", (int) (eol - scan), scan); Err bitreich.org 70 i+ scan = *eol ? eol + 1 : NULL; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ fprintf(fp, "\n"); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+printcommitdiff(FILE *fp, git_commit *commit) Err bitreich.org 70 i { Err bitreich.org 70 i const git_signature *sig; Err bitreich.org 70 i char buf[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i@@ -222,9 +262,16 @@ writebranches(FILE *fp) Err bitreich.org 70 i } Err bitreich.org 70 i #endif Err bitreich.org 70 i Err bitreich.org 70 i+void Err bitreich.org 70 i+writeblobhtml(FILE *fp, const git_blob *blob) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ xmlencode(fp, git_blob_rawcontent(blob), (size_t)git_blob_rawsize(blob)); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i+ git_object *obj = NULL; Err bitreich.org 70 i const git_error *e = NULL; Err bitreich.org 70 i FILE *fp, *fpread; Err bitreich.org 70 i char path[PATH_MAX], *p; Err bitreich.org 70 i@@ -241,7 +288,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i if ((status = git_repository_open(&repo, repodir)) < 0) { Err bitreich.org 70 i e = giterr_last(); Err bitreich.org 70 i fprintf(stderr, "error %d/%d: %s\n", status, e->klass, e->message); Err bitreich.org 70 i- exit(status); Err bitreich.org 70 i+ return status; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* use directory name as name */ Err bitreich.org 70 i@@ -264,34 +311,28 @@ main(int argc, char *argv[]) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* read LICENSE */ Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "LICENSE"); Err bitreich.org 70 i- if ((fpread = fopen(path, "r+b"))) { Err bitreich.org 70 i+ if (!git_revparse_single(&obj, repo, "HEAD:LICENSE")) { Err bitreich.org 70 i fp = efopen("license.html", "w+b"); Err bitreich.org 70 i writeheader(fp); Err bitreich.org 70 i- concat(fpread, fp); Err bitreich.org 70 i- if (ferror(fpread) || ferror(fp)) Err bitreich.org 70 i- err(1, "concat"); Err bitreich.org 70 i+ writeblobhtml(fp, (git_blob *)obj); Err bitreich.org 70 i+ if (ferror(fp)) Err bitreich.org 70 i+ err(1, "fwrite"); Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i- fclose(fpread); Err bitreich.org 70 i Err bitreich.org 70 i haslicense = 1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* read README */ Err bitreich.org 70 i- snprintf(path, sizeof(path), "%s%s%s", Err bitreich.org 70 i- repodir, repodir[strlen(repodir)] == '/' ? "" : "/", "README"); Err bitreich.org 70 i- if ((fpread = fopen(path, "r+b"))) { Err bitreich.org 70 i+ if (!git_revparse_single(&obj, repo, "HEAD:README")) { Err bitreich.org 70 i fp = efopen("readme.html", "w+b"); Err bitreich.org 70 i writeheader(fp); Err bitreich.org 70 i- concat(fpread, fp); Err bitreich.org 70 i- if (ferror(fpread) || ferror(fp)) Err bitreich.org 70 i- err(1, "concat"); Err bitreich.org 70 i+ writeblobhtml(fp, (git_blob *)obj); Err bitreich.org 70 i+ if (ferror(fp)) Err bitreich.org 70 i+ err(1, "fwrite"); Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i- fclose(fpread); Err bitreich.org 70 i Err bitreich.org 70 i hasreadme = 1; Err bitreich.org 70 i } Err bitreich.org 70 .