cgit

commit 79c985e13c10b498c3ea62f4607c2e2a460c3b10

Author: Christian Hesse <mail@eworm.de>

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.

 Makefile | 2 +-
 cgit.c | 26 +++++++++++++-------------
 parsing.c | 12 ++++++------
 scan-tree.c | 10 +++++++---
 ui-clone.c | 2 +-
 ui-log.c | 8 ++++----
 ui-refs.c | 6 +++---
 ui-repolist.c | 2 +-
 ui-shared.c | 2 +-
 ui-snapshot.c | 4 ++--
 ui-summary.c | 2 +-


diff --git a/Makefile b/Makefile
index e6ec0dce14348e53ec2648b0532ad2158f150844..0223a177c86fa5a898c7885bcdc1cb12863b73a5 100644
--- 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
index f488ebfa8cefbe8e9ca041c2bf6bee79cd891e92..20f6e279e3be60653d70a3e0966064afcd8c6480 100644
--- a/cgit.c
+++ b/cgit.c
@@ -69,7 +69,7 @@ 	} else if (!strcmp(name, "max-stats"))
 		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 @@ 	else if (!strcmp(name, "repo.url"))
 		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 @@ 		if (!strcmp(value, "age"))
 			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 @@ 	const char *ref;
 	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 @@ 			printf("Linux sendfile() usage\n");
 
 			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
index 5b4b1f4e58d034878831b19076a95e25683c748d..073f46fc708ee4fc5d251bd25f6a6e48f20344ae 100644
--- a/parsing.c
+++ b/parsing.c
@@ -147,25 +147,25 @@
 	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 @@ 	while (p && *p) {
 		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
index 49de6583ff55852b6bd5af1c063e21d03d7c1d5d..87fa0c78a96273c4f2504ae0132c340f6ee9ba4d 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -61,7 +61,7 @@ 	else if (!strcmp(key, "gitweb.description"))
 		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 @@ 	if (!stat(path->buf, &st))
 		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 @@ 		strbuf_setlen(&rel, rel.len - 5);
 	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 @@ 		if (slash && !n) {
 			*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 @@ 	struct strbuf pathbuf = STRBUF_INIT;
 	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 @@ 	}
 
 	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
index d25553b68da2e30007a5a45163b496f9e86d55f8..a4ffd6e06bfe1f371cec2221813e1d0b7b5be084 100644
--- a/ui-clone.c
+++ b/ui-clone.c
@@ -63,7 +63,7 @@ 		return;
 	}
 	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
index 499534c1a8b359833576392e582aba0d4171986e..2de8017329f2acb60d0803564c26b25c5e2ff5d8 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -63,21 +63,21 @@ 	buf[sizeof(buf) - 1] = 0;
 	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
index 0da063f140aece02dfa94f166e890fb28a10cbf6..7e58737f8a36d23005c4ecdd868ff8539d875233 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -101,7 +101,7 @@ 	if (!ref || strlen(ref) < 1)
 		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 @@ {
 
 	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
index 477a9495f09d9b2cda9c26e292bb8f5398ddfbec..c2bcce177c23da9dabf9f5becbec3c71a0abc3c0 100644
--- 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
index 1ede2b0bbfa4a55c49311fde04d6a5a7765d8362..9dde0a39912899c821ff80c318489c86cde8b25b 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -128,7 +128,7 @@ 	p = strlen(rvbuf)-1;
 	/* 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
index 3107b055dbc00ff5ad785b90896165e5cd1dfbdc..ea77eb48c03f640891f7d56cdcbe027d8ba86a23 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -99,7 +99,7 @@ {
 	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 @@ 	if (get_sha1(snapshot.buf, sha1) == 0)
 		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
index df99ce10a9b326797dec19ac91e5b8709807ce5a..3728c3e222a5f3c592e3c46bd32bfb0ae98d691d 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -116,7 +116,7 @@
 	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;
 		}