From 2ec2cad3ee9ca029f48c52fd28063debed193f45 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 27 May 2011 00:29:03 +0000
Subject: [PATCH] Advertise the minimum required responses and add a perl-like
 split() for commands.

---
 exec/load/cvslib.js | 65 ++++++++++++++++++++++++++++++---------------
 1 file changed, 43 insertions(+), 22 deletions(-)

diff --git a/exec/load/cvslib.js b/exec/load/cvslib.js
index ec019f2c80..67d42c02ff 100644
--- a/exec/load/cvslib.js
+++ b/exec/load/cvslib.js
@@ -74,41 +74,41 @@ CVS = new (function () {
 	
 	/* default accepted responses  */
 	this.validResponses = {
-		'Checked-in':			true,
+		'Checked-in':			true,	// Required
 		'Checksum':				false,
 		'Clear-rename':			false,
 		'Clear-static-directory':false,
 		'Clear-sticky':			false,
-		'Copy-file':			true,
+		'Copy-file':			false,
 		'Created':				false,
-		'E':					true,
+		'E':					true,	// Handled
 		'EntriesExtra':			false,
-		'F':					true,
-		'M':					true,
-		'MT':					true,
+		'F':					true,	// Handled
+		'M':					true,	// Handled
+		'MT':					true,	// Handled
 		'Mbinary':				false,
-		'Merged':				true,
-		'Mod-time':				true,
+		'Merged':				true,	// Required
+		'Mod-time':				false,
 		'Mode':					false,
 		'Module-expansion':		false,
 		'New-entry':			false,
 		'Notified':				false,
 		'Patched':				false,
 		'Rcs-diff':				false,
-		'Remove-entry':			true,
-		'Removed':				true,
+		'Remove-entry':			false,
+		'Removed':				true,	// Required
 		'Renamed':				false,
 		'Set-checkin-prog':		false,
 		'Set-static-directory':	false,
 		'Set-sticky':			false,
 		'Set-update-prog':		false,
 		'Template':				false,
-		'Update-existing':		true,
-		'Updated':				true,
-		'Valid-requests':		true,
+		'Update-existing':		false,
+		'Updated':				true,	// Required
+		'Valid-requests':		true,	// Handled
 		'Wrapper-rcsOption':	false,
-		'error':				true,
-		'ok':					true,
+		'error':				true,	// Handled
+		'ok':					true,	// Handled
 	};
 	
 	/* populated by response to valid-requests  */
@@ -201,14 +201,34 @@ CVS = new (function () {
 	 */
 	
 	this.response getter = function() {
+		function split_cmd(str, count) {
+			if(count==undefined)
+				count=2;
+
+			var ret=[];
+
+			while(--count) {
+				var space=str.indexOf(' ');
+				if(space==-1)
+					break;
+				ret.push(str.substr(0, space));
+				str=str.substr(space+1);
+			}
+			ret.push(str);
+			return ret;
+		}
+		
 		for(;;) {
 			this.verifyConnection();
 			if(!this.socket.poll(1))
 				return undefined;
-			var response=this.socket.recvline(4096,10);
-			var cmd=response.split(' ', 2);
-			if(cmd.length < 2)
+			var response=this.socket.recvline(65535,10);
+			var cmd=split_cmd(response,2);
+			if(cmd.length < 2) {
+				if(cmd[0] != 'ok')
+					log(LOG_ERR, "Response with no arg: "+response);
 				return response;
+			}
 			switch(cmd[0]) {
 				case 'M':
 					log(LOG_INFO, cmd[1]);
@@ -216,7 +236,7 @@ CVS = new (function () {
 						writeln(cmd[1]);
 					break;
 				case 'MT':
-					var m=cmd[1].split(' ',2);
+					var m=cmd[1].split_cmd(' ',2);
 					switch(m[0]) {
 						case 'newline':
 							if(js.global.writeln)
@@ -237,9 +257,9 @@ CVS = new (function () {
 					}
 					break;
 				case 'E':
-					log(LOG_ERR, m[1]);
+					log(LOG_ERR, cmd[1]);
 					if(js.global.writeln)
-						writeln(m[1]);
+						writeln(cmd[1]);
 					break;
 				case 'F':
 					break;
@@ -255,7 +275,8 @@ CVS = new (function () {
 						log(LOG_ERR, "ERROR "+m[0]+" - "+m[1]);
 					}
 					else {
-						log(LOG_ERR, "ERROR - "+m[1]);
+						if(m[1].length > 0)
+							log(LOG_ERR, "ERROR - "+m[1]);
 					}
 					return response;
 				default:
-- 
GitLab