]> gitweb.ps.run Git - ps-cgit/blobdiff - shared.c
t0107: Skip ZIP tests if unzip(1) isn't available
[ps-cgit] / shared.c
index 124d079b05fc493811ef0d70eb6b6f4e1817c2d3..4369378ce2f2aaf45f7b219ff15cdabc47036d6d 100644 (file)
--- a/shared.c
+++ b/shared.c
@@ -63,6 +63,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
        ret->enable_remote_branches = ctx.cfg.enable_remote_branches;
        ret->enable_subject_links = ctx.cfg.enable_subject_links;
        ret->max_stats = ctx.cfg.max_stats;
+       ret->branch_sort = ctx.cfg.branch_sort;
        ret->commit_sort = ctx.cfg.commit_sort;
        ret->module_link = ctx.cfg.module_link;
        ret->readme = ctx.cfg.readme;
@@ -115,6 +116,27 @@ char *trim_end(const char *str, char c)
        return xstrndup(str, len);
 }
 
+char *ensure_end(const char *str, char c)
+{
+       size_t len = strlen(str);
+       char *result;
+
+       if (len && str[len - 1] == c)
+               return xstrndup(str, len);
+
+       result = xmalloc(len + 2);
+       memcpy(result, str, len);
+       result[len] = '/';
+       result[len + 1] = '\0';
+       return result;
+}
+
+void strbuf_ensure_end(struct strbuf *sb, char c)
+{
+       if (!sb->len || sb->buf[sb->len - 1] != c)
+               strbuf_addch(sb, c);
+}
+
 char *strlpart(char *txt, int maxlen)
 {
        char *result;
@@ -176,6 +198,42 @@ static struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char
        return ref;
 }
 
+static void cgit_free_taginfo(struct taginfo *tag)
+{
+       if (tag->tagger)
+               free(tag->tagger);
+       if (tag->tagger_email)
+               free(tag->tagger_email);
+       if (tag->msg)
+               free(tag->msg);
+       free(tag);
+}
+
+static void cgit_free_refinfo(struct refinfo *ref)
+{
+       if (ref->refname)
+               free((char *)ref->refname);
+       switch (ref->object->type) {
+       case OBJ_TAG:
+               cgit_free_taginfo(ref->tag);
+               break;
+       case OBJ_COMMIT:
+               cgit_free_commitinfo(ref->commit);
+               break;
+       }
+       free(ref);
+}
+
+void cgit_free_reflist_inner(struct reflist *list)
+{
+       int i;
+
+       for (i = 0; i < list->count; i++) {
+               cgit_free_refinfo(list->refs[i]);
+       }
+       free(list->refs);
+}
+
 int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,
                  void *cb_data)
 {