neocgit

a more 'modern' version of cgit
Log | Files | Refs | Submodules | README | LICENSE | git clone https://git.ne02ptzero.me/git/neocgit

commit 79c985e13c10b498c3ea62f4607c2e2a460c3b10
parent b431282c91deea24916578395d88084261410968
Author: Christian Hesse <mail@eworm.de>
Date:   Thu, 29 May 2014 17:35:46 +0200

git: update for git 2.0

prefixcmp() and suffixcmp() have been remove, functionality is now
provided by starts_with() and ends_with(). Retrurn values have been
changed, so instead of just renaming we have to fix logic.
Everything else looks just fine.

Diffstat:
MMakefile | 2+-
Mcgit.c | 26+++++++++++++-------------
Mparsing.c | 12++++++------
Mscan-tree.c | 10+++++++---
Mui-clone.c | 2+-
Mui-log.c | 8++++----
Mui-refs.c | 6+++---
Mui-repolist.c | 2+-
Mui-shared.c | 2+-
Mui-snapshot.c | 4++--
Mui-summary.c | 2+-
11 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/Makefile b/Makefile @@ -14,7 +14,7 @@ htmldir = $(docdir) pdfdir = $(docdir) mandir = $(prefix)/share/man SHA1_HEADER = <openssl/sha.h> -GIT_VER = 1.9.2 +GIT_VER = 2.0.0 GIT_URL = https://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.gz INSTALL = install COPYTREE = cp -r diff --git a/cgit.c b/cgit.c @@ -69,7 +69,7 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va repo->max_stats = cgit_find_stats_period(value, NULL); else if (!strcmp(name, "module-link")) repo->module_link= xstrdup(value); - else if (!prefixcmp(name, "module-link.")) { + else if (starts_with(name, "module-link.")) { item = string_list_append(&repo->submodules, xstrdup(name + 12)); item->util = xstrdup(value); } else if (!strcmp(name, "section")) @@ -102,7 +102,7 @@ static void config_cb(const char *name, const char *value) ctx.repo = cgit_add_repo(value); else if (ctx.repo && !strcmp(name, "repo.path")) ctx.repo->path = trim_end(value, '/'); - else if (ctx.repo && !prefixcmp(name, "repo.")) + else if (ctx.repo && starts_with(name, "repo.")) repo_config(ctx.repo, name + 5, value); else if (!strcmp(name, "readme") && value != NULL) string_list_append(&ctx.cfg.readme, xstrdup(value)); @@ -264,7 +264,7 @@ static void config_cb(const char *name, const char *value) ctx.cfg.branch_sort = 1; if (!strcmp(value, "name")) ctx.cfg.branch_sort = 0; - } else if (!prefixcmp(name, "mimetype.")) + } else if (starts_with(name, "mimetype.")) add_mimetype(name + 9, value); else if (!strcmp(name, "include")) parse_configfile(expand_macros(value), config_cb); @@ -454,7 +454,7 @@ static char *guess_defbranch(void) unsigned char sha1[20]; ref = resolve_ref_unsafe("HEAD", sha1, 0, NULL); - if (!ref || prefixcmp(ref, "refs/heads/")) + if (!ref || !starts_with(ref, "refs/heads/")) return "master"; return xstrdup(ref + 11); } @@ -941,28 +941,28 @@ static void cgit_parse_args(int argc, const char **argv) exit(0); } - if (!prefixcmp(argv[i], "--cache=")) { + if (starts_with(argv[i], "--cache=")) { ctx.cfg.cache_root = xstrdup(argv[i] + 8); } else if (!strcmp(argv[i], "--nocache")) { ctx.cfg.nocache = 1; } else if (!strcmp(argv[i], "--nohttp")) { ctx.env.no_http = "1"; - } else if (!prefixcmp(argv[i], "--query=")) { + } else if (starts_with(argv[i], "--query=")) { ctx.qry.raw = xstrdup(argv[i] + 8); - } else if (!prefixcmp(argv[i], "--repo=")) { + } else if (starts_with(argv[i], "--repo=")) { ctx.qry.repo = xstrdup(argv[i] + 7); - } else if (!prefixcmp(argv[i], "--page=")) { + } else if (starts_with(argv[i], "--page=")) { ctx.qry.page = xstrdup(argv[i] + 7); - } else if (!prefixcmp(argv[i], "--head=")) { + } else if (starts_with(argv[i], "--head=")) { ctx.qry.head = xstrdup(argv[i] + 7); ctx.qry.has_symref = 1; - } else if (!prefixcmp(argv[i], "--sha1=")) { + } else if (starts_with(argv[i], "--sha1=")) { ctx.qry.sha1 = xstrdup(argv[i] + 7); ctx.qry.has_sha1 = 1; - } else if (!prefixcmp(argv[i], "--ofs=")) { + } else if (starts_with(argv[i], "--ofs=")) { ctx.qry.ofs = atoi(argv[i] + 6); - } else if (!prefixcmp(argv[i], "--scan-tree=") || - !prefixcmp(argv[i], "--scan-path=")) { + } else if (starts_with(argv[i], "--scan-tree=") || + starts_with(argv[i], "--scan-path=")) { /* * HACK: The global snapshot bit mask defines the set * of allowed snapshot formats, but the config file diff --git a/parsing.c b/parsing.c @@ -147,25 +147,25 @@ struct commitinfo *cgit_parse_commit(struct commit *commit) if (p == NULL) return ret; - if (prefixcmp(p, "tree ")) + if (!starts_with(p, "tree ")) die("Bad commit: %s", sha1_to_hex(commit->object.sha1)); else p += 46; // "tree " + hex[40] + "\n" - while (!prefixcmp(p, "parent ")) + while (starts_with(p, "parent ")) p += 48; // "parent " + hex[40] + "\n" - if (p && !prefixcmp(p, "author ")) { + if (p && starts_with(p, "author ")) { p = parse_user(p + 7, &ret->author, &ret->author_email, &ret->author_date); } - if (p && !prefixcmp(p, "committer ")) { + if (p && starts_with(p, "committer ")) { p = parse_user(p + 10, &ret->committer, &ret->committer_email, &ret->committer_date); } - if (p && !prefixcmp(p, "encoding ")) { + if (p && starts_with(p, "encoding ")) { p += 9; t = strchr(p, '\n'); if (t) { @@ -244,7 +244,7 @@ struct taginfo *cgit_parse_tag(struct tag *tag) if (*p == '\n') break; - if (!prefixcmp(p, "tagger ")) { + if (starts_with(p, "tagger ")) { p = parse_user(p + 7, &ret->tagger, &ret->tagger_email, &ret->tagger_date); } else { diff --git a/scan-tree.c b/scan-tree.c @@ -61,7 +61,7 @@ static int gitconfig_config(const char *key, const char *value, void *cb) config_fn(repo, "desc", value); else if (!strcmp(key, "gitweb.category")) config_fn(repo, "section", value); - else if (!prefixcmp(key, "cgit.")) + else if (starts_with(key, "cgit.")) config_fn(repo, key + 5, value); return 0; @@ -105,7 +105,7 @@ static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn) return; strbuf_setlen(path, pathlen); - if (prefixcmp(path->buf, base)) + if (!starts_with(path->buf, base)) strbuf_addbuf(&rel, path); else strbuf_addstr(&rel, path->buf + strlen(base) + 1); @@ -115,6 +115,7 @@ static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn) else if (rel.len && rel.buf[rel.len - 1] == '/') strbuf_setlen(&rel, rel.len - 1); + fprintf(stderr, "add_repo(): %s\n", rel.buf); repo = cgit_add_repo(rel.buf); config_fn = fn; if (ctx.cfg.enable_git_config) { @@ -161,7 +162,8 @@ static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn) *slash = '\0'; repo->section = xstrdup(rel.buf); *slash = '/'; - if (!prefixcmp(repo->name, repo->section)) { + fprintf(stderr, "repo->name %s, repo->section %s\n", repo->name, repo->section); + if (starts_with(repo->name, repo->section)) { repo->name += strlen(repo->section); if (*repo->name == '/') repo->name++; @@ -184,6 +186,7 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn) size_t pathlen = strlen(path); struct stat st; + fprintf(stderr, "scan_path(): %s\n", path); if (!dir) { fprintf(stderr, "Error opening directory %s: %s (%d)\n", path, strerror(errno), errno); @@ -192,6 +195,7 @@ static void scan_path(const char *base, const char *path, repo_config_fn fn) strbuf_add(&pathbuf, path, strlen(path)); if (is_git_dir(pathbuf.buf)) { + fprintf(stderr, "scan_path() is_git_dir: %s\n", path); add_repo(base, &pathbuf, fn); goto end; } diff --git a/ui-clone.c b/ui-clone.c @@ -63,7 +63,7 @@ static void send_file(char *path) } ctx.page.mimetype = "application/octet-stream"; ctx.page.filename = path; - if (prefixcmp(ctx.repo->path, path)) + if (!starts_with(ctx.repo->path, path)) ctx.page.filename += strlen(ctx.repo->path) + 1; cgit_print_http_headers(); html_include(path); diff --git a/ui-log.c b/ui-log.c @@ -63,21 +63,21 @@ void show_commit_decorations(struct commit *commit) deco = lookup_decoration(&name_decoration, &commit->object); html("<span class='decoration'>"); while (deco) { - if (!prefixcmp(deco->name, "refs/heads/")) { + if (starts_with(deco->name, "refs/heads/")) { strncpy(buf, deco->name + 11, sizeof(buf) - 1); cgit_log_link(buf, NULL, "branch-deco", buf, NULL, ctx.qry.vpath, 0, NULL, NULL, ctx.qry.showmsg); } - else if (!prefixcmp(deco->name, "tag: refs/tags/")) { + else if (starts_with(deco->name, "tag: refs/tags/")) { strncpy(buf, deco->name + 15, sizeof(buf) - 1); cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); } - else if (!prefixcmp(deco->name, "refs/tags/")) { + else if (starts_with(deco->name, "refs/tags/")) { strncpy(buf, deco->name + 10, sizeof(buf) - 1); cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); } - else if (!prefixcmp(deco->name, "refs/remotes/")) { + else if (starts_with(deco->name, "refs/remotes/")) { if (!ctx.repo->enable_remote_branches) goto next; strncpy(buf, deco->name + 13, sizeof(buf) - 1); diff --git a/ui-refs.c b/ui-refs.c @@ -101,7 +101,7 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) return; basename = cgit_repobasename(repo->url); - if (prefixcmp(ref, basename) != 0) { + if (!starts_with(ref, basename)) { if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1])) ref++; if (isdigit(ref[0])) { @@ -239,9 +239,9 @@ void cgit_print_refs() html("<table class='list nowrap'>"); - if (ctx.qry.path && !prefixcmp(ctx.qry.path, "heads")) + if (ctx.qry.path && starts_with(ctx.qry.path, "heads")) cgit_print_branches(0); - else if (ctx.qry.path && !prefixcmp(ctx.qry.path, "tags")) + else if (ctx.qry.path && starts_with(ctx.qry.path, "tags")) cgit_print_tags(0); else { cgit_print_branches(0); diff --git a/ui-repolist.c b/ui-repolist.c @@ -99,7 +99,7 @@ static int is_in_url(struct cgit_repo *repo) { if (!ctx.qry.url) return 1; - if (repo->url && !prefixcmp(repo->url, ctx.qry.url)) + if (repo->url && starts_with(repo->url, ctx.qry.url)) return 1; return 0; } diff --git a/ui-shared.c b/ui-shared.c @@ -128,7 +128,7 @@ const char *cgit_repobasename(const char *reponame) /* strip trailing slashes */ while (p && rvbuf[p] == '/') rvbuf[p--] = 0; /* strip trailing .git */ - if (p >= 3 && !prefixcmp(&rvbuf[p-3], ".git")) { + if (p >= 3 && starts_with(&rvbuf[p-3], ".git")) { p -= 3; rvbuf[p--] = 0; } /* strip more trailing slashes if any */ diff --git a/ui-snapshot.c b/ui-snapshot.c @@ -99,7 +99,7 @@ static const struct cgit_snapshot_format *get_format(const char *filename) const struct cgit_snapshot_format *fmt; for (fmt = cgit_snapshot_formats; fmt->suffix; fmt++) { - if (!suffixcmp(filename, fmt->suffix)) + if (ends_with(filename, fmt->suffix)) return fmt; } return NULL; @@ -151,7 +151,7 @@ static const char *get_ref_from_filename(const char *url, const char *filename, goto out; reponame = cgit_repobasename(url); - if (prefixcmp(snapshot.buf, reponame) == 0) { + if (starts_with(snapshot.buf, reponame)) { const char *new_start = snapshot.buf; new_start += strlen(reponame); while (new_start && (*new_start == '-' || *new_start == '_')) diff --git a/ui-summary.c b/ui-summary.c @@ -116,7 +116,7 @@ static char* append_readme_path(const char *filename, const char *ref, const cha if (!ref) { resolved_base = realpath(base_dir, NULL); resolved_full = realpath(full_path, NULL); - if (!resolved_base || !resolved_full || prefixcmp(resolved_full, resolved_base)) { + if (!resolved_base || !resolved_full || !starts_with(resolved_full, resolved_base)) { free(full_path); full_path = NULL; }