[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