irework code, "cache" commit data in struct commitinfo - 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 9c1862ccdacddee9b8a324a8d4a67d18c5ab7d93 /scm/stagit-gopher/commit/9c1862ccdacddee9b8a324a8d4a67d18c5ab7d93.gph bitreich.org 70 1parent 1b4f30ba2e66133139f225cb536ba2c6ed62ff36 /scm/stagit-gopher/commit/1b4f30ba2e66133139f225cb536ba2c6ed62ff36.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Mon, 7 Dec 2015 23:00:07 +0100 Err bitreich.org 70 i Err bitreich.org 70 irework code, "cache" commit data in struct commitinfo Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M urmoms.c | 353 +++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 175 insertions(+), 178 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@@ -11,6 +11,28 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include "git2.h" Err bitreich.org 70 i Err bitreich.org 70 i+struct commitinfo { Err bitreich.org 70 i+ const git_oid *id; Err bitreich.org 70 i+ Err bitreich.org 70 i+ char oid[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i+ char parentoid[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i+ Err bitreich.org 70 i+ const git_signature *author; Err bitreich.org 70 i+ const char *summary; Err bitreich.org 70 i+ const char *msg; Err bitreich.org 70 i+ Err bitreich.org 70 i+ git_diff_stats *stats; Err bitreich.org 70 i+ git_diff *diff; Err bitreich.org 70 i+ git_commit *commit; Err bitreich.org 70 i+ git_commit *parent; Err bitreich.org 70 i+ git_tree *commit_tree; Err bitreich.org 70 i+ git_tree *parent_tree; Err bitreich.org 70 i+ Err bitreich.org 70 i+ size_t addcount; Err bitreich.org 70 i+ size_t delcount; Err bitreich.org 70 i+ size_t filecount; Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i static git_repository *repo; Err bitreich.org 70 i Err bitreich.org 70 i static const char *relpath = ""; Err bitreich.org 70 i@@ -20,6 +42,69 @@ static char name[255]; Err bitreich.org 70 i static char description[255]; Err bitreich.org 70 i static int hasreadme, haslicense; Err bitreich.org 70 i Err bitreich.org 70 i+void Err bitreich.org 70 i+commitinfo_free(struct commitinfo *ci) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ if (!ci) Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* TODO: print error ? */ Err bitreich.org 70 i+ git_diff_stats_free(ci->stats); Err bitreich.org 70 i+ git_diff_free(ci->diff); Err bitreich.org 70 i+ git_commit_free(ci->commit); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+struct commitinfo * Err bitreich.org 70 i+commitinfo_getbyoid(const git_oid *id) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct commitinfo *ci; Err bitreich.org 70 i+ int error; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (!(ci = calloc(1, sizeof(struct commitinfo)))) Err bitreich.org 70 i+ err(1, "calloc"); Err bitreich.org 70 i+ Err bitreich.org 70 i+ ci->id = id; Err bitreich.org 70 i+ if (git_commit_lookup(&(ci->commit), repo, id)) Err bitreich.org 70 i+ goto err; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* TODO: show tags when commit has it */ Err bitreich.org 70 i+ git_oid_tostr(ci->oid, sizeof(ci->oid), git_commit_id(ci->commit)); Err bitreich.org 70 i+ git_oid_tostr(ci->parentoid, sizeof(ci->parentoid), git_commit_parent_id(ci->commit, 0)); Err bitreich.org 70 i+ Err bitreich.org 70 i+ ci->author = git_commit_author(ci->commit); Err bitreich.org 70 i+ ci->summary = git_commit_summary(ci->commit); Err bitreich.org 70 i+ ci->msg = git_commit_message(ci->commit); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((error = git_commit_tree(&(ci->commit_tree), ci->commit))) Err bitreich.org 70 i+ goto err; /* TODO: handle error */ Err bitreich.org 70 i+ if (!(error = git_commit_parent(&(ci->parent), ci->commit, 0))) { Err bitreich.org 70 i+ if ((error = git_commit_tree(&(ci->parent_tree), ci->parent))) Err bitreich.org 70 i+ goto err; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ ci->parent = NULL; Err bitreich.org 70 i+ ci->parent_tree = NULL; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((error = git_diff_tree_to_tree(&(ci->diff), repo, ci->parent_tree, ci->commit_tree, NULL))) Err bitreich.org 70 i+ goto err; Err bitreich.org 70 i+ if (git_diff_get_stats(&(ci->stats), ci->diff)) Err bitreich.org 70 i+ goto err; Err bitreich.org 70 i+ Err bitreich.org 70 i+ ci->addcount = git_diff_stats_insertions(ci->stats); Err bitreich.org 70 i+ ci->delcount = git_diff_stats_deletions(ci->stats); Err bitreich.org 70 i+ ci->filecount = git_diff_stats_files_changed(ci->stats); Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* TODO: show tag when commit has it */ Err bitreich.org 70 i+ Err bitreich.org 70 i+ return ci; Err bitreich.org 70 i+ Err bitreich.org 70 i+err: Err bitreich.org 70 i+ commitinfo_free(ci); Err bitreich.org 70 i+ free(ci); Err bitreich.org 70 i+ Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i int Err bitreich.org 70 i writeheader(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -156,22 +241,23 @@ printtime(FILE *fp, const git_time *intime) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-printcommit(FILE *fp, git_commit *commit) Err bitreich.org 70 i+writeblobhtml(FILE *fp, const git_blob *blob) 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 *msg; 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+void Err bitreich.org 70 i+printcommit(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i+{ Err bitreich.org 70 i /* TODO: show tag when commit has it */ 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", Err bitreich.org 70 i- relpath, buf, buf); Err bitreich.org 70 i+ relpath, ci->oid, ci->oid); Err bitreich.org 70 i Err bitreich.org 70 i- if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)) && buf[0]) 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, buf, buf); Err bitreich.org 70 i+ relpath, ci->parentoid, ci->parentoid); Err bitreich.org 70 i Err bitreich.org 70 i+#if 0 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@@ -181,81 +267,66 @@ printcommit(FILE *fp, git_commit *commit) Err bitreich.org 70 i } Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i- if ((sig = git_commit_author(commit)) != NULL) { Err bitreich.org 70 i+#endif Err bitreich.org 70 i+ if (ci->author) { Err bitreich.org 70 i fprintf(fp, "Author: "); Err bitreich.org 70 i- xmlencode(fp, sig->name, strlen(sig->name)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i fprintf(fp, " <email, strlen(sig->email)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i fputs("\">", fp); Err bitreich.org 70 i- xmlencode(fp, sig->email, strlen(sig->email)); 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- printtime(fp, &sig->when); 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 fputc('\n', fp); Err bitreich.org 70 i Err bitreich.org 70 i- if ((msg = git_commit_message(commit))) Err bitreich.org 70 i- xmlencode(fp, msg, strlen(msg)); Err bitreich.org 70 i+ if (ci->msg) Err bitreich.org 70 i+ xmlencode(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i+ Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-printshowfile(git_commit *commit) Err bitreich.org 70 i+printshowfile(struct commitinfo *ci) Err bitreich.org 70 i { Err bitreich.org 70 i- const git_diff_delta *delta = NULL; Err bitreich.org 70 i- const git_diff_hunk *hunk = NULL; Err bitreich.org 70 i- const git_diff_line *line = NULL; Err bitreich.org 70 i- git_commit *parent = NULL; Err bitreich.org 70 i- git_tree *commit_tree = NULL, *parent_tree = NULL; Err bitreich.org 70 i- git_patch *patch = NULL; Err bitreich.org 70 i- git_diff *diff = NULL; Err bitreich.org 70 i- git_diff_stats *diffstats = NULL; Err bitreich.org 70 i- git_buf diffstatsbuf; Err bitreich.org 70 i+ const git_diff_delta *delta; Err bitreich.org 70 i+ const git_diff_hunk *hunk; Err bitreich.org 70 i+ const git_diff_line *line; Err bitreich.org 70 i+ git_patch *patch; Err bitreich.org 70 i+ git_buf statsbuf; Err bitreich.org 70 i+ size_t ndeltas, nhunks, nhunklines; Err bitreich.org 70 i FILE *fp; Err bitreich.org 70 i- size_t i, j, k, ndeltas, nhunks = 0, nhunklines = 0; Err bitreich.org 70 i- char buf[GIT_OID_HEXSZ + 1], path[PATH_MAX]; Err bitreich.org 70 i- int error; Err bitreich.org 70 i+ size_t i, j, k; Err bitreich.org 70 i+ char path[PATH_MAX]; 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- if (!buf[0]) Err bitreich.org 70 i- return; Err bitreich.org 70 i- snprintf(path, sizeof(path), "commit/%s.html", buf); Err bitreich.org 70 i+ snprintf(path, sizeof(path), "commit/%s.html", ci->oid); 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 return; Err bitreich.org 70 i Err bitreich.org 70 i- memset(&diffstatsbuf, 0, sizeof(diffstatsbuf)); Err bitreich.org 70 i- Err bitreich.org 70 i fp = efopen(path, "w+b"); Err bitreich.org 70 i writeheader(fp); Err bitreich.org 70 i- printcommit(fp, commit); Err bitreich.org 70 i+ printcommit(fp, ci); Err bitreich.org 70 i Err bitreich.org 70 i- if ((error = git_commit_tree(&commit_tree, commit))) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- if (!(error = git_commit_parent(&parent, commit, 0))) { Err bitreich.org 70 i- if ((error = git_commit_tree(&parent_tree, parent))) Err bitreich.org 70 i- goto err; /* TODO: handle error */ Err bitreich.org 70 i- } else { Err bitreich.org 70 i- parent = NULL; Err bitreich.org 70 i- parent_tree = NULL; Err bitreich.org 70 i- } Err bitreich.org 70 i- if ((error = git_diff_tree_to_tree(&diff, repo, parent_tree, commit_tree, NULL))) Err bitreich.org 70 i- goto err; Err bitreich.org 70 i+ memset(&statsbuf, 0, sizeof(statsbuf)); Err bitreich.org 70 i Err bitreich.org 70 i /* diff stat */ Err bitreich.org 70 i- if (!git_diff_get_stats(&diffstats, diff)) { Err bitreich.org 70 i- if (!git_diff_stats_to_buf(&diffstatsbuf, diffstats, Err bitreich.org 70 i+ if (ci->stats) { Err bitreich.org 70 i+ if (!git_diff_stats_to_buf(&statsbuf, ci->stats, Err bitreich.org 70 i GIT_DIFF_STATS_FULL | GIT_DIFF_STATS_SHORT, 80)) { Err bitreich.org 70 i- fprintf(fp, "Diffstat:\n"); Err bitreich.org 70 i- fputs(diffstatsbuf.ptr, fp); Err bitreich.org 70 i+ if (statsbuf.ptr && statsbuf.ptr[0]) { Err bitreich.org 70 i+ fprintf(fp, "Diffstat:\n"); Err bitreich.org 70 i+ fputs(statsbuf.ptr, fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i- git_diff_stats_free(diffstats); Err bitreich.org 70 i } Err bitreich.org 70 i+ Err bitreich.org 70 i fputs("
", fp); Err bitreich.org 70 i Err bitreich.org 70 i- ndeltas = git_diff_num_deltas(diff); Err bitreich.org 70 i+ ndeltas = git_diff_num_deltas(ci->diff); Err bitreich.org 70 i for (i = 0; i < ndeltas; i++) { Err bitreich.org 70 i- if (git_patch_from_diff(&patch, diff, i)) { Err bitreich.org 70 i+ if (git_patch_from_diff(&patch, ci->diff, i)) { Err bitreich.org 70 i git_patch_free(patch); Err bitreich.org 70 i break; /* TODO: handle error */ Err bitreich.org 70 i } Err bitreich.org 70 i@@ -265,26 +336,6 @@ printshowfile(git_commit *commit) 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- /* TODO: "new file mode ". */ Err bitreich.org 70 i- /* TODO: add indexfrom...indexto + flags */ Err bitreich.org 70 i- Err bitreich.org 70 i-#if 0 Err bitreich.org 70 i- fputs("--- ", fp); Err bitreich.org 70 i- if (delta->status & GIT_DELTA_ADDED) Err bitreich.org 70 i- fputs("/dev/null", fp); Err bitreich.org 70 i- else Err bitreich.org 70 i- fprintf(fp, "a/%s", Err bitreich.org 70 i- relpath, delta->old_file.path, delta->old_file.path); Err bitreich.org 70 i- Err bitreich.org 70 i- fputs("\n+++ ", fp); Err bitreich.org 70 i- if (delta->status & GIT_DELTA_DELETED) Err bitreich.org 70 i- fputs("/dev/null", fp); Err bitreich.org 70 i- else Err bitreich.org 70 i- fprintf(fp, "b/%s", Err bitreich.org 70 i- relpath, delta->new_file.path, delta->new_file.path); Err bitreich.org 70 i- fputs("\n", fp); Err bitreich.org 70 i-#endif 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 fputs("Binary files differ\n", fp); Err bitreich.org 70 i@@ -317,32 +368,20 @@ printshowfile(git_commit *commit) Err bitreich.org 70 i } Err bitreich.org 70 i git_patch_free(patch); Err bitreich.org 70 i } Err bitreich.org 70 i- git_diff_free(diff); Err bitreich.org 70 i+ git_buf_free(&statsbuf); Err bitreich.org 70 i Err bitreich.org 70 i writefooter(fp); Err bitreich.org 70 i fclose(fp); Err bitreich.org 70 i return; Err bitreich.org 70 i- Err bitreich.org 70 i-err: Err bitreich.org 70 i- git_buf_free(&diffstatsbuf); Err bitreich.org 70 i- fclose(fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i writelog(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i+ struct commitinfo *ci; Err bitreich.org 70 i git_revwalk *w = NULL; Err bitreich.org 70 i git_oid id; Err bitreich.org 70 i- git_commit *commit = NULL; Err bitreich.org 70 i- const git_signature *author; Err bitreich.org 70 i- git_diff_stats *stats = NULL; Err bitreich.org 70 i- git_tree *commit_tree = NULL, *parent_tree = NULL; Err bitreich.org 70 i- git_commit *parent = NULL; Err bitreich.org 70 i- git_diff *diff = NULL; Err bitreich.org 70 i- size_t nfiles, ndel, nadd; Err bitreich.org 70 i- const char *summary; Err bitreich.org 70 i- char buf[GIT_OID_HEXSZ + 1]; Err bitreich.org 70 i- int error, ret = 0; Err bitreich.org 70 i+ int ret = 0; Err bitreich.org 70 i Err bitreich.org 70 i mkdir("commit", 0755); Err bitreich.org 70 i Err bitreich.org 70 i@@ -355,67 +394,37 @@ writelog(FILE *fp) 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 (git_commit_lookup(&commit, repo, &id)) { Err bitreich.org 70 i- ret = 1; Err bitreich.org 70 i- goto err; Err bitreich.org 70 i- } Err bitreich.org 70 i- if ((error = git_commit_tree(&commit_tree, commit))) Err bitreich.org 70 i- goto errdiff; /* TODO: handle error */ Err bitreich.org 70 i- if (!(error = git_commit_parent(&parent, commit, 0))) { Err bitreich.org 70 i- if ((error = git_commit_tree(&parent_tree, parent))) Err bitreich.org 70 i- goto errdiff; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- parent = NULL; Err bitreich.org 70 i- parent_tree = NULL; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- if ((error = git_diff_tree_to_tree(&diff, repo, parent_tree, commit_tree, NULL))) Err bitreich.org 70 i- goto errdiff; Err bitreich.org 70 i- if (git_diff_get_stats(&stats, diff)) Err bitreich.org 70 i- goto errdiff; 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- Err bitreich.org 70 i- ndel = git_diff_stats_deletions(stats); Err bitreich.org 70 i- nadd = git_diff_stats_insertions(stats); Err bitreich.org 70 i- nfiles = git_diff_stats_files_changed(stats); Err bitreich.org 70 i- Err bitreich.org 70 i- /* TODO: show tag when commit has it */ Err bitreich.org 70 i- Err bitreich.org 70 i- /* TODO: collect stats per author and make stats.html page */ Err bitreich.org 70 i- author = git_commit_author(commit); Err bitreich.org 70 i- summary = git_commit_summary(commit); Err bitreich.org 70 i+ if (!(ci = commitinfo_getbyoid(&id))) Err bitreich.org 70 i+ break; Err bitreich.org 70 i Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- if (summary) { Err bitreich.org 70 i- fprintf(fp, "", relpath, buf); Err bitreich.org 70 i- xmlencode(fp, summary, strlen(summary)); 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- if (author) Err bitreich.org 70 i- xmlencode(fp, author->name, strlen(author->name)); 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+ Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- printtime(fp, &author->when); Err bitreich.org 70 i+ if (ci->author) Err bitreich.org 70 i+ printtime(fp, &(ci->author->when)); Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "%zu", nfiles); 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", nadd); 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", ndel); Err bitreich.org 70 i+ fprintf(fp, "-%zu", ci->delcount); Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i relpath = "../"; Err bitreich.org 70 i- printshowfile(commit); Err bitreich.org 70 i+ printshowfile(ci); Err bitreich.org 70 i Err bitreich.org 70 i-errdiff: Err bitreich.org 70 i- /* TODO: print error ? */ Err bitreich.org 70 i- git_diff_stats_free(stats); Err bitreich.org 70 i- git_diff_free(diff); Err bitreich.org 70 i- git_commit_free(commit); Err bitreich.org 70 i+ commitinfo_free(ci); Err bitreich.org 70 i } Err bitreich.org 70 i fprintf(fp, ""); Err bitreich.org 70 i-err: Err bitreich.org 70 i+ Err bitreich.org 70 i git_revwalk_free(w); Err bitreich.org 70 i relpath = ""; Err bitreich.org 70 i Err bitreich.org 70 i@@ -423,38 +432,28 @@ err: Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-printcommitatom(FILE *fp, git_commit *commit) Err bitreich.org 70 i+printcommitatom(FILE *fp, struct commitinfo *ci) 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 *msg, *summary; Err bitreich.org 70 i- Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i- /* TODO: show tag when commit has it */ Err bitreich.org 70 i- git_oid_tostr(buf, sizeof(buf), git_commit_id(commit)); Err bitreich.org 70 i- fprintf(fp, "%s\n", buf); Err bitreich.org 70 i- Err bitreich.org 70 i- sig = git_commit_author(commit); Err bitreich.org 70 i- Err bitreich.org 70 i- if (sig) { Err bitreich.org 70 i+ fprintf(fp, "%s\n", ci->oid); Err bitreich.org 70 i+ if (ci->author) { Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- printtimez(fp, &sig->when); Err bitreich.org 70 i+ printtimez(fp, &(ci->author->when)); Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i- Err bitreich.org 70 i- if ((summary = git_commit_summary(commit))) { Err bitreich.org 70 i+ if (ci->summary) { Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- xmlencode(fp, summary, strlen(summary)); 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 Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- fprintf(fp, "commit %s\n", buf); Err bitreich.org 70 i- if (git_oid_tostr(buf, sizeof(buf), git_commit_parent_id(commit, 0)) && buf[0]) Err bitreich.org 70 i- fprintf(fp, "parent %s\n", buf); Err bitreich.org 70 i+ fprintf(fp, "commit %s\n", ci->oid); Err bitreich.org 70 i+ if (ci->parentoid[0]) Err bitreich.org 70 i+ fprintf(fp, "parent %s\n", ci->parentoid); Err bitreich.org 70 i Err bitreich.org 70 i+#if 0 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@@ -463,25 +462,26 @@ printcommitatom(FILE *fp, git_commit *commit) Err bitreich.org 70 i } Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i+#endif Err bitreich.org 70 i Err bitreich.org 70 i- if (sig) { Err bitreich.org 70 i+ if (ci->author) { Err bitreich.org 70 i fprintf(fp, "Author: "); Err bitreich.org 70 i- xmlencode(fp, sig->name, strlen(sig->name)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i fprintf(fp, " <"); Err bitreich.org 70 i- xmlencode(fp, sig->email, strlen(sig->email)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i fprintf(fp, ">\nDate: "); Err bitreich.org 70 i- printtime(fp, &sig->when); Err bitreich.org 70 i+ printtime(fp, &(ci->author->when)); Err bitreich.org 70 i } Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i Err bitreich.org 70 i- if ((msg = git_commit_message(commit))) Err bitreich.org 70 i- xmlencode(fp, msg, strlen(msg)); Err bitreich.org 70 i+ if (ci->msg) Err bitreich.org 70 i+ xmlencode(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i fputs("\n\n", fp); Err bitreich.org 70 i- if (sig) { Err bitreich.org 70 i+ if (ci->author) { Err bitreich.org 70 i fputs("", fp); Err bitreich.org 70 i- xmlencode(fp, sig->name, strlen(sig->name)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i- xmlencode(fp, sig->email, strlen(sig->email)); Err bitreich.org 70 i+ xmlencode(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i fputs("\n\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i@@ -490,9 +490,9 @@ printcommitatom(FILE *fp, git_commit *commit) Err bitreich.org 70 i int Err bitreich.org 70 i writeatom(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i+ struct commitinfo *ci; Err bitreich.org 70 i git_revwalk *w = NULL; Err bitreich.org 70 i git_oid id; Err bitreich.org 70 i- git_commit *c = NULL; Err bitreich.org 70 i size_t i, m = 100; /* max */ Err bitreich.org 70 i Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i@@ -507,10 +507,10 @@ writeatom(FILE *fp) Err bitreich.org 70 i git_revwalk_push_head(w); Err bitreich.org 70 i Err bitreich.org 70 i for (i = 0; i < m && !git_revwalk_next(&id, w); i++) { Err bitreich.org 70 i- if (git_commit_lookup(&c, repo, &id)) Err bitreich.org 70 i- return 1; /* TODO: error */ Err bitreich.org 70 i- printcommitatom(fp, c); Err bitreich.org 70 i- git_commit_free(c); Err bitreich.org 70 i+ if (!(ci = commitinfo_getbyoid(&id))) Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ printcommitatom(fp, ci); Err bitreich.org 70 i+ commitinfo_free(ci); Err bitreich.org 70 i } Err bitreich.org 70 i git_revwalk_free(w); Err bitreich.org 70 i Err bitreich.org 70 i@@ -522,14 +522,16 @@ writeatom(FILE *fp) Err bitreich.org 70 i int Err bitreich.org 70 i writefiles(FILE *fp) Err bitreich.org 70 i { Err bitreich.org 70 i- git_index *index; Err bitreich.org 70 i const git_index_entry *entry; Err bitreich.org 70 i+ git_index *index; Err bitreich.org 70 i size_t count, i; Err bitreich.org 70 i Err bitreich.org 70 i- git_repository_index(&index, repo); 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+ git_repository_index(&index, repo); Err bitreich.org 70 i count = git_index_entrycount(index); Err bitreich.org 70 i- fputs("
ModeNameSize
\n\n\n", 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@@ -543,17 +545,12 @@ writefiles(FILE *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+ Err bitreich.org 70 i fputs("
ModeNameSize
", fp); 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-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 .