summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2011-04-15 17:41:07 +0200
committerantirez <antirez@gmail.com>2011-04-15 17:41:07 +0200
commit760099493752329e841b19a9578f9618daa55ef2 (patch)
tree0504ae583713eb58723a6786cc19c50d06113737
parent6a9764d1839579d76a3eff7744fd73075dfc4844 (diff)
downloadredis-760099493752329e841b19a9578f9618daa55ef2.tar.gz
Revert "variadic LPUSH/RPUSH backported to 2.2"
This reverts commit c138dc7da4cf210fd70f4c7621833bd0388fce77. Moving all the new stuff in 2.4 branch.
-rw-r--r--src/redis.c4
-rw-r--r--src/t_list.c45
2 files changed, 22 insertions, 27 deletions
diff --git a/src/redis.c b/src/redis.c
index 1775981b3..45be89376 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -85,8 +85,8 @@ struct redisCommand readonlyCommandTable[] = {
{"incr",incrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1},
{"decr",decrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1},
{"mget",mgetCommand,-2,0,NULL,1,-1,1},
- {"rpush",rpushCommand,-3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"lpush",lpushCommand,-3,REDIS_CMD_DENYOOM,NULL,1,1,1},
+ {"rpush",rpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
+ {"lpush",lpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
{"rpushx",rpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
{"lpushx",lpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
{"linsert",linsertCommand,5,REDIS_CMD_DENYOOM,NULL,1,1,1},
diff --git a/src/t_list.c b/src/t_list.c
index 3c7509123..47c927db7 100644
--- a/src/t_list.c
+++ b/src/t_list.c
@@ -259,35 +259,30 @@ void listTypeConvert(robj *subject, int enc) {
*----------------------------------------------------------------------------*/
void pushGenericCommand(redisClient *c, int where) {
- int j, addlen = 0, pushed = 0;
robj *lobj = lookupKeyWrite(c->db,c->argv[1]);
- int may_have_waiting_clients = (lobj == NULL);
-
- if (lobj && lobj->type != REDIS_LIST) {
- addReply(c,shared.wrongtypeerr);
- return;
- }
-
- for (j = 2; j < c->argc; j++) {
- c->argv[j] = tryObjectEncoding(c->argv[j]);
- if (may_have_waiting_clients) {
- if (handleClientsWaitingListPush(c,c->argv[1],c->argv[j])) {
- addlen++;
- continue;
- } else {
- may_have_waiting_clients = 0;
- }
+ c->argv[2] = tryObjectEncoding(c->argv[2]);
+ if (lobj == NULL) {
+ if (handleClientsWaitingListPush(c,c->argv[1],c->argv[2])) {
+ addReply(c,shared.cone);
+ return;
}
- if (!lobj) {
- lobj = createZiplistObject();
- dbAdd(c->db,c->argv[1],lobj);
+ lobj = createZiplistObject();
+ dbAdd(c->db,c->argv[1],lobj);
+ } else {
+ if (lobj->type != REDIS_LIST) {
+ addReply(c,shared.wrongtypeerr);
+ return;
+ }
+ if (handleClientsWaitingListPush(c,c->argv[1],c->argv[2])) {
+ touchWatchedKey(c->db,c->argv[1]);
+ addReply(c,shared.cone);
+ return;
}
- listTypePush(lobj,c->argv[j],where);
- pushed++;
}
- addReplyLongLong(c,addlen + (lobj ? listTypeLength(lobj) : 0));
- if (pushed) touchWatchedKey(c->db,c->argv[1]);
- server.dirty += pushed;
+ listTypePush(lobj,c->argv[2],where);
+ addReplyLongLong(c,listTypeLength(lobj));
+ touchWatchedKey(c->db,c->argv[1]);
+ server.dirty++;
}
void lpushCommand(redisClient *c) {