igopher version (WIP) - 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 caa55f2bb419bd2f5327a779fe9afe13f7b4ed38 /scm/stagit-gopher/commit/caa55f2bb419bd2f5327a779fe9afe13f7b4ed38.gph bitreich.org 70 1parent 54a8a7c1533ce60e3cbe8539bf1e801225d0fabd /scm/stagit-gopher/commit/54a8a7c1533ce60e3cbe8539bf1e801225d0fabd.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 11 Jun 2017 18:42:03 +0200 Err bitreich.org 70 i Err bitreich.org 70 igopher version (WIP) Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M stagit.c | 329 ++++++++++++++++--------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 165 insertions(+), 164 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/stagit.c b/stagit.c /scm/stagit-gopher/file/stagit.c.gph bitreich.org 70 i@@ -248,6 +248,56 @@ xmlencode(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+/* Escape characters in text in geomyidae .gph format */ Err bitreich.org 70 i+void Err bitreich.org 70 i+gphtext(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t i, n = 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && i < len; i++) { Err bitreich.org 70 i+ if (s[i] == '\n') Err bitreich.org 70 i+ n = 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* escape 't' at the start of a line */ Err bitreich.org 70 i+ if (!n && s[i] == 't') { Err bitreich.org 70 i+ fputc('t', fp); Err bitreich.org 70 i+ n = 1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (s[i] == '\t') { Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ fputc(s[i], fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ n++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Escape characters in links in geomyidae .gph format */ Err bitreich.org 70 i+void Err bitreich.org 70 i+gphlink(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t i; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && i < len; i++) { Err bitreich.org 70 i+ switch (s[i]) { Err bitreich.org 70 i+ case '\n': Err bitreich.org 70 i+ /* in this context replace newline with space */ Err bitreich.org 70 i+ fputc(' ', fp); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case '\r': /* ignore CR */ Err bitreich.org 70 i+ case '|': /* ignore separators for now */ Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case '\t': Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ fputc(s[i], fp); Err bitreich.org 70 i+ break; 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 int Err bitreich.org 70 i mkdirp(const char *path) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -318,111 +368,102 @@ printtimeshort(FILE *fp, const git_time *intime) Err bitreich.org 70 i void Err bitreich.org 70 i writeheader(FILE *fp, const char *title) Err bitreich.org 70 i { Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "\n\n" Err bitreich.org 70 i- "\n" Err bitreich.org 70 i- "", fp); Err bitreich.org 70 i- xmlencode(fp, title, strlen(title)); Err bitreich.org 70 i+ gphtext(fp, title, strlen(title)); Err bitreich.org 70 i if (title[0] && strippedname[0]) Err bitreich.org 70 i fputs(" - ", fp); Err bitreich.org 70 i- xmlencode(fp, strippedname, strlen(strippedname)); Err bitreich.org 70 i+ gphtext(fp, strippedname, strlen(strippedname)); Err bitreich.org 70 i if (description[0]) Err bitreich.org 70 i fputs(" - ", fp); Err bitreich.org 70 i- xmlencode(fp, description, strlen(description)); Err bitreich.org 70 i- fprintf(fp, "\n\n", relpath); Err bitreich.org 70 i- fprintf(fp, "\n", Err bitreich.org 70 i- name, relpath); Err bitreich.org 70 i- fprintf(fp, "\n", relpath); Err bitreich.org 70 i- fputs("\n\n", fp); Err bitreich.org 70 i+ gphtext(fp, description, strlen(description)); Err bitreich.org 70 i+ fputs("\n", fp); Err bitreich.org 70 i if (cloneurl[0]) { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs("[1|git clone ", fp); Err bitreich.org 70 i+ gphlink(fp, cloneurl, strlen(cloneurl)); Err bitreich.org 70 i+ fputs("|", fp); Err bitreich.org 70 i+ gphlink(fp, cloneurl, strlen(cloneurl)); Err bitreich.org 70 i+ fputs("|server|port]\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i- fputs("
", fp); Err bitreich.org 70 i- fprintf(fp, "\"\"", Err bitreich.org 70 i- relpath, relpath); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, strippedname, strlen(strippedname)); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, description, strlen(description)); Err bitreich.org 70 i- fputs("
git clone ", fp); Err bitreich.org 70 i- xmlencode(fp, cloneurl, strlen(cloneurl)); Err bitreich.org 70 i- fputs("
\n", fp); Err bitreich.org 70 i- fprintf(fp, "Log | ", relpath); Err bitreich.org 70 i- fprintf(fp, "Files | ", relpath); Err bitreich.org 70 i- fprintf(fp, "Refs", relpath); Err bitreich.org 70 i+ fprintf(fp, "[1|Log|%slog.gph|server|port]\n", relpath); Err bitreich.org 70 i+ fprintf(fp, "[1|Files|%sfiles.gph|server|port]\n", relpath); Err bitreich.org 70 i+ fprintf(fp, "[1|Refs|%srefs.gph|server|port]\n", relpath); Err bitreich.org 70 i if (hassubmodules) Err bitreich.org 70 i- fprintf(fp, " | Submodules", relpath); Err bitreich.org 70 i+ fprintf(fp, "[1|Submodules|%sfile/.gitmodules.gph|server|port]\n", relpath); Err bitreich.org 70 i if (hasreadme) Err bitreich.org 70 i- fprintf(fp, " | README", relpath); Err bitreich.org 70 i+ fprintf(fp, "[1|README|%sfile/README.gph|server|port]\n", relpath); Err bitreich.org 70 i if (haslicense) Err bitreich.org 70 i- fprintf(fp, " | LICENSE", relpath); Err bitreich.org 70 i- fputs("
\n
\n
\n", fp); Err bitreich.org 70 i+ fprintf(fp, "[1|LICENSE|%sfile/LICENSE.gph|server|port]\n", relpath); Err bitreich.org 70 i+ fputs("===\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i writefooter(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i- fputs("
\n\n\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i-writeblobhtml(FILE *fp, const git_blob *blob) Err bitreich.org 70 i+writeblobgph(FILE *fp, const git_blob *blob) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t n = 0, i, prev; Err bitreich.org 70 i- const char *nfmt = "%7d "; Err bitreich.org 70 i+ size_t n = 0, i, j, prev; Err bitreich.org 70 i+ const char *nfmt = "%8d "; Err bitreich.org 70 i const char *s = git_blob_rawcontent(blob); Err bitreich.org 70 i git_off_t len = git_blob_rawsize(blob); Err bitreich.org 70 i Err bitreich.org 70 i- fputs("
\n", fp);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if (len > 0) {	Err	bitreich.org	70
i                 for (i = 0, prev = 0; i < (size_t)len; i++) {	Err	bitreich.org	70
i                         if (s[i] != '\n')	Err	bitreich.org	70
i                                 continue;	Err	bitreich.org	70
i                         n++;	Err	bitreich.org	70
i                         fprintf(fp, nfmt, n, n, n);	Err	bitreich.org	70
i-                        xmlencode(fp, &s[prev], i - prev + 1);	Err	bitreich.org	70
i+                        for (j = prev; s[j] && j <= i; j++) {	Err	bitreich.org	70
i+                                if (s[j] == '\t')	Err	bitreich.org	70
i+                                        fputs("        ", fp);	Err	bitreich.org	70
i+                                else	Err	bitreich.org	70
i+                                        fputc(s[j], fp);	Err	bitreich.org	70
i+                        }	Err	bitreich.org	70
i                         prev = i + 1;	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i                 /* trailing data */	Err	bitreich.org	70
i                 if ((len - prev) > 0) {	Err	bitreich.org	70
i                         n++;	Err	bitreich.org	70
i                         fprintf(fp, nfmt, n, n, n);	Err	bitreich.org	70
i-                        xmlencode(fp, &s[prev], len - prev);	Err	bitreich.org	70
i+                        for (j = prev; s[j] && j < len - prev; j++) {	Err	bitreich.org	70
i+                                if (s[j] == '\t')	Err	bitreich.org	70
i+                                        fputs("        ", fp);	Err	bitreich.org	70
i+                                else	Err	bitreich.org	70
i+                                        fputc(s[j], 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-        fputs("
\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i return n; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i printcommit(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(fp, "commit %s\n", Err bitreich.org 70 i- relpath, ci->oid, ci->oid); Err bitreich.org 70 i+ fprintf(fp, "[1|commit %s|%scommit/%s.gph|server|port]\n", Err bitreich.org 70 i+ ci->oid, relpath, ci->oid); Err bitreich.org 70 i Err bitreich.org 70 i if (ci->parentoid[0]) Err bitreich.org 70 i- fprintf(fp, "parent %s\n", Err bitreich.org 70 i- relpath, ci->parentoid, ci->parentoid); Err bitreich.org 70 i+ fprintf(fp, "[1|parent %s|%scommit/%s.gph|server|port]\n", Err bitreich.org 70 i+ ci->parentoid, relpath, ci->parentoid); Err bitreich.org 70 i Err bitreich.org 70 i if (ci->author) { Err bitreich.org 70 i- fputs("Author: ", fp); Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fputs(" <author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs("\">", fp); Err bitreich.org 70 i- xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs(">\nDate: ", fp); Err bitreich.org 70 i+ /* TODO: fix author email link to redirect as mailto: */ Err bitreich.org 70 i+ fputs("[1|Author: ", fp); Err bitreich.org 70 i+ gphlink(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i+ fputs(" <", fp); Err bitreich.org 70 i+ gphlink(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i+ fputs(">|mailto:", fp); Err bitreich.org 70 i+ gphlink(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i+ fputs("|server|port]\n", fp); Err bitreich.org 70 i+ fputs("Date: ", fp); Err bitreich.org 70 i printtime(fp, &(ci->author->when)); Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i if (ci->msg) { Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i- xmlencode(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i+ gphtext(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -446,19 +487,19 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i ci->ndeltas > 1000 || Err bitreich.org 70 i ci->addcount > 100000 || Err bitreich.org 70 i ci->delcount > 100000) { Err bitreich.org 70 i- fputs("Diff is too large, output suppressed.\n", fp); Err bitreich.org 70 i+ fputs("\nDiff is too large, output suppressed.\n", fp); Err bitreich.org 70 i return; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* diff stat */ Err bitreich.org 70 i- fputs("Diffstat:\n", fp); Err bitreich.org 70 i+ fputs("Diffstat:\n", fp); Err bitreich.org 70 i for (i = 0; i < ci->ndeltas; i++) { Err bitreich.org 70 i delta = git_patch_get_delta(ci->deltas[i]->patch); Err bitreich.org 70 i- fprintf(fp, "\n", fp); Err bitreich.org 70 i+ fputs("\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i- fprintf(fp, "
", i); Err bitreich.org 70 i- xmlencode(fp, delta->old_file.path, strlen(delta->old_file.path)); Err bitreich.org 70 i+ /* TODO: make file linkable */ Err bitreich.org 70 i+ gphtext(fp, delta->old_file.path, strlen(delta->old_file.path)); Err bitreich.org 70 i if (strcmp(delta->old_file.path, delta->new_file.path)) { Err bitreich.org 70 i- fputs(" -> ", fp); Err bitreich.org 70 i- xmlencode(fp, delta->new_file.path, strlen(delta->new_file.path)); Err bitreich.org 70 i+ fputs(" -> ", fp); Err bitreich.org 70 i+ gphtext(fp, delta->new_file.path, strlen(delta->new_file.path)); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i add = ci->deltas[i]->addcount; Err bitreich.org 70 i@@ -474,26 +515,26 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i memset(&linestr, '+', add); Err bitreich.org 70 i memset(&linestr[add], '-', del); Err bitreich.org 70 i Err bitreich.org 70 i- fprintf(fp, " | %zu", Err bitreich.org 70 i+ fprintf(fp, " | %zu ", Err bitreich.org 70 i ci->deltas[i]->addcount + ci->deltas[i]->delcount); Err bitreich.org 70 i fwrite(&linestr, 1, add, fp); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i fwrite(&linestr[add], 1, del, fp); Err bitreich.org 70 i- fputs("
%zu file%s changed, %zu insertion%s(+), %zu deletion%s(-)\n",	Err	bitreich.org	70
i+        fprintf(fp, "\n%zu file%s changed, %zu insertion%s(+), %zu deletion%s(-)\n",	Err	bitreich.org	70
i                 ci->filecount, ci->filecount == 1 ? "" : "s",	Err	bitreich.org	70
i                 ci->addcount,  ci->addcount  == 1 ? "" : "s",	Err	bitreich.org	70
i                 ci->delcount,  ci->delcount  == 1 ? "" : "s");	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        fputs("
", fp); Err bitreich.org 70 i+ fputs("===\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i for (i = 0; i < ci->ndeltas; i++) { Err bitreich.org 70 i patch = ci->deltas[i]->patch; Err bitreich.org 70 i delta = git_patch_get_delta(patch); Err bitreich.org 70 i- fprintf(fp, "diff --git a/%s b/%s\n", Err bitreich.org 70 i- i, relpath, delta->old_file.path, delta->old_file.path, Err bitreich.org 70 i- relpath, delta->new_file.path, delta->new_file.path); Err bitreich.org 70 i+ /* NOTE: only links to new path */ Err bitreich.org 70 i+ fprintf(fp, "[1|diff --git a/%s b/%s", Err bitreich.org 70 i+ delta->old_file.path, delta->new_file.path); Err bitreich.org 70 i+ fprintf(fp, "|%sfile/%s.gph|server|port]\n", relpath, delta->new_file.path); Err bitreich.org 70 i Err bitreich.org 70 i /* check binary data */ Err bitreich.org 70 i if (delta->flags & GIT_DIFF_FLAG_BINARY) { Err bitreich.org 70 i@@ -506,24 +547,18 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i if (git_patch_get_hunk(&hunk, &nhunklines, patch, j)) Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i- fprintf(fp, "", i, j, i, j); Err bitreich.org 70 i- xmlencode(fp, hunk->header, hunk->header_len); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ gphtext(fp, hunk->header, hunk->header_len); Err bitreich.org 70 i Err bitreich.org 70 i for (k = 0; ; k++) { Err bitreich.org 70 i if (git_patch_get_line_in_hunk(&line, patch, j, k)) Err bitreich.org 70 i break; Err bitreich.org 70 i if (line->old_lineno == -1) Err bitreich.org 70 i- fprintf(fp, "+", Err bitreich.org 70 i- i, j, k, i, j, k); Err bitreich.org 70 i+ fputs("+", fp); Err bitreich.org 70 i else if (line->new_lineno == -1) Err bitreich.org 70 i- fprintf(fp, "-", Err bitreich.org 70 i- i, j, k, i, j, k); Err bitreich.org 70 i+ fputs("-", fp); Err bitreich.org 70 i else Err bitreich.org 70 i- fputc(' ', fp); Err bitreich.org 70 i- xmlencode(fp, line->content, line->content_len); Err bitreich.org 70 i- if (line->old_lineno == -1 || line->new_lineno == -1) Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i+ gphtext(fp, line->content, line->content_len); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -532,25 +567,20 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i void Err bitreich.org 70 i writelogline(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i { Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs("[1|", fp); Err bitreich.org 70 i if (ci->author) Err bitreich.org 70 i printtimeshort(fp, &(ci->author->when)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- if (ci->summary) { Err bitreich.org 70 i- fprintf(fp, "", relpath, ci->oid); Err bitreich.org 70 i- xmlencode(fp, ci->summary, strlen(ci->summary)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i+ if (ci->summary) Err bitreich.org 70 i+ gphlink(fp, ci->summary, strlen(ci->summary)); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (ci->author) Err bitreich.org 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%zu", ci->filecount); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "+%zu", ci->addcount); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "-%zu", ci->delcount); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i+ gphlink(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i+ fprintf(fp, " %zu", ci->filecount); Err bitreich.org 70 i+ fprintf(fp, " +%zu", ci->addcount); Err bitreich.org 70 i+ fprintf(fp, " -%zu", ci->delcount); Err bitreich.org 70 i+ fprintf(fp, "|%scommit/%s.gph", relpath, ci->oid); Err bitreich.org 70 i+ fputs("|server|port]\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i@@ -569,8 +599,6 @@ writelog(FILE *fp, const git_oid *oid) Err bitreich.org 70 i git_revwalk_simplify_first_parent(w); Err bitreich.org 70 i Err bitreich.org 70 i while (!git_revwalk_next(&id, w)) { Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i- Err bitreich.org 70 i if (cachefile && !memcmp(&id, &lastoid, sizeof(id))) Err bitreich.org 70 i break; Err bitreich.org 70 i if (!(ci = commitinfo_getbyoid(&id))) Err bitreich.org 70 i@@ -580,19 +608,15 @@ writelog(FILE *fp, const git_oid *oid) Err bitreich.org 70 i if (cachefile) Err bitreich.org 70 i writelogline(wcachefp, ci); Err bitreich.org 70 i Err bitreich.org 70 i- relpath = "../"; Err bitreich.org 70 i- Err bitreich.org 70 i- r = snprintf(path, sizeof(path), "commit/%s.html", ci->oid); Err bitreich.org 70 i+ r = snprintf(path, sizeof(path), "commit/%s.gph", ci->oid); Err bitreich.org 70 i if (r == -1 || (size_t)r >= sizeof(path)) Err bitreich.org 70 i- errx(1, "path truncated: 'commit/%s.html'", ci->oid); Err bitreich.org 70 i+ errx(1, "path truncated: 'commit/%s.gph'", ci->oid); Err bitreich.org 70 i Err bitreich.org 70 i /* check if file exists if so skip it */ Err bitreich.org 70 i if (access(path, F_OK)) { Err bitreich.org 70 i fpfile = efopen(path, "w"); Err bitreich.org 70 i writeheader(fpfile, ci->summary); Err bitreich.org 70 i- fputs("
", fpfile);	Err	bitreich.org	70
i                         printshowfile(fpfile, ci);	Err	bitreich.org	70
i-                        fputs("
\n", fpfile); Err bitreich.org 70 i writefooter(fpfile); Err bitreich.org 70 i fclose(fpfile); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -600,8 +624,6 @@ writelog(FILE *fp, const git_oid *oid) Err bitreich.org 70 i } Err bitreich.org 70 i git_revwalk_free(w); Err bitreich.org 70 i Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i- Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -626,7 +648,7 @@ printcommitatom(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i xmlencode(fp, ci->summary, strlen(ci->summary)); Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i- fprintf(fp, "", Err bitreich.org 70 i+ fprintf(fp, "", Err bitreich.org 70 i ci->oid); Err bitreich.org 70 i Err bitreich.org 70 i if (ci->author) { Err bitreich.org 70 i@@ -694,7 +716,6 @@ int Err bitreich.org 70 i writeblob(git_object *obj, const char *fpath, const char *filename, git_off_t filesize) Err bitreich.org 70 i { Err bitreich.org 70 i char tmp[PATH_MAX] = "", *d; Err bitreich.org 70 i- const char *p; Err bitreich.org 70 i int lc = 0; Err bitreich.org 70 i FILE *fp; Err bitreich.org 70 i Err bitreich.org 70 i@@ -705,31 +726,22 @@ writeblob(git_object *obj, const char *fpath, const char *filename, git_off_t fi Err bitreich.org 70 i if (mkdirp(d)) Err bitreich.org 70 i return -1; Err bitreich.org 70 i Err bitreich.org 70 i- for (p = fpath, tmp[0] = '\0'; *p; p++) { Err bitreich.org 70 i- if (*p == '/' && strlcat(tmp, "../", sizeof(tmp)) >= sizeof(tmp)) Err bitreich.org 70 i- errx(1, "path truncated: '../%s'", tmp); Err bitreich.org 70 i- } Err bitreich.org 70 i- relpath = tmp; Err bitreich.org 70 i- Err bitreich.org 70 i fp = efopen(fpath, "w"); Err bitreich.org 70 i writeheader(fp, filename); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i- xmlencode(fp, filename, strlen(filename)); Err bitreich.org 70 i- fprintf(fp, " (%juB)", (uintmax_t)filesize); Err bitreich.org 70 i- fputs("


", fp); Err bitreich.org 70 i+ gphtext(fp, filename, strlen(filename)); Err bitreich.org 70 i+ fprintf(fp, " (%juB)\n", (uintmax_t)filesize); Err bitreich.org 70 i+ fputs("===\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i if (git_blob_is_binary((git_blob *)obj)) { Err bitreich.org 70 i- fputs("

Binary file.

\n", fp); Err bitreich.org 70 i+ fputs("Binary file.\n", fp); Err bitreich.org 70 i } else { Err bitreich.org 70 i- lc = writeblobhtml(fp, (git_blob *)obj); Err bitreich.org 70 i+ lc = writeblobgph(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 } Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i- Err bitreich.org 70 i return lc; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -794,10 +806,10 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i return -1; Err bitreich.org 70 i joinpath(entrypath, sizeof(entrypath), path, entryname); Err bitreich.org 70 i Err bitreich.org 70 i- r = snprintf(filepath, sizeof(filepath), "file/%s.html", Err bitreich.org 70 i+ r = snprintf(filepath, sizeof(filepath), "file/%s.gph", Err bitreich.org 70 i entrypath); Err bitreich.org 70 i if (r == -1 || (size_t)r >= sizeof(filepath)) Err bitreich.org 70 i- errx(1, "path truncated: 'file/%s.html'", entrypath); Err bitreich.org 70 i+ errx(1, "path truncated: 'file/%s.gph'", entrypath); Err bitreich.org 70 i Err bitreich.org 70 i if (!git_tree_entry_to_object(&obj, repo, entry)) { Err bitreich.org 70 i switch (git_object_type(obj)) { Err bitreich.org 70 i@@ -819,23 +831,24 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i filesize = git_blob_rawsize((git_blob *)obj); Err bitreich.org 70 i lc = writeblob(obj, filepath, entryname, filesize); Err bitreich.org 70 i Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs("[1|", fp); Err bitreich.org 70 i fputs(filemode(git_tree_entry_filemode(entry)), fp); Err bitreich.org 70 i- fprintf(fp, "", relpath, filepath); Err bitreich.org 70 i- xmlencode(fp, entrypath, strlen(entrypath)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i+ gphlink(fp, entrypath, strlen(entrypath)); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (lc > 0) Err bitreich.org 70 i fprintf(fp, "%dL", lc); Err bitreich.org 70 i else Err bitreich.org 70 i fprintf(fp, "%juB", (uintmax_t)filesize); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i+ fprintf(fp, "|%s%s", relpath, filepath); Err bitreich.org 70 i+ fputs("|server|port]\n", fp); Err bitreich.org 70 i git_object_free(obj); Err bitreich.org 70 i } else if (!git_submodule_lookup(&module, repo, entryname)) { Err bitreich.org 70 i- fprintf(fp, "m---------", Err bitreich.org 70 i- relpath); Err bitreich.org 70 i- xmlencode(fp, entrypath, strlen(entrypath)); Err bitreich.org 70 i+ fputs("[1|m--------- ", fp); Err bitreich.org 70 i+ gphlink(fp, entrypath, strlen(entrypath)); Err bitreich.org 70 i+ fprintf(fp, "|%sfile/.gitmodules.gph|server|port]\n", relpath); Err bitreich.org 70 i+ /* NOTE: linecount omitted */ Err bitreich.org 70 i git_submodule_free(module); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -849,17 +862,12 @@ writefiles(FILE *fp, const git_oid *id) Err bitreich.org 70 i git_commit *commit = NULL; Err bitreich.org 70 i int ret = -1; Err bitreich.org 70 i Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "\n\n", fp); Err bitreich.org 70 i+ fputs("Mode Name Size\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i if (!git_commit_lookup(&commit, repo, id) && Err bitreich.org 70 i !git_commit_tree(&tree, commit)) Err bitreich.org 70 i ret = writefilestree(fp, tree, ""); Err bitreich.org 70 i Err bitreich.org 70 i- fputs("
ModeNameSize
", fp); Err bitreich.org 70 i- Err bitreich.org 70 i git_commit_free(commit); Err bitreich.org 70 i git_tree_free(tree); Err bitreich.org 70 i Err bitreich.org 70 i@@ -935,28 +943,21 @@ writerefs(FILE *fp) Err bitreich.org 70 i Err bitreich.org 70 i /* print header if it has an entry (first). */ Err bitreich.org 70 i if (++count == 1) { Err bitreich.org 70 i- fprintf(fp, "

%s

" Err bitreich.org 70 i- "\n" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "\n\n" Err bitreich.org 70 i- "\n", Err bitreich.org 70 i- titles[j], ids[j]); Err bitreich.org 70 i+ gphtext(fp, titles[j], strlen(titles[j])); Err bitreich.org 70 i+ fputs("Name Last commit date Author\n\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i name = git_reference_shorthand(r); Err bitreich.org 70 i Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i- Err bitreich.org 70 i- relpath = "../"; Err bitreich.org 70 i+ fputs("\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i commitinfo_free(ci); Err bitreich.org 70 i git_object_free(obj); Err bitreich.org 70 i@@ -966,7 +967,7 @@ writerefs(FILE *fp) Err bitreich.org 70 i } Err bitreich.org 70 i /* table footer */ Err bitreich.org 70 i if (count) Err bitreich.org 70 i- fputs("
NameLast commit dateAuthor
", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i xmlencode(fp, name, strlen(name)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (ci->author) Err bitreich.org 70 i printtimeshort(fp, &(ci->author->when)); Err bitreich.org 70 i- fputs("", fp); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (ci->author) Err bitreich.org 70 i xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i- fputs("

", fp); Err bitreich.org 70 i+ fputs("\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i err: Err bitreich.org 70 i@@ -987,6 +988,7 @@ usage(char *argv0) Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+/* TODO: add base argument, gopher does not support relative urls, document it too */ 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@@ -1011,6 +1013,10 @@ main(int argc, char *argv[]) Err bitreich.org 70 i if (i + 1 >= argc) Err bitreich.org 70 i usage(argv[0]); Err bitreich.org 70 i cachefile = argv[++i]; Err bitreich.org 70 i+ } else if (argv[i][1] == 'b') { Err bitreich.org 70 i+ if (i + 1 >= argc) Err bitreich.org 70 i+ usage(argv[0]); Err bitreich.org 70 i+ relpath = argv[++i]; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i if (!repodir) Err bitreich.org 70 i@@ -1090,15 +1096,12 @@ main(int argc, char *argv[]) Err bitreich.org 70 i git_object_free(obj); Err bitreich.org 70 i Err bitreich.org 70 i /* log for HEAD */ Err bitreich.org 70 i- fp = efopen("log.html", "w"); Err bitreich.org 70 i- relpath = ""; Err bitreich.org 70 i+ fp = efopen("log.gph", "w"); Err bitreich.org 70 i mkdir("commit", 0755); Err bitreich.org 70 i writeheader(fp, "Log"); Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "" Err bitreich.org 70 i- "\n\n", fp); Err bitreich.org 70 i+ fputs("Date " Err bitreich.org 70 i+ "Commit message " Err bitreich.org 70 i+ "Author Files + -\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i if (cachefile) { Err bitreich.org 70 i /* read from cache file (does not need to exist) */ Err bitreich.org 70 i@@ -1121,7 +1124,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i writelog(fp, head); Err bitreich.org 70 i Err bitreich.org 70 i if (rcachefp) { Err bitreich.org 70 i- /* append previous log to log.html and the new cache */ Err bitreich.org 70 i+ /* append previous log to log.gph and the new cache */ Err bitreich.org 70 i while (!feof(rcachefp)) { Err bitreich.org 70 i n = fread(buf, 1, sizeof(buf), rcachefp); Err bitreich.org 70 i if (ferror(rcachefp)) Err bitreich.org 70 i@@ -1137,13 +1140,11 @@ main(int argc, char *argv[]) Err bitreich.org 70 i if (head) Err bitreich.org 70 i writelog(fp, head); Err bitreich.org 70 i } Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("
DateCommit messageAuthorFiles+-
", fp); Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i Err bitreich.org 70 i /* files for HEAD */ Err bitreich.org 70 i- fp = efopen("files.html", "w"); Err bitreich.org 70 i+ fp = efopen("files.gph", "w"); Err bitreich.org 70 i writeheader(fp, "Files"); Err bitreich.org 70 i if (head) Err bitreich.org 70 i writefiles(fp, head); Err bitreich.org 70 i@@ -1151,7 +1152,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i Err bitreich.org 70 i /* summary page with branches and tags */ Err bitreich.org 70 i- fp = efopen("refs.html", "w"); Err bitreich.org 70 i+ fp = efopen("refs.gph", "w"); Err bitreich.org 70 i writeheader(fp, "Refs"); Err bitreich.org 70 i writerefs(fp); Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 .