[PATCH 3 of 8] chg: handle pager request client-side

Jun Wu quark at fb.com
Mon Jan 9 18:12:23 EST 2017


# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1484002743 -28800
#      Tue Jan 10 06:59:03 2017 +0800
# Node ID 97e3f81b69bc7bc670459c62056f706c2b6ff941
# Parent  603c1d614690ab594f240f4daf198f34c1714f62
# Available At https://bitbucket.org/quark-zju/hg-draft
#              hg pull https://bitbucket.org/quark-zju/hg-draft -r 97e3f81b69bc
chg: handle pager request client-side

This patch implements the simple S-channel pager handling at chg
client-side.

Note: It does not deal with environ and cwd currently for simplicity, which
will be fixed later.

diff --git a/contrib/chg/Makefile b/contrib/chg/Makefile
--- a/contrib/chg/Makefile
+++ b/contrib/chg/Makefile
@@ -26,5 +26,5 @@ all: $(TARGET)
 
 chg.o: hgclient.h procutil.h util.h
-hgclient.o: hgclient.h util.h
+hgclient.o: hgclient.h procutil.h util.h
 procutil.o: procutil.h util.h
 util.o: util.h
diff --git a/contrib/chg/hgclient.c b/contrib/chg/hgclient.c
--- a/contrib/chg/hgclient.c
+++ b/contrib/chg/hgclient.c
@@ -24,4 +24,5 @@
 
 #include "hgclient.h"
+#include "procutil.h"
 #include "util.h"
 
@@ -72,4 +73,6 @@ struct hgclient_tag_ {
 static const size_t defaultdatasize = 4096;
 
+static void attachio(hgclient_t *hgc);
+
 static void initcontext(context_t *ctx)
 {
@@ -249,4 +252,11 @@ static void handlesystemrequest(hgclient
 		ctx->datasize = sizeof(r_n);
 		writeblock(hgc);
+	} else if (strcmp(args[0], "pager") == 0) {
+		setuppager(args[1]);
+		if (hgc->capflags & CAP_ATTACHIO)
+			attachio(hgc);
+		/* unblock the server */
+		static const char emptycmd[] = "\n";
+		sendall(hgc->sockfd, emptycmd, sizeof(emptycmd) - 1);
 	} else {
 		abortmsg("unknown type in system request: %s", args[0]);


More information about the Mercurial-devel mailing list