about summary refs log tree commit diff
path: root/third_party/git/sideband.c
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2021-09-21T10·03+0300
committerVincent Ambo <mail@tazj.in>2021-09-21T11·29+0300
commit43b1791ec601732ac31195df96781a848360a9ac (patch)
treedaae8d638343295d2f1f7da955e556ef4c958864 /third_party/git/sideband.c
parent2d8e7dc9d9c38127ec4ebd13aee8e8f586a43318 (diff)
chore(3p/git): Unvendor git and track patches instead r/2903
This was vendored a long time ago under the expectation that keeping
it in sync with cgit would be easier this way, but it has proven not
to be a big issue.

On the other hand, a vendored copy of git is an annoying maintenance
burden. It is much easier to rebase the single (dottime) patch that we
have.

This removes the vendored copy of git and instead passes the git
source code to cgit via `pkgs.srcOnly`, which includes the applied
patch so that cgit can continue rendering dottime.

Change-Id: If31f62dea7ce688fd1b9050204e9378019775f2b
Diffstat (limited to 'third_party/git/sideband.c')
-rw-r--r--third_party/git/sideband.c239
1 files changed, 0 insertions, 239 deletions
diff --git a/third_party/git/sideband.c b/third_party/git/sideband.c
deleted file mode 100644
index 0a60662fa6..0000000000
--- a/third_party/git/sideband.c
+++ /dev/null
@@ -1,239 +0,0 @@
-#include "cache.h"
-#include "color.h"
-#include "config.h"
-#include "sideband.h"
-#include "help.h"
-
-struct keyword_entry {
-	/*
-	 * We use keyword as config key so it should be a single alphanumeric word.
-	 */
-	const char *keyword;
-	char color[COLOR_MAXLEN];
-};
-
-static struct keyword_entry keywords[] = {
-	{ "hint",	GIT_COLOR_YELLOW },
-	{ "warning",	GIT_COLOR_BOLD_YELLOW },
-	{ "success",	GIT_COLOR_BOLD_GREEN },
-	{ "error",	GIT_COLOR_BOLD_RED },
-};
-
-/* Returns a color setting (GIT_COLOR_NEVER, etc). */
-static int use_sideband_colors(void)
-{
-	static int use_sideband_colors_cached = -1;
-
-	const char *key = "color.remote";
-	struct strbuf sb = STRBUF_INIT;
-	char *value;
-	int i;
-
-	if (use_sideband_colors_cached >= 0)
-		return use_sideband_colors_cached;
-
-	if (!git_config_get_string(key, &value)) {
-		use_sideband_colors_cached = git_config_colorbool(key, value);
-	} else if (!git_config_get_string("color.ui", &value)) {
-		use_sideband_colors_cached = git_config_colorbool("color.ui", value);
-	} else {
-		use_sideband_colors_cached = GIT_COLOR_AUTO;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(keywords); i++) {
-		strbuf_reset(&sb);
-		strbuf_addf(&sb, "%s.%s", key, keywords[i].keyword);
-		if (git_config_get_string(sb.buf, &value))
-			continue;
-		if (color_parse(value, keywords[i].color))
-			continue;
-	}
-	strbuf_release(&sb);
-	return use_sideband_colors_cached;
-}
-
-void list_config_color_sideband_slots(struct string_list *list, const char *prefix)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(keywords); i++)
-		list_config_item(list, prefix, keywords[i].keyword);
-}
-
-/*
- * Optionally highlight one keyword in remote output if it appears at the start
- * of the line. This should be called for a single line only, which is
- * passed as the first N characters of the SRC array.
- *
- * NEEDSWORK: use "size_t n" instead for clarity.
- */
-static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
-{
-	int i;
-
-	if (!want_color_stderr(use_sideband_colors())) {
-		strbuf_add(dest, src, n);
-		return;
-	}
-
-	while (0 < n && isspace(*src)) {
-		strbuf_addch(dest, *src);
-		src++;
-		n--;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(keywords); i++) {
-		struct keyword_entry *p = keywords + i;
-		int len = strlen(p->keyword);
-
-		if (n < len)
-			continue;
-		/*
-		 * Match case insensitively, so we colorize output from existing
-		 * servers regardless of the case that they use for their
-		 * messages. We only highlight the word precisely, so
-		 * "successful" stays uncolored.
-		 */
-		if (!strncasecmp(p->keyword, src, len) &&
-		    (len == n || !isalnum(src[len]))) {
-			strbuf_addstr(dest, p->color);
-			strbuf_add(dest, src, len);
-			strbuf_addstr(dest, GIT_COLOR_RESET);
-			n -= len;
-			src += len;
-			break;
-		}
-	}
-
-	strbuf_add(dest, src, n);
-}
-
-
-#define DISPLAY_PREFIX "remote: "
-
-#define ANSI_SUFFIX "\033[K"
-#define DUMB_SUFFIX "        "
-
-int demultiplex_sideband(const char *me, char *buf, int len,
-			 int die_on_error,
-			 struct strbuf *scratch,
-			 enum sideband_type *sideband_type)
-{
-	static const char *suffix;
-	const char *b, *brk;
-	int band;
-
-	if (!suffix) {
-		if (isatty(2) && !is_terminal_dumb())
-			suffix = ANSI_SUFFIX;
-		else
-			suffix = DUMB_SUFFIX;
-	}
-
-	if (len == 0) {
-		*sideband_type = SIDEBAND_FLUSH;
-		goto cleanup;
-	}
-	if (len < 1) {
-		strbuf_addf(scratch,
-			    "%s%s: protocol error: no band designator",
-			    scratch->len ? "\n" : "", me);
-		*sideband_type = SIDEBAND_PROTOCOL_ERROR;
-		goto cleanup;
-	}
-	band = buf[0] & 0xff;
-	buf[len] = '\0';
-	len--;
-	switch (band) {
-	case 3:
-		if (die_on_error)
-			die(_("remote error: %s"), buf + 1);
-		strbuf_addf(scratch, "%s%s", scratch->len ? "\n" : "",
-			    DISPLAY_PREFIX);
-		maybe_colorize_sideband(scratch, buf + 1, len);
-
-		*sideband_type = SIDEBAND_REMOTE_ERROR;
-		break;
-	case 2:
-		b = buf + 1;
-
-		/*
-		 * Append a suffix to each nonempty line to clear the
-		 * end of the screen line.
-		 *
-		 * The output is accumulated in a buffer and
-		 * each line is printed to stderr using
-		 * write(2) to ensure inter-process atomicity.
-		 */
-		while ((brk = strpbrk(b, "\n\r"))) {
-			int linelen = brk - b;
-
-			if (!scratch->len)
-				strbuf_addstr(scratch, DISPLAY_PREFIX);
-			if (linelen > 0) {
-				maybe_colorize_sideband(scratch, b, linelen);
-				strbuf_addstr(scratch, suffix);
-			}
-
-			strbuf_addch(scratch, *brk);
-			xwrite(2, scratch->buf, scratch->len);
-			strbuf_reset(scratch);
-
-			b = brk + 1;
-		}
-
-		if (*b) {
-			strbuf_addstr(scratch, scratch->len ?
-				    "" : DISPLAY_PREFIX);
-			maybe_colorize_sideband(scratch, b, strlen(b));
-		}
-		return 0;
-	case 1:
-		*sideband_type = SIDEBAND_PRIMARY;
-		break;
-	default:
-		strbuf_addf(scratch, "%s%s: protocol error: bad band #%d",
-			    scratch->len ? "\n" : "", me, band);
-		*sideband_type = SIDEBAND_PROTOCOL_ERROR;
-		break;
-	}
-
-cleanup:
-	if (die_on_error && *sideband_type == SIDEBAND_PROTOCOL_ERROR)
-		die("%s", scratch->buf);
-	if (scratch->len) {
-		strbuf_addch(scratch, '\n');
-		xwrite(2, scratch->buf, scratch->len);
-	}
-	strbuf_release(scratch);
-	return 1;
-}
-
-/*
- * fd is connected to the remote side; send the sideband data
- * over multiplexed packet stream.
- */
-void send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max)
-{
-	const char *p = data;
-
-	while (sz) {
-		unsigned n;
-		char hdr[5];
-
-		n = sz;
-		if (packet_max - 5 < n)
-			n = packet_max - 5;
-		if (0 <= band) {
-			xsnprintf(hdr, sizeof(hdr), "%04x", n + 5);
-			hdr[4] = band;
-			write_or_die(fd, hdr, 5);
-		} else {
-			xsnprintf(hdr, sizeof(hdr), "%04x", n + 4);
-			write_or_die(fd, hdr, 4);
-		}
-		write_or_die(fd, p, n);
-		p += n;
-		sz -= n;
-	}
-}