From 665853d99933d25ff67a65ef44e9604606ffb752 Mon Sep 17 00:00:00 2001
From: Florian Zeitz <florob@babelmonkeys.de>
Date: Fri, 2 Dec 2011 19:24:54 +0100
Subject: util.dataforms: Fix form verification

---
 util/dataforms.lua | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

(limited to 'util')

diff --git a/util/dataforms.lua b/util/dataforms.lua
index e4d24cf6..b69df819 100644
--- a/util/dataforms.lua
+++ b/util/dataforms.lua
@@ -120,12 +120,18 @@ function form_t.data(layout, stanza)
 			end
 		end
 
-		local reader = field_readers[field.type];
-		local verifier = field.verifier or field_verifiers[field.type];
-		if reader then
-			data[field.name] = reader(tag);
-			if verifier then
-				errors[field.name] = verifier(data[field.name], tag, field.required);
+		if not tag then
+			if field.required then
+				errors[field.name] = "Required value missing";
+			end
+		else
+			local reader = field_readers[field.type];
+			local verifier = field.verifier or field_verifiers[field.type];
+			if reader then
+				data[field.name] = reader(tag);
+				if verifier then
+					errors[field.name] = verifier(data[field.name], tag, field.required);
+				end
 			end
 		end
 	end
@@ -161,7 +167,7 @@ field_readers["jid-single"] =
 
 field_verifiers["jid-single"] =
 	function (data, field_tag, required)
