[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