iWrite blobs to files/ - 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 27397b310d2aea881f5064103bb449464329b00c /scm/stagit-gopher/commit/27397b310d2aea881f5064103bb449464329b00c.gph bitreich.org 70 1parent 43a7d4dc2ce288119e15232f2312e19c820d98c4 /scm/stagit-gopher/commit/43a7d4dc2ce288119e15232f2312e19c820d98c4.gph bitreich.org 70 hAuthor: Eivind Uggedal URL:mailto:eivind@uggedal.com bitreich.org 70 iDate: Wed, 9 Dec 2015 22:46:00 +0000 Err bitreich.org 70 i Err bitreich.org 70 iWrite blobs to files/ Err bitreich.org 70 i Err bitreich.org 70 iThis is work in progress: Err bitreich.org 70 i Err bitreich.org 70 i- relpath is broken under files/ Err bitreich.org 70 i- mkdirp was stolen from sbase Err bitreich.org 70 i- strlcpy wrapper might be needed Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M urmoms.c | 101 ++++++++++++++++++++----------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 65 insertions(+), 36 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@@ -1,6 +1,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -123,9 +124,9 @@ writeheader(FILE *fp) Err bitreich.org 70 i fprintf(fp, "Log | ", relpath); Err bitreich.org 70 i fprintf(fp, "Files", relpath); Err bitreich.org 70 i if (hasreadme) Err bitreich.org 70 i- fprintf(fp, " | README", relpath); Err bitreich.org 70 i+ fprintf(fp, " | README", relpath); Err bitreich.org 70 i if (haslicense) Err bitreich.org 70 i- fprintf(fp, " | LICENSE", relpath); Err bitreich.org 70 i+ fprintf(fp, " | LICENSE", relpath); Err bitreich.org 70 i fputs("\n
\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i return 0; Err bitreich.org 70 i@@ -187,6 +188,25 @@ xbasename(const char *path) Err bitreich.org 70 i return b; 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+ char tmp[PATH_MAX], *p; Err bitreich.org 70 i+ Err bitreich.org 70 i+ strlcpy(tmp, path, sizeof(tmp)); /* TODO: bring in libutil? */ Err bitreich.org 70 i+ for (p = tmp + (tmp[0] == '/'); *p; p++) { Err bitreich.org 70 i+ if (*p != '/') Err bitreich.org 70 i+ continue; Err bitreich.org 70 i+ *p = '\0'; Err bitreich.org 70 i+ if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ *p = '/'; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i void Err bitreich.org 70 i printtimeformat(FILE *fp, const git_time *intime, const char *fmt) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -311,7 +331,7 @@ printshowfile(struct commitinfo *ci) Err bitreich.org 70 i } Err bitreich.org 70 i 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+ fprintf(fp, "diff --git a/%s b/%s\n", Err bitreich.org 70 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 Err bitreich.org 70 i@@ -509,6 +529,39 @@ writeatom(FILE *fp) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i+writeblob(const char *path) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ char htmlpath[PATH_MAX]; Err bitreich.org 70 i+ char refpath[PATH_MAX]; Err bitreich.org 70 i+ char *relp; Err bitreich.org 70 i+ git_object *obj = NULL; Err bitreich.org 70 i+ FILE *fp; Err bitreich.org 70 i+ Err bitreich.org 70 i+ snprintf(htmlpath, sizeof(htmlpath), "file/%s.html", path); Err bitreich.org 70 i+ snprintf(refpath, sizeof(refpath), "HEAD:%s", path); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (git_revparse_single(&obj, repo, refpath)) Err bitreich.org 70 i+ return 1; /* TODO: handle error */ Err bitreich.org 70 i+ Err bitreich.org 70 i+ mkdirp(dirname(htmlpath)); Err bitreich.org 70 i+ Err bitreich.org 70 i+ relpath = "../"; /* TODO: dynamic relpath based on number of /'s */ Err bitreich.org 70 i+ Err bitreich.org 70 i+ fp = efopen(htmlpath, "w+b"); Err bitreich.org 70 i+ writeheader(fp); Err bitreich.org 70 i+ fputs("
\n", fp);	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+        git_object_free(obj);	Err	bitreich.org	70
i+        fputs("
\n", fp); Err bitreich.org 70 i+ writefooter(fp); Err bitreich.org 70 i+ fclose(fp); Err bitreich.org 70 i+ relpath = ""; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i writefiles(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i const git_index_entry *entry; Err bitreich.org 70 i@@ -524,15 +577,18 @@ writefiles(FILE *fp) Err bitreich.org 70 i Err bitreich.org 70 i for (i = 0; i < count; i++) { Err bitreich.org 70 i entry = git_index_get_byindex(index, i); Err bitreich.org 70 i+ Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i fprintf(fp, "%u", entry->mode); /* TODO: fancy print, like: "-rw-r--r--" */ Err bitreich.org 70 i fprintf(fp, "path, strlen(entry->path)); Err bitreich.org 70 i- fputs("\">", fp); Err bitreich.org 70 i+ fputs(".html\">", fp); Err bitreich.org 70 i xmlencode(fp, entry->path, strlen(entry->path)); Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i fprintf(fp, "%" PRIu64, entry->file_size); Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i+ Err bitreich.org 70 i+ writeblob(entry->path); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i@@ -543,7 +599,7 @@ writefiles(FILE *fp) 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_license = NULL, *obj_readme = NULL; 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@@ -584,38 +640,11 @@ main(int argc, char *argv[]) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* check LICENSE */ Err bitreich.org 70 i- haslicense = !git_revparse_single(&obj_license, repo, "HEAD:LICENSE"); Err bitreich.org 70 i+ haslicense = !git_revparse_single(&obj, repo, "HEAD:LICENSE"); Err bitreich.org 70 i+ git_object_free(obj); Err bitreich.org 70 i /* check README */ Err bitreich.org 70 i- hasreadme = !git_revparse_single(&obj_readme, repo, "HEAD:README"); Err bitreich.org 70 i- Err bitreich.org 70 i- /* read LICENSE */ Err bitreich.org 70 i- if (haslicense) { Err bitreich.org 70 i- fp = efopen("license.html", "w+b"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- fputs("
\n", fp);	Err	bitreich.org	70
i-                writeblobhtml(fp, (git_blob *)obj_license);	Err	bitreich.org	70
i-                git_object_free(obj_license);	Err	bitreich.org	70
i-                if (ferror(fp))	Err	bitreich.org	70
i-                        err(1, "fwrite");	Err	bitreich.org	70
i-                fputs("
\n", fp); Err bitreich.org 70 i- writefooter(fp); Err bitreich.org 70 i- Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- /* read README */ Err bitreich.org 70 i- if (hasreadme) { Err bitreich.org 70 i- fp = efopen("readme.html", "w+b"); Err bitreich.org 70 i- writeheader(fp); Err bitreich.org 70 i- fputs("
\n", fp);	Err	bitreich.org	70
i-                writeblobhtml(fp, (git_blob *)obj_readme);	Err	bitreich.org	70
i-                git_object_free(obj_readme);	Err	bitreich.org	70
i-                if (ferror(fp))	Err	bitreich.org	70
i-                        err(1, "fwrite");	Err	bitreich.org	70
i-                fputs("
\n", 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+ hasreadme = !git_revparse_single(&obj, repo, "HEAD:README"); Err bitreich.org 70 i+ git_object_free(obj); Err bitreich.org 70 i Err bitreich.org 70 i fp = efopen("log.html", "w+b"); Err bitreich.org 70 i writeheader(fp); Err bitreich.org 70 .