[Box Backup-commit] COMMIT r1260 - in box/chris/merge: lib/common test/common

boxbackup-dev@fluffy.co.uk boxbackup-dev@fluffy.co.uk
Tue, 16 Jan 2007 23:04:03 +0000


Author: chris
Date: 2007-01-16 23:04:03 +0000 (Tue, 16 Jan 2007)
New Revision: 1260

Modified:
   box/chris/merge/lib/common/ExcludeList.cpp
   box/chris/merge/test/common/testcommon.cpp
Log:
Check for exclude entries that end in a path separator, and log a warning
(refs #3)


Modified: box/chris/merge/lib/common/ExcludeList.cpp
===================================================================
--- box/chris/merge/lib/common/ExcludeList.cpp	2007-01-16 20:36:04 UTC (rev 1259)
+++ box/chris/merge/lib/common/ExcludeList.cpp	2007-01-16 23:04:03 UTC (rev 1260)
@@ -22,6 +22,7 @@
 #include "Utils.h"
 #include "Configuration.h"
 #include "Archive.h"
+#include "Logging.h"
 
 #include "MemLeakFindOn.h"
 
@@ -140,6 +141,14 @@
 			entry = ReplaceSlashesDefinite(entry);
 			#endif
 
+			if (entry.size() > 0 && entry[entry.size() - 1] == 
+				DIRECTORY_SEPARATOR_ASCHAR)
+			{
+				BOX_WARNING("Exclude entry ends in path "
+					"separator, will never match: " 
+					<< entry);
+			}
+
 			mDefinite.insert(entry);
 		}
 	}

Modified: box/chris/merge/test/common/testcommon.cpp
===================================================================
--- box/chris/merge/test/common/testcommon.cpp	2007-01-16 20:36:04 UTC (rev 1259)
+++ box/chris/merge/test/common/testcommon.cpp	2007-01-16 23:04:03 UTC (rev 1260)
@@ -30,6 +30,7 @@
 #include "CollectInBufferStream.h"
 #include "Archive.h"
 #include "Timer.h"
+#include "Logging.h"
 
 #include "MemLeakFindOn.h"
 
@@ -145,6 +146,40 @@
 	{ /* sleep again */ }
 }
 
+class TestLogger : public Logger
+{
+	private:
+	bool mTriggered;
+	Log::Level mTargetLevel;
+
+	public:
+	TestLogger(Log::Level targetLevel) 
+	: mTriggered(false), mTargetLevel(targetLevel)
+	{ 
+		Logging::Add(this);
+	}
+	~TestLogger() 
+	{
+		Logging::Remove(this);
+	}
+
+	bool IsTriggered() { return mTriggered; }
+	void Reset()       { mTriggered = false; }
+
+	virtual bool Log(Log::Level level, const std::string& rFile,
+		int line, std::string& rMessage)
+	{
+		if (level == mTargetLevel)
+		{
+			mTriggered = true;
+		}
+		return true;
+	}
+
+	virtual const char* GetType() { return "Test"; }
+	virtual void SetProgramName(const std::string& rProgramName) { }
+};
+
 int test(int argc, const char *argv[])
 {
 	// Test self-deleting temporary file streams
@@ -664,6 +699,8 @@
 	
 	// Test ExcludeList
 	{
+		TestLogger logger(Log::WARNING);
+
 		ExcludeList elist;
 		// Check assumption
 		TEST_THAT(Configuration::MultiValueSeparator == '\x01');
@@ -721,6 +758,24 @@
 		#endif
 
 		#undef CASE_SENSITIVE
+
+		TEST_THAT(!logger.IsTriggered());
+		elist.AddDefiniteEntries(std::string("/foo"));
+		TEST_THAT(!logger.IsTriggered());
+		elist.AddDefiniteEntries(std::string("/foo/"));
+		TEST_THAT(logger.IsTriggered());
+		logger.Reset();
+		elist.AddDefiniteEntries(std::string("/foo" 
+			DIRECTORY_SEPARATOR));
+		TEST_THAT(logger.IsTriggered());
+		logger.Reset();
+		elist.AddDefiniteEntries(std::string("/foo" 
+			DIRECTORY_SEPARATOR "bar\x01/foo"));
+		TEST_THAT(!logger.IsTriggered());
+		elist.AddDefiniteEntries(std::string("/foo" 
+			DIRECTORY_SEPARATOR "bar\x01/foo" 
+			DIRECTORY_SEPARATOR));
+		TEST_THAT(logger.IsTriggered());
 	}
 
 	test_conversions();