[CalendarServer-changes] [10313] CalendarServer/branches/users/gaya/sharedgroups

source_changes at macosforge.org source_changes at macosforge.org
Fri Jan 18 20:44:02 PST 2013


Revision: 10313
          http://trac.calendarserver.org//changeset/10313
Author:   gaya at apple.com
Date:     2013-01-18 20:44:01 -0800 (Fri, 18 Jan 2013)
Log Message:
-----------
update from trunk

Modified Paths:
--------------
    CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-All
    CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CalDAV
    CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CardDAV
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite8/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/data/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-All
    CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CalDAV
    CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CardDAV
    CalDAVTester/branches/users/gaya/sharedgroupstester/odsetup.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/run.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-partitioning.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-template.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.dtd
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/acl.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/aclreports.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/add-member.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/alarm-dismissal.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/attachments.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/availability.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/brief.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/bulk.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavIOP.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavtest.dtd
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/calendaruserproxy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/conditional.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/copymove.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ctag.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/current-user-principal.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/default-alarms.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/delete.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreports.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreportsacl.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/directory.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/dropbox.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/encodedURIs.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors-big-calendars.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/expandproperty.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/extended-freebusy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/floating.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/freebusy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/get.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ical-client.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitacls.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitallday.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitattendeedelete.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto1.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto2.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto3.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto4.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto5.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto6.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto7.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto8.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomodes.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomultiple.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbadclients.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbatchrefresh.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcalendartransp.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcancels.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcompatibility.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcopymove.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdefaultcalendar.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdeletecalendar.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdropbox.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/impliciterrors.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitfreebusy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitimip.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitlarge.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitpartstatchange.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitprivateevents.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitproxy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur1.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur2.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitreschedule.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario1.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario2.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario3.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduleagent.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitschedulechanges.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduletag.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsecurity.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsequence.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittimezones.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittodo.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/limits.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/mkcalendar.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/nonascii.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-calendaruserproxy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicit.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicitauto.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-simple.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/prefer.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privatecomments.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privateevents.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/propfind.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proppatch.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proxyauthz.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/put.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/quota.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/recurrenceput.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/reports.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/resourceid.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleimplicit-compatability.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulenomore.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepost.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostacl.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostmaskuid.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleprops.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserverincoming.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserveroutgoing.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-cache.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-calendars.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-create.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-direct.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-dropbox.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-feature.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-freebusy.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-invites.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-moves.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-multiple.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-notification-sync.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-data.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-properties.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-proxies.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-quota.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-replies.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-unshare.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-webcal.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sync-report.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezones.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezoneservice.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/webcal.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/well-known.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/ab-client.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/aclreports.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/add-member.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/bulk.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/caldavtest.dtd
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/copymove.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/current-user-principal.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/default-addressbook.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory-gateway.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errorcondition.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errors.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/get.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/global-addressbook.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/limits.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/mkcol.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/nonascii.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/propfind.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/proppatch.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/put.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/reports.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/resourceid.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-addressbooks.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-feature.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-peruser-properties.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-replies.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-unshare.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sync-report.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/well-known.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/__init__.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/caldavtest.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/httpshandler.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/manager.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/request.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/serverinfo.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/test.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/testsuite.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlDefs.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlUtils.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/testcaldav.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/__init__.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/aclItems.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/addressDataMatch.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/calendarDataMatch.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataMatch.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataString.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/freeBusy.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/header.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/multistatusItems.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/postFreeBusy.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/prepostcondition.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindItems.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindValues.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/statusCode.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlDataMatch.py
    CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlElementMatch.py
    CalendarServer/branches/users/gaya/sharedgroups/README
    CalendarServer/branches/users/gaya/sharedgroups/benchmark
    CalendarServer/branches/users/gaya/sharedgroups/benchreport
    CalendarServer/branches/users/gaya/sharedgroups/bin/_calendarserver_preamble.py
    CalendarServer/branches/users/gaya/sharedgroups/bin/caldavd
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_backup
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_bootstrap_database
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_command_gateway
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_config
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_dbinspect
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_export
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_load_augmentdb
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_make_partition
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_postgres
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_principals
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_push
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_timezones
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_migrate_resources
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_amp_notifications
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_notifications
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_attachments
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_events
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_principals
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_shell
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_upgrade
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_verify_data
    CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_warmup
    CalendarServer/branches/users/gaya/sharedgroups/bin/icalendar_split
    CalendarServer/branches/users/gaya/sharedgroups/bin/proxyclean
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/accesslog.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/controlsocket.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.c
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.so
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsattributes.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsquery.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/opendirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_directory.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_testusers.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/test_opendirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/wiki.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/root.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/test_root.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/amppush.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/applepush.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_amppush.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_applepush.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/util.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/caldav.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/cfgchild.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/profiling.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/longlines.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_caldav.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/util.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/ampnotifications.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/anonymize.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup_pg.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/bootstrapdatabase.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify_diff.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/changeip_calendar.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/cmdline.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/config.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/dbinspect.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/doublequotefix.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/export.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/fixcalendardata.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/gateway.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/icalsplit.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/loadaugmentdb.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managepostgres.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managetimezones.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate_verify.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/notifications.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/obliterate.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/principals.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/purge.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/push.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/resources.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/cmd.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/directory.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/terminal.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_cmd.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_vfs.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/vfs.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/tables.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/accounts.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/caldavd.plist
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/resources-locations.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/caldavd.plist
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/resources-locations.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/caldavd.plist
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/resources-locations.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/purge/accounts.xml
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_calverify.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_changeip.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_export.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_gateway.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_principals.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge_old_events.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_resources.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/upgrade.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/util.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/validcalendardata.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/warmup.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/test_resource.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts-test.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.dtd
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-default.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-test.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments.dtd
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies-test.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies.dtd
    CalendarServer/branches/users/gaya/sharedgroups/conf/auth/resources-test.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-apple.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-primary.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-secondary.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-test.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/resources/caldavd-resources.plist
    CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources-orig.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/resources/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/resources.xml
    CalendarServer/branches/users/gaya/sharedgroups/conf/servers.dtd
    CalendarServer/branches/users/gaya/sharedgroups/conf/servertoserver.dtd
    CalendarServer/branches/users/gaya/sharedgroups/contrib/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/calendarcertupdate.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/test_certupdate.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/launchd/calendarserver.plist
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendardemotion.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarmigrator.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarpromotion.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/test_migrator.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_change.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_create.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_add_attendee.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_autoaccept.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_date.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_summary.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete_attendee.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_move.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_calendars.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_events.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy_vary_attendees.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/display-calendar-events.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/extractconf
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/fix-units.sql
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpauth.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpclient.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/io_measure.d
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ampsim.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.dist.plist
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.plist
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ical.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/logger.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/population.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/profiles.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/sim.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_ical.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_population.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_profiles.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_sim.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_trafficlogger.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_webadmin.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/trafficlogger.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/webadmin.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/nightly.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/pgsql.d
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/profile.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report_principals.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/reupload.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample-many.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sim
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/some-more-data.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/speedcenter.tac
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sql_measure.d
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/httpTests.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/invite.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/multiget.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/propfind.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/put.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/query.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/sync.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/sqlusage.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stackedbar.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stats.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sudo-run.sh
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-committime
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-revno
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_benchmark.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_event_change_date.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_httpauth.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_stats.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload
    CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/anonymous_log.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/dtraceanalyze.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fakecalendardata.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fix_calendar
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/harpoon.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitoranalysis.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitorsplit.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/netstatus.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pg_stats_analysis.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pgtrace.d
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/protocolanalysis.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/readStats.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/request_monitor.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sortrecurrences.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sqldata_from_path.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/tables.py
    CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/test_protocolanalysis.py
    CalendarServer/branches/users/gaya/sharedgroups/doc/Developer/gendocs
    CalendarServer/branches/users/gaya/sharedgroups/doc/caldavd.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_bootstrap_database.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_command_gateway.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_export.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_principals.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_push.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_migrate_resources.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_monitor_notifications.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_attachments.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_events.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_principals.8
    CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_shell.8
    CalendarServer/branches/users/gaya/sharedgroups/locales/en_EN.ISO8859-1/LC_MESSAGES/calendarserver.po
    CalendarServer/branches/users/gaya/sharedgroups/run
    CalendarServer/branches/users/gaya/sharedgroups/setup.py
    CalendarServer/branches/users/gaya/sharedgroups/sim
    CalendarServer/branches/users/gaya/sharedgroups/support/Makefile.Apple
    CalendarServer/branches/users/gaya/sharedgroups/support/build.sh
    CalendarServer/branches/users/gaya/sharedgroups/support/directorysetup.py
    CalendarServer/branches/users/gaya/sharedgroups/support/patchapply
    CalendarServer/branches/users/gaya/sharedgroups/support/patchmaker
    CalendarServer/branches/users/gaya/sharedgroups/support/py.sh
    CalendarServer/branches/users/gaya/sharedgroups/support/shell.sh
    CalendarServer/branches/users/gaya/sharedgroups/support/submit
    CalendarServer/branches/users/gaya/sharedgroups/support/version.py
    CalendarServer/branches/users/gaya/sharedgroups/test
    CalendarServer/branches/users/gaya/sharedgroups/testserver
    CalendarServer/branches/users/gaya/sharedgroups/twext/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/backport/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/backport/internet/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/adbapi2.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/model.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/parseschema.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/record.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/syntax.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_parseschema.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_record.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_sqlsyntax.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/fixtures.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/ienterprise.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/queue.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_adbapi2.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_fixtures.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/adaptendpoint.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/decorate.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/gaiendpoint.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/sendfdport.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/spawnsvc.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/ssl.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/tcp.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_adaptendpoint.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_gaiendpoint.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_sendfdport.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/internet/threadutils.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/patches.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/clsprop.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/filepath.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/log.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/parallel.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/plistlib.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendfd.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendmsg.c
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/pullpipe.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_filepath.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_log.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_parallel.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_sendmsg.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/python/vcomponent.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/basic.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/digest.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/interfaces.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/wrapper.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/http.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/http.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/interfaces.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/auth.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/fileop.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/http.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/idav.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/acl.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/copymove.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/get.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/lock.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/mkcol.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/propfind.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/proppatch.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_acl_principal_prop_set.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_expand.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_match.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_property_search.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_search_property_set.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/noneprops.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/static.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_acl.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_copy.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_delete.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_http.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_lock.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_mkcol.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_move.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_options.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_pipeline.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_prop.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_put.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_quota.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report_expand.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_static.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/xattrprops.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/error.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/fileupload.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http_headers.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/iweb.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/log.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/metafd.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/responsecode.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/server.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/static.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/stream.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_http_headers.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_metafd.py
    CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/caldav.py
    CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/kqueuereactor.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/accounting.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/authkerb.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/backup.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/bind.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/cache.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/caldavxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/carddavxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/geturl.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/pool.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/reverseproxy.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/test_reverseproxy.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/config.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/customxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/database.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/addressdata.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/calendardata.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/filter.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/hiddeninstance.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/peruserdata.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/privateevents.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_calendardata.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_hiddeninstances.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_peruserdata.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_privateevents.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dateops.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/addressbook.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/aggregate.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/augment.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/cachingdirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendar.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxy.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxyloader.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/digest.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/directory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/idirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/internal.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/ldapdirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/opendirectorybacker.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/principal.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resourceinfo.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts-modified.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test-default.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/resources-locations.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/proxies.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/augments.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/caldavd.plist
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/resources-locations.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/users-groups.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_aggregate.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_augment.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_buildquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_cachedirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_calendar.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_digest.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_directory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_guidchange.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_ldapdirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_livedirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_modify.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectory.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectorybacker.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_principal.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipaldb.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipalmembers.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_resources.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_wiki.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_xmlfile.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/wiki.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaccountsparser.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaugmentsparser.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlfile.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directorybackedaddressbook.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dropbox.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/extensions.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/freebusyurl.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/ical.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/icaldav.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/instance.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/linkresource.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/localization.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachelock.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachepool.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacheprops.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacher.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/acl.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/copymove_contact.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/get.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcalendar.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcol.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/post.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/propfind.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_addressbook_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_multiget.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_query.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_multiget.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_query.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_freebusy.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_multiget_common.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_sync_collection.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/mkcolxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notifications.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notify.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookqueryfilter.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarqueryfilter.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/expression.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/sqlgenerator.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_addressbookquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_calendarquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_expression.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_queryfilter.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/addressmapping.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/cuaddress.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/delivery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/icaldiff.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/implicit.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/itip.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/processing.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/scheduler.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_icaldiff.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_implicit.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_itip.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/utils.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sharing.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/simpleresource.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sql.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/stdconfig.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/storebridge.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_accounting.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookmultiget.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_cache.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_caldavxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_calendarquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_collectioncontents.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_config.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_customxml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_database.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_dateops.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_extensions.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_freebusyquery.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_icalendar.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_kerberos.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_link.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_localization.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcachepool.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcacheprops.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_mkcalendar.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_multiget.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_notify.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_options.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_props.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_resource.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sharing.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sql.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_stdconfig.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezones.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezonestdservice.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_upgrade.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_validation.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_wrapping.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xmlutil.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezones.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezoneservice.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonestdservice.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonexml.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/upgrade.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/util.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/vcard.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/xmlutil.py
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Africa/Tripoli.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Araguaina.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Bahia.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Campo_Grande.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Cuiaba.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Havana.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Sao_Paulo.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Amman.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Gaza.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Hebron.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Jerusalem.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tehran.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Brazil/East.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Cuba.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Iran.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Israel.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Libya.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Pacific/Apia.ics
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/timezones.xml
    CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/version.txt
    CalendarServer/branches/users/gaya/sharedgroups/txdav/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/dbapiclient.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/subpostgres.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/test_subpostgres.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/appledouble_xattr.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/none.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_appledouble.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_none.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_xattr.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/xattr.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/index_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/scheduling.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/attachments/accounts.xml
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/attachments/resources.xml
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/common.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_index_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_scheduling.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/icalendarstore.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/index_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/common.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_index_file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/iaddressbookstore.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/resource.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/file.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_legacy.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v10.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v3.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v6.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v7.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v8.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v9.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_10_to_11.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_11_to_12.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_3_to_4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_4_to_5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_5_to_6.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_6_to_7.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_7_to_8.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_8_to_9.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_9_to_10.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_10_to_11.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_11_to_12.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_3_to_4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_4_to_5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_5_to_6.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_6_to_7.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_7_to_8.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_8_to_9.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_9_to_10.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/upgrade_template.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_tables.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql_tables.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/file/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/migrate.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/others/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/others/attachment_migration.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/current.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/upgrades/fake_dialect/upgrade_from_3_to_4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/current.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_4_to_5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/current.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_3_to_4.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_4_to_5.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/test_upgrade.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrade.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_1_to_2.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_2_to_3.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/test_migrate.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/icommondatastore.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/inotifications.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/idav.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/element.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/extensions.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_etree.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_sax.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc2518.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3253.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3744.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc4331.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5397.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5842.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5995.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc6578.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/__init__.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_base.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml_rfc3744.py

Added Paths:
-----------
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/managed-attachments-dropbox.xml
    CalendarServer/branches/users/gaya/sharedgroups/support/update_copyrights
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/locking.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_locking.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_queue.py
    CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_util.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/attachments/
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_attachments.py
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/oracle-dialect/v14.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v14.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_14_to_15.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_14_to_15.sql
    CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/others/

Property Changed:
----------------
    CalDAVTester/branches/users/gaya/sharedgroupstester/
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/1.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/10.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/11.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/12.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/13.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/14.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/15.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/16.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/17.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/18.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/19.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/2.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/20.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/21.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/22.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/23.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/24.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/25.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/26.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/27.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/28.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/29.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/3.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/30.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/31.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/32.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/5.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/6.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/7.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/8.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/9.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics
    CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml
    CalendarServer/branches/users/gaya/sharedgroups/
    CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/attachments/resources.xml


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574:3575-3581
/CalDAVTester/branches/users/cdaboo/managed-attachments:9986-10145
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228:5229-5440
/CalDAVTester/trunk:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev:7584
/CalDAVTester/branches/release/CalDAVTester-4.3-dev:10193
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574:3575-3581
/CalDAVTester/branches/users/cdaboo/managed-attachments:9986-10145
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228:5229-5440
/CalDAVTester/trunk:10010-10312

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-All
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-All	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-All	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CalDAV
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CalDAV	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CalDAV	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CardDAV
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CardDAV	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/QuickLook-CardDAV	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/1.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/1.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/1.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/1.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/1.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/1.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/1.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/1.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/1.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/1.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/1.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/1.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/1.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/1.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/1.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/1.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/1.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/1.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/1.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/1.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/1.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/10.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/10.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/10.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/10.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/10.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/10.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/10.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/10.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/10.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/10.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/10.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/10.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/10.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/10.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/10.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/10.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/10.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/10.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/10.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/10.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/10.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/11.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/11.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/11.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/11.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/11.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/11.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/11.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/11.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/11.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/11.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/11.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/11.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/11.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/11.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/11.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/11.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/11.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/11.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/11.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/11.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/11.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/12.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/12.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/12.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/12.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/12.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/12.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/12.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/12.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/12.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/12.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/12.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/12.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/12.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/12.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/12.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/12.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/12.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/12.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/12.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/12.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/12.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/13.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/13.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/13.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/13.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/13.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/13.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/13.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/13.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/13.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/13.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/13.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/13.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/13.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/13.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/13.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/13.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/13.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/13.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/13.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/13.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/13.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/14.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/14.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/14.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/14.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/14.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/14.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/14.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/14.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/14.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/14.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/14.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/14.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/14.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/14.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/14.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/14.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/14.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/14.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/14.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/14.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/14.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/15.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/15.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/15.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/15.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/15.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/15.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/15.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/15.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/15.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/15.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/15.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/15.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/15.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/15.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/15.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/15.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/15.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/15.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/15.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/15.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/15.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/16.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/16.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/16.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/16.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/16.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/16.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/16.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/16.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/16.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/16.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/16.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/16.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/16.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/16.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/16.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/16.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/16.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/16.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/16.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/16.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/16.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/17.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/17.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/17.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/17.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/17.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/17.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/17.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/17.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/17.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/17.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/17.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/17.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/17.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/17.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/17.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/17.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/17.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/17.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/17.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/17.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/17.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/18.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/18.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/18.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/18.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/18.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/18.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/18.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/18.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/18.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/18.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/18.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/18.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/18.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/18.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/18.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/18.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/18.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/18.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/18.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/18.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/18.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/19.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/19.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/19.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/19.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/19.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/19.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/19.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/19.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/19.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/19.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/19.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/19.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/19.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/19.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/19.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/19.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/19.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/19.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/19.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/19.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/19.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/2.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/2.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/2.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/2.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/2.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/2.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/2.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/2.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/2.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/2.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/2.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/2.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/2.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/2.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/2.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/2.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/2.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/2.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/2.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/2.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/2.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/20.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/20.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/20.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/20.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/20.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/20.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/20.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/20.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/20.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/20.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/20.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/20.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/20.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/20.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/20.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/20.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/20.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/20.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/20.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/20.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/20.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/21.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/21.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/21.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/21.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/21.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/21.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/21.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/21.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/21.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/21.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/21.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/21.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/21.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/21.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/21.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/21.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/21.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/21.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/21.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/21.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/21.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/22.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/22.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/22.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/22.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/22.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/22.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/22.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/22.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/22.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/22.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/22.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/22.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/22.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/22.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/22.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/22.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/22.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/22.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/22.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/22.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/22.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/23.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/23.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/23.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/23.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/23.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/23.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/23.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/23.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/23.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/23.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/23.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/23.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/23.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/23.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/23.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/23.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/23.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/23.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/23.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/23.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/23.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/24.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/24.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/24.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/24.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/24.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/24.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/24.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/24.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/24.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/24.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/24.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/24.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/24.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/24.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/24.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/24.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/24.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/24.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/24.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/24.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/24.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/25.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/25.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/25.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/25.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/25.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/25.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/25.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/25.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/25.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/25.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/25.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/25.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/25.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/25.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/25.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/25.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/25.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/25.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/25.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/25.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/25.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/26.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/26.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/26.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/26.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/26.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/26.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/26.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/26.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/26.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/26.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/26.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/26.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/26.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/26.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/26.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/26.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/26.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/26.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/26.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/26.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/26.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/27.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/27.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/27.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/27.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/27.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/27.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/27.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/27.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/27.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/27.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/27.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/27.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/27.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/27.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/27.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/27.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/27.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/27.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/27.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/27.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/27.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/28.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/28.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/28.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/28.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/28.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/28.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/28.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/28.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/28.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/28.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/28.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/28.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/28.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/28.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/28.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/28.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/28.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/28.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/28.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/28.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/28.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/29.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/29.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/29.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/29.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/29.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/29.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/29.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/29.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/29.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/29.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/29.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/29.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/29.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/29.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/29.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/29.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/29.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/29.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/29.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/29.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/29.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/3.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/3.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/3.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/3.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/3.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/3.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/3.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/3.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/3.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/3.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/3.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/3.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/3.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/3.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/3.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/3.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/3.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/3.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/3.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/3.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/3.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/30.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/30.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/30.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/30.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/30.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/30.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/30.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/30.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/30.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/30.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/30.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/30.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/30.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/30.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/30.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/30.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/30.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/30.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/30.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/30.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/30.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/31.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/31.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/31.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/31.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/31.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/31.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/31.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/31.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/31.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/31.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/31.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/31.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/31.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/31.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/31.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/31.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/31.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/31.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/31.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/31.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/31.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/32.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/32.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/32.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/32.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/32.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/32.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/32.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/32.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/32.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/32.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/32.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/32.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/32.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/32.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/32.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/32.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/32.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/32.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/32.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/32.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/32.xml:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/4.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/4.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/4.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/4.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/4.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/4.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/4.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/4.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/4.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/4.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/4.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/4.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/4.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/4.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/4.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/4.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/4.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/4.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/4.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/4.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/4.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/5.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/5.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/5.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/5.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/5.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/5.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/5.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/5.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/5.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/5.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/5.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/5.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/5.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/5.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/5.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/5.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/5.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/5.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/5.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/5.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/5.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/6.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/6.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/6.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/6.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/6.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/6.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/6.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/6.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/6.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/6.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/6.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/6.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/6.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/6.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/6.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/6.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/6.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/6.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/6.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/6.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/6.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/7.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/7.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/7.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/7.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/7.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/7.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/7.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/7.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/7.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/7.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/7.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/7.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/7.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/7.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/7.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/7.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/7.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/7.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/7.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/7.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/7.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/8.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/8.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/8.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/8.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/8.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/8.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/8.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/8.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/8.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/8.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/8.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/8.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/8.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/8.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/8.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/8.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/8.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/8.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/8.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/8.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/8.ics:10010-10312


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/errors/9.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/9.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/9.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/9.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/9.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/9.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/9.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/9.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/9.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/9.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/9.ics:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/errors/9.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/errors/9.txt:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/errors/9.txt:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/errors/9.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/errors/9.txt:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/errors/9.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/errors/9.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/errors/9.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/errors/9.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/errors/9.ics:10010-10312

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite1/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;PARTSTAT=ACCEPTED:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;PARTSTAT=ACCEPTED;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite2/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;PARTSTAT=ACCEPTED;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite3/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0206T200000Z
+DTSTART:$now.6:T200000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0206T200000Z
+DTSTART:$now.6:T200000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0208T200000Z
-DTSTART:$now.year.1:0208T200000Z
+RECURRENCE-ID:$now.8:T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0206T200000Z
+DTSTART:$now.6:T200000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0208T200000Z
-DTSTART:$now.year.1:0208T200000Z
+RECURRENCE-ID:$now.8:T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite4/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0206T200000Z
+DTSTART:$now.6:T200000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0208T200000Z
-DTSTART:$now.year.1:0208T200000Z
+RECURRENCE-ID:$now.8:T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0206T100000Z
+DTSTART:$now.6:T100000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0206T100000Z
+DTSTART:$now.6:T100000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0206T100000Z
+DTSTART:$now.6:T100000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite5/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0206T100000Z
+DTSTART:$now.6:T100000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=5
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART:$now.year.1:0210T104500Z
+DTSTART:$now.10:T104500Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART:$now.year.1:0210T104500Z
+DTSTART:$now.10:T104500Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART:$now.year.1:0210T104500Z
+DTSTART:$now.10:T104500Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite6/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART:$now.year.1:0210T104500Z
+DTSTART:$now.10:T104500Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART:$now.year.1:0210T080000Z
+DTSTART:$now.10:T080000Z
 DURATION:PT1H
 RRULE:FREQ=HOURLY;COUNT=8
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART:$now.year.1:0210T080000Z
+DTSTART:$now.10:T080000Z
 DURATION:PT1H
 RRULE:FREQ=HOURLY;COUNT=8
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-RECURRENCE-ID:$now.year.1:0210T100000Z
-DTSTART:$now.year.1:0210T100000Z
+RECURRENCE-ID:$now.10:T100000Z
+DTSTART:$now.10:T100000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART:$now.year.1:0210T080000Z
+DTSTART:$now.10:T080000Z
 DURATION:PT1H
 RRULE:FREQ=HOURLY;COUNT=8
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-RECURRENCE-ID:$now.year.1:0210T100000Z
-DTSTART:$now.year.1:0210T100000Z
+RECURRENCE-ID:$now.10:T100000Z
+DTSTART:$now.10:T100000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite7/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART:$now.year.1:0210T080000Z
+DTSTART:$now.10:T080000Z
 DURATION:PT1H
 RRULE:FREQ=HOURLY;COUNT=8
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
@@ -19,8 +19,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-RECURRENCE-ID:$now.year.1:0210T100000Z
-DTSTART:$now.year.1:0210T100000Z
+RECURRENCE-ID:$now.10:T100000Z
+DTSTART:$now.10:T100000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite8/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite8/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto1/suite8/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;PARTSTAT=ACCEPTED;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0222T210000Z
+DTSTART:$now.22:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T200000Z
+RECURRENCE-ID:$now.22:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0222T210000Z
+DTSTART:$now.22:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T200000Z
+RECURRENCE-ID:$now.22:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0215T210000Z
+DTSTART:$now.15:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T200000Z
+RECURRENCE-ID:$now.15:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0222T210000Z
+DTSTART:$now.22:T210000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T200000Z
+RECURRENCE-ID:$now.22:T200000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -16,9 +16,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -16,9 +16,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,9 +3,9 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z
@@ -32,9 +32,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T110000Z
+DTSTART:$now.22:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -32,9 +32,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T110000Z
+DTSTART:$now.22:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite5/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,9 +3,9 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T110000Z
+DTSTART:$now.22:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z
@@ -32,9 +32,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T203000Z
+DTSTART:$now.22:T203000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T100000Z
+DTSTART:$now.8:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -32,9 +32,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T203000Z
+DTSTART:$now.22:T203000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto2/suite6/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,9 +3,9 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0215T110000Z
+DTSTART:$now.15:T110000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0215T100000Z
+RECURRENCE-ID:$now.15:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0222T203000Z
+DTSTART:$now.22:T203000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0222T100000Z
+RECURRENCE-ID:$now.22:T100000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddralt1:
@@ -12,7 +12,7 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
+EXDATE:$now.15:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -12,7 +12,7 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
+EXDATE:$now.15:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -12,7 +12,7 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
+EXDATE:$now.15:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -12,8 +12,8 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
-EXDATE:$now.year.1:0308T200000Z,20060322T200000Z,20060405T200000Z
+EXDATE:$now.15:T200000Z
+EXDATE:$now.36:T200000Z,$now.50:T200000Z,$now.64:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -12,8 +12,8 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
-EXDATE:$now.year.1:0308T200000Z,20060322T200000Z,20060405T200000Z
+EXDATE:$now.15:T200000Z
+EXDATE:$now.36:T200000Z,$now.50:T200000Z,$now.64:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0208T200000Z
+DTSTART:$now.8:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -12,8 +12,8 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0215T200000Z
-EXDATE:$now.year.1:0308T200000Z,20060322T200000Z,20060405T200000Z
+EXDATE:$now.15:T200000Z
+EXDATE:$now.36:T200000Z,$now.50:T200000Z,$now.64:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -17,7 +17,7 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -25,13 +25,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -39,13 +39,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -53,13 +53,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -67,7 +67,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -17,7 +17,7 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -25,13 +25,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -39,13 +39,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -53,13 +53,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -67,7 +67,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -17,7 +17,7 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -25,13 +25,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -39,13 +39,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -53,13 +53,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -67,7 +67,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -18,21 +18,21 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -40,14 +40,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -55,14 +55,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -70,7 +70,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -18,21 +18,21 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -40,14 +40,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -55,14 +55,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -70,7 +70,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite5/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -12,14 +12,14 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0216T200000Z
+EXDATE:$now.16:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0223T210000Z
+DTSTART:$now.23:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -27,14 +27,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T200000Z
+RECURRENCE-ID:$now.23:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -42,14 +42,14 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -57,7 +57,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -12,42 +12,42 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0223T200000Z
+EXDATE:$now.23:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -55,7 +55,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -12,42 +12,42 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0223T200000Z
+EXDATE:$now.23:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0216T210000Z
+DTSTART:$now.16:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T200000Z
+RECURRENCE-ID:$now.16:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0309T210000Z
+DTSTART:$now.37:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0309T200000Z
+RECURRENCE-ID:$now.37:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;RSVP=TRUE;SCHEDULE-STATUS=1.2;CN=$resourcename1::$rcuaddrurn1:
@@ -55,7 +55,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite6/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0209T200000Z
+DTSTART:$now.9:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -12,16 +12,16 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0223T200000Z
-EXDATE:$now.year.1:0216T200000Z
-EXDATE:$now.year.1:0309T200000Z
+EXDATE:$now.23:T200000Z
+EXDATE:$now.16:T200000Z
+EXDATE:$now.37:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0324T210000Z
+DTSTART:$now.52:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -29,7 +29,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0323T200000Z
+RECURRENCE-ID:$now.51:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0209T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -16,7 +16,7 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0216T110000Z
+DTSTART:$now.16:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -24,13 +24,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0216T100000Z
+RECURRENCE-ID:$now.16:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -38,7 +38,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0209T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -16,7 +16,7 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0216T110000Z
+DTSTART:$now.16:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -24,13 +24,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T100000Z
+RECURRENCE-ID:$now.16:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -38,7 +38,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite7/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0216T110000Z
+DTSTART:$now.16:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -11,13 +11,13 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0216T100000Z
+RECURRENCE-ID:$now.16:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -25,7 +25,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0209T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -11,14 +11,14 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0216T100000Z
+EXDATE:$now.16:T100000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -26,7 +26,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1::$cuaddralt1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0209T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -11,14 +11,14 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=WEEKLY;COUNT=20
-EXDATE:$now.year.1:0216T100000Z
+EXDATE:$now.16:T100000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -26,7 +26,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto3/suite8/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0223T110000Z
+DTSTART:$now.23:T110000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -11,7 +11,7 @@
 DESCRIPTION:Call-in
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
-RECURRENCE-ID:$now.year.1:0223T100000Z
+RECURRENCE-ID:$now.23:T100000Z
 SEQUENCE:1
 SUMMARY:Recurring event with overridden instances
 TRANSP:OPAQUE

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddralt1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddralt1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -33,8 +33,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0204T200000Z
-DTSTART:$now.year.1:0203T200000Z
+RECURRENCE-ID:$now.4:T200000Z
+DTSTART:$now.3:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -33,8 +33,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0204T200000Z
-DTSTART:$now.year.1:0203T200000Z
+RECURRENCE-ID:$now.4:T200000Z
+DTSTART:$now.3:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto4/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0201T200000Z
+DTSTART:$now.1:T200000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -12,15 +12,15 @@
 DTSTAMP:20060309T185105Z
 ORGANIZER;CN=$username1:;SCHEDULE-STATUS=1.2;EMAIL=$email1::$cuaddrurn1:
 RRULE:FREQ=DAILY;COUNT=5
-EXDATE:$now.year.1:0204T200000Z
+EXDATE:$now.4:T200000Z
 SEQUENCE:2
 SUMMARY:Recurring event
 TRANSP:OPAQUE
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1
-RECURRENCE-ID:$now.year.1:0203T200000Z
-DTSTART:$now.year.1:0203T210000Z
+RECURRENCE-ID:$now.3:T200000Z
+DTSTART:$now.3:T210000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0209T000000Z
+DTSTART:$now.9:T000000Z
 DURATION:PT23H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0209T000000Z
+DTSTART:$now.9:T000000Z
 DURATION:PT23H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0209T000000Z
+DTSTART:$now.9:T000000Z
 DURATION:PT23H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0207T100000Z
+DTSTART:$now.7:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0207T100000Z
+DTSTART:$now.7:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -17,8 +17,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-RECURRENCE-ID:$now.year.1:0209T100000Z
-DTSTART:$now.year.1:0209T100000Z
+RECURRENCE-ID:$now.9:T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0207T100000Z
+DTSTART:$now.7:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
@@ -17,8 +17,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-RECURRENCE-ID:$now.year.1:0209T100000Z
-DTSTART:$now.year.1:0209T100000Z
+RECURRENCE-ID:$now.9:T100000Z
+DTSTART:$now.9:T100000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0207T120000Z
+DTSTART:$now.7:T120000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -16,8 +16,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0209T120000Z
-DTSTART:$now.year.1:0209T123000Z
+RECURRENCE-ID:$now.9:T120000Z
+DTSTART:$now.9:T123000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0207T120000Z
+DTSTART:$now.7:T120000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -16,8 +16,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0209T120000Z
-DTSTART:$now.year.1:0209T123000Z
+RECURRENCE-ID:$now.9:T120000Z
+DTSTART:$now.9:T123000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,8 +3,8 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-RECURRENCE-ID:$now.year.1:0209T120000Z
-DTSTART:$now.year.1:0209T123000Z
+RECURRENCE-ID:$now.9:T120000Z
+DTSTART:$now.9:T123000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0207T150000Z
+DTSTART:$now.7:T150000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 CREATED:20060110T231240Z
@@ -16,8 +16,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0209T150000Z
-DTSTART:$now.year.1:0209T153000Z
+RECURRENCE-ID:$now.9:T150000Z
+DTSTART:$now.9:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
@@ -30,8 +30,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0210T150000Z
-DTSTART:$now.year.1:0210T153000Z
+RECURRENCE-ID:$now.10:T150000Z
+DTSTART:$now.10:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0207T150000Z
+DTSTART:$now.7:T150000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 CREATED:20060110T231240Z
@@ -16,8 +16,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0209T150000Z
-DTSTART:$now.year.1:0209T153000Z
+RECURRENCE-ID:$now.9:T150000Z
+DTSTART:$now.9:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
@@ -30,8 +30,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0210T150000Z
-DTSTART:$now.year.1:0210T153000Z
+RECURRENCE-ID:$now.10:T150000Z
+DTSTART:$now.10:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto5/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,8 +3,8 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0209T150000Z
-DTSTART:$now.year.1:0209T153000Z
+RECURRENCE-ID:$now.9:T150000Z
+DTSTART:$now.9:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=DECLINED;CN=$resourcename1::$rcuaddrurn1:
@@ -17,8 +17,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-4
-RECURRENCE-ID:$now.year.1:0210T150000Z
-DTSTART:$now.year.1:0210T153000Z
+RECURRENCE-ID:$now.10:T150000Z
+DTSTART:$now.10:T153000Z
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -31,9 +31,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -45,9 +45,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -17,9 +17,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -31,9 +31,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -45,9 +45,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,10 +3,10 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
-EXDATE:$now.year.1:0105T000000Z
+EXDATE:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1::$cuaddralt1:
 ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=$resourcename1::$rcuaddralt1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,10 +3,10 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
-EXDATE:$now.year.1:0105T000000Z
+EXDATE:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,10 +3,10 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:0104T000000Z
+DTSTART:$now.4:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
-EXDATE:$now.year.1:0105T000000Z
+EXDATE:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -48,9 +48,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -48,9 +48,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -63,9 +63,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0105T000000Z
+DTSTART:$now.5:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0105T000000Z
+RECURRENCE-ID:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -48,9 +48,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -63,9 +63,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0105T000000Z
+DTSTART:$now.5:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0105T000000Z
+RECURRENCE-ID:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
@@ -18,9 +18,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0101T000000Z
+RECURRENCE-ID:$now.1:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -33,9 +33,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0102T000000Z
+DTSTART:$now.2:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0102T000000Z
+RECURRENCE-ID:$now.2:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -48,9 +48,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0103T000000Z
+DTSTART:$now.3:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0103T000000Z
+RECURRENCE-ID:$now.3:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z
@@ -63,9 +63,9 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0105T000000Z
+DTSTART:$now.5:T000000Z
 DURATION:PT1H
-RECURRENCE-ID:$now.year.1:0105T000000Z
+RECURRENCE-ID:$now.5:T000000Z
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0;CN=$resourcename1::$rcuaddrurn1:
 CREATED:20060110T231240Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto6/suite6/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0101T000000Z
+DTSTART:$now.1:T000000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=100
 ATTENDEE;PARTSTAT=ACCEPTED;CN=$username1:;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART;VALUE=DATE:$now.year.1:0208
+DTSTART;VALUE=DATE:$now.8:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:
 ATTENDEE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART;VALUE=DATE:$now.year.1:0208
+DTSTART;VALUE=DATE:$now.8:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART;VALUE=DATE:$now.year.1:0208
+DTSTART;VALUE=DATE:$now.8:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite1/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART;VALUE=DATE:$now.year.1:0208
+DTSTART;VALUE=DATE:$now.8:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T010000Z
+DTSTART:$now.8:T010000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T010000Z
+DTSTART:$now.8:T010000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T010000Z
+DTSTART:$now.8:T010000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite2/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-2
-DTSTART:$now.year.1:0208T010000Z
+DTSTART:$now.8:T010000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0208T220000Z
+DTSTART:$now.8:T220000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0208T220000Z
+DTSTART:$now.8:T220000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0208T220000Z
+DTSTART:$now.8:T220000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite3/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-3
-DTSTART:$now.year.1:0208T220000Z
+DTSTART:$now.8:T220000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0209T120000Z
+DTSTART:$now.9:T120000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0209T120000Z
+DTSTART:$now.9:T120000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0209T120000Z
+DTSTART:$now.9:T120000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite4/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-4
-DTSTART:$now.year.1:0209T120000Z
+DTSTART:$now.9:T120000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:
 ATTENDEE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite5/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-5
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:
 ATTENDEE;CN=$resourcename1::$rcuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED;SCHEDULE-STATUS=2.0:$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
-RECURRENCE-ID;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
+RECURRENCE-ID;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED:$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
-RECURRENCE-ID;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
+RECURRENCE-ID;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/auto7/suite6/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=ACCEPTED:$rcuaddrurn1:
@@ -18,8 +18,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-6
-DTSTART;VALUE=DATE:$now.year.1:0209
-RECURRENCE-ID;VALUE=DATE:$now.year.1:0209
+DTSTART;VALUE=DATE:$now.9:
+RECURRENCE-ID;VALUE=DATE:$now.9:
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:
 ATTENDEE;CN=$resourcename1:;PARTSTAT=DECLINED:$rcuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-always-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 RRULE:FREQ=DAILY;COUNT=3
 DURATION:PT1H
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/accept-if-free-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 RRULE:FREQ=DAILY;COUNT=3
 DURATION:PT1H
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/automatic-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/data/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/data/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/data/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:block at example.com
-DTSTART;VALUE=DATE:$now.year.1:0102
+DTSTART;VALUE=DATE:$now.2:
 DURATION:P1DT
 DTSTAMP:20051222T205953Z
 SUMMARY:Block out the day

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-always-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/decline-if-busy-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z
@@ -15,8 +15,8 @@
 END:VEVENT
 BEGIN:VEVENT
 UID:event-1 at example.com
-RECURRENCE-ID:$now.year.1:0102T120000Z
-DTSTART:$now.year.1:0102T120000Z
+RECURRENCE-ID:$now.2:T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-busy/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0102T120000Z
+DTSTART:$now.2:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ORGANIZER;CN=$username1::$cuaddralt1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-free/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 RRULE:FREQ=DAILY;COUNT=3
 DTSTAMP:20120101T120000Z

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automodes/none-recurring/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//PYVOBJECT//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1 at example.com
-DTSTART:$now.year.1:0101T120000Z
+DTSTART:$now.1:T120000Z
 DURATION:PT1H
 DTSTAMP:20120101T120000Z
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/1.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/1.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/1.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:1201T080000Z
+DTSTART:$now.1:T080000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED:$cuaddralt1:
 ATTENDEE;CN=$username2:;RSVP=TRUE:$cuaddralt2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/2.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/2.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/2.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//Example Inc.//Example Calendar//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:1201T080000Z
+DTSTART:$now.1:T080000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;SCHEDULE-STATUS=1.2;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/3.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/3.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/3.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:1201T080000Z
+DTSTART:$now.1:T080000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/4.ics
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/4.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/automultiple/suite1/4.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
 BEGIN:VEVENT
 UID:event-1
-DTSTART:$now.year.1:1201T080000Z
+DTSTART:$now.1:T080000Z
 DURATION:PT1H
 ATTENDEE;CN=$username1:;PARTSTAT=ACCEPTED;EMAIL=$email1::$cuaddrurn1:
 ATTENDEE;CN=$username2:;RSVP=TRUE;EMAIL=$email2::$cuaddrurn2:


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/1.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/1.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/1.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/1.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/1.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/1.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/1.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/1.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/1.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/1.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/1.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/1.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/1.ics:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/2.xml:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/2.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/2.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/2.xml:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/2.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/2.xml:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/2.xml:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/2.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/2.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/2.xml:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/2.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/2.xml:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/2.xml:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/3.xml:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/3.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/3.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/3.xml:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/3.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/3.xml:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/3.xml:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/3.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/3.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/3.xml:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/3.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/3.xml:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/3.xml:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/4.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/4.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/4.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/4.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/4.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/4.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/4.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/4.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/4.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/4.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/4.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/4.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/4.ics:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/5.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/5.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/5.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/5.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/5.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/5.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/5.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/5.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/5.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/5.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/5.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/5.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/5.ics:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/6.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/6.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/6.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/6.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/6.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/6.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/6.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/6.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/6.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/6.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/6.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/6.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/6.ics:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/7.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/7.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/7.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/7.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/7.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/7.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/7.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/7.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/7.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/7.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/7.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/7.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/7.ics:2451,3035,3142,3165,3190,3405,3432


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/8.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/8.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/8.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/8.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/8.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:10010-10163
/CalDAVTester/trunk/Resource/implicit/schedulechanges/8.ics:2451,3035,3142,3165,3190,3405,3432
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7584
/CalDAVTester/branches/users/cdaboo/attendee-comments-2887/Resource/implicit/schedulechanges/8.ics:2888-2910
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/Resource/implicit/schedulechanges/8.ics:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:8221-8346
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/Resource/implicit/schedulechanges/8.ics:2949-2989
/CalDAVTester/branches/users/cdaboo/location-partial-accept-3574/Resource/implicit/schedulechanges/8.ics:3575-3581
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/Resource/implicit/schedulechanges/8.ics:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:5229-5440
/CalDAVTester/trunk/Resource/CalDAV/implicit/schedulechanges/organizerchange/8.ics:10010-10312
/CalDAVTester/trunk/Resource/implicit/schedulechanges/8.ics:2451,3035,3142,3165,3190,3405,3432

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-All
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-All	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-All	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CalDAV
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CalDAV	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CalDAV	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CardDAV
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CardDAV	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/Validation-CardDAV	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/odsetup.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/odsetup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/odsetup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # coding=utf-8
 #
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/run.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/run.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/run.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-partitioning.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-partitioning.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-partitioning.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.
@@ -48,8 +48,8 @@
 		<feature>only-proxy-groups</feature>			<!-- Group-membership only includes delegated-to groups -->
 		<feature>limits</feature>						<!-- max-collections and max-resources limits -->
 		<feature>prefer</feature>						<!-- Prefer header overall support -->
-		<feature>prefer-minimal</feature>				<!-- Prefer header return-minimal -->
-		<feature>prefer-representation</feature>		<!-- Prefer header return-representation -->
+		<feature>prefer-minimal</feature>				<!-- Prefer header return=minimal -->
+		<feature>prefer-representation</feature>		<!-- Prefer header return=representation -->
 		<feature>prefer-noroot</feature>				<!-- Prefer header depth-noroot -->
 		<feature>quota</feature>						<!-- WebDAV QUOTA -->
 		<!-- <feature>quota-on-resources</feature> -->	<!-- WebDAV QUOTA on calendar and address book object resources -->
@@ -65,7 +65,7 @@
 		<feature>caldav</feature>					    <!-- Basic CalDAV feature enabler -->
 		<feature>auto-accept</feature>					<!-- Auto-accept for rooms & locations -->
 		<feature>auto-accept-modes</feature>			<!-- Auto-accept modes -->
-		<feature>dropbox</feature>						<!-- dropbox extension -->
+		<!-- <feature>dropbox</feature> -->				<!-- dropbox extension -->
 		<feature>default-alarms</feature>				<!-- default alarms extension -->
 		<feature>EMAIL parameter</feature>				<!-- Server normalizes cuaddress and adds EMAIL parameter -->
 		<feature>extended-freebusy</feature>	      	<!-- Extended freebusy response -->
@@ -261,7 +261,7 @@
 		<!-- attachments name-->
 		<substitution>
 			<key>$attachments:</key>
-			<value>attachments</value>
+			<value>dropbox</value>
 		</substitution>
 
 		<!-- notification name-->

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-template.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-template.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo-template.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.
@@ -48,8 +48,8 @@
 		<feature>only-proxy-groups</feature>			<!-- Group-membership only includes delegated-to groups -->
 		<feature>limits</feature>						<!-- max-collections and max-resources limits -->
 		<feature>prefer</feature>						<!-- Prefer header overall support -->
-		<feature>prefer-minimal</feature>				<!-- Prefer header return-minimal -->
-		<feature>prefer-representation</feature>		<!-- Prefer header return-representation -->
+		<feature>prefer-minimal</feature>				<!-- Prefer header return=minimal -->
+		<feature>prefer-representation</feature>		<!-- Prefer header return=representation -->
 		<feature>prefer-noroot</feature>				<!-- Prefer header depth-noroot -->
 		<feature>quota</feature>						<!-- WebDAV QUOTA -->
 		<!-- <feature>quota-on-resources</feature> -->	<!-- WebDAV QUOTA on calendar and address book object resources -->
@@ -65,7 +65,7 @@
 		<feature>caldav</feature>					    <!-- Basic CalDAV feature enabler -->
 		<feature>auto-accept</feature>					<!-- Auto-accept for rooms & locations -->
 		<feature>auto-accept-modes</feature>			<!-- Auto-accept modes -->
-		<feature>dropbox</feature>						<!-- dropbox extension -->
+		<!-- <feature>dropbox</feature> -->				<!-- dropbox extension -->
 		<feature>default-alarms</feature>				<!-- default alarms extension -->
 		<feature>EMAIL parameter</feature>				<!-- Server normalizes cuaddress and adds EMAIL parameter -->
 		<feature>extended-freebusy</feature>	      	<!-- Extended freebusy response -->
@@ -261,7 +261,7 @@
 		<!-- attachments name-->
 		<substitution>
 			<key>$attachments:</key>
-			<value>attachments</value>
+			<value>dropbox</value>
 		</substitution>
 
 		<!-- notification name-->

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.dtd
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/server/serverinfo.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE serverinfo SYSTEM "serverinfo.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.
@@ -48,8 +48,8 @@
 		<feature>only-proxy-groups</feature>			<!-- Group-membership only includes delegated-to groups -->
 		<feature>limits</feature>						<!-- max-collections and max-resources limits -->
 		<feature>prefer</feature>						<!-- Prefer header overall support -->
-		<feature>prefer-minimal</feature>				<!-- Prefer header return-minimal -->
-		<feature>prefer-representation</feature>		<!-- Prefer header return-representation -->
+		<feature>prefer-minimal</feature>				<!-- Prefer header return=minimal -->
+		<feature>prefer-representation</feature>		<!-- Prefer header return=representation -->
 		<feature>prefer-noroot</feature>				<!-- Prefer header depth-noroot -->
 		<feature>quota</feature>						<!-- WebDAV QUOTA -->
 		<!-- <feature>quota-on-resources</feature> -->	<!-- WebDAV QUOTA on calendar and address book object resources -->
@@ -65,7 +65,7 @@
 		<feature>caldav</feature>					    <!-- Basic CalDAV feature enabler -->
 		<feature>auto-accept</feature>					<!-- Auto-accept for rooms & locations -->
 		<feature>auto-accept-modes</feature>			<!-- Auto-accept modes -->
-		<feature>dropbox</feature>						<!-- dropbox extension -->
+		<!--<feature>dropbox</feature> -->				<!-- dropbox extension -->
 		<feature>default-alarms</feature>				<!-- default alarms extension -->
 		<feature>EMAIL parameter</feature>				<!-- Server normalizes cuaddress and adds EMAIL parameter -->
 		<feature>extended-freebusy</feature>	      	<!-- Extended freebusy response -->
@@ -261,7 +261,7 @@
 		<!-- attachments name-->
 		<substitution>
 			<key>$attachments:</key>
-			<value>attachments</value>
+			<value>dropbox</value>
 		</substitution>
 
 		<!-- notification name-->

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/acl.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/acl.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/acl.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/aclreports.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/aclreports.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/aclreports.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/add-member.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/add-member.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/add-member.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/alarm-dismissal.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/alarm-dismissal.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/alarm-dismissal.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/attachments.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/attachments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/attachments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/availability.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/availability.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/availability.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/brief.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/brief.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/brief.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/bulk.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/bulk.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/bulk.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavIOP.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavIOP.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavIOP.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavtest.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/caldavtest.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/calendaruserproxy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/calendaruserproxy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/calendaruserproxy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/conditional.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/conditional.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/conditional.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/copymove.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/copymove.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/copymove.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ctag.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ctag.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ctag.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/current-user-principal.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/current-user-principal.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/current-user-principal.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/default-alarms.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/default-alarms.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/default-alarms.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/delete.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/delete.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/delete.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreports.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreports.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreports.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreportsacl.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreportsacl.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/depthreportsacl.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/directory.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/directory.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/directory.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/dropbox.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/dropbox.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/dropbox.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 	<!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/encodedURIs.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/encodedURIs.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/encodedURIs.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors-big-calendars.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors-big-calendars.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors-big-calendars.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/errors.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/expandproperty.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/expandproperty.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/expandproperty.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/extended-freebusy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/extended-freebusy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/extended-freebusy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/floating.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/floating.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/floating.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/freebusy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/freebusy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/freebusy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/get.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/get.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/get.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ical-client.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ical-client.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/ical-client.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitacls.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitacls.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitacls.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitallday.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitallday.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitallday.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitattendeedelete.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitattendeedelete.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitattendeedelete.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto1.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto1.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto1.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto2.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto2.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto2.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto3.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto3.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto3.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto4.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto4.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto4.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto5.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto5.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto5.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto6.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto6.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto6.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto7.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto7.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto7.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto8.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto8.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitauto8.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomodes.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomodes.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomodes.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomultiple.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomultiple.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitautomultiple.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbadclients.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbadclients.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbadclients.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbatchrefresh.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbatchrefresh.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitbatchrefresh.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcalendartransp.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcalendartransp.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcalendartransp.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcancels.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcancels.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcancels.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcompatibility.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcompatibility.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcompatibility.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcopymove.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcopymove.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitcopymove.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdefaultcalendar.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdefaultcalendar.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdefaultcalendar.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdeletecalendar.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdeletecalendar.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdeletecalendar.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdropbox.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdropbox.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitdropbox.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/impliciterrors.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/impliciterrors.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/impliciterrors.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitfreebusy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitfreebusy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitfreebusy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitimip.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitimip.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitimip.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitlarge.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitlarge.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitlarge.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.


Property changes on: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitoptions.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalDAVTester/branches/release/CalDAVTester-3.0-dev/scripts/tests/CalDAV/implicitoptions.xml:7584
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/scripts/tests/implicitoptions.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/scripts/tests/CalDAV/implicitoptions.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466/scripts/tests/implicitoptions.xml:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/scripts/tests/implicitoptions.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/scripts/tests/implicitoptions.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CalDAV/implicitoptions.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/scripts/tests/CalDAV/implicitoptions.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/scripts/tests/CalDAV/implicitoptions.xml:5229-5440
/CalDAVTester/trunk/scripts/tests/CalDAV/implicitoptions.xml:10010-10163
   + /CalDAVTester/branches/release/CalDAVTester-3.0-dev/scripts/tests/CalDAV/implicitoptions.xml:7584
/CalDAVTester/branches/users/cdaboo/better-proxy-3148/scripts/tests/implicitoptions.xml:3149-3163
/CalDAVTester/branches/users/cdaboo/component-set-fixes/scripts/tests/CalDAV/implicitoptions.xml:8221-8346
/CalDAVTester/branches/users/cdaboo/conditional-4466/scripts/tests/implicitoptions.xml:4467-4469
/CalDAVTester/branches/users/cdaboo/implicitauto-2948/scripts/tests/implicitoptions.xml:2949-2989
/CalDAVTester/branches/users/cdaboo/normalize-cuaddr-3533/scripts/tests/implicitoptions.xml:3534-3558
/CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CalDAV/implicitoptions.xml:7160-7206
/CalDAVTester/branches/users/cdaboo/pycard/scripts/tests/CalDAV/implicitoptions.xml:7226-7237
/CalDAVTester/branches/users/cdaboo/sharing-5228/scripts/tests/CalDAV/implicitoptions.xml:5229-5440
/CalDAVTester/trunk/scripts/tests/CalDAV/implicitoptions.xml:10010-10312

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitpartstatchange.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitpartstatchange.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitpartstatchange.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2011 Apple Inc. All rights reserved.
+ Copyright (c) 2011-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitprivateevents.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitprivateevents.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitprivateevents.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitproxy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitproxy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitproxy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur1.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur1.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur1.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur2.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur2.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitrecur2.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitreschedule.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitreschedule.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitreschedule.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario1.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario1.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario1.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario2.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario2.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario2.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario3.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario3.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscenario3.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduleagent.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduleagent.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduleagent.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitschedulechanges.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitschedulechanges.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitschedulechanges.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduletag.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduletag.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitscheduletag.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsecurity.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsecurity.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsecurity.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsequence.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsequence.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicitsequence.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittimezones.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittimezones.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittimezones.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittodo.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittodo.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/implicittodo.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/limits.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/limits.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/limits.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Added: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/managed-attachments-dropbox.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/managed-attachments-dropbox.xml	                        (rev 0)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/managed-attachments-dropbox.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,413 @@
+<?xml version="1.0" standalone="no"?>
+
+<!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
+
+<!--
+ Copyright (c) 2013 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.
+ -->
+
+<caldavtest>
+	<description>Test managed attachments dropbox compatibility</description>
+
+	<require-feature>
+		<feature>caldav</feature>
+		<feature>managed-attachments</feature>
+		<feature>prefer-representation</feature>
+	</require-feature>
+
+	<start/>
+	
+	<test-suite name='Principal properties'>
+		<test name='1'>
+			<description>Look for properties</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$principal1:</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/1.xml</filepath>
+				</data>
+				<verify>
+					<callback>propfindItems</callback>
+					<arg>
+						<name>okprops</name>
+						<value><![CDATA[{http://calendarserver.org/ns/}dropbox-home-URL$<href xmlns="DAV:">$dropboxpath1:/</href>]]></value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Collection properties'>
+		<test name='1'>
+			<description>Look for properties</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$dropboxpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/2.xml</filepath>
+				</data>
+				<verify>
+					<callback>xmlElementMatch</callback>
+					<arg>
+						<name>exists</name>
+						<value>$verify-property-prefix:/{DAV:}resourcetype/{DAV:}collection</value>
+						<value>$verify-property-prefix:/{DAV:}resourcetype/{http://calendarserver.org/ns/}dropbox-home</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Create managed attachment'>
+		<test name='1'>
+			<description>No dropboxes to start</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$dropboxpath1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/Common/PROPFIND/count.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>count</name>
+						<value>0</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore='no'>
+			<description>PUT event</description>
+			<request end-delete='yes'>
+				<method>PUT</method>
+				<ruri>$calendarpath1:/1.ics</ruri>
+				<data>
+					<content-type>text/calendar; charset=utf-8</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/3.ics</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+				</verify>
+			</request>
+			<request>
+				<method>GET</method>
+				<ruri>$calendarpath1:/1.ics</ruri>
+				<verify>
+					<callback>calendarDataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CalDAV/managedattachments/dropbox/3.ics</value>
+					</arg>
+				</verify>
+				<grabheader>
+					<name>ETag</name>
+					<variable>$etag:</variable>
+				</grabheader>
+			</request>
+		</test>
+		<test name='3' ignore='no'>
+			<description>Add attachment (with prefer)</description>
+			<request>
+				<method>POST</method>
+				<ruri>$calendarpath1:/1.ics?action=attachment-add</ruri>
+				<header>
+					<name>Content-Disposition</name>
+					<value>attachment;filename=test.txt</value>
+				</header>
+				<header>
+					<name>Prefer</name>
+					<value>return=representation</value>
+				</header>
+				<data>
+					<content-type>text/plain</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>calendarDataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CalDAV/managedattachments/dropbox/3.ics</value>
+					</arg>
+					<arg>
+						<name>filter</name>
+						<value>ATTACH</value>
+					</arg>
+				</verify>
+				<verify>
+					<callback>dataString</callback>
+					<arg>
+						<name>unwrap</name>
+						<value/>
+					</arg>
+					<arg>
+						<name>contains</name>
+						<value>ATTACH</value>
+						<value>;FILENAME=</value>
+						<value>;FMTTYPE=</value>
+						<value>;SIZE=</value>
+						<value>;MTAG=</value>
+						<value>;MANAGED-ID=</value>
+					</arg>
+				</verify>
+				<verify>
+					<callback>header</callback>
+					<arg>
+						<name>header</name>
+						<value>Cal-Managed-ID</value>
+					</arg>
+				</verify>
+				<grabheader>
+					<name>Location</name>
+					<variable>$location:</variable>
+				</grabheader>
+				<grabheader>
+					<name>Cal-Managed-ID</name>
+					<variable>$managed-id:</variable>
+				</grabheader>
+			</request>
+		</test>
+		<test name='4' ignore='no'>
+			<description>Check for attachment</description>
+			<request>
+				<method>GET</method>
+				<ruri>$location:</ruri>
+				<verify>
+					<callback>dataMatch</callback>
+					<arg>
+						<name>filepath</name>
+						<value>Resource/CalDAV/managedattachments/dropbox/4.txt</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>One dropbox</description>
+			<request>
+				<method>FINDNEW</method>
+				<ruri>$dropboxpath1:/</ruri>
+				<graburi>$dropboxchild1:</graburi>
+			</request>
+		</test>
+		<test name='6'>
+			<description>Scan dropbox</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$dropboxchild1:/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>1</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/Common/PROPFIND/count.xml</filepath>
+				</data>
+				<verify>
+					<callback>multistatusItems</callback>
+					<arg>
+						<name>count</name>
+						<value>1</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Drop Box Collection Create'>
+		<test name='1'>
+			<description>Create drop box - fails</description>
+			<request end-delete='yes' user="$userid1:" pswd="$pswd1:">
+				<method>MKCOL</method>
+				<ruri>$dropboxpath1:/ABCEFG/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>Look for properties</description>
+			<request>
+				<method>PROPFIND</method>
+				<ruri>$dropboxpath1:/ABCEFG/</ruri>
+				<header>
+					<name>Depth</name>
+					<value>0</value>
+				</header>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/Common/PROPFIND/count.xml</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Drop Box Home Restrictions'>
+		<test name='1'>
+			<description>Try to create a calendar</description>
+			<request end-delete="yes">
+				<method>MKCALENDAR</method>
+				<ruri>$dropboxpath1:/calendar/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2' ignore="no">
+			<description>Try to create a resource</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$dropboxpath1:/test.xml</ruri>
+				<data>
+					<content-type>text/xml; charset=utf-8</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<test-suite name='Drop Box Restrictions'>
+		<test name='1'>
+			<description>Try to create a calendar - non-existent dropbox</description>
+			<request end-delete="yes">
+				<method>MKCALENDAR</method>
+				<ruri>$dropboxpath1:/ABCEFG/calendar/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='2'>
+			<description>Try to create a collection</description>
+			<request end-delete="yes">
+				<method>MKCOL</method>
+				<ruri>$dropboxpath1:/ABCEFG/calendar/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='3'>
+			<description>Try to create a resource - non-existent dropbox</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$dropboxpath1:/ABCEFG/xyz.txt</ruri>
+				<data>
+					<content-type>text/plain</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='4'>
+			<description>Try to create a calendar - existing dropbox</description>
+			<request end-delete="yes">
+				<method>MKCALENDAR</method>
+				<ruri>$dropboxchild1:/calendar/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>405</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='5'>
+			<description>Try to create a collection - existing dropbox</description>
+			<request end-delete="yes">
+				<method>MKCOL</method>
+				<ruri>$dropboxchild1:/calendar/</ruri>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>405</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+		<test name='6'>
+			<description>Try to create a resource - existing dropbox</description>
+			<request end-delete="yes">
+				<method>PUT</method>
+				<ruri>$dropboxchild1:/xyz.txt</ruri>
+				<data>
+					<content-type>text/plain</content-type>
+					<filepath>Resource/CalDAV/managedattachments/dropbox/4.txt</filepath>
+				</data>
+				<verify>
+					<callback>statusCode</callback>
+					<arg>
+						<name>status</name>
+						<value>403</value>
+					</arg>
+				</verify>
+			</request>
+		</test>
+	</test-suite>
+
+	<end/>
+
+</caldavtest>

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/mkcalendar.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/mkcalendar.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/mkcalendar.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/nonascii.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/nonascii.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/nonascii.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-calendaruserproxy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-calendaruserproxy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-calendaruserproxy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicit.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicit.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicit.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicitauto.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicitauto.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-scheduleimplicitauto.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-simple.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-simple.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/partitioning-simple.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/prefer.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/prefer.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/prefer.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2012 Apple Inc. All rights reserved.
+ Copyright (c) 2012-2013 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.
@@ -106,7 +106,7 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>PROPFIND depth=0 with Prefer:return-minimal</description>
+			<description>PROPFIND depth=0 with Prefer:return=minimal</description>
 			<request>
 				<method>PROPFIND</method>
 				<ruri>$calendarpath1:/</ruri>
@@ -116,7 +116,7 @@
 				</header>
 				<header>
 					<name>Prefer</name>
-					<value>return-minimal</value>
+					<value>return=minimal</value>
 				</header>
 				<data>
 					<content-type>text/xml; charset=utf-8</content-type>
@@ -186,13 +186,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>REPORT with Prefer=return-minimal</description>
+			<description>REPORT with Prefer=return=minimal</description>
 			<request>
 				<method>REPORT</method>
 				<ruri>$calendarpath1:/</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-minimal</value>
+					<value>return=minimal</value>
 				</header>
 				<data>
 					<content-type>text/xml; charset=utf-8</content-type>
@@ -262,13 +262,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>REPORT with Prefer=return-minimal</description>
+			<description>REPORT with Prefer=return=minimal</description>
 			<request>
 				<method>REPORT</method>
 				<ruri>$calendarpath1:/</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-minimal</value>
+					<value>return=minimal</value>
 				</header>
 				<data>
 					<content-type>text/xml; charset=utf-8</content-type>
@@ -332,13 +332,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>PROPPATCH with Prefer:return-minimal</description>
+			<description>PROPPATCH with Prefer:return=minimal</description>
 			<request print-response='no'>
 				<method>PROPPATCH</method>
 				<ruri>$calendarpath1:/</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-minimal</value>
+					<value>return=minimal</value>
 				</header>
 				<data>
 					<content-type>text/xml; charset=utf-8</content-type>
@@ -499,13 +499,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>PUT with Prefer=return-representation</description>
+			<description>PUT with Prefer=return=representation</description>
 			<request>
 				<method>PUT</method>
 				<ruri>$calendarpath1:/4.ics</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-representation</value>
+					<value>return=representation</value>
 				</header>
 				<data>
 					<content-type>text/calendar; charset=utf-8</content-type>
@@ -535,13 +535,13 @@
 			</request>
 		</test>
 		<test name='4'>
-			<description>PUT with Prefer=return-representation</description>
+			<description>PUT with Prefer=return=representation</description>
 			<request>
 				<method>PUT</method>
 				<ruri>$calendarpath1:/4.ics</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-representation</value>
+					<value>return=representation</value>
 				</header>
 				<data>
 					<content-type>text/calendar; charset=utf-8</content-type>
@@ -631,13 +631,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>PUT with Prefer=return-representation</description>
+			<description>PUT with Prefer=return=representation</description>
 			<request>
 				<method>PUT</method>
 				<ruri>$calendarpath1:/7.ics</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-representation</value>
+					<value>return=representation</value>
 				</header>
 				<data>
 					<content-type>text/calendar; charset=utf-8</content-type>
@@ -667,13 +667,13 @@
 			</request>
 		</test>
 		<test name='4'>
-			<description>PUT with Prefer=return-representation</description>
+			<description>PUT with Prefer=return=representation</description>
 			<request>
 				<method>PUT</method>
 				<ruri>$calendarpath1:/7.ics</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-representation</value>
+					<value>return=representation</value>
 				</header>
 				<data>
 					<content-type>text/calendar; charset=utf-8</content-type>
@@ -792,13 +792,13 @@
 			</request>
 		</test>
 		<test name='3'>
-			<description>POST with Prefer=return-representation</description>
+			<description>POST with Prefer=return=representation</description>
 			<request>
 				<method>POST</method>
 				<ruri>$calendarpath1:/$add-member:</ruri>
 				<header>
 					<name>Prefer</name>
-					<value>return-representation</value>
+					<value>return=representation</value>
 				</header>
 				<data>
 					<content-type>text/calendar; charset=utf-8</content-type>

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privatecomments.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privatecomments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privatecomments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privateevents.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privateevents.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/privateevents.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/propfind.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/propfind.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/propfind.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proppatch.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proppatch.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proppatch.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proxyauthz.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proxyauthz.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/proxyauthz.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/put.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/put.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/put.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/quota.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/quota.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/quota.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/recurrenceput.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/recurrenceput.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/recurrenceput.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/reports.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/reports.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/reports.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/resourceid.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/resourceid.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/resourceid.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleimplicit-compatability.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleimplicit-compatability.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleimplicit-compatability.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulenomore.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulenomore.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulenomore.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepost.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepost.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepost.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostacl.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostacl.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostacl.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostmaskuid.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostmaskuid.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/schedulepostmaskuid.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleprops.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleprops.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/scheduleprops.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserverincoming.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserverincoming.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserverincoming.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserveroutgoing.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserveroutgoing.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/servertoserveroutgoing.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-cache.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-cache.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-cache.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-calendars.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-calendars.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-calendars.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-create.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-create.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-create.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-direct.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-direct.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-direct.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-dropbox.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-dropbox.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-dropbox.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-feature.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-feature.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-feature.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-freebusy.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-freebusy.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-freebusy.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-invites.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-invites.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-invites.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-moves.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-moves.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-moves.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-multiple.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-multiple.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-multiple.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-notification-sync.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-notification-sync.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-notification-sync.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-data.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-data.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-data.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-properties.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-properties.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-peruser-properties.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-proxies.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-proxies.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-proxies.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-quota.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-quota.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-quota.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-replies.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-replies.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-replies.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-unshare.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-unshare.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-unshare.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-webcal.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-webcal.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sharing-webcal.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sync-report.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sync-report.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/sync-report.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezones.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezones.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezones.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezoneservice.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezoneservice.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/timezoneservice.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/webcal.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/webcal.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/webcal.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/well-known.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/well-known.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CalDAV/well-known.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/ab-client.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/ab-client.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/ab-client.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/aclreports.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/aclreports.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/aclreports.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/add-member.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/add-member.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/add-member.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/bulk.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/bulk.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/bulk.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE CardDAVtest SYSTEM "CardDAVtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/caldavtest.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/caldavtest.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/copymove.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/copymove.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/copymove.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/current-user-principal.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/current-user-principal.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/current-user-principal.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/default-addressbook.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/default-addressbook.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/default-addressbook.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory-gateway.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory-gateway.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory-gateway.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/directory.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errorcondition.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errorcondition.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errorcondition.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errors.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errors.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/errors.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/get.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/get.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/get.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/global-addressbook.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/global-addressbook.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/global-addressbook.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/limits.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/limits.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/limits.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/mkcol.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/mkcol.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/mkcol.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/nonascii.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/nonascii.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/nonascii.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/propfind.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/propfind.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/propfind.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/proppatch.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/proppatch.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/proppatch.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/put.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/put.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/put.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/reports.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/reports.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/reports.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/resourceid.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/resourceid.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/resourceid.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-addressbooks.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-addressbooks.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-addressbooks.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-feature.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-feature.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-feature.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-peruser-properties.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-peruser-properties.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-peruser-properties.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-replies.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-replies.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-replies.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-unshare.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-unshare.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sharing-unshare.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sync-report.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sync-report.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/sync-report.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/well-known.xml
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/well-known.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/scripts/tests/CardDAV/well-known.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -3,7 +3,7 @@
 <!DOCTYPE caldavtest SYSTEM "caldavtest.dtd">
 
 <!--
- Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/__init__.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/caldavtest.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/caldavtest.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/caldavtest.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -342,21 +342,24 @@
                         else:
                             status = False
 
-                        # Get properties for this propstat
-                        prop = props.findall("{DAV:}prop")
-                        for el in prop:
-
+                        if status:
                             # Get properties for this propstat
-                            glm = el.findall("{DAV:}getlastmodified")
-                            if len(glm) != 1:
-                                continue
-                            value = glm[0].text
-                            value = rfc822.parsedate(value)
-                            value = time.mktime(value)
-                            if value > latest:
-                                hresult = href
-                                latest = value
+                            prop = props.findall("{DAV:}prop")
+                            for el in prop:
 
+                                # Get properties for this propstat
+                                glm = el.findall("{DAV:}getlastmodified")
+                                if len(glm) != 1:
+                                    continue
+                                value = glm[0].text
+                                value = rfc822.parsedate(value)
+                                value = time.mktime(value)
+                                if value > latest:
+                                    hresult = href
+                                    latest = value
+                        elif not hresult:
+                            hresult = href
+
         return hresult
 
 
@@ -491,6 +494,14 @@
             req.method = "GET"
             req.ruri = "$"
 
+        # Special for FINDNEW
+        elif req.method == "FINDNEW":
+            collection = (req.ruri, req.user, req.pswd)
+            self.grabbedlocation = self.dofindnew(collection, label=label)
+            if req.graburi:
+                self.manager.server_info.addextrasubs({req.graburi: self.grabbedlocation})
+            return True, "", None, None
+
         # Special check for WAITCOUNT
         elif req.method.startswith("WAITCOUNT"):
             count = int(req.method[10:])

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/httpshandler.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/httpshandler.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/httpshandler.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/manager.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/manager.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/manager.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/request.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/request.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/request.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/serverinfo.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/serverinfo.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/serverinfo.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -23,7 +23,7 @@
 
 class serverinfo(object):
     """
-    Maintains information about the server being targetted.
+    Maintains information about the server being targeted.
     """
 
     def __init__(self):
@@ -37,33 +37,48 @@
         self.subsdict = {}
         self.extrasubsdict = {}
 
-        # Insert a bunch of date values
-        dtnow = datetime.date.today()
-        for dayoffset in xrange(-21, 21):
-            dtoffset = dtnow + datetime.timedelta(days=dayoffset)
-            key = "$now.%d:" % (dayoffset,)
-            value = "%d%02d%02d" % (dtoffset.year, dtoffset.month, dtoffset.day,)
-            self.subsdict[key] = value
-        for yearoffset in xrange(-5, 20):
-            key = "$now.year.%d:" % (yearoffset,)
-            value = "%d" % (dtnow.year + yearoffset,)
-            self.subsdict[key] = value
+        # dtnow needs to be fixed to a single date at the start of the tests just in case the tests
+        # run over a day boundary.
+        self.dtnow = datetime.date.today()
 
 
-    def subs(self, str, db=None):
+    def subs(self, sub, db=None):
+
+        # Special handling for relative date-times
+        pos = sub.find("$now.")
+        while pos != -1:
+            endpos = pos + sub[pos:].find(":")
+            if sub[pos:].startswith("$now.year."):
+                yearoffset = int(sub[pos + 10:endpos])
+                value = "%d" % (self.dtnow.year + yearoffset,)
+            elif sub[pos:].startswith("$now.month."):
+                monthoffset = int(sub[pos + 11:endpos])
+                dtoffset = self.dtnow + datetime.timedelta(months=monthoffset)
+                value = "%d%02d" % (dtoffset.year, dtoffset.month,)
+            elif sub[pos:].startswith("$now.week."):
+                weekoffset = int(sub[pos + 10:endpos])
+                dtoffset = self.dtnow + datetime.timedelta(days=7 * weekoffset)
+                value = "%d%02d%02d" % (dtoffset.year, dtoffset.month, dtoffset.day,)
+            else:
+                dayoffset = int(sub[pos + 5:endpos])
+                dtoffset = self.dtnow + datetime.timedelta(days=dayoffset)
+                value = "%d%02d%02d" % (dtoffset.year, dtoffset.month, dtoffset.day,)
+            sub = "%s%s%s" % (sub[:pos], value, sub[endpos + 1:])
+            pos = sub.find("$now.")
+
         if db is None:
             db = self.subsdict
         count = 0
         while count < 10:
             do_again = False
             for key, value in db.iteritems():
-                newstr = str.replace(key, value)
-                do_again = do_again or (newstr != str)
-                str = newstr
+                newstr = sub.replace(key, value)
+                do_again = do_again or (newstr != sub)
+                sub = newstr
             if not do_again:
                 break
             count += 1
-        return str
+        return sub
 
 
     def addsubs(self, items, db=None):

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/test.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/test.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/test.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/testsuite.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/testsuite.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/testsuite.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlDefs.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlDefs.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlDefs.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlUtils.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlUtils.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/src/xmlUtils.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/testcaldav.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/testcaldav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/testcaldav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/__init__.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/aclItems.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/aclItems.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/aclItems.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/addressDataMatch.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/addressDataMatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/addressDataMatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/calendarDataMatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/calendarDataMatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataMatch.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataMatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataMatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataString.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataString.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/dataString.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/freeBusy.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/freeBusy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/freeBusy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/header.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/header.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/header.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/multistatusItems.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/multistatusItems.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/multistatusItems.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/postFreeBusy.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/postFreeBusy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/postFreeBusy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/prepostcondition.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/prepostcondition.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/prepostcondition.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindItems.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindItems.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindItems.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindValues.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindValues.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/propfindValues.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/statusCode.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/statusCode.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/statusCode.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlDataMatch.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlDataMatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlDataMatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlElementMatch.py
===================================================================
--- CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlElementMatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalDAVTester/branches/users/gaya/sharedgroupstester/verifiers/xmlElementMatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.


Property changes on: CalendarServer/branches/users/gaya/sharedgroups
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/cdaboo/timezones:7443-7699
/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/disable-quota:7718-7727
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/other-html:8062-8091
/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
/CalendarServer/branches/users/glyph/q:9560-9688
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sharing-api:9192-9205
/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/table-alias:8651-8664
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
/CalendarServer/branches/users/sagen/applepush:8126-8184
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/wsanchez/transations:5515-5593
/CalendarServer/trunk:9885-10162
   + /CalendarServer/branches/config-separation:4379-4443
/CalendarServer/branches/egg-info-351:4589-4625
/CalendarServer/branches/generic-sqlstore:6167-6191
/CalendarServer/branches/new-store:5594-5934
/CalendarServer/branches/new-store-no-caldavfile:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
/CalendarServer/branches/release/CalendarServer-4.3-dev:10180-10190,10192
/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/pods:7297-7377
/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
/CalendarServer/branches/users/cdaboo/pycard:7227-7237
/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/cdaboo/timezones:7443-7699
/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dalify:6932-7023
/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
/CalendarServer/branches/users/glyph/deploybuild:7563-7572
/CalendarServer/branches/users/glyph/disable-quota:7718-7727
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
/CalendarServer/branches/users/glyph/new-export:7444-7485
/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
/CalendarServer/branches/users/glyph/other-html:8062-8091
/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
/CalendarServer/branches/users/glyph/q:9560-9688
/CalendarServer/branches/users/glyph/queue-locking-and-timing:10204-10289
/CalendarServer/branches/users/glyph/quota:7604-7637
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sharing-api:9192-9205
/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/subtransactions:7248-7258
/CalendarServer/branches/users/glyph/table-alias:8651-8664
/CalendarServer/branches/users/glyph/uidexport:7673-7676
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
/CalendarServer/branches/users/sagen/applepush:8126-8184
/CalendarServer/branches/users/sagen/inboxitems:7380-7381
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/branches/users/sagen/resources-2:5084-5093
/CalendarServer/branches/users/wsanchez/transations:5515-5593
/CalendarServer/trunk:9885-10312

Modified: CalendarServer/branches/users/gaya/sharedgroups/README
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/README	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/README	2013-01-19 04:44:01 UTC (rev 10313)
@@ -12,7 +12,7 @@
 Copyright and License
 =====================
 
-Copyright (c) 2005-2010 Apple Inc.  All rights reserved.
+Copyright (c) 2005-2013 Apple Inc.  All rights reserved.
 
 This software is licensed under the Apache License, Version 2.0.  The
 Apache License is a well-established open source license, enabling

Modified: CalendarServer/branches/users/gaya/sharedgroups/benchmark
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/benchmark	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/benchmark	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ##
-# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/benchreport
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/benchreport	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/benchreport	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ##
-# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/_calendarserver_preamble.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/_calendarserver_preamble.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/_calendarserver_preamble.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -42,10 +42,13 @@
         return
 
     child = Popen((run, "-e"), stdout=PIPE)
-    stdout, stderr = child.communicate()
+    stdout, _ignore_stderr = child.communicate()
     stdout = stdout.rstrip("\n")
 
-    evars = eval(stdout)
+    try:
+        evars = eval(stdout)
+    except SyntaxError:
+        return
     os.environ.update(evars)
 
     # PYTHONPATH needs special treatment, because Python has already processed
@@ -69,4 +72,3 @@
 
 
 bootstrapFromRun()
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/caldavd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/caldavd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/caldavd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # -*- sh-basic-offset: 2 -*-
 
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -121,6 +121,8 @@
 
 if [ $# != 0 ]; then usage "Unrecognized arguments:" "$@"; fi;
 
+export PYTHONHASHSEED=random
+
 export PYTHONPATH
 
 exec "${python}" "${twistdpath}" ${twistd_profile} ${twistd_reactor} ${daemonize} ${username} ${groupname} "${plugin_name}" ${configfile} ${service_type} ${errorlogenabled} ${profile} ${child_reactor};

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_backup
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_backup	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_backup	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_bootstrap_database
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_bootstrap_database	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_bootstrap_database	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_command_gateway
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_command_gateway	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_command_gateway	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_config
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_config	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_config	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_dbinspect
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_dbinspect	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_dbinspect	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_export
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_export	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_export	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_load_augmentdb
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_load_augmentdb	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_load_augmentdb	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_make_partition
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_make_partition	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_make_partition	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_postgres
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_postgres	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_postgres	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_principals
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_principals	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_principals	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_push
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_push	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_push	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_timezones
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_timezones	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_manage_timezones	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_migrate_resources
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_migrate_resources	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_migrate_resources	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_amp_notifications
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_amp_notifications	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_amp_notifications	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_notifications
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_notifications	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_monitor_notifications	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_attachments
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_attachments	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_attachments	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -29,5 +29,5 @@
         except ImportError:
             sys.exc_clear()
 
-    from calendarserver.tools.purge import main_purge_orphaned_attachments
-    main_purge_orphaned_attachments()
+    from calendarserver.tools.purge import PurgeAttachmentsService
+    PurgeAttachmentsService.main()

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_events
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_events	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_events	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -29,5 +29,5 @@
         except ImportError:
             sys.exc_clear()
 
-    from calendarserver.tools.purge import main_purge_events
-    main_purge_events()
+    from calendarserver.tools.purge import PurgeOldEventsService
+    PurgeOldEventsService.main()

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_principals
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_principals	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_purge_principals	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -29,5 +29,5 @@
         except ImportError:
             sys.exc_clear()
 
-    from calendarserver.tools.purge import main_purge_principals
-    main_purge_principals()
+    from calendarserver.tools.purge import PurgePrincipalService
+    PurgePrincipalService.main()

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_shell
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_shell	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_shell	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_upgrade
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_upgrade	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_upgrade	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_verify_data
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_verify_data	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_verify_data	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_warmup
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_warmup	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/calendarserver_warmup	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/icalendar_split
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/icalendar_split	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/icalendar_split	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/bin/proxyclean
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/bin/proxyclean	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/bin/proxyclean	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2008 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/accesslog.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/accesslog.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/accesslog.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/controlsocket.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/controlsocket.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/controlsocket.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.c
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.c	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.c	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/_sacl.so
===================================================================
(Binary files differ)

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsattributes.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsattributes.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsattributes.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/dsquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/opendirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/opendirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/opendirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_directory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_directory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_directory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_testusers.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_testusers.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/setup_testusers.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/test_opendirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/test_opendirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/od/test/test_opendirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/wiki.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/wiki.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/platform/darwin/wiki.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/root.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/root.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/root.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.provision.test.test_root -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/test_root.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/test_root.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/provision/test/test_root.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/amppush.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/amppush.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/amppush.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/applepush.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/applepush.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/applepush.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.push.test.test_applepush -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_amppush.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_amppush.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_amppush.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_applepush.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_applepush.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/test/test_applepush.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/push/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/caldav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/caldav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.tap.test.test_caldav -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -64,7 +64,7 @@
 
 from txdav.common.datastore.sql_tables import schema
 from txdav.common.datastore.upgrade.sql.upgrade import (
-    UpgradeDatabaseSchemaService, UpgradeDatabaseDataService,
+    UpgradeDatabaseSchemaService, UpgradeDatabaseDataService, UpgradeDatabaseOtherService,
 )
 from txdav.common.datastore.upgrade.migrate import UpgradeToDatabaseService
 
@@ -186,6 +186,7 @@
     ]
 
     optionalVars = [
+        "PYTHONHASHSEED",
         "KRB5_KTNAME",
         "ORACLE_HOME",
         "VERSIONER_PYTHON_PREFER_32_BIT",
@@ -1122,7 +1123,10 @@
                         UpgradeDatabaseDataService.wrapService(
                             UpgradeToDatabaseService.wrapService(
                                 CachingFilePath(config.DocumentRoot),
-                                postImport,
+                                UpgradeDatabaseOtherService.wrapService(
+                                    postImport,
+                                    store, uid=overrideUID, gid=overrideGID,
+                                ),
                                 store, uid=overrideUID, gid=overrideGID,
                                 spawner=spawner, merge=config.MergeUpgrades,
                                 parallel=parallel
@@ -2050,6 +2054,8 @@
 
     return None
 
+
+
 def getSystemIDs(userName, groupName):
     """
     Return the system ID numbers corresponding to either:
@@ -2068,7 +2074,7 @@
         try:
             uid = getpwnam(userName).pw_uid
         except KeyError:
-           raise ConfigurationError("Invalid user name: %s" % (userName,))
+            raise ConfigurationError("Invalid user name: %s" % (userName,))
     else:
         uid = getuid()
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/cfgchild.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/cfgchild.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/cfgchild.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/profiling.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/profiling.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/profiling.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/longlines.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/longlines.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/longlines.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_caldav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_caldav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_caldav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tap/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.tap.test.test_caldav -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -238,7 +238,7 @@
             uri = "https://%s:%s" % (config.ServerHostName, config.SSLPort,)
         else:
             uri = "http://%s:%s" % (config.ServerHostName, config.HTTPPort,)
-        attachments_uri = uri + "/calendars/__uids__/%(home)s/attachments/%(name)s"
+        attachments_uri = uri + "/calendars/__uids__/%(home)s/dropbox/%(dropbox_id)s/%(name)s"
         return CommonSQLDataStore(
             txnFactory, notifierFactory,
             FilePath(config.AttachmentsRoot), attachments_uri,

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/ampnotifications.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/ampnotifications.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/ampnotifications.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/anonymize.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/anonymize.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/anonymize.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup_pg.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup_pg.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/backup_pg.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/bootstrapdatabase.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/bootstrapdatabase.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/bootstrapdatabase.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_calverify -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -34,7 +34,7 @@
 organizer event resource is the only one we store (with attendee views
 derived from that), in a situation where we have server-to-server scheduling
 it is possible for mismatches to creep in. In that case having a way to analyze
-multiple DBs for inconsistency would be good too. 
+multiple DBs for inconsistency would be good too.
 
 """
 
@@ -54,7 +54,7 @@
 from twisted.python.usage import Options
 from twistedcaldav import caldavxml
 from twistedcaldav.dateops import pyCalendarTodatetime
-from twistedcaldav.ical import Component, ignoredComponents,\
+from twistedcaldav.ical import Component, ignoredComponents, \
     InvalidICalendarDataError, Property
 from twistedcaldav.scheduling.itip import iTipGenerator
 from twistedcaldav.stdconfig import DEFAULT_CONFIG_FILE
@@ -85,10 +85,10 @@
 
         # If the master has no recurrence properties treat any other components as invalid
         if master.isRecurring():
-            
+
             # Remove all EXDATEs with a matching RECURRENCE-ID. Do this before we start
             # processing of valid instances just in case the matching R-ID is also not valid and
-            # thus will need RDATE added. 
+            # thus will need RDATE added.
             exdates = {}
             for property in list(master.properties("EXDATE")):
                 for exdate in property.value():
@@ -108,7 +108,7 @@
                         fixed.append("Removed EXDATE for valid override: %s" % (rid,))
                     else:
                         unfixed.append("EXDATE for valid override: %s" % (rid,))
-            
+
             # Get the set of all valid recurrence IDs
             valid_rids = self.validInstances(all_rids, ignoreInvalidInstances=True)
 
@@ -118,7 +118,6 @@
                 rdates.extend([_rdate.getValue() for _rdate in property.value()])
             valid_rids.update(set(rdates))
 
-
             # Remove EXDATEs predating master
             dtstart = master.propertyValue("DTSTART")
             if dtstart is not None:
@@ -144,7 +143,6 @@
                             property.setValue(newValues)
                             master.addProperty(property)
 
-
         else:
             valid_rids = set()
 
@@ -156,7 +154,7 @@
             brokenComponent = self.overriddenComponent(invalid_rid)
             brokenRID = brokenComponent.propertyValue("RECURRENCE-ID")
             if doFix:
-                master.addProperty(Property("RDATE", [brokenRID,]))
+                master.addProperty(Property("RDATE", [brokenRID, ]))
                 fixed.append("Added RDATE for invalid occurrence: %s" %
                     (brokenRID,))
             else:
@@ -164,6 +162,8 @@
 
     return fixed, unfixed
 
+
+
 def new_hasDuplicateAlarms(self, doFix=False):
     """
     test and optionally remove alarms that have the same ACTION and TRIGGER values in the same component.
@@ -191,7 +191,7 @@
 if not hasattr(Component, "maxAlarmCounts"):
     Component.hasDuplicateAlarms = new_hasDuplicateAlarms
 
-VERSION = "7"
+VERSION = "8"
 
 def printusage(e=None):
     if e:
@@ -231,13 +231,13 @@
 
 Options for all modes:
 
---fix      : changes are only made when this is present.        
+--fix      : changes are only made when this is present.
 --config   : caldavd.plist file for the server.
 -v         : verbose logging
 
 Options for --ical:
 
---badcua   : only look for with bad CALENDARSERVER-OLD-CUA.
+--badcua   : only look for bad calendar user addresses.
 --nobase64 : do not apply base64 encoding to CALENDARSERVER-OLD-CUA.
 --uuid     : only scan specified calendar homes. Can be a partial GUID
              to scan all GUIDs with that as a prefix.
@@ -249,6 +249,11 @@
 --details  : log extended details on each mismatch.
 --tzid     : timezone to adjust details to.
 
+CHANGES
+v8: Detects ORGANIZER or ATTENDEE properties with mailto: calendar user
+    addresses for users that have valid directory records. Fix is to
+    replace the value with a urn:uuid: form.
+
 """ % (VERSION,)
 
 
@@ -256,6 +261,7 @@
     return ((multiplier * x) / y) if y else 0
 
 
+
 class CalVerifyOptions(Options):
     """
     Command-line options for 'calendarserver_verify_data'
@@ -287,9 +293,11 @@
         super(CalVerifyOptions, self).__init__()
         self.outputName = '-'
 
+
     def getUsage(self, width=None):
         return ""
 
+
     def opt_output(self, filename):
         """
         Specify output file path (default: '-', meaning stdout).
@@ -309,6 +317,7 @@
             return open(self.outputName, 'wb')
 
 
+
 class CalVerifyService(Service, object):
     """
     Service which runs, exports the appropriate records, then stops the reactor.
@@ -332,16 +341,16 @@
 
     def __init__(self, store, options, output, reactor, config):
         super(CalVerifyService, self).__init__()
-        self.store   = store
+        self.store = store
         self.options = options
-        self.output  = output
+        self.output = output
         self.reactor = reactor
         self.config = config
         self._directory = None
-        
+
         self.cuaCache = {}
         self.validForCalendaringUUIDs = {}
-        
+
         self.results = {}
         self.summary = []
         self.fixAttendeesForOrganizerMissing = 0
@@ -349,7 +358,7 @@
         self.fixOrganizersForAttendeeMissing = 0
         self.fixOrganizersForAttendeeMismatch = 0
         self.fixFailed = 0
-        self.fixedAutoAccepts = [] 
+        self.fixedAutoAccepts = []
         self.total = 0
         self.totalErrors = None
         self.totalExceptions = None
@@ -376,10 +385,10 @@
             else:
                 if self.options["missing"]:
                     yield self.doOrphans()
-                    
+
                 if self.options["mismatch"] or self.options["ical"] or self.options["badcua"]:
                     yield self.doScan(self.options["ical"] or self.options["badcua"], self.options["mismatch"], self.options["fix"])
-    
+
                 self.printSummary()
 
             self.output.close()
@@ -407,7 +416,7 @@
             homeName = pathbits[3]
             calendarName = pathbits[4]
             resourceName = pathbits[5]
-            
+
             rid = yield self.getResourceID(homeName, calendarName, resourceName)
             if rid is None:
                 yield self.txn.commit()
@@ -421,7 +430,7 @@
                 rid = int(nuke)
             except ValueError:
                 printusage("nuke argument must be a calendar object path or an SQL resource-id")
-        
+
         if self.options["fix"]:
             result = yield self.fixByRemovingEvent(rid)
             if result:
@@ -432,13 +441,13 @@
             self.output.write("Resource: %s.\n" % (rid,))
         yield self.txn.commit()
         self.txn = None
-            
-        
+
+
     @inlineCallbacks
     def doOrphans(self):
         """
         Report on home collections for which there are no directory records, or record is for user on
-        a different pod, or a user not enabled for calendaring. 
+        a different pod, or a user not enabled for calendaring.
         """
         self.output.write("\n---- Finding calendar homes with missing or disabled directory records ----\n")
         self.txn = self.store.newTransaction()
@@ -458,9 +467,9 @@
         for ctr, uid in enumerate(uids):
             if self.options["verbose"] and divmod(ctr, uids_div)[1] == 0:
                 self.output.write(("\r%d of %d (%d%%)" % (
-                    ctr+1,
+                    ctr + 1,
                     uids_len,
-                    ((ctr+1) * 100 / uids_len),
+                    ((ctr + 1) * 100 / uids_len),
                 )).ljust(80))
                 self.output.flush()
 
@@ -474,7 +483,7 @@
             elif not record.enabledForCalendaring:
                 contents = yield self.countHomeContents(uid)
                 disabled.append((uid, contents,))
-            
+
             # To avoid holding locks on all the rows scanned, commit every 100 resources
             if divmod(ctr, 100)[1] == 0:
                 yield self.txn.commit()
@@ -488,53 +497,53 @@
         # Print table of results
         table = tables.Table()
         table.addHeader(("Owner UID", "Calendar Objects"))
-        for uid, count in sorted(missing, key=lambda x:x[0]):
+        for uid, count in sorted(missing, key=lambda x: x[0]):
             table.addRow((
                 uid,
                 count,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Homes without a matching directory record (total=%d):\n" % (len(missing),))
         table.printTable(os=self.output)
         self.addToSummary("Homes without a matching directory record", len(missing), uids_len)
-        
+
         # Print table of results
         table = tables.Table()
         table.addHeader(("Owner UID", "Calendar Objects"))
-        for uid, count in sorted(wrong_server, key=lambda x:x[0]):
+        for uid, count in sorted(wrong_server, key=lambda x: x[0]):
             record = self.directoryService().recordWithGUID(uid)
             table.addRow((
                 "%s/%s (%s)" % (record.recordType if record else "-", record.shortNames[0] if record else "-", uid,),
                 count,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Homes not hosted on this server (total=%d):\n" % (len(wrong_server),))
         table.printTable(os=self.output)
         self.addToSummary("Homes not hosted on this server", len(wrong_server), uids_len)
-        
+
         # Print table of results
         table = tables.Table()
         table.addHeader(("Owner UID", "Calendar Objects"))
-        for uid, count in sorted(disabled, key=lambda x:x[0]):
+        for uid, count in sorted(disabled, key=lambda x: x[0]):
             record = self.directoryService().recordWithGUID(uid)
             table.addRow((
                 "%s/%s (%s)" % (record.recordType if record else "-", record.shortNames[0] if record else "-", uid,),
                 count,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Homes without an enabled directory record (total=%d):\n" % (len(disabled),))
         table.printTable(os=self.output)
         self.addToSummary("Homes without an enabled directory record", len(disabled), uids_len)
-        
 
+
     @inlineCallbacks
     def getAllHomeUIDs(self):
         ch = schema.CALENDAR_HOME
         rows = (yield Select(
-            [ch.OWNER_UID,],
+            [ch.OWNER_UID, ],
             From=ch,
         ).on(self.txn))
         returnValue(tuple([uid[0] for uid in rows]))
@@ -545,9 +554,9 @@
         ch = schema.CALENDAR_HOME
         cb = schema.CALENDAR_BIND
         co = schema.CALENDAR_OBJECT
-        kwds = { "UID" : uid }
+        kwds = {"UID" : uid}
         rows = (yield Select(
-            [Count(co.RESOURCE_ID),],
+            [Count(co.RESOURCE_ID), ],
             From=ch.join(
                 cb, type="inner", on=(ch.RESOURCE_ID == cb.CALENDAR_HOME_RESOURCE_ID).And(
                     cb.BIND_MODE == _BIND_MODE_OWN)).join(
@@ -559,7 +568,7 @@
 
     @inlineCallbacks
     def doScan(self, ical, mismatch, fix, start=None):
-        
+
         self.output.write("\n---- Scanning calendar data ----\n")
 
         self.now = PyCalendarDateTime.getNowUTC()
@@ -568,7 +577,7 @@
         self.end = self.start.duplicate()
         self.end.offsetYear(1)
         self.fix = fix
-        
+
         self.tzid = PyCalendarTimezone(tzid=self.options["tzid"] if self.options["tzid"] else "America/Los_Angeles")
 
         self.txn = self.store.newTransaction()
@@ -599,12 +608,12 @@
 
         if self.options["verbose"]:
             self.output.write("%s time: %.1fs\n" % (descriptor, time.time() - t,))
-        
+
         self.total = len(rows)
         self.output.write("Number of events to process: %s\n" % (len(rows,)))
         self.results["Number of events to process"] = len(rows)
         self.addToSummary("Number of events to process", self.total)
-        
+
         # Split into organizer events and attendee events
         self.organized = []
         self.organized_byuid = {}
@@ -612,7 +621,7 @@
         self.attended_byuid = collections.defaultdict(list)
         self.matched_attendee_to_organizer = collections.defaultdict(set)
         skipped, inboxes = self.buildResourceInfo(rows)
-                
+
         self.output.write("Number of organizer events to process: %s\n" % (len(self.organized),))
         self.output.write("Number of attendee events to process: %s\n" % (len(self.attended,)))
         self.results["Number of organizer events to process"] = len(self.organized)
@@ -632,7 +641,7 @@
             self.totalErrors = 0
             yield self.verifyAllAttendeesForOrganizer()
             yield self.verifyAllOrganizersForAttendee()
-            
+
             # Need to add fix summary information
             if fix:
                 self.addSummaryBreak()
@@ -647,9 +656,9 @@
                 self.addToSummary("Fixed missing organizer events", self.fixOrganizersForAttendeeMissing)
                 self.addToSummary("Fixed mismatched organizer events", self.fixOrganizersForAttendeeMismatch)
                 self.addToSummary("Fix failures", self.fixFailed)
-                
+
                 self.printAutoAccepts()
-        
+
         yield succeed(None)
 
 
@@ -658,7 +667,7 @@
         co = schema.CALENDAR_OBJECT
         cb = schema.CALENDAR_BIND
         ch = schema.CALENDAR_HOME
-        
+
         if inbox:
             cojoin = (cb.CALENDAR_RESOURCE_ID == co.CALENDAR_RESOURCE_ID).And(
                     cb.BIND_MODE == _BIND_MODE_OWN)
@@ -768,7 +777,7 @@
         ch = schema.CALENDAR_HOME
         kwds = {"resid": resid}
         rows = (yield Select(
-            [ch.RESOURCE_ID, cb.CALENDAR_RESOURCE_ID,],
+            [ch.RESOURCE_ID, cb.CALENDAR_RESOURCE_ID, ],
             From=ch.join(
                 cb, type="inner", on=(ch.RESOURCE_ID == cb.CALENDAR_HOME_RESOURCE_ID)).join(
                 co, type="inner", on=(cb.CALENDAR_RESOURCE_ID == co.CALENDAR_RESOURCE_ID).And(
@@ -783,11 +792,11 @@
         co = schema.CALENDAR_OBJECT
         cb = schema.CALENDAR_BIND
         ch = schema.CALENDAR_HOME
-        
+
         kwds = {
-            "home":home,
-            "calendar":calendar,
-            "resource":resource,
+            "home": home,
+            "calendar": calendar,
+            "resource": resource,
         }
         rows = (yield Select(
             [co.RESOURCE_ID],
@@ -801,12 +810,12 @@
         ).on(self.txn, **kwds))
         returnValue(rows[0][0] if rows else None)
 
-    
+
     def buildResourceInfo(self, rows, onlyOrganizer=False, onlyAttendee=False):
         skipped = 0
         inboxes = 0
         for owner, resid, uid, calname, md5, organizer, created, modified in rows:
-            
+
             # Skip owners not enabled for calendaring
             if not self.testForCalendaringUUID(owner):
                 skipped += 1
@@ -821,7 +830,7 @@
             if self.options["uuid"]:
                 if not organizer.startswith("urn:uuid:") or self.options["uuid"] != organizer[9:]:
                     continue
-                
+
             # Cache organizer/attendee states
             if organizer.startswith("urn:uuid:") and owner == organizer[9:]:
                 if not onlyAttendee:
@@ -831,9 +840,10 @@
                 if not onlyOrganizer:
                     self.attended.append((owner, resid, uid, md5, organizer, created, modified,))
                     self.attended_byuid[uid].append((owner, resid, uid, md5, organizer, created, modified,))
-        
+
         return skipped, inboxes
 
+
     def testForCalendaringUUID(self, uuid):
         """
         Determine if the specified directory UUID is valid for calendaring. Keep a cache of
@@ -841,7 +851,7 @@
 
         @param uuid: the directory UUID to test
         @type uuid: C{str}
-        
+
         @return: C{True} if valid, C{False} if not
         """
 
@@ -871,9 +881,11 @@
         for owner, resid, uid, calname, _ignore_md5, _ignore_organizer, _ignore_created, _ignore_modified in rows:
             try:
                 result, message = yield self.validCalendarData(resid, calname == "inbox")
-            except Exception:
+            except Exception, e:
                 result = False
                 message = "Exception for validCalendarData"
+                if self.options["verbose"]:
+                    print e
             if not result:
                 results_bad.append((owner, uid, resid, message))
                 badlen += 1
@@ -883,14 +895,14 @@
                     self.output.write("Bad".rjust(rjust) + "Current".rjust(rjust) + "Total".rjust(rjust) + "Complete".rjust(rjust) + "\n")
                 if divmod(count, 100)[1] == 0:
                     self.output.write((
-                        "\r" + 
+                        "\r" +
                         ("%s" % badlen).rjust(rjust) +
                         ("%s" % count).rjust(rjust) +
                         ("%s" % total).rjust(rjust) +
                         ("%d%%" % safePercent(count, total)).rjust(rjust)
                     ).ljust(80))
                     self.output.flush()
-            
+
             # To avoid holding locks on all the rows scanned, commit every 100 resources
             if divmod(count, 100)[1] == 0:
                 yield self.txn.commit()
@@ -900,17 +912,17 @@
         self.txn = None
         if self.options["verbose"]:
             self.output.write((
-                "\r" + 
+                "\r" +
                 ("%s" % badlen).rjust(rjust) +
                 ("%s" % count).rjust(rjust) +
                 ("%s" % total).rjust(rjust) +
                 ("%d%%" % safePercent(count, total)).rjust(rjust)
             ).ljust(80) + "\n")
-        
+
         # Print table of results
         table = tables.Table()
         table.addHeader(("Owner", "Event UID", "RID", "Problem",))
-        for item in sorted(results_bad, key=lambda x:(x[0],x[1])):
+        for item in sorted(results_bad, key=lambda x: (x[0], x[1])):
             owner, uid, resid, message = item
             owner_record = self.directoryService().recordWithGUID(owner)
             table.addRow((
@@ -919,14 +931,14 @@
                 resid,
                 message,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Bad iCalendar data (total=%d):\n" % (len(results_bad),))
         table.printTable(os=self.output)
-        
+
         self.results["Bad iCalendar data"] = results_bad
         self.addToSummary("Bad iCalendar data", len(results_bad), total)
-         
+
         if self.options["verbose"]:
             diff_time = time.time() - t
             self.output.write("Time: %.2f s  Average: %.1f ms/resource\n" % (
@@ -980,21 +992,20 @@
 
 
     def noPrincipalPathCUAddresses(self, component, doFix):
-        
-        def lookupFunction(cuaddr, principalFunction, config):
-    
+
+        def lookupFunction(cuaddr, principalFunction, conf):
+
             # Return cached results, if any.
-            if self.cuaCache.has_key(cuaddr):
+            if cuaddr in self.cuaCache:
                 return self.cuaCache[cuaddr]
-    
-            result = normalizationLookup(cuaddr, principalFunction, config)
+
+            result = normalizationLookup(cuaddr, principalFunction, conf)
             _ignore_name, guid, _ignore_cuaddrs = result
             if guid is None:
                 if cuaddr.find("__uids__") != -1:
-                    guid = cuaddr[cuaddr.find("__uids__/")+9:][:36]
+                    guid = cuaddr[cuaddr.find("__uids__/") + 9:][:36]
                     result = "", guid, set()
-                    
-    
+
             # Cache the result
             self.cuaCache[cuaddr] = result
             return result
@@ -1005,20 +1016,26 @@
             organizer = subcomponent.getProperty("ORGANIZER")
             if organizer:
                 cuaddr = organizer.value()
-                
+
                 # http(s) principals need to be converted to urn:uuid
                 if cuaddr.startswith("http"):
                     if doFix:
                         component.normalizeCalendarUserAddresses(lookupFunction, self.directoryService().principalForCalendarUserAddress)
                     else:
                         raise InvalidICalendarDataError("iCalendar ORGANIZER starts with 'http(s)'")
+                elif cuaddr.startswith("mailto:"):
+                    if lookupFunction(cuaddr, self.directoryService().principalForCalendarUserAddress, self.config)[1] is not None:
+                        if doFix:
+                            component.normalizeCalendarUserAddresses(lookupFunction, self.directoryService().principalForCalendarUserAddress)
+                        else:
+                            raise InvalidICalendarDataError("iCalendar ORGANIZER starts with 'mailto:' and record exists")
                 else:
                     if ("@" in cuaddr) and (":" not in cuaddr) and ("/" not in cuaddr):
                         if doFix:
                             # Add back in mailto: then re-normalize to urn:uuid if possible
                             organizer.setValue("mailto:%s" % (cuaddr,))
                             component.normalizeCalendarUserAddresses(lookupFunction, self.directoryService().principalForCalendarUserAddress)
-                            
+
                             # Remove any SCHEDULE-AGENT=NONE
                             if organizer.parameterValue("SCHEDULE-AGENT", "SERVER") == "NONE":
                                 organizer.removeParameter("SCHEDULE-AGENT")
@@ -1043,6 +1060,12 @@
                         component.normalizeCalendarUserAddresses(lookupFunction, self.directoryService().principalForCalendarUserAddress)
                     else:
                         raise InvalidICalendarDataError("iCalendar ATTENDEE starts with 'http(s)'")
+                elif cuaddr.startswith("mailto:"):
+                    if lookupFunction(cuaddr, self.directoryService().principalForCalendarUserAddress, self.config)[1] is not None:
+                        if doFix:
+                            component.normalizeCalendarUserAddresses(lookupFunction, self.directoryService().principalForCalendarUserAddress)
+                        else:
+                            raise InvalidICalendarDataError("iCalendar ATTENDEE starts with 'mailto:' and record exists")
                 else:
                     if ("@" in cuaddr) and (":" not in cuaddr) and ("/" not in cuaddr):
                         if doFix:
@@ -1072,7 +1095,7 @@
         home = yield self.txn.calendarHomeWithResourceID(homeID)
         calendar = yield home.childWithID(calendarID)
         calendarObj = yield calendar.objectResourceWithID(resid)
-        
+
         try:
             component = yield calendarObj.component()
         except InternalDataStoreError:
@@ -1090,7 +1113,7 @@
         except ValueError:
             result = False
             message = "Failed fix: "
-        
+
         if result:
             # Write out fix, commit and get a new transaction
             try:
@@ -1119,10 +1142,10 @@
         home = yield self.txn.calendarHomeWithResourceID(homeID)
         calendar = yield home.childWithID(calendarID)
         calendarObj = yield calendar.objectResourceWithID(resid)
-        
+
         # Do raw data fix one line at a time
         caltxt = self.fixBadOldCuaLines(caltxt)
-        
+
         # Re-parse
         try:
             component = Component.fromString(caltxt)
@@ -1152,7 +1175,7 @@
                 endpos = line.find("urn:uuid:")
                 if endpos != -1:
                     endpos += len("urn:uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"")
-                    badparam = line[startpos+len(";CALENDARSERVER-OLD-CUA=\""):endpos]
+                    badparam = line[startpos + len(";CALENDARSERVER-OLD-CUA=\""):endpos]
                     endbadparam = badparam.find(";")
                     if endbadparam != -1:
                         badparam = badparam[:endbadparam].replace("\\", "")
@@ -1169,6 +1192,7 @@
         caltxt = "\r\n".join(lines) + "\r\n"
         return caltxt
 
+
     @inlineCallbacks
     def verifyAllAttendeesForOrganizer(self):
         """
@@ -1176,7 +1200,7 @@
         We will look for events that an organizer has and are missing for the attendee, and events that an organizer's
         view of attendee status does not match the attendee's view of their own status.
         """
-        
+
         self.output.write("\n---- Verifying Organizer events against Attendee copies ----\n")
         self.txn = self.store.newTransaction()
 
@@ -1189,12 +1213,12 @@
         # Test organized events
         t = time.time()
         for ctr, organizerEvent in enumerate(self.organized):
-            
+
             if self.options["verbose"] and divmod(ctr, organizer_div)[1] == 0:
                 self.output.write(("\r%d of %d (%d%%) Missing: %d  Mismatched: %s" % (
-                    ctr+1,
+                    ctr + 1,
                     organized_len,
-                    ((ctr+1) * 100 / organized_len),
+                    ((ctr + 1) * 100 / organized_len),
                     len(results_missing),
                     len(results_mismatch),
                 )).ljust(80))
@@ -1206,7 +1230,7 @@
                 self.txn = self.store.newTransaction()
                 t = time.time()
 
-            # Get the organizer's view of attendee states            
+            # Get the organizer's view of attendee states
             organizer, resid, uid, _ignore_md5, _ignore_organizer, org_created, org_modified = organizerEvent
             calendar = yield self.getCalendar(resid)
             if calendar is None:
@@ -1221,7 +1245,7 @@
                 pass
             if len(organizerViewOfAttendees) == 0:
                 continue
-            
+
             # Get attendee states for matching UID
             eachAttendeesOwnStatus = {}
             attendeeCreatedModified = {}
@@ -1233,13 +1257,13 @@
                     continue
                 eachAttendeesOwnStatus[owner] = self.buildAttendeeStates(calendar, self.start, self.end, attendee_only=owner)
                 attendeeResIDs[(owner, attuid)] = attresid
-            
+
             # Look at each attendee in the organizer's meeting
             for organizerAttendee, organizerViewOfStatus in organizerViewOfAttendees.iteritems():
                 broken = False
 
                 self.matched_attendee_to_organizer[uid].add(organizerAttendee)
-                
+
                 # Skip attendees not enabled for calendaring
                 if not self.testForCalendaringUUID(organizerAttendee):
                     continue
@@ -1253,7 +1277,7 @@
                         attendeeResIDs[(organizerAttendee, uid)] = attresid
                         attendeeCreatedModified[organizerAttendee] = (att_created, att_modified,)
                         #print "Reloaded missing attendee data"
-                     
+
                 # If an entry for the attendee exists, then check whether attendee status matches
                 if organizerAttendee in eachAttendeesOwnStatus:
                     attendeeOwnStatus = eachAttendeesOwnStatus[organizerAttendee].get(organizerAttendee, set())
@@ -1295,7 +1319,7 @@
                             self.results.setdefault("Missing Attendee", set()).add((uid, organizer, organizerAttendee,))
                             broken = True
                             break
-                
+
                 # If there was a problem we can fix it
                 if broken and self.fix:
                     yield self.fixByReinvitingAttendee(resid, attendeeResIDs.get((organizerAttendee, uid)), organizerAttendee)
@@ -1321,7 +1345,7 @@
                 created,
                 "" if modified == created else modified,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Events missing from Attendee's calendars (total=%d):\n" % (len(results_missing),))
         table.printTable(os=self.output)
@@ -1347,7 +1371,7 @@
                 att_created,
                 "" if att_modified == att_created else att_modified,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Events mismatched between Organizer's and Attendee's calendars (total=%d):\n" % (len(results_mismatch),))
         table.printTable(os=self.output)
@@ -1372,12 +1396,12 @@
 
         t = time.time()
         for ctr, attendeeEvent in enumerate(tuple(self.attended)): # self.attended might mutate during the loop
-            
+
             if self.options["verbose"] and divmod(ctr, attended_div)[1] == 0:
                 self.output.write(("\r%d of %d (%d%%) Missing: %d  Mismatched: %s" % (
-                    ctr+1,
+                    ctr + 1,
                     attended_len,
-                    ((ctr+1) * 100 / attended_len),
+                    ((ctr + 1) * 100 / attended_len),
                     len(missing),
                     len(mismatched),
                 )).ljust(80))
@@ -1397,7 +1421,7 @@
             if attendee not in eachAttendeesOwnStatus:
                 continue
 
-            # Only care about data for hosted organizers                
+            # Only care about data for hosted organizers
             if not organizer.startswith("urn:uuid:"):
                 continue
             organizer = organizer[9:]
@@ -1411,19 +1435,19 @@
                 # Try to reload the organizer info data
                 rows = yield self.getAllResourceInfoWithUID(uid)
                 self.buildResourceInfo(rows, onlyOrganizer=True)
-                
+
                 #if uid in self.organized_byuid:
                 #    print "Reloaded missing organizer data: %s" % (uid,)
-                 
+
             if uid not in self.organized_byuid:
 
                 # Check whether attendee has all instances cancelled
                 if self.allCancelled(eachAttendeesOwnStatus):
                     continue
-                
+
                 missing.append((uid, attendee, organizer, resid, att_created, att_modified,))
                 self.results.setdefault("Missing Organizer", set()).add((uid, attendee, organizer,))
-                
+
                 # If there is a miss we fix by removing the attendee data
                 if self.fix:
                     # This is where we attempt a fix
@@ -1431,7 +1455,7 @@
                     if fix_result:
                         self.fixOrganizersForAttendeeMissing += 1
                     else:
-                        self.fixFailed += 1 
+                        self.fixFailed += 1
 
             elif attendee not in self.matched_attendee_to_organizer[uid]:
                 # Check whether attendee has all instances cancelled
@@ -1440,7 +1464,7 @@
 
                 mismatched.append((uid, attendee, organizer, resid, att_created, att_modified,))
                 self.results.setdefault("Mismatch Organizer", set()).add((uid, attendee, organizer,))
-                
+
                 # If there is a mismatch we fix by re-inviting the attendee
                 if self.fix:
                     yield self.fixByReinvitingAttendee(self.organized_byuid[uid][1], resid, attendee)
@@ -1470,7 +1494,7 @@
                 created,
                 "" if modified == created else modified,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Attendee events missing in Organizer's calendar (total=%d, unique=%d):\n" % (len(missing), len(unique_set),))
         table.printTable(os=self.output)
@@ -1498,7 +1522,7 @@
                 att_created,
                 "" if att_modified == att_created else att_modified,
             ))
-        
+
         self.output.write("\n")
         self.output.write("Attendee events mismatched in Organizer's calendar (total=%d):\n" % (len(mismatched),))
         table.printTable(os=self.output)
@@ -1511,23 +1535,23 @@
         """
         Fix a mismatch/missing error by having the organizer send a REQUEST for the entire event to the attendee
         to trigger implicit scheduling to resync the attendee event.
-        
+
         We do not have implicit apis in the store, but really want to use store-only apis here to avoid having to create
         "fake" HTTP requests and manipulate HTTP resources. So what we will do is emulate implicit behavior by copying the
         organizer resource to the attendee (filtering it for the attendee's view of the event) and deposit an inbox item
         for the same event. Right now that will wipe out any per-attendee data - notably alarms.
         """
-        
+
         try:
             cuaddr = "urn:uuid:%s" % attendee
-    
+
             # Get the organizer's calendar data
             calendar = (yield self.getCalendar(orgresid))
             calendar = Component(None, pycalendar=calendar)
-            
+
             # Generate an iTip message for the entire event filtered for the attendee's view
             itipmsg = iTipGenerator.generateAttendeeRequest(calendar, (cuaddr,), None)
-            
+
             # Handle the case where the attendee is not actually in the organizer event at all by
             # removing the attendee event instead of re-inviting
             if itipmsg.resourceUID() is None:
@@ -1537,10 +1561,10 @@
             # Convert iTip message into actual calendar data - just remove METHOD
             attendee_calendar = itipmsg.duplicate()
             attendee_calendar.removeProperty(attendee_calendar.getProperty("METHOD"))
-            
+
             # Adjust TRANSP to match PARTSTAT
             self.setTransparencyForAttendee(attendee_calendar, cuaddr)
-    
+
             # Get attendee home store object
             home = (yield self.txn.calendarHomeWithUID(attendee))
             if home is None:
@@ -1548,7 +1572,7 @@
             inbox = (yield home.calendarWithName("inbox"))
             if inbox is None:
                 raise ValueError("Cannot find inbox")
-    
+
             details = {}
             # Replace existing resource data, or create a new one
             if attresid:
@@ -1559,7 +1583,7 @@
                 calendarObj.scheduleTag = str(uuid.uuid4())
                 yield calendarObj.setComponent(attendee_calendar)
                 self.results.setdefault("Fix change event", set()).add((home.name(), calendar.name(), attendee_calendar.resourceUID(),))
-                
+
                 details["path"] = "/calendars/__uids__/%s/%s/%s" % (home.name(), calendar.name(), calendarObj.name(),)
                 details["rid"] = attresid
             else:
@@ -1582,14 +1606,14 @@
                     break
             details["start"] = instance.start.adjustTimezone(self.tzid)
             details["title"] = instance.component.propertyValue("SUMMARY")
-            
+
             # Write new itip message to attendee inbox
             yield inbox.createCalendarObjectWithName(str(uuid.uuid4()) + ".ics", itipmsg, self.metadata_inbox)
             self.results.setdefault("Fix add inbox", set()).add((home.name(), itipmsg.resourceUID(),))
-     
+
             yield self.txn.commit()
             self.txn = self.store.newTransaction()
-    
+
             # Need to know whether the attendee is a location or resource with auto-accept set
             record = self.directoryService().recordWithGUID(attendee)
             if record.autoSchedule:
@@ -1601,11 +1625,11 @@
         except Exception, e:
             print "Failed to fix resource: %d for attendee: %s\n%s" % (orgresid, attendee, e,)
             returnValue(False)
-        
 
+
     @inlineCallbacks
     def defaultCalendarForAttendee(self, home, inbox):
-        
+
         # Check for property
         default = inbox.properties().get(PropertyName.fromElement(caldavxml.ScheduleDefaultCalendarURL))
         if default:
@@ -1638,15 +1662,15 @@
             yield calendar._removeObjectResource(calendarObj)
             yield self.txn.commit()
             self.txn = self.store.newTransaction()
-            
+
             self.results.setdefault("Fix remove", set()).add((home.name(), calendar.name(), objname,))
 
             returnValue(True)
         except Exception, e:
             print "Failed to remove resource whilst fixing: %d\n%s" % (resid, e,)
             returnValue(False)
-        
 
+
     def addToSummary(self, title, count, total=None):
         if total is not None:
             percent = safePercent(count, total),
@@ -1665,7 +1689,7 @@
         table.addHeader(("Item", "Count", "%"))
         table.setDefaultColumnFormats(
             (
-                tables.Table.ColumnFormat("%s", tables.Table.ColumnFormat.LEFT_JUSTIFY), 
+                tables.Table.ColumnFormat("%s", tables.Table.ColumnFormat.LEFT_JUSTIFY),
                 tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
                 tables.Table.ColumnFormat("%.1f%%", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
             )
@@ -1676,7 +1700,7 @@
         if self.totalErrors is not None:
             table.addRow(None)
             table.addRow(("Total Errors", self.totalErrors, safePercent(self.totalErrors, self.total),))
-        
+
         self.output.write("\n")
         self.output.write("Overall Summary:\n")
         table.printTable(os=self.output)
@@ -1686,7 +1710,7 @@
         # Print summary of results
         table = tables.Table()
         table.addHeader(("Path", "RID", "UID", "Start Time", "Title"))
-        for item in sorted(self.fixedAutoAccepts, key=lambda x:x["path"]):
+        for item in sorted(self.fixedAutoAccepts, key=lambda x: x["path"]):
             table.addRow((
                 item["path"],
                 item["rid"],
@@ -1694,7 +1718,7 @@
                 item["start"],
                 item["title"],
             ))
-        
+
         self.output.write("\n")
         self.output.write("Auto-Accept Fixes:\n")
         table.printTable(os=self.output)
@@ -1703,7 +1727,7 @@
     @inlineCallbacks
     def getCalendar(self, resid, doFix=False):
         co = schema.CALENDAR_OBJECT
-        kwds = { "ResourceID" : resid }
+        kwds = {"ResourceID" : resid}
         rows = (yield Select(
             [co.ICALENDAR_TEXT],
             From=co,
@@ -1728,7 +1752,7 @@
                     else:
                         self.parseError = "Bad CALENDARSERVER-OLD-CUA"
                         returnValue(None)
-            
+
             self.parseError = "Failed to parse"
             returnValue(None)
 
@@ -1741,10 +1765,10 @@
         co = schema.CALENDAR_OBJECT
         cb = schema.CALENDAR_BIND
         ch = schema.CALENDAR_HOME
-        
-        kwds = { "OWNER" : owner, "UID": uid }
+
+        kwds = {"OWNER": owner, "UID": uid}
         rows = (yield Select(
-            [co.ICALENDAR_TEXT, co.RESOURCE_ID, co.CREATED, co.MODIFIED,],
+            [co.ICALENDAR_TEXT, co.RESOURCE_ID, co.CREATED, co.MODIFIED, ],
             From=ch.join(
                 cb, type="inner", on=(ch.RESOURCE_ID == cb.CALENDAR_HOME_RESOURCE_ID)).join(
                 co, type="inner", on=(cb.CALENDAR_RESOURCE_ID == co.CALENDAR_RESOURCE_ID).And(
@@ -1770,9 +1794,10 @@
         for component in calendar.getComponents(definitions.cICalComponent_VEVENT):
             if not component.hasProperty("RECURRENCE-ID"):
                 return component
-        
+
         return None
 
+
     def buildAttendeeStates(self, calendar, start, end, attendee_only=None):
         # Expand events into instances in the start/end range
         results = []
@@ -1783,28 +1808,28 @@
             ),
             results
         )
-    
+
         # Need to do iCal fake master fixup
         overrides = len(calendar.getComponents(definitions.cICalComponent_VEVENT)) > 1
-    
+
         # Create map of each attendee's instances with the instance id (start time) and attendee part-stat
         attendees = {}
         for item in results:
-            
+
             # Fake master fixup
             if overrides:
                 if not item.getOwner().isRecurrenceInstance():
                     if item.getOwner().getRecurrenceSet() is None or not item.getOwner().getRecurrenceSet().hasRecurrence():
                         continue
-    
+
             # Get Status - ignore cancelled events
             status = item.getOwner().loadValueString(definitions.cICalProperty_STATUS)
             cancelled = status == definitions.cICalProperty_STATUS_CANCELLED
-    
+
             # Get instance start
             item.getInstanceStart().adjustToUTC()
             instance_id = item.getInstanceStart().getText()
-            
+
             props = item.getOwner().getProperties().get(definitions.cICalProperty_ATTENDEE, [])
             for prop in props:
                 caladdr = prop.getCalAddressValue().getValue()
@@ -1821,12 +1846,12 @@
                         partstat = definitions.cICalAttribute_PARTSTAT_NEEDSACTION
                     else:
                         partstat = prop.getAttributeValue(definitions.cICalAttribute_PARTSTAT)
-    
+
                 attendees.setdefault(caladdr, set()).add((instance_id, partstat))
-                    
+
         return attendees
-    
-    
+
+
     def allCancelled(self, attendeesStatus):
         # Check whether attendees have all instances cancelled
         all_cancelled = True
@@ -1838,8 +1863,8 @@
             if not all_cancelled:
                 break
         return all_cancelled
-       
 
+
     def setTransparencyForAttendee(self, calendar, attendee):
         """
         Set the TRANSP property based on the PARTSTAT value on matching ATTENDEE properties
@@ -1855,6 +1880,7 @@
                 addTransp = partstat in ("NEEDS-ACTION", "DECLINED",)
             component.replaceProperty(Property("TRANSP", "TRANSPARENT" if addTransp else "OPAQUE"))
 
+
     def directoryService(self):
         """
         Get an appropriate directory service for this L{CalVerifyService}'s
@@ -1895,6 +1921,7 @@
         stderr.write("Unable to open output file for writing: %s\n" % (e))
         sys.exit(1)
 
+
     def makeService(store):
         from twistedcaldav.config import config
         config.TransactionTimeoutSeconds = 0

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify_diff.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify_diff.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/calverify_diff.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_calverify -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/changeip_calendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/changeip_calendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/changeip_calendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 #
 # changeip script for calendar server
 #
-# Copyright (c) 2005-2012 Apple Inc.  All Rights Reserved.
+# Copyright (c) 2005-2013 Apple Inc.  All Rights Reserved.
 #
 # IMPORTANT NOTE:  This file is licensed only for use on Apple-labeled
 # computers and is subject to the terms and conditions of the Apple

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/cmdline.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/cmdline.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/cmdline.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/config.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/config.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/config.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/dbinspect.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/dbinspect.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/dbinspect.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_calverify -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/doublequotefix.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/doublequotefix.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/doublequotefix.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/export.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/export.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/export.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_export -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/fixcalendardata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/fixcalendardata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/fixcalendardata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/gateway.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/gateway.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/gateway.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -31,7 +31,7 @@
     principalForPrincipalID, proxySubprincipal, addProxy, removeProxy,
     getProxies, setProxies, ProxyError, ProxyWarning, updateRecord
 )
-from calendarserver.tools.purge import WorkerService, purgeOldEvents, DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS
+from calendarserver.tools.purge import WorkerService, PurgeOldEventsService, DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS
 from calendarserver.tools.cmdline import utilityMain
 
 from twext.python.log import StandardIOObserver
@@ -57,6 +57,7 @@
         sys.exit(0)
 
 
+
 class RunnerService(WorkerService):
     """
     A wrapper around Runner which uses utilityMain to get the store
@@ -73,13 +74,14 @@
         directory = rootResource.getDirectory()
         runner = Runner(rootResource, directory, self._store, self.commands)
         if runner.validate():
-            yield runner.run( )
+            yield runner.run()
 
 
+
 def main():
 
     try:
-        (optargs, args) = getopt(
+        (optargs, _ignore_args) = getopt(
             sys.argv[1:], "hef:", [
                 "help",
                 "error",
@@ -108,7 +110,6 @@
         else:
             raise NotImplementedError(opt)
 
-
     #
     # Read commands from stdin
     #
@@ -158,10 +159,11 @@
         self.store = store
         self.commands = commands
 
+
     def validate(self):
         # Make sure commands are valid
         for command in self.commands:
-            if not command.has_key('command'):
+            if 'command' not in command:
                 respondWithError("'command' missing from plist")
                 return False
             commandName = command['command']
@@ -171,6 +173,7 @@
                 return False
         return True
 
+
     @inlineCallbacks
     def run(self):
         try:
@@ -188,14 +191,16 @@
 
     # Locations
 
+
     def command_getLocationList(self, command):
         respondWithRecordsOfType(self.dir, command, "locations")
 
+
     @inlineCallbacks
     def command_createLocation(self, command):
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
 
         try:
@@ -211,6 +216,7 @@
 
         respondWithRecordsOfType(self.dir, command, "locations")
 
+
     @inlineCallbacks
     def command_getLocationAttributes(self, command):
         guid = command['GeneratedUID']
@@ -243,7 +249,7 @@
 
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
         try:
             record = (yield updateRecord(False, self.dir, "locations", **kwargs))
@@ -258,10 +264,11 @@
 
         yield self.command_getLocationAttributes(command)
 
+
     def command_deleteLocation(self, command):
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
         try:
             self.dir.destroyRecord("locations", **kwargs)
@@ -272,14 +279,16 @@
 
     # Resources
 
+
     def command_getResourceList(self, command):
         respondWithRecordsOfType(self.dir, command, "resources")
 
+
     @inlineCallbacks
     def command_createResource(self, command):
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
 
         try:
@@ -295,6 +304,7 @@
 
         respondWithRecordsOfType(self.dir, command, "resources")
 
+
     @inlineCallbacks
     def command_setResourceAttributes(self, command):
 
@@ -307,7 +317,7 @@
 
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
         try:
             record = (yield updateRecord(False, self.dir, "resources", **kwargs))
@@ -322,10 +332,11 @@
 
         yield self.command_getResourceAttributes(command)
 
+
     def command_deleteResource(self, command):
         kwargs = {}
         for key, info in attrMap.iteritems():
-            if command.has_key(key):
+            if key in command:
                 kwargs[info['attr']] = command[key]
         try:
             self.dir.destroyRecord("resources", **kwargs)
@@ -336,6 +347,7 @@
 
     # Proxies
 
+
     @inlineCallbacks
     def command_listWriteProxies(self, command):
         principal = principalForPrincipalID(command['Principal'], directory=self.dir)
@@ -344,6 +356,7 @@
             return
         (yield respondWithProxies(self.dir, command, principal, "write"))
 
+
     @inlineCallbacks
     def command_addWriteProxy(self, command):
         principal = principalForPrincipalID(command['Principal'],
@@ -365,6 +378,7 @@
             pass
         (yield respondWithProxies(self.dir, command, principal, "write"))
 
+
     @inlineCallbacks
     def command_removeWriteProxy(self, command):
         principal = principalForPrincipalID(command['Principal'], directory=self.dir)
@@ -384,6 +398,7 @@
             pass
         (yield respondWithProxies(self.dir, command, principal, "write"))
 
+
     @inlineCallbacks
     def command_listReadProxies(self, command):
         principal = principalForPrincipalID(command['Principal'], directory=self.dir)
@@ -392,6 +407,7 @@
             return
         (yield respondWithProxies(self.dir, command, principal, "read"))
 
+
     @inlineCallbacks
     def command_addReadProxy(self, command):
         principal = principalForPrincipalID(command['Principal'], directory=self.dir)
@@ -411,6 +427,7 @@
             pass
         (yield respondWithProxies(self.dir, command, principal, "read"))
 
+
     @inlineCallbacks
     def command_removeReadProxy(self, command):
         principal = principalForPrincipalID(command['Principal'], directory=self.dir)
@@ -444,10 +461,11 @@
         cutoff = PyCalendarDateTime.getToday()
         cutoff.setDateOnly(False)
         cutoff.offsetDay(-retainDays)
-        eventCount = (yield purgeOldEvents(self.store, self.dir, self.root, cutoff, DEFAULT_BATCH_SIZE))
+        eventCount = (yield PurgeOldEventsService.purgeOldEvents(self.store, cutoff, DEFAULT_BATCH_SIZE))
         respond(command, {'EventsRemoved' : eventCount, "RetainDays" : retainDays})
 
 
+
 @inlineCallbacks
 def respondWithProxies(directory, command, principal, proxyType):
     proxies = []
@@ -464,6 +482,7 @@
     })
 
 
+
 def recordToDict(record):
     recordDict = {}
     for key, info in attrMap.iteritems():
@@ -479,6 +498,8 @@
             pass
     return recordDict
 
+
+
 def respondWithRecordsOfType(directory, command, recordType):
     result = []
     for record in directory.listRecords(recordType):
@@ -486,11 +507,15 @@
         result.append(recordDict)
     respond(command, result)
 
+
+
 def respond(command, result):
-    sys.stdout.write(writePlistToString( { 'command' : command['command'], 'result' : result } ) )
+    sys.stdout.write(writePlistToString({'command' : command['command'], 'result' : result}))
 
+
+
 def respondWithError(msg, status=1):
-    sys.stdout.write(writePlistToString( { 'error' : msg, } ) )
+    sys.stdout.write(writePlistToString({'error' : msg, }))
     """
     try:
         reactor.stop()

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/icalsplit.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/icalsplit.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/icalsplit.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/loadaugmentdb.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/loadaugmentdb.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/loadaugmentdb.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managepostgres.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managepostgres.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managepostgres.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managetimezones.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managetimezones.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/managetimezones.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -76,7 +76,7 @@
         t.extractall(zonedir)
     print "Converting data at: %s" % (zonedir,)
     startYear = 1800
-    endYear = 2018
+    endYear = PyCalendarDateTime.getToday().getYear() + 10
     PyCalendar.sProdID = "-//calendarserver.org//Zonal//EN"
     zonefiles = "northamerica", "southamerica", "europe", "africa", "asia", "australasia", "antarctica", "etcetera", "backward"
     parser = tzconvert()

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate_verify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate_verify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/migrate_verify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_calverify -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/notifications.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/notifications.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/notifications.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/obliterate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/obliterate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/obliterate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_calverify -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/principals.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/principals.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/principals.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/purge.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/purge.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/purge.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_purge -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -16,21 +16,24 @@
 # limitations under the License.
 ##
 
-import os
-import sys
+from calendarserver.tap.util import FakeRequest
+from calendarserver.tap.util import getRootResource
+from calendarserver.tools import tables
+from calendarserver.tools.cmdline import utilityMain
+from calendarserver.tools.principals import removeProxy
+
 from errno import ENOENT, EACCES
 from getopt import getopt, GetoptError
 
 from pycalendar.datetime import PyCalendarDateTime
 
+from twext.python.log import Logger
+from twext.web2.responsecode import NO_CONTENT
+
 from twisted.application.service import Service
 from twisted.internet import reactor
 from twisted.internet.defer import inlineCallbacks, returnValue
 
-from twext.python.log import Logger
-from txdav.xml import element as davxml
-from twext.web2.responsecode import NO_CONTENT
-
 from twistedcaldav import caldavxml
 from twistedcaldav.caldavxml import TimeRange
 from twistedcaldav.config import config, ConfigurationError
@@ -39,90 +42,17 @@
 from twistedcaldav.method.put_common import StoreCalendarObjectResource
 from twistedcaldav.query import calendarqueryfilter
 
-from calendarserver.tap.util import FakeRequest
-from calendarserver.tap.util import getRootResource
+from txdav.xml import element as davxml
 
-from calendarserver.tools.cmdline import utilityMain
-from calendarserver.tools.principals import removeProxy
-from calendarserver.tools import tables
-
 import collections
+import os
+import sys
 
 log = Logger()
 
 DEFAULT_BATCH_SIZE = 100
 DEFAULT_RETAIN_DAYS = 365
 
-def usage_purge_events(e=None):
-
-    name = os.path.basename(sys.argv[0])
-    print "usage: %s [options]" % (name,)
-    print ""
-    print "  Remove old events from the calendar server"
-    print ""
-    print "options:"
-    print "  -h --help: print this help and exit"
-    print "  -f --config <path>: Specify caldavd.plist configuration path"
-    print "  -d --days <number>: specify how many days in the past to retain (default=%d)" % (DEFAULT_RETAIN_DAYS,)
-    #print "  -b --batch <number>: number of events to remove in each transaction (default=%d)" % (DEFAULT_BATCH_SIZE,)
-    print "  -n --dry-run: calculate how many events to purge, but do not purge data"
-    print "  -v --verbose: print progress information"
-    print ""
-
-    if e:
-        sys.stderr.write("%s\n" % (e,))
-        sys.exit(64)
-    else:
-        sys.exit(0)
-
-
-
-def usage_purge_orphaned_attachments(e=None):
-
-    name = os.path.basename(sys.argv[0])
-    print "usage: %s [options]" % (name,)
-    print ""
-    print "  Remove orphaned attachments from the calendar server"
-    print ""
-    print "options:"
-    print "  -h --help: print this help and exit"
-    print "  -f --config <path>: Specify caldavd.plist configuration path"
-    #print "  -b --batch <number>: number of attachments to remove in each transaction (default=%d)" % (DEFAULT_BATCH_SIZE,)
-    print "  -n --dry-run: calculate how many attachments to purge, but do not purge data"
-    print "  -v --verbose: print progress information"
-    print ""
-
-    if e:
-        sys.stderr.write("%s\n" % (e,))
-        sys.exit(64)
-    else:
-        sys.exit(0)
-
-
-
-def usage_purge_principal(e=None):
-
-    name = os.path.basename(sys.argv[0])
-    print "usage: %s [options]" % (name,)
-    print ""
-    print "  Remove a principal's events and contacts from the calendar server"
-    print ""
-    print "options:"
-    print "  -c --completely: By default, only future events are canceled; this option cancels all events"
-    print "  -h --help: print this help and exit"
-    print "  -f --config <path>: Specify caldavd.plist configuration path"
-    print "  -n --dry-run: calculate how many events and contacts to purge, but do not purge data"
-    print "  -v --verbose: print progress information"
-    print ""
-
-    if e:
-        sys.stderr.write("%s\n" % (e,))
-        sys.exit(64)
-    else:
-        sys.exit(0)
-
-
-
 class WorkerService(Service):
 
     def __init__(self, store):
@@ -173,767 +103,1035 @@
     dryrun = False
     verbose = False
 
-    def doWork(self):
-        rootResource = self.rootResource()
-        directory = rootResource.getDirectory()
-        return purgeOldEvents(self._store, directory, rootResource,
-            self.cutoff, self.batchSize, verbose=self.verbose,
-            dryrun=self.dryrun)
+    @classmethod
+    def usage(cls, e=None):
 
+        name = os.path.basename(sys.argv[0])
+        print "usage: %s [options]" % (name,)
+        print ""
+        print "  Remove old events from the calendar server"
+        print ""
+        print "options:"
+        print "  -h --help: print this help and exit"
+        print "  -f --config <path>: Specify caldavd.plist configuration path"
+        print "  -d --days <number>: specify how many days in the past to retain (default=%d)" % (DEFAULT_RETAIN_DAYS,)
+        #print "  -b --batch <number>: number of events to remove in each transaction (default=%d)" % (DEFAULT_BATCH_SIZE,)
+        print "  -n --dry-run: calculate how many events to purge, but do not purge data"
+        print "  -v --verbose: print progress information"
+        print ""
 
+        if e:
+            sys.stderr.write("%s\n" % (e,))
+            sys.exit(64)
+        else:
+            sys.exit(0)
 
-class PurgeOrphanedAttachmentsService(WorkerService):
 
-    batchSize = None
-    dryrun = False
-    verbose = False
+    @classmethod
+    def main(cls):
 
-    def doWork(self):
-        return purgeOrphanedAttachments(
-            self._store, self.batchSize,
-            verbose=self.verbose, dryrun=self.dryrun)
+        try:
+            (optargs, args) = getopt(
+                sys.argv[1:], "d:b:f:hnv", [
+                    "days=",
+                    "batch=",
+                    "dry-run",
+                    "config=",
+                    "help",
+                    "verbose",
+                ],
+            )
+        except GetoptError, e:
+            cls.usage(e)
 
+        #
+        # Get configuration
+        #
+        configFileName = None
+        days = DEFAULT_RETAIN_DAYS
+        batchSize = DEFAULT_BATCH_SIZE
+        dryrun = False
+        verbose = False
 
+        for opt, arg in optargs:
+            if opt in ("-h", "--help"):
+                cls.usage()
 
-class PurgePrincipalService(WorkerService):
+            elif opt in ("-d", "--days"):
+                try:
+                    days = int(arg)
+                except ValueError, e:
+                    print "Invalid value for --days: %s" % (arg,)
+                    cls.usage(e)
 
-    uids = None
-    dryrun = False
-    verbose = False
-    completely = False
+            elif opt in ("-b", "--batch"):
+                try:
+                    batchSize = int(arg)
+                except ValueError, e:
+                    print "Invalid value for --batch: %s" % (arg,)
+                    cls.usage(e)
 
-    @inlineCallbacks
-    def doWork(self):
-        rootResource = self.rootResource()
-        directory = rootResource.getDirectory()
-        total = (yield purgeUIDs(self._store, directory, rootResource, self.uids,
-            verbose=self.verbose, dryrun=self.dryrun,
-            completely=self.completely, doimplicit=self.doimplicit))
-        if self.verbose:
-            amount = "%d event%s" % (total, "s" if total > 1 else "")
-            if self.dryrun:
-                print "Would have modified or deleted %s" % (amount,)
-            else:
-                print "Modified or deleted %s" % (amount,)
+            elif opt in ("-v", "--verbose"):
+                verbose = True
 
+            elif opt in ("-n", "--dry-run"):
+                dryrun = True
 
+            elif opt in ("-f", "--config"):
+                configFileName = arg
 
-def main_purge_events():
+            else:
+                raise NotImplementedError(opt)
 
-    try:
-        (optargs, args) = getopt(
-            sys.argv[1:], "d:b:f:hnv", [
-                "days=",
-                "batch=",
-                "dry-run",
-                "config=",
-                "help",
-                "verbose",
-            ],
-        )
-    except GetoptError, e:
-        usage_purge_events(e)
+        if args:
+            cls.usage("Too many arguments: %s" % (args,))
 
-    #
-    # Get configuration
-    #
-    configFileName = None
-    days = DEFAULT_RETAIN_DAYS
-    batchSize = DEFAULT_BATCH_SIZE
-    dryrun = False
-    verbose = False
+        if dryrun:
+            verbose = True
 
-    for opt, arg in optargs:
-        if opt in ("-h", "--help"):
-            usage_purge_events()
+        cutoff = PyCalendarDateTime.getToday()
+        cutoff.setDateOnly(False)
+        cutoff.offsetDay(-days)
+        cls.cutoff = cutoff
+        cls.batchSize = batchSize
+        cls.dryrun = dryrun
+        cls.verbose = verbose
 
-        elif opt in ("-d", "--days"):
-            try:
-                days = int(arg)
-            except ValueError, e:
-                print "Invalid value for --days: %s" % (arg,)
-                usage_purge_events(e)
+        utilityMain(
+            configFileName,
+            cls,
+        )
 
-        elif opt in ("-b", "--batch"):
-            try:
-                batchSize = int(arg)
-            except ValueError, e:
-                print "Invalid value for --batch: %s" % (arg,)
-                usage_purge_events(e)
 
-        elif opt in ("-v", "--verbose"):
-            verbose = True
+    @classmethod
+    @inlineCallbacks
+    def purgeOldEvents(cls, store, cutoff, batchSize, verbose=False, dryrun=False):
 
-        elif opt in ("-n", "--dry-run"):
-            dryrun = True
+        service = cls(store)
+        service.cutoff = cutoff
+        service.batchSize = batchSize
+        service.dryrun = dryrun
+        service.verbose = verbose
+        result = (yield service.doWork())
+        returnValue(result)
 
-        elif opt in ("-f", "--config"):
-            configFileName = arg
 
-        else:
-            raise NotImplementedError(opt)
+    @inlineCallbacks
+    def doWork(self):
 
-    if args:
-        usage_purge_events("Too many arguments: %s" % (args,))
+        if self.dryrun:
+            if self.verbose:
+                print "(Dry run) Searching for old events..."
+            txn = self._store.newTransaction(label="Find old events")
+            oldEvents = (yield txn.eventsOlderThan(self.cutoff))
+            eventCount = len(oldEvents)
+            if self.verbose:
+                if eventCount == 0:
+                    print "No events are older than %s" % (self.cutoff,)
+                elif eventCount == 1:
+                    print "1 event is older than %s" % (self.cutoff,)
+                else:
+                    print "%d events are older than %s" % (eventCount, self.cutoff)
+            returnValue(eventCount)
 
-    if dryrun:
-        verbose = True
+        if self.verbose:
+            print "Removing events older than %s..." % (self.cutoff,)
 
-    cutoff = PyCalendarDateTime.getToday()
-    cutoff.setDateOnly(False)
-    cutoff.offsetDay(-days)
-    PurgeOldEventsService.cutoff = cutoff
-    PurgeOldEventsService.batchSize = batchSize
-    PurgeOldEventsService.dryrun = dryrun
-    PurgeOldEventsService.verbose = verbose
+        numEventsRemoved = -1
+        totalRemoved = 0
+        while numEventsRemoved:
+            txn = self._store.newTransaction(label="Remove old events")
+            numEventsRemoved = (yield txn.removeOldEvents(self.cutoff, batchSize=self.batchSize))
+            (yield txn.commit())
+            if numEventsRemoved:
+                totalRemoved += numEventsRemoved
+                if self.verbose:
+                    print "%d," % (totalRemoved,),
 
-    utilityMain(
-        configFileName,
-        PurgeOldEventsService,
-    )
+        if self.verbose:
+            print
+            if totalRemoved == 0:
+                print "No events were removed"
+            elif totalRemoved == 1:
+                print "1 event was removed in total"
+            else:
+                print "%d events were removed in total" % (totalRemoved,)
 
+        returnValue(totalRemoved)
 
 
-def main_purge_orphaned_attachments():
 
-    try:
-        (optargs, args) = getopt(
-            sys.argv[1:], "d:b:f:hnv", [
-                "batch=",
-                "dry-run",
-                "config=",
-                "help",
-                "verbose",
-            ],
-        )
-    except GetoptError, e:
-        usage_purge_orphaned_attachments(e)
+class PurgeAttachmentsService(WorkerService):
 
-    #
-    # Get configuration
-    #
-    configFileName = None
-    batchSize = DEFAULT_BATCH_SIZE
+    uuid = None
+    cutoff = None
+    batchSize = None
     dryrun = False
     verbose = False
 
-    for opt, arg in optargs:
-        if opt in ("-h", "--help"):
-            usage_purge_orphaned_attachments()
+    @classmethod
+    def usage(cls, e=None):
 
-        elif opt in ("-b", "--batch"):
-            try:
-                batchSize = int(arg)
-            except ValueError, e:
-                print "Invalid value for --batch: %s" % (arg,)
-                usage_purge_orphaned_attachments(e)
+        name = os.path.basename(sys.argv[0])
+        print "usage: %s [options]" % (name,)
+        print ""
+        print "  Remove old or orphaned attachments from the calendar server"
+        print ""
+        print "options:"
+        print "  -h --help: print this help and exit"
+        print "  -f --config <path>: Specify caldavd.plist configuration path"
+        print "  -u --uuid <owner uid>: target a specific user UID"
+        #print "  -b --batch <number>: number of attachments to remove in each transaction (default=%d)" % (DEFAULT_BATCH_SIZE,)
+        print "  -d --days <number>: specify how many days in the past to retain (default=%d) zero means no removal of old attachments" % (DEFAULT_RETAIN_DAYS,)
+        print "  -n --dry-run: calculate how many attachments to purge, but do not purge data"
+        print "  -v --verbose: print progress information"
+        print ""
 
-        elif opt in ("-v", "--verbose"):
-            verbose = True
+        if e:
+            sys.stderr.write("%s\n" % (e,))
+            sys.exit(64)
+        else:
+            sys.exit(0)
 
-        elif opt in ("-n", "--dry-run"):
-            dryrun = True
 
-        elif opt in ("-f", "--config"):
-            configFileName = arg
+    @classmethod
+    def main(cls):
 
-        else:
-            raise NotImplementedError(opt)
+        try:
+            (optargs, args) = getopt(
+                sys.argv[1:], "d:b:f:hnu:v", [
+                    "uuid=",
+                    "days=",
+                    "batch=",
+                    "dry-run",
+                    "config=",
+                    "help",
+                    "verbose",
+                ],
+            )
+        except GetoptError, e:
+            cls.usage(e)
 
-    if args:
-        usage_purge_orphaned_attachments("Too many arguments: %s" % (args,))
+        #
+        # Get configuration
+        #
+        configFileName = None
+        uuid = None
+        days = DEFAULT_RETAIN_DAYS
+        batchSize = DEFAULT_BATCH_SIZE
+        dryrun = False
+        verbose = False
 
-    if dryrun:
-        verbose = True
+        for opt, arg in optargs:
+            if opt in ("-h", "--help"):
+                cls.usage()
 
-    PurgeOrphanedAttachmentsService.batchSize = batchSize
-    PurgeOrphanedAttachmentsService.dryrun = dryrun
-    PurgeOrphanedAttachmentsService.verbose = verbose
+            elif opt in ("-u", "--uuid"):
+                uuid = arg
 
-    utilityMain(
-        configFileName,
-        PurgeOrphanedAttachmentsService,
-    )
+            elif opt in ("-d", "--days"):
+                try:
+                    days = int(arg)
+                except ValueError, e:
+                    print "Invalid value for --days: %s" % (arg,)
+                    cls.usage(e)
 
+            elif opt in ("-b", "--batch"):
+                try:
+                    batchSize = int(arg)
+                except ValueError, e:
+                    print "Invalid value for --batch: %s" % (arg,)
+                    cls.usage(e)
 
+            elif opt in ("-v", "--verbose"):
+                verbose = True
 
-def main_purge_principals():
+            elif opt in ("-n", "--dry-run"):
+                dryrun = True
 
-    try:
-        (optargs, args) = getopt(
-            sys.argv[1:], "cf:hnv", [
-                "completely",
-                "dry-run",
-                "config=",
-                "help",
-                "verbose",
-                "noimplicit",
-            ],
-        )
-    except GetoptError, e:
-        usage_purge_principal(e)
+            elif opt in ("-f", "--config"):
+                configFileName = arg
 
-    #
-    # Get configuration
-    #
-    configFileName = None
-    dryrun = False
-    verbose = False
-    completely = False
-    doimplicit = True
+            else:
+                raise NotImplementedError(opt)
 
-    for opt, arg in optargs:
-        if opt in ("-h", "--help"):
-            usage_purge_principal()
+        if args:
+            cls.usage("Too many arguments: %s" % (args,))
 
-        elif opt in ("-c", "--completely"):
-            completely = True
-
-        elif opt in ("-v", "--verbose"):
+        if dryrun:
             verbose = True
 
-        elif opt in ("-n", "--dry-run"):
-            dryrun = True
+        cls.uuid = uuid
+        if days > 0:
+            cutoff = PyCalendarDateTime.getToday()
+            cutoff.setDateOnly(False)
+            cutoff.offsetDay(-days)
+            cls.cutoff = cutoff
+        else:
+            cls.cutoff = None
+        cls.batchSize = batchSize
+        cls.dryrun = dryrun
+        cls.verbose = verbose
 
-        elif opt in ("-f", "--config"):
-            configFileName = arg
+        utilityMain(
+            configFileName,
+            cls,
+        )
 
-        elif opt in ("--noimplicit"):
-            doimplicit = False
 
+    @classmethod
+    @inlineCallbacks
+    def purgeAttachments(cls, store, uuid, days, limit, dryrun, verbose):
+
+        service = cls(store)
+        service.uuid = uuid
+        if days > 0:
+            cutoff = PyCalendarDateTime.getToday()
+            cutoff.setDateOnly(False)
+            cutoff.offsetDay(-days)
+            service.cutoff = cutoff
         else:
-            raise NotImplementedError(opt)
+            service.cutoff = None
+        service.batchSize = limit
+        service.dryrun = dryrun
+        service.verbose = verbose
+        result = (yield service.doWork())
+        returnValue(result)
 
-    # args is a list of uids
-    PurgePrincipalService.uids = args
-    PurgePrincipalService.completely = completely
-    PurgePrincipalService.dryrun = dryrun
-    PurgePrincipalService.verbose = verbose
-    PurgePrincipalService.doimplicit = doimplicit
 
-    utilityMain(
-        configFileName,
-        PurgePrincipalService
-    )
+    @inlineCallbacks
+    def doWork(self):
 
+        if self.dryrun:
+            orphans = (yield self._orphansDryRun())
+            if self.cutoff is not None:
+                dropbox = (yield self._dropboxDryRun())
+                managed = (yield self._managedDryRun())
+            else:
+                dropbox = ()
+                managed = ()
 
+            returnValue(self._dryRunSummary(orphans, dropbox, managed))
+        else:
+            total = (yield self._orphansPurge())
+            if self.cutoff is not None:
+                total += (yield self._dropboxPurge())
+                total += (yield self._managedPurge())
+            returnValue(total)
 
- at inlineCallbacks
-def purgeOldEvents(store, directory, root, date, batchSize, verbose=False,
-    dryrun=False):
 
-    if dryrun:
-        if verbose:
-            print "(Dry run) Searching for old events..."
-        txn = store.newTransaction(label="Find old events")
-        oldEvents = (yield txn.eventsOlderThan(date))
-        eventCount = len(oldEvents)
-        if verbose:
-            if eventCount == 0:
-                print "No events are older than %s" % (date,)
-            elif eventCount == 1:
-                print "1 event is older than %s" % (date,)
-            else:
-                print "%d events are older than %s" % (eventCount, date)
-        returnValue(eventCount)
+    @inlineCallbacks
+    def _orphansDryRun(self):
 
-    if verbose:
-        print "Removing events older than %s..." % (date,)
+        if self.verbose:
+            print "(Dry run) Searching for orphaned attachments..."
+        txn = self._store.newTransaction(label="Find orphaned attachments")
+        orphans = (yield txn.orphanedAttachments(self.uuid))
+        returnValue(orphans)
 
-    numEventsRemoved = -1
-    totalRemoved = 0
-    while numEventsRemoved:
-        txn = store.newTransaction(label="Remove old events")
-        numEventsRemoved = (yield txn.removeOldEvents(date, batchSize=batchSize))
-        (yield txn.commit())
-        if numEventsRemoved:
-            totalRemoved += numEventsRemoved
-            if verbose:
-                print "%d," % (totalRemoved,),
 
-    if verbose:
-        print
-        if totalRemoved == 0:
-            print "No events were removed"
-        elif totalRemoved == 1:
-            print "1 event was removed in total"
-        else:
-            print "%d events were removed in total" % (totalRemoved,)
+    @inlineCallbacks
+    def _dropboxDryRun(self):
 
-    returnValue(totalRemoved)
+        if self.verbose:
+            print "(Dry run) Searching for old dropbox attachments..."
+        txn = self._store.newTransaction(label="Find old dropbox attachments")
+        cutoffs = (yield txn.oldDropboxAttachments(self.cutoff, self.uuid))
+        yield txn.commit()
 
+        returnValue(cutoffs)
 
 
- at inlineCallbacks
-def purgeOrphanedAttachments(store, batchSize, verbose=False, dryrun=False):
+    @inlineCallbacks
+    def _managedDryRun(self):
 
-    if dryrun:
-        if verbose:
-            print "(Dry run) Searching for orphaned attachments..."
-        txn = store.newTransaction(label="Find orphaned attachments")
-        orphans = (yield txn.orphanedAttachments())
-        if verbose:
-            # Print aggregate details by user
-            byuser = collections.defaultdict(int)
-            for owner_uid, _ignore_dropbox_id, _ignore_path, size in orphans:
-                byuser[owner_uid] += size
+        if self.verbose:
+            print "(Dry run) Searching for old managed attachments..."
+        txn = self._store.newTransaction(label="Find old managed attachments")
+        cutoffs = (yield txn.oldManagedAttachments(self.cutoff, self.uuid))
+        yield txn.commit()
 
+        returnValue(cutoffs)
+
+
+    def _dryRunSummary(self, orphans, dropbox, managed):
+
+        if self.verbose:
+            byuser = {}
+            ByUserData = collections.namedtuple(
+                'ByUserData',
+                ['quota', 'orphanSize', 'orphanCount', 'dropboxSize', 'dropboxCount', 'managedSize', 'managedCount']
+            )
+            for user, quota, size, count in orphans:
+                byuser[user] = ByUserData(quota=quota, orphanSize=size, orphanCount=count, dropboxSize=0, dropboxCount=0, managedSize=0, managedCount=0)
+            for user, quota, size, count in dropbox:
+                if user in byuser:
+                    byuser[user] = byuser[user]._replace(dropboxSize=size, dropboxCount=count)
+                else:
+                    byuser[user] = ByUserData(quota=quota, orphanSize=0, orphanCount=0, dropboxSize=size, dropboxCount=count, managedSize=0, managedCount=0)
+            for user, quota, size, count in managed:
+                if user in byuser:
+                    byuser[user] = byuser[user]._replace(managedSize=size, managedCount=count)
+                else:
+                    byuser[user] = ByUserData(quota=quota, orphanSize=0, orphanCount=0, dropboxSize=0, dropboxCount=0, managedSize=size, managedCount=count)
+
             # Print table of results
             table = tables.Table()
-            table.addHeader(("User", "Current Quota", "Orphaned Size", "Orphaned Count"))
+            table.addHeader(("User", "Current Quota", "Orphan Size", "Orphan Count", "Dropbox Size", "Dropbox Count", "Managed Size", "Managed Count", "Total Size", "Total Count"))
             table.setDefaultColumnFormats(
                (
                     tables.Table.ColumnFormat("%s", tables.Table.ColumnFormat.LEFT_JUSTIFY),
                     tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
                     tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
                     tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+                    tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
                 )
             )
-            total = 0
-            for user, quota, size, count in sorted(orphans):
-                table.addRow((
-                    user,
-                    quota,
-                    size,
-                    count,
-                ))
-                total += count
-            table.addFooter(("Total:", "", "", total))
 
+            totals = [0] * 8
+            for user, data in sorted(byuser.items(), key=lambda x: x[0]):
+                cols = (
+                    data.orphanSize,
+                    data.orphanCount,
+                    data.dropboxSize,
+                    data.dropboxCount,
+                    data.managedSize,
+                    data.managedCount,
+                    data.orphanSize + data.dropboxSize + data.managedSize,
+                    data.orphanCount + data.dropboxCount + data.managedCount,
+                )
+                table.addRow((user, data.quota,) + cols)
+                for ctr, value in enumerate(cols):
+                    totals[ctr] += value
+            table.addFooter(("Total:", "",) + tuple(totals))
+            total = totals[7]
+
             print "\n"
-            print "Orphaned Attachments by User:\n"
+            print "Orphaned/Old Attachments by User:\n"
             table.printTable()
         else:
-            total = sum([x[3] for x in orphans])
+            total = sum([x[3] for x in orphans]) + sum([x[3] for x in dropbox]) + sum([x[3] for x in managed])
 
-        returnValue(total)
+        return total
 
-    if verbose:
-        print "Removing orphaned attachments..."
 
-    numOrphansRemoved = -1
-    totalRemoved = 0
-    while numOrphansRemoved:
-        txn = store.newTransaction(label="Remove orphaned attachments")
-        numOrphansRemoved = (yield txn.removeOrphanedAttachments(batchSize=batchSize))
-        (yield txn.commit())
-        if numOrphansRemoved:
-            totalRemoved += numOrphansRemoved
-            if verbose:
-                print "%d," % (totalRemoved,),
+    @inlineCallbacks
+    def _orphansPurge(self):
 
-    if verbose:
-        print
-        if totalRemoved == 0:
-            print "No orphaned attachments were removed"
-        elif totalRemoved == 1:
-            print "1 orphaned attachment was removed in total"
-        else:
-            print "%d orphaned attachments were removed in total" % (totalRemoved,)
+        if self.verbose:
+            print "Removing orphaned attachments...",
 
-    returnValue(totalRemoved)
+        numOrphansRemoved = -1
+        totalRemoved = 0
+        while numOrphansRemoved:
+            txn = self._store.newTransaction(label="Remove orphaned attachments")
+            numOrphansRemoved = (yield txn.removeOrphanedAttachments(self.uuid, batchSize=self.batchSize))
+            yield txn.commit()
+            if numOrphansRemoved:
+                totalRemoved += numOrphansRemoved
+                if self.verbose:
+                    print " %d," % (totalRemoved,),
+            elif self.verbose:
+                print
 
+        if self.verbose:
+            if totalRemoved == 0:
+                print "No orphaned attachments were removed"
+            elif totalRemoved == 1:
+                print "1 orphaned attachment was removed in total"
+            else:
+                print "%d orphaned attachments were removed in total" % (totalRemoved,)
+            print
 
+        returnValue(totalRemoved)
 
- at inlineCallbacks
-def purgeUIDs(store, directory, root, uids, verbose=False, dryrun=False,
-    completely=False, doimplicit=True):
-    total = 0
 
-    allAssignments = {}
+    @inlineCallbacks
+    def _dropboxPurge(self):
 
-    for uid in uids:
-        count, allAssignments[uid] = (yield purgeUID(store, uid, directory, root,
-            verbose=verbose, dryrun=dryrun, completely=completely, doimplicit=doimplicit))
-        total += count
+        if self.verbose:
+            print "Removing old dropbox attachments...",
 
-    # TODO: figure out what to do with the purged proxy assignments...
-    # ...print to stdout?
-    # ...save in a file?
+        numOldRemoved = -1
+        totalRemoved = 0
+        while numOldRemoved:
+            txn = self._store.newTransaction(label="Remove old dropbox attachments")
+            numOldRemoved = (yield txn.removeOldDropboxAttachments(self.cutoff, self.uuid, batchSize=self.batchSize))
+            yield txn.commit()
+            if numOldRemoved:
+                totalRemoved += numOldRemoved
+                if self.verbose:
+                    print " %d," % (totalRemoved,),
+            elif self.verbose:
+                print
 
-    returnValue(total)
+        if self.verbose:
+            if totalRemoved == 0:
+                print "No old dropbox attachments were removed"
+            elif totalRemoved == 1:
+                print "1 old dropbox attachment was removed in total"
+            else:
+                print "%d old dropbox attachments were removed in total" % (totalRemoved,)
+            print
 
+        returnValue(totalRemoved)
 
-CANCELEVENT_SKIPPED = 1
-CANCELEVENT_MODIFIED = 2
-CANCELEVENT_NOT_MODIFIED = 3
-CANCELEVENT_SHOULD_DELETE = 4
 
-def cancelEvent(event, when, cua):
-    """
-    Modify a VEVENT such that all future occurrences are removed
+    @inlineCallbacks
+    def _managedPurge(self):
 
-    @param event: the event to modify
-    @type event: L{twistedcaldav.ical.Component}
+        if self.verbose:
+            print "Removing old managed attachments...",
 
-    @param when: the cutoff date (anything after which is removed)
-    @type when: PyCalendarDateTime
+        numOldRemoved = -1
+        totalRemoved = 0
+        while numOldRemoved:
+            txn = self._store.newTransaction(label="Remove old managed attachments")
+            numOldRemoved = (yield txn.removeOldManagedAttachments(self.cutoff, self.uuid, batchSize=self.batchSize))
+            yield txn.commit()
+            if numOldRemoved:
+                totalRemoved += numOldRemoved
+                if self.verbose:
+                    print " %d," % (totalRemoved,),
+            elif self.verbose:
+                print
 
-    @param cua: Calendar User Address of principal being purged, to compare
-        to see if it's the organizer of the event or just an attendee
-    @type cua: string
+        if self.verbose:
+            if totalRemoved == 0:
+                print "No old managed attachments were removed"
+            elif totalRemoved == 1:
+                print "1 old managed attachment was removed in total"
+            else:
+                print "%d old managed attachments were removed in total" % (totalRemoved,)
+            print
 
-    Assumes that event does not occur entirely in the past.
+        returnValue(totalRemoved)
 
-    @return: one of the 4 constants above to indicate what action to take
-    """
 
-    whenDate = when.duplicate()
-    whenDate.setDateOnly(True)
 
-    # Only process VEVENT
-    if event.mainType() != "VEVENT":
-        return CANCELEVENT_SKIPPED
+class PurgePrincipalService(WorkerService):
 
-    main = event.masterComponent()
-    if main is None:
-        # No master component, so this is an attendee being invited to one or
-        # more occurrences
-        main = event.mainComponent(allow_multiple=True)
+    root = None
+    directory = None
+    uids = None
+    dryrun = False
+    verbose = False
+    completely = False
+    doimplicit = True
+    proxies = True
+    when = None
 
-    # Anything completely in the future is deleted
-    dtstart = main.getStartDateUTC()
-    isDateTime = not dtstart.isDateOnly()
-    if dtstart > when:
-        return CANCELEVENT_SHOULD_DELETE
+    @classmethod
+    def usage(cls, e=None):
 
-    organizer = main.getOrganizer()
+        name = os.path.basename(sys.argv[0])
+        print "usage: %s [options]" % (name,)
+        print ""
+        print "  Remove a principal's events and contacts from the calendar server"
+        print ""
+        print "options:"
+        print "  -c --completely: By default, only future events are canceled; this option cancels all events"
+        print "  -h --help: print this help and exit"
+        print "  -f --config <path>: Specify caldavd.plist configuration path"
+        print "  -n --dry-run: calculate how many events and contacts to purge, but do not purge data"
+        print "  -v --verbose: print progress information"
+        print ""
 
-    # Non-meetings are deleted
-    if organizer is None:
-        return CANCELEVENT_SHOULD_DELETE
+        if e:
+            sys.stderr.write("%s\n" % (e,))
+            sys.exit(64)
+        else:
+            sys.exit(0)
 
-    # Meetings which cua is merely an attendee are deleted (thus implicitly
-    # declined)
-    # FIXME: I think we want to decline anything after the cut-off, not delete
-    # the whole event.
-    if organizer != cua:
-        return CANCELEVENT_SHOULD_DELETE
 
-    dirty = False
+    @classmethod
+    def main(cls):
 
-    # Set the UNTIL on RRULE to cease at the cutoff
-    if main.hasProperty("RRULE"):
-        for rrule in main.properties("RRULE"):
-            rrule = rrule.value()
-            if rrule.getUseCount():
-                rrule.setUseCount(False)
+        try:
+            (optargs, args) = getopt(
+                sys.argv[1:], "cf:hnv", [
+                    "completely",
+                    "dry-run",
+                    "config=",
+                    "help",
+                    "verbose",
+                    "noimplicit",
+                ],
+            )
+        except GetoptError, e:
+            cls.usage(e)
 
-            rrule.setUseUntil(True)
-            if isDateTime:
-                rrule.setUntil(when)
+        #
+        # Get configuration
+        #
+        configFileName = None
+        dryrun = False
+        verbose = False
+        completely = False
+        doimplicit = True
+
+        for opt, arg in optargs:
+            if opt in ("-h", "--help"):
+                cls.usage()
+
+            elif opt in ("-c", "--completely"):
+                completely = True
+
+            elif opt in ("-v", "--verbose"):
+                verbose = True
+
+            elif opt in ("-n", "--dry-run"):
+                dryrun = True
+
+            elif opt in ("-f", "--config"):
+                configFileName = arg
+
+            elif opt in ("--noimplicit"):
+                doimplicit = False
+
             else:
-                rrule.setUntil(whenDate)
-            dirty = True
+                raise NotImplementedError(opt)
 
-    # Remove any EXDATEs and RDATEs beyond the cutoff
-    for dateType in ("EXDATE", "RDATE"):
-        if main.hasProperty(dateType):
-            for exdate_rdate in main.properties(dateType):
-                newValues = []
-                for value in exdate_rdate.value():
-                    if value.getValue() < when:
-                        newValues.append(value)
-                    else:
-                        exdate_rdate.value().remove(value)
-                        dirty = True
-                if not newValues:
-                    main.removeProperty(exdate_rdate)
-                    dirty = True
+        # args is a list of uids
+        cls.uids = args
+        cls.completely = completely
+        cls.dryrun = dryrun
+        cls.verbose = verbose
+        cls.doimplicit = doimplicit
 
-    # Remove any overridden components beyond the cutoff
-    for component in tuple(event.subcomponents()):
-        if component.name() == "VEVENT":
-            dtstart = component.getStartDateUTC()
-            remove = False
-            if dtstart > when:
-                remove = True
-            if remove:
-                event.removeComponent(component)
-                dirty = True
+        utilityMain(
+            configFileName,
+            cls
+        )
 
-    if dirty:
-        return CANCELEVENT_MODIFIED
-    else:
-        return CANCELEVENT_NOT_MODIFIED
 
+    @classmethod
+    @inlineCallbacks
+    def purgeUIDs(cls, store, directory, root, uids, verbose=False, dryrun=False,
+                  completely=False, doimplicit=True, proxies=True, when=None):
 
+        service = cls(store)
+        service.root = root
+        service.directory = directory
+        service.uids = uids
+        service.verbose = verbose
+        service.dryrun = dryrun
+        service.completely = completely
+        service.doimplicit = doimplicit
+        service.proxies = proxies
+        service.when = when
+        result = (yield service.doWork())
+        returnValue(result)
 
- at inlineCallbacks
-def purgeUID(store, uid, directory, root, verbose=False, dryrun=False, proxies=True,
-    when=None, completely=False, doimplicit=True):
 
-    if when is None:
-        when = PyCalendarDateTime.getNowUTC()
+    @inlineCallbacks
+    def doWork(self):
 
-    # Does the record exist?
-    record = directory.recordWithUID(uid)
-    if record is None:
-        # The user has already been removed from the directory service.  We
-        # need to fashion a temporary, fake record
+        if self.root is None:
+            self.root = self.getRootResource()
+        if self.directory is None:
+            self.directory = self.root.getDirectory()
 
-        # FIXME: probaby want a more elegant way to accomplish this,
-        # since it requires the aggregate directory to examine these first:
-        record = DirectoryRecord(directory, "users", uid, shortNames=(uid,),
-            enabledForCalendaring=True)
-        record.enabled = True
-        directory._tmpRecords["shortNames"][uid] = record
-        directory._tmpRecords["uids"][uid] = record
+        total = 0
 
-    cua = "urn:uuid:%s" % (uid,)
+        allAssignments = {}
 
-    principalCollection = directory.principalCollection
-    principal = principalCollection.principalForRecord(record)
+        for uid in self.uids:
+            count, allAssignments[uid] = (yield self._purgeUID(uid))
+            total += count
 
-    request = FakeRequest(root, None, None)
-    request.checkedSACL = True
-    request.authnUser = request.authzUser = davxml.Principal(
-        davxml.HRef.fromString("/principals/__uids__/%s/" % (uid,))
-    )
+        if self.verbose:
+            amount = "%d event%s" % (total, "s" if total > 1 else "")
+            if self.dryrun:
+                print "Would have modified or deleted %s" % (amount,)
+            else:
+                print "Modified or deleted %s" % (amount,)
 
-    # See if calendar home is provisioned
-    txn = store.newTransaction()
-    storeCalHome = (yield txn.calendarHomeWithUID(uid))
-    calHomeProvisioned = storeCalHome is not None
+        returnValue((total, allAssignments,))
 
-    # If in "completely" mode, unshare collections, remove notifications
-    if calHomeProvisioned and completely:
 
-        # Process shared and shared-to-me calendars
-        children = list((yield storeCalHome.children()))
-        for child in children:
-            if verbose:
-                if dryrun:
-                    print "Would unshare: %s" % (child.name(),)
-                else:
-                    print "Unsharing: %s" % (child.name(),)
-            if not dryrun:
-                (yield child.unshare())
+    @inlineCallbacks
+    def _purgeUID(self, uid):
 
-        if not dryrun:
-            (yield storeCalHome.removeUnacceptedShares())
-            notificationHome = (yield txn.notificationsWithUID(uid))
-            if notificationHome is not None:
-                (yield notificationHome.remove())
+        if self.when is None:
+            self.when = PyCalendarDateTime.getNowUTC()
 
-    (yield txn.commit())
+        # Does the record exist?
+        record = self.directory.recordWithUID(uid)
+        if record is None:
+            # The user has already been removed from the directory service.  We
+            # need to fashion a temporary, fake record
 
-    # Anything in the past is left alone
-    whenString = when.getText()
-    filter = caldavxml.Filter(
-          caldavxml.ComponentFilter(
-              caldavxml.ComponentFilter(
-                  TimeRange(start=whenString,),
-                  name=("VEVENT",),
-              ),
-              name="VCALENDAR",
-           )
-      )
-    filter = calendarqueryfilter.Filter(filter)
+            # FIXME: probably want a more elegant way to accomplish this,
+            # since it requires the aggregate directory to examine these first:
+            record = DirectoryRecord(self.directory, "users", uid, shortNames=(uid,), enabledForCalendaring=True)
+            record.enabled = True
+            self.directory._tmpRecords["shortNames"][uid] = record
+            self.directory._tmpRecords["uids"][uid] = record
 
-    count = 0
-    assignments = []
+        cua = "urn:uuid:%s" % (uid,)
 
-    perUserFilter = PerUserDataFilter(uid)
+        principalCollection = self.directory.principalCollection
+        principal = principalCollection.principalForRecord(record)
 
-    try:
-        if calHomeProvisioned:
-            calendarHome = yield principal.calendarHome(request)
-            for collName in (yield calendarHome.listChildren()):
-                collection = (yield calendarHome.getChild(collName))
+        request = FakeRequest(self.root, None, None)
+        request.checkedSACL = True
+        request.authnUser = request.authzUser = davxml.Principal(
+            davxml.HRef.fromString("/principals/__uids__/%s/" % (uid,))
+        )
 
-                if collection.isCalendarCollection() or collName == "inbox":
-                    childNames = []
+        # See if calendar home is provisioned
+        txn = self._store.newTransaction()
+        storeCalHome = (yield txn.calendarHomeWithUID(uid))
+        calHomeProvisioned = storeCalHome is not None
 
-                    if completely:
-                        # all events
-                        for childName in (yield collection.listChildren()):
-                            childNames.append(childName)
+        # If in "completely" mode, unshare collections, remove notifications
+        if calHomeProvisioned and self.completely:
+
+            # Process shared and shared-to-me calendars
+            children = list((yield storeCalHome.children()))
+            for child in children:
+                if self.verbose:
+                    if self.dryrun:
+                        print "Would unshare: %s" % (child.name(),)
                     else:
-                        # events matching filter
-                        for childName, _ignore_childUid, _ignore_childType in (yield collection.index().indexedSearch(filter)):
-                            childNames.append(childName)
+                        print "Unsharing: %s" % (child.name(),)
+                if not self.dryrun:
+                    (yield child.unshare())
 
-                    for childName in childNames:
+            if not self.dryrun:
+                (yield storeCalHome.removeUnacceptedShares())
+                notificationHome = (yield txn.notificationsWithUID(uid))
+                if notificationHome is not None:
+                    (yield notificationHome.remove())
 
-                        childResource = (yield collection.getChild(childName))
-                        if completely:
-                            action = CANCELEVENT_SHOULD_DELETE
+        (yield txn.commit())
+
+        # Anything in the past is left alone
+        whenString = self.when.getText()
+        filter = caldavxml.Filter(
+              caldavxml.ComponentFilter(
+                  caldavxml.ComponentFilter(
+                      TimeRange(start=whenString,),
+                      name=("VEVENT",),
+                  ),
+                  name="VCALENDAR",
+               )
+          )
+        filter = calendarqueryfilter.Filter(filter)
+
+        count = 0
+        assignments = []
+
+        perUserFilter = PerUserDataFilter(uid)
+
+        try:
+            if calHomeProvisioned:
+                calendarHome = yield principal.calendarHome(request)
+                for collName in (yield calendarHome.listChildren()):
+                    collection = (yield calendarHome.getChild(collName))
+
+                    if collection.isCalendarCollection() or collName == "inbox":
+                        childNames = []
+
+                        if self.completely:
+                            # all events
+                            for childName in (yield collection.listChildren()):
+                                childNames.append(childName)
                         else:
-                            event = (yield childResource.iCalendar())
-                            event = perUserFilter.filter(event)
-                            action = cancelEvent(event, when, cua)
+                            # events matching filter
+                            for childName, _ignore_childUid, _ignore_childType in (yield collection.index().indexedSearch(filter)):
+                                childNames.append(childName)
 
-                        uri = "/calendars/__uids__/%s/%s/%s" % (uid, collName, childName)
-                        request.path = uri
-                        if action == CANCELEVENT_MODIFIED:
-                            count += 1
-                            request._rememberResource(childResource, uri)
-                            storer = StoreCalendarObjectResource(
-                                request=request,
-                                destination=childResource,
-                                destination_uri=uri,
-                                destinationcal=True,
-                                destinationparent=collection,
-                                calendar=str(event),
-                            )
-                            if verbose:
-                                if dryrun:
-                                    print "Would modify: %s" % (uri,)
-                                else:
-                                    print "Modifying: %s" % (uri,)
-                            if not dryrun:
-                                result = (yield storer.run())
+                        for childName in childNames:
 
-                        elif action == CANCELEVENT_SHOULD_DELETE:
-                            incrementCount = dryrun
-                            request._rememberResource(childResource, uri)
-                            if verbose:
-                                if dryrun:
-                                    print "Would delete: %s" % (uri,)
-                                else:
-                                    print "Deleting: %s" % (uri,)
-                            if not dryrun:
-                                retry = False
-                                try:
-                                    result = (yield childResource.storeRemove(request, doimplicit, uri))
-                                    if result != NO_CONTENT:
-                                        print "Error deleting %s/%s/%s: %s" % (uid,
-                                            collName, childName, result)
-                                        retry = True
+                            childResource = (yield collection.getChild(childName))
+                            if self.completely:
+                                action = self.CANCELEVENT_SHOULD_DELETE
+                            else:
+                                event = (yield childResource.iCalendar())
+                                event = perUserFilter.filter(event)
+                                action = self._cancelEvent(event, self.when, cua)
+
+                            uri = "/calendars/__uids__/%s/%s/%s" % (uid, collName, childName)
+                            request.path = uri
+                            if action == self.CANCELEVENT_MODIFIED:
+                                count += 1
+                                request._rememberResource(childResource, uri)
+                                storer = StoreCalendarObjectResource(
+                                    request=request,
+                                    destination=childResource,
+                                    destination_uri=uri,
+                                    destinationcal=True,
+                                    destinationparent=collection,
+                                    calendar=str(event),
+                                )
+                                if self.verbose:
+                                    if self.dryrun:
+                                        print "Would modify: %s" % (uri,)
                                     else:
-                                        incrementCount = True
+                                        print "Modifying: %s" % (uri,)
+                                if not self.dryrun:
+                                    result = (yield storer.run())
 
-                                except Exception, e:
-                                    print "Exception deleting %s/%s/%s: %s" % (uid,
-                                        collName, childName, str(e))
-                                    retry = True
-
-                                if retry and doimplicit:
-                                    # Try again with implicit scheduling off
-                                    print "Retrying deletion of %s/%s/%s with implicit scheduling turned off" % (uid, collName, childName)
+                            elif action == self.CANCELEVENT_SHOULD_DELETE:
+                                incrementCount = self.dryrun
+                                request._rememberResource(childResource, uri)
+                                if self.verbose:
+                                    if self.dryrun:
+                                        print "Would delete: %s" % (uri,)
+                                    else:
+                                        print "Deleting: %s" % (uri,)
+                                if not self.dryrun:
+                                    retry = False
                                     try:
-                                        result = (yield childResource.storeRemove(request, False, uri))
+                                        result = (yield childResource.storeRemove(request, self.doimplicit, uri))
                                         if result != NO_CONTENT:
                                             print "Error deleting %s/%s/%s: %s" % (uid,
                                                 collName, childName, result)
+                                            retry = True
                                         else:
                                             incrementCount = True
+
                                     except Exception, e:
-                                        print "Still couldn't delete %s/%s/%s even with implicit scheduling turned off: %s" % (uid, collName, childName, str(e))
+                                        print "Exception deleting %s/%s/%s: %s" % (uid,
+                                            collName, childName, str(e))
+                                        retry = True
 
-                            if incrementCount:
-                                count += 1
+                                    if retry and self.doimplicit:
+                                        # Try again with implicit scheduling off
+                                        print "Retrying deletion of %s/%s/%s with implicit scheduling turned off" % (uid, collName, childName)
+                                        try:
+                                            result = (yield childResource.storeRemove(request, False, uri))
+                                            if result != NO_CONTENT:
+                                                print "Error deleting %s/%s/%s: %s" % (uid,
+                                                    collName, childName, result)
+                                            else:
+                                                incrementCount = True
+                                        except Exception, e:
+                                            print "Still couldn't delete %s/%s/%s even with implicit scheduling turned off: %s" % (uid, collName, childName, str(e))
 
-        txn = getattr(request, "_newStoreTransaction", None)
-        # Commit
-        if txn is not None:
-            (yield txn.commit())
+                                if incrementCount:
+                                    count += 1
 
-    except Exception, e:
-        # Abort
-        txn = getattr(request, "_newStoreTransaction", None)
-        if txn is not None:
-            (yield txn.abort())
-        raise e
+            txn = getattr(request, "_newStoreTransaction", None)
+            # Commit
+            if txn is not None:
+                (yield txn.commit())
 
-    try:
-        txn = store.newTransaction()
+        except Exception, e:
+            # Abort
+            txn = getattr(request, "_newStoreTransaction", None)
+            if txn is not None:
+                (yield txn.abort())
+            raise e
 
-        # Remove empty calendar collections (and calendar home if no more
-        # calendars)
-        storeCalHome = (yield txn.calendarHomeWithUID(uid))
-        if storeCalHome is not None:
-            calendars = list((yield storeCalHome.calendars()))
-            remainingCalendars = len(calendars)
-            for calColl in calendars:
-                if len(list((yield calColl.calendarObjects()))) == 0:
-                    remainingCalendars -= 1
-                    calendarName = calColl.name()
-                    if verbose:
-                        if dryrun:
-                            print "Would delete calendar: %s" % (calendarName,)
+        try:
+            txn = self._store.newTransaction()
+
+            # Remove empty calendar collections (and calendar home if no more
+            # calendars)
+            storeCalHome = (yield txn.calendarHomeWithUID(uid))
+            if storeCalHome is not None:
+                calendars = list((yield storeCalHome.calendars()))
+                remainingCalendars = len(calendars)
+                for calColl in calendars:
+                    if len(list((yield calColl.calendarObjects()))) == 0:
+                        remainingCalendars -= 1
+                        calendarName = calColl.name()
+                        if self.verbose:
+                            if self.dryrun:
+                                print "Would delete calendar: %s" % (calendarName,)
+                            else:
+                                print "Deleting calendar: %s" % (calendarName,)
+                        if not self.dryrun:
+                            (yield storeCalHome.removeChildWithName(calendarName))
+
+                if not remainingCalendars:
+                    if self.verbose:
+                        if self.dryrun:
+                            print "Would delete calendar home"
                         else:
-                            print "Deleting calendar: %s" % (calendarName,)
-                    if not dryrun:
-                        (yield storeCalHome.removeChildWithName(calendarName))
+                            print "Deleting calendar home"
+                    if not self.dryrun:
+                        (yield storeCalHome.remove())
 
-            if not remainingCalendars:
-                if verbose:
-                    if dryrun:
-                        print "Would delete calendar home"
-                    else:
-                        print "Deleting calendar home"
-                if not dryrun:
-                    (yield storeCalHome.remove())
+            # Remove VCards
+            storeAbHome = (yield txn.addressbookHomeWithUID(uid))
+            if storeAbHome is not None:
+                for abColl in list((yield storeAbHome.addressbooks())):
+                    for card in list((yield abColl.addressbookObjects())):
+                        cardName = card.name()
+                        if self.verbose:
+                            uri = "/addressbooks/__uids__/%s/%s/%s" % (uid, abColl.name(), cardName)
+                            if self.dryrun:
+                                print "Would delete: %s" % (uri,)
+                            else:
+                                print "Deleting: %s" % (uri,)
+                        if not self.dryrun:
+                            (yield abColl.removeObjectResourceWithName(cardName))
+                        count += 1
+                    if self.verbose:
+                        abName = abColl.name()
+                        if self.dryrun:
+                            print "Would delete addressbook: %s" % (abName,)
+                        else:
+                            print "Deleting addressbook: %s" % (abName,)
+                    if not self.dryrun:
+                        # Also remove the addressbook collection itself
+                        (yield storeAbHome.removeChildWithName(abColl.name()))
 
-        # Remove VCards
-        storeAbHome = (yield txn.addressbookHomeWithUID(uid))
-        if storeAbHome is not None:
-            for abColl in list((yield storeAbHome.addressbooks())):
-                for card in list((yield abColl.addressbookObjects())):
-                    cardName = card.name()
-                    if verbose:
-                        uri = "/addressbooks/__uids__/%s/%s/%s" % (uid, abColl.name(), cardName)
-                        if dryrun:
-                            print "Would delete: %s" % (uri,)
-                        else:
-                            print "Deleting: %s" % (uri,)
-                    if not dryrun:
-                        (yield abColl.removeObjectResourceWithName(cardName))
-                    count += 1
-                if verbose:
-                    abName = abColl.name()
-                    if dryrun:
-                        print "Would delete addressbook: %s" % (abName,)
+                if self.verbose:
+                    if self.dryrun:
+                        print "Would delete addressbook home"
                     else:
-                        print "Deleting addressbook: %s" % (abName,)
-                if not dryrun:
-                    # Also remove the addressbook collection itself
-                    (yield storeAbHome.removeChildWithName(abColl.name()))
+                        print "Deleting addressbook home"
+                if not self.dryrun:
+                    (yield storeAbHome.remove())
 
-            if verbose:
-                if dryrun:
-                    print "Would delete addressbook home"
-                else:
-                    print "Deleting addressbook home"
-            if not dryrun:
-                (yield storeAbHome.remove())
+            # Commit
+            (yield txn.commit())
 
-        # Commit
-        (yield txn.commit())
+        except Exception, e:
+            # Abort
+            (yield txn.abort())
+            raise e
 
-    except Exception, e:
-        # Abort
-        (yield txn.abort())
-        raise e
+        if self.proxies and not self.dryrun:
+            if self.verbose:
+                print "Deleting any proxy assignments"
+            assignments = (yield self._purgeProxyAssignments(principal))
 
-    if proxies and not dryrun:
-        if verbose:
-            print "Deleting any proxy assignments"
-        assignments = (yield purgeProxyAssignments(principal))
+        returnValue((count, assignments))
 
-    returnValue((count, assignments))
+    CANCELEVENT_SKIPPED = 1
+    CANCELEVENT_MODIFIED = 2
+    CANCELEVENT_NOT_MODIFIED = 3
+    CANCELEVENT_SHOULD_DELETE = 4
 
+    @classmethod
+    def _cancelEvent(cls, event, when, cua):
+        """
+        Modify a VEVENT such that all future occurrences are removed
 
+        @param event: the event to modify
+        @type event: L{twistedcaldav.ical.Component}
 
- at inlineCallbacks
-def purgeProxyAssignments(principal):
+        @param when: the cutoff date (anything after which is removed)
+        @type when: PyCalendarDateTime
 
-    assignments = []
+        @param cua: Calendar User Address of principal being purged, to compare
+            to see if it's the organizer of the event or just an attendee
+        @type cua: string
 
-    for proxyType in ("read", "write"):
+        Assumes that event does not occur entirely in the past.
 
-        proxyFor = (yield principal.proxyFor(proxyType == "write"))
-        for other in proxyFor:
-            assignments.append((principal.record.uid, proxyType, other.record.uid))
-            (yield removeProxy(other, principal))
+        @return: one of the 4 constants above to indicate what action to take
+        """
 
-        subPrincipal = principal.getChild("calendar-proxy-" + proxyType)
-        proxies = (yield subPrincipal.readProperty(davxml.GroupMemberSet, None))
-        for other in proxies.children:
-            assignments.append((str(other).split("/")[3], proxyType, principal.record.uid))
+        whenDate = when.duplicate()
+        whenDate.setDateOnly(True)
 
-        (yield subPrincipal.writeProperty(davxml.GroupMemberSet(), None))
+        # Only process VEVENT
+        if event.mainType() != "VEVENT":
+            return cls.CANCELEVENT_SKIPPED
 
-    returnValue(assignments)
+        main = event.masterComponent()
+        if main is None:
+            # No master component, so this is an attendee being invited to one or
+            # more occurrences
+            main = event.mainComponent(allow_multiple=True)
+
+        # Anything completely in the future is deleted
+        dtstart = main.getStartDateUTC()
+        isDateTime = not dtstart.isDateOnly()
+        if dtstart > when:
+            return cls.CANCELEVENT_SHOULD_DELETE
+
+        organizer = main.getOrganizer()
+
+        # Non-meetings are deleted
+        if organizer is None:
+            return cls.CANCELEVENT_SHOULD_DELETE
+
+        # Meetings which cua is merely an attendee are deleted (thus implicitly
+        # declined)
+        # FIXME: I think we want to decline anything after the cut-off, not delete
+        # the whole event.
+        if organizer != cua:
+            return cls.CANCELEVENT_SHOULD_DELETE
+
+        dirty = False
+
+        # Set the UNTIL on RRULE to cease at the cutoff
+        if main.hasProperty("RRULE"):
+            for rrule in main.properties("RRULE"):
+                rrule = rrule.value()
+                if rrule.getUseCount():
+                    rrule.setUseCount(False)
+
+                rrule.setUseUntil(True)
+                if isDateTime:
+                    rrule.setUntil(when)
+                else:
+                    rrule.setUntil(whenDate)
+                dirty = True
+
+        # Remove any EXDATEs and RDATEs beyond the cutoff
+        for dateType in ("EXDATE", "RDATE"):
+            if main.hasProperty(dateType):
+                for exdate_rdate in main.properties(dateType):
+                    newValues = []
+                    for value in exdate_rdate.value():
+                        if value.getValue() < when:
+                            newValues.append(value)
+                        else:
+                            exdate_rdate.value().remove(value)
+                            dirty = True
+                    if not newValues:
+                        main.removeProperty(exdate_rdate)
+                        dirty = True
+
+        # Remove any overridden components beyond the cutoff
+        for component in tuple(event.subcomponents()):
+            if component.name() == "VEVENT":
+                dtstart = component.getStartDateUTC()
+                remove = False
+                if dtstart > when:
+                    remove = True
+                if remove:
+                    event.removeComponent(component)
+                    dirty = True
+
+        if dirty:
+            return cls.CANCELEVENT_MODIFIED
+        else:
+            return cls.CANCELEVENT_NOT_MODIFIED
+
+
+    @classmethod
+    @inlineCallbacks
+    def _purgeProxyAssignments(cls, principal):
+
+        assignments = []
+
+        for proxyType in ("read", "write"):
+
+            proxyFor = (yield principal.proxyFor(proxyType == "write"))
+            for other in proxyFor:
+                assignments.append((principal.record.uid, proxyType, other.record.uid))
+                (yield removeProxy(other, principal))
+
+            subPrincipal = principal.getChild("calendar-proxy-" + proxyType)
+            proxies = (yield subPrincipal.readProperty(davxml.GroupMemberSet, None))
+            for other in proxies.children:
+                assignments.append((str(other).split("/")[3], proxyType, principal.record.uid))
+
+            (yield subPrincipal.writeProperty(davxml.GroupMemberSet(), None))
+
+        returnValue(assignments)

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/push.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/push.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/push.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/resources.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/resources.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/resources.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/cmd.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/cmd.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/cmd.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -38,7 +38,7 @@
 from calendarserver.version import version
 from calendarserver.tap.util import getRootResource
 from calendarserver.tools.tables import Table
-from calendarserver.tools.purge import purgeUID
+from calendarserver.tools.purge import PurgePrincipalService
 from calendarserver.tools.shell.vfs import Folder, RootFolder
 from calendarserver.tools.shell.directory import findRecords, summarizeRecords, recordInfo
 
@@ -49,6 +49,7 @@
     """
 
 
+
 class UnknownArguments(UsageError):
     """
     Unknown arguments.
@@ -58,6 +59,7 @@
         self.arguments = arguments
 
 
+
 class InsufficientArguments(UsageError):
     """
     Insufficient arguments.
@@ -66,6 +68,7 @@
         UsageError.__init__(self, "Insufficient arguments.")
 
 
+
 class CommandsBase(object):
     """
     Base class for commands.
@@ -78,6 +81,7 @@
 
         self.wd = RootFolder(protocol.service)
 
+
     @property
     def terminal(self):
         return self.protocol.terminal
@@ -86,6 +90,7 @@
     # Utilities
     #
 
+
     def documentationForCommand(self, command):
         """
         @return: the documentation for the given C{command} as a
@@ -131,6 +136,7 @@
             else:
                 return succeed(None)
 
+
     @inlineCallbacks
     def getTargets(self, tokens, wdFallback=False):
         """
@@ -154,6 +160,7 @@
             else:
                 returnValue(())
 
+
     def directoryRecordWithID(self, id):
         """
         Obtains a directory record corresponding to the given C{id}.
@@ -177,6 +184,7 @@
 
         return record
 
+
     def commands(self, showHidden=False):
         """
         @return: an iterable of C{(name, method)} tuples, where
@@ -189,6 +197,7 @@
                 if showHidden or not hasattr(m, "hidden"):
                     yield (attr[4:], m)
 
+
     @staticmethod
     def complete(word, items):
         """
@@ -207,6 +216,7 @@
             if item.startswith(word):
                 yield item[len(word):]
 
+
     def complete_commands(self, word):
         """
         @return: an iterable of command name completions.
@@ -225,6 +235,7 @@
 
         return completions
 
+
     @inlineCallbacks
     def complete_files(self, tokens, filter=None):
         """
@@ -243,7 +254,7 @@
                 word = token
             else:
                 base = (yield self.wd.locate(token[:i].split("/")))
-                word = token[i+1:]
+                word = token[i + 1:]
 
         else:
             base = self.wd
@@ -261,6 +272,7 @@
             returnValue(self.complete(word, files))
 
 
+
 class Commands(CommandsBase):
     """
     Data store commands.
@@ -324,6 +336,7 @@
             for info in sorted(result):
                 self.terminal.write(format % (info))
 
+
     def complete_help(self, tokens):
         if len(tokens) == 0:
             return (name for name, method in self.commands())
@@ -456,7 +469,7 @@
         if not isinstance(wd, Folder):
             raise NotFoundError("Not a folder: %s" % (wd,))
 
-       #log.msg("wd -> %s" % (wd,))
+        #log.msg("wd -> %s" % (wd,))
         self.wd = wd
 
 
@@ -464,7 +477,7 @@
     def complete_cd(self, tokens):
         returnValue((yield self.complete_files(
             tokens,
-            filter = lambda item: True #issubclass(item[0], Folder)
+            filter=lambda item: True #issubclass(item[0], Folder)
         )))
 
 
@@ -547,7 +560,7 @@
 
         implicit = True
 
-        for option, value in options:
+        for option, _ignore_value in options:
             if option == "--no-implicit":
                 # Not in docstring; this is really dangerous.
                 implicit = False
@@ -634,7 +647,7 @@
 
         usage: purge_principals principal_id [principal_id ...]
         """
-        dryRun     = True
+        dryRun = True
         completely = False
         doimplicit = True
 
@@ -664,12 +677,15 @@
 
         total = 0
         for record in records:
-            count, assignments = (yield purgeUID(
-                record.uid, directory, rootResource,
-                verbose    = False,
-                dryrun     = dryRun,
-                completely = completely,
-                doimplicit = doimplicit,
+            count, _ignore_assignments = (yield PurgePrincipalService.purgeUIDs(
+                self.protocol.service.store,
+                directory,
+                rootResource,
+                (record.uid,),
+                verbose=False,
+                dryrun=dryRun,
+                completely=completely,
+                doimplicit=doimplicit,
             ))
             total += count
 
@@ -700,7 +716,7 @@
         if len(tokens) < 3:
             raise InsufficientArguments()
 
-        mode        = tokens.pop(0)
+        mode = tokens.pop(0)
         principalID = tokens.pop(0)
 
         record = self.directoryRecordWithID(principalID)
@@ -717,7 +733,7 @@
         else:
             raise UsageError("Unknown mode: %s" % (mode,))
 
-        for target in targets:
+        for _ignore_target in targets:
             raise NotImplementedError()
 
     cmd_share.hidden = "incomplete"
@@ -741,9 +757,9 @@
             from twext.enterprise.dal import syntax
 
             localVariables = dict(
-                self   = self,
-                store  = self.protocol.service.store,
-                schema = schema,
+                self=self,
+                store=self.protocol.service.store,
+                schema=schema,
             )
 
             # FIXME: Use syntax.__all__, which needs to be defined
@@ -752,6 +768,7 @@
                     localVariables[key] = value
 
             class Handler(object):
+
                 def addOutput(innerSelf, bytes, async=False):
                     """
                     This is a delegate method, called by ManholeInterpreter.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/directory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/directory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/directory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/terminal.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/terminal.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/terminal.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_cmd.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_cmd.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_cmd.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_vfs.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_vfs.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/test/test_vfs.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/vfs.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/vfs.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/shell/vfs.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.tools.shell.test.test_vfs -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/tables.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/tables.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/tables.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/accounts.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/accounts.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/accounts.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/calverify/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2012 Apple Inc. All rights reserved.
+Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/caldavd.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/caldavd.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/caldavd.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/resources-locations.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/resources-locations.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/resources-locations.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/deprovision/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/caldavd.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/caldavd.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/caldavd.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/resources-locations.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/resources-locations.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/resources-locations.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/gateway/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/caldavd.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/caldavd.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/caldavd.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/resources-locations.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/resources-locations.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/resources-locations.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/principals/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/purge/accounts.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/purge/accounts.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/purge/accounts.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_calverify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_calverify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_calverify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.
@@ -154,9 +154,9 @@
 DTSTART:20100307T111500Z
 DTSTAMP:20100303T181220Z
 SEQUENCE:2
-ORGANIZER:mailto:example2 at example.com
-ATTENDEE:mailto:example1 at example.com
-ATTENDEE:mailto:example2 at example.com
+ORGANIZER:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
+ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 END:VEVENT
 END:VCALENDAR
 """.replace("\n", "\r\n")
@@ -175,8 +175,8 @@
 DTSTART:20100307T111500Z
 DTSTAMP:20100303T181220Z
 ORGANIZER:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:mailto:example1 at example.com
-ATTENDEE:mailto:example2 at example.com
+ATTENDEE:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
@@ -196,9 +196,9 @@
 SUMMARY:Ancient event
 DTSTART:20100307T111500Z
 DTSTAMP:20100303T181220Z
-ORGANIZER:mailto:example1 at example.com
+ORGANIZER:urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
 ATTENDEE:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:mailto:example2 at example.com
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
@@ -220,7 +220,7 @@
 DTSTAMP:20100303T181220Z
 ORGANIZER:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
 ATTENDEE:http://demo.com:8008/principals/__uids__/D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:mailto:example2 at example.com
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
@@ -246,7 +246,7 @@
 ATTENDEE;CALENDARSERVER-OLD-CUA="http://demo.com:8008/principals/__uids__/D
  46F3D71-04B7-43C2-A7B6-6F92F92E61D0":urn:uuid:D46F3D71-04B7-43C2-A7B6-6F92
  F92E61D0
-ATTENDEE:mailto:example2 at example.com
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
@@ -272,13 +272,13 @@
 ATTENDEE;CALENDARSERVER-OLD-CUA="base64-aHR0cDovL2RlbW8uY29tOjgwMDgvcHJpbmN
  pcGFscy9fX3VpZHNfXy9ENDZGM0Q3MS0wNEI3LTQzQzItQTdCNi02RjkyRjkyRTYxRDA=":u
  rn:uuid:D46F3D71-04B7-43C2-A7B6-6F92F92E61D0
-ATTENDEE:mailto:example2 at example.com
+ATTENDEE:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
 """.replace("\n", "\r\n")
 
-BAD9_ICS =                 """BEGIN:VCALENDAR
+BAD9_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
 CALSCALE:GREGORIAN
 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
@@ -390,8 +390,28 @@
 END:VCALENDAR
 """.replace("\n", "\r\n")
 
+BAD12_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:BAD12
+DTEND:20100307T151500Z
+TRANSP:OPAQUE
+SUMMARY:Ancient event
+DTSTART:20100307T111500Z
+DTSTAMP:20100303T181220Z
+ORGANIZER:mailto:example2 at example.com
+ATTENDEE:mailto:example1 at example.com
+ATTENDEE:mailto:example2 at example.com
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
 
 
+
 class CalVerifyDataTests(CommonCommonTests, unittest.TestCase):
     """
     Tests calverify for iCalendar data problems.
@@ -420,6 +440,7 @@
                 "bad9.ics" : (BAD9_ICS, metadata,),
                 "bad10.ics" : (BAD10_ICS, metadata,),
                 "bad11.ics" : (BAD11_ICS, metadata,),
+                "bad12.ics" : (BAD12_ICS, metadata,),
             }
         },
     }
@@ -447,7 +468,7 @@
 
     @inlineCallbacks
     def populate(self):
-        
+
         # Need to bypass normal validation inside the store
         util.validationBypass = True
         yield populateCalendarsFrom(self.requirements, self.storeUnderTest(), migrating=True)
@@ -508,19 +529,19 @@
         self.commit()
 
         options = {
-            "ical":True,
-            "nobase64":False,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": True,
+            "nobase64": False,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, False)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
             ("home1", "BAD1",),
             ("home1", "BAD2",),
@@ -532,6 +553,7 @@
             ("home1", "BAD9",),
             ("home1", "BAD10",),
             ("home1", "BAD11",),
+            ("home1", "BAD12",),
         )))
 
         sync_token_new = (yield (yield self.calendarUnderTest()).syncToken())
@@ -549,15 +571,15 @@
         self.commit()
 
         options = {
-            "ical":True,
-            "nobase64":False,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": True,
+            "nobase64": False,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
-        
+
         # Do fix
         self.patch(config.Scheduling.Options, "PrincipalHostAliases", "demo.com")
         self.patch(config, "HTTPPort", 8008)
@@ -565,7 +587,7 @@
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, True)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
             ("home1", "BAD1",),
             ("home1", "BAD2",),
@@ -577,6 +599,7 @@
             ("home1", "BAD9",),
             ("home1", "BAD10",),
             ("home1", "BAD11",),
+            ("home1", "BAD12",),
         )))
 
         # Do scan
@@ -584,14 +607,14 @@
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, False)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
             ("home1", "BAD1",),
         )))
 
         sync_token_new = (yield (yield self.calendarUnderTest()).syncToken())
         self.assertNotEqual(sync_token_old, sync_token_new)
-        
+
         # Make sure mailto: fix results in urn:uuid value without SCHEDULE-AGENT
         obj = yield self.calendarObjectUnderTest("bad10.ics")
         ical = yield obj.component()
@@ -603,8 +626,8 @@
                 attendee.value().startswith("urn:uuid:") or
                 attendee.value().startswith("/principals")
             )
-            
 
+
     @inlineCallbacks
     def test_scanBadCuaOnly(self):
         """
@@ -616,20 +639,20 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":True,
-            "nobase64":False,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": True,
+            "nobase64": False,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, False)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
             ("home1", "BAD4",),
             ("home1", "BAD5",),
@@ -637,11 +660,13 @@
             ("home1", "BAD7",),
             ("home1", "BAD9",),
             ("home1", "BAD10",),
+            ("home1", "BAD12",),
         )))
 
         sync_token_new = (yield (yield self.calendarUnderTest()).syncToken())
         self.assertEqual(sync_token_old, sync_token_new)
 
+
     @inlineCallbacks
     def test_fixBadCuaOnly(self):
         """
@@ -653,16 +678,16 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":True,
-            "nobase64":False,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": True,
+            "nobase64": False,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
-        
+
         # Do fix
         self.patch(config.Scheduling.Options, "PrincipalHostAliases", "demo.com")
         self.patch(config, "HTTPPort", 8008)
@@ -670,7 +695,7 @@
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, True)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
             ("home1", "BAD4",),
             ("home1", "BAD5",),
@@ -678,6 +703,7 @@
             ("home1", "BAD7",),
             ("home1", "BAD9",),
             ("home1", "BAD10",),
+            ("home1", "BAD12",),
         )))
 
         # Do scan
@@ -685,13 +711,14 @@
         calverify.emailDomain = "example.com"
         yield calverify.doScan(True, False, False)
 
-        self.assertEqual(calverify.results["Number of events to process"], 12)
+        self.assertEqual(calverify.results["Number of events to process"], 13)
         self.verifyResultsByUID(calverify.results["Bad iCalendar data"], set((
         )))
 
         sync_token_new = (yield (yield self.calendarUnderTest()).syncToken())
         self.assertNotEqual(sync_token_old, sync_token_new)
 
+
     def test_fixBadCuaLines(self):
         """
         CalVerifyService.fixBadOldCuaLines. Make sure it applies correct fix.
@@ -871,25 +898,25 @@
 """.replace("\n", "\r\n"),
             ),
         )
-        
+
         optionsNo64 = {
-            "ical":True,
-            "nobase64":True,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": True,
+            "nobase64": True,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         calverifyNo64 = CalVerifyService(self._sqlCalendarStore, optionsNo64, StringIO(), reactor, config)
         calverifyNo64.emailDomain = "example.com"
 
         options64 = {
-            "ical":True,
-            "nobase64":False,
-            "verbose":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": True,
+            "nobase64": False,
+            "verbose": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         calverify64 = CalVerifyService(self._sqlCalendarStore, options64, StringIO(), reactor, config)
         calverify64.emailDomain = "example.com"
@@ -902,6 +929,7 @@
             self.assertEqual(calverify64.fixBadOldCuaLines(bad), okbase64)
 
 
+
 class CalVerifyMismatchTestsBase(CommonCommonTests, unittest.TestCase):
     """
     Tests calverify for iCalendar mismatch problems.
@@ -915,9 +943,9 @@
         "hasPrivateComment": False,
     }
 
-    uuid1  = "D46F3D71-04B7-43C2-A7B6-6F92F92E61D0"
-    uuid2  = "47B16BB4-DB5F-4BF6-85FE-A7DA54230F92"
-    uuid3  = "AC478592-7783-44D1-B2AE-52359B4E8415"
+    uuid1 = "D46F3D71-04B7-43C2-A7B6-6F92F92E61D0"
+    uuid2 = "47B16BB4-DB5F-4BF6-85FE-A7DA54230F92"
+    uuid3 = "AC478592-7783-44D1-B2AE-52359B4E8415"
     uuidl1 = "75EA36BE-F71B-40F9-81F9-CF59BF40CA8F"
 
     @inlineCallbacks
@@ -945,7 +973,7 @@
         self.patch(config.AugmentService.params, "xmlFiles",
             [os.path.join(
                 os.path.dirname(__file__), "calverify", "augments.xml"
-            ),]
+            ), ]
         )
         self.rootResource = getRootResource(config, self._sqlCalendarStore)
         self.directory = self.rootResource.getDirectory()
@@ -953,7 +981,7 @@
 
     @inlineCallbacks
     def populate(self):
-        
+
         # Need to bypass normal validation inside the store
         util.validationBypass = True
         yield populateCalendarsFrom(self.requirements, self.storeUnderTest(), migrating=True)
@@ -1024,7 +1052,7 @@
 ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendees have event, organizer does not
     MISSING_ORGANIZER_2_ICS = """BEGIN:VCALENDAR
@@ -1046,7 +1074,7 @@
 ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISSING_ORGANIZER_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1067,7 +1095,7 @@
 ATTENDEE:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendee partstat mismatch
     MISMATCH_ATTENDEE_1_ICS = """BEGIN:VCALENDAR
@@ -1089,7 +1117,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH_ATTENDEE_2_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1110,7 +1138,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH_ATTENDEE_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1131,7 +1159,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendee events outside time range
     MISMATCH2_ATTENDEE_1_ICS = """BEGIN:VCALENDAR
@@ -1153,7 +1181,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH2_ATTENDEE_2_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1174,7 +1202,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH2_ATTENDEE_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1195,7 +1223,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Organizer event outside time range
     MISMATCH_ORGANIZER_1_ICS = """BEGIN:VCALENDAR
@@ -1217,7 +1245,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now-2}
+""".replace("\n", "\r\n") % {"year": now - 2}
 
     MISMATCH_ORGANIZER_2_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1238,7 +1266,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendee uuid3 has event with different organizer
     MISMATCH3_ATTENDEE_1_ICS = """BEGIN:VCALENDAR
@@ -1260,7 +1288,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH3_ATTENDEE_2_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1280,7 +1308,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH3_ATTENDEE_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1299,7 +1327,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH_ORGANIZER_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1320,7 +1348,7 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendee uuid3 has event they are not invited to
     MISMATCH2_ORGANIZER_1_ICS = """BEGIN:VCALENDAR
@@ -1341,7 +1369,7 @@
 ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH2_ORGANIZER_2_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1361,7 +1389,7 @@
 ATTENDEE;PARTSTAT=DECLINED:urn:uuid:47B16BB4-DB5F-4BF6-85FE-A7DA54230F92
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH2_ORGANIZER_3_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1382,9 +1410,8 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:AC478592-7783-44D1-B2AE-52359B4E8415
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
-
     requirements = {
         CalVerifyMismatchTestsBase.uuid1 : {
             "calendar" : {
@@ -1436,15 +1463,15 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":False,
-            "mismatch":True,
-            "nobase64":False,
-            "verbose":False,
-            "details":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": False,
+            "mismatch": True,
+            "nobase64": False,
+            "verbose": False,
+            "details": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
@@ -1501,15 +1528,15 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":False,
-            "mismatch":True,
-            "nobase64":False,
-            "verbose":False,
-            "details":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": False,
+            "mismatch": True,
+            "nobase64": False,
+            "verbose": False,
+            "details": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
@@ -1536,7 +1563,7 @@
             ("MISMATCH_ORGANIZER_ICS", self.uuid3, self.uuid1,),
             ("MISMATCH2_ORGANIZER_ICS", self.uuid3, self.uuid1,),
         )))
-        
+
         self.assertEqual(calverify.results["Fix change event"], set((
             (self.uuid2, "calendar", "MISMATCH_ATTENDEE_ICS",),
             (self.uuid3, "calendar", "MISMATCH_ATTENDEE_ICS",),
@@ -1546,12 +1573,12 @@
             (self.uuid2, "calendar", "MISMATCH_ORGANIZER_ICS",),
             (self.uuid3, "calendar2", "MISMATCH_ORGANIZER_ICS",),
         )))
-        
+
         self.assertEqual(calverify.results["Fix add event"], set((
             (self.uuid2, "calendar", "MISSING_ATTENDEE_ICS",),
             (self.uuid3, "calendar2", "MISSING_ATTENDEE_ICS",),
         )))
-        
+
         self.assertEqual(calverify.results["Fix add inbox"], set((
             (self.uuid2, "MISSING_ATTENDEE_ICS",),
             (self.uuid3, "MISSING_ATTENDEE_ICS",),
@@ -1563,7 +1590,7 @@
             (self.uuid2, "MISMATCH_ORGANIZER_ICS",),
             (self.uuid3, "MISMATCH_ORGANIZER_ICS",),
         )))
-        
+
         self.assertEqual(calverify.results["Fix remove"], set((
             (self.uuid2, "calendar", "missing_organizer.ics",),
             (self.uuid3, "calendar", "missing_organizer.ics",),
@@ -1602,6 +1629,8 @@
         self.assertTrue("Fix failures" not in calverify.results)
         self.assertTrue("Fixed Auto-Accepts" not in calverify.results)
 
+
+
 class CalVerifyMismatchTestsAutoAccept(CalVerifyMismatchTestsBase):
     """
     Tests calverify for iCalendar mismatch problems for auto-accept attendees.
@@ -1626,7 +1655,7 @@
 ATTENDEE:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     # Attendee partstat mismatch
     MISMATCH_ATTENDEE_1_ICS = """BEGIN:VCALENDAR
@@ -1647,7 +1676,7 @@
 ATTENDEE;PARTSTAT=NEEDS-ACTION:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
     MISMATCH_ATTENDEE_L1_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
@@ -1667,9 +1696,8 @@
 ATTENDEE;PARTSTAT=ACCEPTED:urn:uuid:75EA36BE-F71B-40F9-81F9-CF59BF40CA8F
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year":now}
+""".replace("\n", "\r\n") % {"year": now}
 
-
     requirements = {
         CalVerifyMismatchTestsBase.uuid1 : {
             "calendar" : {
@@ -1706,15 +1734,15 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":False,
-            "mismatch":True,
-            "nobase64":False,
-            "verbose":False,
-            "details":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": False,
+            "mismatch": True,
+            "nobase64": False,
+            "verbose": False,
+            "details": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
@@ -1755,15 +1783,15 @@
         self.commit()
 
         options = {
-            "ical":False,
-            "badcua":False,
-            "mismatch":True,
-            "nobase64":False,
-            "verbose":False,
-            "details":False,
-            "uid":"",
-            "uuid":"",
-            "tzid":"",
+            "ical": False,
+            "badcua": False,
+            "mismatch": True,
+            "nobase64": False,
+            "verbose": False,
+            "details": False,
+            "uid": "",
+            "uuid": "",
+            "tzid": "",
         }
         output = StringIO()
         calverify = CalVerifyService(self._sqlCalendarStore, options, output, reactor, config)
@@ -1778,24 +1806,24 @@
         )))
         self.assertTrue("Missing Organizer" not in calverify.results)
         self.assertTrue("Mismatch Organizer" not in calverify.results)
-        
+
         self.assertEqual(calverify.results["Fix change event"], set((
             (self.uuidl1, "calendar", "MISMATCH_ATTENDEE_ICS",),
         )))
-        
+
         self.assertEqual(calverify.results["Fix add event"], set((
             (self.uuidl1, "calendar", "MISSING_ATTENDEE_ICS",),
         )))
-        
+
         self.assertEqual(calverify.results["Fix add inbox"], set((
             (self.uuidl1, "MISSING_ATTENDEE_ICS",),
             (self.uuidl1, "MISMATCH_ATTENDEE_ICS",),
         )))
-        
+
         self.assertTrue("Fix remove" not in calverify.results)
 
         self.assertEqual(calverify.results["Fix failures"], 0)
-        testResults = sorted(calverify.results["Fixed Auto-Accepts"], key=lambda x:x["uid"])
+        testResults = sorted(calverify.results["Fixed Auto-Accepts"], key=lambda x: x["uid"])
         self.assertEqual(testResults[0]["path"], "/calendars/__uids__/%s/calendar/mismatched_attendee.ics" % self.uuidl1)
         self.assertEqual(testResults[0]["uid"], "MISMATCH_ATTENDEE_ICS")
         self.assertEqual(testResults[0]["start"].getText(), "%s0307T031500" % (now,))

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_changeip.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_changeip.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_changeip.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_export.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_export.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_export.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_gateway.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_gateway.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_gateway.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_principals.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_principals.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_principals.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -16,8 +16,7 @@
 
 
 from calendarserver.tap.util import getRootResource
-from calendarserver.tools.purge import cancelEvent, purgeUID
-from calendarserver.tools.purge import CANCELEVENT_MODIFIED, CANCELEVENT_SHOULD_DELETE
+from calendarserver.tools.purge import PurgePrincipalService
 
 from twistedcaldav.config import config
 from twistedcaldav.ical import Component
@@ -233,55 +232,61 @@
     def test_cancelRepeating(self):
         # A repeating event where purged CUA is organizer
         event = Component.fromString(REPEATING_1_ICS_BEFORE)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:0F168477-CF3D-45D3-AE60-9875EA02C4D1")
-        self.assertEquals(action, CANCELEVENT_MODIFIED)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_MODIFIED)
         self.assertEquals(str(event), REPEATING_1_ICS_AFTER)
 
+
     def test_cancelAllDayRepeating(self):
         # A repeating All Day event where purged CUA is organizer
         event = Component.fromString(REPEATING_2_ICS_BEFORE)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:0F168477-CF3D-45D3-AE60-9875EA02C4D1")
-        self.assertEquals(action, CANCELEVENT_MODIFIED)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_MODIFIED)
         self.assertEquals(str(event), REPEATING_2_ICS_AFTER)
 
+
     def test_cancelFutureEvent(self):
         # A future event
         event = Component.fromString(FUTURE_EVENT_ICS)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:0F168477-CF3D-45D3-AE60-9875EA02C4D1")
-        self.assertEquals(action, CANCELEVENT_SHOULD_DELETE)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_SHOULD_DELETE)
 
+
     def test_cancelNonMeeting(self):
         # A repeating non-meeting event
         event = Component.fromString(REPEATING_NON_MEETING_ICS)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:0F168477-CF3D-45D3-AE60-9875EA02C4D1")
-        self.assertEquals(action, CANCELEVENT_SHOULD_DELETE)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_SHOULD_DELETE)
 
+
     def test_cancelAsAttendee(self):
         # A repeating meeting event where purged CUA is an attendee
         event = Component.fromString(REPEATING_ATTENDEE_MEETING_ICS)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:0F168477-CF3D-45D3-AE60-9875EA02C4D1")
-        self.assertEquals(action, CANCELEVENT_SHOULD_DELETE)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_SHOULD_DELETE)
 
+
     def test_cancelAsAttendeeOccurrence(self):
         # A repeating meeting occurrence with no master, where purged CUA is
         # an attendee
         event = Component.fromString(INVITED_TO_OCCURRENCE_ICS)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:9DC04A71-E6DD-11DF-9492-0800200C9A66")
-        self.assertEquals(action, CANCELEVENT_SHOULD_DELETE)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_SHOULD_DELETE)
 
+
     def test_cancelAsAttendeeMultipleOccurrences(self):
         # Multiple meeting occurrences with no master, where purged CUA is
         # an attendee
         event = Component.fromString(INVITED_TO_MULTIPLE_OCCURRENCES_ICS)
-        action = cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
+        action = PurgePrincipalService._cancelEvent(event, PyCalendarDateTime(2010, 12, 6, 12, 0, 0, PyCalendarTimezone(utc=True)),
             "urn:uuid:9DC04A71-E6DD-11DF-9492-0800200C9A66")
-        self.assertEquals(action, CANCELEVENT_SHOULD_DELETE)
+        self.assertEquals(action, PurgePrincipalService.CANCELEVENT_SHOULD_DELETE)
 
 # This event begins on Nov 30, 2010, has two EXDATES (Dec 3 and 9), and has two
 # overridden instances (Dec 4 and 11).  The Dec 11 one will be removed since
@@ -725,7 +730,6 @@
 DTEND;TZID=America/Los_Angeles:20111105T170000
 TRANSP:OPAQUE
 ORGANIZER;CN="Amanda Test":urn:uuid:9DC04A70-E6DD-11DF-9492-0800200C9A66
- 
 UID:44A391CF-52F5-46B4-B35A-E000E3002084
 DTSTAMP:20111102T162426Z
 SEQUENCE:5
@@ -738,9 +742,6 @@
 """.replace("\n", "\r\n")
 
 
-
-
-
 ATTACHMENT_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
 PRODID:-//Apple Inc.//iCal 4.0.1//EN
@@ -778,7 +779,6 @@
 
 
 
-
 class PurgePrincipalTests(CommonCommonTests, unittest.TestCase):
     """
     Tests for purging the data belonging to a given principal
@@ -869,9 +869,9 @@
 
 
     @inlineCallbacks
-    def test_purgeUID(self):
+    def test_purgeUIDs(self):
         """
-        Verify purgeUID removes homes, and doesn't provision homes that don't exist
+        Verify purgeUIDs removes homes, and doesn't provision homes that don't exist
         """
 
         # Now you see it
@@ -880,8 +880,8 @@
         self.assertNotEquals(home, None)
         (yield txn.commit())
 
-        count, ignored = (yield purgeUID(self.storeUnderTest(), self.uid, self.directory,
-            self.rootResource, verbose=False, proxies=False, completely=True))
+        count, ignored = (yield PurgePrincipalService.purgeUIDs(self.storeUnderTest(), self.directory,
+            self.rootResource, (self.uid,), verbose=False, proxies=False, completely=True))
         self.assertEquals(count, 1) # 1 event
 
         # Now you don't
@@ -893,8 +893,8 @@
         self.assertEquals((yield home2.childWithName(self.sharedName)), None)
         (yield txn.commit())
 
-        count, ignored = (yield purgeUID(self.storeUnderTest(), self.uid, self.directory,
-            self.rootResource, verbose=False, proxies=False, completely=True))
+        count, ignored = (yield PurgePrincipalService.purgeUIDs(self.storeUnderTest(), self.directory,
+            self.rootResource, (self.uid,), verbose=False, proxies=False, completely=True))
         self.assertEquals(count, 0)
 
         # And you still don't (making sure it's not provisioned)

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge_old_events.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge_old_events.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_purge_old_events.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -17,9 +17,15 @@
 """
 Tests for calendarserver.tools.purge
 """
+
 from calendarserver.tap.util import getRootResource
-from calendarserver.tools.purge import purgeOldEvents, purgeUID, purgeOrphanedAttachments
+from calendarserver.tools.purge import PurgeOldEventsService, PurgeAttachmentsService, \
+    PurgePrincipalService
 
+from pycalendar.datetime import PyCalendarDateTime
+from pycalendar.timezone import PyCalendarTimezone
+
+from twext.enterprise.dal.syntax import Update, Delete
 from twext.web2.http_headers import MimeType
 
 from twisted.internet.defer import inlineCallbacks, returnValue
@@ -28,11 +34,9 @@
 from twistedcaldav.config import config
 from twistedcaldav.vcard import Component as VCardComponent
 
+from txdav.common.datastore.sql_tables import schema
 from txdav.common.datastore.test.util import buildStore, populateCalendarsFrom, CommonCommonTests
 
-from pycalendar.datetime import PyCalendarDateTime
-from pycalendar.timezone import PyCalendarTimezone
-
 import os
 
 
@@ -86,7 +90,7 @@
 END:VCALENDAR
 """.replace("\n", "\r\n") % {"year": now - 5}
 
-OLD_ATTACHMENT_ICS = """BEGIN:VCALENDAR
+ATTACHMENT_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
 PRODID:-//Apple Inc.//iCal 4.0.1//EN
 CALSCALE:GREGORIAN
@@ -123,19 +127,66 @@
 END:VTIMEZONE
 BEGIN:VEVENT
 CREATED:20100303T181216Z
-UID:57A5D1F6-9A57-4F74-9520-25C617F54B88
+UID:57A5D1F6-9A57-4F74-9520-25C617F54B88-%(uid)s
 TRANSP:OPAQUE
 SUMMARY:Ancient event with attachment
 DTSTART;TZID=US/Pacific:%(year)s0308T111500
 DTEND;TZID=US/Pacific:%(year)s0308T151500
 DTSTAMP:20100303T181220Z
-X-APPLE-DROPBOX:/calendars/__uids__/user01/dropbox/57A5D1F6-9A57-4F74-95
- 20-25C617F54B88.dropbox
+X-APPLE-DROPBOX:/calendars/__uids__/user01/dropbox/%(dropboxid)s.dropbox
 SEQUENCE:2
 END:VEVENT
 END:VCALENDAR
-""".replace("\n", "\r\n") % {"year": now - 5}
+""".replace("\n", "\r\n")
 
+MATTACHMENT_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:US/Pacific
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYMONTH=10;BYDAY=-1SU
+DTSTART:19621028T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYMONTH=4;BYDAY=1SU
+DTSTART:19870405T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:57A5D1F6-9A57-4F74-9520-25C617F54B88-%(uid)s
+TRANSP:OPAQUE
+SUMMARY:Ancient event with attachment
+DTSTART;TZID=US/Pacific:%(year)s0308T111500
+DTEND;TZID=US/Pacific:%(year)s0308T151500
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
 ENDLESS_ICS = """BEGIN:VCALENDAR
 VERSION:2.0
 PRODID:-//Apple Inc.//iCal 4.0.1//EN
@@ -332,13 +383,26 @@
             "calendar1" : {
                 "old.ics" : (OLD_ICS, metadata,),
                 "endless.ics" : (ENDLESS_ICS, metadata,),
-                "oldattachment.ics" : (OLD_ATTACHMENT_ICS, metadata,),
+                "oldattachment1.ics" : (ATTACHMENT_ICS % {"year": now - 5, "uid": "1.1", "dropboxid": "1.1"}, metadata,),
+                "oldattachment2.ics" : (ATTACHMENT_ICS % {"year": now - 5, "uid": "1.2", "dropboxid": "1.2"}, metadata,),
+                "currentattachment3.ics" : (ATTACHMENT_ICS % {"year": now + 1, "uid": "1.3", "dropboxid": "1.3"}, metadata,),
+                "oldmattachment1.ics" : (MATTACHMENT_ICS % {"year": now - 5, "uid": "1.1m"}, metadata,),
+                "oldmattachment2.ics" : (MATTACHMENT_ICS % {"year": now - 5, "uid": "1.2m"}, metadata,),
+                "currentmattachment3.ics" : (MATTACHMENT_ICS % {"year": now + 1, "uid": "1.3m"}, metadata,),
             }
         },
         "home2" : {
             "calendar2" : {
                 "straddling.ics" : (STRADDLING_ICS, metadata,),
                 "recent.ics" : (RECENT_ICS, metadata,),
+                "oldattachment1.ics" : (ATTACHMENT_ICS % {"year": now - 5, "uid": "2.1", "dropboxid": "2.1"}, metadata,),
+                "currentattachment2.ics" : (ATTACHMENT_ICS % {"year": now + 1, "uid": "2.2", "dropboxid": "2.1"}, metadata,),
+                "oldattachment3.ics" : (ATTACHMENT_ICS % {"year": now - 5, "uid": "2.3", "dropboxid": "2.2"}, metadata,),
+                "oldattachment4.ics" : (ATTACHMENT_ICS % {"year": now - 5, "uid": "2.4", "dropboxid": "2.2"}, metadata,),
+                "oldmattachment1.ics" : (MATTACHMENT_ICS % {"year": now - 5, "uid": "2.1"}, metadata,),
+                "currentmattachment2.ics" : (MATTACHMENT_ICS % {"year": now + 1, "uid": "2.2"}, metadata,),
+                "oldmattachment3.ics" : (MATTACHMENT_ICS % {"year": now - 5, "uid": "2.3"}, metadata,),
+                "oldmattachment4.ics" : (MATTACHMENT_ICS % {"year": now - 5, "uid": "2.4"}, metadata,),
             },
             "calendar3" : {
                 "repeating_awhile.ics" : (REPEATING_AWHILE_ICS, metadata,),
@@ -374,7 +438,15 @@
         yield populateCalendarsFrom(self.requirements, self.storeUnderTest())
         self.notifierFactory.reset()
 
+        txn = self._sqlCalendarStore.newTransaction()
+        Delete(
+            From=schema.ATTACHMENT,
+            Where=None
+        ).on(txn)
 
+        (yield txn.commit())
+
+
     def storeUnderTest(self):
         """
         Create and return a L{CalendarStore} for testing.
@@ -392,14 +464,23 @@
         self.assertEquals(sorted(results),
             sorted([
                 ['home1', 'calendar1', 'old.ics', '1901-01-01 01:00:00'],
-                ['home1', 'calendar1', 'oldattachment.ics', '1901-01-01 01:00:00'],
+                ['home1', 'calendar1', 'oldattachment1.ics', '1901-01-01 01:00:00'],
+                ['home1', 'calendar1', 'oldattachment2.ics', '1901-01-01 01:00:00'],
+                ['home1', 'calendar1', 'oldmattachment1.ics', '1901-01-01 01:00:00'],
+                ['home1', 'calendar1', 'oldmattachment2.ics', '1901-01-01 01:00:00'],
                 ['home2', 'calendar3', 'repeating_awhile.ics', '1901-01-01 01:00:00'],
                 ['home2', 'calendar2', 'recent.ics', '%s-03-04 22:15:00' % (now,)],
+                ['home2', 'calendar2', 'oldattachment1.ics', '1901-01-01 01:00:00'],
+                ['home2', 'calendar2', 'oldattachment3.ics', '1901-01-01 01:00:00'],
+                ['home2', 'calendar2', 'oldattachment4.ics', '1901-01-01 01:00:00'],
+                ['home2', 'calendar2', 'oldmattachment1.ics', '1901-01-01 01:00:00'],
+                ['home2', 'calendar2', 'oldmattachment3.ics', '1901-01-01 01:00:00'],
+                ['home2', 'calendar2', 'oldmattachment4.ics', '1901-01-01 01:00:00'],
             ])
         )
 
         # Query for oldest event - actually with limited time caching, the oldest event
-        # cannot be precisely know, all we get back is the first one in the sorted list
+        # cannot be precisely known, all we get back is the first one in the sorted list
         # where each has the 1901 "dummy" time stamp to indicate a partial cache
         results = (yield txn.eventsOlderThan(cutoff, batchSize=1))
         self.assertEquals(len(results), 1)
@@ -415,11 +496,11 @@
         count = (yield txn.removeOldEvents(cutoff, batchSize=1))
         self.assertEquals(count, 1)
         results = (yield txn.eventsOlderThan(cutoff))
-        self.assertEquals(len(results), 3)
+        self.assertEquals(len(results), 12)
 
         # Remove remaining oldest events
         count = (yield txn.removeOldEvents(cutoff))
-        self.assertEquals(count, 3)
+        self.assertEquals(count, 12)
         results = (yield txn.eventsOlderThan(cutoff))
         self.assertEquals(results, [])
 
@@ -429,81 +510,163 @@
 
 
     @inlineCallbacks
-    def _addAttachment(self):
+    def _addAttachment(self, home, calendar, event, name):
 
         txn = self._sqlCalendarStore.newTransaction()
 
         # Create an event with an attachment
-        home = (yield txn.calendarHomeWithUID("home1"))
-        calendar = (yield home.calendarWithName("calendar1"))
-        event = (yield calendar.calendarObjectWithName("oldattachment.ics"))
-        attachment = (yield event.createAttachmentWithName("oldattachment.ics"))
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        attachment = (yield event.createAttachmentWithName(name))
         t = attachment.store(MimeType("text", "x-fixture"))
-        t.write("old attachment")
-        t.write(" text")
+        t.write("%s/%s/%s/%s" % (home, calendar, event, name,))
+        t.write(" attachment")
         (yield t.loseConnection())
+
         (yield txn.commit())
 
         returnValue(attachment)
 
 
     @inlineCallbacks
+    def _orphanAttachment(self, home, calendar, event):
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        # Reset dropbox id in calendar_object
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        co = schema.CALENDAR_OBJECT
+        Update(
+            {co.DROPBOX_ID: None, },
+            Where=co.RESOURCE_ID == event._resourceID,
+        ).on(txn)
+
+        (yield txn.commit())
+
+
+    @inlineCallbacks
+    def _addManagedAttachment(self, home, calendar, event, name):
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        # Create an event with an attachment
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        attachment = (yield event.createManagedAttachment())
+        t = attachment.store(MimeType("text", "x-fixture"), name)
+        t.write("%s/%s/%s/%s" % (home, calendar, event, name,))
+        t.write(" managed attachment")
+        (yield t.loseConnection())
+
+        (yield txn.commit())
+
+        returnValue(attachment)
+
+
+    @inlineCallbacks
     def test_removeOrphanedAttachments(self):
-        attachment = (yield self._addAttachment())
-        txn = self._sqlCalendarStore.newTransaction()
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        attachment = (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
         attachmentPath = attachment._path.path
         self.assertTrue(os.path.exists(attachmentPath))
 
-        orphans = (yield txn.orphanedAttachments())
+        mattachment1 = (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        mattachment2 = (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+
+        mattachmentPath1 = mattachment1._path.path
+        self.assertTrue(os.path.exists(mattachmentPath1))
+        mattachmentPath2 = mattachment2._path.path
+        self.assertTrue(os.path.exists(mattachmentPath2))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        orphans = (yield self.transactionUnderTest().orphanedAttachments())
         self.assertEquals(len(orphans), 0)
 
-        count = (yield txn.removeOrphanedAttachments(batchSize=100))
+        count = (yield self.transactionUnderTest().removeOrphanedAttachments(batchSize=100))
         self.assertEquals(count, 0)
 
-        # File still exists
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertNotEqual(quota, 0)
+
+        # Files still exist
         self.assertTrue(os.path.exists(attachmentPath))
+        self.assertTrue(os.path.exists(mattachmentPath1))
+        self.assertTrue(os.path.exists(mattachmentPath2))
 
         # Delete all old events (including the event containing the attachment)
         cutoff = PyCalendarDateTime(now, 4, 1, 0, 0, 0)
-        count = (yield txn.removeOldEvents(cutoff))
+        count = (yield self.transactionUnderTest().removeOldEvents(cutoff))
 
-        # Just look for orphaned attachments but don't delete
-        orphans = (yield txn.orphanedAttachments())
-        self.assertEquals(len(orphans), 1)
-        self.assertEquals(orphans, [["home1", 19, 19, 1]])
+        # See which events have gone and which exist
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        self.assertNotEqual((yield calendar.calendarObjectWithName("endless.ics")), None)
+        self.assertNotEqual((yield calendar.calendarObjectWithName("currentmattachment3.ics")), None)
+        self.assertEqual((yield calendar.calendarObjectWithName("old.ics")), None)
+        self.assertEqual((yield calendar.calendarObjectWithName("oldattachment1.ics")), None)
+        self.assertEqual((yield calendar.calendarObjectWithName("oldmattachment1.ics")), None)
+        (yield self.commit())
 
-        # Remove orphaned attachments, should be 1
-        count = (yield txn.removeOrphanedAttachments(batchSize=100))
-        self.assertEquals(count, 1)
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 < quota2)
+        self.assertNotEqual(quota3, 0)
 
-        # Remove orphaned attachments, shouldn't be any
-        count = (yield txn.removeOrphanedAttachments())
-        self.assertEquals(count, 0)
+        # Just look for orphaned attachments - none left
+        orphans = (yield self.transactionUnderTest().orphanedAttachments())
+        self.assertEquals(len(orphans), 0)
 
-        # File isn't actually removed until after commit
-        (yield txn.commit())
-
-        # Verify the file itself is gone
+        # Files
         self.assertFalse(os.path.exists(attachmentPath))
+        self.assertFalse(os.path.exists(mattachmentPath1))
+        self.assertTrue(os.path.exists(mattachmentPath2))
 
 
     @inlineCallbacks
     def test_purgeOldEvents(self):
 
         # Dry run
-        total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
-            self.rootResource, PyCalendarDateTime(now, 4, 1, 0, 0, 0), 2, dryrun=True,
-            verbose=False))
-        self.assertEquals(total, 4)
+        total = (yield PurgeOldEventsService.purgeOldEvents(
+            self._sqlCalendarStore,
+            PyCalendarDateTime(now, 4, 1, 0, 0, 0),
+            2,
+            dryrun=True,
+            verbose=False
+        ))
+        self.assertEquals(total, 13)
 
         # Actually remove
-        total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
-            self.rootResource, PyCalendarDateTime(now, 4, 1, 0, 0, 0), 2, verbose=False))
-        self.assertEquals(total, 4)
+        total = (yield PurgeOldEventsService.purgeOldEvents(
+            self._sqlCalendarStore,
+            PyCalendarDateTime(now, 4, 1, 0, 0, 0),
+            2,
+            verbose=False
+        ))
+        self.assertEquals(total, 13)
 
         # There should be no more left
-        total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
-            self.rootResource, PyCalendarDateTime(now, 4, 1, 0, 0, 0), 2, verbose=False))
+        total = (yield PurgeOldEventsService.purgeOldEvents(
+            self._sqlCalendarStore,
+            PyCalendarDateTime(now, 4, 1, 0, 0, 0),
+            2,
+            verbose=False
+        ))
         self.assertEquals(total, 0)
 
 
@@ -518,21 +681,21 @@
             VCardComponent.fromString(VCARD_1)))
         self.assertEquals(len((yield abColl.addressbookObjects())), 1)
 
-        # Verify there are 3 events in calendar1
+        # Verify there are 8 events in calendar1
         calHome = (yield txn.calendarHomeWithUID("home1"))
         calColl = (yield calHome.calendarWithName("calendar1"))
-        self.assertEquals(len((yield calColl.calendarObjects())), 3)
+        self.assertEquals(len((yield calColl.calendarObjects())), 8)
 
         # Make the newly created objects available to the purgeUID transaction
         (yield txn.commit())
 
         # Purge home1
-        total, ignored = (yield purgeUID(self._sqlCalendarStore, "home1", self.directory,
-            self.rootResource, verbose=False, proxies=False,
+        total, ignored = (yield PurgePrincipalService.purgeUIDs(self._sqlCalendarStore, self.directory,
+            self.rootResource, ("home1",), verbose=False, proxies=False,
             when=PyCalendarDateTime(now, 4, 1, 12, 0, 0, 0, PyCalendarTimezone(utc=True))))
 
-        # 2 items deleted: 1 event and 1 vcard
-        self.assertEquals(total, 2)
+        # 4 items deleted: 3 events and 1 vcard
+        self.assertEquals(total, 4)
 
         txn = self._sqlCalendarStore.newTransaction()
         # adressbook home is deleted since it's now empty
@@ -541,7 +704,7 @@
 
         calHome = (yield txn.calendarHomeWithUID("home1"))
         calColl = (yield calHome.calendarWithName("calendar1"))
-        self.assertEquals(len((yield calColl.calendarObjects())), 2)
+        self.assertEquals(len((yield calColl.calendarObjects())), 5)
 
 
     @inlineCallbacks
@@ -555,20 +718,20 @@
             VCardComponent.fromString(VCARD_1)))
         self.assertEquals(len((yield abColl.addressbookObjects())), 1)
 
-        # Verify there are 3 events in calendar1
+        # Verify there are 8 events in calendar1
         calHome = (yield txn.calendarHomeWithUID("home1"))
         calColl = (yield calHome.calendarWithName("calendar1"))
-        self.assertEquals(len((yield calColl.calendarObjects())), 3)
+        self.assertEquals(len((yield calColl.calendarObjects())), 8)
 
         # Make the newly created objects available to the purgeUID transaction
         (yield txn.commit())
 
         # Purge home1 completely
-        total, ignored = (yield purgeUID(self._sqlCalendarStore, "home1", self.directory,
-            self.rootResource, verbose=False, proxies=False, completely=True))
+        total, ignored = (yield PurgePrincipalService.purgeUIDs(self._sqlCalendarStore, self.directory,
+            self.rootResource, ("home1",), verbose=False, proxies=False, completely=True))
 
-        # 4 items deleted: 3 events and 1 vcard
-        self.assertEquals(total, 4)
+        # 9 items deleted: 8 events and 1 vcard
+        self.assertEquals(total, 9)
 
         # Homes have been deleted as well
         txn = self._sqlCalendarStore.newTransaction()
@@ -579,26 +742,430 @@
 
 
     @inlineCallbacks
-    def test_purgeOrphanedAttachments(self):
+    def test_purgeAttachmentsWithoutCutoffWithPurgeOld(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
 
-        (yield self._addAttachment())
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
 
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
         # Remove old events first
-        total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
-            self.rootResource, PyCalendarDateTime(now, 4, 1, 0, 0, 0), 2, verbose=False))
-        self.assertEquals(total, 4)
+        total = (yield PurgeOldEventsService.purgeOldEvents(
+            self._sqlCalendarStore,
+            PyCalendarDateTime(now, 4, 1, 0, 0, 0),
+            2,
+            verbose=False
+        ))
+        self.assertEquals(total, 13)
 
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 < quota2)
+
         # Dry run
-        total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
-            dryrun=True, verbose=False))
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=True, verbose=False))
         self.assertEquals(total, 1)
 
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 == quota3)
+
         # Actually remove
-        total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
-            dryrun=False, verbose=False))
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=False, verbose=False))
         self.assertEquals(total, 1)
 
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota5 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota5 < quota4)
+
         # There should be no more left
-        total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
-            dryrun=False, verbose=False))
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=False, verbose=False))
         self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithoutCutoff(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "currentattachment2.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 3)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 3)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 < quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithoutCutoffWithMatchingUUID(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "currentattachment2.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 0, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 1)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 1)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 < quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithoutCutoffWithoutMatchingUUID(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 0, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 0)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 == quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 0, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithCutoffOld(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "currentattachment2.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 14, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 13)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 13)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 < quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, None, 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithCutoffOldWithMatchingUUID(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "currentattachment2.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 14, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 6)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 6)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 < quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home1", 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)
+
+
+    @inlineCallbacks
+    def test_purgeAttachmentsWithCutoffOldWithoutMatchingUUID(self):
+        """
+        L{PurgeAttachmentsService.purgeAttachments} purges only orphaned attachments, not current ones.
+        """
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota1 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertEqual(quota1, 0)
+
+        (yield self._addAttachment("home1", "calendar1", "oldattachment1.ics", "att1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.1"))
+        (yield self._addAttachment("home1", "calendar1", "oldattachment2.ics", "att2.2"))
+        (yield self._addAttachment("home1", "calendar1", "currentattachment3.ics", "att3"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment1.ics", "att4"))
+        (yield self._addAttachment("home2", "calendar2", "currentattachment2.ics", "att5"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment3.ics", "att6"))
+        (yield self._addAttachment("home2", "calendar2", "oldattachment4.ics", "att7"))
+        (yield self._orphanAttachment("home1", "calendar1", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "oldattachment1.ics"))
+        (yield self._orphanAttachment("home2", "calendar2", "currentattachment2.ics"))
+
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment1.ics", "matt1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.1"))
+        (yield self._addManagedAttachment("home1", "calendar1", "oldmattachment2.ics", "matt2.2"))
+        (yield self._addManagedAttachment("home1", "calendar1", "currentmattachment3.ics", "matt3"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment1.ics", "matt4"))
+        (yield self._addManagedAttachment("home2", "calendar2", "currentmattachment2.ics", "matt5"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment3.ics", "matt6"))
+        (yield self._addManagedAttachment("home2", "calendar2", "oldmattachment4.ics", "matt7"))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota2 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota2 > quota1)
+
+        # Dry run
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 14, 2, dryrun=True, verbose=False))
+        self.assertEquals(total, 7)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota3 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota3 == quota2)
+
+        # Actually remove
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 7)
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota4 = (yield home.quotaUsedBytes())
+        (yield self.commit())
+        self.assertTrue(quota4 == quota3)
+
+        # There should be no more left
+        total = (yield PurgeAttachmentsService.purgeAttachments(self._sqlCalendarStore, "home2", 14, 2, dryrun=False, verbose=False))
+        self.assertEquals(total, 0)

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_resources.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_resources.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_resources.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/upgrade.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/upgrade.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- test-case-name: calendarserver.tools.test.test_upgrade -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/validcalendardata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/validcalendardata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/validcalendardata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/warmup.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/warmup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/tools/warmup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: calendarserver.webadmin.test.test_resource -*-
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/test_resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webadmin/test/test_resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/calendarserver/webcal/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts-test.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts-test.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts-test.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.dtd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/accounts.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-default.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-default.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-default.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-test.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-test.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments-test.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments.dtd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/augments.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
-Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies-test.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies-test.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies-test.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies.dtd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/proxies.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/auth/resources-test.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/auth/resources-test.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/auth/resources-test.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-apple.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-apple.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-apple.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.
@@ -485,6 +485,10 @@
 
     <!-- Calendar Drop Box -->
     <key>EnableDropBox</key>
+    <false/>
+
+    <!-- Calendar Managed Attachments -->
+    <key>EnableManagedAttachments</key>
     <true/>
 
     <!-- Private Events -->

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-primary.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-primary.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-primary.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-secondary.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-secondary.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-partitioning-secondary.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-test.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-test.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd-test.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.
@@ -899,6 +899,10 @@
 
     <!-- Calendar Drop Box -->
     <key>EnableDropBox</key>
+    <false/>
+
+    <!-- Calendar Managed Attachments -->
+    <key>EnableManagedAttachments</key>
     <true/>
 
     <!-- Calendar Managed Attachments -->

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/caldavd.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/resources/caldavd-resources.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/resources/caldavd-resources.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/resources/caldavd-resources.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources-orig.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources-orig.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources-orig.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/resources/locations-resources.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/resources/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/resources/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/resources/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/resources.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/resources.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/resources.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/servers.dtd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/servers.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/servers.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
-Copyright (c) 2011 Apple Inc. All rights reserved.
+Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/conf/servertoserver.dtd
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/conf/servertoserver.dtd	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/conf/servertoserver.dtd	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 <!--
-Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/calendarcertupdate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/calendarcertupdate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/calendarcertupdate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -9,7 +9,7 @@
 # For the replace command the handler returns
 # 0 = don't care/ cert replaced, 2 = an error occurred.
 #
-# Copyright (c) 2011-2012 Apple Inc.  All Rights Reserved.
+# Copyright (c) 2011-2013 Apple Inc.  All Rights Reserved.
 #
 # IMPORTANT NOTE:  This file is licensed only for use on Apple-labeled
 # computers and is subject to the terms and conditions of the Apple

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/test_certupdate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/test_certupdate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/certupdate/test/test_certupdate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/launchd/calendarserver.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/launchd/calendarserver.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/launchd/calendarserver.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendardemotion.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendardemotion.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendardemotion.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 #
 # UninstallExtra script for calendar server.
 #
-# Copyright (c) 2011-2012 Apple Inc.  All Rights Reserved.
+# Copyright (c) 2011-2013 Apple Inc.  All Rights Reserved.
 #
 # IMPORTANT NOTE:  This file is licensed only for use on Apple-labeled
 # computers and is subject to the terms and conditions of the Apple

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarmigrator.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarmigrator.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarmigrator.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -10,7 +10,7 @@
 # The only argument this script currently cares about is --sourceRoot, which
 # should point to the root of the previous system.
 #
-# Copyright (c) 2005-2012 Apple Inc.  All Rights Reserved.
+# Copyright (c) 2005-2013 Apple Inc.  All Rights Reserved.
 #
 # IMPORTANT NOTE:  This file is licensed only for use on Apple-labeled
 # computers and is subject to the terms and conditions of the Apple

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarpromotion.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarpromotion.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/calendarpromotion.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 #
 # PromotionExtra script for calendar server.
 #
-# Copyright (c) 2011-2012 Apple Inc.  All Rights Reserved.
+# Copyright (c) 2011-2013 Apple Inc.  All Rights Reserved.
 #
 # IMPORTANT NOTE:  This file is licensed only for use on Apple-labeled
 # computers and is subject to the terms and conditions of the Apple

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/test_migrator.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/test_migrator.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/migration/test/test_migrator.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_change.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_change.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_change.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_create.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_create.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/_event_create.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchlib.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmark.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_add_attendee.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_add_attendee.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_add_attendee.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_autoaccept.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_autoaccept.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_autoaccept.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_date.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_date.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_date.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_summary.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_summary.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_change_summary.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete_attendee.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete_attendee.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_delete_attendee.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_move.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_move.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/event_move.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_calendars.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_calendars.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_calendars.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_events.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_events.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/find_events.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy_vary_attendees.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy_vary_attendees.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/benchmarks/vfreebusy_vary_attendees.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/compare.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/display-calendar-events.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/display-calendar-events.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/display-calendar-events.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/extractconf
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/extractconf	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/extractconf	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/fix-units.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/fix-units.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/fix-units.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 --
--- Copyright (c) 2010 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/graph.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpauth.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpauth.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpauth.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpclient.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpclient.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/httpclient.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/io_measure.d
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/io_measure.d	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/io_measure.d	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Apple Inc. All rights reserved.
+ * Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ampsim.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ampsim.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ampsim.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.dist.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.dist.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.dist.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+    Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/config.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+    Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ical.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ical.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/ical.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/logger.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/logger.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/logger.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/population.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/population.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/population.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: contrib.performance.loadtest.test_population -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/profiles.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/profiles.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/sim.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/sim.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/sim.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: contrib.performance.loadtest.test_sim -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_ical.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_ical.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_ical.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_population.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_population.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_population.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_profiles.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_profiles.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_profiles.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_sim.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_sim.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_sim.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_trafficlogger.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_trafficlogger.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_trafficlogger.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_webadmin.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_webadmin.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/test_webadmin.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/trafficlogger.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/trafficlogger.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/trafficlogger.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/webadmin.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/webadmin.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/loadtest/webadmin.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/massupload.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/nightly.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/nightly.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/nightly.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash -x
 
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/pgsql.d
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/pgsql.d	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/pgsql.d	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Apple Inc. All rights reserved.
+ * Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/profile.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/profile.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/profile.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash -x
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report_principals.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report_principals.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/report_principals.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/reupload.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/reupload.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/reupload.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/bash -x
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample-many.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample-many.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample-many.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sample.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash   
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/setbackend.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sim
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sim	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sim	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/some-more-data.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/some-more-data.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/some-more-data.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/bin/bash -x
 ##
-# Copyright (c) 2011 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/speedcenter.tac
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/speedcenter.tac	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/speedcenter.tac	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sql_measure.d
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sql_measure.d	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sql_measure.d	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Apple Inc. All rights reserved.
+ * Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/httpTests.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/httpTests.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/httpTests.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/invite.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/invite.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/invite.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/multiget.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/multiget.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/multiget.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/propfind.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/propfind.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/propfind.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/put.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/put.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/put.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/query.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/query.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/query.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/sync.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/sync.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/requests/sync.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/sqlusage.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/sqlusage.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlusage/sqlusage.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sqlwatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stackedbar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stackedbar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stackedbar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stats.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stats.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/stats.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sudo-run.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sudo-run.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/sudo-run.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-committime
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-committime	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-committime	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-revno
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-revno	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/svn-revno	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_benchmark.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_benchmark.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_benchmark.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_event_change_date.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_event_change_date.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_event_change_date.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_httpauth.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_httpauth.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_httpauth.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_stats.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_stats.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/test_stats.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/performance/upload.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/anonymous_log.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/anonymous_log.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/anonymous_log.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/dtraceanalyze.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/dtraceanalyze.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/dtraceanalyze.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # coding=utf-8
 
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fakecalendardata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fakecalendardata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fakecalendardata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fix_calendar
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fix_calendar	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/fix_calendar	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/harpoon.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/harpoon.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/harpoon.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/ngs/app/ical/code/bin/python
 
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitoranalysis.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitoranalysis.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitoranalysis.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitorsplit.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitorsplit.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/monitorsplit.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/netstatus.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/netstatus.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/netstatus.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pg_stats_analysis.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pg_stats_analysis.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pg_stats_analysis.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pgtrace.d
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pgtrace.d	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/pgtrace.d	2013-01-19 04:44:01 UTC (rev 10313)
@@ -7,7 +7,7 @@
  *   Count postgres operations over time 
  * 
 ## 
-# Copyright (c) 2011 Apple Inc. All rights reserved. 
+# Copyright (c) 2011-2013 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. 

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/protocolanalysis.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/protocolanalysis.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/protocolanalysis.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/readStats.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/readStats.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/readStats.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/request_monitor.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/request_monitor.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/request_monitor.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sortrecurrences.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sortrecurrences.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sortrecurrences.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sqldata_from_path.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sqldata_from_path.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/sqldata_from_path.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/tables.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/tables.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/tables.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/test_protocolanalysis.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/test_protocolanalysis.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/contrib/tools/test_protocolanalysis.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/Developer/gendocs
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/Developer/gendocs	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/Developer/gendocs	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/caldavd.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/caldavd.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/caldavd.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_bootstrap_database.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_bootstrap_database.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_bootstrap_database.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_command_gateway.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_command_gateway.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_command_gateway.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_export.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_export.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_export.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_principals.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_principals.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_principals.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -52,7 +52,7 @@
 resources.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read and write data that belongs to the
 server.
 .Nm

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_push.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_push.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_manage_push.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -31,7 +31,7 @@
 currently subscribed to via APNS.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read data that belongs to the server.
 .Nm
 takes a list of userids as arguments and then displays the resources

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_migrate_resources.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_migrate_resources.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_migrate_resources.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -31,7 +31,7 @@
 OpenDirectory into the calendar server's internal directory.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read and write data that belongs to the
 server.
 .Sh OPTIONS

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_monitor_notifications.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_monitor_notifications.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_monitor_notifications.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_attachments.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_attachments.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_attachments.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -23,16 +23,19 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl -config Ar file
+.Op Fl -uuid Ar guid
+.Op Fl -days Ar NUMBER
 .Op Fl -dry-run
 .Op Fl -verbose
 .Op Fl -help
 .Sh DESCRIPTION
 .Nm
 is a tool for removing attachments that are no longer referenced by
-any calendar events.
+any calendar events, or only referenced by events older than a specified
+cut-off.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read and write data that belongs to the
 server.
 .Sh OPTIONS
@@ -42,6 +45,10 @@
 .It Fl f, -config Ar FILE
 Use the Calendar Server configuration specified in the given file.
 Defaults to /etc/caldavd/caldavd.plist.
+.It Fl u, -uuid Ar GUID
+Target a specific user via their GUID.
+.It Fl d, -days Ar NUMBER
+Specify how many days in the past to retain.  Defaults to 365 days.
 .It Fl n, -dry-run
 Calculate and display how many orphaned attachments would be removed,
 but don't actually remove them.

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_events.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_events.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_events.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -36,7 +36,7 @@
 removed.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read and write data that belongs to the
 server.
 .Sh OPTIONS

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_principals.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_principals.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_purge_principals.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2006-2013 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.
@@ -36,7 +36,7 @@
 events in the past are retained, but any ongoing events are canceled.
 .Pp
 .Nm
-should be run as a user with the same priviledges as the Calendar
+should be run as a user with the same privileges as the Calendar
 Server itself, as it needs to read and write data that belongs to the
 server.
 .Sh OPTIONS

Modified: CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_shell.8
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_shell.8	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/doc/calendarserver_shell.8	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 .\"
-.\" Copyright (c) 2012 Apple Inc. All rights reserved.
+.\" Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/locales/en_EN.ISO8859-1/LC_MESSAGES/calendarserver.po
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/locales/en_EN.ISO8859-1/LC_MESSAGES/calendarserver.po	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/locales/en_EN.ISO8859-1/LC_MESSAGES/calendarserver.po	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 # Calendar Server Localization
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 Apple Inc. All rights reserved.
 #
 msgid ""
 msgstr ""

Modified: CalendarServer/branches/users/gaya/sharedgroups/run
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/run	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/run	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # -*- sh-basic-offset: 2 -*-
 
 ##
-# Copyright (c) 2005-2009 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/setup.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/setup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/setup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/sim
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/sim	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/sim	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ##
-# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/Makefile.Apple
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/Makefile.Apple	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/Makefile.Apple	2013-01-19 04:44:01 UTC (rev 10313)
@@ -4,7 +4,7 @@
 #
 # This is only useful internally at Apple, probably.
 ##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/build.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/build.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/build.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- sh-basic-offset: 2 -*-
 
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/directorysetup.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/directorysetup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/directorysetup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/patchapply
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/patchapply	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/patchapply	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/patchmaker
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/patchmaker	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/patchmaker	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/py.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/py.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/py.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- sh-basic-offset: 2 -*-
 ##
-# Copyright (c) 2005-2009 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/shell.sh
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/shell.sh	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/shell.sh	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/submit
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/submit	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/submit	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -23,11 +23,13 @@
 set -e
 set -u
 
-version="18";
+version="19";
 
  wd="$(cd "$(dirname "$0")" && pwd)";
 src="$(cd "${wd}/.." && pwd)";
 
+unset CALENDARSERVER_BUILD_DEPS;
+
 ##
 # Command line
 ##

Added: CalendarServer/branches/users/gaya/sharedgroups/support/update_copyrights
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/update_copyrights	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/update_copyrights	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,66 @@
+#!/bin/sh
+# -*- sh-basic-offset: 2 -*-
+
+##
+# Copyright (c) 2013 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.
+##
+
+set -e;
+set -u;
+
+find_files () {
+  where="$1"; shift;
+
+  find "${where}"               \
+    ! \(                        \
+      -type d                   \
+      \(                        \
+        -name .svn -o           \
+        -name build -o          \
+        -name data -o          \
+        -name '_trial_temp*'    \
+      \)                        \
+      -prune                    \
+    \)                          \
+    -type f                     \
+    ! -name '.#*'               \
+    ! -name '#*#'               \
+    ! -name '*~'                \
+    ! -name '*.pyc'             \
+    ! -name '*.log'             \
+    ! -name update_copyrights   \
+    -print0;
+}
+
+wd="$(cd "$(dirname "$0")/.." && pwd)";
+
+this_year="$(date "+%Y")";
+last_year=$((${this_year} - 1));
+
+tmp="$(mktemp -t "$$")";
+find_files "${wd}" > "${tmp}";
+
+ff () { cat "${tmp}"; }
+
+echo "Updating copyrights from ${last_year} to ${this_year}...";
+
+ff | xargs -0 perl -i -pe 's|(Copyright \(c\) .*-)'"${last_year}"'( Apple)|${1}'"${this_year}"'${2}|';
+ff | xargs -0 perl -i -pe 's|(Copyright \(c\) )'"${last_year}"'( Apple)|${1}'"${last_year}-${this_year}"'${2}|';
+
+ff | xargs -0 grep -e 'Copyright (c) .* Apple' \
+  | grep -v -e 'Copyright (c) .*'"${this_year}"' Apple' \
+  ;
+
+rm "${tmp}";


Property changes on: CalendarServer/branches/users/gaya/sharedgroups/support/update_copyrights
___________________________________________________________________
Added: svn:executable
   + *

Modified: CalendarServer/branches/users/gaya/sharedgroups/support/version.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/support/version.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/support/version.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/test
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/test	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/test	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 ##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/testserver
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/testserver	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/testserver	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 ##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/backport/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/backport/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/backport/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/backport/internet/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/backport/internet/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/backport/internet/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/adbapi2.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/adbapi2.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/adbapi2.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.test.test_adbapi2 -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -30,6 +30,7 @@
 """
 
 import sys
+import weakref
 
 from cStringIO import StringIO
 from cPickle import dumps, loads
@@ -143,7 +144,7 @@
 
     def __init__(self, pool, threadHolder, connection, cursor):
         self._pool       = pool
-        self._completed  = True
+        self._completed  = "idle"
         self._cursor     = cursor
         self._connection = connection
         self._holder     = threadHolder
@@ -324,7 +325,7 @@
             committed or aborted.
         """
         if not self._completed:
-            self._completed = True
+            self._completed = "ended"
             def reallySomething():
                 """
                 Do the database work and set appropriate flags.  Executed in the
@@ -338,7 +339,7 @@
             self._pool._repoolAfter(self, result)
             return result
         else:
-            raise AlreadyFinishedError()
+            raise AlreadyFinishedError(self._completed)
 
 
     def commit(self):
@@ -349,11 +350,6 @@
         return self._end(self._connection.rollback).addErrback(log.err)
 
 
-    def __del__(self):
-        if not self._completed:
-            self.abort()
-
-
     def reset(self):
         """
         Call this when placing this transaction back into the pool.
@@ -371,7 +367,7 @@
         Release the thread and database connection associated with this
         transaction.
         """
-        self._completed = True
+        self._completed = "released"
         self._stopped   = True
         holder          = self._holder
         self._holder    = None
@@ -393,16 +389,17 @@
     """
     implements(IAsyncTransaction)
 
-    def __init__(self, pool):
+    def __init__(self, pool, reason):
         self.paramstyle = pool.paramstyle
         self.dialect = pool.dialect
+        self.reason = reason
 
 
     def _everything(self, *a, **kw):
         """
         Everything fails with a L{ConnectionError}.
         """
-        return fail(ConnectionError())
+        return fail(ConnectionError(self.reason))
 
 
     execSQL = _everything
@@ -491,7 +488,7 @@
 
 
     @inlineCallbacks
-    def runHooks(self, ignored):
+    def runHooks(self, ignored=None):
         """
         Callback for C{commit} and C{abort} Deferreds.
         """
@@ -516,10 +513,27 @@
     # covered by txdav's test suite.
 
     def __init__(self):
+        self._preCommit = _HookableOperation()
         self._commit = _HookableOperation()
         self._abort = _HookableOperation()
 
 
+    def _commitWithHooks(self, doCommit):
+        """
+        Run pre-hooks, commit, the real DB commit, and then post-hooks.
+        """
+        pre = self._preCommit.runHooks()
+        def ok(ignored):
+            return doCommit().addCallback(self._commit.runHooks)
+        def failed(why):
+            return self.abort().addCallback(lambda ignored: why)
+        return pre.addCallbacks(ok, failed)
+
+
+    def preCommit(self, operation):
+        return self._preCommit.addHook(operation)
+
+
     def postCommit(self, operation):
         return self._commit.addHook(operation)
 
@@ -648,9 +662,10 @@
             # We're in the process of executing a block of commands.  Wait until
             # they're done.  (Commit will be repeated in _checkNextBlock.)
             return self._blockedQueue.commit()
-        self._markComplete()
-        return (super(_SingleTxn, self).commit()
-                .addCallback(self._commit.runHooks))
+        def reallyCommit():
+            self._markComplete()
+            return super(_SingleTxn, self).commit()
+        return self._commitWithHooks(reallyCommit)
 
 
     def abort(self):
@@ -667,7 +682,10 @@
         Stop waiting for a free transaction and fail.
         """
         self._pool._waiting.remove(self)
-        self._unspoolOnto(_NoTxn(self._pool))
+        self._completed = True
+        self._unspoolOnto(_NoTxn(self._pool,
+                                 "connection pool shut down while txn "
+                                 "waiting for database connection."))
 
 
     def _checkComplete(self):
@@ -700,7 +718,20 @@
         return block
 
 
+    def __del__(self):
+        """
+        When garbage collected, a L{_SingleTxn} recycles itself.
+        """
+        try:
+            if not self._completed:
+                self.abort()
+        except AlreadyFinishedError:
+            # The underlying transaction might already be completed without us
+            # knowing; for example if the service shuts down.
+            pass
 
+
+
 class _Unspooler(object):
     def __init__(self, orig):
         self.orig = orig
@@ -988,7 +1019,7 @@
         if self._stopping:
             # FIXME: should be wrapping a _SingleTxn around this to get
             # .commandBlock()
-            return _NoTxn(self)
+            return _NoTxn(self, "txn created while DB pool shutting down")
         if self._free:
             basetxn = self._free.pop(0)
             self._busy.append(basetxn)
@@ -1139,8 +1170,10 @@
 
 
 
-quashErrors = {
-    FailsafeException: "SOMETHING_UNKNOWN"
+_quashErrors = {
+    FailsafeException: "SOMETHING_UNKNOWN",
+    AlreadyFinishedError: "ALREADY_FINISHED",
+    ConnectionError: "CONNECTION_ERROR",
 }
 
 
@@ -1156,12 +1189,13 @@
             try:
                 val = yield inner(*a, **k)
             except:
-                # FIXME: if this were a general thing, it should probably allow
-                # known errors through; look at the command's 'errors' attribute
-                # before collapsing into FailsafeException.
-                log.err(Failure(),
-                        "shared database connection pool encountered error")
-                raise FailsafeException()
+                f = Failure()
+                if f.type in command.errors:
+                    returnValue(f)
+                else:
+                    log.err(Failure(),
+                            "shared database connection pool encountered error")
+                    raise FailsafeException()
             else:
                 returnValue(val)
         return command.responder(innerinner)
@@ -1174,7 +1208,7 @@
     Start a transaction, identified with an ID generated by the client.
     """
     arguments = txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1187,7 +1221,7 @@
                  ('args', Pickle()),
                  ('blockID', String()),
                  ('reportZeroRowCount', Boolean())] + txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1196,7 +1230,7 @@
     Create a new SQL command block.
     """
     arguments = [("blockID", String())] + txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1205,7 +1239,7 @@
     Create a new SQL command block.
     """
     arguments = [("blockID", String())] + txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1217,7 +1251,7 @@
 
     arguments = [('queryID', String()),
                  ('row', Pickle())]
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1230,19 +1264,19 @@
                  ('norows', Boolean()),
                  ('derived', Pickle()),
                  ('noneResult', Boolean())]
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
 class Commit(Command):
     arguments = txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
 class Abort(Command):
     arguments = txnarg()
-    errors = quashErrors
+    errors = _quashErrors
 
 
 
@@ -1372,7 +1406,7 @@
         # See DEFAULT_PARAM_STYLE FIXME above.
         super(ConnectionPoolClient, self).__init__()
         self._nextID    = count().next
-        self._txns      = {}
+        self._txns      = weakref.WeakValueDictionary()
         self._queries   = {}
         self.dialect    = dialect
         self.paramstyle = paramstyle
@@ -1550,12 +1584,13 @@
 
 
     def commit(self):
-        self._committing = True
-        def done(whatever):
-            self._committed = True
-            return whatever
-        return (self._complete(Commit).addBoth(done)
-                .addCallback(self._commit.runHooks))
+        def reallyCommit():
+            self._committing = True
+            def done(whatever):
+                self._committed = True
+                return whatever
+            return self._complete(Commit).addBoth(done)
+        return self._commitWithHooks(reallyCommit)
 
 
     def abort(self):
@@ -1572,7 +1607,16 @@
         return _NetCommandBlock(self, blockID)
 
 
+    def __del__(self):
+        """
+        When a L{_NetTransaction} is garabage collected, it aborts itself.
+        """
+        if not self._completed:
+            def shush(f):
+                f.trap(ConnectionError, AlreadyFinishedError)
+            self.abort().addErrback(shush)
 
+
 class _NetCommandBlock(object):
     """
     Net command block.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/model.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/model.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/model.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
 ##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/parseschema.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/parseschema.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/parseschema.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/record.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/record.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/record.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.dal.test.test_record -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.
@@ -26,6 +26,7 @@
 from twext.enterprise.dal.syntax import (
     Select, Tuple, Constant, ColumnSyntax, Insert, Update, Delete
 )
+from twext.enterprise.util import parseSQLTimestamp
 # from twext.enterprise.dal.syntax import ExpressionSyntax
 
 class ReadOnly(AttributeError):
@@ -143,6 +144,15 @@
         return super(Record, self).__setattr__(name, value)
 
 
+    def __repr__(self):
+        r = "<{0} record from table {1}".format(self.__class__.__name__,
+                                                self.table.model.name)
+        for k in sorted(self.__attrmap__.keys()):
+            r += " {0}={1}".format(k, repr(getattr(self, k)))
+        r += ">"
+        return r
+
+
     @staticmethod
     def namingConvention(columnName):
         """
@@ -220,12 +230,26 @@
         result = yield (Insert(colmap, Return=needsCols if needsCols else None)
                         .on(transaction))
         if needsCols:
-            for neededAttr, neededValue in zip(needsAttrs, result[0]):
-                setattr(self, neededAttr, neededValue)
+            self._attributesFromRow(zip(needsAttrs, result[0]))
         self.transaction = transaction
         returnValue(self)
 
 
+    def _attributesFromRow(self, attributeList):
+        """
+        Take some data loaded from a row and apply it to this instance,
+        converting types as necessary.
+
+        @param attributeList: a C{list} of 2-C{tuples} of C{(attributeName,
+            attributeValue)}.
+        """
+        for setAttribute, setValue in attributeList:
+            setColumn = self.__attrmap__[setAttribute]
+            if setColumn.model.type.name == "timestamp":
+                setValue = parseSQLTimestamp(setValue)
+            setattr(self, setAttribute, setValue)
+
+
     def delete(self):
         """
         Delete this row from the database.
@@ -273,7 +297,7 @@
 
 
     @classmethod
-    def query(cls, transaction, expr, order=None, ascending=True):
+    def query(cls, transaction, expr, order=None, ascending=True, group=None):
         """
         Query the table that corresponds to C{cls}, and return instances of
         C{cls} corresponding to the rows that are returned from that table.
@@ -288,10 +312,15 @@
 
         @param ascending: A boolean; if C{order} is not C{None}, whether to
             sort in ascending or descending order.
+
+        @param group: a L{ColumnSyntax} to group the resulting record objects
+            by.
         """
         kw = {}
         if order is not None:
             kw.update(OrderBy=order, Ascending=ascending)
+        if group is not None:
+            kw.update(GroupBy=group)
         return cls._rowsFromQuery(transaction, Select(list(cls.table),
                                                       From=cls.table,
                                                       Where=expr, **kw), None)
@@ -314,7 +343,8 @@
     @inlineCallbacks
     def _rowsFromQuery(cls, transaction, qry, rozrc):
         """
-        Execute the given query, and transform its results into rows.
+        Execute the given query, and transform its results into instances of
+        C{cls}.
 
         @param transaction: an L{IAsyncTransaction} to execute the query on.
 
@@ -324,16 +354,15 @@
 
         @param rozrc: The C{raiseOnZeroRowCount} argument.
 
-        @return: a L{Deferred} that succeeds with a C{list} or fails with an
-            exception produced by C{rozrc}.
+        @return: a L{Deferred} that succeeds with a C{list} of instances of
+            C{cls} or fails with an exception produced by C{rozrc}.
         """
         rows = yield qry.on(transaction, raiseOnZeroRowCount=rozrc)
         selves = []
+        names = [cls.__colmap__[column] for column in list(cls.table)]
         for row in rows:
             self = cls()
-            for (column, value) in zip(list(cls.table), row):
-                name = cls.__colmap__[column]
-                setattr(self, name, value)
+            self._attributesFromRow(zip(names, row))
             self.transaction = transaction
             selves.append(self)
         returnValue(selves)

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/syntax.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/syntax.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.dal.test.test_sqlsyntax -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_parseschema.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_parseschema.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_parseschema.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_record.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_record.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_record.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.
@@ -18,6 +18,8 @@
 Test cases for L{twext.enterprise.dal.record}.
 """
 
+import datetime
+
 from twisted.internet.defer import inlineCallbacks
 
 from twisted.trial.unittest import TestCase
@@ -38,7 +40,8 @@
 schemaString = """
 create table ALPHA (BETA integer primary key, GAMMA text);
 create table DELTA (PHI integer primary key default (nextval('myseq')),
-                    EPSILON text not null);
+                    EPSILON text not null,
+                    ZETA timestamp not null default '2012-12-12 12:12:12' );
 """
 
 # sqlite can be made to support nextval() as a function, but 'create sequence'
@@ -139,6 +142,24 @@
 
 
     @inlineCallbacks
+    def test_datetimeType(self):
+        """
+        When a L{Record} references a timestamp column, it retrieves the date
+        as UTC.
+        """
+        txn = self.pool.connection()
+        # Create ...
+        rec = yield TestAutoRecord.create(txn, epsilon=1)
+        self.assertEquals(rec.zeta, datetime.datetime(2012, 12, 12, 12, 12, 12))
+        yield txn.commit()
+        # ... should have the same effect as loading.
+        txn = self.pool.connection()
+        rec = (yield TestAutoRecord.all(txn))[0]
+        self.assertEquals(rec.zeta, datetime.datetime(2012, 12, 12, 12, 12, 12))
+
+
+
+    @inlineCallbacks
     def test_tooManyAttributes(self):
         """
         When a L{Record} object is created with unknown attributes (those which
@@ -238,7 +259,18 @@
             sorted(data)
         )
 
+    @inlineCallbacks
+    def test_repr(self):
+        """
+        The C{repr} of a L{Record} presents all its values.
+        """
+        txn = self.pool.connection()
+        yield txn.execSQL("insert into ALPHA values (:1, :2)", [789, u'nine'])
+        rec = list((yield TestRecord.all(txn)))[0]
+        self.assertIn(" beta=789", repr(rec))
+        self.assertIn(" gamma=u'nine'", repr(rec))
 
+
     @inlineCallbacks
     def test_orderedQuery(self):
         """

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_sqlsyntax.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/dal/test/test_sqlsyntax.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -146,6 +146,16 @@
                           SQLFragment("select * from FOO", []))
 
 
+    def test_tableSyntaxFromSchemaSyntaxCompare(self):
+        """
+        One L{TableSyntax} is equivalent to another wrapping the same table;
+        one wrapping a different table is different.
+        """
+        self.assertEquals(self.schema.FOO, self.schema.FOO)
+        self.assertNotEquals(self.schema.FOO, self.schema.BOZ)
+
+
+
     def test_simpleWhereClause(self):
         """
         L{Select} generates a 'select' statement with a 'where' clause

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/fixtures.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/fixtures.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/fixtures.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.test.test_fixtures -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.
@@ -35,6 +35,10 @@
     @param schemaText: The text of the schema with which to initialize the
         database.
     @type schemaText: L{str}
+
+    @return: a L{ConnectionPool} service whose C{startService} method has
+        already been invoked.
+    @rtype: L{ConnectionPool}
     """
     sqlitename = testCase.mktemp()
     seqs = {}

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/ienterprise.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/ienterprise.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/ienterprise.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -109,10 +109,25 @@
         Commit changes caused by this transaction.
 
         @return: L{Deferred} which fires with C{None} upon successful
-            completion of this transaction.
+            completion of this transaction, or fails if this transaction could
+            not be committed.  It fails with L{AlreadyFinishedError} if the
+            transaction has already been committed or rolled back.
         """
 
 
+    def preCommit(operation):
+        """
+        Perform the given operation when this L{IAsyncTransaction}'s C{commit}
+        method is called, but before the underlying transaction commits.  If
+        any exception is raised by this operation, underlying database commit
+        will be blocked and rollback run instead.
+
+        @param operation: a 0-argument callable that may return a L{Deferred}.
+            If it does, then the subsequent operations added by L{postCommit}
+            will not fire until that L{Deferred} fires.
+        """
+
+
     def postCommit(operation):
         """
         Perform the given operation only after this L{IAsyncTransaction}

Added: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/locking.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/locking.py	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/locking.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,103 @@
+# -*- test-case-name: twext.enterprise.test.test_locking -*-
+##
+# Copyright (c) 2012-2013 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.
+##
+
+"""
+Utilities to restrict concurrency based on mutual exclusion.
+"""
+
+from twext.enterprise.dal.model import Table
+from twext.enterprise.dal.model import SQLType
+from twext.enterprise.dal.model import Constraint
+from twext.enterprise.dal.syntax import SchemaSyntax
+from twext.enterprise.dal.model import Schema
+from twext.enterprise.dal.record import Record
+from twext.enterprise.dal.record import fromTable
+
+
+class AlreadyUnlocked(Exception):
+    """
+    The lock you were trying to unlock was already unlocked.
+    """
+
+
+
+def makeLockSchema(inSchema):
+    """
+    Create a self-contained schema just for L{Locker} use, in C{inSchema}.
+
+    @param inSchema: a L{Schema} to add the locks table to.
+    @type inSchema: L{Schema}
+
+    @return: inSchema
+    """
+    LockTable = Table(inSchema, 'NAMED_LOCK')
+
+    LockTable.addColumn("LOCK_NAME", SQLType("varchar", 255))
+    LockTable.tableConstraint(Constraint.NOT_NULL, ["LOCK_NAME"])
+    LockTable.tableConstraint(Constraint.UNIQUE, ["LOCK_NAME"])
+    LockTable.primaryKey = [LockTable.columnNamed("LOCK_NAME")]
+
+    return inSchema
+
+LockSchema = SchemaSyntax(makeLockSchema(Schema(__file__)))
+
+
+
+
+class NamedLock(Record, fromTable(LockSchema.NAMED_LOCK)):
+    """
+    An L{AcquiredLock} lock against a shared data store that the current
+    process holds via the referenced transaction.
+    """
+
+    @classmethod
+    def acquire(cls, txn, name):
+        """
+        Acquire a lock with the given name.
+
+        @param name: The name of the lock to acquire.  Against the same store,
+            no two locks may be acquired.
+        @type name: L{unicode}
+
+        @return: a L{Deferred} that fires with an L{AcquiredLock} when the lock
+            has fired, or fails when the lock has not been acquired.
+        """
+        def autoRelease(self):
+            txn.preCommit(lambda: self.release(True))
+            return self
+        return cls.create(txn, lockName=name).addCallback(autoRelease)
+
+
+    def release(self, ignoreAlreadyUnlocked=False):
+        """
+        Release this lock.
+
+        @param ignoreAlreadyUnlocked: If you don't care about the current
+            status of this lock, and just want to release it if it is still
+            acquired, pass this parameter as L{True}.  Otherwise this method
+            will raise an exception if it is invoked when the lock has already
+            been released.
+
+        @raise: L{AlreadyUnlocked}
+
+        @return: A L{Deferred} that fires with L{None} when the lock has been
+            unlocked.
+        """
+        return self.delete()
+
+
+

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/queue.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/queue.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/queue.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.enterprise.test.test_queue -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.
@@ -16,10 +16,11 @@
 ##
 
 """
-L{twext.enterprise.queue} is a task-queueing system for use by applications
-with multiple front-end servers talking to a single database instance, that
-want to defer and parallelize work that involves storing the results of
-computation.
+L{twext.enterprise.queue} is an U{eventually consistent
+<https://en.wikipedia.org/wiki/Eventual_consistency>} task-queueing system for
+use by applications with multiple front-end servers talking to a single
+database instance, that want to defer and parallelize work that involves
+storing the results of computation.
 
 By enqueuing with L{twisted.enterprise.queue}, you may guarantee that the work
 will I{eventually} be done, and reliably commit to doing it in the future, but
@@ -78,44 +79,71 @@
             queuer.enqueueWork(txn, CouponWork, customerID=customerID)
 """
 
-from socket import getfqdn
 from functools import wraps
-from os import getpid
 from datetime import datetime
 
 from zope.interface import implements
 
-from twisted.application.service import Service
+from twisted.application.service import MultiService
 from twisted.internet.protocol import Factory
 from twisted.internet.defer import (
-    inlineCallbacks, returnValue, Deferred, succeed
+    inlineCallbacks, returnValue, Deferred, passthru
 )
 from twisted.internet.endpoints import TCP4ClientEndpoint
 from twisted.protocols.amp import AMP, Command, Integer, Argument, String
 from twisted.python.reflect import qual
 from twisted.python import log
 
-from twext.enterprise.dal.syntax import TableSyntax, SchemaSyntax
+from twext.enterprise.dal.syntax import SchemaSyntax, Lock, NamedValue
+
 from twext.enterprise.dal.model import ProcedureCall
-from twext.enterprise.dal.syntax import NamedValue
 from twext.enterprise.dal.record import Record, fromTable
 from twisted.python.failure import Failure
-from twisted.internet.defer import passthru
+
 from twext.enterprise.dal.model import Table, Schema, SQLType, Constraint
 from twisted.internet.endpoints import TCP4ServerEndpoint
-from twext.enterprise.dal.syntax import Lock
 from twext.enterprise.ienterprise import IQueuer
+from zope.interface.interface import Interface
+from twext.enterprise.locking import NamedLock
 
+
+class _IWorkPerformer(Interface):
+    """
+    An object that can perform work.
+
+    Internal interface; implemented by several classes here since work has to
+    (in the worst case) pass from worker->controller->controller->worker.
+    """
+
+    def performWork(table, workID):
+        """
+        @param table: The table where work is waiting.
+        @type table: L{TableSyntax}
+
+        @param workID: The primary key identifier of the given work.
+        @type workID: L{int}
+
+        @return: a L{Deferred} firing with an empty dictionary when the work is
+            complete.
+        @rtype: L{Deferred} firing L{dict}
+        """
+
+
+
 def makeNodeSchema(inSchema):
     """
-    Create a self-contained schema for L{NodeInfo} to use.
+    Create a self-contained schema for L{NodeInfo} to use, in C{inSchema}.
 
+    @param inSchema: a L{Schema} to add the node-info table to.
+    @type inSchema: L{Schema}
+
     @return: a schema with just the one table.
     """
     # Initializing this duplicate schema avoids a circular dependency, but this
     # should really be accomplished with independent schema objects that the
     # transaction is made aware of somehow.
     NodeTable = Table(inSchema, 'NODE_INFO')
+
     NodeTable.addColumn("HOSTNAME", SQLType("varchar", 255))
     NodeTable.addColumn("PID", SQLType("integer", None))
     NodeTable.addColumn("PORT", SQLType("integer", None))
@@ -128,11 +156,13 @@
         NodeTable.tableConstraint(Constraint.NOT_NULL, [column.name])
     NodeTable.primaryKey = [NodeTable.columnNamed("HOSTNAME"),
                             NodeTable.columnNamed("PORT")]
+
     return inSchema
 
 NodeInfoSchema = SchemaSyntax(makeNodeSchema(Schema(__file__)))
 
 
+
 @inlineCallbacks
 def inTransaction(transactionCreator, operation):
     """
@@ -162,6 +192,14 @@
 
 
 
+def astimestamp(v):
+    """
+    Convert the given datetime to a POSIX timestamp.
+    """
+    return (v - datetime.utcfromtimestamp(0)).total_seconds()
+
+
+
 class TableSyntaxByName(Argument):
     """
     Serialize and deserialize L{TableSyntax} objects for an AMP protocol with
@@ -178,7 +216,7 @@
 
         @param proto: an L{SchemaAMP}
         """
-        return TableSyntax(proto.schema.tableNamed(inString.decode("UTF-8")))
+        return getattr(proto.schema, inString.decode("UTF-8"))
 
 
     def toString(self, inObject):
@@ -229,17 +267,98 @@
 
 class WorkItem(Record):
     """
-    An item of work.
+    A L{WorkItem} is an item of work which may be stored in a database, then
+    executed later.
 
-    @ivar workID: the unique identifier (primary key) for items of this type.
-        There must be a corresponding column in the database.
-    @type workID: L{int}
+    L{WorkItem} is an abstract class, since it is a L{Record} with no table
+    associated via L{fromTable}.  Concrete subclasses must associate a specific
+    table by inheriting like so::
 
-    @cvar created: the timestamp that a given item was created, or the column
-        describing its creation time, on the class.
-    @type created: L{datetime.datetime}
+        class MyWorkItem(WorkItem, fromTable(schema.MY_TABLE)):
+
+    Concrete L{WorkItem}s should generally not be created directly; they are
+    both created and thereby implicitly scheduled to be executed by calling
+    L{enqueueWork <twext.enterprise.ienterprise.IQueuer.enqueueWork>} with the
+    appropriate L{WorkItem} concrete subclass.  There are different queue
+    implementations (L{PeerConnectionPool} and L{LocalQueuer}, for example), so
+    the exact timing and location of the work execution may differ.
+
+    L{WorkItem}s may be constrained in the ordering and timing of their
+    execution, to control concurrency and for performance reasons repsectively.
+
+    Although all the usual database mutual-exclusion rules apply to work
+    executed in L{WorkItem.doWork}, implicit database row locking is not always
+    the best way to manage concurrency.  They have some problems, including:
+
+        - implicit locks are easy to accidentally acquire out of order, which
+          can lead to deadlocks
+
+        - implicit locks are easy to forget to acquire correctly - for example,
+          any read operation which subsequently turns into a write operation
+          must have been acquired with C{Select(..., ForUpdate=True)}, but it
+          is difficult to consistently indicate that methods which abstract out
+          read operations must pass this flag in certain cases and not others.
+
+        - implicit locks are held until the transaction ends, which means that
+          if expensive (long-running) queue operations share the same lock with
+          cheap (short-running) queue operations or user interactions, the
+          cheap operations all have to wait for the expensive ones to complete,
+          but continue to consume whatever database resources they were using.
+
+    In order to ameliorate these problems with potentiallly concurrent work
+    that uses the same resources, L{WorkItem} provides a database-wide mutex
+    that is automatically acquired at the beginning of the transaction and
+    released at the end.  To use it, simply L{align
+    <twext.enterprise.dal.record.Record.namingConvention>} the C{group}
+    attribute on your L{WorkItem} subclass with a column holding a string
+    (varchar).  L{WorkItem} subclasses with the same value for C{group} will
+    not execute their C{doWork} methods concurrently.  Furthermore, if the lock
+    cannot be quickly acquired, database resources associated with the
+    transaction attempting it will be released, and the transaction rolled back
+    until a future transaction I{can} can acquire it quickly.  If you do not
+    want any limits to concurrency, simply leave it set to C{None}.
+
+    In some applications it's possible to coalesce work together; to grab
+    multiple L{WorkItem}s in one C{doWork} transaction.  All you need to do is
+    to delete the rows which back other L{WorkItem}s from the database, and
+    they won't be processed.  Using the C{group} attribute, you can easily
+    prevent concurrency so that you can easily group these items together and
+    remove them as a set (otherwise, other workers might be attempting to
+    concurrently work on them and you'll get deletion errors).
+
+    However, if doing more work at once is less expensive, and you want to
+    avoid processing lots of individual rows in tiny transactions, you may also
+    delay the execution of a L{WorkItem} by setting its C{notBefore} attribute.
+    This must be backed by a database timestamp, so that processes which happen
+    to be restarting and examining the work to be done in the database don't
+    jump the gun and do it too early.
+
+    @cvar workID: the unique identifier (primary key) for items of this type.
+        On an instance of a concrete L{WorkItem} subclass, this attribute must
+        be an integer; on the concrete L{WorkItem} subclass itself, this
+        attribute must be a L{twext.enterprise.dal.syntax.ColumnSyntax}.  Note
+        that this is automatically taken care of if you simply have a
+        corresponding C{work_id} column in the associated L{fromTable} on your
+        L{WorkItem} subclass.  This column must be unique, and it must be an
+        integer.  In almost all cases, this column really ought to be filled
+        out by a database-defined sequence; if not, you need some other
+        mechanism for establishing a cluster-wide sequence.
+    @type workID: L{int} on instance,
+        L{twext.enterprise.dal.syntax.ColumnSyntax} on class.
+
+    @cvar notBefore: the timestamp before which this item should I{not} be
+        processed.  If unspecified, this should be the date and time of the
+        creation of the L{WorkItem}.
+    @type notBefore: L{datetime.datetime} on instance,
+        L{twext.enterprise.dal.syntax.ColumnSyntax} on class.
+
+    @ivar group: If not C{None}, a unique-to-the-database identifier for which
+        only one L{WorkItem} will execute at a time.
+    @type group: L{unicode} or L{NoneType}
     """
 
+    group = None
+
     @abstract
     def doWork(self):
         """
@@ -266,11 +385,13 @@
         @return: the relevant subclass
         @rtype: L{type}
         """
+        tableName = table.model.name
         for subcls in cls.__subclasses__():
-            if table == getattr(subcls, "table", None):
+            clstable = getattr(subcls, "table", None)
+            if table == clstable:
                 return subcls
         raise KeyError("No mapped {0} class for {1}.".format(
-            cls, table
+            cls, tableName
         ))
 
 
@@ -301,13 +422,16 @@
     response = []
 
 
+
 class IdentifyNode(Command):
     """
     Identify this node to its peer.  The connector knows which hostname it's
     looking for, and which hostname it considers itself to be, only the
     initiator (not the listener) issues this command.  This command is
-    necessary because if reverse DNS isn't set up perfectly, the listener may
-    not be able to identify its peer.
+    necessary because we don't want to rely on DNS; if reverse DNS weren't set
+    up perfectly, the listener would not be able to identify its peer, and it
+    is easier to modify local configuration so that L{socket.getfqdn} returns
+    the right value than to ensure that DNS doesself.
     """
 
     arguments = [
@@ -335,21 +459,37 @@
     """
     A connection to a peer node.  Symmetric; since the 'client' and the
     'server' both serve the same role, the logic is the same in every node.
+
+    @ivar localWorkerPool: the pool of local worker procesess that can process
+        queue work.
+    @type localWorkerPool: L{WorkerConnectionPool}
+
+    @ivar _reportedLoad: The number of outstanding requests being processed by
+        the peer of this connection, from all requestors (both the host of this
+        connection and others), as last reported by the most recent
+        L{ReportLoad} message received from the peer.
+    @type _reportedLoad: L{int}
+
+    @ivar _bonusLoad: The number of additional outstanding requests being
+        processed by the peer of this connection; the number of requests made
+        by the host of this connection since the last L{ReportLoad} message.
+    @type _bonusLoad: L{int}
     """
+    implements(_IWorkPerformer)
 
     def __init__(self, peerPool, boxReceiver=None, locator=None):
         """
-        Initialize this L{ConnectionFromPeerNode} with a reference to a pool of
-        local workers.
+        Initialize this L{ConnectionFromPeerNode} with a reference to a
+        L{PeerConnectionPool}, as well as required initialization arguments for
+        L{AMP}.
 
-        @param localWorkerPool: the pool of local worker procesess that can
-            process queue work.
-        @type localWorkerPool: L{WorkerConnectionPool}
+        @param peerPool: the connection pool within which this
+            L{ConnectionFromPeerNode} is a participant.
+        @type peerPool: L{PeerConnectionPool}
 
         @see: L{AMP.__init__}
         """
         self.peerPool = peerPool
-        self.localWorkerPool = peerPool.workerPool
         self._bonusLoad = 0
         self._reportedLoad = 0
         super(ConnectionFromPeerNode, self).__init__(peerPool.schema,
@@ -360,12 +500,11 @@
         """
         Report the current load for the local worker pool to this peer.
         """
-        return self.callRemote(ReportLoad,
-                               load=self.localWorkerPool.totalLoad())
+        return self.callRemote(ReportLoad, load=self.totalLoad())
 
 
     @ReportLoad.responder
-    def repotedLoad(self, load):
+    def reportedLoad(self, load):
         """
         The peer reports its load.
         """
@@ -410,15 +549,7 @@
         specific peer node-controller process to perform some work, having
         already determined that it's appropriate.
 
-        @param table: The table where work is waiting.
-        @type table: L{TableSyntax}
-
-        @param workID: The primary key identifier of the given work.
-        @type workID: L{int}
-
-        @return: a L{Deferred} firing with an empty dictionary when the work is
-            complete.
-        @rtype: L{Deferred} firing L{dict}
+        @see: L{_IWorkPerformer.performWork}
         """
         d = self.callRemote(PerformWork, table=table, workID=workID)
         self._bonusLoad += 1
@@ -426,6 +557,9 @@
         def performed(result):
             self._bonusLoad -= 1
             return result
+        @d.addCallback
+        def success(result):
+            return None
         return d
 
 
@@ -443,12 +577,15 @@
 
         @return: a L{Deferred} that fires when the work has been completed.
         """
-        return self.localWorkerPool.performWork(table, workID)
+        return self.peerPool.performWorkForPeer(table, workID).addCallback(
+            lambda ignored: {}
+        )
 
 
     @IdentifyNode.responder
     def identifyPeer(self, host, port):
         self.peerPool.mapPeer(host, port, self)
+        return {}
 
 
 
@@ -460,8 +597,9 @@
     L{ConnectionFromPeerNode}, but one that dispenses work to the local worker
     processes rather than to a remote connection pool.
     """
+    implements(_IWorkPerformer)
 
-    def __init__(self, maximumLoadPerWorker=0):
+    def __init__(self, maximumLoadPerWorker=5):
         self.workers = []
         self.maximumLoadPerWorker = maximumLoadPerWorker
 
@@ -488,12 +626,12 @@
         hasAvailableCapacity to process another queue item?
         """
         for worker in self.workers:
-            if worker.currentLoad() < self.maximumLoadPerWorker:
+            if worker.currentLoad < self.maximumLoadPerWorker:
                 return True
         return False
 
 
-    def totalLoad(self):
+    def allWorkerLoad(self):
         """
         The total load of all currently connected workers.
         """
@@ -526,7 +664,9 @@
             complete.
         @rtype: L{Deferred} firing L{dict}
         """
-        return self._selectLowestLoadWorker().performWork(table, workID)
+        preferredWorker = self._selectLowestLoadWorker()
+        result = preferredWorker.performWork(table, workID)
+        return result
 
 
 
@@ -534,15 +674,12 @@
     """
     An individual connection from a worker, as seem from the master's
     perspective.  L{ConnectionFromWorker}s go into a L{WorkerConnectionPool}.
-
-    @ivar workerPool: The connection pool that this individual connection is
-        participating in.
-    @type workerPool: L{WorkerConnectionPool}
     """
 
-    def __init__(self, schema, workerPool, boxReceiver=None, locator=None):
-        self.workerPool = workerPool
-        super(ConnectionFromWorker, self).__init__(schema, boxReceiver, locator)
+    def __init__(self, peerPool, boxReceiver=None, locator=None):
+        super(ConnectionFromWorker, self).__init__(peerPool.schema, boxReceiver,
+                                                   locator)
+        self.peerPool = peerPool
         self._load = 0
 
 
@@ -560,7 +697,7 @@
         state.
         """
         result = super(ConnectionFromWorker, self).startReceivingBoxes(sender)
-        self.workerPool.addWorker(self)
+        self.peerPool.workerPool.addWorker(self)
         return result
 
 
@@ -569,7 +706,7 @@
         AMP boxes will no longer be received.
         """
         result = super(ConnectionFromWorker, self).stopReceivingBoxes(reason)
-        self.workerPool.removeWorker(self)
+        self.peerPool.workerPool.removeWorker(self)
         return result
 
 
@@ -620,7 +757,7 @@
         C{self}, since C{self} is also an object that has a C{performWork}
         method.
         """
-        return succeed(self)
+        return self
 
 
     def performWork(self, table, workID):
@@ -632,9 +769,9 @@
 
     def enqueueWork(self, txn, workItemType, **kw):
         """
-        There is some work to do.  Do it, someplace else, ideally in parallel.
-        Later, let the caller know that the work has been completed by firing a
-        L{Deferred}.
+        There is some work to do.  Do it, ideally someplace else, ideally in
+        parallel.  Later, let the caller know that the work has been completed
+        by firing a L{Deferred}.
 
         @param workItemType: The type of work item to be enqueued.
         @type workItemType: A subtype of L{WorkItem}
@@ -659,21 +796,67 @@
         process has instructed this worker to do it; so, look up the data in
         the row, and do it.
         """
-        @inlineCallbacks
-        def work(txn):
-            workItemClass = WorkItem.forTable(table)
-            workItem = yield workItemClass.load(txn, workID)
-            # TODO: what if we fail?  error-handling should be recorded
-            # someplace, the row should probably be marked, re-tries should be
-            # triggerable administratively.
-            yield workItem.delete()
-            # TODO: verify that workID is the primary key someplace.
-            yield workItem.doWork()
-            returnValue({})
-        return inTransaction(self.transactionFactory, work)
+        return (ultimatelyPerform(self.transactionFactory, table, workID)
+                .addCallback(lambda ignored: {}))
 
 
 
+def ultimatelyPerform(txnFactory, table, workID):
+    """
+    Eventually, after routing the work to the appropriate place, somebody
+    actually has to I{do} it.
+
+    @param txnFactory: a 0- or 1-argument callable that creates an
+        L{IAsyncTransaction}
+    @type txnFactory: L{callable}
+
+    @param table: the table object that corresponds to the necessary work item
+    @type table: L{twext.enterprise.dal.syntax.TableSyntax}
+
+    @param workID: the ID of the work to be performed
+    @type workID: L{int}
+
+    @return: a L{Deferred} which fires with C{None} when the work has been
+        performed, or fails if the work can't be performed.
+    """
+    @inlineCallbacks
+    def work(txn):
+        workItemClass = WorkItem.forTable(table)
+        workItem = yield workItemClass.load(txn, workID)
+        if workItem.group is not None:
+            yield NamedLock.acquire(txn, workItem.group)
+        # TODO: what if we fail?  error-handling should be recorded someplace,
+        # the row should probably be marked, re-tries should be triggerable
+        # administratively.
+        yield workItem.delete()
+        # TODO: verify that workID is the primary key someplace.
+        yield workItem.doWork()
+    return inTransaction(txnFactory, work)
+
+
+
+class LocalPerformer(object):
+    """
+    Implementor of C{performWork} that does its work in the local process,
+    regardless of other conditions.
+    """
+    implements(_IWorkPerformer)
+
+    def __init__(self, txnFactory):
+        """
+        Create this L{LocalPerformer} with a transaction factory.
+        """
+        self.txnFactory = txnFactory
+
+
+    def performWork(self, table, workID):
+        """
+        Perform the given work right now.
+        """
+        return ultimatelyPerform(self.txnFactory, table, workID)
+
+
+
 class WorkerFactory(Factory, object):
     """
     Factory, to be used as the client to connect from the worker to the
@@ -724,9 +907,10 @@
     A L{WorkProposal} is a proposal for work that will be executed, perhaps on
     another node, perhaps in the future.
 
-    @ivar pool: the connection pool which this L{WorkProposal} will use to
-        submit its work.
-    @type pool: L{PeerConnectionPool}
+    @ivar _chooser: The object which will choose where the work in this
+        proposal gets performed.  This must have both a C{choosePerformer}
+        method and a C{reactor} attribute, providing an L{IReactorTime}.
+    @type _chooser: L{PeerConnectionPool} or L{LocalQueuer}
 
     @ivar txn: The transaction where the work will be enqueued.
     @type txn: L{IAsyncTransaction}
@@ -739,8 +923,8 @@
     @type kw: L{dict}
     """
 
-    def __init__(self, pool, txn, workItemType, kw):
-        self.pool = pool
+    def __init__(self, chooser, txn, workItemType, kw):
+        self._chooser = chooser
         self.txn = txn
         self.workItemType = workItemType
         self.kw = kw
@@ -756,22 +940,25 @@
         commit, and asking the local node controller process to do the work.
         """
         @passthru(self.workItemType.create(self.txn, **self.kw).addCallback)
-        def created(item):
-            self._whenProposed.callback(None)
+        def whenCreated(item):
+            self._whenProposed.callback(self)
             @self.txn.postCommit
             def whenDone():
-                self._whenCommitted.callback(None)
-                @passthru(self.pool.choosePerformer().addCallback)
-                def performerChosen(performer):
-                    @passthru(performer.performWork(item.table, item.workID))
+                self._whenCommitted.callback(self)
+                def maybeLater():
+                    performer = self._chooser.choosePerformer()
+                    @passthru(performer.performWork(item.table, item.workID)
+                              .addCallback)
                     def performed(result):
-                        self._whenExecuted.callback(None)
+                        self._whenExecuted.callback(self)
                     @performed.addErrback
                     def notPerformed(why):
                         self._whenExecuted.errback(why)
-                @performerChosen.addErrback
-                def notChosen(whyNot):
-                    self._whenExecuted.errback(whyNot)
+                reactor = self._chooser.reactor
+                when = max(0, astimestamp(item.notBefore) - reactor.seconds())
+                # TODO: Track the returned DelayedCall so it can be stopped when
+                # the service stops.
+                self._chooser.reactor.callLater(when, maybeLater)
             @self.txn.postAbort
             def whenFailed():
                 self._whenCommitted.errback(TransactionFailed)
@@ -794,8 +981,8 @@
             completed within the transaction of the L{WorkItem.doWork} that
             gets executed.
 
-        @return: a L{Deferred} that fires with C{None} when the work has been
-            completed remotely.
+        @return: a L{Deferred} that fires with this L{WorkProposal} when the
+            work has been completed remotely.
         """
         return _cloneDeferred(self._whenExecuted)
 
@@ -805,9 +992,10 @@
         Let the caller know when the work has been proposed; i.e. when the work
         is first transmitted to the database.
 
-        @return: a L{Deferred} that fires with C{None} when the relevant
-            commands have been sent to the database to create the L{WorkItem},
-            and fails if those commands do not succeed for some reason.
+        @return: a L{Deferred} that fires with this L{WorkProposal} when the
+            relevant commands have been sent to the database to create the
+            L{WorkItem}, and fails if those commands do not succeed for some
+            reason.
         """
         return _cloneDeferred(self._whenProposed)
 
@@ -818,15 +1006,15 @@
         transaction where the work was proposed has been committed to the
         database.
 
-        @return: a L{Deferred} that fires with C{None} when the relevant
-            transaction has been committed, or fails if the transaction is not
-            committed for any reason.
+        @return: a L{Deferred} that fires with this L{WorkProposal} when the
+            relevant transaction has been committed, or fails if the
+            transaction is not committed for any reason.
         """
         return _cloneDeferred(self._whenCommitted)
 
 
 
-class PeerConnectionPool(Service, object):
+class PeerConnectionPool(MultiService, object):
     """
     Each node has a L{PeerConnectionPool} connecting it to all the other nodes
     currently active on the same database.
@@ -844,8 +1032,10 @@
         up or if it is shutting down.
     @type thisProcess: L{NodeInfo}
 
-    @ivar queueProcessTimeout: The maximum amount of time allowed for a queue
-        item to be processed.  By default, 10 minutes.
+    @ivar queueProcessTimeout: The amount of time after a L{WorkItem} is
+        scheduled to be processed (its C{notBefore} attribute) that it is
+        considered to be "orphaned" and will be run by a lost-work check rather
+        than waiting for it to be requested.  By default, 10 minutes.
     @type queueProcessTimeout: L{float} (in seconds)
 
     @ivar queueDelayedProcessInterval: The amount of time between database
@@ -865,6 +1055,8 @@
     """
     implements(IQueuer)
 
+    from socket import getfqdn
+    from os import getpid
     getfqdn = staticmethod(getfqdn)
     getpid = staticmethod(getpid)
 
@@ -889,6 +1081,7 @@
             the L{WorkItem}s that this L{PeerConnectionPool} will process.
         @type schema: L{Schema}
         """
+        super(PeerConnectionPool, self).__init__()
         self.reactor = reactor
         self.transactionFactory = transactionFactory
         self.hostname = self.getfqdn()
@@ -912,13 +1105,16 @@
         self.peers.append(peer)
 
 
+    def totalLoad(self):
+        return self.workerPool.allWorkerLoad()
+
+
     def workerListenerFactory(self):
         """
         Factory that listens for connections from workers.
         """
         f = Factory()
-        f.buildProtocol = lambda addr: ConnectionFromWorker(self.schema,
-                                                            self.workerPool)
+        f.buildProtocol = lambda addr: ConnectionFromWorker(self)
         return f
 
 
@@ -929,7 +1125,7 @@
         self.peers.remove(peer)
 
 
-    def choosePerformer(self):
+    def choosePerformer(self, onlyLocally=False):
         """
         Choose a peer to distribute work to based on the current known slot
         occupancy of the other nodes.  Note that this will prefer distributing
@@ -937,20 +1133,26 @@
         should be lower-latency.  Also, if no peers are available, work will be
         submitted locally even if the worker pool is already over-subscribed.
 
-        @return: a L{Deferred <twisted.internet.defer.Deferred>} which fires
-            with the chosen 'peer', i.e. object with a C{performWork} method,
-            as soon as one is available.  Normally this will be synchronous,
-            but we need to account for the possibility that we may need to
-            connect to other hosts.
-        @rtype: L{Deferred <twisted.internet.defer.Deferred>} firing
-            L{ConnectionFromPeerNode} or L{WorkerConnectionPool}
+        @return: the chosen peer.
+        @rtype: L{_IWorkPerformer} L{ConnectionFromPeerNode} or
+            L{WorkerConnectionPool}
         """
-        if not self.workerPool.hasAvailableCapacity() and self.peers:
+        if self.workerPool.hasAvailableCapacity():
+            return self.workerPool
+        if self.peers and not onlyLocally:
             return sorted(self.peers, lambda p: p.currentLoadEstimate())[0]
         else:
-            return succeed(self.workerPool)
+            return LocalPerformer(self.transactionFactory)
 
 
+    def performWorkForPeer(self, table, workID):
+        """
+        A peer has requested us to perform some work; choose a work performer
+        local to this node, and then execute it.
+        """
+        return self.choosePerformer(onlyLocally=True).performWork(table, workID)
+
+
     def enqueueWork(self, txn, workItemType, **kw):
         """
         There is some work to do.  Do it, someplace else, ideally in parallel.
@@ -1022,19 +1224,23 @@
         """
         @inlineCallbacks
         def workCheck(txn):
-
-            nodes = [(node.hostname, node.port) for node in
-                     (yield self.activeNodes(txn))]
-            nodes.sort()
-            self._lastSeenTotalNodes = len(nodes)
-            self._lastSeenNodeIndex = nodes.index((self.thisProcess.hostname,
-                                                   self.thisProcess.port))
+            if self.thisProcess:
+                nodes = [(node.hostname, node.port) for node in
+                         (yield self.activeNodes(txn))]
+                nodes.sort()
+                self._lastSeenTotalNodes = len(nodes)
+                self._lastSeenNodeIndex = nodes.index(
+                    (self.thisProcess.hostname, self.thisProcess.port)
+                )
             for itemType in self.allWorkItemTypes():
-                for overdueItem in (
-                        yield itemType.query(
-                            txn, itemType.created > self.queueProcessTimeout
-                    )):
-                    peer = yield self.choosePerformer()
+                tooLate = datetime.utcfromtimestamp(
+                    self.reactor.seconds() - self.queueProcessTimeout
+                )
+                overdueItems = (yield itemType.query(
+                    txn, (itemType.notBefore < tooLate))
+                )
+                for overdueItem in overdueItems:
+                    peer = self.choosePerformer()
                     yield peer.performWork(overdueItem.table,
                                            overdueItem.workID)
         return inTransaction(self.transactionFactory, workCheck)
@@ -1077,11 +1283,10 @@
         @inlineCallbacks
         def startup(txn):
             endpoint = TCP4ServerEndpoint(self.reactor, self.ampPort)
-            f = Factory()
-            f.buildProtocol = self.createPeerConnection
             # If this fails, the failure mode is going to be ugly, just like all
             # conflicted-port failures.  But, at least it won't proceed.
-            yield endpoint.listen(f)
+            self._listeningPortObject = yield endpoint.listen(self.peerFactory())
+            self.ampPort = self._listeningPortObject.getHost().port
             yield Lock.exclusive(NodeInfo.table).on(txn)
             nodes = yield self.activeNodes(txn)
             selves = [node for node in nodes
@@ -1104,6 +1309,7 @@
         @self._startingUp.addBoth
         def done(result):
             self._startingUp = None
+            super(PeerConnectionPool, self).startService()
             return result
 
 
@@ -1122,7 +1328,7 @@
         if self._currentWorkDeferred is not None:
             yield self._currentWorkDeferred
         for peer in self.peers:
-            peer.transport.loseConnection()
+            peer.transport.abortConnection()
 
 
     def activeNodes(self, txn):
@@ -1151,80 +1357,80 @@
         @param node: a description of the master to connect to.
         @type node: L{NodeInfo}
         """
-        f = Factory()
-        f.buildProtocol = self.createPeerConnection
-        @passthru(node.endpoint(self.reactor).connect(f).addCallback)
-        def connected(proto):
-            self.mapPeer(node, proto)
-            proto.callRemote(IdentifyNode, self.thisProcess)
+        connected = node.endpoint(self.reactor).connect(self.peerFactory())
+        def whenConnected(proto):
+            self.mapPeer(node.hostname, node.port, proto)
+            proto.callRemote(IdentifyNode,
+                             host=self.thisProcess.hostname,
+                             port=self.thisProcess.port).addErrback(
+                                 noted, "identify"
+                             )
+        def noted(err, x="connect"):
+            log.msg("Could not {0} to cluster peer {1} because {2}"
+                    .format(x, node, str(err.value)))
+        connected.addCallbacks(whenConnected, noted)
 
 
-    def createPeerConnection(self, addr):
-        return ConnectionFromPeerNode(self)
+    def peerFactory(self):
+        """
+        Factory for peer connections.
 
+        @return: a L{Factory} that will produce L{ConnectionFromPeerNode}
+            protocols attached to this L{PeerConnectionPool}.
+        """
+        return _PeerPoolFactory(self)
 
 
-class ImmediateWorkProposal(object):
-    """
-    Like L{WorkProposal}, but for items that must be executed immediately
-    because no real queue is set up yet.
 
-    @see: L{WorkProposal}, L{NullQueuer.enqueueWork}
+class _PeerPoolFactory(Factory, object):
     """
-    def __init__(self, proposed, done):
-        self.proposed = proposed
-        self.done = done
+    Protocol factory responsible for creating L{ConnectionFromPeerNode}
+    connections, both client and server.
+    """
 
+    def __init__(self, peerConnectionPool):
+        self.peerConnectionPool = peerConnectionPool
 
-    def whenExecuted(self):
-        return _cloneDeferred(self.done)
 
+    def buildProtocol(self, addr):
+        return ConnectionFromPeerNode(self.peerConnectionPool)
 
-    def whenProposed(self):
-        return _cloneDeferred(self.proposed)
 
 
-    def whenCommitted(self):
-        return _cloneDeferred(self.done)
-
-
-
-class NullQueuer(object):
+class LocalQueuer(object):
     """
-    When work is enqueued with this queuer, it is just executed immediately,
-    within the same transaction.  While this is technically correct, it is not
-    very efficient.
+    When work is enqueued with this queuer, it is just executed locally.
     """
     implements(IQueuer)
 
+    def __init__(self, txnFactory, reactor=None):
+        self.txnFactory = txnFactory
+        if reactor is None:
+            from twisted.internet import reactor
+        self.reactor = reactor
+
+
+    def choosePerformer(self):
+        """
+        Choose to perform the work locally.
+        """
+        return LocalPerformer(self.txnFactory)
+
+
     def enqueueWork(self, txn, workItemType, **kw):
         """
-        Do this work immediately.
+        Do this work in the local process.
 
         @see: L{PeerConnectionPool.enqueueWork}
 
         @return: a pseudo work proposal, since everything completes at the same
             time.
-        @rtype: L{ImmediateWorkProposal}
+        @rtype: L{WorkProposal}
         """
-        proposed = Deferred()
-        done = Deferred()
-        @inlineCallbacks
-        def doit():
-            item = yield self.workItemType.create(self.txn, **self.kw)
-            proposed.callback(True)
-            yield item.delete()
-            yield item.doWork()
-        @txn.postCommit
-        def committed():
-            done.callback(True)
-        @txn.postAbort
-        def aborted():
-            tf = TransactionFailed()
-            done.errback(tf)
-            if not proposed.called:
-                proposed.errback(tf)
-        return ImmediateWorkProposal(proposed, done)
+        wp = WorkProposal(self, txn, workItemType, kw)
+        wp._start()
+        return wp
 
 
 
+

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_adbapi2.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_adbapi2.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_adbapi2.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -30,6 +30,7 @@
 from twisted.trial.unittest import TestCase
 
 from twisted.internet.task import Clock
+from twisted.internet.defer import Deferred, fail
 
 from twisted.internet.interfaces import IReactorThreads
 
@@ -46,6 +47,7 @@
 from twext.enterprise.adbapi2 import DEFAULT_PARAM_STYLE
 from twext.enterprise.adbapi2 import ConnectionPool
 from twext.internet.threadutils import ThreadHolder
+from twext.enterprise.adbapi2 import Commit
 
 
 def resultOf(deferred, propagate=False):
@@ -72,11 +74,24 @@
     """
 
     def assertResultList(self, resultList, expected):
+        """
+        Assert that a list created with L{resultOf} contais the expected
+        result.
+
+        @param resultList: The return value of L{resultOf}.
+        @type resultList: L{list}
+
+        @param expected: The expected value that should be present in the list;
+            a L{Failure} if an exception is expected to be raised.
+        """
         if not resultList:
             self.fail("No result; Deferred didn't fire yet.")
         else:
             if isinstance(resultList[0], Failure):
-                resultList[0].raiseException()
+                if isinstance(expected, Failure):
+                    resultList[0].trap(expected.type)
+                else:
+                    resultList[0].raiseException()
             else:
                 self.assertEqual(resultList, [expected])
 
@@ -137,6 +152,8 @@
         Child.__init__(self, factory)
         self.id = factory.idcounter.next()
         self._executeFailQueue = []
+        self._commitCount = 0
+        self._rollbackCount = 0
 
 
     def executeWillFail(self, thunk):
@@ -158,12 +175,14 @@
 
 
     def commit(self):
+        self._commitCount += 1
         if self.parent.commitFail:
             self.parent.commitFail = False
             raise CommitFail()
 
 
     def rollback(self):
+        self._rollbackCount += 1
         if self.parent.rollbackFail:
             self.parent.rollbackFail = False
             raise RollbackFail()
@@ -369,11 +388,11 @@
 
 
     @property
-    def _q(self):
+    def _get_q(self):
         return self._q_
 
 
-    @_q.setter
+    @_get_q.setter
     def _q(self, newq):
         if newq is not None:
             oget = newq.get
@@ -869,9 +888,10 @@
         executed) will result in all of its Deferreds immediately failing and
         none of the queued statements being executed.
         """
+        active = []
         # Use up the available connections ...
         for i in xrange(self.pool.maxConnections):
-            self.createTransaction()
+            active.append(self.createTransaction())
         # ... so that this one has to be spooled.
         spooled = self.createTransaction()
         result = self.resultOf(spooled.execSQL("alpha"))
@@ -908,6 +928,25 @@
         self.assertEquals(stopResult, [None])
 
 
+    def test_garbageCollectedTransactionAborts(self):
+        """
+        When an L{IAsyncTransaction} is garbage collected, it ought to abort
+        itself.
+        """
+        t = self.createTransaction()
+        self.resultOf(t.execSQL("echo", []))
+        import gc
+        conns = self.factory.connections
+        self.assertEquals(len(conns), 1)
+        self.assertEquals(conns[0]._rollbackCount, 0)
+        del t
+        gc.collect()
+        self.flushHolders()
+        self.assertEquals(len(conns), 1)
+        self.assertEquals(conns[0]._rollbackCount, 1)
+        self.assertEquals(conns[0]._commitCount, 0)
+
+
     def test_tooManyConnectionsWhileOthersFinish(self):
         """
         L{ConnectionPool.connection} will not spawn more than the maximum
@@ -1080,6 +1119,87 @@
         return t
 
 
+    def test_preCommitSuccess(self):
+        """
+        Callables passed to L{IAsyncTransaction.preCommit} will be invoked upon
+        commit.
+        """
+        txn = self.createTransaction()
+        def simple():
+            simple.done = True
+        simple.done = False
+        txn.preCommit(simple)
+        self.assertEquals(simple.done, False)
+        result = self.resultOf(txn.commit())
+        self.assertEquals(len(result), 1)
+        self.assertEquals(simple.done, True)
+
+
+    def test_deferPreCommit(self):
+        """
+        If callables passed to L{IAsyncTransaction.preCommit} return
+        L{Deferred}s, they will defer the actual commit operation until it has
+        fired.
+        """
+        txn = self.createTransaction()
+        d = Deferred()
+        def wait():
+            wait.started = True
+            def executed(it):
+                wait.sqlResult = it
+            # To make sure the _underlying_ commit operation was Deferred, we
+            # have to execute some SQL to make sure it happens.
+            return (d.addCallback(lambda ignored: txn.execSQL("some test sql"))
+                     .addCallback(executed))
+        wait.started = False
+        wait.sqlResult = None
+        txn.preCommit(wait)
+        result = self.resultOf(txn.commit())
+        self.flushHolders()
+        self.assertEquals(wait.started, True)
+        self.assertEquals(wait.sqlResult, None)
+        self.assertEquals(result, [])
+        d.callback(None)
+        # allow network I/O for pooled / networked implementation; there should
+        # be the commit message now.
+        self.flushHolders()
+        self.assertEquals(len(result), 1)
+        self.assertEquals(wait.sqlResult, [[1, "some test sql"]])
+
+
+    def test_failPreCommit(self):
+        """
+        If callables passed to L{IAsyncTransaction.preCommit} raise an
+        exception or return a Failure, subsequent callables will not be run,
+        and the transaction will be aborted.
+        """
+        def test(flawedCallable, exc):
+            # Set up.
+            test.committed = False
+            test.aborted = False
+            # Create transaction and add monitoring hooks.
+            txn = self.createTransaction()
+            def didCommit():
+                test.committed = True
+            def didAbort():
+                test.aborted = True
+            txn.postCommit(didCommit)
+            txn.postAbort(didAbort)
+            txn.preCommit(flawedCallable)
+            result = self.resultOf(txn.commit())
+            self.flushHolders()
+            self.assertResultList(result, Failure(exc()))
+            self.assertEquals(test.committed, False)
+            self.assertEquals(test.aborted, True)
+
+        def failer():
+            return fail(ZeroDivisionError())
+        def raiser():
+            raise EOFError()
+        test(failer, ZeroDivisionError)
+        test(raiser, EOFError)
+
+
     def test_noOpCommitDoesntHinderReconnection(self):
         """
         Until you've executed a query or performed a statement on an ADBAPI
@@ -1490,6 +1610,8 @@
         them.  Flush the locally logged error of the given type and return
         L{UnknownRemoteError}.
         """
+        if err in Commit.errors:
+            return err
         self.flushLoggedErrors(err)
         return FailsafeException
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_fixtures.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_fixtures.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_fixtures.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Added: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_locking.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_locking.py	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_locking.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,78 @@
+##
+# Copyright (c) 2012-2013 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.
+##
+
+"""
+Tests for mutual exclusion locks.
+"""
+
+from twisted.internet.defer import inlineCallbacks
+from twisted.trial.unittest import TestCase
+
+from twext.enterprise.fixtures import buildConnectionPool
+from twext.enterprise.locking import NamedLock
+from twext.enterprise.dal.syntax import Select
+from twext.enterprise.locking import LockSchema
+
+schemaText = """
+create table NAMED_LOCK (LOCK_NAME varchar(255) unique primary key);
+"""
+
+class TestLocking(TestCase):
+    """
+    Test locking and unlocking a database row.
+    """
+
+    def setUp(self):
+        """
+        Build a connection pool for the tests to use.
+        """
+        self.pool = buildConnectionPool(self, schemaText)
+
+
+    @inlineCallbacks
+    def test_acquire(self):
+        """
+        Acquiring a lock adds a row in that transaction.
+        """
+        txn = self.pool.connection()
+        yield NamedLock.acquire(txn, u"a test lock")
+        rows = yield Select(From=LockSchema.NAMED_LOCK).on(txn)
+        self.assertEquals(rows, [tuple([u"a test lock"])])
+
+
+    @inlineCallbacks
+    def test_release(self):
+        """
+        Releasing an acquired lock removes the row.
+        """
+        txn = self.pool.connection()
+        lck = yield NamedLock.acquire(txn, u"a test lock")
+        yield lck.release()
+        rows = yield Select(From=LockSchema.NAMED_LOCK).on(txn)
+        self.assertEquals(rows, [])
+
+
+    @inlineCallbacks
+    def test_autoRelease(self):
+        """
+        Committing a transaction automatically releases all of its locks.
+        """
+        txn = self.pool.connection()
+        yield NamedLock.acquire(txn, u"something")
+        yield txn.commit()
+        txn2 = self.pool.connection()
+        rows = yield Select(From=LockSchema.NAMED_LOCK).on(txn2)
+        self.assertEquals(rows, [])

Added: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_queue.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_queue.py	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_queue.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,629 @@
+##
+# Copyright (c) 2012-2013 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.
+##
+
+"""
+Tests for L{twext.enterprise.queue}.
+"""
+
+import datetime
+
+# TODO: There should be a store-building utility within twext.enterprise.
+
+from twisted.protocols.amp import Command
+from twisted.internet.task import Clock as _Clock
+
+from txdav.common.datastore.test.util import buildStore
+
+from twext.enterprise.dal.syntax import SchemaSyntax, Select
+from twext.enterprise.dal.record import fromTable
+from twext.enterprise.dal.test.test_parseschema import SchemaTestHelper
+
+from twext.enterprise.queue import (
+    inTransaction, PeerConnectionPool, WorkItem, astimestamp
+)
+
+from twisted.trial.unittest import TestCase
+from twisted.internet.defer import (
+    Deferred, inlineCallbacks, gatherResults, passthru#, returnValue
+)
+
+from twisted.application.service import Service, MultiService
+
+from twext.enterprise.queue import (
+    LocalPerformer, _IWorkPerformer, WorkerConnectionPool, SchemaAMP,
+    TableSyntaxByName
+)
+
+from twext.enterprise.dal.record import Record
+
+from twext.enterprise.queue import ConnectionFromPeerNode
+from twext.enterprise.fixtures import buildConnectionPool
+from zope.interface.verify import verifyObject
+from twisted.test.proto_helpers import StringTransport
+
+class Clock(_Clock):
+    """
+    More careful L{IReactorTime} fake which mimics the exception behavior of
+    the real reactor.
+    """
+
+    def callLater(self, _seconds, _f, *args, **kw):
+        if _seconds < 0:
+            raise ValueError("%s<0: "%(_seconds,))
+        return super(Clock, self).callLater(_seconds, _f, *args, **kw)
+
+
+
+def transactionally(transactionCreator):
+    """
+    Perform the decorated function immediately in a transaction, replacing its
+    name with a L{Deferred}.
+
+    Use like so::
+
+        @transactionally(connectionPool.connection)
+        @inlineCallbacks
+        def it(txn):
+            yield txn.doSomething()
+        it.addCallback(firedWhenDone)
+
+    @param transactionCreator: A 0-arg callable that returns an
+        L{IAsyncTransaction}.
+    """
+    def thunk(operation):
+        return inTransaction(transactionCreator, operation)
+    return thunk
+
+
+
+class UtilityTests(TestCase):
+    """
+    Tests for supporting utilities.
+    """
+
+    def test_inTransactionSuccess(self):
+        """
+        L{inTransaction} invokes its C{transactionCreator} argument, and then
+        returns a L{Deferred} which fires with the result of its C{operation}
+        argument when it succeeds.
+        """
+        class faketxn(object):
+            def __init__(self):
+                self.commits = []
+                self.aborts = []
+            def commit(self):
+                self.commits.append(Deferred())
+                return self.commits[-1]
+            def abort(self):
+                self.aborts.append(Deferred())
+                return self.aborts[-1]
+
+        createdTxns = []
+        def createTxn():
+            createdTxns.append(faketxn())
+            return createdTxns[-1]
+        dfrs = []
+        def operation(t):
+            self.assertIdentical(t, createdTxns[-1])
+            dfrs.append(Deferred())
+            return dfrs[-1]
+        d = inTransaction(createTxn, operation)
+        x = []
+        d.addCallback(x.append)
+        self.assertEquals(x, [])
+        self.assertEquals(len(dfrs), 1)
+        dfrs[0].callback(35)
+        # Commit in progress, so still no result...
+        self.assertEquals(x, [])
+        createdTxns[0].commits[0].callback(42)
+        # Committed, everything's done.
+        self.assertEquals(x, [35])
+
+
+
+class SimpleSchemaHelper(SchemaTestHelper):
+    def id(self):
+        return 'worker'
+
+SQL = passthru
+
+schemaText = SQL("""
+    create table DUMMY_WORK_ITEM (WORK_ID integer primary key,
+                                  NOT_BEFORE timestamp,
+                                  A integer, B integer);
+    create table DUMMY_WORK_DONE (WORK_ID integer primary key,
+                                  A_PLUS_B integer);
+""")
+
+nodeSchema = SQL("""
+    create table NODE_INFO (HOSTNAME varchar(255) not null,
+                            PID integer not null,
+                            PORT integer not null,
+                            TIME timestamp default current_timestamp not null,
+                            primary key (HOSTNAME, PORT));
+""")
+
+schema = SchemaSyntax(SimpleSchemaHelper().schemaFromString(schemaText))
+
+dropSQL = ["drop table {name}".format(name=table.model.name)
+           for table in schema]
+
+
+class DummyWorkDone(Record, fromTable(schema.DUMMY_WORK_DONE)):
+    """
+    Work result.
+    """
+
+
+
+class DummyWorkItem(WorkItem, fromTable(schema.DUMMY_WORK_ITEM)):
+    """
+    Sample L{WorkItem} subclass that adds two integers together and stores them
+    in another table.
+    """
+
+    def doWork(self):
+        return DummyWorkDone.create(self.transaction, workID=self.workID,
+                                    aPlusB=self.a + self.b)
+
+
+
+class SchemaAMPTests(TestCase):
+    """
+    Tests for L{SchemaAMP} faithfully relaying tables across the wire.
+    """
+
+    def test_sendTableWithName(self):
+        """
+        You can send a reference to a table through a L{SchemaAMP} via
+        L{TableSyntaxByName}.
+        """
+        client = SchemaAMP(schema)
+        class SampleCommand(Command):
+            arguments = [('table', TableSyntaxByName())]
+        class Receiver(SchemaAMP):
+            @SampleCommand.responder
+            def gotIt(self, table):
+                self.it = table
+                return {}
+        server = Receiver(schema)
+        clientT = StringTransport()
+        serverT = StringTransport()
+        client.makeConnection(clientT)
+        server.makeConnection(serverT)
+        client.callRemote(SampleCommand, table=schema.DUMMY_WORK_ITEM)
+        server.dataReceived(clientT.io.getvalue())
+        self.assertEqual(server.it, schema.DUMMY_WORK_ITEM)
+
+
+
+
+class WorkItemTests(TestCase):
+    """
+    A L{WorkItem} is an item of work that can be executed.
+    """
+
+    def test_forTable(self):
+        """
+        L{WorkItem.forTable} returns L{WorkItem} subclasses mapped to the given
+        table.
+        """
+        self.assertIdentical(WorkItem.forTable(schema.DUMMY_WORK_ITEM),
+                             DummyWorkItem)
+
+
+
+class WorkerConnectionPoolTests(TestCase):
+    """
+    A L{WorkerConnectionPool} is responsible for managing, in a node's
+    controller (master) process, the collection of worker (slave) processes
+    that are capable of executing queue work.
+    """
+
+
+
+class PeerConnectionPoolUnitTests(TestCase):
+    """
+    L{PeerConnectionPool} has many internal components.
+    """
+    def setUp(self):
+        """
+        Create a L{PeerConnectionPool} that is just initialized enough.
+        """
+        self.pcp = PeerConnectionPool(None, None, 4321, schema)
+
+
+    def checkPerformer(self, cls):
+        """
+        Verify that the performer returned by
+        L{PeerConnectionPool.choosePerformer}.
+        """
+        performer = self.pcp.choosePerformer()
+        self.failUnlessIsInstance(performer, cls)
+        verifyObject(_IWorkPerformer, performer)
+
+
+    def test_choosingPerformerWhenNoPeersAndNoWorkers(self):
+        """
+        If L{PeerConnectionPool.choosePerformer} is invoked when no workers
+        have spawned and no peers have established connections (either incoming
+        or outgoing), then it chooses an implementation of C{performWork} that
+        simply executes the work locally.
+        """
+        self.checkPerformer(LocalPerformer)
+
+
+    def test_choosingPerformerWithLocalCapacity(self):
+        """
+        If L{PeerConnectionPool.choosePerformer} is invoked when some workers
+        have spawned, then it should choose the worker pool as the local
+        performer.
+        """
+        # Give it some local capacity.
+        wlf = self.pcp.workerListenerFactory()
+        proto = wlf.buildProtocol(None)
+        proto.makeConnection(StringTransport())
+        # Sanity check.
+        self.assertEqual(len(self.pcp.workerPool.workers), 1)
+        self.assertEqual(self.pcp.workerPool.hasAvailableCapacity(), True)
+        # Now it has some capacity.
+        self.checkPerformer(WorkerConnectionPool)
+
+
+    def test_choosingPerformerFromNetwork(self):
+        """
+        If L{PeerConnectionPool.choosePerformer} is invoked when no workers
+        have spawned but some peers have connected, then it should choose a
+        connection from the network to perform it.
+        """
+        peer = PeerConnectionPool(None, None, 4322, schema)
+        local = self.pcp.peerFactory().buildProtocol(None)
+        remote = peer.peerFactory().buildProtocol(None)
+        connection = Connection(local, remote)
+        connection.start()
+        self.checkPerformer(ConnectionFromPeerNode)
+
+
+    def test_performingWorkOnNetwork(self):
+        """
+        The L{PerformWork} command will get relayed to the remote peer
+        controller.
+        """
+        peer = PeerConnectionPool(None, None, 4322, schema)
+        local = self.pcp.peerFactory().buildProtocol(None)
+        remote = peer.peerFactory().buildProtocol(None)
+        connection = Connection(local, remote)
+        connection.start()
+        d = Deferred()
+        class DummyPerformer(object):
+            def performWork(self, table, workID):
+                self.table = table
+                self.workID = workID
+                return d
+        # Doing real database I/O in this test would be tedious so fake the
+        # first method in the call stack which actually talks to the DB.
+        dummy = DummyPerformer()
+        def chooseDummy(onlyLocally=False):
+            return dummy
+        peer.choosePerformer = chooseDummy
+        performed = local.performWork(schema.DUMMY_WORK_ITEM, 7384)
+        performResult = []
+        performed.addCallback(performResult.append)
+        # Sanity check.
+        self.assertEquals(performResult, [])
+        connection.flush()
+        self.assertEquals(dummy.table, schema.DUMMY_WORK_ITEM)
+        self.assertEquals(dummy.workID, 7384)
+        self.assertEquals(performResult, [])
+        d.callback(128374)
+        connection.flush()
+        self.assertEquals(performResult, [None])
+
+
+    @inlineCallbacks
+    def test_notBeforeWhenCheckingForLostWork(self):
+        """
+        L{PeerConnectionPool._periodicLostWorkCheck} should execute any
+        outstanding work items, but only those that are expired.
+        """
+        dbpool = buildConnectionPool(self, schemaText + nodeSchema)
+        # An arbitrary point in time.
+        fakeNow = datetime.datetime(2012, 12, 12, 12, 12, 12)
+        # *why* does datetime still not have .astimestamp()
+        sinceEpoch = astimestamp(fakeNow)
+        clock = Clock()
+        clock.advance(sinceEpoch)
+        qpool = PeerConnectionPool(clock, dbpool.connection, 0, schema)
+
+        # Let's create a couple of work items directly, not via the enqueue
+        # method, so that they exist but nobody will try to immediately execute
+        # them.
+
+        @transactionally(dbpool.connection)
+        @inlineCallbacks
+        def setup(txn):
+            # First, one that's right now.
+            yield DummyWorkItem.create(txn, a=1, b=2, notBefore=fakeNow)
+
+            # Next, create one that's actually far enough into the past to run.
+            yield DummyWorkItem.create(
+                txn, a=3, b=4, notBefore=(
+                    # Schedule it in the past so that it should have already run.
+                    fakeNow - datetime.timedelta(
+                        seconds=qpool.queueProcessTimeout + 20
+                    )
+                )
+            )
+
+            # Finally, one that's actually scheduled for the future.
+            yield DummyWorkItem.create(
+                txn, a=10, b=20, notBefore=fakeNow + datetime.timedelta(1000)
+            )
+        yield setup
+        yield qpool._periodicLostWorkCheck()
+        @transactionally(dbpool.connection)
+        def check(txn):
+            return DummyWorkDone.all(txn)
+        every = yield check
+        self.assertEquals([x.aPlusB for x in every], [7])
+
+
+    @inlineCallbacks
+    def test_notBeforeWhenEnqueueing(self):
+        """
+        L{PeerConnectionPool.enqueueWork} enqueues some work immediately, but
+        only executes it when enough time has elapsed to allow the C{notBefore}
+        attribute of the given work item to have passed.
+        """
+        dbpool = buildConnectionPool(self, schemaText + nodeSchema)
+        fakeNow = datetime.datetime(2012, 12, 12, 12, 12, 12)
+        sinceEpoch = astimestamp(fakeNow)
+        clock = Clock()
+        clock.advance(sinceEpoch)
+        qpool = PeerConnectionPool(clock, dbpool.connection, 0, schema)
+        realChoosePerformer = qpool.choosePerformer
+        performerChosen = []
+        def catchPerformerChoice():
+            result = realChoosePerformer()
+            performerChosen.append(True)
+            return result
+        qpool.choosePerformer = catchPerformerChoice
+        @transactionally(dbpool.connection)
+        def check(txn):
+            return qpool.enqueueWork(
+                txn, DummyWorkItem, a=3, b=9,
+                notBefore=datetime.datetime(2012, 12, 12, 12, 12, 20)
+            ).whenProposed()
+
+        proposal = yield check
+
+        # This is going to schedule the work to happen with some asynchronous
+        # I/O in the middle; this is a problem because how do we know when it's
+        # time to check to see if the work has started?  We need to intercept
+        # the thing that kicks off the work; we can then wait for the work
+        # itself.
+
+        self.assertEquals(performerChosen, [])
+
+        # Advance to exactly the appointed second.
+        clock.advance(20 - 12)
+        self.assertEquals(performerChosen, [True])
+
+        # FIXME: if this fails, it will hang, but that's better than no
+        # notification that it is broken at all.
+
+        result = yield proposal.whenExecuted()
+        self.assertIdentical(result, proposal)
+
+
+    @inlineCallbacks
+    def test_notBeforeBefore(self):
+        """
+        L{PeerConnectionPool.enqueueWork} will execute its work immediately if
+        the C{notBefore} attribute of the work item in question is in the past.
+        """
+        dbpool = buildConnectionPool(self, schemaText + nodeSchema)
+        fakeNow = datetime.datetime(2012, 12, 12, 12, 12, 12)
+        sinceEpoch = astimestamp(fakeNow)
+        clock = Clock()
+        clock.advance(sinceEpoch)
+        qpool = PeerConnectionPool(clock, dbpool.connection, 0, schema)
+        realChoosePerformer = qpool.choosePerformer
+        performerChosen = []
+        def catchPerformerChoice():
+            result = realChoosePerformer()
+            performerChosen.append(True)
+            return result
+        qpool.choosePerformer = catchPerformerChoice
+        @transactionally(dbpool.connection)
+        def check(txn):
+            return qpool.enqueueWork(
+                txn, DummyWorkItem, a=3, b=9,
+                notBefore=datetime.datetime(2012, 12, 12, 12, 12, 0)
+            ).whenProposed()
+        proposal = yield check
+
+        clock.advance(1000)
+        # Advance far beyond the given timestamp.
+        self.assertEquals(performerChosen, [True])
+
+        result = yield proposal.whenExecuted()
+        self.assertIdentical(result, proposal)
+
+
+
+class HalfConnection(object):
+    def __init__(self, protocol):
+        self.protocol = protocol
+        self.transport = StringTransport()
+
+
+    def start(self):
+        """
+        Hook up the protocol and the transport.
+        """
+        self.protocol.makeConnection(self.transport)
+
+
+    def extract(self):
+        """
+        Extract the data currently present in this protocol's output buffer.
+        """
+        io = self.transport.io
+        value = io.getvalue()
+        io.seek(0)
+        io.truncate()
+        return value
+
+
+    def deliver(self, data):
+        """
+        Deliver the given data to this L{HalfConnection}'s protocol's
+        C{dataReceived} method.
+
+        @return: a boolean indicating whether any data was delivered.
+        @rtype: L{bool}
+        """
+        if data:
+            self.protocol.dataReceived(data)
+            return True
+        return False
+
+
+
+class Connection(object):
+
+    def __init__(self, local, remote):
+        """
+        Connect two protocol instances to each other via string transports.
+        """
+        self.receiver = HalfConnection(local)
+        self.sender = HalfConnection(remote)
+
+
+    def start(self):
+        """
+        Start up the connection.
+        """
+        self.sender.start()
+        self.receiver.start()
+
+
+    def pump(self):
+        """
+        Relay data in one direction between the two connections.
+        """
+        result = self.receiver.deliver(self.sender.extract())
+        self.receiver, self.sender = self.sender, self.receiver
+        return result
+
+    def flush(self, turns=10):
+        """
+        Keep relaying data until there's no more.
+        """
+        for x in range(turns):
+            if not (self.pump() or self.pump()):
+                return
+
+
+
+class PeerConnectionPoolIntegrationTests(TestCase):
+    """
+    L{PeerConnectionPool} is the service responsible for coordinating
+    eventually-consistent task queuing within a cluster.
+    """
+
+    @inlineCallbacks
+    def setUp(self):
+        """
+        L{PeerConnectionPool} requires access to a database and the reactor.
+        """
+        self.store = yield buildStore(self, None)
+        def doit(txn):
+            return txn.execSQL(schemaText)
+        yield inTransaction(lambda: self.store.newTransaction("bonus schema"),
+                            doit)
+        def deschema():
+            @inlineCallbacks
+            def deletestuff(txn):
+                for stmt in dropSQL:
+                    yield txn.execSQL(stmt)
+            return inTransaction(self.store.newTransaction, deletestuff)
+        self.addCleanup(deschema)
+
+        from twisted.internet import reactor
+        self.node1 = PeerConnectionPool(
+            reactor, self.store.newTransaction, 0, schema)
+        self.node2 = PeerConnectionPool(
+            reactor, self.store.newTransaction, 0, schema)
+
+        class FireMeService(Service, object):
+            def __init__(self, d):
+                super(FireMeService, self).__init__()
+                self.d = d
+            def startService(self):
+                self.d.callback(None)
+        d1 = Deferred()
+        d2 = Deferred()
+        FireMeService(d1).setServiceParent(self.node1)
+        FireMeService(d2).setServiceParent(self.node2)
+        ms = MultiService()
+        self.node1.setServiceParent(ms)
+        self.node2.setServiceParent(ms)
+        ms.startService()
+        self.addCleanup(ms.stopService)
+        yield gatherResults([d1, d2])
+        self.store.queuer = self.node1
+
+
+    def test_currentNodeInfo(self):
+        """
+        There will be two C{NODE_INFO} rows in the database, retrievable as two
+        L{NodeInfo} objects, once both nodes have started up.
+        """
+        @inlineCallbacks
+        def check(txn):
+            self.assertEquals(len((yield self.node1.activeNodes(txn))), 2)
+            self.assertEquals(len((yield self.node2.activeNodes(txn))), 2)
+        return inTransaction(self.store.newTransaction, check)
+
+
+    @inlineCallbacks
+    def test_enqueueHappyPath(self):
+        """
+        When a L{WorkItem} is scheduled for execution via
+        L{PeerConnectionPool.enqueueWork} its C{doWork} method will be invoked
+        by the time the L{Deferred} returned from the resulting
+        L{WorkProposal}'s C{whenExecuted} method has fired.
+        """
+        # TODO: this exact test should run against LocalQueuer as well.
+        def operation(txn):
+            # TODO: how does 'enqueue' get associated with the transaction? This
+            # is not the fact with a raw t.w.enterprise transaction.  Should
+            # probably do something with components.
+            return txn.enqueue(DummyWorkItem, a=3, b=4, workID=4321,
+                               notBefore=datetime.datetime.utcnow())
+        result = yield inTransaction(self.store.newTransaction, operation)
+        # Wait for it to be executed.  Hopefully this does not time out :-\.
+        yield result.whenExecuted()
+        def op2(txn):
+            return Select([schema.DUMMY_WORK_DONE.WORK_ID,
+                           schema.DUMMY_WORK_DONE.A_PLUS_B],
+                           From=schema.DUMMY_WORK_DONE).on(txn)
+        rows = yield inTransaction(self.store.newTransaction, op2)
+        self.assertEquals(rows, [[4321, 7]])
+
+

Added: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_util.py	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,38 @@
+##
+# Copyright (c) 2012-2013 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.
+##
+
+import datetime
+
+from twisted.trial.unittest import TestCase
+
+from twext.enterprise.util import parseSQLTimestamp
+
+class TimestampTests(TestCase):
+    """
+    Tests for date-related functions.
+    """
+
+    def test_parseSQLTimestamp(self):
+        """
+        L{parseSQLTimestamp} parses the traditional SQL timestamp.
+        """
+        tests = (
+            ("2012-04-04 12:34:56", datetime.datetime(2012, 4, 4, 12, 34, 56)),
+            ("2012-12-31 01:01:01", datetime.datetime(2012, 12, 31, 1, 1, 1)),
+        )
+
+        for sqlStr, result in tests:
+            self.assertEqual(parseSQLTimestamp(sqlStr), result)

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/enterprise/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
-
+# -*- test-case-name: twext.enterprise.test.test_util -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -20,8 +20,22 @@
 """
 
 from datetime import datetime
-from twistedcaldav.dateops import SQL_TIMESTAMP_FORMAT
 
+SQL_TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
+
+
+
+def parseSQLTimestamp(ts):
+    """
+    Parse an SQL timestamp string.
+    """
+    # Handle case where fraction seconds may not be present
+    if len(ts) < len(SQL_TIMESTAMP_FORMAT):
+        ts += ".0"
+    return datetime.strptime(ts, SQL_TIMESTAMP_FORMAT)
+
+
+
 def mapOracleOutputType(column):
     """
     Map a single output value from cx_Oracle based on some rules and

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/adaptendpoint.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/adaptendpoint.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/adaptendpoint.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.internet.test.test_adaptendpoint -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/decorate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/decorate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/decorate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/gaiendpoint.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/gaiendpoint.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/gaiendpoint.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.internet.test.test_gaiendpoint -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/sendfdport.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/sendfdport.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/sendfdport.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.internet.test.test_sendfdport -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/spawnsvc.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/spawnsvc.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/spawnsvc.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/ssl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/ssl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/ssl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/tcp.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/tcp.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/tcp.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_adaptendpoint.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_adaptendpoint.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_adaptendpoint.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_gaiendpoint.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_gaiendpoint.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_gaiendpoint.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_sendfdport.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_sendfdport.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/test/test_sendfdport.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.internet.test.test_sendfdport -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/internet/threadutils.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/internet/threadutils.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/internet/threadutils.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/patches.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/patches.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/patches.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/protocols/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/clsprop.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/clsprop.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/clsprop.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/filepath.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/filepath.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/filepath.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.python.test.test_filepath -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/log.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/log.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/log.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/parallel.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/parallel.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/parallel.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.python.test.test_parallel -*-
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/plistlib.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/plistlib.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/plistlib.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendfd.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendfd.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendfd.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.python.test.test_sendmsg -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendmsg.c
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendmsg.c	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/sendmsg.c	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Apple Inc. All rights reserved.
+ * Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/pullpipe.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/pullpipe.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/pullpipe.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 # -*- test-case-name: twext.python.test.test_sendmsg -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_filepath.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_filepath.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_filepath.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_log.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_log.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_log.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_parallel.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_parallel.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_parallel.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_sendmsg.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_sendmsg.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/test/test_sendmsg.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/python/vcomponent.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/python/vcomponent.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/python/vcomponent.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 
 ##
 # Copyright (c) 2009 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/basic.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/basic.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/basic.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_httpauth -*-
 ##
 # Copyright (c) 2006-2009 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/digest.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/digest.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/digest.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_httpauth -*-
 ##
 # Copyright (c) 2006-2009 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/interfaces.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/interfaces.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/interfaces.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 ##
 # Copyright (c) 2004-2007 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/wrapper.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/wrapper.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/auth/wrapper.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_httpauth -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_cgi,twext.web2.test.test_http -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/http.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/http.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/channel/http.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_http -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2008-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2008-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_client -*-
 ##
 # Copyright (c) 2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/http.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/http.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/http.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_client -*-
 ##
 # Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/interfaces.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/interfaces.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/client/interfaces.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_client -*-
 ##
 # Copyright (c) 2007 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 
 ##
 # Copyright (c) 2009 Twisted Matrix Laboratories.
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/auth.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/auth.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/auth.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/fileop.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/fileop.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/fileop.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/http.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/http.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/http.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/idav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/idav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/idav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/acl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/acl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/acl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_lock -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/copymove.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/copymove.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/copymove.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_copy,twext.web2.dav.test.test_move -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_delete -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/delete_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_delete -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/get.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/get.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/get.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_lock -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/lock.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/lock.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/lock.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_lock -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/mkcol.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/mkcol.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/mkcol.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_mkcol -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/propfind.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/propfind.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/propfind.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_prop.PROP.test_PROPFIND -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -8,10 +8,10 @@
 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 # copies of the Software, and to permit persons to whom the Software is
 # furnished to do so, subject to the following conditions:
-# 
+#
 # The above copyright notice and this permission notice shall be included in all
 # copies or substantial portions of the Software.
-# 
+#
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -40,7 +40,7 @@
 from twext.web2 import responsecode
 from twext.web2.http import StatusResponse
 from txdav.xml import element as davxml
-from twext.web2.dav.http import MultiStatusResponse, statusForFailure,\
+from twext.web2.dav.http import MultiStatusResponse, statusForFailure, \
     ErrorResponse
 from twext.web2.dav.util import normalizeURL, davXMLFromStream
 
@@ -107,15 +107,15 @@
     #
     request_uri = request.uri
     depth = request.headers.getHeader("depth", "infinity")
-    
+
     # By policy we will never allow a depth:infinity propfind
     if depth == "infinity":
         raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.PropfindFiniteDepth()))
 
     # Look for Prefer header first, then try Brief
     prefer = request.headers.getHeader("prefer", {})
-    returnMinimal = "return-minimal" in prefer
-    noRoot = "depth-noroot" in prefer
+    returnMinimal = any([key == "return" and value == "minimal" for key, value, _ignore_args in prefer])
+    noRoot = any([key == "depth-noroot" and value is None for key, value, _ignore_args in prefer])
     if not returnMinimal:
         returnMinimal = request.headers.getHeader("brief", False)
 
@@ -198,11 +198,12 @@
 
         for status in properties_by_status:
             properties = properties_by_status[status]
-            if not properties: continue
+            if not properties:
+                continue
 
-            xml_status    = davxml.Status.fromResponseCode(status)
+            xml_status = davxml.Status.fromResponseCode(status)
             xml_container = davxml.PropertyContainer(*properties)
-            xml_propstat  = davxml.PropertyStatus(xml_container, xml_status)
+            xml_propstat = davxml.PropertyStatus(xml_container, xml_status)
 
             propstats.append(xml_propstat)
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/proppatch.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/proppatch.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/proppatch.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_prop.PROP.test_PROPPATCH -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -8,10 +8,10 @@
 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 # copies of the Software, and to permit persons to whom the Software is
 # furnished to do so, subject to the following conditions:
-# 
+#
 # The above copyright notice and this permission notice shall be included in all
 # copies or substantial portions of the Software.
-# 
+#
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -86,7 +86,7 @@
 
     # Look for Prefer header
     prefer = request.headers.getHeader("prefer", {})
-    returnMinimal = "return-minimal" in prefer
+    returnMinimal = any([key == "return" and value == "minimal" for key, value, _ignore_args in prefer])
 
     try:
         #
@@ -146,7 +146,7 @@
                 else:
                     responses.add(responsecode.OK, property)
 
-                    # Only add undo action for those that succeed because those that fail will not have changed               
+                    # Only add undo action for those that succeed because those that fail will not have changed
                     undoActions.append(undo)
 
                     yield True
@@ -196,7 +196,7 @@
         responses.error()
 
     #
-    # Return response - use 200 if Prefer:return-minimal set and no errors
+    # Return response - use 200 if Prefer:return=minimal set and no errors
     #
     if returnMinimal and not gotError:
         yield responsecode.OK

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_put -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/put_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_acl_principal_prop_set.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_acl_principal_prop_set.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_acl_principal_prop_set.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report_expand -*-
 ##
-# Copyright (c) 2006-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2006-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_expand.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_expand.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_expand.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report_expand -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_match.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_match.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_match.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report_expand -*-
 ##
-# Copyright (c) 2006-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2006-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_property_search.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_property_search.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_property_search.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report_expand -*-
 ##
-# Copyright (c) 2006-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2006-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_search_property_set.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_search_property_set.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/method/report_principal_search_property_set.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_report_expand -*-
 ##
-# Copyright (c) 2006-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2006-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/noneprops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/noneprops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/noneprops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_resource -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/static.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/static.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/static.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_static -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_acl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_acl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_acl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_copy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_copy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_copy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_delete.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_delete.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_delete.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_http.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_http.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_http.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_lock.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_lock.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_lock.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_mkcol.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_mkcol.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_mkcol.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_move.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_move.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_move.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_options.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_options.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_options.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_pipeline.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_pipeline.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_pipeline.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_prop.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_prop.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_prop.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_put.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_put.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_put.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_quota.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_quota.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_quota.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report_expand.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report_expand.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_report_expand.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_static.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_static.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_static.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/test/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.test.test_util -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/xattrprops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/xattrprops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/dav/xattrprops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # See LICENSE for details.
 
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/error.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/error.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/error.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_log -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/fileupload.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/fileupload.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/fileupload.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_http -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http_headers.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http_headers.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/http_headers.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_http_headers -*-
 # #
 # Copyright (c) 2008 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -855,6 +855,13 @@
 
 
 
+def parsePrefer(field):
+    etype, args = parseArgs(field)
+    etype = parseKeyValue(etype)
+    return (etype[0], etype[1], args)
+
+
+
 #### Header generators
 def generateAccept(accept):
     mimeType, q = accept
@@ -1032,6 +1039,18 @@
 
 
 
+def generatePrefer(items):
+    key, value, args = items
+    if value is None:
+        out = '%s' % (key,)
+    else:
+        out = '%s=%s' % (key, value)
+    if args:
+        out += ';' + generateKeyValues(args)
+    return out
+
+
+
 ####
 class ETag(object):
     def __init__(self, tag, weak=False):
@@ -1732,7 +1751,7 @@
     'If-Range': (parseIfRange,),
     'If-Unmodified-Since': (last, parseDateTime),
     'Max-Forwards': (last, int),
-    'Prefer': (tokenize, listParser(parseExpect), dict), # Prefer like Expect
+    'Prefer': (tokenize, listParser(parsePrefer), list),
 #    'Proxy-Authorization': str, # what is "credentials"
     'Range': (tokenize, parseRange),
     'Referer': (last, str), # TODO: URI object?
@@ -1756,7 +1775,7 @@
     'If-Range': (generateIfRange, singleHeader),
     'If-Unmodified-Since': (generateDateTime, singleHeader),
     'Max-Forwards': (str, singleHeader),
-    'Prefer': (iteritems, listGenerator(generateExpect), singleHeader), # Prefer like Expect
+    'Prefer': (listGenerator(generatePrefer), singleHeader),
 #    'Proxy-Authorization': str, # what is "credentials"
     'Range': (generateRange, singleHeader),
     'Referer': (str, singleHeader),

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/iweb.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/iweb.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/iweb.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test -*-
 ##
 # Copyright (c) 2001-2008 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/log.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/log.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/log.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_log -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/metafd.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/metafd.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/metafd.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.test.test_metafd -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_server,twext.web2.test.test_resource -*-
 ##
 # Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/responsecode.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/responsecode.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/responsecode.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test -*-
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/server.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/server.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/server.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_server -*-
 ##
 # Copyright (c) 2001-2008 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/static.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/static.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/static.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_static -*-
 ##
 # Copyright (c) 2001-2008 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/stream.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/stream.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/stream.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 # -*- test-case-name: twext.web2.test.test_stream -*-
 ##
 # Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# Copyright (c) 2010-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2010-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_http_headers.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_http_headers.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_http_headers.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -449,6 +449,18 @@
         self.runRoundtripTest("Expect", table)
 
 
+    def testPrefer(self):
+        table = (
+            ("wait",
+             [("wait", None, [])]),
+            ("return = representation",
+             [("return", "representation", [])]),
+            ("return =minimal;arg1;arg2=val2",
+             [("return", "minimal", [("arg1", None), ("arg2", "val2")])]),
+            )
+        self.runRoundtripTest("Prefer", table)
+
+
     def testFrom(self):
         self.runRoundtripTest("From", (("webmaster at w3.org", "webmaster at w3.org"),))
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_metafd.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_metafd.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twext/web2/test/test_metafd.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/caldav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/caldav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/caldav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/kqueuereactor.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/kqueuereactor.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twisted/plugins/kqueuereactor.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/accounting.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/accounting.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/accounting.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/authkerb.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/authkerb.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/authkerb.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 ##
 # Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/backup.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/backup.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/backup.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/bind.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/bind.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/bind.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/cache.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/cache.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/cache.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/caldavxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/caldavxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 # #
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/carddavxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/carddavxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/carddavxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/geturl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/geturl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/geturl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/pool.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/pool.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/pool.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/reverseproxy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/reverseproxy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/reverseproxy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/test_reverseproxy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/test_reverseproxy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/client/test/test_reverseproxy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/config.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/config.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/config.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/customxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/customxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/customxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/database.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/database.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/database.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/addressdata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/addressdata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/addressdata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/calendardata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/calendardata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/calendardata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/filter.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/filter.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/filter.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/hiddeninstance.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/hiddeninstance.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/hiddeninstance.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/peruserdata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/peruserdata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/peruserdata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/privateevents.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/privateevents.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/privateevents.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_calendardata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_calendardata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_calendardata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_hiddeninstances.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_hiddeninstances.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_hiddeninstances.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_peruserdata.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_peruserdata.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_peruserdata.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_privateevents.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_privateevents.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/datafilters/test/test_privateevents.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dateops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dateops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dateops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -13,11 +13,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ##
-from pycalendar.datetime import PyCalendarDateTime
-from pycalendar.timezone import PyCalendarTimezone
-from pycalendar.period import PyCalendarPeriod
-import datetime
-import dateutil.tz
 
 """
 Date/time Utilities
@@ -33,6 +28,13 @@
     "clipPeriod"
 ]
 
+from pycalendar.datetime import PyCalendarDateTime
+from pycalendar.timezone import PyCalendarTimezone
+from pycalendar.period import PyCalendarPeriod
+
+import datetime
+import dateutil.tz
+
 import calendar
 
 def normalizeForIndex(dt):
@@ -259,14 +261,6 @@
             tzinfo=dateutil.tz.tzutc()
         )
 
-SQL_TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
-
-def parseSQLTimestamp(ts):
-    # Handle case where fraction seconds may not be present
-    if len(ts) < 20:
-        ts += ".0"
-    return datetime.datetime.strptime(ts, SQL_TIMESTAMP_FORMAT)
-
 def parseSQLTimestampToPyCalendar(ts):
     """
     Parse an SQL formated timestamp into a PyCalendarDateTime

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/addressbook.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/addressbook.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/addressbook.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/aggregate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/aggregate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/aggregate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/appleopendirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/appleopendirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_opendirectory -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/augment.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/augment.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/augment.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/cachingdirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/cachingdirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/cachingdirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_cachedirectory -*-
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_calendar -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_proxyprincipalmembers -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxyloader.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxyloader.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/calendaruserproxyloader.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_wrapping,twistedcaldav.directory.test.test_calendar -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/digest.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/digest.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/digest.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/directory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/directory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/idirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/idirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/idirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/internal.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/internal.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/internal.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/ldapdirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/ldapdirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/ldapdirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 ##
 # Copyright (c) 2008-2009 Aymeric Augustin. All rights reserved.
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/opendirectorybacker.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/opendirectorybacker.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/principal.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/principal.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_principal -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -65,7 +65,7 @@
 from twistedcaldav.directory.idirectory import IDirectoryService
 from twistedcaldav.directory.wiki import getWikiACL
 from twistedcaldav.extensions import DirectoryElement
-from twistedcaldav.extensions import ReadOnlyResourceMixIn, DAVPrincipalResource,\
+from twistedcaldav.extensions import ReadOnlyResourceMixIn, DAVPrincipalResource, \
     DAVResourceWithChildrenMixin
 from twistedcaldav.resource import CalendarPrincipalCollectionResource, CalendarPrincipalResource
 from twistedcaldav.scheduling.cuaddress import normalizeCUAddr
@@ -97,6 +97,7 @@
             returnValue(self.defaultAccessControlList())
 
 
+
 # Converter methods for recordsMatchingFields()
 #
 # A DAV property can be associated with one of these converter methods,
@@ -109,6 +110,8 @@
 
     return "recordType", DirectoryRecord.fromCUType(cuType)
 
+
+
 def cuAddressConverter(origCUAddr):
     """ Converts calendar user addresses to OD-compatible form """
 
@@ -149,29 +152,36 @@
 
         self.directory = IDirectoryService(directory)
 
+
     def __repr__(self):
         return "<%s: %s %s>" % (self.__class__.__name__, self.directory, self._url)
 
+
     def locateChild(self, req, segments):
         child = self.getChild(segments[0])
         if child is not None:
             return (child, segments[1:])
-        return (NotFoundResource(principalCollections=self.principalCollections()),())
+        return (NotFoundResource(principalCollections=self.principalCollections()), ())
 
+
     def deadProperties(self):
         if not hasattr(self, "_dead_properties"):
             self._dead_properties = NonePropertyStore(self)
         return self._dead_properties
 
+
     def etag(self):
         return succeed(None)
 
+
     def principalForShortName(self, recordType, name):
         return self.principalForRecord(self.directory.recordWithShortName(recordType, name))
 
+
     def principalForUser(self, user):
         return self.principalForShortName(DirectoryService.recordType_users, user)
 
+
     def principalForAuthID(self, user):
         # Basic/Digest creds -> just lookup user name
         if isinstance(user, UsernamePassword) or isinstance(user, DigestedCredentials):
@@ -183,15 +193,18 @@
                 return principal
             elif user.username:
                 return self.principalForUser(user.username)
-        
+
         return None
 
+
     def principalForUID(self, uid):
         raise NotImplementedError("Subclass must implement principalForUID()")
 
+
     def principalForCalendarUserAddress(self, address):
         raise NotImplementedError("Subclass must implement principalForCalendarUserAddress()")
 
+
     def principalForRecord(self, record):
         if record is None or not record.enabled:
             return None
@@ -220,6 +233,7 @@
             customxml.EmailAddressSet),
     }
 
+
     def propertyToField(self, property, match):
         """
         If property is a DAV property that maps to a directory field, return
@@ -233,6 +247,7 @@
             field, match = converter(match)
         return (field, match)
 
+
     def principalSearchPropertySet(self):
         props = []
         for _ignore_field, _ignore_converter, description, xmlClass in self._fieldMap.itervalues():
@@ -243,7 +258,7 @@
                     ),
                     davxml.Description(
                         davxml.PCDATAElement(description),
-                        **{"xml:lang":"en"}
+                        **{"xml:lang": "en"}
                     ),
                 )
             )
@@ -251,6 +266,7 @@
         return davxml.PrincipalSearchPropertySet(*props)
 
 
+
 class DirectoryPrincipalProvisioningResource (DirectoryProvisioningResource):
     """
     Collection resource which provisions directory principals as its children.
@@ -269,9 +285,11 @@
 
         self.putChild(uidsResourceName, DirectoryPrincipalUIDProvisioningResource(self))
 
+
     def principalForUID(self, uid):
         return self.getChild(uidsResourceName).getChild(uid)
 
+
     def _principalForURI(self, uri):
         scheme, netloc, path, _ignore_params, _ignore_query, _ignore_fragment = urlparse(uri)
 
@@ -324,6 +342,7 @@
 
         return None
 
+
     def principalForCalendarUserAddress(self, address):
         # First see if the address is a principal URI
         principal = self._principalForURI(address)
@@ -339,9 +358,11 @@
         log.debug("No principal for calendar user address: %r" % (address,))
         return None
 
+
     def principalForRecord(self, record):
         return self.getChild(uidsResourceName).principalForRecord(record)
 
+
     ##
     # Static
     ##
@@ -350,15 +371,18 @@
         log.err("Attempt to create clone %r of resource %r" % (path, self))
         raise HTTPError(responsecode.NOT_FOUND)
 
+
     def getChild(self, name):
         if name == "":
             return self
         else:
             return self.putChildren.get(name, None)
 
+
     def listChildren(self):
         return self.directory.recordTypes()
 
+
     ##
     # ACL
     ##
@@ -367,6 +391,7 @@
         return (self,)
 
 
+
 class DirectoryPrincipalTypeProvisioningResource (DirectoryProvisioningResource):
     """
     Collection resource which provisions directory principals of a
@@ -386,12 +411,15 @@
         self.recordType = recordType
         self.parent = parent
 
+
     def principalForUID(self, uid):
         return self.parent.principalForUID(uid)
 
+
     def principalForCalendarUserAddress(self, address):
         return self.parent.principalForCalendarUserAddress(address)
 
+
     def principalForRecord(self, record):
         return self.parent.principalForRecord(record)
 
@@ -399,19 +427,23 @@
     # Static
     ##
 
+
     def createSimilarFile(self, path):
         log.err("Attempt to create clone %r of resource %r" % (path, self))
         raise HTTPError(responsecode.NOT_FOUND)
 
+
     def getChild(self, name):
         if name == "":
             return self
         else:
             return self.principalForShortName(self.recordType, name)
 
+
     def listChildren(self):
         if config.EnablePrincipalListings:
 
+
             def _recordShortnameExpand():
                 for record in self.directory.listRecords(self.recordType):
                     if record.enabled:
@@ -427,10 +459,12 @@
     # ACL
     ##
 
+
     def principalCollections(self):
         return self.parent.principalCollections()
 
 
+
 class DirectoryPrincipalUIDProvisioningResource (DirectoryProvisioningResource):
     """
     Collection resource which provisions directory principals indexed
@@ -449,12 +483,15 @@
 
         self.parent = parent
 
+
     def principalForUID(self, uid):
         return self.parent.principalForUID(uid)
 
+
     def principalForCalendarUserAddress(self, address):
         return self.parent.principalForCalendarUserAddress(address)
 
+
     def principalForRecord(self, record):
         if record is None or not record.enabled:
             return None
@@ -471,10 +508,12 @@
     # Static
     ##
 
+
     def createSimilarFile(self, path):
         log.err("Attempt to create clone %r of resource %r" % (path, self))
         raise HTTPError(responsecode.NOT_FOUND)
 
+
     def getChild(self, name):
         if name == "":
             return self
@@ -497,6 +536,7 @@
         else:
             return primaryPrincipal.getChild(subType)
 
+
     def listChildren(self):
         # Not a listable collection
         raise HTTPError(responsecode.FORBIDDEN)
@@ -505,6 +545,7 @@
     # ACL
     ##
 
+
     def principalCollections(self):
         return self.parent.principalCollections()
 
@@ -520,6 +561,7 @@
         "directory-principal-resource.html").open()
     )
 
+
     def __init__(self, resource):
         super(DirectoryPrincipalDetailElement, self).__init__()
         self.resource = resource
@@ -612,6 +654,7 @@
         return DirectoryPrincipalDetailElement(self.resource)
 
 
+
 class DirectoryCalendarPrincipalDetailElement(DirectoryPrincipalDetailElement):
 
     @renderer
@@ -671,6 +714,7 @@
         return DirectoryCalendarPrincipalDetailElement(self.resource)
 
 
+
 class DirectoryPrincipalResource (
         PropfindCacheMixin, PermissionsMixIn, DAVPrincipalResource):
     """
@@ -678,16 +722,17 @@
     """
 
     def liveProperties(self):
-        
+
         return super(DirectoryPrincipalResource, self).liveProperties() + (
-            (calendarserver_namespace, "first-name"       ),
-            (calendarserver_namespace, "last-name"        ),
+            (calendarserver_namespace, "first-name"),
+            (calendarserver_namespace, "last-name"),
             (calendarserver_namespace, "email-address-set"),
             davxml.ResourceID.qname(),
         )
 
     cacheNotifierFactory = DisabledCacheNotifier
 
+
     def __init__(self, parent, record):
         """
         @param parent: the parent of this resource.
@@ -704,32 +749,36 @@
 
         assert record is not None, "Principal must have a directory record"
 
-
         self.record = record
         self.parent = parent
 
         url = joinURL(parent.principalCollectionURL(), self.principalUID()) + slash
-        self._url   = url
+        self._url = url
 
         self._alternate_urls = tuple([
             joinURL(parent.parent.principalCollectionURL(), record.recordType, shortName) + slash for shortName in record.shortNames
         ])
 
+
     def __str__(self):
         return "(%s)%s" % (self.record.recordType, self.record.shortNames[0])
 
+
     def __eq__(self, other):
         """
         Principals are the same if their principalURLs are the same.
         """
         return (self.principalURL() == other.principalURL()) if isinstance(other, DirectoryPrincipalResource) else False
 
+
     def __ne__(self, other):
         return not self.__eq__(other)
 
+
     def __hash__(self):
         return hash(self.principalUID())
 
+
     @inlineCallbacks
     def readProperty(self, property, request):
         if type(property) is tuple:
@@ -764,11 +813,13 @@
         result = (yield super(DirectoryPrincipalResource, self).readProperty(property, request))
         returnValue(result)
 
+
     def deadProperties(self):
         if not hasattr(self, "_dead_properties"):
             self._dead_properties = NonePropertyStore(self)
         return self._dead_properties
 
+
     def etag(self):
         return succeed(None)
 
@@ -776,6 +827,7 @@
     # HTTP
     ##
 
+
     def htmlElement(self):
         """
         Customize HTML rendering for directory principals.
@@ -786,9 +838,11 @@
     # DAV
     ##
 
+
     def isCollection(self):
         return True
 
+
     def displayName(self):
         if self.record.fullName:
             return self.record.fullName
@@ -799,6 +853,7 @@
     # ACL
     ##
 
+
     def _calendar_user_proxy_index(self):
         """
         Return the SQL database for calendar user proxies.
@@ -815,19 +870,22 @@
         # FIXME: Add API to IDirectoryRecord for getting a record URI?
         return self._alternate_urls
 
+
     def principalURL(self):
         return self._url
 
+
     def url(self):
         return self.principalURL()
 
+
     @inlineCallbacks
     def isProxyFor(self, principal):
         """
         Determine whether this principal is a read-only or read-write proxy for the
-        specified principal. 
+        specified principal.
         """
-        
+
         read_uids = (yield self.proxyFor(False))
         if principal in read_uids:
             returnValue(True)
@@ -835,9 +893,10 @@
         write_uids = (yield self.proxyFor(True))
         if principal in write_uids:
             returnValue(True)
-        
+
         returnValue(False)
 
+
     @inlineCallbacks
     def proxyFor(self, read_write, resolve_memberships=True):
 
@@ -883,6 +942,7 @@
 
         returnValue(proxyFors)
 
+
     def _getRelatives(self, method, record=None, relatives=None, records=None, proxy=None, infinity=False):
         if record is None:
             record = self.record
@@ -912,12 +972,15 @@
 
         return relatives
 
+
     def groupMembers(self):
         return succeed(self._getRelatives("members"))
 
+
     def expandedGroupMembers(self):
         return succeed(self._getRelatives("members", infinity=True))
 
+
     @inlineCallbacks
     def groupMemberships(self, infinity=False):
 
@@ -948,9 +1011,11 @@
 
         returnValue(groups)
 
+
     def expandedGroupMemberships(self):
         return self.groupMemberships(infinity=True)
 
+
     def groupsChanged(self):
         """
         A callback indicating the directory group membership for this principal
@@ -959,27 +1024,35 @@
         """
         return self.cacheNotifier.changed()
 
+
     def principalCollections(self):
         return self.parent.principalCollections()
 
+
     def principalUID(self):
         return self.record.uid
 
+
     def serverURI(self):
         return self.record.serverURI()
 
+
     def server(self):
         return self.record.server()
 
+
     def partitionURI(self):
         return self.record.partitionURI()
 
+
     def locallyHosted(self):
         return self.record.locallyHosted()
-    
+
+
     def thisServer(self):
         return self.record.thisServer()
-    
+
+
     ##
     # Extra resource info
     ##
@@ -991,9 +1064,11 @@
         augmentRecord.autoSchedule = autoSchedule
         (yield self.record.service.augmentService.addAugmentRecords([augmentRecord]))
 
+
     def getAutoSchedule(self):
         return self.record.autoSchedule
 
+
     def canAutoSchedule(self, organizer=None):
         """
         Determine the auto-schedule state based on record state, type and config settings.
@@ -1011,6 +1086,7 @@
                     return True
         return False
 
+
     @inlineCallbacks
     def setAutoScheduleMode(self, autoScheduleMode):
         self.record.autoScheduleMode = autoScheduleMode if autoScheduleMode in allowedAutoScheduleModes else "default"
@@ -1018,6 +1094,7 @@
         augmentRecord.autoScheduleMode = autoScheduleMode
         (yield self.record.service.augmentService.addAugmentRecords([augmentRecord]))
 
+
     def getAutoScheduleMode(self, organizer=None):
         """
         Return the auto schedule mode value for the principal.  If the optional
@@ -1053,6 +1130,7 @@
         augmentRecord.autoAcceptGroup = autoAcceptGroup
         (yield self.record.service.augmentService.addAugmentRecords([augmentRecord]))
 
+
     def getAutoAcceptGroup(self):
         """
         Returns the GUID of the auto accept group assigned to this principal, or empty
@@ -1060,6 +1138,7 @@
         """
         return self.record.autoAcceptGroup
 
+
     def autoAcceptFromOrganizer(self, organizer):
         """
         Is the organizer a member of this principal's autoAcceptGroup?
@@ -1077,6 +1156,7 @@
                     return True
         return False
 
+
     def getCUType(self):
         return self.record.getCUType()
 
@@ -1084,26 +1164,31 @@
     # Static
     ##
 
+
     def createSimilarFile(self, path):
         log.err("Attempt to create clone %r of resource %r" % (path, self))
         raise HTTPError(responsecode.NOT_FOUND)
 
+
     def locateChild(self, req, segments):
         child = self.getChild(segments[0])
         if child is not None:
             return (child, segments[1:])
         return (None, ())
 
+
     def getChild(self, name):
         if name == "":
             return self
 
         return None
 
+
     def listChildren(self):
         return ()
 
 
+
 class DirectoryCalendarPrincipalResource(DirectoryPrincipalResource,
                                          CalendarPrincipalResource):
     """
@@ -1113,12 +1198,15 @@
     def liveProperties(self):
         return DirectoryPrincipalResource.liveProperties(self) + CalendarPrincipalResource.liveProperties(self)
 
+
     def calendarsEnabled(self):
         return config.EnableCalDAV and self.record.enabledForCalendaring
-    
+
+
     def addressBooksEnabled(self):
         return config.EnableCardDAV and self.record.enabledForAddressBooks
-    
+
+
     @inlineCallbacks
     def readProperty(self, property, request):
         # Ouch, multiple inheritance.
@@ -1132,6 +1220,7 @@
     # CalDAV
     ##
 
+
     def calendarUserAddresses(self):
 
         # No CUAs if not enabledForCalendaring.
@@ -1190,6 +1279,7 @@
         else:
             return False
 
+
     @inlineCallbacks
     def scheduleInbox(self, request):
         home = yield self.calendarHome(request)
@@ -1202,16 +1292,18 @@
 
         returnValue(inbox)
 
+
     @inlineCallbacks
     def notificationCollection(self, request):
 
         notification = None
         if config.Sharing.Enabled:
             home = yield self.calendarHome(request)
-            if home is not None:    
+            if home is not None:
                 notification = yield home.getChild("notification")
         returnValue(notification)
 
+
     def calendarHomeURLs(self):
         if self.record.enabledForCalendaring:
             homeURL = self._homeChildURL(None)
@@ -1219,24 +1311,29 @@
             homeURL = ""
         return (homeURL,) if homeURL else ()
 
+
     def scheduleInboxURL(self):
         return self._homeChildURL("inbox/")
 
+
     def scheduleOutboxURL(self):
         return self._homeChildURL("outbox/")
 
+
     def dropboxURL(self):
-        if config.EnableDropBox:
+        if config.EnableDropBox or config.EnableManagedAttachments:
             return self._homeChildURL("dropbox/")
         else:
             return None
 
+
     def notificationURL(self):
         if config.Sharing.Enabled:
             return self._homeChildURL("notification/")
         else:
             return None
 
+
     def addressBookHomeURLs(self):
         if self.record.enabledForAddressBooks:
             homeURL = self._addressBookHomeChildURL(None)
@@ -1244,6 +1341,7 @@
             homeURL = ""
         return (homeURL,) if homeURL else ()
 
+
     def _homeChildURL(self, name):
         if not hasattr(self, "calendarHomeURL"):
             if not hasattr(self.record.service, "calendarHomesCollection"):
@@ -1253,7 +1351,7 @@
                 uidsResourceName,
                 self.record.uid
             ) + "/"
-            
+
             # Prefix with other server if needed
             if not self.thisServer():
                 self.calendarHomeURL = joinURL(self.serverURI(), self.calendarHomeURL)
@@ -1283,7 +1381,7 @@
                 uidsResourceName,
                 self.record.uid
             ) + "/"
-            
+
             # Prefix with other server if needed
             if not self.thisServer():
                 self.addressBookHomeURL = joinURL(self.serverURI(), self.addressBookHomeURL)
@@ -1294,6 +1392,7 @@
         else:
             return joinURL(url, name) if name else url
 
+
     def addressBookHome(self, request):
         # FIXME: self.record.service.addressBookHomesCollection smells like a hack
         service = self.record.service
@@ -1306,6 +1405,7 @@
     # Static
     ##
 
+
     def getChild(self, name):
         if name == "":
             return self
@@ -1320,6 +1420,7 @@
         else:
             return None
 
+
     def listChildren(self):
         if config.EnableProxyPrincipals:
             return ("calendar-proxy-read", "calendar-proxy-write")
@@ -1340,6 +1441,7 @@
 )
 
 
+
 def formatPrincipals(principals):
     """
     Format a list of principals into some twisted.web.template DOM objects.
@@ -1354,6 +1456,7 @@
                 return None
         return (record.recordType, record.shortNames[0])
 
+
     def describe(principal):
         if hasattr(principal, "record"):
             return " - %s" % (principal.record.fullName,)
@@ -1368,6 +1471,7 @@
     )
 
 
+
 def formatList(iterable):
     """
     Format a list of stuff as an interable.
@@ -1400,9 +1504,9 @@
     return tags.a(href=url)(url)
 
 
+
 def formatLinks(urls):
     """
     Format a list of URL strings as a list of twisted.web.template DOM links.
     """
     return formatList(formatLink(link) for link in urls)
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resourceinfo.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resourceinfo.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/resourceinfo.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts-modified.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts-modified.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts-modified.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2012 Apple Inc. All rights reserved.
+Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/accounts.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2011 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test-default.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test-default.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test-default.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments-test.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2011 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/resources-locations.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/resources-locations.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/resources-locations.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/modify/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/proxies.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/proxies.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/proxies.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/augments.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/augments.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/augments.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/caldavd.plist
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/caldavd.plist	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/caldavd.plist	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-    Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+    Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/resources-locations.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/resources-locations.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/resources-locations.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/users-groups.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/users-groups.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources/users-groups.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/resources.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_aggregate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_aggregate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_aggregate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_augment.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_augment.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_augment.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_buildquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_buildquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_buildquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_cachedirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_cachedirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_cachedirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_calendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_calendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_calendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_digest.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_digest.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_digest.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_directory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_directory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_directory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_guidchange.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_guidchange.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_guidchange.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_ldapdirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_ldapdirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_ldapdirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_livedirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_livedirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_livedirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_modify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_modify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_modify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectory.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectory.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectorybacker.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_opendirectorybacker.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_principal.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_principal.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipaldb.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipaldb.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipaldb.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_resources.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_resources.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_resources.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_wiki.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_wiki.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_wiki.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_xmlfile.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_xmlfile.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/test_xmlfile.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/test/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_util -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/wiki.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/wiki.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/wiki.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaccountsparser.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaccountsparser.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaccountsparser.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaugmentsparser.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaugmentsparser.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlaugmentsparser.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlfile.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directory/xmlfile.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directorybackedaddressbook.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directorybackedaddressbook.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/directorybackedaddressbook.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dropbox.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dropbox.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/dropbox.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/extensions.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/extensions.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_extensions -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/freebusyurl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/freebusyurl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/freebusyurl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/ical.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/ical.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/ical.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_icalendar -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -954,6 +954,21 @@
         self._markAsDirty()
 
 
+    def removeAllPropertiesWithName(self, pname):
+        """
+        Remove all properties with the given name from all components.
+
+        @param pname: the property name to remove from all components.
+        @type pname: C{str}
+        """
+
+        for property in self.properties(pname):
+            self.removeProperty(property)
+
+        for component in self.subcomponents():
+            component.removeAllPropertiesWithName(pname)
+
+
     def replaceProperty(self, property):
         """
         Add or replace a property in this component.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/icaldav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/icaldav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/icaldav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/instance.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/instance.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/instance.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/linkresource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/linkresource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/linkresource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/localization.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/localization.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/localization.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachelock.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachelock.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachelock.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachepool.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachepool.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcachepool.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacheprops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacheprops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacheprops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacher.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacher.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/memcacher.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/acl.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/acl.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/acl.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/copymove_contact.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/copymove_contact.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/copymove_contact.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/delete_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/get.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/get.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/get.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcalendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcalendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcalendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcol.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcol.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/mkcol.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_DAV.MKCOL -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -111,7 +111,7 @@
 
     if doc is not None:
 
-        # Can ignore Prefer:return-minimal as we don't return a body for success by default
+        # Can ignore Prefer:return=minimal as we don't return a body for success by default
 
         # Parse response body
         mkcol = doc.root_element

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/post.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/post.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/post.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 # #
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -133,7 +133,7 @@
 
             # Look for Prefer header
             prefer = request.headers.getHeader("prefer", {})
-            returnRepresentation = "return-representation" in prefer
+            returnRepresentation = any([key == "return" and value == "representation" for key, value, _ignore_args in prefer])
 
             if returnRepresentation and result.code / 100 == 2:
                 result = (yield newchild.http_GET(request))
@@ -201,7 +201,7 @@
 
             # Look for Prefer header
             prefer = request.headers.getHeader("prefer", {})
-            returnRepresentation = "return-representation" in prefer
+            returnRepresentation = any([key == "return" and value == "representation" for key, value, _ignore_args in prefer])
 
             if returnRepresentation and result.code / 100 == 2:
                 result = (yield newchild.http_GET(request))

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/propfind.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/propfind.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/propfind.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twext.web2.dav.test.test_prop.PROP.test_PROPFIND -*-
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -8,10 +8,10 @@
 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 # copies of the Software, and to permit persons to whom the Software is
 # furnished to do so, subject to the following conditions:
-# 
+#
 # The above copyright notice and this permission notice shall be included in all
 # copies or substantial portions of the Software.
-# 
+#
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -33,9 +33,9 @@
 from twext.web2 import responsecode
 from twext.web2.http import StatusResponse
 from txdav.xml import element as davxml
-from twext.web2.dav.http import MultiStatusResponse, statusForFailure,\
+from twext.web2.dav.http import MultiStatusResponse, statusForFailure, \
     ErrorResponse
-from twext.web2.dav.util import normalizeURL, davXMLFromStream
+from twext.web2.dav.util import normalizeURL, davXMLFromStream, parentForURL
 
 from twext.python.log import Logger
 
@@ -52,6 +52,11 @@
     Respond to a PROPFIND request. (RFC 2518, section 8.1)
     """
     if not self.exists():
+        # Return 403 if parent does not allow Bind
+        parentURL = parentForURL(request.uri)
+        parent = (yield request.locateResource(parentURL))
+        yield parent.authorize(request, (davxml.Bind(),))
+
         log.err("Resource not found: %s" % (self,))
         raise HTTPError(responsecode.NOT_FOUND)
 
@@ -110,8 +115,8 @@
 
     # Look for Prefer header first, then try Brief
     prefer = request.headers.getHeader("prefer", {})
-    returnMinimal = "return-minimal" in prefer
-    noRoot = "depth-noroot" in prefer
+    returnMinimal = any([key == "return" and value == "minimal" for key, value, _ignore_args in prefer])
+    noRoot = any([key == "depth-noroot" and value is None for key, value, _ignore_args in prefer])
     if not returnMinimal:
         returnMinimal = request.headers.getHeader("brief", False)
 
@@ -155,7 +160,7 @@
                 except:
                     log.err("Unable to get properties for resource %r" % (resource,))
                     raise
-    
+
                 properties_by_status = {
                     responsecode.OK: [propertyName(p) for p in resource_properties]
                 }
@@ -164,12 +169,12 @@
                     responsecode.OK        : [],
                     responsecode.NOT_FOUND : [],
                 }
-    
+
                 if search_properties is "all":
                     properties_to_enumerate = (yield resource.listAllprop(request))
                 else:
                     properties_to_enumerate = search_properties
-    
+
                 for property in properties_to_enumerate:
                     has = (yield resource.hasProperty(property, request))
                     if has:
@@ -191,17 +196,18 @@
                         properties_by_status[responsecode.NOT_FOUND].append(propertyName(property))
 
             propstats = []
-    
+
             for status in properties_by_status:
                 properties = properties_by_status[status]
-                if not properties: continue
-    
-                xml_status    = davxml.Status.fromResponseCode(status)
+                if not properties:
+                    continue
+
+                xml_status = davxml.Status.fromResponseCode(status)
                 xml_container = davxml.PropertyContainer(*properties)
-                xml_propstat  = davxml.PropertyStatus(xml_container, xml_status)
-    
+                xml_propstat = davxml.PropertyStatus(xml_container, xml_status)
+
                 propstats.append(xml_propstat)
-    
+
             xml_response = davxml.PropertyStatusResponse(davxml.HRef(uri), *propstats)
 
             # This needed for propfind cache tracking of children changes
@@ -210,9 +216,8 @@
                     request.childCacheURIs.append(resource.url())
         else:
             xml_response = davxml.StatusResponse(davxml.HRef(uri), davxml.Status.fromResponseCode(responsecode.FORBIDDEN))
-    
+
         xml_responses.append(xml_response)
-            
 
     if not hasattr(request, "extendedLogItems"):
         request.extendedLogItems = {}
@@ -224,6 +229,7 @@
     returnValue(MultiStatusResponse(xml_responses))
 
 
+
 ##
 # Utilities
 ##

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -31,7 +31,7 @@
 from twistedcaldav.caldavxml import caldav_namespace
 
 from twistedcaldav.method.put_common import StoreCalendarObjectResource
-from twistedcaldav.resource import isPseudoCalendarCollectionResource,\
+from twistedcaldav.resource import isPseudoCalendarCollectionResource, \
     CalDAVResource
 
 log = Logger()
@@ -57,7 +57,7 @@
                 (caldav_namespace, "supported-calendar-data"),
                 "Invalid MIME type for calendar collection",
             ))
-            
+
         # Read the calendar component from the stream
         try:
             calendardata = (yield allDataFromStream(request.stream))
@@ -75,24 +75,24 @@
                 ))
 
             storer = StoreCalendarObjectResource(
-                request = request,
-                destination = self,
-                destination_uri = request.uri,
-                destinationcal = True,
-                destinationparent = parent,
-                calendar = calendardata,
+                request=request,
+                destination=self,
+                destination_uri=request.uri,
+                destinationcal=True,
+                destinationparent=parent,
+                calendar=calendardata,
             )
             result = (yield storer.run())
 
             # Look for Prefer header
             prefer = request.headers.getHeader("prefer", {})
-            returnRepresentation = "return-representation" in prefer
+            returnRepresentation = any([key == "return" and value == "representation" for key, value, _ignore_args in prefer])
 
             if returnRepresentation and result.code / 100 == 2:
                 oldcode = result.code
                 result = (yield self.http_GET(request))
                 if oldcode == responsecode.CREATED:
-                    result.code =  responsecode.CREATED
+                    result.code = responsecode.CREATED
                 result.headers.setHeader("content-location", request.path)
 
             returnValue(result)
@@ -112,7 +112,7 @@
                 (carddav_namespace, "supported-address-data"),
                 "Invalid MIME type for address book collection",
             ))
-            
+
         # Read the vcard component from the stream
         try:
             vcarddata = (yield allDataFromStream(request.stream))
@@ -130,25 +130,25 @@
                 ))
 
             storer = StoreAddressObjectResource(
-                request = request,
-                sourceadbk = False,
-                vcard = vcarddata,
-                destination = self,
-                destination_uri = request.uri,
-                destinationadbk = True,
-                destinationparent = parent,
+                request=request,
+                sourceadbk=False,
+                vcard=vcarddata,
+                destination=self,
+                destination_uri=request.uri,
+                destinationadbk=True,
+                destinationparent=parent,
             )
             result = (yield storer.run())
 
             # Look for Prefer header
             prefer = request.headers.getHeader("prefer", {})
-            returnRepresentation = "return-representation" in prefer
+            returnRepresentation = any([key == "return" and value == "representation" for key, value, _ignore_args in prefer])
 
             if returnRepresentation and result.code / 100 == 2:
                 oldcode = result.code
                 result = (yield self.http_GET(request))
                 if oldcode == responsecode.CREATED:
-                    result.code =  responsecode.CREATED
+                    result.code = responsecode.CREATED
                 result.headers.setHeader("content-location", request.path)
 
             returnValue(result)
@@ -166,5 +166,5 @@
         if clength == 0:
             clength = self.contentLength()
         request.extendedLogItems["cl"] = str(clength)
-        
+
         returnValue(result)

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_addressbook_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_addressbook_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_addressbook_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/put_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_validation -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_multiget.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_multiget.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_multiget.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_query.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_query.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_addressbook_query.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_addressbookquery -*-
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_multiget.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_multiget.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_multiget.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_query.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_query.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_calendar_query.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.
@@ -59,7 +59,7 @@
 from twistedcaldav.datafilters.hiddeninstance import HiddenInstanceFilter
 from twistedcaldav.datafilters.privateevents import PrivateEventFilter
 from twistedcaldav.datafilters.addressdata import AddressDataFilter
-from twistedcaldav.dateops import clipPeriod, normalizePeriodList, timeRangesOverlap,\
+from twistedcaldav.dateops import clipPeriod, normalizePeriodList, timeRangesOverlap, \
     compareDateTime, normalizeToUTC, parseSQLTimestampToPyCalendar
 from twistedcaldav.ical import Component, Property, iCalendarProductID
 from twistedcaldav.instance import InstanceList
@@ -76,8 +76,8 @@
 
 log = Logger()
 
-COLLECTION_TYPE_REGULAR     = "collection"
-COLLECTION_TYPE_CALENDAR    = "calendar"
+COLLECTION_TYPE_REGULAR = "collection"
+COLLECTION_TYPE_CALENDAR = "calendar"
 COLLECTION_TYPE_ADDRESSBOOK = "adressbook"
 
 @inlineCallbacks
@@ -86,7 +86,7 @@
     Run an operation on all calendar collections, starting at the specified
     root, to the specified depth. This involves scanning the URI hierarchy
     down from the root. Return a MultiStatus element of all responses.
-    
+
     @param request: the L{IRequest} for the current request.
     @param resource: the L{CalDAVResource} representing the root to start scanning
         for calendar collections.
@@ -110,20 +110,22 @@
         resources = [(resource, request_uri)]
     else:
         resources = []
-        yield resource.findCalendarCollections(depth, request, lambda x, y: resources.append((x, y)), privileges = privileges)
-         
+        yield resource.findCalendarCollections(depth, request, lambda x, y: resources.append((x, y)), privileges=privileges)
+
     for calresource, uri in resources:
         result = (yield apply(calresource, uri))
         if not result:
             break
 
+
+
 @inlineCallbacks
 def applyToAddressBookCollections(resource, request, request_uri, depth, apply, privileges):
     """
     Run an operation on all address book collections, starting at the specified
     root, to the specified depth. This involves scanning the URI hierarchy
     down from the root. Return a MultiStatus element of all responses.
-    
+
     @param request: the L{IRequest} for the current request.
     @param resource: the L{CalDAVResource} representing the root to start scanning
         for address book collections.
@@ -138,7 +140,7 @@
         try:
             yield resource.checkPrivileges(request, privileges)
         except AccessDeniedError:
-            returnValue( None )
+            returnValue(None)
 
     # When scanning we only go down as far as an address book collection - not into one
     if resource.isAddressBookCollection():
@@ -147,13 +149,15 @@
         resources = [(resource, request_uri)]
     else:
         resources = []
-        yield resource.findAddressBookCollections(depth, request, lambda x, y: resources.append((x, y)), privileges = privileges)
-         
+        yield resource.findAddressBookCollections(depth, request, lambda x, y: resources.append((x, y)), privileges=privileges)
+
     for addrresource, uri in resources:
         result = yield apply(addrresource, uri)
         if not result:
             break
 
+
+
 def responseForHref(request, responses, href, resource, propertiesForResource, propertyreq, isowner=True, calendar=None, timezone=None, vcard=None):
     """
     Create an appropriate property status response for the given resource.
@@ -197,6 +201,8 @@
     d.addCallback(_defer)
     return d
 
+
+
 def allPropertiesForResource(request, prop, resource, calendar=None, timezone=None, vcard=None, isowner=True):
     """
     Return all (non-hidden) properties for the specified resource.
@@ -223,6 +229,8 @@
     d.addCallback(_defer)
     return d
 
+
+
 def propertyNamesForResource(request, prop, resource, calendar=None, timezone=None, vcard=None, isowner=True): #@UnusedVariable
     """
     Return property names for all properties on the specified resource.
@@ -243,11 +251,13 @@
             responsecode.OK: [propertyName(p) for p in props]
         }
         return properties_by_status
-    
+
     d = resource.listProperties(request)
     d.addCallback(_defer)
     return d
 
+
+
 def propertyListForResource(request, prop, resource, calendar=None, timezone=None, vcard=None, isowner=True):
     """
     Return the specified properties on the specified resource.
@@ -262,9 +272,11 @@
         C{False} otherwise.
     @return: a map of OK and NOT FOUND property values.
     """
-    
+
     return _namedPropertiesForResource(request, prop.children, resource, calendar, timezone, vcard, isowner)
 
+
+
 def validPropertyListCalendarDataTypeVersion(prop):
     """
     If the supplied prop element includes a calendar-data element, verify that
@@ -274,7 +286,7 @@
     @return:     a tuple: (True/False if the calendar-data element is one we can handle or not present,
                            error message).
     """
-    
+
     result = True
     message = ""
     generate_calendar_data = False
@@ -282,12 +294,14 @@
         if isinstance(property, caldavxml.CalendarData):
             if not property.verifyTypeVersion([("text/calendar", "2.0")]):
                 result = False
-                message = "Calendar-data element type/version not supported: content-type: %s, version: %s" % (property.content_type,property.version)
+                message = "Calendar-data element type/version not supported: content-type: %s, version: %s" % (property.content_type, property.version)
             generate_calendar_data = True
             break
 
     return result, message, generate_calendar_data
 
+
+
 def validPropertyListAddressDataTypeVersion(prop):
     """
     If the supplied prop element includes an address-data element, verify that
@@ -297,7 +311,7 @@
     @return:     a tuple: (True/False if the address-data element is one we can handle or not present,
                            error message).
     """
-    
+
     result = True
     message = ""
     generate_address_data = False
@@ -305,12 +319,14 @@
         if isinstance(property, carddavxml.AddressData):
             if not property.verifyTypeVersion([("text/vcard", "3.0")]):
                 result = False
-                message = "Address-data element type/version not supported: content-type: %s, version: %s" % (property.content_type,property.version)
+                message = "Address-data element type/version not supported: content-type: %s, version: %s" % (property.content_type, property.version)
             generate_address_data = True
             break
 
     return result, message, generate_address_data
 
+
+
 @inlineCallbacks
 def _namedPropertiesForResource(request, props, resource, calendar=None, timezone=None, vcard=None, isowner=True):
     """
@@ -333,10 +349,10 @@
         responsecode.OK        : [],
         responsecode.NOT_FOUND : [],
     }
-    
+
     # Look for Prefer header first, then try Brief
     prefer = request.headers.getHeader("prefer", {})
-    returnMinimal = "return-minimal" in prefer
+    returnMinimal = any([key == "return" and value == "minimal" for key, value, _ignore_args in prefer])
     if not returnMinimal:
         returnMinimal = request.headers.getHeader("brief", False)
 
@@ -351,7 +367,7 @@
             propvalue = CalendarData().fromCalendar(filtered)
             properties_by_status[responsecode.OK].append(propvalue)
             continue
-    
+
         if isinstance(property, carddavxml.AddressData):
             if vcard is None:
                 vcard = (yield resource.vCard())
@@ -359,12 +375,12 @@
             propvalue = AddressData().fromAddress(filtered)
             properties_by_status[responsecode.OK].append(propvalue)
             continue
-    
+
         if isinstance(property, element.WebDAVElement):
             qname = property.qname()
         else:
             qname = property
-    
+
         has = (yield resource.hasProperty(property, request))
 
         if has:
@@ -377,12 +393,13 @@
             except HTTPError:
                 f = Failure()
                 status = statusForFailure(f, "getting property: %s" % (qname,))
-                if status not in properties_by_status: properties_by_status[status] = []
+                if status not in properties_by_status:
+                        properties_by_status[status] = []
                 if not returnMinimal or status != responsecode.NOT_FOUND:
                     properties_by_status[status].append(propertyName(qname))
         elif not returnMinimal:
             properties_by_status[responsecode.NOT_FOUND].append(propertyName(qname))
-    
+
     returnValue(properties_by_status)
 
 fbtype_mapper = {"BUSY": 0, "BUSY-TENTATIVE": 1, "BUSY-UNAVAILABLE": 2}
@@ -391,38 +408,40 @@
 fbcacher = Memcacher("FBCache", pickle=True)
 
 class FBCacheEntry(object):
-    
+
     CACHE_DAYS_FLOATING_ADJUST = 1
-    
+
     def __init__(self, key, token, timerange, fbresults):
         self.key = key
         self.token = token
         self.timerange = timerange
         self.fbresults = fbresults
-    
+
+
     @classmethod
     @inlineCallbacks
     def getCacheEntry(cls, calresource, useruid, timerange):
-        
+
         key = calresource.resourceID() + "/" + useruid
         token = (yield calresource.getInternalSyncToken())
         entry = (yield fbcacher.get(key))
-        
+
         if entry:
-    
+
             # Offset one day at either end to account for floating
             cached_start = entry.timerange.start + PyCalendarDuration(days=FBCacheEntry.CACHE_DAYS_FLOATING_ADJUST)
             cached_end = entry.timerange.end - PyCalendarDuration(days=FBCacheEntry.CACHE_DAYS_FLOATING_ADJUST)
 
             # Verify that the requested timerange lies within the cache timerange
             if compareDateTime(timerange.end, cached_end) <= 0 and compareDateTime(timerange.start, cached_start) >= 0:
-                
+
                 # Verify that cached entry is still valid
                 if token == entry.token:
                     returnValue(entry.fbresults)
-        
-        returnValue(None) 
 
+        returnValue(None)
+
+
     @classmethod
     @inlineCallbacks
     def makeCacheEntry(cls, calresource, useruid, timerange, fbresults):
@@ -432,6 +451,8 @@
         entry = cls(key, token, timerange, fbresults)
         yield fbcacher.set(key, entry)
 
+
+
 @inlineCallbacks
 def generateFreeBusyInfo(
     request,
@@ -479,7 +500,7 @@
     organizer_principal = calresource.principalForCalendarUserAddress(organizer) if organizer else None
     organizer_uid = organizer_principal.principalUID() if organizer_principal else ""
 
-    # Free busy is per-user 
+    # Free busy is per-user
     userPrincipal = (yield calresource.resourceOwnerPrincipal(request))
     if userPrincipal:
         useruid = userPrincipal.principalUID()
@@ -501,7 +522,7 @@
     }
     do_event_details = False
     if event_details is not None and organizer_principal is not None and userPrincipal is not None:
-         
+
         # Check if organizer is attendee
         if organizer_principal == userPrincipal:
             do_event_details = True
@@ -518,12 +539,11 @@
             do_event_details = True
             rich_options["resource"] = True
 
-
     # Try cache
     resources = (yield FBCacheEntry.getCacheEntry(calresource, useruid, timerange)) if config.EnableFreeBusyCache else None
 
     if resources is None:
-        
+
         caching = False
         if config.EnableFreeBusyCache:
             # Log extended item
@@ -532,22 +552,22 @@
             request.extendedLogItems["fb-uncached"] = request.extendedLogItems.get("fb-uncached", 0) + 1
 
             # We want to cache a large range of time based on the current date
-            cache_start = normalizeToUTC(PyCalendarDateTime.getToday() + PyCalendarDuration(days=-config.FreeBusyCacheDaysBack))
+            cache_start = normalizeToUTC(PyCalendarDateTime.getToday() + PyCalendarDuration(days=0 - config.FreeBusyCacheDaysBack))
             cache_end = normalizeToUTC(PyCalendarDateTime.getToday() + PyCalendarDuration(days=config.FreeBusyCacheDaysForward))
-            
+
             # If the requested timerange would fit in our allowed cache range, trigger the cache creation
             if compareDateTime(timerange.start, cache_start) >= 0 and compareDateTime(timerange.end, cache_end) <= 0:
                 cache_timerange = TimeRange(start=cache_start.getText(), end=cache_end.getText())
                 caching = True
- 
+
         #
         # What we do is a fake calendar-query for VEVENT/VFREEBUSYs in the specified time-range.
         # We then take those results and merge them into one VFREEBUSY component
         # with appropriate FREEBUSY properties, and return that single item as iCal data.
         #
-    
+
         # Create fake filter element to match time-range
-        filter =  caldavxml.Filter(
+        filter = caldavxml.Filter(
                       caldavxml.ComponentFilter(
                           caldavxml.ComponentFilter(
                               cache_timerange if caching else timerange,
@@ -558,7 +578,7 @@
                   )
         filter = calendarqueryfilter.Filter(filter)
         tzinfo = filter.settimezone(tz)
-    
+
         try:
             resources = yield maybeDeferred(calresource.index().indexedSearch,
                 filter, useruid=useruid, fbtype=True
@@ -567,7 +587,7 @@
                 yield FBCacheEntry.makeCacheEntry(calresource, useruid, cache_timerange, resources)
         except IndexedSearchException:
             resources = yield maybeDeferred(calresource.index().bruteForceSearch)
-            
+
     else:
         # Log extended item
         if not hasattr(request, "extendedLogItems"):
@@ -592,13 +612,13 @@
         if type == "VEVENT" and aggregated_resources[key][0][3] != '?':
 
             matchedResource = False
-            
+
             # Look at each instance
             for float, start, end, fbtype in aggregated_resources[key]:
                 # Ignore free time or unknown
                 if fbtype in ('F', '?'):
                     continue
-                
+
                 # Ignore ones of this UID
                 if excludeuid:
                     # See if we have a UID match
@@ -612,7 +632,7 @@
                         # Check for no ORGANIZER and check by same calendar user
                         elif (test_uid == "") and same_calendar_user:
                             continue
-                        
+
                 # Apply a timezone to any floating times
                 fbstart = parseSQLTimestampToPyCalendar(start)
                 if float == 'Y':
@@ -624,9 +644,9 @@
                     fbend.setTimezone(tzinfo)
                 else:
                     fbend.setTimezone(PyCalendarTimezone(utc=True))
-                
+
                 # Clip instance to time range
-                clipped = clipPeriod(PyCalendarPeriod(fbstart, duration=fbend-fbstart), PyCalendarPeriod(timerange.start, timerange.end))
+                clipped = clipPeriod(PyCalendarPeriod(fbstart, duration=fbend - fbstart), PyCalendarPeriod(timerange.start, timerange.end))
 
                 # Double check for overlap
                 if clipped:
@@ -638,7 +658,7 @@
                 matchtotal += 1
                 if matchtotal > max_number_of_matches:
                     raise NumberOfMatchesWithinLimits(max_number_of_matches)
-                
+
                 # Add extended details
                 if do_event_details:
                     child = (yield request.locateChildResource(calresource, name))
@@ -648,14 +668,14 @@
         else:
             child = (yield request.locateChildResource(calresource, name))
             calendar = (yield child.iCalendarForUser(request))
-            
+
             # The calendar may come back as None if the resource is being changed, or was deleted
             # between our initial index query and getting here. For now we will ignore this error, but in
             # the longer term we need to implement some form of locking, perhaps.
             if calendar is None:
                 log.err("Calendar %s is missing from calendar collection %r" % (name, calresource))
                 continue
-            
+
             # Ignore ones of this UID
             if excludeuid:
                 # See if we have a UID match
@@ -663,20 +683,20 @@
                     test_organizer = calendar.getOrganizer()
                     test_principal = calresource.principalForCalendarUserAddress(test_organizer) if test_organizer else None
                     test_uid = test_principal.principalUID() if test_principal else ""
-    
+
                     # Check that ORGANIZER's match (security requirement)
                     if (organizer is None) or (organizer_uid == test_uid):
                         continue
                     # Check for no ORGANIZER and check by same calendar user
                     elif (test_organizer is None) and same_calendar_user:
                         continue
-    
+
             if filter.match(calendar, None):
                 # Check size of results is within limit
                 matchtotal += 1
                 if matchtotal > max_number_of_matches:
                     raise NumberOfMatchesWithinLimits(max_number_of_matches)
-    
+
                 if calendar.mainType() == "VEVENT":
                     processEventFreeBusy(calendar, fbinfo, timerange, tzinfo)
                 elif calendar.mainType() == "VFREEBUSY":
@@ -691,14 +711,16 @@
                     child = (yield request.locateChildResource(calresource, name))
                     calendar = (yield child.iCalendarForUser(request))
                     _addEventDetails(calendar, event_details, rich_options, timerange, tzinfo)
-    
+
     returnValue(matchtotal)
 
+
+
 def _addEventDetails(calendar, event_details, rich_options, timerange, tzinfo):
     """
     Expand events within the specified time range and limit the set of properties to those allowed for
     delegate extended free busy.
-    
+
     @param calendar: the calendar object to expand
     @type calendar: L{Component}
     @param event_details: list to append VEVENT components to
@@ -739,6 +761,7 @@
     event_details.extend([subcomponent for subcomponent in expanded.subcomponents() if subcomponent.name() == "VEVENT"])
 
 
+
 def processEventFreeBusy(calendar, fbinfo, timerange, tzinfo):
     """
     Extract free busy data from a VEVENT component.
@@ -747,10 +770,10 @@
     @param timerange: the time range to restrict free busy data to.
     @param tzinfo: the L{PyCalendarTimezone} for the timezone to use for floating/all-day events.
     """
-    
+
     # Expand out the set of instances for the event with in the required range
     instances = calendar.expandTimeRanges(timerange.end, lowerLimit=timerange.start, ignoreInvalidInstances=True)
-    
+
     # Can only do timed events
     for key in instances:
         instance = instances[key]
@@ -759,7 +782,7 @@
         break
     else:
         return
-        
+
     for key in instances:
         instance = instances[key]
 
@@ -770,19 +793,19 @@
         fbend = instance.end
         if fbend.floating():
             fbend.setTimezone(tzinfo)
-        
+
         # Check TRANSP property of underlying component
         if instance.component.hasProperty("TRANSP"):
             # If its TRANSPARENT we always ignore it
             if instance.component.propertyValue("TRANSP") == "TRANSPARENT":
                 continue
-        
+
         # Determine status
         if instance.component.hasProperty("STATUS"):
             status = instance.component.propertyValue("STATUS")
         else:
             status = "CONFIRMED"
-        
+
         # Ignore cancelled
         if status == "CANCELLED":
             continue
@@ -790,11 +813,11 @@
         # Clip period for this instance - use duration for period end if that
         # is what original component used
         if instance.component.hasProperty("DURATION"):
-            period = PyCalendarPeriod(fbstart, duration=fbend-fbstart)
+            period = PyCalendarPeriod(fbstart, duration=fbend - fbstart)
         else:
             period = PyCalendarPeriod(fbstart, fbend)
         clipped = clipPeriod(period, PyCalendarPeriod(timerange.start, timerange.end))
-        
+
         # Double check for overlap
         if clipped:
             if status == "TENTATIVE":
@@ -802,6 +825,8 @@
             else:
                 fbinfo[0].append(clipped)
 
+
+
 def processFreeBusyFreeBusy(calendar, fbinfo, timerange):
     """
     Extract FREEBUSY data from a VFREEBUSY component.
@@ -817,14 +842,14 @@
         if start and end:
             if not timeRangesOverlap(start, end, timerange.start, timerange.end):
                 continue
-        
+
         # Now look at each FREEBUSY property
         for fb in vfb.properties("FREEBUSY"):
             # Check the type
             fbtype = fb.parameterValue("FBTYPE", default="BUSY")
             if fbtype == "FREE":
                 continue
-            
+
             # Look at each period in the property
             assert isinstance(fb.value(), list), "FREEBUSY property does not contain a list of values: %r" % (fb,)
             for period in fb.value():
@@ -833,6 +858,8 @@
                 if clipped:
                     fbinfo[fbtype_mapper.get(fbtype, 0)].append(clipped)
 
+
+
 def processAvailabilityFreeBusy(calendar, fbinfo, timerange):
     """
     Extract free-busy data from a VAVAILABILITY component.
@@ -840,7 +867,7 @@
     @param fbinfo: the tuple used to store the three types of fb data.
     @param timerange: the time range to restrict free busy data to.
     """
-    
+
     for vav in [x for x in calendar.subcomponents() if x.name() == "VAVAILABILITY"]:
 
         # Get overall start/end
@@ -854,10 +881,10 @@
         overall = clipPeriod(period, PyCalendarPeriod(timerange.start, timerange.end))
         if overall is None:
             continue
-        
+
         # Now get periods for each instance of AVAILABLE sub-components
         periods = processAvailablePeriods(vav, timerange)
-        
+
         # Now invert the periods and store in accumulator
         busyperiods = []
         last_end = timerange.start
@@ -874,15 +901,16 @@
             fbtype = "BUSY-UNAVAILABLE"
 
         fbinfo[fbtype_mapper.get(fbtype, 2)].extend(busyperiods)
-            
 
+
+
 def processAvailablePeriods(calendar, timerange):
     """
     Extract instance period data from an AVAILABLE component.
     @param calendar: the L{Component} that is the VAVAILABILITY containing the AVAILABLE's.
     @param timerange: the time range to restrict free busy data to.
     """
-    
+
     periods = []
 
     # First we need to group all AVAILABLE sub-components by UID
@@ -891,12 +919,12 @@
         if component.name() == "AVAILABLE":
             uid = component.propertyValue("UID")
             uidmap.setdefault(uid, []).append(component)
-            
+
     # Then we expand each uid set separately
     for componentSet in uidmap.itervalues():
         instances = InstanceList(ignoreInvalidInstances=True)
         instances.expandTimeRanges(componentSet, timerange.end)
-        
+
         # Now convert instances into period list
         for key in instances:
             instance = instances[key]
@@ -912,16 +940,18 @@
             # Clip period for this instance - use duration for period end if that
             # is what original component used
             if instance.component.hasProperty("DURATION"):
-                period = PyCalendarPeriod(start, duration=end-start)
+                period = PyCalendarPeriod(start, duration=end - start)
             else:
                 period = PyCalendarPeriod(start, end)
             clipped = clipPeriod(period, PyCalendarPeriod(timerange.start, timerange.end))
             if clipped:
                 periods.append(clipped)
-            
+
     normalizePeriodList(periods)
     return periods
 
+
+
 def buildFreeBusyResult(fbinfo, timerange, organizer=None, attendee=None, uid=None, method=None, event_details=None):
     """
     Generate a VCALENDAR object containing a single VFREEBUSY that is the
@@ -936,12 +966,12 @@
     @param event_details: VEVENT components to add.
     @return:              the L{Component} containing the calendar data.
     """
-    
+
     # Merge overlapping time ranges in each fb info section
     normalizePeriodList(fbinfo[0])
     normalizePeriodList(fbinfo[1])
     normalizePeriodList(fbinfo[2])
-    
+
     # Now build a new calendar object with the free busy info we have
     fbcalendar = Component("VCALENDAR")
     fbcalendar.addProperty(Property("VERSION", "2.0"))

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_freebusy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_freebusy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_freebusy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_multiget_common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_multiget_common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_multiget_common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_sync_collection.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_sync_collection.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/method/report_sync_collection.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/mkcolxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/mkcolxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/mkcolxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notifications.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notifications.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notifications.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/notify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_notify -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookqueryfilter.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookqueryfilter.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/addressbookqueryfilter.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarqueryfilter.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarqueryfilter.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/calendarqueryfilter.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/expression.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/expression.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/expression.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/sqlgenerator.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/sqlgenerator.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/sqlgenerator.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_addressbookquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_addressbookquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_addressbookquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_calendarquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_calendarquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_calendarquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_expression.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_expression.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_expression.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_queryfilter.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_queryfilter.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/query/test/test_queryfilter.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_resource,twistedcaldav.test.test_wrapping -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -1874,7 +1874,7 @@
             if self.directoryAddressBookEnabled():
                 baseProperties += (carddavxml.DirectoryGateway.qname(),)
 
-        if config.EnableDropBox:
+        if config.EnableDropBox or config.EnableManagedAttachments:
             baseProperties += (customxml.DropBoxHomeURL.qname(),)
 
         if config.Sharing.Enabled:
@@ -1937,7 +1937,7 @@
                 returnValue(caldavxml.CalendarUserType(self.record.getCUType()))
 
         elif namespace == calendarserver_namespace:
-            if name == "dropbox-home-URL" and config.EnableDropBox:
+            if name == "dropbox-home-URL" and (config.EnableDropBox or config.EnableManagedAttachments):
                 url = self.dropboxURL()
                 if url is None:
                     returnValue(None)
@@ -2606,13 +2606,13 @@
         from twistedcaldav.scheduling.caldav.resource import ScheduleOutboxResource
         self._provisionedChildren["outbox"] = ScheduleOutboxResource
 
-        if config.EnableDropBox:
+        if config.EnableDropBox and not config.EnableManagedAttachments:
             from twistedcaldav.storebridge import DropboxCollection
             self._provisionedChildren["dropbox"] = DropboxCollection
 
         if config.EnableManagedAttachments:
             from twistedcaldav.storebridge import AttachmentsCollection
-            self._provisionedChildren["attachments"] = AttachmentsCollection
+            self._provisionedChildren["dropbox"] = AttachmentsCollection
 
         if config.FreeBusyURL.Enabled:
             from twistedcaldav.freebusyurl import FreeBusyURLResource
@@ -2774,7 +2774,7 @@
                 changed.append("notification/")
 
             # Dropbox is never synchronized
-            if config.EnableDropBox:
+            if config.EnableDropBox or config.EnableManagedAttachments:
                 notallowed.append("dropbox/")
 
         # Add in notification changes

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/addressmapping.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/addressmapping.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/addressmapping.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/cuaddress.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/cuaddress.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/cuaddress.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/delivery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/delivery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/delivery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/icaldiff.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/icaldiff.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/icaldiff.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/implicit.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/implicit.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/itip.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/itip.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/itip.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/processing.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/processing.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/processing.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/scheduler.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/scheduler.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_icaldiff.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_icaldiff.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_icaldiff.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_implicit.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_implicit.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_implicit.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_itip.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_itip.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/test/test_itip.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/utils.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/utils.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/scheduling/utils.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sharing.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sharing.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_sharing -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -117,6 +117,7 @@
         rtype = element.ResourceType(*(rtype.children + (customxml.SharedOwner(),)))
         self.writeDeadProperty(rtype)
 
+
     @inlineCallbacks
     def downgradeFromShare(self, request):
 
@@ -293,7 +294,17 @@
 
     @inlineCallbacks
     def shareeAccessControlList(self, request, *args, **kwargs):
+        """
+        Return WebDAV ACLs appropriate for the current user accessing the shared collection. For
+        an "invite" share we take the privilege granted to the sharee in the invite and map that
+        to WebDAV ACLs. For a "direct" share, if it is a wiki collection we map the wiki privileges
+        into WebDAV ACLs, otherwise we use whatever privileges exist on the underlying shared
+        collection.
 
+        @return: the appropriate WebDAV ACL for the sharee
+        @rtype: L{davxml.ACL}
+        """
+
         assert self._isShareeCollection, "Only call this for a sharee collection"
 
         wikiAccessMethod = kwargs.get("wikiAccessMethod", getWikiAccess)
@@ -513,6 +524,7 @@
         invitation = Invitation(shareeHomeChild)
         returnValue(invitation)
 
+
     @inlineCallbacks
     def _updateInvitation(self, invitation, access=None, state=None, summary=None):
         mode = None if access is None else invitationAccessToBindModeMap[access]
@@ -528,7 +540,7 @@
     def _allInvitations(self):
         """
         Get list of all invitations to this object
-        
+
         For legacy reasons, all invitations are all invited + shared (accepted, not direct).
         Combine these two into a single sorted list so code is similar to that for legacy invite db
         """
@@ -572,7 +584,6 @@
         returnValue(None)
 
 
-
     @inlineCallbacks
     def inviteSingleUserToShare(self, userid, cn, ace, summary, request):
 
@@ -678,7 +689,7 @@
         state = notificationState if notificationState else invitation.state()
         summary = invitation.summary() if displayName is None else displayName
 
-        typeAttr = {'shared-type':self.sharedResourceType()}
+        typeAttr = {'shared-type': self.sharedResourceType()}
         xmltype = customxml.InviteNotification(**typeAttr)
         xmldata = customxml.Notification(
             customxml.DTStamp.fromString(PyCalendarDateTime.getNowUTC().getText()),
@@ -703,6 +714,7 @@
         # Add to collections
         yield notifications.writeNotificationObject(invitation.uid(), xmltype, xmldata)
 
+
     @inlineCallbacks
     def removeInviteNotification(self, invitation, request):
 
@@ -716,6 +728,7 @@
         # Add to collections
         yield notifications.removeNotificationObjectWithUID(invitation.uid())
 
+
     @inlineCallbacks
     def _xmlHandleInvite(self, request, docroot):
         yield self.authorize(request, (element.Read(), element.Write()))
@@ -961,35 +974,41 @@
     def __init__(self, shareeHomeChild):
         self._shareeHomeChild = shareeHomeChild
 
+
     def uid(self):
         return self._shareeHomeChild.shareUID()
 
+
     def shareeUID(self):
         return self._shareeHomeChild.viewerHome().uid()
 
+
     def access(self):
         return invitationAccessFromBindModeMap.get(self._shareeHomeChild.shareMode())
 
+
     def state(self):
         return invitationStateFromBindStatusMap.get(self._shareeHomeChild.shareStatus())
 
+
     def summary(self):
         return self._shareeHomeChild.shareMessage()
 
 
+
 class SharedHomeMixin(LinkFollowerMixIn):
     """
     A mix-in for calendar/addressbook homes that defines the operations for
     manipulating a sharee's set of shared calendars.
     """
 
-
     @inlineCallbacks
     def provisionShare(self, child, request=None):
         share = yield self._shareForHomeChild(child._newStoreObject, request)
         if share:
             child.setShare(share)
 
+
     @inlineCallbacks
     def _shareForHomeChild(self, child, request=None):
         # Try to find a matching share
@@ -1025,6 +1044,7 @@
 
         returnValue(share)
 
+
     @inlineCallbacks
     def _shareForUID(self, shareUID, request):
 
@@ -1044,6 +1064,7 @@
 
         returnValue(None)
 
+
     @inlineCallbacks
     def acceptInviteShare(self, request, hostUrl, inviteUID, displayname=None):
 
@@ -1083,6 +1104,7 @@
         response = yield self._acceptShare(request, not oldShare, share, displayname)
         returnValue(response)
 
+
     @inlineCallbacks
     def _acceptShare(self, request, isNewShare, share, displayname=None):
 
@@ -1167,6 +1189,7 @@
         else:
             returnValue(None)
 
+
     @inlineCallbacks
     def removeDirectShare(self, request, share):
         """
@@ -1186,7 +1209,6 @@
                 inbox = (yield request.locateResource(inboxURL))
                 inbox.processFreeBusyCalendar(shareURL, False)
 
-
         if share.direct():
             yield share._sharerHomeChildOrGroup.unshareWith(share._shareeHomeChild.viewerHome())
         else:
@@ -1315,10 +1337,12 @@
         self._sharerHomeChildOrGroup = sharerHomeChildOrGroup
         self._sharedResourceURL = url
 
+
     @classmethod
     def directUID(cls, shareeHome, sharerHomeChild):
         return "Direct-%s-%s" % (shareeHome._resourceID, sharerHomeChild._resourceID,)
 
+
     def uid(self):
         # Move to CommonHomeChild shareUID?
         if self._shareeHomeChild.shareMode() == _BIND_MODE_DIRECT:
@@ -1326,17 +1350,22 @@
         else:
             return self._shareeHomeChild.shareUID()
 
+
     def direct(self):
         return self._shareeHomeChild.shareMode() == _BIND_MODE_DIRECT
 
+
     def url(self):
         return self._sharedResourceURL
 
+
     def name(self):
         return self._shareeHomeChild.name()
 
+
     def summary(self):
         return self._shareeHomeChild.shareMessage()
 
+
     def shareeUID(self):
         return self._shareeHomeChild.viewerHome().uid()

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/simpleresource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/simpleresource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/simpleresource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/stdconfig.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/stdconfig.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_stdconfig -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/storebridge.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/storebridge.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_wrapping -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -1387,6 +1387,10 @@
 
 class NoDropboxHere(_GetChildHelper):
 
+    def getChild(self, name):
+        raise HTTPError(FORBIDDEN)
+
+
     def isCollection(self):
         return False
 
@@ -1630,7 +1634,8 @@
 class AttachmentsCollection(_GetChildHelper):
     """
     A collection of all managed attachments, presented as a
-    resource under the user's calendar home.
+    resource under the user's calendar home. Attachments are stored
+    in L{AttachmentsChildCollection} child collections of this one.
     """
     # FIXME: no direct tests for this class at all.
 
@@ -1651,24 +1656,29 @@
 
     @inlineCallbacks
     def getChild(self, name):
-        attachmentObject = yield self._newStoreHome.attachmentObjectWithID(name)
-        result = CalendarAttachment(
-            None,
-            attachmentObject,
-            name,
-            True,
-            principalCollections=self.principalCollections()
+        calendarObject = yield self._newStoreHome.calendarObjectWithDropboxID(name)
+
+        # Hide the dropbox if it has no children
+        if calendarObject:
+            l = (yield calendarObject.managedAttachmentList())
+            if len(l) == 0:
+                calendarObject = None
+
+        if calendarObject is None:
+            returnValue(NoDropboxHere())
+        objectDropbox = AttachmentsChildCollection(
+            calendarObject, self, principalCollections=self.principalCollections()
         )
-        self.propagateTransaction(result)
-        returnValue(result)
+        self.propagateTransaction(objectDropbox)
+        returnValue(objectDropbox)
 
 
     def resourceType(self,):
-        return davxml.ResourceType.collection # @UndefinedVariable
+        return davxml.ResourceType.dropboxhome # @UndefinedVariable
 
 
     def listChildren(self):
-        return self._newStoreHome.getAllAttachmentNames()
+        return self._newStoreHome.getAllDropboxIDs()
 
 
     def supportedPrivileges(self, request):
@@ -1730,6 +1740,195 @@
 
 
 
+class AttachmentsChildCollection(_GetChildHelper):
+    """
+    A collection of all containers for attachments, presented as a
+    resource under the user's calendar home, where a dropbox is a
+    L{CalendarObjectDropbox}.
+    """
+    # FIXME: no direct tests for this class at all.
+
+    def __init__(self, calendarObject, parent, *a, **kw):
+        kw.update(principalCollections=parent.principalCollections())
+        super(AttachmentsChildCollection, self).__init__(*a, **kw)
+        self._newStoreCalendarObject = calendarObject
+        parent.propagateTransaction(self)
+
+
+    def isCollection(self):
+        """
+        It is a collection.
+        """
+        return True
+
+
+    @inlineCallbacks
+    def getChild(self, name):
+        attachmentObject = yield self._newStoreCalendarObject.managedAttachmentRetrieval(name)
+        result = CalendarAttachment(
+            None,
+            attachmentObject,
+            name,
+            True,
+            principalCollections=self.principalCollections()
+        )
+        self.propagateTransaction(result)
+        returnValue(result)
+
+
+    def resourceType(self,):
+        return davxml.ResourceType.dropbox # @UndefinedVariable
+
+
+    @inlineCallbacks
+    def listChildren(self):
+        l = (yield self._newStoreCalendarObject.managedAttachmentList())
+        returnValue(l)
+
+
+    @inlineCallbacks
+    def http_ACL(self, request):
+        # For managed attachment compatibility this is always forbidden as dropbox clients must never be
+        # allowed to store attachments or make any changes.
+        return FORBIDDEN
+
+
+    def http_MKCOL(self, request):
+        # For managed attachment compatibility this is always forbidden as dropbox clients must never be
+        # allowed to store attachments or make any changes.
+        return FORBIDDEN
+
+
+    @requiresPermissions(fromParent=[davxml.Unbind()])
+    def http_DELETE(self, request):
+        # For managed attachment compatibility this always succeeds as dropbox clients will do
+        # this but we don't want them to see an error. Managed attachments will always be cleaned
+        # up on removal of the actual calendar object resource.
+        return NO_CONTENT
+
+
+    @inlineCallbacks
+    def accessControlList(self, request, *a, **kw):
+        """
+        All principals identified as ATTENDEEs on the event for this dropbox
+        may read all its children. Also include proxies of ATTENDEEs. Ignore
+        unknown attendees. Do not allow attendees to write as we don't support
+        that with managed attachments.
+        """
+        originalACL = yield super(
+            AttachmentsChildCollection, self).accessControlList(request, *a, **kw)
+        originalACEs = list(originalACL.children)
+
+        if config.EnableProxyPrincipals:
+            owner = (yield self.ownerPrincipal(request))
+
+            originalACEs += (
+                # DAV:write-acl access for this principal's calendar-proxy-write users.
+                davxml.ACE(
+                    davxml.Principal(davxml.HRef(joinURL(owner.principalURL(), "calendar-proxy-write/"))),
+                    davxml.Grant(
+                        davxml.Privilege(davxml.WriteACL()),
+                    ),
+                    davxml.Protected(),
+                    TwistedACLInheritable(),
+                ),
+            )
+
+        cuas = (yield self._newStoreCalendarObject.component()).getAttendees()
+        newACEs = []
+        for calendarUserAddress in cuas:
+            principal = self.principalForCalendarUserAddress(
+                calendarUserAddress
+            )
+            if principal is None:
+                continue
+
+            principalURL = principal.principalURL()
+            privileges = [
+                davxml.Privilege(davxml.Read()),
+                davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
+            ]
+            newACEs.append(davxml.ACE(
+                davxml.Principal(davxml.HRef(principalURL)),
+                davxml.Grant(*privileges),
+                davxml.Protected(),
+                TwistedACLInheritable(),
+            ))
+            newACEs.append(davxml.ACE(
+                davxml.Principal(davxml.HRef(joinURL(principalURL, "calendar-proxy-write/"))),
+                davxml.Grant(*privileges),
+                davxml.Protected(),
+                TwistedACLInheritable(),
+            ))
+            newACEs.append(davxml.ACE(
+                davxml.Principal(davxml.HRef(joinURL(principalURL, "calendar-proxy-read/"))),
+                davxml.Grant(*privileges),
+                davxml.Protected(),
+                TwistedACLInheritable(),
+            ))
+
+        # Now also need invitees
+        newACEs.extend((yield self.sharedDropboxACEs()))
+
+        returnValue(davxml.ACL(*tuple(originalACEs + newACEs)))
+
+
+    @inlineCallbacks
+    def sharedDropboxACEs(self):
+
+        aces = ()
+        calendars = yield self._newStoreCalendarObject._parentCollection.asShared()
+        for calendar in calendars:
+
+            userprivs = [
+            ]
+            if calendar.shareMode() in (_BIND_MODE_READ, _BIND_MODE_WRITE,):
+                userprivs.append(davxml.Privilege(davxml.Read()))
+                userprivs.append(davxml.Privilege(davxml.ReadACL()))
+                userprivs.append(davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()))
+            if calendar.shareMode() in (_BIND_MODE_READ,):
+                userprivs.append(davxml.Privilege(davxml.WriteProperties()))
+            if calendar.shareMode() in (_BIND_MODE_WRITE,):
+                userprivs.append(davxml.Privilege(davxml.Write()))
+            proxyprivs = list(userprivs)
+            proxyprivs.remove(davxml.Privilege(davxml.ReadACL()))
+
+            principal = self.principalForUID(calendar._home.uid())
+            aces += (
+                # Inheritable specific access for the resource's associated principal.
+                davxml.ACE(
+                    davxml.Principal(davxml.HRef(principal.principalURL())),
+                    davxml.Grant(*userprivs),
+                    davxml.Protected(),
+                    TwistedACLInheritable(),
+                ),
+            )
+
+            if config.EnableProxyPrincipals:
+                aces += (
+                    # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
+                    davxml.ACE(
+                        davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-read/"))),
+                        davxml.Grant(
+                            davxml.Privilege(davxml.Read()),
+                            davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
+                        ),
+                        davxml.Protected(),
+                        TwistedACLInheritable(),
+                    ),
+                    # DAV:read/DAV:read-current-user-privilege-set/DAV:write access for this principal's calendar-proxy-write users.
+                    davxml.ACE(
+                        davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-write/"))),
+                        davxml.Grant(*proxyprivs),
+                        davxml.Protected(),
+                        TwistedACLInheritable(),
+                    ),
+                )
+
+        returnValue(aces)
+
+
+
 class CalendarAttachment(_NewStoreFileMetaDataHelper, _GetChildHelper):
 
     def __init__(self, calendarObject, attachment, attachmentName, managed, **kw):
@@ -2578,16 +2777,17 @@
         result = (yield storer.run())
 
         # Look for Prefer header
-        if "return-representation" in request.headers.getHeader("prefer", {}) and result.code / 100 == 2:
+        prefer = request.headers.getHeader("prefer", {})
+        returnRepresentation = any([key == "return" and value == "representation" for key, value, _ignore_args in prefer])
+        if returnRepresentation and result.code / 100 == 2:
             result = (yield self.render(request))
             result.code = OK
             result.headers.setHeader("content-location", request.path)
         else:
             result = post_result
-        if action == "attachment-add":
+        if action in ("attachment-add", "attachment-update",):
             result.headers.setHeader("location", location)
-        if action in ("attachment-add", "attachment-update",):
-            result.headers.addRawHeader("Cal-Managed-ID", attachment.dropboxID())
+            result.headers.addRawHeader("Cal-Managed-ID", attachment.managedID())
         returnValue(result)
 
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_accounting.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_accounting.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_accounting.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookmultiget.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookmultiget.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookmultiget.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_addressbookquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_cache.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_cache.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_cache.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_caldavxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_caldavxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_caldavxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_calendarquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_calendarquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_calendarquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_collectioncontents.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_collectioncontents.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_collectioncontents.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_config.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_config.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_config.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_customxml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_customxml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_customxml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_database.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_database.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_database.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_dateops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_dateops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_dateops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.
@@ -17,9 +17,11 @@
 import twistedcaldav.test.util
 from twisted.trial.unittest import SkipTest
 from pycalendar.datetime import PyCalendarDateTime
+
 from twistedcaldav.dateops import parseSQLTimestampToPyCalendar,\
-    parseSQLDateToPyCalendar, parseSQLTimestamp, pyCalendarTodatetime,\
+    parseSQLDateToPyCalendar, pyCalendarTodatetime,\
     normalizeForExpand, normalizeForIndex, normalizeToUTC, timeRangesOverlap
+
 import datetime
 import dateutil
 from pycalendar.timezone import PyCalendarTimezone
@@ -241,11 +243,11 @@
     def test_clipPeriod(self):
         raise SkipTest("test unimplemented")
 
+
     def test_pyCalendarTodatetime(self):
         """
         dateops.pyCalendarTodatetime
         """
-        
         tests = (
             (PyCalendarDateTime(2012, 4, 4, 12, 34, 56), datetime.datetime(2012, 4, 4, 12, 34, 56, tzinfo=dateutil.tz.tzutc())),
             (PyCalendarDateTime(2012, 12, 31), datetime.date(2012, 12, 31)),
@@ -254,24 +256,11 @@
         for pycal, result in tests:
             self.assertEqual(pyCalendarTodatetime(pycal), result)
 
-    def test_parseSQLTimestamp(self):
-        """
-        dateops.parseSQLTimestamp
-        """
-        
-        tests = (
-            ("2012-04-04 12:34:56", datetime.datetime(2012, 4, 4, 12, 34, 56)),
-            ("2012-12-31 01:01:01", datetime.datetime(2012, 12, 31, 1, 1, 1)),
-        )
 
-        for sqlStr, result in tests:
-            self.assertEqual(parseSQLTimestamp(sqlStr), result)
-
     def test_parseSQLTimestampToPyCalendar(self):
         """
         dateops.parseSQLTimestampToPyCalendar
         """
-        
         tests = (
             ("2012-04-04 12:34:56", PyCalendarDateTime(2012, 4, 4, 12, 34, 56)),
             ("2012-12-31 01:01:01", PyCalendarDateTime(2012, 12, 31, 1, 1, 1)),

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_extensions.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_extensions.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_extensions.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_freebusyquery.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_freebusyquery.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_freebusyquery.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_icalendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_icalendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_kerberos.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_kerberos.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_kerberos.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_link.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_link.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_link.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_localization.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_localization.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_localization.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcachepool.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcachepool.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcachepool.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcacheprops.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcacheprops.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_memcacheprops.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_mkcalendar.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_mkcalendar.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_mkcalendar.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_multiget.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_multiget.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_multiget.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,4 +1,4 @@
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_notify.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_notify.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_notify.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_options.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_options.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_options.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_props.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_props.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_props.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sharing.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sharing.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_stdconfig.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_stdconfig.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_stdconfig.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezones.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezones.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezones.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezonestdservice.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezonestdservice.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_timezonestdservice.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_upgrade.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_upgrade.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_validation.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_validation.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_validation.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2009-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_wrapping.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_wrapping.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_wrapping.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -54,6 +54,7 @@
 from txdav.caldav.icalendarstore import ICalendarHome
 from txdav.carddav.iaddressbookstore import IAddressBookHome
 
+from twisted.internet.defer import maybeDeferred
 from txdav.caldav.datastore.file import Calendar
 
 
@@ -248,8 +249,10 @@
                                       % (pathType, pathType))
             yield req.process()
             self.assertEquals(req.chanRequest.code, 404)
-            self.assertRaises(AlreadyFinishedError,
-                              req._newStoreTransaction.commit)
+            yield self.failUnlessFailure(
+                maybeDeferred(req._newStoreTransaction.commit),
+                AlreadyFinishedError
+            )
 
 
     @inlineCallbacks

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xmlutil.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xmlutil.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/test_xmlutil.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/test/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezones.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezones.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezones.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezoneservice.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezoneservice.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezoneservice.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonestdservice.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonestdservice.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonestdservice.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonexml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonexml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/timezonexml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/upgrade.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/upgrade.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_upgrade -*-
 ##
-# Copyright (c) 2008-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2008-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2007-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2007-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/vcard.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/vcard.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/vcard.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/xmlutil.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/xmlutil.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/xmlutil.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Africa/Tripoli.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Africa/Tripoli.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Africa/Tripoli.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -19,6 +19,7 @@
 RDATE:19550930T000000
 RDATE:19850406T000000
 RDATE:19860404T000000
+RDATE:19970404T000000
 TZNAME:CEST
 TZOFFSETFROM:+0100
 TZOFFSETTO:+0200
@@ -29,7 +30,6 @@
 RDATE:19540101T000000
 RDATE:19560101T000000
 RDATE:19861003T000000
-RDATE:19960930T000000
 TZNAME:CET
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0100
@@ -45,6 +45,8 @@
 BEGIN:STANDARD
 DTSTART:19820101T000000
 RDATE:19820101T000000
+RDATE:19960930T000000
+RDATE:20121110T020000
 TZNAME:CEST
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0100
@@ -78,18 +80,25 @@
 TZOFFSETTO:+0100
 END:STANDARD
 BEGIN:STANDARD
-DTSTART:19970404T000000
-RDATE:19970404T000000
-TZNAME:CEST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:STANDARD
-BEGIN:STANDARD
 DTSTART:19971004T000000
 RDATE:19971004T000000
 TZNAME:EET
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0200
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20130329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131025T020000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Araguaina.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Araguaina.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Araguaina.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -64,6 +64,7 @@
 RDATE:19980301T000000
 RDATE:19990221T000000
 RDATE:20000227T000000
+RDATE:20150222T000000
 TZNAME:BRT
 TZOFFSETFROM:-0200
 TZOFFSETTO:-0300
@@ -118,5 +119,26 @@
 TZOFFSETFROM:-0200
 TZOFFSETTO:-0300
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20121021T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20220220T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Bahia.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Bahia.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Bahia.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -32,6 +32,7 @@
 RDATE:19981011T000000
 RDATE:19991003T000000
 RDATE:20021103T000000
+RDATE:20111016T000000
 TZNAME:BRST
 TZOFFSETFROM:-0300
 TZOFFSETTO:-0200
@@ -70,7 +71,6 @@
 RDATE:19990221T000000
 RDATE:20000227T000000
 RDATE:20120226T000000
-RDATE:20150222T000000
 TZNAME:BRT
 TZOFFSETFROM:-0200
 TZOFFSETTO:-0300
@@ -127,30 +127,10 @@
 BEGIN:STANDARD
 DTSTART:20030924T000000
 RDATE:20030924T000000
+RDATE:20121021T000000
 TZNAME:BRT
 TZOFFSETFROM:-0300
 TZOFFSETTO:-0300
 END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20111016T000000
-RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
-TZNAME:BRST
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-END:DAYLIGHT
-BEGIN:STANDARD
-DTSTART:20130217T000000
-RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
-TZNAME:BRT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-END:STANDARD
-BEGIN:STANDARD
-DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;UNTIL=20170219T020000Z;BYDAY=3SU;BYMONTH=2
-TZNAME:BRT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Campo_Grande.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Campo_Grande.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Campo_Grande.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -153,7 +153,7 @@
 END:STANDARD
 BEGIN:STANDARD
 DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;UNTIL=20170219T030000Z;BYDAY=3SU;BYMONTH=2
+RRULE:FREQ=YEARLY;UNTIL=20220220T030000Z;BYDAY=3SU;BYMONTH=2
 TZNAME:AMT
 TZOFFSETFROM:-0300
 TZOFFSETTO:-0400

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Cuiaba.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Cuiaba.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Cuiaba.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -173,7 +173,7 @@
 END:STANDARD
 BEGIN:STANDARD
 DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;UNTIL=20170219T030000Z;BYDAY=3SU;BYMONTH=2
+RRULE:FREQ=YEARLY;UNTIL=20220220T030000Z;BYDAY=3SU;BYMONTH=2
 TZNAME:AMT
 TZOFFSETFROM:-0300
 TZOFFSETTO:-0400

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Havana.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Havana.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Havana.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -190,8 +190,8 @@
 TZOFFSETTO:-0400
 END:DAYLIGHT
 BEGIN:STANDARD
-DTSTART:20121028T010000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+DTSTART:20121104T010000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
 TZNAME:CST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Sao_Paulo.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Sao_Paulo.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/America/Sao_Paulo.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -166,7 +166,7 @@
 END:STANDARD
 BEGIN:STANDARD
 DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;UNTIL=20170219T020000Z;BYDAY=3SU;BYMONTH=2
+RRULE:FREQ=YEARLY;UNTIL=20220220T020000Z;BYDAY=3SU;BYMONTH=2
 TZNAME:BRT
 TZOFFSETFROM:-0200
 TZOFFSETTO:-0300

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Amman.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Amman.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Amman.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -113,10 +113,31 @@
 END:DAYLIGHT
 BEGIN:STANDARD
 DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;UNTIL=20111027T220000Z;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20130328T235959
+RDATE:20130328T235959
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131025T010000
 RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
 TZNAME:EET
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20140327T235959
+RRULE:FREQ=YEARLY;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Gaza.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Gaza.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Gaza.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -43,7 +43,7 @@
 RDATE:20090904T020000
 RDATE:20100811T000000
 RDATE:20110801T000000
-RDATE:20120928T000000
+RDATE:20120921T010000
 TZNAME:EET
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Hebron.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Hebron.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Hebron.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -43,7 +43,7 @@
 RDATE:20100811T000000
 RDATE:20110801T000000
 RDATE:20110930T030000
-RDATE:20120928T030000
+RDATE:20120921T010000
 TZNAME:EET
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Jerusalem.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Jerusalem.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Jerusalem.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -59,8 +59,7 @@
 RDATE:20040407T010000
 RDATE:20050401T020000
 RDATE:20110401T020000
-RDATE:20160401T020000
-RDATE:20170331T020000
+RDATE:20120330T020000
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
@@ -114,11 +113,6 @@
 RDATE:20100912T020000
 RDATE:20111002T020000
 RDATE:20120923T020000
-RDATE:20130908T020000
-RDATE:20140928T020000
-RDATE:20150920T020000
-RDATE:20161009T020000
-RDATE:20170924T020000
 TZNAME:IST
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200
@@ -153,12 +147,19 @@
 TZOFFSETTO:+0300
 END:DAYLIGHT
 BEGIN:DAYLIGHT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
- 0,31;BYMONTH=3
+DTSTART:20130329T020000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=3
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
 END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131006T020000
+RRULE:FREQ=YEARLY;UNTIL=20221001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tehran.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tehran.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tehran.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -65,7 +65,7 @@
 RDATE:20080921T000000
 RDATE:20120921T000000
 RDATE:20160921T000000
-RDATE:20170922T000000
+RDATE:20200921T000000
 TZNAME:IRST
 TZOFFSETFROM:+0430
 TZOFFSETTO:+0330
@@ -80,7 +80,7 @@
 RDATE:20080321T000000
 RDATE:20120321T000000
 RDATE:20160321T000000
-RDATE:20170322T000000
+RDATE:20200321T000000
 TZNAME:IRDT
 TZOFFSETFROM:+0330
 TZOFFSETTO:+0430
@@ -155,5 +155,33 @@
 TZOFFSETFROM:+0430
 TZOFFSETTO:+0330
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20170322T000000
+RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20170922T000000
+RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20210322T000000
+RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20210922T000000
+RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -59,8 +59,7 @@
 RDATE:20040407T010000
 RDATE:20050401T020000
 RDATE:20110401T020000
-RDATE:20160401T020000
-RDATE:20170331T020000
+RDATE:20120330T020000
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
@@ -114,11 +113,6 @@
 RDATE:20100912T020000
 RDATE:20111002T020000
 RDATE:20120923T020000
-RDATE:20130908T020000
-RDATE:20140928T020000
-RDATE:20150920T020000
-RDATE:20161009T020000
-RDATE:20170924T020000
 TZNAME:IST
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200
@@ -153,12 +147,19 @@
 TZOFFSETTO:+0300
 END:DAYLIGHT
 BEGIN:DAYLIGHT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
- 0,31;BYMONTH=3
+DTSTART:20130329T020000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=3
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
 END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131006T020000
+RRULE:FREQ=YEARLY;UNTIL=20221001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Brazil/East.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Brazil/East.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Brazil/East.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -166,7 +166,7 @@
 END:STANDARD
 BEGIN:STANDARD
 DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;UNTIL=20170219T020000Z;BYDAY=3SU;BYMONTH=2
+RRULE:FREQ=YEARLY;UNTIL=20220220T020000Z;BYDAY=3SU;BYMONTH=2
 TZNAME:BRT
 TZOFFSETFROM:-0200
 TZOFFSETTO:-0300

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Cuba.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Cuba.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Cuba.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -190,8 +190,8 @@
 TZOFFSETTO:-0400
 END:DAYLIGHT
 BEGIN:STANDARD
-DTSTART:20121028T010000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+DTSTART:20121104T010000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
 TZNAME:CST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Iran.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Iran.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Iran.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -65,7 +65,7 @@
 RDATE:20080921T000000
 RDATE:20120921T000000
 RDATE:20160921T000000
-RDATE:20170922T000000
+RDATE:20200921T000000
 TZNAME:IRST
 TZOFFSETFROM:+0430
 TZOFFSETTO:+0330
@@ -80,7 +80,7 @@
 RDATE:20080321T000000
 RDATE:20120321T000000
 RDATE:20160321T000000
-RDATE:20170322T000000
+RDATE:20200321T000000
 TZNAME:IRDT
 TZOFFSETFROM:+0330
 TZOFFSETTO:+0430
@@ -155,5 +155,33 @@
 TZOFFSETFROM:+0430
 TZOFFSETTO:+0330
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20170322T000000
+RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20170922T000000
+RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20210322T000000
+RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20210922T000000
+RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Israel.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Israel.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Israel.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -59,8 +59,7 @@
 RDATE:20040407T010000
 RDATE:20050401T020000
 RDATE:20110401T020000
-RDATE:20160401T020000
-RDATE:20170331T020000
+RDATE:20120330T020000
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
@@ -114,11 +113,6 @@
 RDATE:20100912T020000
 RDATE:20111002T020000
 RDATE:20120923T020000
-RDATE:20130908T020000
-RDATE:20140928T020000
-RDATE:20150920T020000
-RDATE:20161009T020000
-RDATE:20170924T020000
 TZNAME:IST
 TZOFFSETFROM:+0300
 TZOFFSETTO:+0200
@@ -153,12 +147,19 @@
 TZOFFSETTO:+0300
 END:DAYLIGHT
 BEGIN:DAYLIGHT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
- 0,31;BYMONTH=3
+DTSTART:20130329T020000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=3
 TZNAME:IDT
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0300
 END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131006T020000
+RRULE:FREQ=YEARLY;UNTIL=20221001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Libya.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Libya.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Libya.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -19,6 +19,7 @@
 RDATE:19550930T000000
 RDATE:19850406T000000
 RDATE:19860404T000000
+RDATE:19970404T000000
 TZNAME:CEST
 TZOFFSETFROM:+0100
 TZOFFSETTO:+0200
@@ -29,7 +30,6 @@
 RDATE:19540101T000000
 RDATE:19560101T000000
 RDATE:19861003T000000
-RDATE:19960930T000000
 TZNAME:CET
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0100
@@ -45,6 +45,8 @@
 BEGIN:STANDARD
 DTSTART:19820101T000000
 RDATE:19820101T000000
+RDATE:19960930T000000
+RDATE:20121110T020000
 TZNAME:CEST
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0100
@@ -78,18 +80,25 @@
 TZOFFSETTO:+0100
 END:STANDARD
 BEGIN:STANDARD
-DTSTART:19970404T000000
-RDATE:19970404T000000
-TZNAME:CEST
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-END:STANDARD
-BEGIN:STANDARD
 DTSTART:19971004T000000
 RDATE:19971004T000000
 TZNAME:EET
 TZOFFSETFROM:+0200
 TZOFFSETTO:+0200
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20130329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131025T020000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Pacific/Apia.ics
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Pacific/Apia.ics	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/Pacific/Apia.ics	2013-01-19 04:44:01 UTC (rev 10313)
@@ -43,10 +43,17 @@
 END:STANDARD
 BEGIN:STANDARD
 DTSTART:20120401T040000
-RDATE:20120401T040000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
 TZNAME:WST
 TZOFFSETFROM:+1400
 TZOFFSETTO:+1300
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120930T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
+TZNAME:WSDT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/timezones.xml
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/timezones.xml	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/timezones.xml	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 <!DOCTYPE timezones SYSTEM "timezones.dtd">
 
 <timezones>
-  <dtstamp>2012-09-24T15:50:25Z</dtstamp>
+  <dtstamp>2013-01-14T15:32:16Z</dtstamp>
   <timezone>
     <tzid>Africa/Abidjan</tzid>
     <dtstamp>2011-10-05T11:50:21Z</dtstamp>
@@ -263,9 +263,9 @@
   </timezone>
   <timezone>
     <tzid>Africa/Tripoli</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
     <alias>Libya</alias>
-    <md5>056c3dc247ee9ebca73a671524fc4617</md5>
+    <md5>f59e5f16eec995c112b8b27580922fdd</md5>
   </timezone>
   <timezone>
     <tzid>Africa/Tunis</tzid>
@@ -302,8 +302,8 @@
   </timezone>
   <timezone>
     <tzid>America/Araguaina</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>4c7d123f689678a9f8e694de612bf465</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>2cac2a50050e86a3dcf0ce0c3aadcafd</md5>
   </timezone>
   <timezone>
     <tzid>America/Argentina/Buenos_Aires</tzid>
@@ -400,8 +400,8 @@
   </timezone>
   <timezone>
     <tzid>America/Bahia</tzid>
-    <dtstamp>2012-05-18T14:15:25Z</dtstamp>
-    <md5>965f8a79c082df05cf6944a8770cc110</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>2d34d74119af2d61ac357e112a064897</md5>
   </timezone>
   <timezone>
     <tzid>America/Bahia_Banderas</tzid>
@@ -455,8 +455,8 @@
   </timezone>
   <timezone>
     <tzid>America/Campo_Grande</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>91f40ed32ffd45cccab772c911e16e8b</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>e9ca8c50d9b0a5801d730afe826b8373</md5>
   </timezone>
   <timezone>
     <tzid>America/Cancun</tzid>
@@ -516,8 +516,8 @@
   </timezone>
   <timezone>
     <tzid>America/Cuiaba</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>24241f96742ae0d523dcfee27804d382</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>8236494198a73c1c36699b928a644d33</md5>
   </timezone>
   <timezone>
     <tzid>America/Curacao</tzid>
@@ -646,9 +646,9 @@
   </timezone>
   <timezone>
     <tzid>America/Havana</tzid>
-    <dtstamp>2012-05-18T14:15:25Z</dtstamp>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
     <alias>Cuba</alias>
-    <md5>08c40cf829ef2c3724b48c2977a9145d</md5>
+    <md5>f5d55854250c6d3f9fc819412919cd0f</md5>
   </timezone>
   <timezone>
     <tzid>America/Hermosillo</tzid>
@@ -1026,9 +1026,9 @@
   </timezone>
   <timezone>
     <tzid>America/Sao_Paulo</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
     <alias>Brazil/East</alias>
-    <md5>70b6c992341d503d191bca71461f1d0d</md5>
+    <md5>a510410d393ad5483abef892258fa63f</md5>
   </timezone>
   <timezone>
     <tzid>America/Scoresbysund</tzid>
@@ -1221,8 +1221,8 @@
   </timezone>
   <timezone>
     <tzid>Asia/Amman</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>4d42a3e2d81a5f0f423b96d12df0d53d</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>3d5145f59e99e4245ccca5484b38b271</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Anadyr</tzid>
@@ -1344,8 +1344,8 @@
   </timezone>
   <timezone>
     <tzid>Asia/Gaza</tzid>
-    <dtstamp>2012-05-18T14:15:25Z</dtstamp>
-    <md5>f01b3a4c427305bcf807b6ba8725d56f</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>2f147fe0807c0776b51d77367cf4bc31</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Harbin</tzid>
@@ -1354,8 +1354,8 @@
   </timezone>
   <timezone>
     <tzid>Asia/Hebron</tzid>
-    <dtstamp>2012-05-18T14:15:25Z</dtstamp>
-    <md5>5186de18517fcbe6792a5979c33d8371</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>b582b6b1656743944987491ebe089332</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Ho_Chi_Minh</tzid>
@@ -1396,10 +1396,10 @@
   </timezone>
   <timezone>
     <tzid>Asia/Jerusalem</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
     <alias>Asia/Tel_Aviv</alias>
     <alias>Israel</alias>
-    <md5>f1a8f9e6a80c9b8e29922e420bacbdfc</md5>
+    <md5>68bab258f99496577d53abe2f2a12963</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Kabul</tzid>
@@ -1602,14 +1602,14 @@
   </timezone>
   <timezone>
     <tzid>Asia/Tehran</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
     <alias>Iran</alias>
-    <md5>7cc49f33778450e85624f0f9489bb42e</md5>
+    <md5>d21c79149c3ad3b5721cd6e05bdf65cd</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Tel_Aviv</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>8bed5e3cbfdc3d315de1b40d91e6981a</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>955a3e37e6a05d03e74e732f0dfa8247</md5>
   </timezone>
   <timezone>
     <tzid>Asia/Thimbu</tzid>
@@ -1874,8 +1874,8 @@
   </timezone>
   <timezone>
     <tzid>Brazil/East</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>ee00e2715bd490456eb11be0f7354ad6</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>9479813700d25eead44698d9a688e8f9</md5>
   </timezone>
   <timezone>
     <tzid>Brazil/West</tzid>
@@ -1949,8 +1949,8 @@
   </timezone>
   <timezone>
     <tzid>Cuba</tzid>
-    <dtstamp>2012-05-18T14:15:25Z</dtstamp>
-    <md5>37f5b060654373fa3c1d73cb00f29140</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>452309cf98758b1eb73ef7fccef10bef</md5>
   </timezone>
   <timezone>
     <tzid>EET</tzid>
@@ -2588,13 +2588,13 @@
   </timezone>
   <timezone>
     <tzid>Iran</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>a3a23dd1119cd8362fd4019ba9e5a8ec</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>844f28e11094bef30381a7ebe5d0c7c6</md5>
   </timezone>
   <timezone>
     <tzid>Israel</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>ddc7408ffeda022e46aaaa72aaf228be</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>52d4f616c8db8d8df19f022dab5c328c</md5>
   </timezone>
   <timezone>
     <tzid>Jamaica</tzid>
@@ -2613,8 +2613,8 @@
   </timezone>
   <timezone>
     <tzid>Libya</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>0946628c34cfcb3d3d019ef1493961ff</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>f514b497bd861c14aa21612f9101c50c</md5>
   </timezone>
   <timezone>
     <tzid>MET</tzid>
@@ -2673,8 +2673,8 @@
   </timezone>
   <timezone>
     <tzid>Pacific/Apia</tzid>
-    <dtstamp>2011-10-05T11:50:21Z</dtstamp>
-    <md5>aef8f66329a5e26715f1375237691865</md5>
+    <dtstamp>2013-01-14T15:32:16Z</dtstamp>
+    <md5>c7fe6c219fb68825f1e065008bc06040</md5>
   </timezone>
   <timezone>
     <tzid>Pacific/Auckland</tzid>

Modified: CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/version.txt
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/version.txt	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/twistedcaldav/zoneinfo/version.txt	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1 +1 @@
-Olson data source: Latest (20120924)
+Olson data source: Latest (20130114)

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/dbapiclient.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/dbapiclient.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/dbapiclient.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -136,6 +136,7 @@
     def store(self):
         return self._dataStore
 
+
     def addOperation(self, operation, name):
         self._operations.append(operation)
         self._tracker.info.append(name)
@@ -148,7 +149,7 @@
         terminated.
 
         @param mode: The manner of the termination of this transaction.
-        
+
         @type mode: C{str}
 
         @raise AlreadyFinishedError: This transaction has already been

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/subpostgres.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/subpostgres.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/subpostgres.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.base.datastore.test.test_subpostgres -*-
 # #
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/test_subpostgres.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/test_subpostgres.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/test/test_subpostgres.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/datastore/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_file -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/appledouble_xattr.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/appledouble_xattr.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/appledouble_xattr.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.base.propertystore.test.test_appledouble -*- ##
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/none.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/none.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/none.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.base.propertystore.test.test_none,txdav.caldav.datastore,txdav.carddav.datastore -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.base.propertystore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_appledouble.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_appledouble.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_appledouble.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_none.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_none.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_none.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_xattr.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_xattr.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/test/test_xattr.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/xattr.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/xattr.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/base/propertystore/xattr.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.base.propertystore.test.test_xattr -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_file -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -264,7 +264,6 @@
     def resourceType(self):
         return ResourceType.calendar #@UndefinedVariable
 
-
     ownerCalendarHome = CommonHomeChild.ownerHome
     viewerCalendarHome = CommonHomeChild.viewerHome
     calendarObjects = CommonHomeChild.objectResources
@@ -498,6 +497,10 @@
         return component
 
 
+    def remove(self):
+        pass
+
+
     def _text(self):
         if self._objectText is not None:
             return self._objectText
@@ -770,7 +773,22 @@
         self._path = self._attachment._path.temporarySibling()
         self._file = self._path.open("w")
 
+        self._txn.postAbort(self.aborted)
 
+
+    @property
+    def _txn(self):
+        return self._attachment._txn
+
+
+    def aborted(self):
+        """
+        Transaction aborted - clean up temp files.
+        """
+        if self._path.exists():
+            self._path.remove()
+
+
     def write(self, data):
         # FIXME: multiple chunks
         self._file.write(data)
@@ -823,6 +841,11 @@
         self._dropboxPath = dropboxPath
 
 
+    @property
+    def _txn(self):
+        return self._calendarObject._txn
+
+
     def name(self):
         return self._name
 
@@ -898,4 +921,3 @@
             calendarObject._componentType = componentType
 
             yield calendarObject
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/index_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/index_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/index_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_index -*-
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/scheduling.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/scheduling.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/scheduling.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_scheduling -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -32,8 +32,12 @@
 from twext.enterprise.dal.syntax import Select, Count, ColumnSyntax
 from twext.enterprise.dal.syntax import Update
 from twext.enterprise.dal.syntax import utcNowSQL
+
+from twext.enterprise.util import parseSQLTimestamp
+
 from twext.python.clsprop import classproperty
 from twext.python.filepath import CachingFilePath
+from twext.python.log import Logger
 from twext.python.vcomponent import VComponent
 from twext.web2.http_headers import MimeType, generateContentType
 from twext.web2.stream import readStream
@@ -45,7 +49,7 @@
 from twistedcaldav.caldavxml import ScheduleCalendarTransp, Opaque
 from twistedcaldav.config import config
 from twistedcaldav.dateops import normalizeForIndex, datetimeMktime, \
-    parseSQLTimestamp, pyCalendarTodatetime, parseSQLDateToPyCalendar
+    pyCalendarTodatetime, parseSQLDateToPyCalendar
 from twistedcaldav.ical import Component, InvalidICalendarDataError, Property
 from twistedcaldav.instance import InvalidOverriddenInstanceError
 from twistedcaldav.memcacher import Memcacher
@@ -57,7 +61,8 @@
 from txdav.caldav.datastore.util import validateCalendarComponent, \
     dropboxIDFromCalendarObject
 from txdav.caldav.icalendarstore import ICalendarHome, ICalendar, ICalendarObject, \
-    IAttachment, AttachmentStoreFailed, AttachmentStoreValidManagedID
+    IAttachment, AttachmentStoreFailed, AttachmentStoreValidManagedID, \
+    AttachmentMigrationFailed
 from txdav.caldav.icalendarstore import QuotaExceeded
 from txdav.common.datastore.sql import CommonHome, CommonHomeChild, \
     CommonObjectResource, ECALENDARTYPE
@@ -65,10 +70,11 @@
     PostgresLegacyInboxIndexEmulator
 from txdav.common.datastore.sql_tables import CALENDAR_TABLE, \
     CALENDAR_BIND_TABLE, CALENDAR_OBJECT_REVISIONS_TABLE, CALENDAR_OBJECT_TABLE, \
-    _ATTACHMENTS_MODE_NONE, _ATTACHMENTS_MODE_READ, _ATTACHMENTS_MODE_WRITE, \
+    _ATTACHMENTS_MODE_NONE, _ATTACHMENTS_MODE_WRITE, \
     CALENDAR_HOME_TABLE, CALENDAR_HOME_METADATA_TABLE, \
     CALENDAR_AND_CALENDAR_BIND, CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE, \
-    CALENDAR_OBJECT_AND_BIND_TABLE, schema
+    CALENDAR_OBJECT_AND_BIND_TABLE, schema, _BIND_MODE_OWN, \
+    _ATTACHMENTS_MODE_READ
 from txdav.common.icommondatastore import IndexedSearchException, \
     InternalDataStoreError, HomeChildNameAlreadyExistsError, \
     HomeChildNameNotAllowedError
@@ -86,6 +92,214 @@
 import tempfile
 import uuid
 
+log = Logger()
+
+class CalendarStoreFeatures(object):
+    """
+    Manages store-wide operations specific to calendars.
+    """
+
+    def __init__(self, store):
+        """
+        @param store: the underlying store object to use.
+        @type store: L{twext.common.datastore.sql.CommonDataStore}
+        """
+        self._store = store
+
+
+    @inlineCallbacks
+    def hasDropboxAttachments(self, txn):
+        """
+        Determine whether any dropbox attachments are present.
+
+        @param txn: the transaction to run under
+        @type txn: L{txdav.common.datastore.sql.CommonStoreTransaction}
+        """
+
+        at = schema.ATTACHMENT
+        rows = (yield Select(
+            (at.DROPBOX_ID,),
+            From=at,
+            Where=at.DROPBOX_ID != ".",
+            Limit=1,
+        ).on(txn))
+        returnValue(len(rows) != 0)
+
+
+    @inlineCallbacks
+    def upgradeToManagedAttachments(self, batchSize=10):
+        """
+        Upgrade the calendar server from old-style dropbox attachments to the new
+        managed attachments. This is a one-way, one-time migration step. This method
+        creates its own transactions as needed (possibly multiple when batching).
+
+        Things to do:
+
+        1. For any CALENDAR_OBJECT rows with a DROPBOX_ID not matching an existing DROPBOX_ID
+        in the ATTACHMENT table, null out CALENDAR_OBJECT.DROPBOX_ID. Do not rewrite calendar
+        data to remove X-APPLE-DROPBOX.
+
+        2. For each item in the ATTACHMENT table, convert into a managed attachment and re-write
+        all calendar data referring to that attachment.
+
+        TODO: parallelize this as much as possible as it will have to touch a lot of data.
+        """
+
+        txn = self._store.newTransaction("CalendarStoreFeatures.upgradeToManagedAttachments - preliminary work")
+        try:
+            # Clear out unused CALENDAR_OBJECT.DROPBOX_IDs
+            co = schema.CALENDAR_OBJECT
+            at = schema.ATTACHMENT
+            yield Update(
+                {co.DROPBOX_ID: None},
+                Where=co.RESOURCE_ID.In(Select(
+                    (co.RESOURCE_ID,),
+                    From=co.join(at, co.DROPBOX_ID == at.DROPBOX_ID, "left outer"),
+                    Where=(co.DROPBOX_ID != None).And(at.DROPBOX_ID == None),
+                )),
+            ).on(txn)
+
+            # Count number to process so we can display progress
+            rows = (yield Select(
+                (Count(at.DROPBOX_ID),),
+                From=at,
+                Where=at.DROPBOX_ID != ".",
+                GroupBy=at.DROPBOX_ID,
+                Limit=batchSize,
+            ).on(txn))
+            total = rows[0][0]
+            count = 0
+            log.warn("%d dropbox ids to migrate" % (total,))
+        except RuntimeError:
+            yield txn.abort()
+            raise
+        else:
+            yield txn.commit()
+
+        # For each remaining attachment
+        rows = -1
+        while rows:
+            txn = self._store.newTransaction("CalendarStoreFeatures.upgradeToManagedAttachments - attachment loop count: %d" % (count,))
+            try:
+                dropbox_id = "Batched select"
+                rows = (yield Select(
+                    (at.DROPBOX_ID,),
+                    From=at,
+                    Where=at.DROPBOX_ID != ".",
+                    Limit=batchSize,
+                    Distinct=True,
+                ).on(txn))
+                if len(rows) > 0:
+                    for dropbox_id in rows:
+                        (yield self._upgradeDropbox(txn, dropbox_id))
+                    count += len(rows)
+                    log.warn("%d of %d dropbox ids migrated" % (count, total,))
+            except RuntimeError, e:
+                log.error("Dropbox migration failed for '%s': %s" % (dropbox_id, e,))
+                yield txn.abort()
+                raise
+            else:
+                yield txn.commit()
+
+
+    @inlineCallbacks
+    def _upgradeDropbox(self, txn, dropbox_id):
+        """
+        Upgrade attachments for the corresponding dropbox box to managed attachments. This is tricky
+        in that we have to spot the case of a dropbox attachment being used by more than one event
+        in the owner's home (e.g., the case of a recurrence split). We have to give each owned event
+        its own managed attachment reference (though they point to the same actual attachment data).
+        So we need to detect owned attachments and group by UID.
+
+        @param dropbox_id: the dropbox id to upgrade
+        @type dropbox_id: C{str}
+        """
+
+        log.debug("Processing dropbox id: %s" % (dropbox_id,))
+
+        # Get all affected calendar objects
+        cobjs = (yield self._loadCalendarObjectsForDropboxID(txn, dropbox_id))
+        log.debug("  %d affected calendar objects" % (len(cobjs),))
+
+        # Get names of each matching attachment
+        at = schema.ATTACHMENT
+        names = (yield Select(
+            (at.PATH,),
+            From=at,
+            Where=at.DROPBOX_ID == dropbox_id,
+        ).on(txn))
+        log.debug("  %d associated attachment objects" % (len(names),))
+
+        # For each attachment, update each calendar object
+        for name in names:
+            name = name[0]
+            log.debug("  processing attachment object: %s" % (name,))
+            attachment = (yield DropBoxAttachment.load(txn, dropbox_id, name))
+
+            # Find owner objects and group all by UID
+            owners = []
+            cobj_by_UID = collections.defaultdict(list)
+            for cobj in cobjs:
+                if cobj._parentCollection.ownerHome()._resourceID == attachment._ownerHomeID:
+                    owners.append(cobj)
+                cobj_by_UID[cobj.uid()].append(cobj)
+            log.debug("    %d owner calendar objects" % (len(owners),))
+            log.debug("    %d UIDs" % (len(cobj_by_UID),))
+            log.debug("    %d total calendar objects" % (sum([len(items) for items in cobj_by_UID.values()]),))
+
+            if owners:
+                # Create the managed attachment without references to calendar objects.
+                managed = (yield attachment.convertToManaged())
+                log.debug("    converted attachment: %r" % (attachment,))
+
+                # Do conversion for each owner object
+                for owner_obj in owners:
+
+                    # Add a reference to the managed attachment
+                    mattachment = (yield managed.newReference(owner_obj._resourceID))
+                    log.debug("    added reference for: %r" % (owner_obj,))
+
+                    # Rewrite calendar data
+                    for cobj in cobj_by_UID[owner_obj.uid()]:
+                        (yield cobj.convertAttachments(attachment, mattachment))
+                        log.debug("    re-wrote calendar object: %r" % (cobj,))
+            else:
+                # TODO: look for cobjs that were not changed and remove their ATTACH properties.
+                # These could happen if the owner object no longer exists.
+                pass
+
+        log.debug("  finished dropbox id: %s" % (dropbox_id,))
+
+
+    @inlineCallbacks
+    def _loadCalendarObjectsForDropboxID(self, txn, dropbox_id):
+        """
+        Load all calendar objects (and associated calendars and homes) that match the
+        specified dropbox id.
+
+        @param dropbox_id: the dropbox id to match.
+        @type dropbox_id: C{str}
+        """
+
+        co = schema.CALENDAR_OBJECT
+        cb = schema.CALENDAR_BIND
+        rows = (yield Select(
+            (cb.CALENDAR_HOME_RESOURCE_ID, co.CALENDAR_RESOURCE_ID, co.RESOURCE_ID,),
+            From=co.join(cb, co.CALENDAR_RESOURCE_ID == cb.CALENDAR_RESOURCE_ID),
+            Where=(co.DROPBOX_ID == dropbox_id).And(cb.BIND_MODE == _BIND_MODE_OWN)
+        ).on(txn))
+
+        results = []
+        for home_rid, calendar_rid, cobj_rid in rows:
+            home = (yield txn.calendarHomeWithResourceID(home_rid))
+            calendar = (yield home.childWithID(calendar_rid))
+            cobj = (yield calendar.objectResourceWithID(cobj_rid))
+            results.append(cobj)
+
+        returnValue(results)
+
+
+
 class CalendarHome(CommonHome):
 
     implements(ICalendarHome)
@@ -263,6 +477,19 @@
 
 
     @inlineCallbacks
+    def getAllManagedIDs(self):
+        at = schema.ATTACHMENT
+        attco = schema.ATTACHMENT_CALENDAR_OBJECT
+        rows = (yield Select(
+            [attco.MANAGED_ID, ],
+            From=attco.join(at, attco.ATTACHMENT_ID == at.ATTACHMENT_ID),
+            Where=at.CALENDAR_HOME_RESOURCE_ID == self._resourceID,
+            OrderBy=attco.MANAGED_ID
+        ).on(self._txn))
+        returnValue([row[0] for row in rows])
+
+
+    @inlineCallbacks
     def attachmentObjectWithID(self, managedID):
         attach = (yield ManagedAttachment.load(self._txn, managedID))
         returnValue(attach)
@@ -745,6 +972,7 @@
         self.scheduleTag = metadata.get("scheduleTag", "")
         self.scheduleEtags = metadata.get("scheduleEtags", "")
         self.hasPrivateComment = metadata.get("hasPrivateComment", False)
+        self._dropboxID = None
 
     _allColumns = [
         _objectSchema.RESOURCE_ID,
@@ -932,17 +1160,18 @@
             # Determine attachment mode (ignore inbox's) - NB we have to do this
             # after setting up other properties as UID at least is needed
             self._attachment = _ATTACHMENTS_MODE_NONE
-            self._dropboxID = None
-            if self._parentCollection.name() != "inbox":
-                if component.hasPropertyInAnyComponent("X-APPLE-DROPBOX"):
-                    self._attachment = _ATTACHMENTS_MODE_WRITE
-                    self._dropboxID = (yield self.dropboxID())
-                elif component.hasPropertyInAnyComponent("ATTACH"):
-                    # FIXME: really we ought to check to see if the ATTACH
-                    # properties have URI values and if those are pointing to our
-                    # server dropbox collections and only then set the read mode
-                    self._attachment = _ATTACHMENTS_MODE_READ
-                    self._dropboxID = (yield self.dropboxID())
+            if self._dropboxID is None:
+                if self._parentCollection.name() != "inbox":
+                    if component.hasPropertyInAnyComponent("X-APPLE-DROPBOX"):
+                        self._attachment = _ATTACHMENTS_MODE_WRITE
+                        self._dropboxID = (yield self.dropboxID())
+                    else:
+                        # Only include a dropbox id if dropbox attachments exist
+                        attachments = component.getAllPropertiesInAnyComponent("ATTACH")
+                        has_dropbox = any([attachment.value().find("/dropbox/") != -1 for attachment in attachments])
+                        if has_dropbox:
+                            self._attachment = _ATTACHMENTS_MODE_READ
+                            self._dropboxID = (yield self.dropboxID())
 
             values = {
                 co.CALENDAR_RESOURCE_ID            : self._calendar._resourceID,
@@ -1125,6 +1354,8 @@
     @inlineCallbacks
     def remove(self):
         # Need to also remove attachments
+        if self._dropboxID:
+            yield DropBoxAttachment.resourceRemoved(self._txn, self._resourceID, self._dropboxID)
         yield ManagedAttachment.resourceRemoved(self._txn, self._resourceID)
         yield super(CalendarObject, self).remove()
 
@@ -1279,7 +1510,7 @@
     def creatingResourceCheckAttachments(cls, txn, parent, component):
         """
         A new component is going to be stored. Check any ATTACH properties that may be present
-        to verify they owned by the organizer/owner of the resource and re-write the managed-ids.
+        to verify they are owned by the organizer/owner of the resource and re-write the managed-ids.
 
         @param component: calendar component about to be stored
         @type component: L{Component}
@@ -1297,7 +1528,7 @@
         if len(attached) == 0:
             returnValue(None)
 
-        changes = yield cls._addingManagedIDs(txn, parent, attached, component.resourceUID())
+        changes = yield cls._addingManagedIDs(txn, parent, str(uuid.uuid4()), attached, component.resourceUID())
         returnValue(changes)
 
 
@@ -1305,7 +1536,7 @@
     def updatingResourceCheckAttachments(self, component):
         """
         A component is being changed. Check any ATTACH properties that may be present
-        to verify they owned by the organizer/owner of the resource and re-write the managed-ids.
+        to verify they are owned by the organizer/owner of the resource and re-write the managed-ids.
 
         @param component: calendar component about to be stored
         @type component: L{Component}
@@ -1344,7 +1575,7 @@
         for managed_id in added:
             changed[managed_id] = newattached[managed_id]
 
-        changes = yield self._addingManagedIDs(self._txn, self._parentCollection, changed, component.resourceUID())
+        changes = yield self._addingManagedIDs(self._txn, self._parentCollection, self._dropboxID, changed, component.resourceUID())
 
         # Make sure existing data is not changed
         same = oldattached_keys & newattached_keys
@@ -1364,7 +1595,7 @@
 
     @classmethod
     @inlineCallbacks
-    def _addingManagedIDs(cls, txn, parent, attached, newuid):
+    def _addingManagedIDs(cls, txn, parent, dropbox_id, attached, newuid):
         # Now check each managed-id
         changes = []
         for managed_id, attachments in attached.items():
@@ -1386,14 +1617,14 @@
 
             # 1. UID check
             if uid == newuid:
-                yield cls._syncAttachmentProperty(txn, managed_id, attachments)
+                yield cls._syncAttachmentProperty(txn, managed_id, dropbox_id, attachments)
 
             # 2. Same home
             elif home_id == parent.ownerHome()._resourceID:
 
                 # Need to rewrite the managed-id, value in the properties
                 new_id = str(uuid.uuid4())
-                yield cls._syncAttachmentProperty(txn, managed_id, attachments, new_id)
+                yield cls._syncAttachmentProperty(txn, managed_id, dropbox_id, attachments, new_id)
                 changes.append((managed_id, new_id,))
 
             else:
@@ -1404,7 +1635,7 @@
 
     @classmethod
     @inlineCallbacks
-    def _syncAttachmentProperty(cls, txn, managed_id, attachments, new_id=None):
+    def _syncAttachmentProperty(cls, txn, managed_id, dropbox_id, attachments, new_id=None):
         """
         Make sure the supplied set of attach properties are all sync'd with the current value of the
         matching managed-id attachment.
@@ -1416,14 +1647,12 @@
         @param new_id: Value of new Managed-ID to use
         @type new_id: C{str}
         """
-        original_attachment = (yield ManagedAttachment.load(txn, managed_id))
+        new_attachment = (yield ManagedAttachment.load(txn, managed_id))
+        if new_id:
+            new_attachment._managedID = new_id
+            new_attachment._objectDropboxID = dropbox_id
         for attachment in attachments:
-            attachment.setParameter("MANAGED-ID", managed_id if new_id is None else new_id)
-            attachment.setParameter("MTAG", original_attachment.md5())
-            attachment.setParameter("FMTTYPE", "%s/%s" % (original_attachment.contentType().mediaType, original_attachment.contentType().mediaSubtype))
-            attachment.setParameter("FILENAME", original_attachment.name())
-            attachment.setParameter("SIZE", str(original_attachment.size()))
-            attachment.setValue((yield original_attachment.location(new_id)))
+            yield new_attachment.updateProperty(attachment)
 
 
     @classmethod
@@ -1476,17 +1705,14 @@
             raise AttachmentStoreFailed
         yield t.loseConnection()
 
+        if self._dropboxID is None:
+            self._dropboxID = str(uuid.uuid4())
+        attachment._objectDropboxID = self._dropboxID
+
         # Now try and adjust the actual calendar data
         #calendar = (yield self.component())
 
-        location = (yield attachment.location())
-        attach = Property("ATTACH", location, params={
-            "MANAGED-ID": attachment.managedID(),
-            "MTAG": attachment.md5(),
-            "FMTTYPE": "%s/%s" % (attachment.contentType().mediaType, attachment.contentType().mediaSubtype),
-            "FILENAME": attachment.name(),
-            "SIZE": str(attachment.size()),
-        }, valuetype=PyCalendarValue.VALUETYPE_URI)
+        attach, location = (yield attachment.attachProperty())
         if rids is None:
             calendar.addPropertyToAllComponents(attach)
         else:
@@ -1531,17 +1757,7 @@
         # Now try and adjust the actual calendar data
         #calendar = (yield self.component())
 
-        location = self._txn._store.attachmentsURIPattern % {
-            "home": self._parentCollection.ownerHome().name(),
-            "name": attachment.managedID(),
-        }
-        attach = Property("ATTACH", location, params={
-            "MANAGED-ID": attachment.managedID(),
-            "MTAG": attachment.md5(),
-            "FMTTYPE": "%s/%s" % (attachment.contentType().mediaType, attachment.contentType().mediaSubtype),
-            "FILENAME": attachment.name(),
-            "SIZE": str(attachment.size()),
-        }, valuetype=PyCalendarValue.VALUETYPE_URI)
+        attach, location = (yield attachment.attachProperty())
         calendar.replaceAllPropertiesWithParameterMatch(attach, "MANAGED-ID", managed_id)
 
         # TODO: Here is where we want to store data implicitly - for now we have to let app layer deal with it
@@ -1578,6 +1794,41 @@
 
 
     @inlineCallbacks
+    def convertAttachments(self, oldattachment, newattachment):
+        """
+        Convert ATTACH properties in the calendar data from a dropbox attachment to a managed attachment.
+        This is only used when migrating from dropbox to managed attachments. The ATTACH/ATTACH_CALENDAR_OBJECT
+        DB tables have already been updated to reflect the new managed attachment entry, however the CALENDAR_OBJECT.
+        DROPBOX_ID column has not.
+
+        @param oldattachment: the old dropbox attachment being converted
+        @type oldattachment: L{DropBoxAttachment}
+        @param newattachment: the new managed attachment
+        @type newattachment: L{ManagedAttachment}
+        """
+
+        # Scan each component looking for an ATTACH matching the old dropbox, remove
+        # that and add a new managed ATTACH property
+        cal = (yield self.component())
+        for component in cal.subcomponents():
+            attachments = component.properties("ATTACH")
+            removed = False
+            for attachment in tuple(attachments):
+                if attachment.value().endswith("/dropbox/%s/%s" % (oldattachment.dropboxID(), oldattachment.name(),)):
+                    component.removeProperty(attachment)
+                    removed = True
+            if removed:
+                attach, _ignore_location = (yield newattachment.attachProperty())
+                component.addProperty(attach)
+            component.removeAllPropertiesWithName("X-APPLE-DROPBOX")
+
+        # Write the component back (and no need to re-index as we have not
+        # changed any timing properties in the calendar data).
+        cal.noInstanceIndexing = True
+        yield self.setComponent(cal)
+
+
+    @inlineCallbacks
     def createManagedAttachment(self):
 
         # We need to know the resource_ID of the home collection of the owner
@@ -1616,6 +1867,44 @@
 
 
     @inlineCallbacks
+    def managedAttachmentList(self):
+        """
+        Get a list of managed attachments where the names returned are for the last path segment
+        of the attachment URI.
+        """
+        at = schema.ATTACHMENT
+        attco = schema.ATTACHMENT_CALENDAR_OBJECT
+        rows = (yield Select(
+            [attco.MANAGED_ID, at.PATH, ],
+            From=attco.join(at, attco.ATTACHMENT_ID == at.ATTACHMENT_ID),
+            Where=attco.CALENDAR_OBJECT_RESOURCE_ID == Parameter("resourceID")
+        ).on(self._txn, resourceID=self._resourceID))
+        returnValue([ManagedAttachment.lastSegmentOfUriPath(row[0], row[1]) for row in rows])
+
+
+    @inlineCallbacks
+    def managedAttachmentRetrieval(self, name):
+        """
+        Return a managed attachment specified by the last path segment of the attachment URI.
+        """
+
+        # Scan all the associated attachments for the one that matches
+        at = schema.ATTACHMENT
+        attco = schema.ATTACHMENT_CALENDAR_OBJECT
+        rows = (yield Select(
+            [attco.MANAGED_ID, at.PATH, ],
+            From=attco.join(at, attco.ATTACHMENT_ID == at.ATTACHMENT_ID),
+            Where=attco.CALENDAR_OBJECT_RESOURCE_ID == Parameter("resourceID")
+        ).on(self._txn, resourceID=self._resourceID))
+
+        for att_managed_id, att_name in rows:
+            if ManagedAttachment.lastSegmentOfUriPath(att_managed_id, att_name) == name:
+                attachment = (yield self.attachmentWithManagedID(att_managed_id))
+                returnValue(attachment)
+        returnValue(None)
+
+
+    @inlineCallbacks
     def createAttachmentWithName(self, name):
 
         # We need to know the resource_ID of the home collection of the owner
@@ -1701,7 +1990,9 @@
         self._hash = hashlib.md5()
         self._creating = creating
 
+        self._txn.postAbort(self.aborted)
 
+
     def _temporaryFile(self):
         """
         Returns a (file descriptor, absolute path) tuple for a temporary file within
@@ -1721,6 +2012,14 @@
         return self._attachment._txn
 
 
+    def aborted(self):
+        """
+        Transaction aborted - clean up temp files.
+        """
+        if self._path.exists():
+            self._path.remove()
+
+
     def write(self, data):
         if isinstance(data, buffer):
             data = str(data)
@@ -1794,6 +2093,10 @@
         self._justCreated = justCreated
 
 
+    def __repr__(self):
+        return "<%s: %s>" % (self.__class__.__name__, self._attachmentID)
+
+
     def _attachmentPathRoot(self):
         return self._txn._store.attachmentsPath
 
@@ -1849,7 +2152,7 @@
 
 
     def isManaged(self):
-        return not self._dropboxID
+        return self._dropboxID == "."
 
 
     def name(self):
@@ -2050,7 +2353,37 @@
         return attachmentRoot.child(self.name())
 
 
+    @classmethod
     @inlineCallbacks
+    def resourceRemoved(cls, txn, resourceID, dropboxID):
+        """
+        Remove all attachments referencing the specified resource.
+        """
+
+        # See if any other resources still reference this dropbox ID
+        co = schema.CALENDAR_OBJECT
+        rows = (yield Select(
+            [co.RESOURCE_ID, ],
+            From=co,
+            Where=(co.DROPBOX_ID == dropboxID).And(
+                co.RESOURCE_ID != resourceID)
+        ).on(txn))
+
+        if not rows:
+            # Find each attachment with matching dropbox ID
+            att = schema.ATTACHMENT
+            rows = (yield Select(
+                [att.PATH],
+                From=att,
+                Where=(att.DROPBOX_ID == dropboxID)
+            ).on(txn))
+            for name in rows:
+                name = name[0]
+                attachment = yield cls.load(txn, dropboxID, name)
+                yield attachment.remove()
+
+
+    @inlineCallbacks
     def changed(self, contentType, dispositionName, md5, size):
         """
         Dropbox attachments never change their path - ignore dispositionName.
@@ -2075,14 +2408,55 @@
         )
 
 
+    @inlineCallbacks
+    def convertToManaged(self):
+        """
+        Convert this dropbox attachment into a managed attachment by updating the
+        database and returning a new ManagedAttachment object that does not reference
+        any calendar object. Referencing will be added later.
 
+        @return: the managed attachment object
+        @rtype: L{ManagedAttachment}
+        """
+
+        # Change the DROPBOX_ID to a single "." to indicate a managed attachment.
+        att = schema.ATTACHMENT
+        (yield Update(
+            {att.DROPBOX_ID    : ".", },
+            Where=(att.ATTACHMENT_ID == self._attachmentID),
+        ).on(self._txn))
+
+        # Create an "orphaned" ManagedAttachment that points to the updated data but without
+        # an actual managed-id (which only exists when there is a reference to a calendar object).
+        mattach = (yield ManagedAttachment.load(self._txn, None, attachmentID=self._attachmentID))
+        if mattach is None:
+            raise AttachmentMigrationFailed
+
+        # Then move the file on disk from the old path to the new one
+        mattach._path.parent().makedirs()
+        oldpath = self._path
+        newpath = mattach._path
+        oldpath.moveTo(newpath)
+
+        returnValue(mattach)
+
+
+
 class ManagedAttachment(Attachment):
+    """
+    Managed attachments are ones that the server is in total control of. Clients do POSTs on calendar objects
+    to store the attachment data and have ATTACH properties added, updated or remove from the calendar objects.
+    Each ATTACH property in a calendar object has a MANAGED-ID iCalendar parameter that is used in the POST requests
+    to target a specific attachment. The MANAGED-ID values are unique to each calendar object resource, though
+    multiple calendar object resources can point to the same underlying attachment as there is a separate database
+    table that maps calendar objects/managed-ids to actual attachments.
+    """
 
     @classmethod
     @inlineCallbacks
     def _create(cls, txn, managedID, ownerHomeID):
         """
-        Create a new Attachment object.
+        Create a new managed Attachment object.
 
         @param txn: The transaction to use
         @type txn: L{CommonStoreTransaction}
@@ -2096,7 +2470,7 @@
         att = schema.ATTACHMENT
         rows = (yield Insert({
             att.CALENDAR_HOME_RESOURCE_ID : ownerHomeID,
-            att.DROPBOX_ID                : None,
+            att.DROPBOX_ID                : ".",
             att.CONTENT_TYPE              : "",
             att.SIZE                      : 0,
             att.MD5                       : "",
@@ -2108,7 +2482,7 @@
         created = sqltime(row_iter.next())
         modified = sqltime(row_iter.next())
 
-        attachment = cls(txn, a_id, managedID, None, ownerHomeID, True)
+        attachment = cls(txn, a_id, ".", None, ownerHomeID, True)
         attachment._managedID = managedID
         attachment._created = created
         attachment._modified = modified
@@ -2148,6 +2522,8 @@
             attco.MANAGED_ID                  : managedID,
             attco.CALENDAR_OBJECT_RESOURCE_ID : referencedBy,
         }).on(txn)
+        attachment._managedID = managedID
+        attachment._objectResourceID = referencedBy
 
         returnValue(attachment)
 
@@ -2183,6 +2559,8 @@
                 attco.CALENDAR_OBJECT_RESOURCE_ID == referencedBy
             ),
         ).on(txn)
+        attachment._managedID = managedID
+        attachment._objectResourceID = referencedBy
 
         # Now check whether old attachmentID is still referenced - if not delete it
         rows = (yield Select(
@@ -2201,22 +2579,30 @@
 
     @classmethod
     @inlineCallbacks
-    def load(cls, txn, managedID):
-        attco = schema.ATTACHMENT_CALENDAR_OBJECT
-        rows = (yield Select(
-            [attco.ATTACHMENT_ID, attco.CALENDAR_OBJECT_RESOURCE_ID, ],
-            From=attco,
-            Where=(attco.MANAGED_ID == managedID),
-        ).on(txn))
-        if len(rows) == 0:
-            returnValue(None)
-        elif len(rows) != 1:
-            raise AttachmentStoreValidManagedID
+    def load(cls, txn, managedID, attachmentID=None):
+        """
+        Create a ManagedAttachment via either its managedID or attachmentID.
+        """
 
-        attachment = cls(txn, rows[0][0], None, None)
+        if managedID:
+            attco = schema.ATTACHMENT_CALENDAR_OBJECT
+            rows = (yield Select(
+                [attco.ATTACHMENT_ID, attco.CALENDAR_OBJECT_RESOURCE_ID, ],
+                From=attco,
+                Where=(attco.MANAGED_ID == managedID),
+            ).on(txn))
+            if len(rows) == 0:
+                returnValue(None)
+            elif len(rows) != 1:
+                raise AttachmentStoreValidManagedID
+            rows = rows[0]
+        else:
+            rows = (attachmentID, None,)
+
+        attachment = cls(txn, rows[0], None, None)
         attachment = (yield attachment.initFromStore())
         attachment._managedID = managedID
-        attachment._objectResourceID = rows[0][1]
+        attachment._objectResourceID = rows[1]
         returnValue(attachment)
 
 
@@ -2325,21 +2711,35 @@
 
 
     @inlineCallbacks
-    def location(self, new_id=None):
+    def location(self):
         """
-        Return the URI location of the attachment. Use a different managed-id if one is passed in. That is used
-        when creating a reference to an existing attachment via a new Managed-ID.
+        Return the URI location of the attachment.
         """
         if not hasattr(self, "_ownerName"):
             home = (yield self._txn.calendarHomeWithResourceID(self._ownerHomeID))
             self._ownerName = home.name()
+        if not hasattr(self, "_objectDropboxID"):
+            if not hasattr(self, "_objectResource"):
+                self._objectResource = (yield self.objectResource())
+            self._objectDropboxID = self._objectResource._dropboxID
+
+        fname = self.lastSegmentOfUriPath(self._managedID, self._name)
         location = self._txn._store.attachmentsURIPattern % {
             "home": self._ownerName,
-            "name": self._managedID if new_id is None else new_id,
+            "dropbox_id": self._objectDropboxID,
+            "name": fname,
         }
         returnValue(location)
 
 
+    @classmethod
+    def lastSegmentOfUriPath(cls, managed_id, name):
+        splits = name.rsplit(".", 1)
+        fname = splits[0]
+        suffix = splits[1] if len(splits) == 2 else "unknown"
+        return "%s-%s.%s" % (fname, managed_id[:8], suffix)
+
+
     @inlineCallbacks
     def changed(self, contentType, dispositionName, md5, size):
         """
@@ -2367,6 +2767,31 @@
 
 
     @inlineCallbacks
+    def newReference(self, resourceID):
+        """
+        Create a new managed-id that references the supplied calendar object resource id, and
+        return a ManagedAttachment for the new reference.
+
+        @param resourceID: the resource id to reference
+        @type resourceID: C{int}
+
+        @return: the new managed attachment
+        @rtype: L{ManagedAttachment}
+        """
+
+        managed_id = str(uuid.uuid4())
+        attco = schema.ATTACHMENT_CALENDAR_OBJECT
+        yield Insert({
+            attco.ATTACHMENT_ID               : self._attachmentID,
+            attco.MANAGED_ID                  : managed_id,
+            attco.CALENDAR_OBJECT_RESOURCE_ID : resourceID,
+        }).on(self._txn)
+
+        mattach = (yield ManagedAttachment.load(self._txn, managed_id))
+        returnValue(mattach)
+
+
+    @inlineCallbacks
     def removeFromResource(self, resourceID):
 
         # Delete the reference
@@ -2387,4 +2812,31 @@
             yield self.remove()
 
 
+    @inlineCallbacks
+    def attachProperty(self):
+        """
+        Return an iCalendar ATTACH property for this attachment.
+        """
+        attach = Property("ATTACH", "", valuetype=PyCalendarValue.VALUETYPE_URI)
+        location = (yield self.updateProperty(attach))
+        returnValue((attach, location,))
+
+
+    @inlineCallbacks
+    def updateProperty(self, attach):
+        """
+        Update an iCalendar ATTACH property for this attachment.
+        """
+
+        location = (yield self.location())
+
+        attach.setParameter("MANAGED-ID", self.managedID())
+        attach.setParameter("MTAG", self.md5())
+        attach.setParameter("FMTTYPE", "%s/%s" % (self.contentType().mediaType, self.contentType().mediaSubtype))
+        attach.setParameter("FILENAME", self.name())
+        attach.setParameter("SIZE", str(self.size()))
+        attach.setValue(location)
+
+        returnValue(location)
+
 Calendar._objectResourceClass = CalendarObject

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -20,6 +20,7 @@
 """
 
 from StringIO import StringIO
+import os
 
 from twisted.internet.defer import Deferred, inlineCallbacks, returnValue, \
     maybeDeferred
@@ -117,6 +118,7 @@
         "DTSTART;TZID=US/Pacific:20100207T170000\r\n"
         "DTSTAMP:20100203T013909Z\r\n"
         "SEQUENCE:3\r\n"
+        "X-APPLE-DROPBOX:/calendars/users/wsanchez/dropbox/uid-test.dropbox\r\n"
         "BEGIN:VALARM\r\n"
           "X-WR-ALARMUID:1377CCC7-F85C-4610-8583-9513D4B364E1\r\n"
           "TRIGGER:-PT20M\r\n"
@@ -2035,6 +2037,37 @@
 
 
     @inlineCallbacks
+    def test_attachmentTemporaryFileCleanup(self):
+        """
+        L{IAttachmentStream} object cleans-up its temporary file on txn abort.
+        """
+        obj = yield self.calendarObjectUnderTest()
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+
+        temp = t._path.path
+
+        yield self.abort()
+
+        self.assertFalse(os.path.exists(temp))
+
+        obj = yield self.calendarObjectUnderTest()
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+
+        temp = t._path.path
+        os.remove(temp)
+
+        yield self.abort()
+
+        self.assertFalse(os.path.exists(temp))
+
+
+    @inlineCallbacks
     def test_quotaAllowedBytes(self):
         """
         L{ICalendarHome.quotaAllowedBytes} should return the configuration value
@@ -2292,8 +2325,12 @@
         for uid in additionalUIDs:
             yield txn.calendarHomeWithUID(uid, create=True)
         yield self.commit()
+
+
         # try to create a calendar in all of them, then fail.
-        class AnException(Exception): pass
+        class AnException(Exception):
+            pass
+
         caught = []
         @inlineCallbacks
         def toEachCalendarHome(txn, eachHome):
@@ -2315,4 +2352,3 @@
         yield noNewCalendar(caught[0])
         yield noNewCalendar('home2')
         yield noNewCalendar('home3')
-

Added: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_attachments.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_attachments.py	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_attachments.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,620 @@
+##
+# Copyright (c) 2013 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.
+##
+
+from twisted.trial import unittest
+from txdav.common.datastore.test.util import CommonCommonTests, buildStore, \
+    populateCalendarsFrom
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twistedcaldav.config import config
+import os
+from calendarserver.tap.util import getRootResource
+from twext.enterprise.dal.syntax import Delete
+from txdav.common.datastore.sql_tables import schema
+from pycalendar.datetime import PyCalendarDateTime
+from txdav.caldav.datastore.sql import CalendarStoreFeatures, DropBoxAttachment, \
+    ManagedAttachment
+from twext.web2.http_headers import MimeType
+from twistedcaldav.ical import Property
+from pycalendar.value import PyCalendarValue
+
+"""
+Tests for txdav.caldav.datastore.sql attachment handling.
+"""
+
+now = PyCalendarDateTime.getToday().getYear()
+
+PLAIN_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:US/Pacific
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYMONTH=10;BYDAY=-1SU
+DTSTART:19621028T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYMONTH=4;BYDAY=1SU
+DTSTART:19870405T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:685BC3A1-195A-49B3-926D-388DDACA78A6-%(uid)s
+DTEND;TZID=US/Pacific:%(year)s0307T151500
+TRANSP:OPAQUE
+SUMMARY:Event without attachment
+DTSTART;TZID=US/Pacific:%(year)s0307T111500
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+ATTACHMENT_ICS = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:US/Pacific
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYMONTH=10;BYDAY=-1SU
+DTSTART:19621028T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYMONTH=4;BYDAY=1SU
+DTSTART:19870405T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20100303T181216Z
+UID:57A5D1F6-9A57-4F74-9520-25C617F54B88-%(uid)s
+TRANSP:OPAQUE
+SUMMARY:Event with attachment
+DTSTART;TZID=US/Pacific:%(year)s0308T111500
+DTEND;TZID=US/Pacific:%(year)s0308T151500
+DTSTAMP:20100303T181220Z
+X-APPLE-DROPBOX:/calendars/__uids__/%(userid)s/dropbox/%(dropboxid)s.dropbox
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+
+class AttachmentMigrationTests(CommonCommonTests, unittest.TestCase):
+    """
+    Test migrating dropbox to managed attachments.
+    """
+
+    metadata = {
+        "accessMode": "PUBLIC",
+        "isScheduleObject": True,
+        "scheduleTag": "abc",
+        "scheduleEtags": (),
+        "hasPrivateComment": False,
+    }
+
+    requirements = {
+        "home1" : {
+            "calendar1" : {
+                "1.1.ics" : (PLAIN_ICS % {"year": now, "uid": "1.1", }, metadata,),
+                "1.2.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.2", "userid": "user01", "dropboxid": "1.2"}, metadata,),
+                "1.3.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.3", "userid": "user01", "dropboxid": "1.3"}, metadata,),
+                "1.4.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.4", "userid": "user01", "dropboxid": "1.4"}, metadata,),
+                "1.5.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.5", "userid": "user01", "dropboxid": "1.4"}, metadata,),
+            }
+        },
+        "home2" : {
+            "calendar2" : {
+                "2-2.1.ics" : (PLAIN_ICS % {"year": now, "uid": "2-2.1", }, metadata,),
+                "2-2.2.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "2-2.2", "userid": "user02", "dropboxid": "2.2"}, metadata,),
+                "2-2.3.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.3", "userid": "user01", "dropboxid": "1.3"}, metadata,),
+            },
+            "calendar3" : {
+                "2-3.1.ics" : (PLAIN_ICS % {"year": now, "uid": "2-3.1", }, metadata,),
+                "2-3.2.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.4", "userid": "user01", "dropboxid": "1.4"}, metadata,),
+                "2-3.3.ics" : (ATTACHMENT_ICS % {"year": now, "uid": "1.5", "userid": "user01", "dropboxid": "1.4"}, metadata,),
+            }
+        }
+    }
+
+    @inlineCallbacks
+    def setUp(self):
+        yield super(AttachmentMigrationTests, self).setUp()
+        self._sqlCalendarStore = yield buildStore(self, self.notifierFactory)
+        yield self.populate()
+
+        self.patch(config.DirectoryService.params, "xmlFile",
+            os.path.join(
+                os.path.dirname(__file__), "attachments", "accounts.xml"
+            )
+        )
+        self.patch(config.ResourceService.params, "xmlFile",
+            os.path.join(
+                os.path.dirname(__file__), "attachments", "resources.xml"
+            )
+        )
+        self.rootResource = getRootResource(config, self._sqlCalendarStore)
+        self.directory = self.rootResource.getDirectory()
+
+
+    @inlineCallbacks
+    def populate(self):
+        yield populateCalendarsFrom(self.requirements, self.storeUnderTest())
+        self.notifierFactory.reset()
+
+        txn = self._sqlCalendarStore.newTransaction()
+        Delete(
+            From=schema.ATTACHMENT,
+            Where=None
+        ).on(txn)
+        Delete(
+            From=schema.ATTACHMENT_CALENDAR_OBJECT,
+            Where=None
+        ).on(txn)
+
+        yield txn.commit()
+
+
+    def storeUnderTest(self):
+        """
+        Create and return a L{CalendarStore} for testing.
+        """
+        return self._sqlCalendarStore
+
+
+    @inlineCallbacks
+    def _addAttachment(self, home, calendar, event, dropboxid, name):
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        # Create an event with an attachment
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        attachment = (yield event.createAttachmentWithName(name))
+        t = attachment.store(MimeType("text", "x-fixture"))
+        t.write("%s/%s/%s/%s" % (home, calendar, event, name,))
+        t.write(" attachment")
+        yield t.loseConnection()
+
+        cal = (yield event.component())
+        cal.mainComponent().addProperty(Property(
+            "ATTACH",
+            "http://localhost/calendars/users/%s/dropbox/%s.dropbox/%s" % (home.name(), dropboxid, name,),
+            valuetype=PyCalendarValue.VALUETYPE_URI
+        ))
+        yield event.setComponent(cal)
+        yield txn.commit()
+
+        returnValue(attachment)
+
+
+    @inlineCallbacks
+    def _addAttachmentProperty(self, home, calendar, event, dropboxid, owner_home, name):
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        # Create an event with an attachment
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+
+        cal = (yield event.component())
+        cal.mainComponent().addProperty(Property(
+            "ATTACH",
+            "http://localhost/calendars/users/%s/dropbox/%s.dropbox/%s" % (owner_home, dropboxid, name,),
+            valuetype=PyCalendarValue.VALUETYPE_URI
+        ))
+        yield event.setComponent(cal)
+        yield txn.commit()
+
+
+    @inlineCallbacks
+    def _addAllAttachments(self):
+        """
+        Add the full set of attachments to be used for testing.
+        """
+        yield self._addAttachment("home1", "calendar1", "1.2.ics", "1.2", "attach_1_2_1.txt")
+        yield self._addAttachment("home1", "calendar1", "1.2.ics", "1.2", "attach_1_2_2.txt")
+        yield self._addAttachment("home1", "calendar1", "1.3.ics", "1.3", "attach_1_3.txt")
+        yield self._addAttachment("home1", "calendar1", "1.4.ics", "1.4", "attach_1_4.txt")
+        yield self._addAttachmentProperty("home1", "calendar1", "1.5.ics", "1.4", "home1", "attach_1_4.txt")
+
+        yield self._addAttachment("home2", "calendar2", "2-2.2.ics", "2.2", "attach_2_2.txt")
+        yield self._addAttachmentProperty("home2", "calendar2", "2-2.3.ics", "1.3", "home1", "attach_1_3.txt")
+        yield self._addAttachmentProperty("home2", "calendar3", "2-3.2.ics", "1.4", "home1", "attach_1_4.txt")
+        yield self._addAttachmentProperty("home2", "calendar3", "2-3.3.ics", "1.4", "home1", "attach_1_4.txt")
+
+
+    @inlineCallbacks
+    def _verifyConversion(self, home, calendar, event, filenames):
+        """
+        Verify that the specified event contains managed attachments only.
+        """
+        txn = self._sqlCalendarStore.newTransaction()
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        component = (yield event.component()).mainComponent()
+
+        # No more X-APPLE-DROPBOX
+        self.assertFalse(component.hasProperty("X-APPLE-DROPBOX"))
+
+        # Check only managed attachments exist
+        attachments = (yield event.component()).mainComponent().properties("ATTACH")
+        dropbox_count = 0
+        managed_count = 0
+        for attach in attachments:
+            if attach.hasParameter("MANAGED-ID"):
+                managed_count += 1
+                self.assertTrue(attach.value().find("/dropbox/") == -1)
+                self.assertTrue(attach.parameterValue("FILENAME") in filenames)
+            else:
+                dropbox_count += 1
+        self.assertEqual(managed_count, len(filenames))
+        self.assertEqual(dropbox_count, 0)
+        yield txn.commit()
+
+
+    @inlineCallbacks
+    def _verifyNoConversion(self, home, calendar, event, filenames):
+        """
+        Verify that the specified event does not contain managed attachments.
+        """
+        txn = self._sqlCalendarStore.newTransaction()
+        home = (yield txn.calendarHomeWithUID(home))
+        calendar = (yield home.calendarWithName(calendar))
+        event = (yield calendar.calendarObjectWithName(event))
+        component = (yield event.component()).mainComponent()
+
+        # X-APPLE-DROPBOX present
+        self.assertTrue(component.hasProperty("X-APPLE-DROPBOX"))
+
+        # Check only managed attachments exist
+        attachments = (yield event.component()).mainComponent().properties("ATTACH")
+        dropbox_count = 0
+        managed_count = 0
+        for attach in attachments:
+            if attach.hasParameter("MANAGED-ID"):
+                managed_count += 1
+            else:
+                dropbox_count += 1
+                self.assertTrue(attach.value().find("/dropbox/") != -1)
+                self.assertTrue(any([attach.value().endswith(filename) for filename in filenames]))
+        self.assertEqual(managed_count, 0)
+        self.assertEqual(dropbox_count, len(filenames))
+        yield txn.commit()
+
+
+    @inlineCallbacks
+    def test_loadCalendarObjectsForDropboxID(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarStore._loadCalendarObjectsForDropboxID} returns the right set of
+        calendar objects.
+        """
+        txn = self._sqlCalendarStore.newTransaction()
+        calstore = CalendarStoreFeatures(self._sqlCalendarStore)
+
+        for dropbox_id, result_count, result_names  in (
+            ("1.2", 1, ("1.2.ics",)),
+            ("1.3", 2, ("1.3.ics", "2-2.3.ics",)),
+            ("1.4", 4, ("1.4.ics", "1.5.ics", "2-3.2.ics", "2-3.3.ics",)),
+            ("2.2", 1, ("2-2.2.ics",)),
+        ):
+            cobjs = (yield calstore._loadCalendarObjectsForDropboxID(txn, "%s.dropbox" % (dropbox_id,)))
+            self.assertEqual(len(cobjs), result_count, "Failed count with dropbox id: %s" % (dropbox_id,))
+            names = set([cobj.name() for cobj in cobjs])
+            self.assertEqual(names, set(result_names), "Failed names with dropbox id: %s" % (dropbox_id,))
+
+
+    @inlineCallbacks
+    def test_convertToManaged(self):
+        """
+        Test L{txdav.caldav.datastore.sql.DropboxAttachment.convertToManaged} converts properly to a ManagedAttachment.
+        """
+        yield self._addAttachment("home1", "calendar1", "1.2.ics", "1.2", "attach_1_2.txt")
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        dattachment = (yield DropBoxAttachment.load(txn, "1.2.dropbox", "attach_1_2.txt"))
+        self.assertNotEqual(dattachment, None)
+        self.assertTrue(dattachment._path.exists())
+        mattachment = (yield dattachment.convertToManaged())
+        self.assertNotEqual(mattachment, None)
+        yield txn.commit()
+        self.assertFalse(dattachment._path.exists())
+        self.assertTrue(mattachment._path.exists())
+
+        # Dropbox attachment gone
+        txn = self._sqlCalendarStore.newTransaction()
+        dattachment2 = (yield DropBoxAttachment.load(txn, "1.2", "attach_1_2.txt"))
+        self.assertEqual(dattachment2, None)
+
+        # Managed attachment present
+        txn = self._sqlCalendarStore.newTransaction()
+        mattachment2 = (yield ManagedAttachment.load(txn, None, attachmentID=dattachment._attachmentID))
+        self.assertNotEqual(mattachment2, None)
+        self.assertTrue(mattachment2.isManaged())
+
+
+    @inlineCallbacks
+    def test_newReference(self):
+        """
+        Test L{txdav.caldav.datastore.sql.ManagedAttachment.newReference} creates a new managed attachment reference.
+        """
+        yield self._addAttachment("home1", "calendar1", "1.4.ics", "1.4", "attach_1_4.txt")
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        home = (yield txn.calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        event4 = (yield calendar.calendarObjectWithName("1.4.ics"))
+        event5 = (yield calendar.calendarObjectWithName("1.5.ics"))
+
+        dattachment = (yield DropBoxAttachment.load(txn, "1.4.dropbox", "attach_1_4.txt"))
+        self.assertNotEqual(dattachment, None)
+        self.assertTrue(dattachment._path.exists())
+        mattachment = (yield dattachment.convertToManaged())
+        self.assertNotEqual(mattachment, None)
+        self.assertEqual(mattachment.managedID(), None)
+
+        mnew4 = (yield mattachment.newReference(event4._resourceID))
+        self.assertNotEqual(mnew4, None)
+        self.assertNotEqual(mnew4.managedID(), None)
+
+        mnew5 = (yield mattachment.newReference(event5._resourceID))
+        self.assertNotEqual(mnew5, None)
+        self.assertNotEqual(mnew5.managedID(), None)
+
+        yield txn.commit()
+
+        # Managed attachment present
+        txn = self._sqlCalendarStore.newTransaction()
+        mtest4 = (yield ManagedAttachment.load(txn, mnew4.managedID()))
+        self.assertNotEqual(mtest4, None)
+        self.assertTrue(mtest4.isManaged())
+        self.assertEqual(mtest4._objectResourceID, event4._resourceID)
+        yield txn.commit()
+
+        # Managed attachment present
+        txn = self._sqlCalendarStore.newTransaction()
+        mtest5 = (yield ManagedAttachment.load(txn, mnew5.managedID()))
+        self.assertNotEqual(mtest5, None)
+        self.assertTrue(mtest5.isManaged())
+        self.assertEqual(mtest5._objectResourceID, event5._resourceID)
+        yield txn.commit()
+
+
+    @inlineCallbacks
+    def test_convertAttachments(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarObject.convertAttachments} re-writes calendar data.
+        """
+        yield self._addAttachment("home1", "calendar1", "1.2.ics", "1.2", "attach_1_2_1.txt")
+        yield self._addAttachment("home1", "calendar1", "1.2.ics", "1.2", "attach_1_2_2.txt")
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        home = (yield txn.calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        event = (yield calendar.calendarObjectWithName("1.2.ics"))
+
+        # Check that dropbox ATTACH exists
+        attachments = (yield event.component()).mainComponent().properties("ATTACH")
+        for attach in attachments:
+            self.assertTrue(attach.value().find("1.2.dropbox") != -1)
+            self.assertTrue(attach.value().endswith("attach_1_2_1.txt") or attach.value().endswith("attach_1_2_2.txt"))
+            self.assertFalse(attach.value().find("MANAGED-ID") != -1)
+
+        dattachment = (yield DropBoxAttachment.load(txn, "1.2.dropbox", "attach_1_2_1.txt"))
+        mattachment = (yield dattachment.convertToManaged())
+        mnew = (yield mattachment.newReference(event._resourceID))
+        yield event.convertAttachments(dattachment, mnew)
+        yield txn.commit()
+
+        txn = self._sqlCalendarStore.newTransaction()
+
+        home = (yield txn.calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        event = (yield calendar.calendarObjectWithName("1.2.ics"))
+
+        # Check that one managed-id and one dropbox ATTACH exist
+        attachments = (yield event.component()).mainComponent().properties("ATTACH")
+        dropbox_count = 0
+        managed_count = 0
+        for attach in attachments:
+            if attach.hasParameter("MANAGED-ID"):
+                managed_count += 1
+                self.assertTrue(attach.value().find("1.2.dropbox") == -1)
+                self.assertEqual(attach.parameterValue("MANAGED-ID"), mnew.managedID())
+                self.assertEqual(attach.parameterValue("FILENAME"), mnew.name())
+            else:
+                dropbox_count += 1
+                self.assertTrue(attach.value().find("1.2.dropbox") != -1)
+                self.assertTrue(attach.value().endswith("attach_1_2_2.txt"))
+        self.assertEqual(managed_count, 1)
+        self.assertEqual(dropbox_count, 1)
+        yield txn.commit()
+
+        # Convert the second dropbox attachment
+        txn = self._sqlCalendarStore.newTransaction()
+        home = (yield txn.calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        event = (yield calendar.calendarObjectWithName("1.2.ics"))
+        dattachment = (yield DropBoxAttachment.load(txn, "1.2.dropbox", "attach_1_2_2.txt"))
+        mattachment = (yield dattachment.convertToManaged())
+        mnew = (yield mattachment.newReference(event._resourceID))
+        yield event.convertAttachments(dattachment, mnew)
+        yield txn.commit()
+
+        txn = self._sqlCalendarStore.newTransaction()
+        home = (yield txn.calendarHomeWithUID("home1"))
+        calendar = (yield home.calendarWithName("calendar1"))
+        event = (yield calendar.calendarObjectWithName("1.2.ics"))
+        component = (yield event.component()).mainComponent()
+
+        # No more X-APPLE-DROPBOX
+        self.assertFalse(component.hasProperty("X-APPLE-DROPBOX"))
+
+        # Check that one managed-id and one dropbox ATTACH exist
+        attachments = (yield event.component()).mainComponent().properties("ATTACH")
+        dropbox_count = 0
+        managed_count = 0
+        for attach in attachments:
+            if attach.hasParameter("MANAGED-ID"):
+                managed_count += 1
+                self.assertTrue(attach.value().find("1.2.dropbox") == -1)
+                self.assertTrue(attach.parameterValue("FILENAME") in ("attach_1_2_1.txt", "attach_1_2_2.txt"))
+            else:
+                dropbox_count += 1
+        self.assertEqual(managed_count, 2)
+        self.assertEqual(dropbox_count, 0)
+        yield txn.commit()
+
+
+    @inlineCallbacks
+    def test_upgradeDropbox_oneEvent(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarStoreFeatures._upgradeDropbox} re-writes calendar data
+        for one event with an attachment.
+        """
+
+        yield self._addAllAttachments()
+
+        txn = self._sqlCalendarStore.newTransaction()
+        calstore = CalendarStoreFeatures(self._sqlCalendarStore)
+        yield calstore._upgradeDropbox(txn, "1.2.dropbox")
+        yield txn.commit()
+
+        yield self._verifyConversion("home1", "calendar1", "1.2.ics", ("attach_1_2_1.txt", "attach_1_2_2.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.3.ics", ("attach_1_3.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.4.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.5.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home2", "calendar2", "2-2.2.ics", ("attach_2_2.txt",))
+        yield self._verifyNoConversion("home2", "calendar2", "2-2.3.ics", ("attach_1_3.txt",))
+        yield self._verifyNoConversion("home2", "calendar3", "2-3.2.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home2", "calendar3", "2-3.3.ics", ("attach_1_4.txt",))
+
+
+    @inlineCallbacks
+    def test_upgradeDropbox_oneEventTwoHomes(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarStoreFeatures._upgradeDropbox} re-writes calendar data
+        for multiple events across different homes with the same attachment.
+        """
+
+        yield self._addAllAttachments()
+
+        txn = self._sqlCalendarStore.newTransaction()
+        calstore = CalendarStoreFeatures(self._sqlCalendarStore)
+        yield calstore._upgradeDropbox(txn, "1.3.dropbox")
+        yield txn.commit()
+
+        yield self._verifyNoConversion("home1", "calendar1", "1.2.ics", ("attach_1_2_1.txt", "attach_1_2_2.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.3.ics", ("attach_1_3.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.4.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.5.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home2", "calendar2", "2-2.2.ics", ("attach_2_2.txt",))
+        yield self._verifyConversion("home2", "calendar2", "2-2.3.ics", ("attach_1_3.txt",))
+        yield self._verifyNoConversion("home2", "calendar3", "2-3.2.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home2", "calendar3", "2-3.3.ics", ("attach_1_4.txt",))
+
+
+    @inlineCallbacks
+    def test_upgradeDropbox_twoEventsTwoHomes(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarStoreFeatures._upgradeDropbox} re-writes calendar data
+        for multiple events across different homes with the same attachment.
+        """
+
+        yield self._addAllAttachments()
+
+        txn = self._sqlCalendarStore.newTransaction()
+        calstore = CalendarStoreFeatures(self._sqlCalendarStore)
+        yield calstore._upgradeDropbox(txn, "1.4.dropbox")
+        yield txn.commit()
+
+        yield self._verifyNoConversion("home1", "calendar1", "1.2.ics", ("attach_1_2_1.txt", "attach_1_2_2.txt",))
+        yield self._verifyNoConversion("home1", "calendar1", "1.3.ics", ("attach_1_3.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.4.ics", ("attach_1_4.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.5.ics", ("attach_1_4.txt",))
+        yield self._verifyNoConversion("home2", "calendar2", "2-2.2.ics", ("attach_2_2.txt",))
+        yield self._verifyNoConversion("home2", "calendar2", "2-2.3.ics", ("attach_1_3.txt",))
+        yield self._verifyConversion("home2", "calendar3", "2-3.2.ics", ("attach_1_4.txt",))
+        yield self._verifyConversion("home2", "calendar3", "2-3.3.ics", ("attach_1_4.txt",))
+
+
+    @inlineCallbacks
+    def test_upgradeToManagedAttachments(self):
+        """
+        Test L{txdav.caldav.datastore.sql.CalendarStoreFeatures.upgradeToManagedAttachments} re-writes calendar data
+        for all events with an attachment.
+        """
+
+        yield self._addAllAttachments()
+
+        calstore = CalendarStoreFeatures(self._sqlCalendarStore)
+        yield calstore.upgradeToManagedAttachments(2)
+
+        yield self._verifyConversion("home1", "calendar1", "1.2.ics", ("attach_1_2_1.txt", "attach_1_2_2.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.3.ics", ("attach_1_3.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.4.ics", ("attach_1_4.txt",))
+        yield self._verifyConversion("home1", "calendar1", "1.5.ics", ("attach_1_4.txt",))
+        yield self._verifyConversion("home2", "calendar2", "2-2.2.ics", ("attach_2_2.txt",))
+        yield self._verifyConversion("home2", "calendar2", "2-2.3.ics", ("attach_1_3.txt",))
+        yield self._verifyConversion("home2", "calendar3", "2-3.2.ics", ("attach_1_4.txt",))
+        yield self._verifyConversion("home2", "calendar3", "2-3.3.ics", ("attach_1_4.txt",))

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_index_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_index_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_index_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_scheduling.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_scheduling.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_scheduling.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -19,15 +19,25 @@
 L{txdav.caldav.datastore.test.common}.
 """
 
+from pycalendar.datetime import PyCalendarDateTime
+from pycalendar.timezone import PyCalendarTimezone
+
+from twext.enterprise.dal.syntax import Select, Parameter, Insert
+from twext.python.vcomponent import VComponent
+from twext.web2.http_headers import MimeType
+
 from twisted.internet import reactor
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.internet.task import deferLater
 from twisted.python import hashlib
 from twisted.trial import unittest
 
-from twext.enterprise.dal.syntax import Select, Parameter, Insert
-from twext.python.vcomponent import VComponent
-from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
+from twistedcaldav import caldavxml
+from twistedcaldav.caldavxml import CalendarDescription
+from twistedcaldav.config import config
+from twistedcaldav.dateops import datetimeMktime
+from twistedcaldav.ical import Component
+from twistedcaldav.query import calendarqueryfilter
 
 from txdav.base.propertystore.base import PropertyName
 from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
@@ -40,17 +50,10 @@
     _BIND_STATUS_ACCEPTED
 from txdav.common.datastore.test.util import buildStore, populateCalendarsFrom
 from txdav.common.icommondatastore import NoSuchObjectResourceError
+from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
 
-from twistedcaldav import caldavxml
-from twistedcaldav.caldavxml import CalendarDescription
-from twistedcaldav.config import config
-from twistedcaldav.dateops import datetimeMktime
-from twistedcaldav.ical import Component
-from twistedcaldav.query import calendarqueryfilter
-
 import datetime
-from pycalendar.datetime import PyCalendarDateTime
-from pycalendar.timezone import PyCalendarTimezone
+import os
 
 class CalendarSQLStorageTests(CalendarCommonTests, unittest.TestCase):
     """
@@ -1433,3 +1436,200 @@
         obj = (yield self.calendarObjectUnderTest())
         calendarObject = (yield home.objectResourceWithID(obj._resourceID))
         self.assertNotEquals(calendarObject, None)
+
+
+    @inlineCallbacks
+    def test_cleanupAttachments(self):
+        """
+        L{ICalendarObject.remove} will remove an associated calendar
+        attachment.
+        """
+
+        # Create attachment
+        obj = yield self.calendarObjectUnderTest()
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+        t.write("new attachment")
+        t.write(" text")
+        yield t.loseConnection()
+        apath = attachment._path.path
+        yield self.commit()
+
+        self.assertTrue(os.path.exists(apath))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertNotEqual(quota, 0)
+
+        # Remove resource
+        obj = yield self.calendarObjectUnderTest()
+        yield obj.remove()
+        yield self.commit()
+
+        self.assertFalse(os.path.exists(apath))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertEqual(quota, 0)
+
+
+    @inlineCallbacks
+    def test_cleanupMultipleAttachments(self):
+        """
+        L{ICalendarObject.remove} will remove all associated calendar
+        attachments.
+        """
+
+        # Create attachment
+        obj = yield self.calendarObjectUnderTest()
+
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+        t.write("new attachment")
+        t.write(" text")
+        yield t.loseConnection()
+        apath1 = attachment._path.path
+
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment2",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+        t.write("new attachment 2")
+        t.write(" text")
+        yield t.loseConnection()
+        apath2 = attachment._path.path
+
+        yield self.commit()
+
+        self.assertTrue(os.path.exists(apath1))
+        self.assertTrue(os.path.exists(apath2))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertNotEqual(quota, 0)
+
+        # Remove resource
+        obj = yield self.calendarObjectUnderTest()
+        yield obj.remove()
+        yield self.commit()
+
+        self.assertFalse(os.path.exists(apath1))
+        self.assertFalse(os.path.exists(apath2))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertEqual(quota, 0)
+
+
+    @inlineCallbacks
+    def test_cleanupAttachmentsOnMultipleResources(self):
+        """
+        L{ICalendarObject.remove} will remove all associated calendar
+        attachments unless used in another resource.
+        """
+
+        # Create attachment
+        obj = yield self.calendarObjectUnderTest()
+
+        attachment = yield obj.createAttachmentWithName(
+            "new.attachment",
+        )
+        t = attachment.store(MimeType("text", "x-fixture"))
+        t.write("new attachment")
+        t.write(" text")
+        yield t.loseConnection()
+        apath = attachment._path.path
+
+        new_component = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.1//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:US/Pacific
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:PDT
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:PST
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+ATTENDEE;CN="Wilfredo Sanchez";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailt
+ o:wsanchez at example.com
+ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:cda
+ boo at example.com
+DTEND;TZID=US/Pacific:%(now)s0324T124500
+TRANSP:OPAQUE
+ORGANIZER;CN="Wilfredo Sanchez":mailto:wsanchez at example.com
+UID:uid1-attachmenttest
+DTSTAMP:20090326T145447Z
+LOCATION:Wilfredo's Office
+SEQUENCE:2
+X-APPLE-EWS-BUSYSTATUS:BUSY
+X-APPLE-DROPBOX:/calendars/__uids__/user01/dropbox/FE5CDC6F-7776-4607-83
+ A9-B90FF7ACC8D0.dropbox
+SUMMARY:CalDAV protocol updates
+DTSTART;TZID=US/Pacific:%(now)s0324T121500
+CREATED:20090326T145440Z
+BEGIN:VALARM
+X-WR-ALARMUID:DB39AB67-449C-441C-89D2-D740B5F41A73
+TRIGGER;VALUE=DATE-TIME:%(now)s0324T180009Z
+ACTION:AUDIO
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n") % {"now": 2012}
+
+        calendar = yield self.calendarUnderTest()
+        yield calendar.createCalendarObjectWithName(
+            "test.ics", VComponent.fromString(new_component)
+        )
+
+        yield self.commit()
+
+        self.assertTrue(os.path.exists(apath))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertNotEqual(quota, 0)
+
+        # Remove resource
+        obj = yield self.calendarObjectUnderTest()
+        yield obj.remove()
+        yield self.commit()
+
+        self.assertTrue(os.path.exists(apath))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertNotEqual(quota, 0)
+
+        # Remove resource
+        obj = yield self.calendarObjectUnderTest("test.ics")
+        yield obj.remove()
+        yield self.commit()
+
+        self.assertFalse(os.path.exists(apath))
+
+        home = (yield self.transactionUnderTest().calendarHomeWithUID("home1"))
+        quota = (yield home.quotaUsedBytes())
+        yield self.commit()
+        self.assertEqual(quota, 0)

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/test/test_util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/datastore/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_util -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/icalendarstore.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/icalendarstore.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/icalendarstore.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -77,6 +77,13 @@
 
 
 
+class AttachmentMigrationFailed(Exception):
+    """
+    Unable to migrate an attachment.
+    """
+
+
+
 class QuotaExceeded(Exception):
     """
     The quota for a particular user has been exceeded.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/caldav/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test.test_file -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/index_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/index_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/index_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/common.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/common.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore,txdav.carddav.datastore.test.test_sql.AddressBookSQLStorageTests -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_index_file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_index_file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_index_file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/test/test_sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/iaddressbookstore.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/iaddressbookstore.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/iaddressbookstore.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore,txdav.carddav.datastore.test.test_sql.AddressBookSQLStorageTests -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/resource.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/resource.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/file.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/file.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/file.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_file -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -388,6 +388,7 @@
         self.summary = summary
 
 
+
 class SharedCollectionsDatabase(AbstractSQLDatabase, LoggingMixIn):
 
     db_basename = db_prefix + "shares"
@@ -530,6 +531,8 @@
 
         return SharedCollectionRecord(*[str(item) if type(item) == types.UnicodeType else item for item in row])
 
+
+
 class CommonHome(FileMetaDataMixin, LoggingMixIn):
 
     # All these need to be initialized by derived classes for each store type
@@ -1267,6 +1270,7 @@
                 self._transaction.postCommit(notifier.notify)
             self._transaction.notificationAddedForObject(self)
 
+
     @inlineCallbacks
     def asInvited(self):
         """
@@ -1275,6 +1279,7 @@
         yield None
         returnValue([])
 
+
     @inlineCallbacks
     def asShared(self):
         """
@@ -1283,6 +1288,8 @@
         yield None
         returnValue([])
 
+
+
 class CommonObjectResource(FileMetaDataMixin, LoggingMixIn, FancyEqMixin):
     """
     @ivar _path: The path of the file on disk
@@ -1311,6 +1318,11 @@
         return "<%s: %s>" % (self.__class__.__name__, self._path.path)
 
 
+    @property
+    def _txn(self):
+        return self._transaction
+
+
     def transaction(self):
         return self._transaction
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -84,11 +84,11 @@
 
 from txdav.common.icommondatastore import ConcurrentModification
 from twistedcaldav.customxml import NotificationType
-from twistedcaldav.dateops import datetimeMktime, parseSQLTimestamp, \
-    pyCalendarTodatetime
+from twistedcaldav.dateops import datetimeMktime, pyCalendarTodatetime
 
 from txdav.base.datastore.util import normalizeUUIDOrNot
-from twext.enterprise.queue import NullQueuer
+from twext.enterprise.queue import LocalQueuer
+from twext.enterprise.util import parseSQLTimestamp
 
 from pycalendar.datetime import PyCalendarDateTime
 
@@ -139,7 +139,7 @@
     @type quota: C{int} or C{NoneType}
 
     @ivar queuer: An object with an C{enqueueWork} method, from
-        L{twext.enterprise.queue}.  Initially, this is a L{NullQueuer}, so it
+        L{twext.enterprise.queue}.  Initially, this is a L{LocalQueuer}, so it
         is always usable, but in a properly configured environment it will be
         upgraded to a more capable object that can distribute work throughout a
         cluster.
@@ -171,7 +171,7 @@
         self.logSQL = logSQL
         self.logTransactionWaits = logTransactionWaits
         self.timeoutTransactions = timeoutTransactions
-        self.queuer = NullQueuer()
+        self.queuer = LocalQueuer(self.newTransaction)
         self._migrating = False
         self._enableNotifications = True
 
@@ -181,7 +181,12 @@
         else:
             self.queryCacher = None
 
+        # Always import these here to trigger proper "registration" of the calendar and address book
+        # home classes
+        __import__("txdav.caldav.datastore.sql")
+        __import__("txdav.carddav.datastore.sql")
 
+
     @inlineCallbacks
     def _withEachHomeDo(self, homeTable, homeFromTxn, action, batchSize):
         """
@@ -427,7 +432,6 @@
                 self._primaryHomeType = EADDRESSBOOKTYPE
         directlyProvides(self, *extraInterfaces)
 
-        self._circularImportHack()
         self._sqlTxn = sqlTxn
         self.paramstyle = sqlTxn.paramstyle
         self.dialect = sqlTxn.dialect
@@ -441,20 +445,6 @@
         self.currentStatement = None
 
 
-    @classmethod
-    def _circularImportHack(cls):
-        """
-        This method is run when the first L{CommonStoreTransaction} is
-        instantiated, to populate class-scope (in other words, global) state
-        that requires importing modules which depend on this one.
-
-        @see: L{CommonHome._register}
-        """
-        if not cls._homeClass:
-            __import__("txdav.caldav.datastore.sql")
-            __import__("txdav.carddav.datastore.sql")
-
-
     def enqueue(self, workItem, **kw):
         """
         Enqueue a L{twext.enterprise.queue.WorkItem} for later execution.
@@ -692,6 +682,14 @@
         return self._apnSubscriptionsBySubscriberQuery.on(self, subscriberGUID=guid)
 
 
+    def preCommit(self, operation):
+        """
+        Run things before C{commit}.  (Note: only provided by SQL
+        implementation, used only for cleaning up database state.)
+        """
+        return self._sqlTxn.preCommit(operation)
+
+
     def postCommit(self, operation):
         """
         Run things after C{commit}.
@@ -883,14 +881,14 @@
         return self._sqlTxn.abort()
 
 
-    def _oldEventsBase(limited): #@NoSelf
+    def _oldEventsBase(self, limit):
         ch = schema.CALENDAR_HOME
         co = schema.CALENDAR_OBJECT
         cb = schema.CALENDAR_BIND
         tr = schema.TIME_RANGE
         kwds = {}
-        if limited:
-            kwds["Limit"] = Parameter("batchSize")
+        if limit:
+            kwds["Limit"] = limit
         return Select(
             [
                 ch.OWNER_UID,
@@ -915,11 +913,7 @@
             **kwds
         )
 
-    _oldEventsLimited = _oldEventsBase(True)
-    _oldEventsUnlimited = _oldEventsBase(False)
-    del _oldEventsBase
 
-
     def eventsOlderThan(self, cutoff, batchSize=None):
         """
         Return up to the oldest batchSize events which exist completely earlier
@@ -937,12 +931,7 @@
                 raise ValueError("Cannot query events older than %s" % (truncateLowerLimit.getText(),))
 
         kwds = {"CutOff": pyCalendarTodatetime(cutoff)}
-        if batchSize is not None:
-            kwds["batchSize"] = batchSize
-            query = self._oldEventsLimited
-        else:
-            query = self._oldEventsUnlimited
-        return query.on(self, **kwds)
+        return self._oldEventsBase(batchSize).on(self, **kwds)
 
 
     @inlineCallbacks
@@ -969,14 +958,29 @@
         returnValue(count)
 
 
-    def _orphanedSummary(limited): #@NoSelf
-        at = schema.ATTACHMENT
-        co = schema.CALENDAR_OBJECT
+    def orphanedAttachments(self, uuid=None, batchSize=None):
+        """
+        Find attachments no longer referenced by any events.
+
+        Returns a deferred to a list of (calendar_home_owner_uid, quota used, total orphan size, total orphan count) tuples.
+        """
+        kwds = {}
+        if uuid:
+            kwds["uuid"] = uuid
+
+        options = {}
+        if batchSize:
+            options["Limit"] = batchSize
+
         ch = schema.CALENDAR_HOME
         chm = schema.CALENDAR_HOME_METADATA
-        kwds = {}
-        if limited:
-            kwds["Limit"] = Parameter('batchSize')
+        co = schema.CALENDAR_OBJECT
+        at = schema.ATTACHMENT
+
+        where = (co.DROPBOX_ID == None).And(at.DROPBOX_ID != ".")
+        if uuid:
+            where = where.And(ch.OWNER_UID == Parameter('uuid'))
+
         return Select(
             [ch.OWNER_UID, chm.QUOTA_USED_BYTES, Sum(at.SIZE), Count(at.DROPBOX_ID)],
             From=at.join(
@@ -984,64 +988,133 @@
                 ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID).join(
                 chm, ch.RESOURCE_ID == chm.RESOURCE_ID
             ),
-            Where=co.DROPBOX_ID == None,
+            Where=where,
             GroupBy=(ch.OWNER_UID, chm.QUOTA_USED_BYTES),
-            **kwds
-        )
+            **options
+        ).on(self, **kwds)
 
-    _orphanedSummaryLimited = _orphanedSummary(True)
-    _orphanedSummaryUnlimited = _orphanedSummary(False)
-    del _orphanedSummary
 
-    def orphanedAttachments(self, batchSize=None):
+    @inlineCallbacks
+    def removeOrphanedAttachments(self, uuid=None, batchSize=None):
         """
-        Find attachments no longer referenced by any events.
+        Remove attachments that no longer have any references to them
+        """
 
-        Returns a deferred to a list of (calendar_home_owner_uid, dropbox_id, path, size) tuples.
+        # TODO: see if there is a better way to import Attachment
+        from txdav.caldav.datastore.sql import DropBoxAttachment
+
+        kwds = {}
+        if uuid:
+            kwds["uuid"] = uuid
+
+        options = {}
+        if batchSize:
+            options["Limit"] = batchSize
+
+        ch = schema.CALENDAR_HOME
+        co = schema.CALENDAR_OBJECT
+        at = schema.ATTACHMENT
+
+        sfrom = at.join(co, at.DROPBOX_ID == co.DROPBOX_ID, "left outer")
+        where = (co.DROPBOX_ID == None).And(at.DROPBOX_ID != ".")
+        if uuid:
+            sfrom = sfrom.join(ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID)
+            where = where.And(ch.OWNER_UID == Parameter('uuid'))
+
+        results = (yield Select(
+            [at.DROPBOX_ID, at.PATH],
+            From=sfrom,
+            Where=where,
+            **options
+        ).on(self, **kwds))
+
+        count = 0
+        for dropboxID, path in results:
+            attachment = (yield DropBoxAttachment.load(self, dropboxID, path))
+            yield attachment.remove()
+            count += 1
+        returnValue(count)
+
+
+    def oldDropboxAttachments(self, cutoff, uuid):
         """
-        if batchSize is not None:
-            kwds = {'batchSize': batchSize}
-            query = self._orphanedSummaryLimited
-        else:
-            kwds = {}
-            query = self._orphanedSummaryUnlimited
-        return query.on(self, **kwds)
+        Find managed attachments attached to only events whose last instance is older than the specified cut-off.
 
+        Returns a deferred to a list of (calendar_home_owner_uid, quota used, total old size, total old count) tuples.
+        """
+        kwds = {"CutOff": pyCalendarTodatetime(cutoff)}
+        if uuid:
+            kwds["uuid"] = uuid
 
-    def _orphanedBase(limited): #@NoSelf
+        ch = schema.CALENDAR_HOME
+        chm = schema.CALENDAR_HOME_METADATA
+        co = schema.CALENDAR_OBJECT
+        tr = schema.TIME_RANGE
         at = schema.ATTACHMENT
-        co = schema.CALENDAR_OBJECT
-        kwds = {}
-        if limited:
-            kwds["Limit"] = Parameter('batchSize')
+
+        where = at.DROPBOX_ID.In(Select(
+            [at.DROPBOX_ID],
+            From=at.join(co, at.DROPBOX_ID == co.DROPBOX_ID, "inner").join(
+                tr, co.RESOURCE_ID == tr.CALENDAR_OBJECT_RESOURCE_ID
+            ),
+            GroupBy=(at.DROPBOX_ID,),
+            Having=Max(tr.END_DATE) < Parameter("CutOff"),
+        ))
+
+        if uuid:
+            where = where.And(ch.OWNER_UID == Parameter('uuid'))
+
         return Select(
-            [at.DROPBOX_ID, at.PATH],
-            From=at.join(co, at.DROPBOX_ID == co.DROPBOX_ID, "left outer"),
-            Where=co.DROPBOX_ID == None,
-            **kwds
-        )
+            [ch.OWNER_UID, chm.QUOTA_USED_BYTES, Sum(at.SIZE), Count(at.DROPBOX_ID)],
+            From=at.join(
+                ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID).join(
+                chm, ch.RESOURCE_ID == chm.RESOURCE_ID
+            ),
+            Where=where,
+            GroupBy=(ch.OWNER_UID, chm.QUOTA_USED_BYTES),
+        ).on(self, **kwds)
 
-    _orphanedLimited = _orphanedBase(True)
-    _orphanedUnlimited = _orphanedBase(False)
-    del _orphanedBase
 
-
     @inlineCallbacks
-    def removeOrphanedAttachments(self, batchSize=None):
+    def removeOldDropboxAttachments(self, cutoff, uuid, batchSize=None):
         """
-        Remove attachments that no longer have any references to them
+        Remove dropbox attachments attached to events in the past.
         """
 
         # TODO: see if there is a better way to import Attachment
         from txdav.caldav.datastore.sql import DropBoxAttachment
 
-        if batchSize is not None:
-            kwds = {'batchSize': batchSize}
-            query = self._orphanedLimited
-        else:
-            kwds = {}
-            query = self._orphanedUnlimited
-        results = (yield query.on(self, **kwds))
+        kwds = {"CutOff": pyCalendarTodatetime(cutoff)}
+        if uuid:
+            kwds["uuid"] = uuid
+
+        options = {}
+        if batchSize:
+            options["Limit"] = batchSize
+
+        ch = schema.CALENDAR_HOME
+        co = schema.CALENDAR_OBJECT
+        tr = schema.TIME_RANGE
+        at = schema.ATTACHMENT
+
+        sfrom = at.join(
+            co, at.DROPBOX_ID == co.DROPBOX_ID, "inner").join(
+            tr, co.RESOURCE_ID == tr.CALENDAR_OBJECT_RESOURCE_ID
+        )
+        where = None
+        if uuid:
+            sfrom = sfrom.join(ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID)
+            where = (ch.OWNER_UID == Parameter('uuid'))
+
+        results = (yield Select(
+            [at.DROPBOX_ID, at.PATH, ],
+            From=sfrom,
+            Where=where,
+            GroupBy=(at.DROPBOX_ID, at.PATH,),
+            Having=Max(tr.END_DATE) < Parameter("CutOff"),
+            **options
+        ).on(self, **kwds))
+
         count = 0
         for dropboxID, path in results:
             attachment = (yield DropBoxAttachment.load(self, dropboxID, path))
@@ -1050,7 +1123,95 @@
         returnValue(count)
 
 
+    def oldManagedAttachments(self, cutoff, uuid):
+        """
+        Find managed attachments attached to only events whose last instance is older than the specified cut-off.
 
+        Returns a deferred to a list of (calendar_home_owner_uid, quota used, total old size, total old count) tuples.
+        """
+        kwds = {"CutOff": pyCalendarTodatetime(cutoff)}
+        if uuid:
+            kwds["uuid"] = uuid
+
+        ch = schema.CALENDAR_HOME
+        chm = schema.CALENDAR_HOME_METADATA
+        tr = schema.TIME_RANGE
+        at = schema.ATTACHMENT
+        atco = schema.ATTACHMENT_CALENDAR_OBJECT
+
+        where = at.ATTACHMENT_ID.In(Select(
+            [at.ATTACHMENT_ID],
+            From=at.join(
+                atco, at.ATTACHMENT_ID == atco.ATTACHMENT_ID, "inner").join(
+                tr, atco.CALENDAR_OBJECT_RESOURCE_ID == tr.CALENDAR_OBJECT_RESOURCE_ID
+            ),
+            GroupBy=(at.ATTACHMENT_ID,),
+            Having=Max(tr.END_DATE) < Parameter("CutOff"),
+        ))
+
+        if uuid:
+            where = where.And(ch.OWNER_UID == Parameter('uuid'))
+
+        return Select(
+            [ch.OWNER_UID, chm.QUOTA_USED_BYTES, Sum(at.SIZE), Count(at.ATTACHMENT_ID)],
+            From=at.join(
+                ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID).join(
+                chm, ch.RESOURCE_ID == chm.RESOURCE_ID
+            ),
+            Where=where,
+            GroupBy=(ch.OWNER_UID, chm.QUOTA_USED_BYTES),
+        ).on(self, **kwds)
+
+
+    @inlineCallbacks
+    def removeOldManagedAttachments(self, cutoff, uuid, batchSize=None):
+        """
+        Remove attachments attached to events in the past.
+        """
+
+        # TODO: see if there is a better way to import Attachment
+        from txdav.caldav.datastore.sql import ManagedAttachment
+
+        kwds = {"CutOff": pyCalendarTodatetime(cutoff)}
+        if uuid:
+            kwds["uuid"] = uuid
+
+        options = {}
+        if batchSize:
+            options["Limit"] = batchSize
+
+        ch = schema.CALENDAR_HOME
+        tr = schema.TIME_RANGE
+        at = schema.ATTACHMENT
+        atco = schema.ATTACHMENT_CALENDAR_OBJECT
+
+        sfrom = atco.join(
+            at, atco.ATTACHMENT_ID == at.ATTACHMENT_ID, "inner").join(
+            tr, atco.CALENDAR_OBJECT_RESOURCE_ID == tr.CALENDAR_OBJECT_RESOURCE_ID
+        )
+        where = None
+        if uuid:
+            sfrom = sfrom.join(ch, at.CALENDAR_HOME_RESOURCE_ID == ch.RESOURCE_ID)
+            where = (ch.OWNER_UID == Parameter('uuid'))
+
+        results = (yield Select(
+            [atco.ATTACHMENT_ID, atco.MANAGED_ID, ],
+            From=sfrom,
+            Where=where,
+            GroupBy=(atco.ATTACHMENT_ID, atco.MANAGED_ID,),
+            Having=Max(tr.END_DATE) < Parameter("CutOff"),
+            **options
+        ).on(self, **kwds))
+
+        count = 0
+        for _ignore, managedID in results:
+            attachment = (yield ManagedAttachment.load(self, managedID))
+            yield attachment.remove()
+            count += 1
+        returnValue(count)
+
+
+
 class _EmptyCacher(object):
 
     def set(self, key, value):
@@ -1819,6 +1980,7 @@
         ).on(self._txn, **kwds)
 
 
+
 class _SharedSyncLogic(object):
     """
     Logic for maintaining sync-token shared between notification collections and

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_legacy.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_legacy.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_legacy.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.test.test_sharing,twistedcaldav.test.test_calendarquery -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -39,7 +39,7 @@
     ReservationError, NoSuchObjectResourceError
 
 from txdav.common.datastore.sql_tables import schema
-from twext.enterprise.dal.syntax import Parameter, Select 
+from twext.enterprise.dal.syntax import Parameter, Select
 from twext.python.clsprop import classproperty
 from twext.python.log import Logger, LoggingMixIn
 
@@ -61,11 +61,13 @@
         self.index = index
         self._cachePool = cachePool
 
+
     def _key(self, uid):
         return 'reservation:%s' % (
             hashlib.md5('%s:%s' % (uid,
                                    self.index.resource._resourceID)).hexdigest())
 
+
     def reserveUID(self, uid):
         uid = uid.encode('utf-8')
         self.log_debug("Reserving UID %r @ %r" % (
@@ -120,17 +122,21 @@
         d.addCallback(_checkValue)
         return d
 
+
+
 class DummyUIDReserver(LoggingMixIn):
 
     def __init__(self, index):
         self.index = index
         self.reservations = set()
 
+
     def _key(self, uid):
         return 'reservation:%s' % (
             hashlib.md5('%s:%s' % (uid,
                                    self.index.resource._resourceID)).hexdigest())
 
+
     def reserveUID(self, uid):
         uid = uid.encode('utf-8')
         self.log_debug("Reserving UID %r @ %r" % (
@@ -184,12 +190,16 @@
     def containsArgument(self, arg):
         return "%%%s%%" % (arg,)
 
+
     def startswithArgument(self, arg):
         return "%s%%" % (arg,)
 
+
     def endswithArgument(self, arg):
         return "%%%s" % (arg,)
 
+
+
 class CalDAVSQLBehaviorMixin(RealSQLBehaviorMixin):
     """
     Query generator for CalDAV indexed searches.
@@ -197,7 +207,7 @@
 
     FIELDS = {
         "TYPE": "CALENDAR_OBJECT.ICALENDAR_TYPE",
-        "UID":  "CALENDAR_OBJECT.ICALENDAR_UID",
+        "UID": "CALENDAR_OBJECT.ICALENDAR_UID",
     }
     RESOURCEDB = "CALENDAR_OBJECT"
     TIMESPANDB = "TIME_RANGE"
@@ -226,7 +236,7 @@
 
         # For SQL data DB we need to restrict the query to just the targeted calendar resource-id if provided
         if self.calendarid:
-            
+
             test = expression.isExpression("CALENDAR_OBJECT.CALENDAR_RESOURCE_ID", str(self.calendarid), True)
 
             # Since timerange expression already have the calendar resource-id test in them, do not
@@ -236,10 +246,10 @@
             # Top-level timerange expression already has calendar resource-id restriction in it
             if isinstance(self.expression, expression.timerangeExpression):
                 pass
-            
+
             # Top-level OR - check each component
             elif isinstance(self.expression, expression.orExpression):
-                
+
                 def _hasTopLevelTimerange(testexpr):
                     if isinstance(testexpr, expression.timerangeExpression):
                         return True
@@ -247,7 +257,7 @@
                         return any([isinstance(expr, expression.timerangeExpression) for expr in testexpr.expressions])
                     else:
                         return False
-                        
+
                 hasTimerange = any([_hasTopLevelTimerange(expr) for expr in self.expression.expressions])
 
                 if hasTimerange:
@@ -255,16 +265,15 @@
                     pass
                 else:
                     # AND the whole thing with calendarid
-                    self.expression = test.andWith(self.expression)    
+                    self.expression = test.andWith(self.expression)
 
-            
             # Top-level AND - only add additional expression if timerange not present
             elif isinstance(self.expression, expression.andExpression):
                 hasTimerange = any([isinstance(expr, expression.timerangeExpression) for expr in self.expression.expressions])
                 if not hasTimerange:
                     # AND the whole thing
-                    self.expression = test.andWith(self.expression)    
-            
+                    self.expression = test.andWith(self.expression)
+
             # Just AND the entire thing
             else:
                 self.expression = test.andWith(self.expression)
@@ -276,7 +285,7 @@
         select = self.FROM + self.RESOURCEDB
         if self.usedtimespan:
 
-            # Free busy needs transparency join            
+            # Free busy needs transparency join
             if self.freebusy:
                 self.frontArgument(self.userid)
                 select += ", %s LEFT OUTER JOIN %s ON (%s)" % (
@@ -302,6 +311,7 @@
         return select, self.arguments
 
 
+
 class FormatParamStyleMixin(object):
     """
     Mixin for overriding methods on sqlgenerator that generate arguments
@@ -333,6 +343,7 @@
     """
 
 
+
 def fixbools(sqltext):
     return sqltext.replace("TRUE", "1").replace("FALSE", "0")
 
@@ -472,10 +483,10 @@
         with a longer expansion.
         """
         obj = yield self.calendar.calendarObjectWithName(name)
-        
+
         # Use a new transaction to do this update quickly without locking the row for too long. However, the original
-        # transaction may have the row locked, so use wait=False and if that fails, fall back to using the original txn. 
-        
+        # transaction may have the row locked, so use wait=False and if that fails, fall back to using the original txn.
+
         newTxn = obj.transaction().store().newTransaction()
         try:
             yield obj.lock(wait=False, txn=newTxn)
@@ -494,7 +505,7 @@
             else:
                 # We repeat this check because the resource may have been re-expanded by someone else
                 rmin, rmax = (yield obj.recurrenceMinMax(txn=newTxn))
-                
+
                 # If the resource is not fully expanded, see if within the required range or not.
                 # Note that expand_start could be None if no lower limit is applied, but expand_end will
                 # never be None
@@ -567,6 +578,7 @@
                 maxDate, isStartDate = filter.getmaxtimerange()
                 if maxDate:
                     maxDate = maxDate.duplicate()
+                    maxDate.offsetDay(1)
                     maxDate.setDateOnly(True)
                     upperLimit = today + PyCalendarDuration(days=config.FreeBusyIndexExpandMaxDays)
                     if maxDate > upperLimit:
@@ -574,7 +586,7 @@
                     if isStartDate:
                         maxDate += PyCalendarDuration(days=365)
 
-                # Determine if the start date is too early for the restricted range we 
+                # Determine if the start date is too early for the restricted range we
                 # are applying. If it is today or later we don't need to worry about truncation
                 # in the past.
                 minDate, _ignore_isEndDate = filter.getmintimerange()
@@ -585,7 +597,6 @@
                     if minDate < truncateLowerLimit:
                         raise TimeRangeLowerLimit(truncateLowerLimit)
 
-                        
                 if maxDate is not None or minDate is not None:
                     yield self.testAndUpdateIndex(minDate, maxDate)
 
@@ -699,12 +710,15 @@
     def isAllowedUID(self):
         return succeed(True)
 
+
     def reserveUID(self, uid):
         return succeed(None)
 
+
     def unreserveUID(self, uid):
         return succeed(None)
 
+
     def isReservedUID(self, uid):
         return succeed(False)
 
@@ -718,7 +732,7 @@
     """
 
     FIELDS = {
-        "UID":  "ADDRESSBOOK_OBJECT.VCARD_UID",
+        "UID": "ADDRESSBOOK_OBJECT.VCARD_UID",
     }
     RESOURCEDB = "ADDRESSBOOK_OBJECT"
 
@@ -739,10 +753,10 @@
 
         # For SQL data DB we need to restrict the query to just the targeted calendar resource-id if provided
         if self.calendarid:
-            
+
             # AND the whole thing
             test = expression.isExpression("ADDRESSBOOK_OBJECT.ADDRESSBOOK_RESOURCE_ID", str(self.calendarid), True)
-            self.expression = test.andWith(self.expression)    
+            self.expression = test.andWith(self.expression)
 
         # Generate ' where ...' partial statement
         self.sout.write(self.WHERE)
@@ -763,6 +777,8 @@
     Query generator for PostgreSQL indexed searches.
     """
 
+
+
 class oraclesqladbkgenerator(CardDAVSQLBehaviorMixin, sqlgenerator):
     """
     Query generator for Oracle indexed searches.
@@ -870,4 +886,3 @@
     def resourcesExist(self, names):
         returnValue(list(set(names).intersection(
             set((yield self.addressbook.listAddressbookObjects())))))
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current-oracle-dialect.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current-oracle-dialect.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current-oracle-dialect.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -10,6 +10,10 @@
     primary key("HOSTNAME", "PORT")
 );
 
+create table NAMED_LOCK (
+    "LOCK_NAME" nvarchar2(255) primary key
+);
+
 create table CALENDAR_HOME (
     "RESOURCE_ID" integer primary key,
     "OWNER_UID" nvarchar2(255) unique,
@@ -265,7 +269,7 @@
     "VALUE" nvarchar2(255)
 );
 
-insert into CALENDARSERVER (NAME, VALUE) values ('VERSION', '14');
+insert into CALENDARSERVER (NAME, VALUE) values ('VERSION', '15');
 insert into CALENDARSERVER (NAME, VALUE) values ('CALENDAR-DATAVERSION', '3');
 insert into CALENDARSERVER (NAME, VALUE) values ('ADDRESSBOOK-DATAVERSION', '1');
 

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/current.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.
@@ -40,7 +40,13 @@
   primary key (HOSTNAME, PORT)
 );
 
+-- Unique named locks.  This table should always be empty, but rows are
+-- temporarily created in order to prevent undesirable concurrency.
+create table NAMED_LOCK (
+    LOCK_NAME varchar(255) primary key
+);
 
+
 -------------------
 -- Calendar Home --
 -------------------
@@ -571,6 +577,6 @@
   VALUE                         varchar(255)
 );
 
-insert into CALENDARSERVER values ('VERSION', '14');
+insert into CALENDARSERVER values ('VERSION', '15');
 insert into CALENDARSERVER values ('CALENDAR-DATAVERSION', '3');
 insert into CALENDARSERVER values ('ADDRESSBOOK-DATAVERSION', '1');

Added: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/oracle-dialect/v14.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/oracle-dialect/v14.sql	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/oracle-dialect/v14.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,356 @@
+create sequence RESOURCE_ID_SEQ;
+create sequence INSTANCE_ID_SEQ;
+create sequence ATTACHMENT_ID_SEQ;
+create sequence REVISION_SEQ;
+create table NODE_INFO (
+    "HOSTNAME" nvarchar2(255),
+    "PID" integer not null,
+    "PORT" integer not null,
+    "TIME" timestamp default CURRENT_TIMESTAMP at time zone 'UTC' not null, 
+    primary key("HOSTNAME", "PORT")
+);
+
+create table CALENDAR_HOME (
+    "RESOURCE_ID" integer primary key,
+    "OWNER_UID" nvarchar2(255) unique,
+    "DATAVERSION" integer default 0 not null
+);
+
+create table CALENDAR_HOME_METADATA (
+    "RESOURCE_ID" integer primary key references CALENDAR_HOME on delete cascade,
+    "QUOTA_USED_BYTES" integer default 0 not null,
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC'
+);
+
+create table CALENDAR (
+    "RESOURCE_ID" integer primary key
+);
+
+create table CALENDAR_METADATA (
+    "RESOURCE_ID" integer primary key references CALENDAR on delete cascade,
+    "SUPPORTED_COMPONENTS" nvarchar2(255) default null,
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC'
+);
+
+create table NOTIFICATION_HOME (
+    "RESOURCE_ID" integer primary key,
+    "OWNER_UID" nvarchar2(255) unique
+);
+
+create table NOTIFICATION (
+    "RESOURCE_ID" integer primary key,
+    "NOTIFICATION_HOME_RESOURCE_ID" integer not null references NOTIFICATION_HOME,
+    "NOTIFICATION_UID" nvarchar2(255),
+    "XML_TYPE" nvarchar2(255),
+    "XML_DATA" nclob,
+    "MD5" nchar(32),
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC', 
+    unique("NOTIFICATION_UID", "NOTIFICATION_HOME_RESOURCE_ID")
+);
+
+create table CALENDAR_BIND (
+    "CALENDAR_HOME_RESOURCE_ID" integer not null references CALENDAR_HOME,
+    "CALENDAR_RESOURCE_ID" integer not null references CALENDAR on delete cascade,
+    "CALENDAR_RESOURCE_NAME" nvarchar2(255) not null,
+    "BIND_MODE" integer not null,
+    "BIND_STATUS" integer not null,
+    "MESSAGE" nclob, 
+    primary key("CALENDAR_HOME_RESOURCE_ID", "CALENDAR_RESOURCE_ID"), 
+    unique("CALENDAR_HOME_RESOURCE_ID", "CALENDAR_RESOURCE_NAME")
+);
+
+create table CALENDAR_BIND_MODE (
+    "ID" integer primary key,
+    "DESCRIPTION" nvarchar2(16) unique
+);
+
+insert into CALENDAR_BIND_MODE (DESCRIPTION, ID) values ('own', 0);
+insert into CALENDAR_BIND_MODE (DESCRIPTION, ID) values ('read', 1);
+insert into CALENDAR_BIND_MODE (DESCRIPTION, ID) values ('write', 2);
+insert into CALENDAR_BIND_MODE (DESCRIPTION, ID) values ('direct', 3);
+create table CALENDAR_BIND_STATUS (
+    "ID" integer primary key,
+    "DESCRIPTION" nvarchar2(16) unique
+);
+
+insert into CALENDAR_BIND_STATUS (DESCRIPTION, ID) values ('invited', 0);
+insert into CALENDAR_BIND_STATUS (DESCRIPTION, ID) values ('accepted', 1);
+insert into CALENDAR_BIND_STATUS (DESCRIPTION, ID) values ('declined', 2);
+insert into CALENDAR_BIND_STATUS (DESCRIPTION, ID) values ('invalid', 3);
+create table CALENDAR_OBJECT (
+    "RESOURCE_ID" integer primary key,
+    "CALENDAR_RESOURCE_ID" integer not null references CALENDAR on delete cascade,
+    "RESOURCE_NAME" nvarchar2(255),
+    "ICALENDAR_TEXT" nclob,
+    "ICALENDAR_UID" nvarchar2(255),
+    "ICALENDAR_TYPE" nvarchar2(255),
+    "ATTACHMENTS_MODE" integer default 0 not null,
+    "DROPBOX_ID" nvarchar2(255),
+    "ORGANIZER" nvarchar2(255),
+    "ORGANIZER_OBJECT" integer references CALENDAR_OBJECT,
+    "RECURRANCE_MIN" date,
+    "RECURRANCE_MAX" date,
+    "ACCESS" integer default 0 not null,
+    "SCHEDULE_OBJECT" integer default 0,
+    "SCHEDULE_TAG" nvarchar2(36) default null,
+    "SCHEDULE_ETAGS" nclob default null,
+    "PRIVATE_COMMENTS" integer default 0 not null,
+    "MD5" nchar(32),
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC', 
+    unique("CALENDAR_RESOURCE_ID", "RESOURCE_NAME")
+);
+
+create table CALENDAR_OBJECT_ATTACHMENTS_MO (
+    "ID" integer primary key,
+    "DESCRIPTION" nvarchar2(16) unique
+);
+
+insert into CALENDAR_OBJECT_ATTACHMENTS_MO (DESCRIPTION, ID) values ('none', 0);
+insert into CALENDAR_OBJECT_ATTACHMENTS_MO (DESCRIPTION, ID) values ('read', 1);
+insert into CALENDAR_OBJECT_ATTACHMENTS_MO (DESCRIPTION, ID) values ('write', 2);
+create table CALENDAR_ACCESS_TYPE (
+    "ID" integer primary key,
+    "DESCRIPTION" nvarchar2(32) unique
+);
+
+insert into CALENDAR_ACCESS_TYPE (DESCRIPTION, ID) values ('', 0);
+insert into CALENDAR_ACCESS_TYPE (DESCRIPTION, ID) values ('public', 1);
+insert into CALENDAR_ACCESS_TYPE (DESCRIPTION, ID) values ('private', 2);
+insert into CALENDAR_ACCESS_TYPE (DESCRIPTION, ID) values ('confidential', 3);
+insert into CALENDAR_ACCESS_TYPE (DESCRIPTION, ID) values ('restricted', 4);
+create table TIME_RANGE (
+    "INSTANCE_ID" integer primary key,
+    "CALENDAR_RESOURCE_ID" integer not null references CALENDAR on delete cascade,
+    "CALENDAR_OBJECT_RESOURCE_ID" integer not null references CALENDAR_OBJECT on delete cascade,
+    "FLOATING" integer not null,
+    "START_DATE" timestamp not null,
+    "END_DATE" timestamp not null,
+    "FBTYPE" integer not null,
+    "TRANSPARENT" integer not null
+);
+
+create table FREE_BUSY_TYPE (
+    "ID" integer primary key,
+    "DESCRIPTION" nvarchar2(16) unique
+);
+
+insert into FREE_BUSY_TYPE (DESCRIPTION, ID) values ('unknown', 0);
+insert into FREE_BUSY_TYPE (DESCRIPTION, ID) values ('free', 1);
+insert into FREE_BUSY_TYPE (DESCRIPTION, ID) values ('busy', 2);
+insert into FREE_BUSY_TYPE (DESCRIPTION, ID) values ('busy-unavailable', 3);
+insert into FREE_BUSY_TYPE (DESCRIPTION, ID) values ('busy-tentative', 4);
+create table TRANSPARENCY (
+    "TIME_RANGE_INSTANCE_ID" integer not null references TIME_RANGE on delete cascade,
+    "USER_ID" nvarchar2(255),
+    "TRANSPARENT" integer not null
+);
+
+create table ATTACHMENT (
+    "ATTACHMENT_ID" integer primary key,
+    "CALENDAR_HOME_RESOURCE_ID" integer not null references CALENDAR_HOME,
+    "DROPBOX_ID" nvarchar2(255),
+    "CONTENT_TYPE" nvarchar2(255),
+    "SIZE" integer not null,
+    "MD5" nchar(32),
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "PATH" nvarchar2(1024)
+);
+
+create table ATTACHMENT_CALENDAR_OBJECT (
+    "ATTACHMENT_ID" integer not null references ATTACHMENT on delete cascade,
+    "MANAGED_ID" nvarchar2(255),
+    "CALENDAR_OBJECT_RESOURCE_ID" integer not null references CALENDAR_OBJECT on delete cascade, 
+    primary key("ATTACHMENT_ID", "CALENDAR_OBJECT_RESOURCE_ID"), 
+    unique("MANAGED_ID", "CALENDAR_OBJECT_RESOURCE_ID")
+);
+
+create table RESOURCE_PROPERTY (
+    "RESOURCE_ID" integer not null,
+    "NAME" nvarchar2(255),
+    "VALUE" nclob,
+    "VIEWER_UID" nvarchar2(255), 
+    primary key("RESOURCE_ID", "NAME", "VIEWER_UID")
+);
+
+create table ADDRESSBOOK_HOME (
+    "RESOURCE_ID" integer primary key,
+    "OWNER_UID" nvarchar2(255) unique,
+    "DATAVERSION" integer default 0 not null
+);
+
+create table ADDRESSBOOK_HOME_METADATA (
+    "RESOURCE_ID" integer primary key references ADDRESSBOOK_HOME on delete cascade,
+    "QUOTA_USED_BYTES" integer default 0 not null,
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC'
+);
+
+create table ADDRESSBOOK (
+    "RESOURCE_ID" integer primary key
+);
+
+create table ADDRESSBOOK_METADATA (
+    "RESOURCE_ID" integer primary key references ADDRESSBOOK on delete cascade,
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC'
+);
+
+create table ADDRESSBOOK_BIND (
+    "ADDRESSBOOK_HOME_RESOURCE_ID" integer not null references ADDRESSBOOK_HOME,
+    "ADDRESSBOOK_RESOURCE_ID" integer not null references ADDRESSBOOK on delete cascade,
+    "ADDRESSBOOK_RESOURCE_NAME" nvarchar2(255) not null,
+    "BIND_MODE" integer not null,
+    "BIND_STATUS" integer not null,
+    "MESSAGE" nclob, 
+    primary key("ADDRESSBOOK_HOME_RESOURCE_ID", "ADDRESSBOOK_RESOURCE_ID"), 
+    unique("ADDRESSBOOK_HOME_RESOURCE_ID", "ADDRESSBOOK_RESOURCE_NAME")
+);
+
+create table ADDRESSBOOK_OBJECT (
+    "RESOURCE_ID" integer primary key,
+    "ADDRESSBOOK_RESOURCE_ID" integer not null references ADDRESSBOOK on delete cascade,
+    "RESOURCE_NAME" nvarchar2(255),
+    "VCARD_TEXT" nclob,
+    "VCARD_UID" nvarchar2(255),
+    "MD5" nchar(32),
+    "CREATED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC',
+    "MODIFIED" timestamp default CURRENT_TIMESTAMP at time zone 'UTC', 
+    unique("ADDRESSBOOK_RESOURCE_ID", "RESOURCE_NAME"), 
+    unique("ADDRESSBOOK_RESOURCE_ID", "VCARD_UID")
+);
+
+create table CALENDAR_OBJECT_REVISIONS (
+    "CALENDAR_HOME_RESOURCE_ID" integer not null references CALENDAR_HOME,
+    "CALENDAR_RESOURCE_ID" integer references CALENDAR,
+    "CALENDAR_NAME" nvarchar2(255) default null,
+    "RESOURCE_NAME" nvarchar2(255),
+    "REVISION" integer not null,
+    "DELETED" integer not null
+);
+
+create table ADDRESSBOOK_OBJECT_REVISIONS (
+    "ADDRESSBOOK_HOME_RESOURCE_ID" integer not null references ADDRESSBOOK_HOME,
+    "ADDRESSBOOK_RESOURCE_ID" integer references ADDRESSBOOK,
+    "ADDRESSBOOK_NAME" nvarchar2(255) default null,
+    "RESOURCE_NAME" nvarchar2(255),
+    "REVISION" integer not null,
+    "DELETED" integer not null
+);
+
+create table NOTIFICATION_OBJECT_REVISIONS (
+    "NOTIFICATION_HOME_RESOURCE_ID" integer not null references NOTIFICATION_HOME on delete cascade,
+    "RESOURCE_NAME" nvarchar2(255),
+    "REVISION" integer not null,
+    "DELETED" integer not null, 
+    unique("NOTIFICATION_HOME_RESOURCE_ID", "RESOURCE_NAME")
+);
+
+create table APN_SUBSCRIPTIONS (
+    "TOKEN" nvarchar2(255),
+    "RESOURCE_KEY" nvarchar2(255),
+    "MODIFIED" integer not null,
+    "SUBSCRIBER_GUID" nvarchar2(255),
+    "USER_AGENT" nvarchar2(255) default null,
+    "IP_ADDR" nvarchar2(255) default null, 
+    primary key("TOKEN", "RESOURCE_KEY")
+);
+
+create table CALENDARSERVER (
+    "NAME" nvarchar2(255) primary key,
+    "VALUE" nvarchar2(255)
+);
+
+insert into CALENDARSERVER (NAME, VALUE) values ('VERSION', '14');
+insert into CALENDARSERVER (NAME, VALUE) values ('CALENDAR-DATAVERSION', '3');
+insert into CALENDARSERVER (NAME, VALUE) values ('ADDRESSBOOK-DATAVERSION', '1');
+
+create index NOTIFICATION_NOTIFICA_f891f5f9 on NOTIFICATION (
+    NOTIFICATION_HOME_RESOURCE_ID
+);
+
+create index CALENDAR_BIND_RESOURC_e57964d4 on CALENDAR_BIND (
+    CALENDAR_RESOURCE_ID
+);
+
+create index CALENDAR_OBJECT_CALEN_a9a453a9 on CALENDAR_OBJECT (
+    CALENDAR_RESOURCE_ID,
+    ICALENDAR_UID
+);
+
+create index CALENDAR_OBJECT_CALEN_96e83b73 on CALENDAR_OBJECT (
+    CALENDAR_RESOURCE_ID,
+    RECURRANCE_MAX
+);
+
+create index CALENDAR_OBJECT_ORGAN_7ce24750 on CALENDAR_OBJECT (
+    ORGANIZER_OBJECT
+);
+
+create index CALENDAR_OBJECT_DROPB_de041d80 on CALENDAR_OBJECT (
+    DROPBOX_ID
+);
+
+create index TIME_RANGE_CALENDAR_R_beb6e7eb on TIME_RANGE (
+    CALENDAR_RESOURCE_ID
+);
+
+create index TIME_RANGE_CALENDAR_O_acf37bd1 on TIME_RANGE (
+    CALENDAR_OBJECT_RESOURCE_ID
+);
+
+create index TRANSPARENCY_TIME_RAN_5f34467f on TRANSPARENCY (
+    TIME_RANGE_INSTANCE_ID
+);
+
+create index ATTACHMENT_CALENDAR_H_0078845c on ATTACHMENT (
+    CALENDAR_HOME_RESOURCE_ID
+);
+
+create index ADDRESSBOOK_BIND_RESO_205aa75c on ADDRESSBOOK_BIND (
+    ADDRESSBOOK_RESOURCE_ID
+);
+
+create index CALENDAR_OBJECT_REVIS_3a3956c4 on CALENDAR_OBJECT_REVISIONS (
+    CALENDAR_HOME_RESOURCE_ID,
+    CALENDAR_RESOURCE_ID
+);
+
+create index CALENDAR_OBJECT_REVIS_2643d556 on CALENDAR_OBJECT_REVISIONS (
+    CALENDAR_RESOURCE_ID,
+    RESOURCE_NAME
+);
+
+create index CALENDAR_OBJECT_REVIS_265c8acf on CALENDAR_OBJECT_REVISIONS (
+    CALENDAR_RESOURCE_ID,
+    REVISION
+);
+
+create index ADDRESSBOOK_OBJECT_RE_f460d62d on ADDRESSBOOK_OBJECT_REVISIONS (
+    ADDRESSBOOK_HOME_RESOURCE_ID,
+    ADDRESSBOOK_RESOURCE_ID
+);
+
+create index ADDRESSBOOK_OBJECT_RE_9a848f39 on ADDRESSBOOK_OBJECT_REVISIONS (
+    ADDRESSBOOK_RESOURCE_ID,
+    RESOURCE_NAME
+);
+
+create index ADDRESSBOOK_OBJECT_RE_cb101e6b on ADDRESSBOOK_OBJECT_REVISIONS (
+    ADDRESSBOOK_RESOURCE_ID,
+    REVISION
+);
+
+create index NOTIFICATION_OBJECT_R_036a9cee on NOTIFICATION_OBJECT_REVISIONS (
+    NOTIFICATION_HOME_RESOURCE_ID,
+    REVISION
+);
+
+create index APN_SUBSCRIPTIONS_RES_9610d78e on APN_SUBSCRIPTIONS (
+    RESOURCE_KEY
+);
+

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v10.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v10.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v10.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Added: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v14.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v14.sql	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v14.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,501 @@
+-- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
+
+----
+-- Copyright (c) 2010-2013 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.
+----
+
+-----------------
+-- Resource ID --
+-----------------
+
+create sequence RESOURCE_ID_SEQ;
+
+-------------------------
+-- Cluster Bookkeeping --
+-------------------------
+
+-- Information about a process connected to this database.
+
+-- Note that this must match the node info schema in twext.enterprise.queue.
+create table NODE_INFO (
+  HOSTNAME  varchar(255) not null,
+  PID       integer not null,
+  PORT      integer not null,
+  TIME      timestamp not null default timezone('UTC', CURRENT_TIMESTAMP),
+
+  primary key (HOSTNAME, PORT)
+);
+
+
+-------------------
+-- Calendar Home --
+-------------------
+
+create table CALENDAR_HOME (
+  RESOURCE_ID      integer      primary key default nextval('RESOURCE_ID_SEQ'), -- implicit index
+  OWNER_UID        varchar(255) not null unique,                                 -- implicit index
+  DATAVERSION      integer      default 0 not null
+);
+
+----------------------------
+-- Calendar Home Metadata --
+----------------------------
+
+create table CALENDAR_HOME_METADATA (
+  RESOURCE_ID      integer      primary key references CALENDAR_HOME on delete cascade, -- implicit index
+  QUOTA_USED_BYTES integer      default 0 not null,
+  CREATED          timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED         timestamp    default timezone('UTC', CURRENT_TIMESTAMP)
+);
+
+--------------
+-- Calendar --
+--------------
+
+create table CALENDAR (
+  RESOURCE_ID integer   primary key default nextval('RESOURCE_ID_SEQ') -- implicit index
+);
+
+
+-----------------------
+-- Calendar Metadata --
+-----------------------
+
+create table CALENDAR_METADATA (
+  RESOURCE_ID           integer   primary key references CALENDAR on delete cascade, -- implicit index
+  SUPPORTED_COMPONENTS  varchar(255) default null,
+  CREATED               timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED              timestamp default timezone('UTC', CURRENT_TIMESTAMP)
+);
+
+
+---------------------------
+-- Sharing Notifications --
+---------------------------
+
+create table NOTIFICATION_HOME (
+  RESOURCE_ID integer      primary key default nextval('RESOURCE_ID_SEQ'), -- implicit index
+  OWNER_UID   varchar(255) not null unique                                 -- implicit index
+);
+
+create table NOTIFICATION (
+  RESOURCE_ID                   integer      primary key default nextval('RESOURCE_ID_SEQ'), -- implicit index
+  NOTIFICATION_HOME_RESOURCE_ID integer      not null references NOTIFICATION_HOME,
+  NOTIFICATION_UID              varchar(255) not null,
+  XML_TYPE                      varchar(255) not null,
+  XML_DATA                      text         not null,
+  MD5                           char(32)     not null,
+  CREATED                       timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED                      timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+
+  unique(NOTIFICATION_UID, NOTIFICATION_HOME_RESOURCE_ID) -- implicit index
+);
+
+create index NOTIFICATION_NOTIFICATION_HOME_RESOURCE_ID on
+  NOTIFICATION(NOTIFICATION_HOME_RESOURCE_ID);
+
+-------------------
+-- Calendar Bind --
+-------------------
+
+-- Joins CALENDAR_HOME and CALENDAR
+
+create table CALENDAR_BIND (
+  CALENDAR_HOME_RESOURCE_ID integer      not null references CALENDAR_HOME,
+  CALENDAR_RESOURCE_ID      integer      not null references CALENDAR on delete cascade,
+  CALENDAR_RESOURCE_NAME    varchar(255) not null,
+  BIND_MODE                 integer      not null, -- enum CALENDAR_BIND_MODE
+  BIND_STATUS               integer      not null, -- enum CALENDAR_BIND_STATUS
+  MESSAGE                   text,
+
+  primary key(CALENDAR_HOME_RESOURCE_ID, CALENDAR_RESOURCE_ID), -- implicit index
+  unique(CALENDAR_HOME_RESOURCE_ID, CALENDAR_RESOURCE_NAME)     -- implicit index
+);
+
+create index CALENDAR_BIND_RESOURCE_ID on CALENDAR_BIND(CALENDAR_RESOURCE_ID);
+
+-- Enumeration of calendar bind modes
+
+create table CALENDAR_BIND_MODE (
+  ID          integer     primary key,
+  DESCRIPTION varchar(16) not null unique
+);
+
+insert into CALENDAR_BIND_MODE values (0, 'own'  );
+insert into CALENDAR_BIND_MODE values (1, 'read' );
+insert into CALENDAR_BIND_MODE values (2, 'write');
+insert into CALENDAR_BIND_MODE values (3, 'direct');
+
+-- Enumeration of statuses
+
+create table CALENDAR_BIND_STATUS (
+  ID          integer     primary key,
+  DESCRIPTION varchar(16) not null unique
+);
+
+insert into CALENDAR_BIND_STATUS values (0, 'invited' );
+insert into CALENDAR_BIND_STATUS values (1, 'accepted');
+insert into CALENDAR_BIND_STATUS values (2, 'declined');
+insert into CALENDAR_BIND_STATUS values (3, 'invalid');
+
+
+---------------------
+-- Calendar Object --
+---------------------
+
+create table CALENDAR_OBJECT (
+  RESOURCE_ID          integer      primary key default nextval('RESOURCE_ID_SEQ'), -- implicit index
+  CALENDAR_RESOURCE_ID integer      not null references CALENDAR on delete cascade,
+  RESOURCE_NAME        varchar(255) not null,
+  ICALENDAR_TEXT       text         not null,
+  ICALENDAR_UID        varchar(255) not null,
+  ICALENDAR_TYPE       varchar(255) not null,
+  ATTACHMENTS_MODE     integer      default 0 not null, -- enum CALENDAR_OBJECT_ATTACHMENTS_MODE
+  DROPBOX_ID           varchar(255),
+  ORGANIZER            varchar(255),
+  ORGANIZER_OBJECT     integer      references CALENDAR_OBJECT,
+  RECURRANCE_MIN       date,        -- minimum date that recurrences have been expanded to.
+  RECURRANCE_MAX       date,        -- maximum date that recurrences have been expanded to.
+  ACCESS               integer      default 0 not null,
+  SCHEDULE_OBJECT      boolean      default false,
+  SCHEDULE_TAG         varchar(36)  default null,
+  SCHEDULE_ETAGS       text         default null,
+  PRIVATE_COMMENTS     boolean      default false not null,
+  MD5                  char(32)     not null,
+  CREATED              timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED             timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+
+  unique (CALENDAR_RESOURCE_ID, RESOURCE_NAME) -- implicit index
+
+  -- since the 'inbox' is a 'calendar resource' for the purpose of storing
+  -- calendar objects, this constraint has to be selectively enforced by the
+  -- application layer.
+
+  -- unique(CALENDAR_RESOURCE_ID, ICALENDAR_UID)
+);
+
+create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID_AND_ICALENDAR_UID on
+  CALENDAR_OBJECT(CALENDAR_RESOURCE_ID, ICALENDAR_UID);
+
+create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID_RECURRANCE_MAX on
+  CALENDAR_OBJECT(CALENDAR_RESOURCE_ID, RECURRANCE_MAX);
+
+create index CALENDAR_OBJECT_ORGANIZER_OBJECT on
+  CALENDAR_OBJECT(ORGANIZER_OBJECT);
+
+create index CALENDAR_OBJECT_DROPBOX_ID on
+  CALENDAR_OBJECT(DROPBOX_ID);
+
+-- Enumeration of attachment modes
+
+create table CALENDAR_OBJECT_ATTACHMENTS_MODE (
+  ID          integer     primary key,
+  DESCRIPTION varchar(16) not null unique
+);
+
+insert into CALENDAR_OBJECT_ATTACHMENTS_MODE values (0, 'none' );
+insert into CALENDAR_OBJECT_ATTACHMENTS_MODE values (1, 'read' );
+insert into CALENDAR_OBJECT_ATTACHMENTS_MODE values (2, 'write');
+
+
+-- Enumeration of calendar access types
+
+create table CALENDAR_ACCESS_TYPE (
+  ID          integer     primary key,
+  DESCRIPTION varchar(32) not null unique
+);
+
+insert into CALENDAR_ACCESS_TYPE values (0, ''             );
+insert into CALENDAR_ACCESS_TYPE values (1, 'public'       );
+insert into CALENDAR_ACCESS_TYPE values (2, 'private'      );
+insert into CALENDAR_ACCESS_TYPE values (3, 'confidential' );
+insert into CALENDAR_ACCESS_TYPE values (4, 'restricted'   );
+
+-----------------
+-- Instance ID --
+-----------------
+
+create sequence INSTANCE_ID_SEQ;
+
+
+----------------
+-- Time Range --
+----------------
+
+create table TIME_RANGE (
+  INSTANCE_ID                 integer        primary key default nextval('INSTANCE_ID_SEQ'), -- implicit index
+  CALENDAR_RESOURCE_ID        integer        not null references CALENDAR on delete cascade,
+  CALENDAR_OBJECT_RESOURCE_ID integer        not null references CALENDAR_OBJECT on delete cascade,
+  FLOATING                    boolean        not null,
+  START_DATE                  timestamp      not null,
+  END_DATE                    timestamp      not null,
+  FBTYPE                      integer        not null,
+  TRANSPARENT                 boolean        not null
+);
+
+create index TIME_RANGE_CALENDAR_RESOURCE_ID on
+  TIME_RANGE(CALENDAR_RESOURCE_ID);
+create index TIME_RANGE_CALENDAR_OBJECT_RESOURCE_ID on
+  TIME_RANGE(CALENDAR_OBJECT_RESOURCE_ID);
+
+
+-- Enumeration of free/busy types
+
+create table FREE_BUSY_TYPE (
+  ID          integer     primary key,
+  DESCRIPTION varchar(16) not null unique
+);
+
+insert into FREE_BUSY_TYPE values (0, 'unknown'         );
+insert into FREE_BUSY_TYPE values (1, 'free'            );
+insert into FREE_BUSY_TYPE values (2, 'busy'            );
+insert into FREE_BUSY_TYPE values (3, 'busy-unavailable');
+insert into FREE_BUSY_TYPE values (4, 'busy-tentative'  );
+
+
+------------------
+-- Transparency --
+------------------
+
+create table TRANSPARENCY (
+  TIME_RANGE_INSTANCE_ID      integer      not null references TIME_RANGE on delete cascade,
+  USER_ID                     varchar(255) not null,
+  TRANSPARENT                 boolean      not null
+);
+
+create index TRANSPARENCY_TIME_RANGE_INSTANCE_ID on
+  TRANSPARENCY(TIME_RANGE_INSTANCE_ID);
+
+
+----------------
+-- Attachment --
+----------------
+
+create sequence ATTACHMENT_ID_SEQ;
+
+create table ATTACHMENT (
+  ATTACHMENT_ID               integer           primary key default nextval('ATTACHMENT_ID_SEQ'), -- implicit index
+  CALENDAR_HOME_RESOURCE_ID   integer           not null references CALENDAR_HOME,
+  DROPBOX_ID                  varchar(255),
+  CONTENT_TYPE                varchar(255)      not null,
+  SIZE                        integer           not null,
+  MD5                         char(32)          not null,
+  CREATED                     timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED                    timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+  PATH                        varchar(1024)     not null
+);
+
+create index ATTACHMENT_CALENDAR_HOME_RESOURCE_ID on
+  ATTACHMENT(CALENDAR_HOME_RESOURCE_ID);
+
+-- Many-to-many relationship between attachments and calendar objects
+create table ATTACHMENT_CALENDAR_OBJECT (
+  ATTACHMENT_ID                  integer      not null references ATTACHMENT on delete cascade,
+  MANAGED_ID                     varchar(255) not null,
+  CALENDAR_OBJECT_RESOURCE_ID    integer      not null references CALENDAR_OBJECT on delete cascade,
+
+  primary key (ATTACHMENT_ID, CALENDAR_OBJECT_RESOURCE_ID), -- implicit index
+  unique (MANAGED_ID, CALENDAR_OBJECT_RESOURCE_ID) --implicit index
+);
+
+
+-----------------------
+-- Resource Property --
+-----------------------
+
+create table RESOURCE_PROPERTY (
+  RESOURCE_ID integer      not null, -- foreign key: *.RESOURCE_ID
+  NAME        varchar(255) not null,
+  VALUE       text         not null, -- FIXME: xml?
+  VIEWER_UID  varchar(255),
+
+  primary key (RESOURCE_ID, NAME, VIEWER_UID) -- implicit index
+);
+
+
+----------------------
+-- AddressBook Home --
+----------------------
+
+create table ADDRESSBOOK_HOME (
+  RESOURCE_ID      integer      primary key default nextval('RESOURCE_ID_SEQ'), -- implicit index
+  OWNER_UID        varchar(255) not null unique,                                -- implicit index
+  DATAVERSION      integer      default 0 not null
+);
+
+-------------------------------
+-- AddressBook Home Metadata --
+-------------------------------
+
+create table ADDRESSBOOK_HOME_METADATA (
+  RESOURCE_ID      integer      primary key references ADDRESSBOOK_HOME on delete cascade, -- implicit index
+  QUOTA_USED_BYTES integer      default 0 not null,
+  CREATED          timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED         timestamp    default timezone('UTC', CURRENT_TIMESTAMP)
+);
+
+-----------------
+-- AddressBook --
+-----------------
+
+create table ADDRESSBOOK (
+  RESOURCE_ID integer   primary key default nextval('RESOURCE_ID_SEQ') -- implicit index
+);
+
+
+--------------------------
+-- AddressBook Metadata --
+--------------------------
+
+create table ADDRESSBOOK_METADATA (
+  RESOURCE_ID integer   primary key references ADDRESSBOOK on delete cascade, -- implicit index
+  CREATED     timestamp default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED    timestamp default timezone('UTC', CURRENT_TIMESTAMP)
+);
+
+
+----------------------
+-- AddressBook Bind --
+----------------------
+
+-- Joins ADDRESSBOOK_HOME and ADDRESSBOOK
+
+create table ADDRESSBOOK_BIND (
+  ADDRESSBOOK_HOME_RESOURCE_ID integer      not null references ADDRESSBOOK_HOME,
+  ADDRESSBOOK_RESOURCE_ID      integer      not null references ADDRESSBOOK on delete cascade,
+  ADDRESSBOOK_RESOURCE_NAME    varchar(255) not null,
+  BIND_MODE                    integer      not null, -- enum CALENDAR_BIND_MODE
+  BIND_STATUS                  integer      not null, -- enum CALENDAR_BIND_STATUS
+  MESSAGE                      text,                  -- FIXME: xml?
+
+  primary key (ADDRESSBOOK_HOME_RESOURCE_ID, ADDRESSBOOK_RESOURCE_ID), -- implicit index
+  unique (ADDRESSBOOK_HOME_RESOURCE_ID, ADDRESSBOOK_RESOURCE_NAME)     -- implicit index
+);
+
+create index ADDRESSBOOK_BIND_RESOURCE_ID on
+  ADDRESSBOOK_BIND(ADDRESSBOOK_RESOURCE_ID);
+
+create table ADDRESSBOOK_OBJECT (
+  RESOURCE_ID             integer      primary key default nextval('RESOURCE_ID_SEQ'),    -- implicit index
+  ADDRESSBOOK_RESOURCE_ID integer      not null references ADDRESSBOOK on delete cascade,
+  RESOURCE_NAME           varchar(255) not null,
+  VCARD_TEXT              text         not null,
+  VCARD_UID               varchar(255) not null,
+  MD5                     char(32)     not null,
+  CREATED                 timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+  MODIFIED                timestamp    default timezone('UTC', CURRENT_TIMESTAMP),
+
+  unique (ADDRESSBOOK_RESOURCE_ID, RESOURCE_NAME), -- implicit index
+  unique (ADDRESSBOOK_RESOURCE_ID, VCARD_UID)      -- implicit index
+);
+
+---------------
+-- Revisions --
+---------------
+
+create sequence REVISION_SEQ;
+
+
+---------------
+-- Revisions --
+---------------
+
+create table CALENDAR_OBJECT_REVISIONS (
+  CALENDAR_HOME_RESOURCE_ID integer      not null references CALENDAR_HOME,
+  CALENDAR_RESOURCE_ID      integer      references CALENDAR,
+  CALENDAR_NAME             varchar(255) default null,
+  RESOURCE_NAME             varchar(255),
+  REVISION                  integer      default nextval('REVISION_SEQ') not null,
+  DELETED                   boolean      not null
+);
+
+create index CALENDAR_OBJECT_REVISIONS_HOME_RESOURCE_ID_CALENDAR_RESOURCE_ID
+  on CALENDAR_OBJECT_REVISIONS(CALENDAR_HOME_RESOURCE_ID, CALENDAR_RESOURCE_ID);
+
+create index CALENDAR_OBJECT_REVISIONS_RESOURCE_ID_RESOURCE_NAME
+  on CALENDAR_OBJECT_REVISIONS(CALENDAR_RESOURCE_ID, RESOURCE_NAME);
+
+create index CALENDAR_OBJECT_REVISIONS_RESOURCE_ID_REVISION
+  on CALENDAR_OBJECT_REVISIONS(CALENDAR_RESOURCE_ID, REVISION);
+
+-------------------------------
+-- AddressBook Object Revisions --
+-------------------------------
+
+create table ADDRESSBOOK_OBJECT_REVISIONS (
+  ADDRESSBOOK_HOME_RESOURCE_ID integer      not null references ADDRESSBOOK_HOME,
+  ADDRESSBOOK_RESOURCE_ID      integer      references ADDRESSBOOK,
+  ADDRESSBOOK_NAME             varchar(255) default null,
+  RESOURCE_NAME                varchar(255),
+  REVISION                     integer      default nextval('REVISION_SEQ') not null,
+  DELETED                      boolean      not null
+);
+
+create index ADDRESSBOOK_OBJECT_REVISIONS_HOME_RESOURCE_ID_ADDRESSBOOK_RESOURCE_ID
+  on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_HOME_RESOURCE_ID, ADDRESSBOOK_RESOURCE_ID);
+
+create index ADDRESSBOOK_OBJECT_REVISIONS_RESOURCE_ID_RESOURCE_NAME
+  on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_RESOURCE_ID, RESOURCE_NAME);
+
+create index ADDRESSBOOK_OBJECT_REVISIONS_RESOURCE_ID_REVISION
+  on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_RESOURCE_ID, REVISION);
+
+-----------------------------------
+-- Notification Object Revisions --
+-----------------------------------
+
+create table NOTIFICATION_OBJECT_REVISIONS (
+  NOTIFICATION_HOME_RESOURCE_ID integer      not null references NOTIFICATION_HOME on delete cascade,
+  RESOURCE_NAME                 varchar(255),
+  REVISION                      integer      default nextval('REVISION_SEQ') not null,
+  DELETED                       boolean      not null,
+
+  unique(NOTIFICATION_HOME_RESOURCE_ID, RESOURCE_NAME) -- implicit index
+);
+
+create index NOTIFICATION_OBJECT_REVISIONS_RESOURCE_ID_REVISION
+  on NOTIFICATION_OBJECT_REVISIONS(NOTIFICATION_HOME_RESOURCE_ID, REVISION);
+
+-------------------------------------------
+-- Apple Push Notification Subscriptions --
+-------------------------------------------
+
+create table APN_SUBSCRIPTIONS (
+  TOKEN                         varchar(255) not null,
+  RESOURCE_KEY                  varchar(255) not null,
+  MODIFIED                      integer not null,
+  SUBSCRIBER_GUID               varchar(255) not null,
+  USER_AGENT                    varchar(255) default null,
+  IP_ADDR                       varchar(255) default null,
+
+  primary key (TOKEN, RESOURCE_KEY) -- implicit index
+);
+
+create index APN_SUBSCRIPTIONS_RESOURCE_KEY
+   on APN_SUBSCRIPTIONS(RESOURCE_KEY);
+
+
+--------------------
+-- Schema Version --
+--------------------
+
+create table CALENDARSERVER (
+  NAME                          varchar(255) primary key, -- implicit index
+  VALUE                         varchar(255)
+);
+
+insert into CALENDARSERVER values ('VERSION', '14');
+insert into CALENDARSERVER values ('CALENDAR-DATAVERSION', '3');
+insert into CALENDARSERVER values ('ADDRESSBOOK-DATAVERSION', '1');

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v3.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v3.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v3.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v6.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v6.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v6.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v7.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v7.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v7.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v8.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v8.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v8.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v9.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v9.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/old/postgres-dialect/v9.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,7 +1,7 @@
 -- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
 
 ----
--- Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_10_to_11.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_10_to_11.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_10_to_11.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_11_to_12.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_11_to_12.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_11_to_12.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Added: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_14_to_15.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_14_to_15.sql	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_14_to_15.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,27 @@
+----
+-- Copyright (c) 2011-2013 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.
+----
+
+-------------------------------------------------
+-- Upgrade database schema from VERSION 14 to 15 --
+-------------------------------------------------
+
+
+create table NAMED_LOCK (
+    "LOCK_NAME" nvarchar2(255) primary key
+);
+-- Now update the version
+update CALENDARSERVER set VALUE = '15' where NAME = 'VERSION';
+

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_3_to_4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_3_to_4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_3_to_4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_4_to_5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_4_to_5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_4_to_5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_5_to_6.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_5_to_6.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_5_to_6.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_6_to_7.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_6_to_7.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_6_to_7.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_7_to_8.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_7_to_8.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_7_to_8.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_8_to_9.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_8_to_9.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_8_to_9.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_9_to_10.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_9_to_10.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/oracle-dialect/upgrade_from_9_to_10.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_10_to_11.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_10_to_11.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_10_to_11.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_11_to_12.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_11_to_12.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_11_to_12.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Added: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_14_to_15.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_14_to_15.sql	                        (rev 0)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_14_to_15.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -0,0 +1,27 @@
+----
+-- Copyright (c) 2011-2013 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.
+----
+
+-------------------------------------------------
+-- Upgrade database schema from VERSION 14 to 15 --
+-------------------------------------------------
+
+
+create table NAMED_LOCK (
+    LOCK_NAME varchar(255) primary key
+);
+-- Now update the version
+update CALENDARSERVER set VALUE = '15' where NAME = 'VERSION';
+

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_3_to_4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_3_to_4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_3_to_4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_4_to_5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_4_to_5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_4_to_5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_5_to_6.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_5_to_6.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_5_to_6.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_6_to_7.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_6_to_7.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_6_to_7.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_7_to_8.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_7_to_8.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_7_to_8.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_8_to_9.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_8_to_9.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_8_to_9.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_9_to_10.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_9_to_10.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/postgres-dialect/upgrade_from_9_to_10.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2012 Apple Inc. All rights reserved.
+-- Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/upgrade_template.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/upgrade_template.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_schema/upgrades/upgrade_template.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_tables.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_tables.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/sql_tables.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.common.datastore.test.test_sql_tables -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql_tables.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql_tables.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/test_sql_tables.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/test/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.carddav.datastore.test -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -50,6 +50,7 @@
 from twistedcaldav.vcard import Component as ABComponent
 
 from pycalendar.datetime import PyCalendarDateTime
+from txdav.common.datastore.sql_tables import schema
 
 md5key = PropertyName.fromElement(TwistedGETContentMD5)
 
@@ -219,25 +220,17 @@
         cleanupTxn = storeToClean.sqlTxnFactory(
             "%s schema-cleanup" % (testCase.id(),)
         )
-        # TODO: should be getting these tables from a declaration of the schema
-        # somewhere.
-        tables = ['RESOURCE_PROPERTY',
-                  'ATTACHMENT',
-                  'NOTIFICATION_OBJECT_REVISIONS',
-                  'ADDRESSBOOK_OBJECT_REVISIONS',
-                  'CALENDAR_OBJECT_REVISIONS',
-                  'ABO_MEMBERS',
-                  'ADDRESSBOOK_OBJECT',
-                  'CALENDAR_OBJECT',
-                  'CALENDAR_BIND',
-                  'ADDRESSBOOK_BIND',
-                  'GROUP_ADDRESSBOOK_BIND',
-                  'CALENDAR',
-                  'ADDRESSBOOK',
-                  'CALENDAR_HOME',
-                  'ADDRESSBOOK_HOME',
-                  'NOTIFICATION',
-                  'NOTIFICATION_HOME']
+
+        # Tables are defined in the schema in the order in which the 'create
+        # table' statements are issued, so it's not possible to reference a
+        # later table.  Therefore it's OK to drop them in the (reverse) order
+        # that they happen to be in.
+        tables = [t.name for t in schema.model.tables
+                  # All tables with rows _in_ the schema are populated
+                  # exclusively _by_ the schema and shouldn't be manipulated
+                  # while the server is running, so we leave those populated.
+                  if not t.schemaRows][::-1]
+
         for table in tables:
             try:
                 yield cleanupTxn.execSQL("delete from " + table, [])

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/file/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/file/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/file/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/migrate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/migrate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/migrate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.common.datastore.upgrade.test.test_migrate -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -13,4 +13,3 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ##
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/current.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/current.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/upgrades/fake_dialect/upgrade_from_3_to_4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema1/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/current.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/current.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_3_to_5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_4_to_5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_4_to_5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema2/upgrades/fake_dialect/upgrade_from_4_to_5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/current.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/current.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/current.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_3_to_4.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_3_to_4.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_4_to_5.sql
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_4_to_5.sql	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/fake_schema3/upgrades/fake_dialect/upgrade_from_4_to_5.sql	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ----
--- Copyright (c) 2011 Apple Inc. All rights reserved.
+-- Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/test_upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/test_upgrade.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/test/test_upgrade.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrade.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrade.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrade.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.common.datastore.upgrade.sql.test -*-
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.
@@ -30,6 +30,8 @@
 from twisted.python.modules import getModule
 from twisted.python.reflect import namedObject
 
+from txdav.common.datastore.upgrade.sql.others import attachment_migration
+
 class UpgradeDatabaseCoreService(Service, LoggingMixIn, object):
     """
     Base class for either schema or data upgrades on the database.
@@ -73,6 +75,7 @@
         """
         return cls(store, service, uid=uid, gid=gid,)
 
+
     def __init__(self, sqlStore, service, uid=None, gid=None):
         """
         Initialize the service.
@@ -83,25 +86,27 @@
         self.gid = gid
         self.schemaLocation = getModule(__name__).filePath.parent().parent().sibling("sql_schema")
         self.pyLocation = getModule(__name__).filePath.parent()
-        
+
         self.versionKey = None
         self.versionDescriptor = ""
         self.upgradeFileSuffix = ""
         self.defaultKeyValue = None
-        
+
+
     def startService(self):
         """
         Start the service.
         """
         self.databaseUpgrade()
 
+
     @inlineCallbacks
     def databaseUpgrade(self):
         """
         Do a database schema upgrade.
         """
         self.log_warn("Beginning database %s check." % (self.versionDescriptor,))
-        
+
         # Retrieve information from schema and database
         dialect, required_version, actual_version = yield self.getVersions()
 
@@ -117,13 +122,14 @@
             self.sqlStore.setUpgrading(True)
             yield self.upgradeVersion(actual_version, required_version, dialect)
             self.sqlStore.setUpgrading(False)
-            
+
         self.log_warn("Database %s check complete." % (self.versionDescriptor,))
 
         # see http://twistedmatrix.com/trac/ticket/4649
         if self.wrappedService is not None:
             reactor.callLater(0, self.wrappedService.setServiceParent, self.parent)
-    
+
+
     @inlineCallbacks
     def getVersions(self):
         """
@@ -141,7 +147,7 @@
         else:
             required_version = int(found.group(1))
             self.log_warn("Required database key %s: %s." % (self.versionKey, required_version,))
-        
+
         # Get the schema version in the current database
         sqlTxn = self.sqlStore.newTransaction()
         dialect = sqlTxn.dialect
@@ -161,6 +167,7 @@
 
         returnValue((dialect, required_version, actual_version,))
 
+
     @inlineCallbacks
     def upgradeVersion(self, fromVersion, toVersion, dialect):
         """
@@ -169,10 +176,10 @@
         """
 
         self.log_warn("Starting %s upgrade from version %d to %d." % (self.versionDescriptor, fromVersion, toVersion,))
-        
+
         # Scan for all possible upgrade files - returned sorted
         files = self.scanForUpgradeFiles(dialect)
-        
+
         # Determine upgrade sequence and run each upgrade
         upgrades = self.determineUpgradeSequence(fromVersion, toVersion, files, dialect)
 
@@ -186,17 +193,19 @@
 
         self.log_warn("%s upgraded from version %d to %d." % (self.versionDescriptor.capitalize(), fromVersion, toVersion,))
 
+
     def getPathToUpgrades(self, dialect):
         """
-        Return the path where appropriate upgrade files can be found. 
+        Return the path where appropriate upgrade files can be found.
         """
         raise NotImplementedError
 
+
     def scanForUpgradeFiles(self, dialect):
         """
         Scan for upgrade files with the require name.
         """
-        
+
         fp = self.getPathToUpgrades(dialect)
         upgrades = []
         regex = re.compile("upgrade_from_(\d+)_to_(\d+)%s" % (self.upgradeFileSuffix,))
@@ -206,10 +215,11 @@
                 fromV = int(matched.group(1))
                 toV = int(matched.group(2))
                 upgrades.append((fromV, toV, child))
-        
-        upgrades.sort(key=lambda x:(x[0], x[1]))
+
+        upgrades.sort(key=lambda x: (x[0], x[1]))
         return upgrades
 
+
     def determineUpgradeSequence(self, fromVersion, toVersion, files, dialect):
         """
         Determine the upgrade_from_X_to_Y(.sql|.py) files that cover the full range of upgrades.
@@ -224,7 +234,7 @@
         for fromV, toV, fp in files:
             if fromV not in filesByFromVersion or filesByFromVersion[fromV][1] < toV:
                 filesByFromVersion[fromV] = fromV, toV, fp
-        
+
         upgrades = []
         nextVersion = fromVersion
         while nextVersion != toVersion:
@@ -235,15 +245,18 @@
             else:
                 upgrades.append(filesByFromVersion[nextVersion][2])
                 nextVersion = filesByFromVersion[nextVersion][1]
-        
+
         return upgrades
 
+
     def applyUpgrade(self, fp):
         """
         Apply the supplied upgrade to the database. Always return an L{Deferred"
         """
         raise NotImplementedError
-        
+
+
+
 class UpgradeDatabaseSchemaService(UpgradeDatabaseCoreService):
     """
     Checks and upgrades the database schema. This assumes there are a bunch of
@@ -265,19 +278,21 @@
     def __init__(self, sqlStore, service, uid=None, gid=None):
         """
         Initialize the service.
-        
+
         @param sqlStore: The store to operate on. Can be C{None} when doing unit tests.
         @param service:  Wrapped service. Can be C{None} when doing unit tests.
         """
         super(UpgradeDatabaseSchemaService, self).__init__(sqlStore, service, uid, gid)
-        
+
         self.versionKey = "VERSION"
         self.versionDescriptor = "schema"
         self.upgradeFileSuffix = ".sql"
 
+
     def getPathToUpgrades(self, dialect):
         return self.schemaLocation.child("upgrades").child(dialect)
 
+
     @inlineCallbacks
     def applyUpgrade(self, fp):
         """
@@ -293,6 +308,8 @@
             yield sqlTxn.abort()
             raise
 
+
+
 class UpgradeDatabaseDataService(UpgradeDatabaseCoreService):
     """
     Checks and upgrades the database data. This assumes there are a bunch of
@@ -314,25 +331,27 @@
     def __init__(self, sqlStore, service, uid=None, gid=None):
         """
         Initialize the service.
-        
+
         @param sqlStore: The store to operate on. Can be C{None} when doing unit tests.
         @param service:  Wrapped service. Can be C{None} when doing unit tests.
         """
         super(UpgradeDatabaseDataService, self).__init__(sqlStore, service, uid, gid)
-        
+
         self.versionKey = "CALENDAR-DATAVERSION"
         self.versionDescriptor = "data"
         self.upgradeFileSuffix = ".py"
 
+
     def getPathToUpgrades(self, dialect):
         return self.pyLocation.child("upgrades")
 
+
     @inlineCallbacks
     def applyUpgrade(self, fp):
         """
         Apply the data upgrade .py files to the database.
         """
-        
+
         # Find the module function we need to execute
         try:
             module = getModule(__name__)
@@ -345,3 +364,51 @@
 
         self.log_warn("Applying data upgrade: %s" % (module,))
         yield doUpgrade(self.sqlStore)
+
+
+
+class UpgradeDatabaseOtherService(UpgradeDatabaseCoreService):
+    """
+    Do any other upgrade behaviors once all the schema, data, file migration upgraders
+    are done.
+
+    @ivar sqlStore: The store to operate on.
+    @type sqlStore: L{txdav.idav.IDataStore}
+
+    @ivar wrappedService: Wrapped L{IService} that will be started after this
+        L{UpgradeDatabaseOtherService}'s work is done
+    @type wrappedService: L{IService} or C{NoneType}
+    """
+
+    def __init__(self, sqlStore, service, uid=None, gid=None):
+        """
+        Initialize the service.
+
+        @param sqlStore: The store to operate on. Can be C{None} when doing unit tests.
+        @param service:  Wrapped service. Can be C{None} when doing unit tests.
+        """
+        super(UpgradeDatabaseOtherService, self).__init__(sqlStore, service, uid, gid)
+
+        self.versionDescriptor = "other upgrades"
+
+
+    @inlineCallbacks
+    def databaseUpgrade(self):
+        """
+        Do upgrades.
+        """
+        self.log_warn("Beginning database %s check." % (self.versionDescriptor,))
+
+        # Do each upgrade in our own predefined order
+        self.sqlStore.setUpgrading(True)
+
+        # Migration from dropbox to managed attachments
+        yield attachment_migration.doUpgrade(self)
+
+        self.sqlStore.setUpgrading(False)
+
+        self.log_warn("Database %s check complete." % (self.versionDescriptor,))
+
+        # see http://twistedmatrix.com/trac/ticket/4649
+        if self.wrappedService is not None:
+            reactor.callLater(0, self.wrappedService.setServiceParent, self.parent)

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.
@@ -13,4 +13,3 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ##
-

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_1_to_2.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_1_to_2.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_1_to_2.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.common.datastore.upgrade.sql.test -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_2_to_3.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_2_to_3.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/upgrade_from_2_to_3.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,6 +1,6 @@
 # -*- test-case-name: txdav.common.datastore.upgrade.sql.test -*-
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/util.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/util.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/sql/upgrades/util.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2011-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2011-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/test_migrate.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/test_migrate.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/datastore/upgrade/test/test_migrate.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/icommondatastore.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/icommondatastore.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/icommondatastore.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/common/inotifications.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/common/inotifications.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/common/inotifications.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/idav.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/idav.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/idav.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2010-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # See LICENSE for details.
 
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 # Copyright (c) 2007 Twisted Matrix Laboratories.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/element.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/element.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/element.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/extensions.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/extensions.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/extensions.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # See LICENSE for details.
 
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_etree.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_etree.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_etree.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2012-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_sax.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_sax.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/parser_sax.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc2518.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc2518.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc2518.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3253.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3253.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3253.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3744.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3744.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc3744.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc4331.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc4331.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc4331.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5397.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5397.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5397.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5842.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5842.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5842.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5995.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5995.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc5995.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc6578.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc6578.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/rfc6578.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2009-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/__init__.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/__init__.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/__init__.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
+# Copyright (c) 2012-2013 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.

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_base.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_base.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_base.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 # Copyright (c) 2009 Twisted Matrix Laboratories.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -2,7 +2,7 @@
 # See LICENSE for details.
 
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal

Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml_rfc3744.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml_rfc3744.py	2013-01-18 22:51:18 UTC (rev 10312)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/xml/test/test_xml_rfc3744.py	2013-01-19 04:44:01 UTC (rev 10313)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2013 Apple Computer, Inc. All rights reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130118/2f7e1fb3/attachment-0001.html>


More information about the calendarserver-changes mailing list