[CalendarServer-changes] [1953] PyOpenDirectory/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Oct 11 13:11:59 PDT 2007


Revision: 1953
          http://trac.macosforge.org/projects/calendarserver/changeset/1953
Author:   cdaboo at apple.com
Date:     2007-10-11 13:11:58 -0700 (Thu, 11 Oct 2007)

Log Message:
-----------
Refactor code so that we can make all queries thread safe. We now have a class that is instantiated with each
query/auth and that maintains the buffers, DS state for the duration of that query only. Thus each query
is independent of any others that may happen at the same time in a different thread.

Modified Paths:
--------------
    PyOpenDirectory/trunk/setup.py
    PyOpenDirectory/trunk/src/CDirectoryService.cpp
    PyOpenDirectory/trunk/src/CDirectoryService.h
    PyOpenDirectory/trunk/src/PythonWrapper.cpp
    PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.mode1v3
    PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.pbxuser
    PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/project.pbxproj

Added Paths:
-----------
    PyOpenDirectory/trunk/src/CDirectoryServiceException.cpp
    PyOpenDirectory/trunk/src/CDirectoryServiceException.h
    PyOpenDirectory/trunk/src/CDirectoryServiceManager.cpp
    PyOpenDirectory/trunk/src/CDirectoryServiceManager.h

Modified: PyOpenDirectory/trunk/setup.py
===================================================================
--- PyOpenDirectory/trunk/setup.py	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/setup.py	2007-10-11 20:11:58 UTC (rev 1953)
@@ -29,7 +29,13 @@
     module1 = Extension(
         'opendirectory',
         extra_link_args = ['-framework', 'DirectoryService', "-framework", "CoreFoundation"],
-        sources = ['src/PythonWrapper.cpp', 'src/CDirectoryService.cpp', 'src/CFStringUtil.cpp'],
+        sources = [
+            'src/PythonWrapper.cpp',
+            'src/CDirectoryServiceManager.cpp',
+            'src/CDirectoryService.cpp',
+            'src/CDirectoryServiceException.cpp',
+            'src/CFStringUtil.cpp',
+        ],
     )
     
     setup (

Modified: PyOpenDirectory/trunk/src/CDirectoryService.cpp
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryService.cpp	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/src/CDirectoryService.cpp	2007-10-11 20:11:58 UTC (rev 1953)
@@ -21,6 +21,8 @@
 
 #include "CDirectoryService.h"
 
+#include "CDirectoryServiceException.h"
+
 #include "CFStringUtil.h"
 
 #include <Python.h>
@@ -31,9 +33,6 @@
 
 extern PyObject* ODException_class;
 
-# define ThrowIfDSErr(x) { if (x != eDSNoErr) ThrowDSError(x, __FILE__, __LINE__); }
-# define ThrowIfNULL(x) { if (x == NULL) ThrowDSError(-1, __FILE__, __LINE__); }
-
 // This is copied from WhitePages
 #define		kDSStdRecordTypeResources				"dsRecTypeStandard:Resources"
 
@@ -97,9 +96,9 @@
 		// Get attribute map
 		return _ListAllRecordsWithAttributes(recordType, NULL, attributes);
 	}
-	catch(SDirectoryServiceException& dserror)
+	catch(CDirectoryServiceException& dserror)
 	{
-		SetPythonException(dserror);
+		dserror.SetPythonException();
 		return NULL;
 	}
 	catch(...)
@@ -131,9 +130,9 @@
 		// Get attribute map
 		return _QueryRecordsWithAttributes(attr, value, matchType, NULL, casei, recordType, attributes);
 	}
-	catch(SDirectoryServiceException& dserror)
+	catch(CDirectoryServiceException& dserror)
 	{
-		SetPythonException(dserror);		
+		dserror.SetPythonException();		
 		return NULL;
 	}
 	catch(...)
@@ -163,9 +162,9 @@
 		// Get attribute map
 		return _QueryRecordsWithAttributes(NULL, NULL, 0, query, casei, recordType, attributes);
 	}
-	catch(SDirectoryServiceException& dserror)
+	catch(CDirectoryServiceException& dserror)
 	{
-		SetPythonException(dserror);
+		dserror.SetPythonException();
 		return NULL;
 	}
 	catch(...)
@@ -191,9 +190,9 @@
 		result = NativeAuthenticationBasicToNode(nodename, user, pswd);
 		return true;
 	}
-	catch(SDirectoryServiceException& dserror)
+	catch(CDirectoryServiceException& dserror)
 	{
-		SetPythonException(dserror);
+		dserror.SetPythonException();
 		return false;
 	}
 	catch(...)
@@ -219,9 +218,9 @@
 		result = NativeAuthenticationDigestToNode(nodename, user, challenge, response, method);
 		return true;
 	}
-	catch(SDirectoryServiceException& dserror)
+	catch(CDirectoryServiceException& dserror)
 	{
-		SetPythonException(dserror);	
+		dserror.SetPythonException();	
 		return false;
 	}
 	catch(...)
@@ -403,7 +402,7 @@
 		CloseNode();
 		CloseService();
 	}
-	catch(SDirectoryServiceException& dsStatus)
+	catch(CDirectoryServiceException& dsStatus)
 	{
 		// Cleanup
 		if (context != NULL)
@@ -652,7 +651,7 @@
 		CloseNode();
 		CloseService();
 	}
-	catch(SDirectoryServiceException& dsStatus)
+	catch(CDirectoryServiceException& dsStatus)
 	{
 		// Cleanup
 		if (context != NULL)
@@ -1113,18 +1112,3 @@
 	return result;
 }
 
-void CDirectoryService::ThrowDSError(long error, const char* file, long line)
-{
-	CDirectoryService::SDirectoryServiceException dirStatus;
-	dirStatus.mDSError = error;
-	::snprintf(dirStatus.mDescription, 1024, "Exception raised in file %s at line %ld", file, line);
-	throw dirStatus;
-}
-
-void CDirectoryService::SetPythonException(const SDirectoryServiceException& ex)
-{
-	char error[1024];
-	::snprintf(error, 1024, "%s %s", "DirectoryServices Error:", ex.mDescription);
-	PyErr_SetObject(ODException_class, Py_BuildValue("((s:i))", error, ex.mDSError));		
-}
-

Modified: PyOpenDirectory/trunk/src/CDirectoryService.h
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryService.h	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/src/CDirectoryService.h	2007-10-11 20:11:58 UTC (rev 1953)
@@ -41,12 +41,6 @@
 	
 private:
 
