irewrite writefiles, now works with bare repos - 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 75cba4e6fd3b32d5477312f0174f01d830a2d341 /scm/stagit-gopher/commit/75cba4e6fd3b32d5477312f0174f01d830a2d341.gph bitreich.org 70 1parent 09e1377c68cc2a9930c9a9f9c936120dbd0d7981 /scm/stagit-gopher/commit/09e1377c68cc2a9930c9a9f9c936120dbd0d7981.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 20 Dec 2015 20:42:53 +0100 Err bitreich.org 70 i Err bitreich.org 70 irewrite writefiles, now works with bare repos Err bitreich.org 70 i Err bitreich.org 70 idont use the index but get the tree by the last commit id (revparse HEAD). Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M urmoms.c | 102 +++++++++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 76 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@@ -561,21 +561,14 @@ 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 git_index_entry *entry) Err bitreich.org 70 i+writeblob(git_object *obj, const char *filename, git_off_t filesize) Err bitreich.org 70 i { Err bitreich.org 70 i char fpath[PATH_MAX]; Err bitreich.org 70 i- char ref[PATH_MAX]; Err bitreich.org 70 i char tmp[PATH_MAX] = ""; Err bitreich.org 70 i char *p; 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(fpath, sizeof(fpath), "file/%s.html", entry->path); Err bitreich.org 70 i- snprintf(ref, sizeof(ref), "HEAD:%s", entry->path); Err bitreich.org 70 i- Err bitreich.org 70 i- if (git_revparse_single(&obj, repo, ref)) Err bitreich.org 70 i- return 1; Err bitreich.org 70 i- Err bitreich.org 70 i+ snprintf(fpath, sizeof(fpath), "file/%s.html", filename); Err bitreich.org 70 i if (mkdirp(dirname(fpath))) Err bitreich.org 70 i return 1; Err bitreich.org 70 i Err bitreich.org 70 i@@ -589,7 +582,11 @@ writeblob(const git_index_entry *entry) Err bitreich.org 70 i Err bitreich.org 70 i fp = efopen(fpath, "w"); Err bitreich.org 70 i writeheader(fp); Err bitreich.org 70 i- fprintf(fp, "

%s (%" PRIu32 "b)


", entry->path, entry->file_size); Err bitreich.org 70 i+ fputs("

", fp); Err bitreich.org 70 i+ xmlencode(fp, filename, strlen(filename)); Err bitreich.org 70 i+ fprintf(fp, " (%" PRIu32 "b)", filesize); Err bitreich.org 70 i+ fputs("


", fp); Err bitreich.org 70 i+ Err bitreich.org 70 i if (git_blob_is_binary((git_blob *)obj)) { Err bitreich.org 70 i fprintf(fp, "

Binary file

\n"); Err bitreich.org 70 i } else { Err bitreich.org 70 i@@ -597,7 +594,6 @@ writeblob(const git_index_entry *entry) 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- git_object_free(obj); Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i Err bitreich.org 70 i@@ -607,35 +603,89 @@ writeblob(const git_index_entry *entry) 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+writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i { Err bitreich.org 70 i- const git_index_entry *entry; Err bitreich.org 70 i- git_index *index; Err bitreich.org 70 i+ const git_tree_entry *entry = NULL; Err bitreich.org 70 i+ const char *filename; Err bitreich.org 70 i+ char filepath[PATH_MAX]; Err bitreich.org 70 i+ git_object *obj = NULL; Err bitreich.org 70 i+ git_off_t filesize; Err bitreich.org 70 i size_t count, i; Err bitreich.org 70 i+ int ret; Err bitreich.org 70 i Err bitreich.org 70 i- fputs("\n" Err bitreich.org 70 i- "\n" Err bitreich.org 70 i- "\n", fp); Err bitreich.org 70 i+ count = git_tree_entrycount(tree); Err bitreich.org 70 i+ for (i = 0; i < count; i++) { Err bitreich.org 70 i+ if (!(entry = git_tree_entry_byindex(tree, i))) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i Err bitreich.org 70 i- git_repository_index(&index, repo); Err bitreich.org 70 i- count = git_index_entrycount(index); Err bitreich.org 70 i+ filename = git_tree_entry_name(entry); Err bitreich.org 70 i+ if (git_tree_entry_to_object(&obj, repo, entry)) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ switch (git_object_type(obj)) { Err bitreich.org 70 i+ case GIT_OBJ_BLOB: Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case GIT_OBJ_TREE: Err bitreich.org 70 i+ ret = writefilestree(fp, (git_tree *)obj, filename); Err bitreich.org 70 i+ git_object_free(obj); Err bitreich.org 70 i+ if (ret) Err bitreich.org 70 i+ return ret; Err bitreich.org 70 i+ continue; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ git_object_free(obj); Err bitreich.org 70 i+ continue; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (path[0]) { Err bitreich.org 70 i+ snprintf(filepath, sizeof(filepath), "%s/%s", path, filename); Err bitreich.org 70 i+ filename = filepath; Err bitreich.org 70 i+ } 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+ filesize = git_blob_rawsize((git_blob *)obj); Err bitreich.org 70 i Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i- writeblob(entry); Err bitreich.org 70 i+ writeblob(obj, filename, filesize); Err bitreich.org 70 i } 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+int Err bitreich.org 70 i+writefiles(FILE *fp) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ const git_oid *id; Err bitreich.org 70 i+ git_tree *tree = NULL; Err bitreich.org 70 i+ git_object *obj = NULL; Err bitreich.org 70 i+ git_commit *commit = NULL; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fputs("
ModeNameSize
", fp); Err bitreich.org 70 i- fprintf(fp, "%u", entry->mode); /* TODO: fancy print, like: "-rw-r--r--" */ Err bitreich.org 70 i+ /* TODO: fancy print, like: "-rw-r--r--" */ Err bitreich.org 70 i+ fprintf(fp, "%u", git_tree_entry_filemode_raw(entry)); Err bitreich.org 70 i fprintf(fp, "path, strlen(entry->path)); Err bitreich.org 70 i+ xmlencode(fp, filename, strlen(filename)); 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+ xmlencode(fp, filename, strlen(filename)); Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%" PRIu32, entry->file_size); Err bitreich.org 70 i+ fprintf(fp, "%" PRIu32, filesize); Err bitreich.org 70 i fputs("
\n" Err bitreich.org 70 i+ "\n" Err bitreich.org 70 i+ "\n", fp); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (git_revparse_single(&obj, repo, "HEAD")) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ id = git_object_id(obj); Err bitreich.org 70 i+ if (git_commit_lookup(&commit, repo, id)) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ if (git_commit_tree(&tree, commit)) { Err bitreich.org 70 i+ git_commit_free(commit); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ git_commit_free(commit); Err bitreich.org 70 i+ Err bitreich.org 70 i+ writefilestree(fp, tree, ""); 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 fputs("
ModeNameSize
", fp); Err bitreich.org 70 i Err bitreich.org 70 i return 0; Err bitreich.org 70 .