[CalendarServer-changes] [11768]

source_changes at macosforge.org source_changes at macosforge.org
Mon Sep 30 18:14:09 PDT 2013


Revision: 11768
          http://trac.calendarserver.org//changeset/11768
Author:   gaya at apple.com
Date:     2013-09-30 18:14:09 -0700 (Mon, 30 Sep 2013)
Log Message:
-----------
fix AddressBook.resourceNamesSinceRevision() to add shared group itself to change list when items in the share change; update sharing-sync.xml

Modified Paths:
--------------
    CalDAVTester/branches/users/gaya/sharedgroupfixestester/scripts/tests/CardDAV/sharing-sync.xml
    CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py

Modified: CalDAVTester/branches/users/gaya/sharedgroupfixestester/scripts/tests/CardDAV/sharing-sync.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupfixestester/scripts/tests/CardDAV/sharing-sync.xml	2013-09-30 23:51:10 UTC (rev 11767)
+++ CalDAVTester/branches/users/gaya/sharedgroupfixestester/scripts/tests/CardDAV/sharing-sync.xml	2013-10-01 01:14:09 UTC (rev 11768)
@@ -395,7 +395,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7e' ignore='no'>
+		<test name='7d' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -416,7 +416,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7f' ignore='no'>
+		<test name='7e' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -438,7 +438,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7g' ignore='no'>
+		<test name='7f' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/$sharedaddressbook:/</ruri>
@@ -821,7 +821,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='13e' ignore='no'>
+		<test name='13d' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -842,7 +842,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='13f' ignore='no'>
+		<test name='13e' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -863,7 +863,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='13g' ignore='no'>
+		<test name='13f' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/$sharedaddressbook:/</ruri>
@@ -1239,7 +1239,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7e' ignore='no'>
+		<test name='7d' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -1260,7 +1260,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7f' ignore='no'>
+		<test name='7e' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -1274,6 +1274,7 @@
 						<name>okhrefs</name>
 						<value>$userguid1:/</value>
 						<value>$userguid1:/1.vcf</value>
+						<value>$userguid1:/3.vcf</value>
 					</arg>
 				</verify>
 				<grabelement>
@@ -1282,7 +1283,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='7g' ignore='no'>
+		<test name='7f' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/$userguid1:/</ruri>
@@ -1295,6 +1296,7 @@
 					<arg>
 						<name>okhrefs</name>
 						<value>1.vcf</value>
+						<value>3.vcf</value>
 					</arg>
 				</verify>
 				<grabelement>
@@ -1417,6 +1419,7 @@
 						<name>okhrefs</name>
 						<value>$userguid1:/</value>
 						<value>$userguid1:/1.vcf</value>
+						<value>$userguid1:/3.vcf</value>
 					</arg>
 				</verify>
 				<grabelement>
@@ -1438,6 +1441,7 @@
 					<arg>
 						<name>okhrefs</name>
 						<value>1.vcf</value>
+						<value>3.vcf</value>
 					</arg>
 				</verify>
 				<grabelement>
@@ -1974,6 +1978,7 @@
 					<arg>
 						<name>okhrefs</name>
 						<value>$userguid1:/</value>
+						<value>$userguid1:/3.vcf</value>
 					</arg>
 					<arg>
 						<name>badhrefs</name>
@@ -1997,6 +2002,10 @@
 				<verify>
 					<callback>multistatusItems</callback>
 					<arg>
+						<name>okhrefs</name>
+						<value>3.vcf</value>
+					</arg>
+					<arg>
 						<name>badhrefs</name>
 						<value>1.vcf</value>
 					</arg>
@@ -2081,7 +2090,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='19e' ignore='no'>
+		<test name='19d' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -2102,7 +2111,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='19f' ignore='no'>
+		<test name='19e' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/</ruri>
@@ -2123,7 +2132,7 @@
 				</grabelement>
 			</request>
 		</test>
-		<test name='19g' ignore='no'>
+		<test name='19f' ignore='no'>
 			<request user="$userid2:" pswd="$pswd2:" print-response='no'>
 				<method>REPORT</method>
 				<ruri>$addressbookhome2:/$userguid1:/</ruri>

Modified: CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py	2013-09-30 23:51:10 UTC (rev 11767)
+++ CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py	2013-10-01 01:14:09 UTC (rev 11768)
@@ -608,9 +608,25 @@
         changed = set()
         deleted = set()
         acceptedGroupIDs = set([groupBindRow[2] for groupBindRow in groupBindRows])
+        memberIDToAcceptedGroupIDsMap = {}
+        allowedObjectIDs = set()
+        for acceptedGroupID in acceptedGroupIDs:
+            memberIDs = set((yield self.expandGroupIDs(self._txn, [acceptedGroupID])))
+            allowedObjectIDs |= memberIDs
+            for memberID in memberIDs:
+                current = memberIDToAcceptedGroupIDsMap.get(memberID, set())
+                current.add(acceptedGroupID)
+                memberIDToAcceptedGroupIDsMap[memberID] = current
 
-        allowedObjectIDs = set((yield self.expandGroupIDs(self._txn, acceptedGroupIDs)))
-        oldAllowedObjectIDs = set((yield self.expandGroupIDs(self._txn, acceptedGroupIDs, revision)))
+        oldAllowedObjectIDs = set()
+        for acceptedGroupID in acceptedGroupIDs:
+            memberIDs = set((yield self.expandGroupIDs(self._txn, [acceptedGroupID], revision)))
+            oldAllowedObjectIDs |= memberIDs
+            for memberID in memberIDs:
+                current = memberIDToAcceptedGroupIDsMap.get(memberID, set())
+                current.add(acceptedGroupID)
+                memberIDToAcceptedGroupIDsMap[memberID] = current
+
         addedObjectIds = allowedObjectIDs - oldAllowedObjectIDs
         removedObjectIds = oldAllowedObjectIDs - allowedObjectIDs
 
@@ -645,6 +661,8 @@
 
         # now do revisions
         if revision:
+
+            # handled added or removed objects
             if removedObjectIds or addedObjectIds:
                 changed.add("%s/" % (path,))
 
@@ -655,8 +673,17 @@
                 for addedObjectId in addedObjectIds:
                     changed.add("%s/%s" % (path, idToNameMap[addedObjectId],))
 
-            for name, id, wasdeleted in results:
-                if not wasdeleted and name in idToNameMap.values():
+                # remove shared groups as changed too
+                for memberID in removedObjectIds or addedObjectIds:
+                    for acceptedGroupID in memberIDToAcceptedGroupIDsMap[memberID]:
+                        changed.add("%s/%s" % (path, idToNameMap[acceptedGroupID],))
+
+            # use revisions to handle changed objects
+            changedNames = [name for name, id, wasdeleted in results if not wasdeleted and name in idToNameMap.values()]
+            if changedNames:
+                nametoIDMap = dict((v, k) for k, v in idToNameMap.iteritems())
+
+                for name in changedNames:
                     # Always report collection as changed
                     changed.add("%s/" % (path,))
 
@@ -666,6 +693,10 @@
                         if item not in deleted:
                             changed.add("%s/%s" % (path, name,))
 
+                        # remove shared groups as changed too
+                        for acceptedGroupID in memberIDToAcceptedGroupIDsMap[nametoIDMap[name]]:
+                            changed.add("%s/%s" % (path, idToNameMap[acceptedGroupID],))
+
         else:
             changed.add("%s/" % (path,))
             if depth != "1":
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130930/2f13b15d/attachment-0001.html>


More information about the calendarserver-changes mailing list