-	struct SDirectoryServiceException
-	{
-		long		mDSError;
-		char		mDescription[1024];
-	};
-
 	const char*			mNodeName;
 	tDirReference		mDir;
 	tDirNodeReference	mNode;
@@ -74,7 +68,4 @@
 
 	char* CStringFromBuffer(tDataBufferPtr data);
 	char* CStringFromData(const char* data, size_t len);
-
-	void ThrowDSError(long error, const char* file, long line);
-	void SetPythonException(const SDirectoryServiceException& ex);
 };

Added: PyOpenDirectory/trunk/src/CDirectoryServiceException.cpp
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryServiceException.cpp	                        (rev 0)
+++ PyOpenDirectory/trunk/src/CDirectoryServiceException.cpp	2007-10-11 20:11:58 UTC (rev 1953)
@@ -0,0 +1,55 @@
+/**
+ * A class that wraps high-level Directory Service calls needed by the
+ * CalDAV server.
+ **
+ * Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * DRI: Cyrus Daboo, cdaboo at apple.com
+ **/
+
+#include "CDirectoryServiceException.h"
+
+#include <Python.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+extern PyObject* ODException_class;
+
+#pragma mark -----Public API
+
+CDirectoryServiceException::CDirectoryServiceException(long error, const char* file, long line)
+{
+	mDSError = error;
+	::snprintf(mDescription, 1024, "Exception raised in file %s at line %ld", file, line);
+}
+
+CDirectoryServiceException::~CDirectoryServiceException()
+{
+}
+
+void CDirectoryServiceException::ThrowDSError(long error, const char* file, long line)
+{
+	CDirectoryServiceException dirStatus(error, file, line);
+	throw dirStatus;
+}
+
+void CDirectoryServiceException::SetPythonException()
+{
+	char error[1024];
+	::snprintf(error, 1024, "%s %s", "DirectoryServices Error:", mDescription);
+	PyErr_SetObject(ODException_class, Py_BuildValue("((s:i))", error, mDSError));		
+}
+

Added: PyOpenDirectory/trunk/src/CDirectoryServiceException.h
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryServiceException.h	                        (rev 0)
+++ PyOpenDirectory/trunk/src/CDirectoryServiceException.h	2007-10-11 20:11:58 UTC (rev 1953)
@@ -0,0 +1,40 @@
+/**
+ * A class that wraps high-level Directory Service calls needed by the
+ * CalDAV server.
+ **
+ * Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * DRI: Cyrus Daboo, cdaboo at apple.com
+ **/
+
+#pragma once
+
+class CDirectoryServiceException
+{
+public:
+	CDirectoryServiceException(long error, const char* file, long line);
+	~CDirectoryServiceException();
+	
+	static void ThrowDSError(long error, const char* file, long line);
+
+	void SetPythonException();
+	
+private:
+	long		mDSError;
+	char		mDescription[1024];
+};
+
+# define ThrowIfDSErr(x) { if (x != eDSNoErr) CDirectoryServiceException::ThrowDSError(x, __FILE__, __LINE__); }
+# define ThrowIfNULL(x) { if (x == NULL) CDirectoryServiceException::ThrowDSError(-1, __FILE__, __LINE__); }

Added: PyOpenDirectory/trunk/src/CDirectoryServiceManager.cpp
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryServiceManager.cpp	                        (rev 0)
+++ PyOpenDirectory/trunk/src/CDirectoryServiceManager.cpp	2007-10-11 20:11:58 UTC (rev 1953)
@@ -0,0 +1,42 @@
+/**
+ * A class that wraps high-level Directory Service calls needed by the
+ * CalDAV server.
+ **
+ * Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * DRI: Cyrus Daboo, cdaboo at apple.com
+ **/
+
+#include "CDirectoryServiceManager.h"
+
+#include "CDirectoryService.h"
+#include "CDirectoryServiceException.h"
+
+#pragma mark -----Public API
+
+CDirectoryServiceManager::CDirectoryServiceManager(const char* nodename)
+{
+	mNodeName = ::strdup(nodename);
+}
+
+CDirectoryServiceManager::~CDirectoryServiceManager()
+{
+	::free(mNodeName);
+}
+
+CDirectoryService* CDirectoryServiceManager::GetService()
+{
+	return new CDirectoryService(mNodeName);
+}

Added: PyOpenDirectory/trunk/src/CDirectoryServiceManager.h
===================================================================
--- PyOpenDirectory/trunk/src/CDirectoryServiceManager.h	                        (rev 0)
+++ PyOpenDirectory/trunk/src/CDirectoryServiceManager.h	2007-10-11 20:11:58 UTC (rev 1953)
@@ -0,0 +1,39 @@
+/**
+ * A class that wraps high-level Directory Service calls needed by the
+ * CalDAV server.
+ **
+ * Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * DRI: Cyrus Daboo, cdaboo at apple.com
+ **/
+
+#pragma once
+
+class CDirectoryService;
+
+class CDirectoryServiceManager
+{
+public:
+	CDirectoryServiceManager(const char* nodename);
+	~CDirectoryServiceManager();
+
+	void OpenService();
+	void CloseService();
+
+	CDirectoryService* GetService();
+
+private:
+	char*			mNodeName;
+};

Modified: PyOpenDirectory/trunk/src/PythonWrapper.cpp
===================================================================
--- PyOpenDirectory/trunk/src/PythonWrapper.cpp	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/src/PythonWrapper.cpp	2007-10-11 20:11:58 UTC (rev 1953)
@@ -19,9 +19,12 @@
 #include <CoreFoundation/CoreFoundation.h>
 #include <Python.h>
 
+#include "CDirectoryServiceManager.h"
 #include "CDirectoryService.h"
 #include "CFStringUtil.h"
 
+#include <memory>
+
 #ifndef Py_RETURN_TRUE
 #define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
 #endif
