itMerge remote-tracking branch 'upstream/master' - stagit - [fork] customized build of stagit, the static git page generator Err adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/stagit URL:git://src.adamsgaard.dk/stagit adamsgaard.dk 70 1Log /src/stagit/log.gph adamsgaard.dk 70 1Files /src/stagit/files.gph adamsgaard.dk 70 1Refs /src/stagit/refs.gph adamsgaard.dk 70 1README /src/stagit/file/README.gph adamsgaard.dk 70 1LICENSE /src/stagit/file/LICENSE.gph adamsgaard.dk 70 i--- Err adamsgaard.dk 70 1commit d1d85502bcdcab164b0e7b3d95939bef42b8a544 /src/stagit/commit/d1d85502bcdcab164b0e7b3d95939bef42b8a544.gph adamsgaard.dk 70 1parent c413dc3336479c76292bf3225d58bb55c43da056 /src/stagit/commit/c413dc3336479c76292bf3225d58bb55c43da056.gph adamsgaard.dk 70 hAuthor: Anders Damsgaard URL:mailto:anders@adamsgaard.dk adamsgaard.dk 70 iDate: Wed, 22 Jul 2020 07:51:29 +0200 Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iMerge remote-tracking branch 'upstream/master' Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iDiffstat: Err adamsgaard.dk 70 i M stagit.1 | 6 ++++-- Err adamsgaard.dk 70 i M stagit.c | 294 +++++++++++++++++++------------ Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i2 files changed, 190 insertions(+), 110 deletions(-) Err adamsgaard.dk 70 i--- Err adamsgaard.dk 70 1diff --git a/stagit.1 b/stagit.1 /src/stagit/file/stagit.1.gph adamsgaard.dk 70 it@@ -1,4 +1,4 @@ Err adamsgaard.dk 70 i-.Dd February 6, 2019 Err adamsgaard.dk 70 i+.Dd July 19, 2020 Err adamsgaard.dk 70 i .Dt STAGIT 1 Err adamsgaard.dk 70 i .Os Err adamsgaard.dk 70 i .Sh NAME Err adamsgaard.dk 70 it@@ -42,7 +42,9 @@ cannot be used at the same time. Err adamsgaard.dk 70 i The following files will be written: Err adamsgaard.dk 70 i .Bl -tag -width Ds Err adamsgaard.dk 70 i .It atom.xml Err adamsgaard.dk 70 i-Atom XML feed Err adamsgaard.dk 70 i+Atom XML feed of the last 100 commits. Err adamsgaard.dk 70 i+.It tags.xml Err adamsgaard.dk 70 i+Atom XML feed of the tags. Err adamsgaard.dk 70 i .It files.html Err adamsgaard.dk 70 i List of files in the latest tree, linking to the file. Err adamsgaard.dk 70 i .It log.html Err adamsgaard.dk 70 1diff --git a/stagit.c b/stagit.c /src/stagit/file/stagit.c.gph adamsgaard.dk 70 it@@ -48,6 +48,12 @@ struct commitinfo { Err adamsgaard.dk 70 i size_t ndeltas; Err adamsgaard.dk 70 i }; Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i+/* reference and associated data for sorting */ Err adamsgaard.dk 70 i+struct referenceinfo { Err adamsgaard.dk 70 i+ struct git_reference *ref; Err adamsgaard.dk 70 i+ struct commitinfo *ci; Err adamsgaard.dk 70 i+}; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i static git_repository *repo; Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i static const char *relpath = ""; Err adamsgaard.dk 70 it@@ -243,6 +249,104 @@ err: Err adamsgaard.dk 70 i return NULL; Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i+int Err adamsgaard.dk 70 i+refs_cmp(const void *v1, const void *v2) Err adamsgaard.dk 70 i+{ Err adamsgaard.dk 70 i+ struct referenceinfo *r1 = (struct referenceinfo *)v1; Err adamsgaard.dk 70 i+ struct referenceinfo *r2 = (struct referenceinfo *)v2; Err adamsgaard.dk 70 i+ time_t t1, t2; Err adamsgaard.dk 70 i+ int r; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ if ((r = git_reference_is_tag(r1->ref) - git_reference_is_tag(r2->ref))) Err adamsgaard.dk 70 i+ return r; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ t1 = r1->ci->author ? r1->ci->author->when.time : 0; Err adamsgaard.dk 70 i+ t2 = r2->ci->author ? r2->ci->author->when.time : 0; Err adamsgaard.dk 70 i+ if ((r = t1 > t2 ? -1 : (t1 == t2 ? 0 : 1))) Err adamsgaard.dk 70 i+ return r; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ return strcmp(git_reference_shorthand(r1->ref), Err adamsgaard.dk 70 i+ git_reference_shorthand(r2->ref)); Err adamsgaard.dk 70 i+} Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+int Err adamsgaard.dk 70 i+getrefs(struct referenceinfo **pris, size_t *prefcount) Err adamsgaard.dk 70 i+{ Err adamsgaard.dk 70 i+ struct referenceinfo *ris = NULL; Err adamsgaard.dk 70 i+ struct commitinfo *ci = NULL; Err adamsgaard.dk 70 i+ git_reference_iterator *it = NULL; Err adamsgaard.dk 70 i+ const git_oid *id = NULL; Err adamsgaard.dk 70 i+ git_object *obj = NULL; Err adamsgaard.dk 70 i+ git_reference *dref = NULL, *r, *ref = NULL; Err adamsgaard.dk 70 i+ size_t i, refcount; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ *pris = NULL; Err adamsgaard.dk 70 i+ *prefcount = 0; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ if (git_reference_iterator_new(&it, repo)) Err adamsgaard.dk 70 i+ return -1; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ for (refcount = 0; !git_reference_next(&ref, it); ) { Err adamsgaard.dk 70 i+ if (!git_reference_is_branch(ref) && !git_reference_is_tag(ref)) { Err adamsgaard.dk 70 i+ git_reference_free(ref); Err adamsgaard.dk 70 i+ ref = NULL; Err adamsgaard.dk 70 i+ continue; Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ switch (git_reference_type(ref)) { Err adamsgaard.dk 70 i+ case GIT_REF_SYMBOLIC: Err adamsgaard.dk 70 i+ if (git_reference_resolve(&dref, ref)) Err adamsgaard.dk 70 i+ goto err; Err adamsgaard.dk 70 i+ r = dref; Err adamsgaard.dk 70 i+ break; Err adamsgaard.dk 70 i+ case GIT_REF_OID: Err adamsgaard.dk 70 i+ r = ref; Err adamsgaard.dk 70 i+ break; Err adamsgaard.dk 70 i+ default: Err adamsgaard.dk 70 i+ continue; Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ if (!git_reference_target(r) || Err adamsgaard.dk 70 i+ git_reference_peel(&obj, r, GIT_OBJ_ANY)) Err adamsgaard.dk 70 i+ goto err; Err adamsgaard.dk 70 i+ if (!(id = git_object_id(obj))) Err adamsgaard.dk 70 i+ goto err; Err adamsgaard.dk 70 i+ if (!(ci = commitinfo_getbyoid(id))) Err adamsgaard.dk 70 i+ break; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ if (!(ris = reallocarray(ris, refcount + 1, sizeof(*ris)))) Err adamsgaard.dk 70 i+ err(1, "realloc"); Err adamsgaard.dk 70 i+ ris[refcount].ci = ci; Err adamsgaard.dk 70 i+ ris[refcount].ref = r; Err adamsgaard.dk 70 i+ refcount++; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ git_object_free(obj); Err adamsgaard.dk 70 i+ obj = NULL; Err adamsgaard.dk 70 i+ git_reference_free(dref); Err adamsgaard.dk 70 i+ dref = NULL; Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ git_reference_iterator_free(it); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ /* sort by type, date then shorthand name */ Err adamsgaard.dk 70 i+ qsort(ris, refcount, sizeof(*ris), refs_cmp); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ *pris = ris; Err adamsgaard.dk 70 i+ *prefcount = refcount; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ return 0; Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+err: Err adamsgaard.dk 70 i+ git_object_free(obj); Err adamsgaard.dk 70 i+ git_reference_free(dref); Err adamsgaard.dk 70 i+ commitinfo_free(ci); Err adamsgaard.dk 70 i+ for (i = 0; i < refcount; i++) { Err adamsgaard.dk 70 i+ commitinfo_free(ris[i].ci); Err adamsgaard.dk 70 i+ git_reference_free(ris[i].ref); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ free(ris); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ return -1; Err adamsgaard.dk 70 i+} Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i FILE * Err adamsgaard.dk 70 i efopen(const char *name, const char *flags) Err adamsgaard.dk 70 i { Err adamsgaard.dk 70 it@@ -356,6 +460,8 @@ writeheader(FILE *fp, const char *title) Err adamsgaard.dk 70 i fprintf(fp, "\n\n", relpath); Err adamsgaard.dk 70 i fprintf(fp, "\n", Err adamsgaard.dk 70 i name, relpath); Err adamsgaard.dk 70 i+ fprintf(fp, "\n", Err adamsgaard.dk 70 i+ name, relpath); Err adamsgaard.dk 70 i fprintf(fp, "\n", relpath); Err adamsgaard.dk 70 i fputs("\n\n\n", fp); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ /* table footer */ Err adamsgaard.dk 70 i+ if (count) Err adamsgaard.dk 70 i+ fputs("
", fp); Err adamsgaard.dk 70 i fprintf(fp, "\"\"", Err adamsgaard.dk 70 it@@ -677,7 +783,7 @@ err: Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i void Err adamsgaard.dk 70 i-printcommitatom(FILE *fp, struct commitinfo *ci) Err adamsgaard.dk 70 i+printcommitatom(FILE *fp, struct commitinfo *ci, const char *tag) Err adamsgaard.dk 70 i { Err adamsgaard.dk 70 i fputs("\n", fp); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 it@@ -694,6 +800,11 @@ printcommitatom(FILE *fp, struct commitinfo *ci) Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i if (ci->summary) { Err adamsgaard.dk 70 i fputs("", fp); Err adamsgaard.dk 70 i+ if (tag && tag[0]) { Err adamsgaard.dk 70 i+ fputs("[", fp); Err adamsgaard.dk 70 i+ xmlencode(fp, tag, strlen(tag)); Err adamsgaard.dk 70 i+ fputs("] ", fp); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i xmlencode(fp, ci->summary, strlen(ci->summary)); Err adamsgaard.dk 70 i fputs("\n", fp); Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 it@@ -729,8 +840,10 @@ printcommitatom(FILE *fp, struct commitinfo *ci) Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i int Err adamsgaard.dk 70 i-writeatom(FILE *fp) Err adamsgaard.dk 70 i+writeatom(FILE *fp, int all) Err adamsgaard.dk 70 i { Err adamsgaard.dk 70 i+ struct referenceinfo *ris = NULL; Err adamsgaard.dk 70 i+ size_t refcount = 0; Err adamsgaard.dk 70 i struct commitinfo *ci; Err adamsgaard.dk 70 i git_revwalk *w = NULL; Err adamsgaard.dk 70 i git_oid id; Err adamsgaard.dk 70 it@@ -743,17 +856,34 @@ writeatom(FILE *fp) Err adamsgaard.dk 70 i xmlencode(fp, description, strlen(description)); Err adamsgaard.dk 70 i fputs("\n", fp); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- git_revwalk_new(&w, repo); Err adamsgaard.dk 70 i- git_revwalk_push_head(w); Err adamsgaard.dk 70 i- git_revwalk_simplify_first_parent(w); Err adamsgaard.dk 70 i+ /* all commits or only tags? */ Err adamsgaard.dk 70 i+ if (all) { Err adamsgaard.dk 70 i+ git_revwalk_new(&w, repo); Err adamsgaard.dk 70 i+ git_revwalk_push_head(w); Err adamsgaard.dk 70 i+ git_revwalk_simplify_first_parent(w); Err adamsgaard.dk 70 i+ for (i = 0; i < m && !git_revwalk_next(&id, w); i++) { Err adamsgaard.dk 70 i+ if (!(ci = commitinfo_getbyoid(&id))) Err adamsgaard.dk 70 i+ break; Err adamsgaard.dk 70 i+ printcommitatom(fp, ci, ""); Err adamsgaard.dk 70 i+ commitinfo_free(ci); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ git_revwalk_free(w); Err adamsgaard.dk 70 i+ } else { Err adamsgaard.dk 70 i+ /* references: tags */ Err adamsgaard.dk 70 i+ if (getrefs(&ris, &refcount) != -1) { Err adamsgaard.dk 70 i+ for (i = 0; i < refcount; i++) { Err adamsgaard.dk 70 i+ if (!git_reference_is_tag(ris[i].ref)) Err adamsgaard.dk 70 i+ continue; Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- for (i = 0; i < m && !git_revwalk_next(&id, w); i++) { Err adamsgaard.dk 70 i- if (!(ci = commitinfo_getbyoid(&id))) Err adamsgaard.dk 70 i- break; Err adamsgaard.dk 70 i- printcommitatom(fp, ci); Err adamsgaard.dk 70 i- commitinfo_free(ci); Err adamsgaard.dk 70 i+ printcommitatom(fp, ris[i].ci, Err adamsgaard.dk 70 i+ git_reference_shorthand(ris[i].ref)); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ commitinfo_free(ris[i].ci); Err adamsgaard.dk 70 i+ git_reference_free(ris[i].ref); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ free(ris); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i- git_revwalk_free(w); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i fputs("\n", fp); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 it@@ -939,115 +1069,58 @@ writefiles(FILE *fp, const git_oid *id) Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i int Err adamsgaard.dk 70 i-refs_cmp(const void *v1, const void *v2) Err adamsgaard.dk 70 i-{ Err adamsgaard.dk 70 i- git_reference *r1 = (*(git_reference **)v1); Err adamsgaard.dk 70 i- git_reference *r2 = (*(git_reference **)v2); Err adamsgaard.dk 70 i- int r; Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- if ((r = git_reference_is_branch(r1) - git_reference_is_branch(r2))) Err adamsgaard.dk 70 i- return r; Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- return strcmp(git_reference_shorthand(r1), Err adamsgaard.dk 70 i- git_reference_shorthand(r2)); Err adamsgaard.dk 70 i-} Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i-int Err adamsgaard.dk 70 i writerefs(FILE *fp) Err adamsgaard.dk 70 i { Err adamsgaard.dk 70 i+ struct referenceinfo *ris = NULL; Err adamsgaard.dk 70 i struct commitinfo *ci; Err adamsgaard.dk 70 i- const git_oid *id = NULL; Err adamsgaard.dk 70 i- git_object *obj = NULL; Err adamsgaard.dk 70 i- git_reference *dref = NULL, *r, *ref = NULL; Err adamsgaard.dk 70 i- git_reference_iterator *it = NULL; Err adamsgaard.dk 70 i- git_reference **refs = NULL; Err adamsgaard.dk 70 i size_t count, i, j, refcount; Err adamsgaard.dk 70 i const char *titles[] = { "Branches", "Tags" }; Err adamsgaard.dk 70 i const char *ids[] = { "branches", "tags" }; Err adamsgaard.dk 70 i- const char *name; Err adamsgaard.dk 70 i+ const char *s; Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- if (git_reference_iterator_new(&it, repo)) Err adamsgaard.dk 70 i+ if (getrefs(&ris, &refcount) == -1) Err adamsgaard.dk 70 i return -1; Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- for (refcount = 0; !git_reference_next(&ref, it); refcount++) { Err adamsgaard.dk 70 i- if (!(refs = reallocarray(refs, refcount + 1, sizeof(git_reference *)))) Err adamsgaard.dk 70 i- err(1, "realloc"); Err adamsgaard.dk 70 i- refs[refcount] = ref; Err adamsgaard.dk 70 i- } Err adamsgaard.dk 70 i- git_reference_iterator_free(it); Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- /* sort by type then shorthand name */ Err adamsgaard.dk 70 i- qsort(refs, refcount, sizeof(git_reference *), refs_cmp); Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- for (j = 0; j < 2; j++) { Err adamsgaard.dk 70 i- for (i = 0, count = 0; i < refcount; i++) { Err adamsgaard.dk 70 i- if (!(git_reference_is_branch(refs[i]) && j == 0) && Err adamsgaard.dk 70 i- !(git_reference_is_tag(refs[i]) && j == 1)) Err adamsgaard.dk 70 i- continue; Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- switch (git_reference_type(refs[i])) { Err adamsgaard.dk 70 i- case GIT_REF_SYMBOLIC: Err adamsgaard.dk 70 i- if (git_reference_resolve(&dref, refs[i])) Err adamsgaard.dk 70 i- goto err; Err adamsgaard.dk 70 i- r = dref; Err adamsgaard.dk 70 i- break; Err adamsgaard.dk 70 i- case GIT_REF_OID: Err adamsgaard.dk 70 i- r = refs[i]; Err adamsgaard.dk 70 i- break; Err adamsgaard.dk 70 i- default: Err adamsgaard.dk 70 i- continue; Err adamsgaard.dk 70 i- } Err adamsgaard.dk 70 i- if (!git_reference_target(r) || Err adamsgaard.dk 70 i- git_reference_peel(&obj, r, GIT_OBJ_ANY)) Err adamsgaard.dk 70 i- goto err; Err adamsgaard.dk 70 i- if (!(id = git_object_id(obj))) Err adamsgaard.dk 70 i- goto err; Err adamsgaard.dk 70 i- if (!(ci = commitinfo_getbyoid(id))) Err adamsgaard.dk 70 i- break; Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- /* print header if it has an entry (first). */ Err adamsgaard.dk 70 i- if (++count == 1) { Err adamsgaard.dk 70 i- fprintf(fp, "

%s

" Err adamsgaard.dk 70 i- "\n" Err adamsgaard.dk 70 i- "" Err adamsgaard.dk 70 i- "\n\n" Err adamsgaard.dk 70 i- "\n", Err adamsgaard.dk 70 i- titles[j], ids[j]); Err adamsgaard.dk 70 i- } Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- relpath = ""; Err adamsgaard.dk 70 i- name = git_reference_shorthand(r); Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- fputs("\n", fp); Err adamsgaard.dk 70 i- Err adamsgaard.dk 70 i- relpath = "../"; Err adamsgaard.dk 70 i+ for (i = 0, j = 0, count = 0; i < refcount; i++) { Err adamsgaard.dk 70 i+ if (j == 0 && git_reference_is_tag(ris[i].ref)) { Err adamsgaard.dk 70 i+ if (count) Err adamsgaard.dk 70 i+ fputs("
NameLast commit date (UTC)Author
", fp); Err adamsgaard.dk 70 i- xmlencode(fp, name, strlen(name)); Err adamsgaard.dk 70 i- fputs("", fp); Err adamsgaard.dk 70 i- if (ci->author) Err adamsgaard.dk 70 i- printtimeshort(fp, &(ci->author->when)); Err adamsgaard.dk 70 i- fputs("", fp); Err adamsgaard.dk 70 i- if (ci->author) Err adamsgaard.dk 70 i- xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err adamsgaard.dk 70 i- fputs("

\n", fp); Err adamsgaard.dk 70 i+ count = 0; Err adamsgaard.dk 70 i+ j = 1; Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- commitinfo_free(ci); Err adamsgaard.dk 70 i- git_object_free(obj); Err adamsgaard.dk 70 i- obj = NULL; Err adamsgaard.dk 70 i- git_reference_free(dref); Err adamsgaard.dk 70 i- dref = NULL; Err adamsgaard.dk 70 i+ /* print header if it has an entry (first). */ Err adamsgaard.dk 70 i+ if (++count == 1) { Err adamsgaard.dk 70 i+ fprintf(fp, "

%s

" Err adamsgaard.dk 70 i+ "\n" Err adamsgaard.dk 70 i+ "" Err adamsgaard.dk 70 i+ "\n\n" Err adamsgaard.dk 70 i+ "\n", Err adamsgaard.dk 70 i+ titles[j], ids[j]); Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i- /* table footer */ Err adamsgaard.dk 70 i- if (count) Err adamsgaard.dk 70 i- fputs("
NameLast commit dateAuthor

", fp); Err adamsgaard.dk 70 i- } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i-err: Err adamsgaard.dk 70 i- git_object_free(obj); Err adamsgaard.dk 70 i- git_reference_free(dref); Err adamsgaard.dk 70 i+ ci = ris[i].ci; Err adamsgaard.dk 70 i+ s = git_reference_shorthand(ris[i].ref); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ fputs("
", fp); Err adamsgaard.dk 70 i+ xmlencode(fp, s, strlen(s)); Err adamsgaard.dk 70 i+ fputs("", fp); Err adamsgaard.dk 70 i+ if (ci->author) Err adamsgaard.dk 70 i+ printtimeshort(fp, &(ci->author->when)); Err adamsgaard.dk 70 i+ fputs("", fp); Err adamsgaard.dk 70 i+ if (ci->author) Err adamsgaard.dk 70 i+ xmlencode(fp, ci->author->name, strlen(ci->author->name)); Err adamsgaard.dk 70 i+ fputs("

\n", fp); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i- for (i = 0; i < refcount; i++) Err adamsgaard.dk 70 i- git_reference_free(refs[i]); Err adamsgaard.dk 70 i- free(refs); Err adamsgaard.dk 70 i+ for (i = 0; i < refcount; i++) { Err adamsgaard.dk 70 i+ commitinfo_free(ris[i].ci); Err adamsgaard.dk 70 i+ git_reference_free(ris[i].ref); Err adamsgaard.dk 70 i+ } Err adamsgaard.dk 70 i+ free(ris); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i return 0; Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 it@@ -1255,7 +1328,12 @@ main(int argc, char *argv[]) Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i /* Atom feed */ Err adamsgaard.dk 70 i fp = efopen("atom.xml", "w"); Err adamsgaard.dk 70 i- writeatom(fp); Err adamsgaard.dk 70 i+ writeatom(fp, 1); Err adamsgaard.dk 70 i+ fclose(fp); Err adamsgaard.dk 70 i+ Err adamsgaard.dk 70 i+ /* Atom feed for tags / releases */ Err adamsgaard.dk 70 i+ fp = efopen("tags.xml", "w"); Err adamsgaard.dk 70 i+ writeatom(fp, 0); Err adamsgaard.dk 70 i fclose(fp); Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i /* rename new cache file on success */ Err adamsgaard.dk 70 .