about summary refs log tree commit diff
path: root/third_party/git/builtin/upload-archive.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/builtin/upload-archive.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/builtin/upload-archive.c')
-rw-r--r--third_party/git/builtin/upload-archive.c133
1 files changed, 0 insertions, 133 deletions
diff --git a/third_party/git/builtin/upload-archive.c b/third_party/git/builtin/upload-archive.c
deleted file mode 100644
index 24654b4c9bf0..000000000000
--- a/third_party/git/builtin/upload-archive.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2006 Franck Bui-Huu
- */
-#include "cache.h"
-#include "builtin.h"
-#include "archive.h"
-#include "pkt-line.h"
-#include "sideband.h"
-#include "run-command.h"
-#include "strvec.h"
-
-static const char upload_archive_usage[] =
-	"git upload-archive <repo>";
-
-static const char deadchild[] =
-"git upload-archive: archiver died with error";
-
-#define MAX_ARGS (64)
-
-int cmd_upload_archive_writer(int argc, const char **argv, const char *prefix)
-{
-	struct strvec sent_argv = STRVEC_INIT;
-	const char *arg_cmd = "argument ";
-
-	if (argc != 2 || !strcmp(argv[1], "-h"))
-		usage(upload_archive_usage);
-
-	if (!enter_repo(argv[1], 0))
-		die("'%s' does not appear to be a git repository", argv[1]);
-
-	init_archivers();
-
-	/* put received options in sent_argv[] */
-	strvec_push(&sent_argv, "git-upload-archive");
-	for (;;) {
-		char *buf = packet_read_line(0, NULL);
-		if (!buf)
-			break;	/* got a flush */
-		if (sent_argv.nr > MAX_ARGS)
-			die("Too many options (>%d)", MAX_ARGS - 1);
-
-		if (!starts_with(buf, arg_cmd))
-			die("'argument' token or flush expected");
-		strvec_push(&sent_argv, buf + strlen(arg_cmd));
-	}
-
-	/* parse all options sent by the client */
-	return write_archive(sent_argv.nr, sent_argv.v, prefix,
-			     the_repository, NULL, 1);
-}
-
-__attribute__((format (printf, 1, 2)))
-static void error_clnt(const char *fmt, ...)
-{
-	struct strbuf buf = STRBUF_INIT;
-	va_list params;
-
-	va_start(params, fmt);
-	strbuf_vaddf(&buf, fmt, params);
-	va_end(params);
-	send_sideband(1, 3, buf.buf, buf.len, LARGE_PACKET_MAX);
-	die("sent error to the client: %s", buf.buf);
-}
-
-static ssize_t process_input(int child_fd, int band)
-{
-	char buf[16384];
-	ssize_t sz = read(child_fd, buf, sizeof(buf));
-	if (sz < 0) {
-		if (errno != EAGAIN && errno != EINTR)
-			error_clnt("read error: %s\n", strerror(errno));
-		return sz;
-	}
-	send_sideband(1, band, buf, sz, LARGE_PACKET_MAX);
-	return sz;
-}
-
-int cmd_upload_archive(int argc, const char **argv, const char *prefix)
-{
-	struct child_process writer = { argv };
-
-	if (argc == 2 && !strcmp(argv[1], "-h"))
-		usage(upload_archive_usage);
-
-	/*
-	 * Set up sideband subprocess.
-	 *
-	 * We (parent) monitor and read from child, sending its fd#1 and fd#2
-	 * multiplexed out to our fd#1.  If the child dies, we tell the other
-	 * end over channel #3.
-	 */
-	argv[0] = "upload-archive--writer";
-	writer.out = writer.err = -1;
-	writer.git_cmd = 1;
-	if (start_command(&writer)) {
-		int err = errno;
-		packet_write_fmt(1, "NACK unable to spawn subprocess\n");
-		die("upload-archive: %s", strerror(err));
-	}
-
-	packet_write_fmt(1, "ACK\n");
-	packet_flush(1);
-
-	while (1) {
-		struct pollfd pfd[2];
-
-		pfd[0].fd = writer.out;
-		pfd[0].events = POLLIN;
-		pfd[1].fd = writer.err;
-		pfd[1].events = POLLIN;
-		if (poll(pfd, 2, -1) < 0) {
-			if (errno != EINTR) {
-				error_errno("poll failed resuming");
-				sleep(1);
-			}
-			continue;
-		}
-		if (pfd[1].revents & POLLIN)
-			/* Status stream ready */
-			if (process_input(pfd[1].fd, 2))
-				continue;
-		if (pfd[0].revents & POLLIN)
-			/* Data stream ready */
-			if (process_input(pfd[0].fd, 1))
-				continue;
-
-		if (finish_command(&writer))
-			error_clnt("%s", deadchild);
-		packet_flush(1);
-		break;
-	}
-	return 0;
-}