@@ -224,8 +227,8 @@
  */
 extern "C" void odDestroy(void* obj)
 {
-	CDirectoryService* ds = static_cast<CDirectoryService*>(obj);
-	delete ds;
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(obj);
+	delete dsmgr;
 }
 
 /*
@@ -247,10 +250,10 @@
         return NULL;
     }
 
-	CDirectoryService* ds = new CDirectoryService(nodename);
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = new CDirectoryServiceManager(nodename);
+	if (dsmgr != NULL)
 	{
-		return PyCObject_FromVoidPtr(ds, odDestroy);
+		return PyCObject_FromVoidPtr(dsmgr, odDestroy);
 	}
 	
 	PyErr_SetObject(ODException_class, Py_BuildValue("((s:i))", "DirectoryServices odInit: could not initialize directory service", 0));		
@@ -287,10 +290,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->ListAllRecordsWithAttributes(recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->ListAllRecordsWithAttributes(recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyDict(list);
@@ -350,10 +357,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->QueryRecordsWithAttribute(attr, value, matchType, casei, recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->QueryRecordsWithAttribute(attr, value, matchType, casei, recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyDict(list);
@@ -409,10 +420,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->QueryRecordsWithAttributes(query, casei, recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->QueryRecordsWithAttributes(query, casei, recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyDict(list);
@@ -460,10 +475,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->ListAllRecordsWithAttributes(recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->ListAllRecordsWithAttributes(recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyList(list);
@@ -523,10 +542,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->QueryRecordsWithAttribute(attr, value, matchType, casei, recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->QueryRecordsWithAttribute(attr, value, matchType, casei, recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyList(list);
@@ -582,10 +605,14 @@
         return NULL;
     }
 
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
-		CFMutableArrayRef list = ds->QueryRecordsWithAttributes(query, casei, recordType, cfattributes);
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
+		CFMutableArrayRef list = NULL;
+		Py_BEGIN_ALLOW_THREADS
+		list = ds->QueryRecordsWithAttributes(query, casei, recordType, cfattributes);
+		Py_END_ALLOW_THREADS
 		if (list != NULL)
 		{
 			PyObject* result = CFArrayArrayDictionaryToPyList(list);
@@ -626,13 +653,18 @@
         return NULL;
     }
 	
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
 		bool result = false;
-		if (ds->AuthenticateUserBasic(nodename, user, pswd, result))
+		bool authresult = false;
+		Py_BEGIN_ALLOW_THREADS
+		result = ds->AuthenticateUserBasic(nodename, user, pswd, authresult);
+		Py_END_ALLOW_THREADS
+		if (result)
 		{
-			if (result)
+			if (authresult)
 				Py_RETURN_TRUE;
 			else
 				Py_RETURN_FALSE;
@@ -672,13 +704,18 @@
         return NULL;
     }
 	
-	CDirectoryService* ds = static_cast<CDirectoryService*>(PyCObject_AsVoidPtr(pyds));
-	if (ds != NULL)
+	CDirectoryServiceManager* dsmgr = static_cast<CDirectoryServiceManager*>(PyCObject_AsVoidPtr(pyds));
+	if (dsmgr != NULL)
 	{
+		std::auto_ptr<CDirectoryService> ds(dsmgr->GetService());
 		bool result = false;
-		if (ds->AuthenticateUserDigest(nodename, user, challenge, response, method, result))
+		bool authresult = false;
+		Py_BEGIN_ALLOW_THREADS
+		result = ds->AuthenticateUserDigest(nodename, user, challenge, response, method, authresult);
+		Py_END_ALLOW_THREADS
+		if (result)
 		{
-			if (result)
+			if (authresult)
 				Py_RETURN_TRUE;
 			else
 				Py_RETURN_FALSE;

Modified: PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.mode1v3
===================================================================
--- PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.mode1v3	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.mode1v3	2007-10-11 20:11:58 UTC (rev 1953)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
 	<key>ActivePerspectiveName</key>
@@ -72,9 +72,9 @@
 			<key>MaxInstances</key>
 			<string>n</string>
 			<key>Module</key>
-			<string>PBXRunSessionModule</string>
+			<string>XCProjectFormatConflictsModule</string>
 			<key>Name</key>
-			<string>Run Log</string>
+			<string>Project Format Conflicts List</string>
 		</dict>
 		<dict>
 			<key>BundleLoadPath</key>
@@ -167,6 +167,8 @@
 			<string>Snapshots Tool</string>
 		</dict>
 	</array>
+	<key>BundlePath</key>
+	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
 	<key>Description</key>
 	<string>DefaultDescriptionKey</string>
 	<key>DockingSystemVisible</key>
@@ -176,7 +178,7 @@
 	<key>FavBarConfig</key>
 	<dict>
 		<key>PBXProjectModuleGUID</key>
-		<string>AF0015450B8A1E530045DAEE</string>
+		<string>AF275A240CAC15CA005A6274</string>
 		<key>XCBarModuleItemNames</key>
 		<dict/>
 		<key>XCBarModuleItems</key>
@@ -187,9 +189,9 @@
 	<key>Identifier</key>
 	<string>com.apple.perspectives.project.mode1v3</string>
 	<key>MajorVersion</key>
-	<integer>32</integer>
+	<integer>33</integer>
 	<key>MinorVersion</key>
-	<integer>1</integer>
+	<integer>0</integer>
 	<key>Name</key>
 	<string>Default</string>
 	<key>Notifications</key>
@@ -253,7 +255,7 @@
 						<dict>
 							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
 							<array>
-								<real>316</real>
+								<real>244</real>
 							</array>
 							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
 							<array>
@@ -271,11 +273,12 @@
 							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
 							<array>
 								<array>
+									<integer>1</integer>
 									<integer>0</integer>
 								</array>
 							</array>
 							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
-							<string>{{0, 0}, {316, 1060}}</string>
+							<string>{{0, 0}, {244, 682}}</string>
 						</dict>
 						<key>PBXTopSmartGroupGIDs</key>
 						<array/>
@@ -287,19 +290,19 @@
 					<key>GeometryConfiguration</key>
 					<dict>
 						<key>Frame</key>
-						<string>{{0, 0}, {333, 1078}}</string>
+						<string>{{0, 0}, {261, 700}}</string>
 						<key>GroupTreeTableConfiguration</key>
 						<array>
 							<string>MainColumn</string>
-							<real>316</real>
+							<real>244</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>0 59 1920 1119 0 0 1920 1178 </string>
+						<string>0 437 1259 741 0 0 1920 1178 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
 					<key>Proportion</key>
-					<string>333pt</string>
+					<string>261pt</string>
 				</dict>
 				<dict>
 					<key>Dock</key>
@@ -310,7 +313,7 @@
 								<key>PBXProjectModuleGUID</key>
 								<string>1CE0B20306471E060097A5F4</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>test.cpp</string>
+								<string>MyNewFile14.java</string>
 								<key>PBXSplitModuleInNavigatorKey</key>
 								<dict>
 									<key>Split0</key>
@@ -318,22 +321,7 @@
 										<key>PBXProjectModuleGUID</key>
 										<string>1CE0B20406471E060097A5F4</string>
 										<key>PBXProjectModuleLabel</key>
-										<string>test.cpp</string>
-										<key>_historyCapacity</key>
-										<integer>0</integer>
-										<key>bookmark</key>
-										<string>AF63114C0B8F89FB000D1C1A</string>
-										<key>history</key>
-										<array>
-											<string>AF6311050B8F74FC000D1C1A</string>
-											<string>AF63112B0B8F85FF000D1C1A</string>
-											<string>AF63112C0B8F85FF000D1C1A</string>
-										</array>
-										<key>prevStack</key>
-										<array>
-											<string>AF6311070B8F74FC000D1C1A</string>
-											<string>AF63112D0B8F85FF000D1C1A</string>
-										</array>
+										<string>MyNewFile14.java</string>
 									</dict>
 									<key>SplitCount</key>
 									<string>1</string>
@@ -344,14 +332,14 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1582, 702}}</string>
+								<string>{{0, 0}, {993, 0}}</string>
 								<key>RubberWindowFrame</key>
-								<string>0 59 1920 1119 0 0 1920 1178 </string>
+								<string>0 437 1259 741 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>702pt</string>
+							<string>0pt</string>
 						</dict>
 						<dict>
 							<key>BecomeActive</key>
@@ -366,18 +354,18 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 707}, {1582, 371}}</string>
+								<string>{{0, 5}, {993, 695}}</string>
 								<key>RubberWindowFrame</key>
-								<string>0 59 1920 1119 0 0 1920 1178 </string>
+								<string>0 437 1259 741 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>371pt</string>
+							<string>695pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>1582pt</string>
+					<string>993pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -392,9 +380,9 @@
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>AF63105B0B8F5542000D1C1A</string>
+				<string>AF02ACB10CBE789100F478B8</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>AF63105C0B8F5542000D1C1A</string>
+				<string>AF02ACB20CBE789100F478B8</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
@@ -509,7 +497,7 @@
 	<key>ShelfIsVisible</key>
 	<false/>
 	<key>SourceDescription</key>
-	<string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
+	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
 	<key>StatusbarIsVisible</key>
 	<true/>
 	<key>TimeStamp</key>
@@ -528,46 +516,11 @@
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>AF6311480B8F8910000D1C1A</string>
-		<string>AF63112F0B8F85FF000D1C1A</string>
-		<string>AF6311320B8F85FF000D1C1A</string>
-		<string>AF6311330B8F85FF000D1C1A</string>
-		<string>AF6311170B8F7A2C000D1C1A</string>
-		<string>AF63111B0B8F7A2C000D1C1A</string>
-		<string>AF63110F0B8F7686000D1C1A</string>
-		<string>AF6311120B8F7686000D1C1A</string>
-		<string>AF6311090B8F74FC000D1C1A</string>
-		<string>AF63110C0B8F74FC000D1C1A</string>
-		<string>AF6310FC0B8F7441000D1C1A</string>
-		<string>AF6311020B8F7441000D1C1A</string>
-		<string>AF6310FF0B8F7441000D1C1A</string>
-		<string>AF6310DA0B8F6DD6000D1C1A</string>
-		<string>AF6310D70B8F6DD6000D1C1A</string>
-		<string>AF6310BF0B8F6BA0000D1C1A</string>
-		<string>AF6310C80B8F6BA0000D1C1A</string>
-		<string>AF6310C90B8F6BA0000D1C1A</string>
-		<string>AF6310CA0B8F6BA0000D1C1A</string>
-		<string>AF6310CB0B8F6BA0000D1C1A</string>
-		<string>AF6310CC0B8F6BA0000D1C1A</string>
-		<string>AF63108D0B8F664E000D1C1A</string>
-		<string>1C78EAAD065D492600B07095</string>
-		<string>1CD10A99069EF8BA00B06720</string>
-		<string>AF6310910B8F664E000D1C1A</string>
-		<string>AF6310920B8F664E000D1C1A</string>
-		<string>AF6310930B8F664E000D1C1A</string>
-		<string>AF0015490B8A1E6C0045DAEE</string>
-		<string>AF6310730B8F5E00000D1C1A</string>
-		<string>AF63106D0B8F585C000D1C1A</string>
-		<string>AF63106E0B8F585C000D1C1A</string>
-		<string>AF63106A0B8F585C000D1C1A</string>
-		<string>AF63106F0B8F585C000D1C1A</string>
-		<string>AF6310700B8F585C000D1C1A</string>
-		<string>AF63105D0B8F5542000D1C1A</string>
-		<string>AF6310630B8F5542000D1C1A</string>
-		<string>/Users/cyrusdaboo/Documents/Development/Apple/eclipse/PyOpenDirectory/support/PyOpenDirectory.xcodeproj</string>
+		<string>AF275A0D0CAC0FEA005A6274</string>
+		<string>/Volumes/Data/Users/cyrusdaboo/Documents/Development/Apple/eclipse/PyOpenDirectory/support/PyOpenDirectory.xcodeproj</string>
 	</array>
 	<key>WindowString</key>
-	<string>0 59 1920 1119 0 0 1920 1178 </string>
+	<string>0 437 1259 741 0 0 1920 1178 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>
@@ -583,30 +536,30 @@
 					<key>Dock</key>
 					<array>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 								<string>1CD0528F0623707200166675</string>
 								<key>PBXProjectModuleLabel</key>
-								<string>PythonWrapper.cpp</string>
+								<string></string>
 								<key>StatusBarVisibility</key>
 								<true/>
 							</dict>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1102, 398}}</string>
+								<string>{{0, 0}, {1224, 453}}</string>
 								<key>RubberWindowFrame</key>
-								<string>674 408 1102 680 0 0 1920 1178 </string>
+								<string>25 406 1224 772 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>398pt</string>
+							<string>453pt</string>
 						</dict>
 						<dict>
+							<key>BecomeActive</key>
+							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -621,18 +574,18 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 403}, {1102, 236}}</string>
+								<string>{{0, 458}, {1224, 450}}</string>
 								<key>RubberWindowFrame</key>
-								<string>674 408 1102 680 0 0 1920 1178 </string>
+								<string>25 406 1224 772 0 0 1920 1178 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXBuildResultsModule</string>
 							<key>Proportion</key>
-							<string>236pt</string>
+							<string>450pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>639pt</string>
+					<string>731pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -645,27 +598,23 @@
 			<true/>
 			<key>TableOfContents</key>
 			<array>
-				<string>AF0015490B8A1E6C0045DAEE</string>
-				<string>AF63107C0B8F62C5000D1C1A</string>
+				<string>AF275A0D0CAC0FEA005A6274</string>
+				<string>AF02AC5C0CBE6A8000F478B8</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.buildV3</string>
 			<key>WindowString</key>
-			<string>674 408 1102 680 0 0 1920 1178 </string>
+			<string>25 406 1224 772 0 0 1920 1178 </string>
 			<key>WindowToolGUID</key>
-			<string>AF0015490B8A1E6C0045DAEE</string>
+			<string>AF275A0D0CAC0FEA005A6274</string>
 			<key>WindowToolIsVisible</key>
 			<false/>
 		</dict>
 		<dict>
-			<key>FirstTimeWindowDisplayed</key>
-			<false/>
 			<key>Identifier</key>
 			<string>windowTool.debugger</string>
-			<key>IsVertical</key>
-			<true/>
 			<key>Layout</key>
 			<array>
 				<dict>
@@ -688,8 +637,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {640, 452}}</string>
-											<string>{{640, 0}, {763, 452}}</string>
+											<string>{{0, 0}, {317, 164}}</string>
+											<string>{{317, 0}, {377, 164}}</string>
 										</array>
 									</dict>
 									<key>VerticalSplitView</key>
@@ -704,8 +653,8 @@
 										<string>yes</string>
 										<key>sizes</key>
 										<array>
-											<string>{{0, 0}, {1403, 452}}</string>
-											<string>{{0, 452}, {1403, 435}}</string>
+											<string>{{0, 0}, {694, 164}}</string>
+											<string>{{0, 164}, {694, 216}}</string>
 										</array>
 									</dict>
 								</dict>
@@ -718,6 +667,8 @@
 							</dict>
 							<key>GeometryConfiguration</key>
 							<dict>
+								<key>DebugConsoleDrawerSize</key>
+								<string>{100, 120}</string>
 								<key>DebugConsoleVisible</key>
 								<string>None</string>
 								<key>DebugConsoleWindowFrame</key>
@@ -725,34 +676,18 @@
 								<key>DebugSTDIOWindowFrame</key>
 								<string>{{200, 200}, {500, 300}}</string>
 								<key>Frame</key>
-								<string>{{0, 0}, {1403, 887}}</string>
-								<key>PBXDebugSessionStackFrameViewKey</key>
-								<dict>
-									<key>DebugVariablesTableConfiguration</key>
-									<array>
-										<string>Name</string>
-										<real>120</real>
-										<string>Value</string>
-										<real>127</real>
-										<string>Summary</string>
-										<real>491</real>
-									</array>
-									<key>Frame</key>
-									<string>{{640, 0}, {763, 452}}</string>
-									<key>RubberWindowFrame</key>
-									<string>34 224 1403 928 0 0 1920 1178 </string>
-								</dict>
+								<string>{{0, 0}, {694, 380}}</string>
 								<key>RubberWindowFrame</key>
-								<string>34 224 1403 928 0 0 1920 1178 </string>
+								<string>321 238 694 422 0 0 1440 878 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugSessionModule</string>
 							<key>Proportion</key>
-							<string>887pt</string>
+							<string>100%</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>887pt</string>
+					<string>100%</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -762,26 +697,22 @@
 				<string>PBXDebugSessionModule</string>
 			</array>
 			<key>StatusbarIsVisible</key>
-			<true/>
+			<integer>1</integer>
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>AF6310860B8F664E000D1C1A</string>
+				<string>1C0AD2AB069F1E9B00FABCE6</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>AF6310870B8F664E000D1C1A</string>
-				<string>AF6310880B8F664E000D1C1A</string>
-				<string>AF6310890B8F664E000D1C1A</string>
-				<string>AF63108A0B8F664E000D1C1A</string>
-				<string>AF63108B0B8F664E000D1C1A</string>
+				<string>1C0AD2AC069F1E9B00FABCE6</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
 			<key>WindowString</key>
-			<string>34 224 1403 928 0 0 1920 1178 </string>
+			<string>321 238 694 422 0 0 1440 878 </string>
 			<key>WindowToolGUID</key>
 			<string>1CD10A99069EF8BA00B06720</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<integer>0</integer>
 		</dict>
 		<dict>
 			<key>Identifier</key>
@@ -887,12 +818,8 @@
 			<string>MENUSEPARATOR</string>
 		</dict>
 		<dict>
-			<key>FirstTimeWindowDisplayed</key>
-			<false/>
 			<key>Identifier</key>
 			<string>windowTool.debuggerConsole</string>
-			<key>IsVertical</key>
-			<true/>
 			<key>Layout</key>
 			<array>
 				<dict>
@@ -900,7 +827,7 @@
 					<array>
 						<dict>
 							<key>BecomeActive</key>
-							<true/>
+							<integer>1</integer>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
@@ -911,18 +838,18 @@
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1027, 604}}</string>
+								<string>{{0, 0}, {650, 250}}</string>
 								<key>RubberWindowFrame</key>
-								<string>896 191 1027 645 0 0 1920 1178 </string>
+								<string>516 632 650 250 0 0 1680 1027 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugCLIModule</string>
 							<key>Proportion</key>
-							<string>604pt</string>
+							<string>209pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>604pt</string>
+					<string>209pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
@@ -932,21 +859,21 @@
 				<string>PBXDebugCLIModule</string>
 			</array>
 			<key>StatusbarIsVisible</key>
-			<true/>
+			<integer>1</integer>
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>AF63108C0B8F664E000D1C1A</string>
+				<string>1C78EAAE065D492600B07095</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.consoleV3</string>
 			<key>WindowString</key>
-			<string>896 191 1027 645 0 0 1920 1178 </string>
+			<string>650 41 650 250 0 0 1280 1002 </string>
 			<key>WindowToolGUID</key>
 			<string>1C78EAAD065D492600B07095</string>
 			<key>WindowToolIsVisible</key>
-			<false/>
+			<integer>0</integer>
 		</dict>
 		<dict>
 			<key>Identifier</key>
@@ -984,100 +911,6 @@
 		</dict>
 		<dict>
 			<key>Identifier</key>
-			<string>windowTool.run</string>
-			<key>Layout</key>
-			<array>
-				<dict>
-					<key>Dock</key>
-					<array>
-						<dict>
-							<key>ContentConfiguration</key>
-							<dict>
-								<key>LauncherConfigVersion</key>
-								<string>3</string>
-								<key>PBXProjectModuleGUID</key>
-								<string>1CD0528B0623707200166675</string>
-								<key>PBXProjectModuleLabel</key>
-								<string>Run</string>
-								<key>Runner</key>
-								<dict>
-									<key>HorizontalSplitView</key>
-									<dict>
-										<key>_collapsingFrameDimension</key>
-										<real>0.0</real>
-										<key>_indexOfCollapsedView</key>
-										<integer>0</integer>
-										<key>_percentageOfCollapsedView</key>
-										<real>0.0</real>
-										<key>isCollapsed</key>
-										<string>yes</string>
-										<key>sizes</key>
-										<array>
-											<string>{{0, 0}, {493, 167}}</string>
-											<string>{{0, 176}, {493, 267}}</string>
-										</array>
-									</dict>
-									<key>VerticalSplitView</key>
-									<dict>
-										<key>_collapsingFrameDimension</key>
-										<real>0.0</real>
-										<key>_indexOfCollapsedView</key>
-										<integer>0</integer>
-										<key>_percentageOfCollapsedView</key>
-										<real>0.0</real>
-										<key>isCollapsed</key>
-										<string>yes</string>
-										<key>sizes</key>
-										<array>
-											<string>{{0, 0}, {405, 443}}</string>
-											<string>{{414, 0}, {514, 443}}</string>
-										</array>
-									</dict>
-								</dict>
-							</dict>
-							<key>GeometryConfiguration</key>
-							<dict>
-								<key>Frame</key>
-								<string>{{0, 0}, {460, 159}}</string>
-								<key>RubberWindowFrame</key>
-								<string>316 696 459 200 0 0 1280 1002 </string>
-							</dict>
-							<key>Module</key>
-							<string>PBXRunSessionModule</string>
-							<key>Proportion</key>
-							<string>159pt</string>
-						</dict>
-					</array>
-					<key>Proportion</key>
-					<string>159pt</string>
-				</dict>
-			</array>
-			<key>Name</key>
-			<string>Run Log</string>
-			<key>ServiceClasses</key>
-			<array>
-				<string>PBXRunSessionModule</string>
-			</array>
-			<key>StatusbarIsVisible</key>
-			<integer>1</integer>
-			<key>TableOfContents</key>
-			<array>
-				<string>1C0AD2B3069F1EA900FABCE6</string>
-				<string>1C0AD2B4069F1EA900FABCE6</string>
-				<string>1CD0528B0623707200166675</string>
-				<string>1C0AD2B5069F1EA900FABCE6</string>
-			</array>
-			<key>ToolbarConfiguration</key>
-			<string>xcode.toolbar.config.run</string>
-			<key>WindowString</key>
-			<string>316 696 459 200 0 0 1280 1002 </string>
-			<key>WindowToolGUID</key>
-			<string>1C0AD2B3069F1EA900FABCE6</string>
-			<key>WindowToolIsVisible</key>
-			<integer>0</integer>
-		</dict>
-		<dict>
-			<key>Identifier</key>
 			<string>windowTool.scm</string>
 			<key>Layout</key>
 			<array>
@@ -1367,6 +1200,38 @@
 		</dict>
 		<dict>
 			<key>Identifier</key>
+			<string>windowTool.projectFormatConflicts</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>XCProjectFormatConflictsModule</string>
+							<key>Proportion</key>
+							<string>100%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project Format Conflicts</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCProjectFormatConflictsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>WindowContentMinSize</key>
+			<string>450 300</string>
+			<key>WindowString</key>
+			<string>50 850 472 307 0 0 1440 877</string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
 			<string>windowTool.classBrowser</string>
 			<key>Layout</key>
 			<array>

Modified: PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.pbxuser
===================================================================
--- PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.pbxuser	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/cyrusdaboo.pbxuser	2007-10-11 20:11:58 UTC (rev 1953)
@@ -46,7 +46,7 @@
 				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
 				PBXFileTableDataSourceColumnWidthsKey = (
 					20,
-					1343,
+					754,
 					20,
 					48,
 					43,
@@ -63,26 +63,19 @@
 					PBXFileDataSource_Target_ColumnID,
 				);
 			};
-			PBXPerProjectTemplateStateSaveDate = 193942189;
-			PBXWorkspaceStateSaveDate = 193942189;
+			PBXPerProjectTemplateStateSaveDate = 213805048;
+			PBXWorkspaceStateSaveDate = 213805048;
 		};
-		perUserProjectItems = {
-			AF6311050B8F74FC000D1C1A /* PBXTextBookmark */ = AF6311050B8F74FC000D1C1A /* PBXTextBookmark */;
-			AF6311070B8F74FC000D1C1A /* PBXTextBookmark */ = AF6311070B8F74FC000D1C1A /* PBXTextBookmark */;
-			AF63112B0B8F85FF000D1C1A /* PBXTextBookmark */ = AF63112B0B8F85FF000D1C1A /* PBXTextBookmark */;
-			AF63112C0B8F85FF000D1C1A /* PBXTextBookmark */ = AF63112C0B8F85FF000D1C1A /* PBXTextBookmark */;
-			AF63112D0B8F85FF000D1C1A /* PBXTextBookmark */ = AF63112D0B8F85FF000D1C1A /* PBXTextBookmark */;
-			AF63114C0B8F89FB000D1C1A /* PBXTextBookmark */ = AF63114C0B8F89FB000D1C1A /* PBXTextBookmark */;
-		};
 		sourceControlManager = AF155A2D0A501F7B007E1E6E /* Source Control */;
 		userBuildSettings = {
 		};
 	};
 	08FB7796FE84155DC02AAC07 /* test.cpp */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {2462, 4060}}";