-		if #data == 0 and required then
+		if ((not data) or (#data == 0)) and required then
 			return "Required value missing";
 		end
 		if not jid_prep(data) then
-- 
cgit v1.2.3


From fef2f58cb652bf2a0fd8ed27cf99e5b7bed63f42 Mon Sep 17 00:00:00 2001
From: Florian Zeitz <florob@babelmonkeys.de>
Date: Sat, 3 Dec 2011 17:10:48 +0100
Subject: util.dataforms: Fix verfication for booleans

---
 util/dataforms.lua | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'util')

diff --git a/util/dataforms.lua b/util/dataforms.lua
index b69df819..d4a1865c 100644
--- a/util/dataforms.lua
+++ b/util/dataforms.lua
@@ -252,7 +252,7 @@ field_readers["boolean"] =
 field_verifiers["boolean"] =
 	function (data, field_tag, required)
 		data = field_readers["text-single"](field_tag);
-		if #data == 0 and required then
+		if ((not data) or (#data == 0)) and required then
 			return "Required value missing";
 		end
 		if data ~= "1" and data ~= "true" and data ~= "0" and data ~= "false" then
-- 
cgit v1.2.3


From f1f5f74ad3c9b66cf60b5e86b5fc12afe52a448b Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 7 Dec 2011 05:04:55 +0000
Subject: util.array: Add pluck() method to pick a given property from each
 item

---
 util/array.lua | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'util')

diff --git a/util/array.lua b/util/array.lua
index 5dbd3037..cf586214 100644
--- a/util/array.lua
+++ b/util/array.lua
@@ -60,6 +60,13 @@ function array_base.sort(outa, ina, ...)
 	return outa;
 end
 
+function array_base.pluck(outa, ina, key)
+	for i=1,#ina do
+		outa[i] = ina[i][key];
+	end
+	return outa;
+end
+
 --- These methods only mutate
 function array_methods:random()
 	return self[math.random(1,#self)];
-- 
cgit v1.2.3


From f1f40bc3ca38cf67e38bcf844a6d99a9a4f9e9bb Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 7 Dec 2011 05:14:58 +0000
Subject: util.array: Expand some of the more basic methods to act more
 sensibly than their names suggested

---
 util/array.lua | 36 +++++++++++++++++++++++++++---------
 1 file changed, 27 insertions(+), 9 deletions(-)

(limited to 'util')

diff --git a/util/array.lua b/util/array.lua
index cf586214..cbb051d3 100644
--- a/util/array.lua
+++ b/util/array.lua
@@ -25,6 +25,15 @@ end
 
 setmetatable(array, { __call = new_array });
 
+-- Read-only methods
+function array_methods:random()
+	return self[math.random(1,#self)];
+end
+
+-- These methods can be called two ways:
+--   array.method(existing_array, [params [, ...]]) -- Create new array for result
+--   existing_array:method([params, ...]) -- Transform existing array into result
+--
 function array_base.map(outa, ina, func)
 	for k,v in ipairs(ina) do
 		outa[k] = func(v);
@@ -67,11 +76,7 @@ function array_base.pluck(outa, ina, key)
 	return outa;
 end
 
---- These methods only mutate
-function array_methods:random()
-	return self[math.random(1,#self)];
-end
-
+--- These methods only mutate the array
 function array_methods:shuffle(outa, ina)
 	local len = #self;
 	for i=1,#self do
@@ -98,10 +103,23 @@ function array_methods:append(array)
 	return self;
 end
 
-array_methods.push = table.insert;
-array_methods.pop = table.remove;
-array_methods.concat = table.concat;
-array_methods.length = function (t) return #t; end
+function array_methods:push(x)
+	table.insert(self, x);
+end
+
+function array_methods:pop(x)
+	local v = self[x];
+	table.remove(self, x);
+	return v;
+end
+
+function array_methods:concat(sep)
+	return table.concat(array.map(self, tostring), sep);
+end
+
+function array_methods:length()
+	return #self;
+end
 
 --- These methods always create a new array
 function array.collect(f, s, var)
-- 
cgit v1.2.3


From 0356027c053b6354e4ffda91ae44f7fc66af8411 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 7 Dec 2011 05:17:39 +0000
Subject: util.iterators: it2table: Fix variable name

---
 util/iterators.lua | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'util')

diff --git a/util/iterators.lua b/util/iterators.lua
index 2a87e97a..aa0b172b 100644
--- a/util/iterators.lua
+++ b/util/iterators.lua
@@ -140,7 +140,7 @@ end
 -- Treat the return of an iterator as key,value pairs,
 -- and build a table
 function it2table(f, s, var)
-	local t, var = {};
+	local t, var2 = {};
 	while true do
 		var, var2 = f(s, var);
 	        if var == nil then break; end
-- 
cgit v1.2.3


From 5cc76d979406b69055da5967865a7c35fe99bb8a Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Fri, 9 Dec 2011 11:57:14 +0500
Subject: util.array: Make array:push() chainable.

---
 util/array.lua | 1 +
 1 file changed, 1 insertion(+)

(limited to 'util')

diff --git a/util/array.lua b/util/array.lua
index cbb051d3..fdf3c9a3 100644
--- a/util/array.lua
+++ b/util/array.lua
@@ -105,6 +105,7 @@ end
 
 function array_methods:push(x)
 	table.insert(self, x);
+	return self;
 end
 
 function array_methods:pop(x)
-- 
cgit v1.2.3


From 5a64ace81c91f534637555c60ee35dbfa5f6ac26 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Fri, 9 Dec 2011 12:02:21 +0500
Subject: util.array: Avoid globals.

---
 util/array.lua | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

(limited to 'util')

diff --git a/util/array.lua b/util/array.lua
index fdf3c9a3..5dc604ba 100644
--- a/util/array.lua
+++ b/util/array.lua
@@ -9,6 +9,11 @@
 local t_insert, t_sort, t_remove, t_concat
     = table.insert, table.sort, table.remove, table.concat;
 
+local setmetatable = setmetatable;
+local math_random = math.random;
+local pairs, ipairs = pairs, ipairs;
+local tostring = tostring;
+
 local array = {};
 local array_base = {};
 local array_methods = {};
@@ -27,7 +32,7 @@ setmetatable(array, { __call = new_array });
 
 -- Read-only methods
 function array_methods:random()
-	return self[math.random(1,#self)];
+	return self[math_random(1,#self)];
 end
 
 -- These methods can be called two ways:
@@ -80,7 +85,7 @@ end
 function array_methods:shuffle(outa, ina)
 	local len = #self;
 	for i=1,#self do
-		local r = math.random(i,len);
+		local r = math_random(i,len);
 		self[i], self[r] = self[r], self[i];
 	end
 	return self;
@@ -104,18 +109,18 @@ function array_methods:append(array)
 end
 
 function array_methods:push(x)
-	table.insert(self, x);
+	t_insert(self, x);
 	return self;
 end
 
 function array_methods:pop(x)
 	local v = self[x];
-	table.remove(self, x);
+	t_remove(self, x);
 	return v;
 end
 
 function array_methods:concat(sep)
-	return table.concat(array.map(self, tostring), sep);
+	return t_concat(array.map(self, tostring), sep);
 end
 
 function array_methods:length()
@@ -128,7 +133,7 @@ function array.collect(f, s, var)
 	while true do
 		var = f(s, var);
 	        if var == nil then break; end
-		table.insert(t, var);
+		t_insert(t, var);
 	end
 	return setmetatable(t, array_mt);
 end
-- 
cgit v1.2.3


From b1a0c2c1a8bdfcb1ec2dc3e6a1c02dcfa838649c Mon Sep 17 00:00:00 2001
From: James Callahan <james@chatid.com>
Date: Mon, 12 Dec 2011 17:08:48 +1100
Subject: util/datamanager: Use package.config to figure out directory
 seperator

---
 util/datamanager.lua | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'util')

diff --git a/util/datamanager.lua b/util/datamanager.lua
index d5e9c88c..a5d676cc 100644
--- a/util/datamanager.lua
+++ b/util/datamanager.lua
@@ -1,7 +1,7 @@
 -- Prosody IM
 -- Copyright (C) 2008-2010 Matthew Wild
 -- Copyright (C) 2008-2010 Waqas Hussain
--- 
+--
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
@@ -20,7 +20,7 @@ local error = error;
 local next = next;
 local t_insert = table.insert;
 local append = require "util.serialization".append;
-local path_separator = "/"; if os.getenv("WINDIR") then path_separator = "\\" end
+local path_separator = assert ( package.config:match ( "^([^\n]+)" ) , "package.config not in standard form" ) -- Extract directory seperator from package.config (an undocumented string that comes with lua)
 local lfs = require "lfs";
 local prosody = prosody;
 local raw_mkdir;
@@ -72,7 +72,7 @@ local function callback(username, host, datastore, data)
 		username, host, datastore, data = f(username, host, datastore, data);
 		if username == false then break; end
 	end
-	
+
 	return username, host, datastore, data;
 end
 function add_callback(func)
-- 
cgit v1.2.3


From d0f4bbd2dbe8a2ff9088cd47dad8418d1030637e Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 21 Dec 2011 07:58:22 +0000
Subject: util.stanza: Remove unused __add metamethod

---
 util/stanza.lua | 5 -----
 1 file changed, 5 deletions(-)

(limited to 'util')

diff --git a/util/stanza.lua b/util/stanza.lua
index de83977f..600212a4 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -258,11 +258,6 @@ function stanza_mt.get_error(stanza)
 	return type, condition or "undefined-condition", text;
 end
 
-function stanza_mt.__add(s1, s2)
-	return s1:add_direct_child(s2);
-end
-
-
 do
 	local id = 0;
 	function new_id()
-- 
cgit v1.2.3


From e898c683046c6ed14c3f3565418578661b986821 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 13 Jan 2012 15:46:36 +0000
Subject: util.debug: Adjust level within get_locals_table() to account for the
 additional depth of this function itself

---
 util/debug.lua | 1 +
 1 file changed, 1 insertion(+)

(limited to 'util')

diff --git a/util/debug.lua b/util/debug.lua
index 22d02bf2..2170a6d1 100644
--- a/util/debug.lua
+++ b/util/debug.lua
@@ -9,6 +9,7 @@ local censored_names = {
 };
 
 local function get_locals_table(level)
+	level = level + 1; -- Skip this function itself
 	local locals = {};
 	for local_num = 1, math.huge do
 		local name, value = debug.getlocal(level, local_num);
-- 
cgit v1.2.3


From 8cc3779cc2aace85b44635460355601c164277ad Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 13 Jan 2012 23:30:00 +0000
Subject: util.throttle: Import setmetatable

---
 util/throttle.lua | 1 +
 1 file changed, 1 insertion(+)

(limited to 'util')

diff --git a/util/throttle.lua b/util/throttle.lua
index 8b62e797..82b0a67b 100644
--- a/util/throttle.lua
+++ b/util/throttle.lua
@@ -1,5 +1,6 @@
 
 local gettime = require "socket".gettime;
+local setmetatable = setmetatable;
 
 module "throttle"
 
-- 
cgit v1.2.3


From 08fe482e7f8c4e1971d5a4a66a3419bca4fb4022 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 13 Jan 2012 23:30:32 +0000
Subject: util.throttle: Fix 'outstanding' return value

---
 util/throttle.lua | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'util')

diff --git a/util/throttle.lua b/util/throttle.lua
index 82b0a67b..2e901158 100644
--- a/util/throttle.lua
+++ b/util/throttle.lua
@@ -34,7 +34,7 @@ function throttle:poll(cost, split)
 		if split then
 			self.balance = 0;
 		end
-		return false, balance, (cost-self.balance);
+		return false, balance, (cost-balance);
 	end
 end
 
-- 
cgit v1.2.3


From d79def083bd4f80242ada7e98f4c24d85787305f Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Wed, 18 Jan 2012 08:54:26 +0500
Subject: util.json: Added function encode_ordered(object).

---
 util/json.lua | 31 +++++++++++++++++++++++++------
 1 file changed, 25 insertions(+), 6 deletions(-)

(limited to 'util')

diff --git a/util/json.lua b/util/json.lua
index 5d0b0876..efc602f0 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -1,6 +1,6 @@
 
 local type = type;
-local t_insert, t_concat, t_remove = table.insert, table.concat, table.remove;
+local t_insert, t_concat, t_remove, t_sort = table.insert, table.concat, table.remove, table.sort;
 local s_char = string.char;
 local tostring, tonumber = tostring, tonumber;
 local pairs, ipairs = pairs, ipairs;
@@ -79,11 +79,25 @@ function tablesave(o, buffer)
 	if next(__hash) ~= nil or next(hash) ~= nil or next(__array) == nil then
 		t_insert(buffer, "{");
 		local mark = #buffer;
-		for k,v in pairs(hash) do
-			stringsave(k, buffer);
-			t_insert(buffer, ":");
-			simplesave(v, buffer);
-			t_insert(buffer, ",");
+		if buffer.ordered then
+			local keys = {};
+			for k in pairs(hash) do
+				t_insert(keys, k);
+			end
+			t_sort(keys);
+			for _,k in ipairs(keys) do
+				stringsave(k, buffer);
+				t_insert(buffer, ":");
+				simplesave(hash[k], buffer);
+				t_insert(buffer, ",");
+			end
+		else
+			for k,v in pairs(hash) do
+				stringsave(k, buffer);
+				t_insert(buffer, ":");
+				simplesave(v, buffer);
+				t_insert(buffer, ",");
+			end
 		end
 		if next(__hash) ~= nil then
 			t_insert(buffer, "\"__hash\":[");
@@ -129,6 +143,11 @@ function json.encode(obj)
 	simplesave(obj, t);
 	return t_concat(t);
 end
+function json.encode_ordered(obj)
+	local t = { ordered = true };
+	simplesave(obj, t);
+	return t_concat(t);
+end
 
 -----------------------------------
 
-- 
cgit v1.2.3


From b7625791b1405721a4a9d9d7392328a6a372c2ef Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Sun, 22 Jan 2012 19:10:13 +0000
Subject: util.helpers: After nearly 'fixing' this code, I conclude it instead
 only deserves a bigger smile

---
 util/helpers.lua | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'util')

diff --git a/util/helpers.lua b/util/helpers.lua
index 11356176..a8c8c612 100644
--- a/util/helpers.lua
+++ b/util/helpers.lua
@@ -28,7 +28,7 @@ function log_events(events, name, logger)
 end
 
 function revert_log_events(events)
-	events.fire_event, events[events.fire_event] = events[events.fire_event], nil; -- :)
+	events.fire_event, events[events.fire_event] = events[events.fire_event], nil; -- :))
 end
 
 function get_upvalue(f, get_name)
-- 
cgit v1.2.3