-			sepNavSelRange = "{5173, 0}";
-			sepNavVisRect = "{{0, 1450}, {1521, 670}}";
+			sepNavIntBoundsRect = "{{0, 0}, {926, 4270}}";
+			sepNavSelRange = "{1948, 96}";
+			sepNavVisRange = "{1144, 1674}";
+			sepNavVisRect = "{{0, 1574}, {1521, 647}}";
 			sepNavWindowFrame = "{{436, 4}, {811, 828}}";
 		};
 	};
@@ -102,11 +95,10 @@
 		delayBeforeContinue = 0;
 		fileReference = 08FB7796FE84155DC02AAC07 /* test.cpp */;
 		functionName = "main (int argc, const char * argv[])";
-		hitCount = 1;
+		hitCount = 0;
 		ignoreCount = 0;
 		lineNumber = 84;
-		location = test.ob;
-		modificationTime = 193955662.576472;
+		modificationTime = 196354514.472522;
 		state = 1;
 	};
 	AF0015650B8A245A0045DAEE /* test.cpp:167 */ = {
@@ -123,12 +115,27 @@
 		ignoreCount = 0;
 		lineNumber = 167;
 		location = test.ob;
-		modificationTime = 193955659.877094;
+		modificationTime = 196354382.775839;
 		state = 2;
 	};
+	AF02AC560CBE690500F478B8 /* CDirectoryServiceException.cpp */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1086, 831}}";
+			sepNavSelRange = "{1235, 12}";
+			sepNavVisRange = "{0, 1607}";
+			sepNavWindowFrame = "{{684, 53}, {1145, 959}}";
+		};
+	};
+	AF02AC570CBE690500F478B8 /* CDirectoryServiceException.h */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1086, 831}}";
+			sepNavSelRange = "{1019, 0}";
+			sepNavVisRange = "{0, 1300}";
+			sepNavWindowFrame = "{{73, 219}, {1145, 959}}";
+		};
+	};
 	AF155A290A501F5C007E1E6E /* PyOpenDirectory */ = {
 		isa = PBXExecutable;
-		activeArgIndex = 2147483647;
 		activeArgIndices = (
 		);
 		argumentStrings = (
@@ -184,100 +191,63 @@
 	};
 	AF155A2F0A501F84007E1E6E /* CDirectoryService.cpp */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1076, 10794}}";
-			sepNavSelRange = "{21927, 0}";
-			sepNavVisRect = "{{0, 7571}, {1041, 366}}";
-			sepNavWindowFrame = "{{117, 32}, {1368, 1146}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1221, 16198}}";
+			sepNavSelRange = "{1433, 0}";
+			sepNavVisRange = "{1187, 1367}";
+			sepNavVisRect = "{{0, 0}, {1309, 1017}}";
+			sepNavWindowFrame = "{{85, 73}, {1280, 828}}";
 		};
 	};
 	AF155A300A501F84007E1E6E /* CDirectoryService.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1521, 1036}}";
-			sepNavSelRange = "{2851, 0}";
-			sepNavVisRect = "{{0, 366}, {1521, 670}}";
-			sepNavWindowFrame = "{{15, 4}, {811, 828}}";
+			sepNavIntBoundsRect = "{{0, 0}, {1106, 1008}}";
+			sepNavSelRange = "{1618, 0}";
+			sepNavVisRange = "{714, 1839}";
+			sepNavVisRect = "{{0, 123}, {752, 676}}";
+			sepNavWindowFrame = "{{308, 256}, {811, 828}}";
 		};
 	};
 	AF155A310A501F84007E1E6E /* PythonWrapper.cpp */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {992, 6790}}";
-			sepNavSelRange = "{17612, 0}";
-			sepNavVisRect = "{{0, 6063}, {752, 699}}";
-			sepNavWindowFrame = "{{113, 4}, {811, 828}}";
+			sepNavIntBoundsRect = "{{0, 0}, {992, 10668}}";
+			sepNavSelRange = "{23897, 0}";
+			sepNavVisRange = "{22724, 1929}";
+			sepNavVisRect = "{{0, 0}, {1521, 647}}";
+			sepNavWindowFrame = "{{89, 4}, {1043, 828}}";
 		};
 	};
 	AF155AFB0A502C09007E1E6E /* CFStringUtil.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {766, 699}}";
-			sepNavSelRange = "{546, 0}";
+			sepNavIntBoundsRect = "{{0, 0}, {752, 700}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRange = "{0, 1120}";
 			sepNavVisRect = "{{0, 0}, {766, 699}}";
-			sepNavWindowFrame = "{{746, 81}, {811, 828}}";
+			sepNavWindowFrame = "{{746, 4}, {811, 828}}";
 		};
 	};
 	AF155AFC0A502C09007E1E6E /* CFStringUtil.cpp */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {752, 2100}}";
-			sepNavSelRange = "{3114, 0}";
-			sepNavVisRect = "{{0, 1419}, {752, 676}}";
+			sepNavIntBoundsRect = "{{0, 0}, {752, 2114}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRange = "{0, 1510}";
+			sepNavVisRect = "{{0, 1572}, {1342, 371}}";
 			sepNavWindowFrame = "{{36, 4}, {811, 1024}}";
 		};
 	};
-	AF6311050B8F74FC000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = AF155A310A501F84007E1E6E /* PythonWrapper.cpp */;
-		name = "PythonWrapper.cpp: 355";
-		rLen = 0;
-		rLoc = 10892;
-		rType = 0;
-		vrLen = 1931;
-		vrLoc = 8603;
+	AF41D9AB0CBDBAE200AB863D /* CDirectoryServiceManager.cpp */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1221, 700}}";
+			sepNavSelRange = "{1010, 0}";
+			sepNavVisRange = "{0, 1196}";
+			sepNavWindowFrame = "{{558, 246}, {1280, 828}}";
+		};
 	};
-	AF6311070B8F74FC000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = AF155A310A501F84007E1E6E /* PythonWrapper.cpp */;
-		name = "PythonWrapper.cpp: 355";
-		rLen = 0;
-		rLoc = 10892;
-		rType = 0;
-		vrLen = 1931;
-		vrLoc = 8603;
+	AF41D9AC0CBDBAE200AB863D /* CDirectoryServiceManager.h */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {1221, 700}}";
+			sepNavSelRange = "{775, 0}";
+			sepNavVisRange = "{0, 1033}";
+			sepNavWindowFrame = "{{677, 13}, {1280, 828}}";
+		};
 	};
-	AF63112B0B8F85FF000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = AF155A300A501F84007E1E6E /* CDirectoryService.h */;
-		name = "CDirectoryService.h: 70";
-		rLen = 0;
-		rLoc = 2863;
-		rType = 0;
-		vrLen = 2090;
-		vrLoc = 866;
-	};
-	AF63112C0B8F85FF000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		comments = "error: no matching function for call to 'CDirectoryService::QueryRecordsWithAttributes(const __CFDictionary*&, const __CFDictionary*&, tDirPatternMatch, bool, bool, const char [28], const __CFArray*&)'";
-		fRef = 08FB7796FE84155DC02AAC07 /* test.cpp */;
-		rLen = 1;
-		rLoc = 139;
-		rType = 1;
-	};
-	AF63112D0B8F85FF000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = AF155A300A501F84007E1E6E /* CDirectoryService.h */;
-		name = "CDirectoryService.h: 70";
-		rLen = 0;
-		rLoc = 2863;
-		rType = 0;
-		vrLen = 2090;
-		vrLoc = 866;
-	};
-	AF63114C0B8F89FB000D1C1A /* PBXTextBookmark */ = {
-		isa = PBXTextBookmark;
-		fRef = 08FB7796FE84155DC02AAC07 /* test.cpp */;
-		name = "test.cpp: 140";
-		rLen = 0;
-		rLoc = 5173;
-		rType = 0;
-		vrLen = 2505;
-		vrLoc = 4188;
-	};
 }

Modified: PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/project.pbxproj
===================================================================
--- PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/project.pbxproj	2007-10-10 18:56:25 UTC (rev 1952)
+++ PyOpenDirectory/trunk/support/PyOpenDirectory.xcodeproj/project.pbxproj	2007-10-11 20:11:58 UTC (rev 1953)
@@ -10,12 +10,14 @@
 		8DD76F650486A84900D96B5E /* test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* test.cpp */; settings = {ATTRIBUTES = (); }; };
 		AF00155A0B8A21340045DAEE /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0015590B8A21340045DAEE /* Python.framework */; };
 		AF00155E0B8A21FD0045DAEE /* PythonWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF155A310A501F84007E1E6E /* PythonWrapper.cpp */; };
+		AF02AC580CBE690500F478B8 /* CDirectoryServiceException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF02AC560CBE690500F478B8 /* CDirectoryServiceException.cpp */; };
 		AF155A320A501F84007E1E6E /* CDirectoryService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF155A2F0A501F84007E1E6E /* CDirectoryService.cpp */; };
 		AF155A330A501F84007E1E6E /* CDirectoryService.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF155A300A501F84007E1E6E /* CDirectoryService.h */; };
 		AF155A370A501F9D007E1E6E /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF155A350A501F9D007E1E6E /* CoreFoundation.framework */; };
 		AF155A380A501F9D007E1E6E /* DirectoryService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF155A360A501F9D007E1E6E /* DirectoryService.framework */; };
 		AF155AFD0A502C09007E1E6E /* CFStringUtil.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF155AFB0A502C09007E1E6E /* CFStringUtil.h */; };
 		AF155AFE0A502C09007E1E6E /* CFStringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF155AFC0A502C09007E1E6E /* CFStringUtil.cpp */; };
+		AF41D9AD0CBDBAE200AB863D /* CDirectoryServiceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF41D9AB0CBDBAE200AB863D /* CDirectoryServiceManager.cpp */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -36,6 +38,8 @@
 		08FB7796FE84155DC02AAC07 /* test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test.cpp; sourceTree = "<group>"; };
 		8DD76F6C0486A84900D96B5E /* PyOpenDirectory */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PyOpenDirectory; sourceTree = BUILT_PRODUCTS_DIR; };
 		AF0015590B8A21340045DAEE /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Python.framework; path = /System/Library/Frameworks/Python.framework; sourceTree = "<absolute>"; };
+		AF02AC560CBE690500F478B8 /* CDirectoryServiceException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDirectoryServiceException.cpp; path = ../src/CDirectoryServiceException.cpp; sourceTree = SOURCE_ROOT; };
+		AF02AC570CBE690500F478B8 /* CDirectoryServiceException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDirectoryServiceException.h; path = ../src/CDirectoryServiceException.h; sourceTree = SOURCE_ROOT; };
 		AF155A2F0A501F84007E1E6E /* CDirectoryService.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CDirectoryService.cpp; path = ../src/CDirectoryService.cpp; sourceTree = SOURCE_ROOT; };
 		AF155A300A501F84007E1E6E /* CDirectoryService.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CDirectoryService.h; path = ../src/CDirectoryService.h; sourceTree = SOURCE_ROOT; };
 		AF155A310A501F84007E1E6E /* PythonWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = PythonWrapper.cpp; path = ../src/PythonWrapper.cpp; sourceTree = SOURCE_ROOT; };
@@ -43,6 +47,8 @@
 		AF155A360A501F9D007E1E6E /* DirectoryService.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DirectoryService.framework; path = /System/Library/Frameworks/DirectoryService.framework; sourceTree = "<absolute>"; };
 		AF155AFB0A502C09007E1E6E /* CFStringUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFStringUtil.h; path = ../src/CFStringUtil.h; sourceTree = SOURCE_ROOT; };
 		AF155AFC0A502C09007E1E6E /* CFStringUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFStringUtil.cpp; path = ../src/CFStringUtil.cpp; sourceTree = SOURCE_ROOT; };
+		AF41D9AB0CBDBAE200AB863D /* CDirectoryServiceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDirectoryServiceManager.cpp; path = ../src/CDirectoryServiceManager.cpp; sourceTree = SOURCE_ROOT; };
+		AF41D9AC0CBDBAE200AB863D /* CDirectoryServiceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDirectoryServiceManager.h; path = ../src/CDirectoryServiceManager.h; sourceTree = SOURCE_ROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -72,6 +78,10 @@
 		08FB7795FE84155DC02AAC07 /* Source */ = {
 			isa = PBXGroup;
 			children = (
+				AF02AC560CBE690500F478B8 /* CDirectoryServiceException.cpp */,
+				AF02AC570CBE690500F478B8 /* CDirectoryServiceException.h */,
+				AF41D9AB0CBDBAE200AB863D /* CDirectoryServiceManager.cpp */,
+				AF41D9AC0CBDBAE200AB863D /* CDirectoryServiceManager.h */,
 				AF155A2F0A501F84007E1E6E /* CDirectoryService.cpp */,
 				AF155A300A501F84007E1E6E /* CDirectoryService.h */,
 				AF155A310A501F84007E1E6E /* PythonWrapper.cpp */,
@@ -132,7 +142,6 @@
 			mainGroup = 08FB7794FE84155DC02AAC07 /* PyOpenDirectory */;
 			projectDirPath = "";
 			projectRoot = "";
-			shouldCheckCompatibility = 1;
 			targets = (
 				8DD76F620486A84900D96B5E /* PyOpenDirectory */,
 			);
@@ -148,6 +157,8 @@
 				AF155A320A501F84007E1E6E /* CDirectoryService.cpp in Sources */,
 				AF155AFE0A502C09007E1E6E /* CFStringUtil.cpp in Sources */,
 				AF00155E0B8A21FD0045DAEE /* PythonWrapper.cpp in Sources */,
+				AF41D9AD0CBDBAE200AB863D /* CDirectoryServiceManager.cpp in Sources */,
+				AF02AC580CBE690500F478B8 /* CDirectoryServiceException.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -187,7 +198,7 @@
 			buildSettings = {
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = "";
+				HEADER_SEARCH_PATHS = /System/Library/Frameworks/Python.framework/Headers;
 				PREBINDING = NO;
 				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
 				USER_HEADER_SEARCH_PATHS = ../src;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20071011/548ff285/attachment-0001.html


More information about the calendarserver-changes mailing list