[CalendarServer-changes] [7193] CalendarServer/branches/users/cdaboo/batchupload-6699
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 14 13:54:22 PDT 2011
Revision: 7193
http://trac.macosforge.org/projects/calendarserver/changeset/7193
Author: cdaboo at apple.com
Date: 2011-03-14 13:54:05 -0700 (Mon, 14 Mar 2011)
Log Message:
-----------
Merged from trunk.
Modified Paths:
--------------
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/opendirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/setup_directory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/test/test_opendirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/root.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/test/test_root.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/caldav.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/gateway.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/principals.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/purge.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/resources.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/gateway/caldavd.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/principals/caldavd.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_resources.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/webcal/resource.py
CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-apple.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-test.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/conf/resources/caldavd-resources.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/create_caldavd_db.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/calendarmigrator.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_change.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmark.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/fix-units.sql
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpauth.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpclient.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/ical.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/population.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_ical.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/massupload.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/run.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sample.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/setbackend.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/speedcenter.tac
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/stats.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_benchmark.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_event_change_date.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/LO_DB_upgrade.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/protocolanalysis.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/request_monitor.py
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/Admin/ExtendedLogItems.txt
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_events.8
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_principals.8
CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.icalendar.patch
CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.vcard.patch
CalendarServer/branches/users/cdaboo/batchupload-6699/pyflakes
CalendarServer/branches/users/cdaboo/batchupload-6699/setup.py
CalendarServer/branches/users/cdaboo/batchupload-6699/support/Makefile.Apple
CalendarServer/branches/users/cdaboo/batchupload-6699/support/build.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/support/patchapply
CalendarServer/branches/users/cdaboo/batchupload-6699/support/submit
CalendarServer/branches/users/cdaboo/batchupload-6699/test
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/http.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/proppatch.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/put_common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/metafd.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/customxml.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dateops.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/aggregate.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/appleopendirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/augment.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/cachingdirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/calendaruserproxy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/digest.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/directory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/principal.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/accounts.xml
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/augments.xml
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/resources/caldavd.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_augment.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_cachedirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_digest.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_opendirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_principal.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_proxyprincipalmembers.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/wiki.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/xmlfile.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dropbox.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/extensions.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/freebusyurl.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/ical.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/mail.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcachepool.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcacher.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove_contact.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/get.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcalendar.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcol.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/post.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/propfind.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_addressbook_common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_addressbook_query.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_calendar_query.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_freebusy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_multiget_common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_sync_collection.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/notify.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/calendarquery.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/sqlgenerator.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/resource.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/schedule.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/caldav.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/delivery.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/imip.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/implicit.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/ischedule.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/scheduler.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/test/test_imip.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/utils.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/sharing.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/stdconfig.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/storebridge.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_calendarquery.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_icalendar.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_link.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_resource.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_sharing.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_stdconfig.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_upgrade.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_wrapping.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/timezoneservice.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/upgrade.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Abidjan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Accra.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Addis_Ababa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Algiers.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmara.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmera.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bamako.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bangui.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Banjul.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bissau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Blantyre.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Brazzaville.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bujumbura.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Cairo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Casablanca.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ceuta.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Conakry.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dakar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dar_es_Salaam.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Djibouti.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Douala.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/El_Aaiun.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Freetown.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Gaborone.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Harare.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Johannesburg.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kampala.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Khartoum.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kigali.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kinshasa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lagos.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Libreville.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lome.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Luanda.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lubumbashi.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lusaka.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Malabo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maputo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maseru.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mbabane.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mogadishu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Monrovia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nairobi.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ndjamena.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Niamey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nouakchott.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ouagadougou.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Porto-Novo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Sao_Tome.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Timbuktu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tripoli.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tunis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Windhoek.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Adak.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anchorage.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anguilla.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Antigua.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Araguaina.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Buenos_Aires.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Catamarca.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/ComodRivadavia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Cordoba.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Jujuy.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/La_Rioja.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Mendoza.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Rio_Gallegos.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Salta.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Juan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Luis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Tucuman.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Ushuaia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Aruba.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Asuncion.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atikokan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atka.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Barbados.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belem.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belize.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Blanc-Sablon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boa_Vista.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bogota.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boise.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Buenos_Aires.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cambridge_Bay.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Campo_Grande.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cancun.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Caracas.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Catamarca.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayenne.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayman.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chicago.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chihuahua.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Coral_Harbour.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cordoba.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Costa_Rica.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cuiaba.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Curacao.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Danmarkshavn.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson_Creek.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Denver.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Detroit.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dominica.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Edmonton.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Eirunepe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/El_Salvador.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ensenada.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fort_Wayne.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fortaleza.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Glace_Bay.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Godthab.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Goose_Bay.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grand_Turk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grenada.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guadeloupe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guatemala.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guayaquil.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guyana.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Halifax.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Havana.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Hermosillo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Indianapolis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Knox.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Marengo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Petersburg.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Tell_City.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vevay.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vincennes.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Winamac.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indianapolis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Inuvik.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Iqaluit.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jamaica.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jujuy.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Juneau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Louisville.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Monticello.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Knox_IN.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/La_Paz.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Lima.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Los_Angeles.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Louisville.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Maceio.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Managua.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Manaus.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Marigot.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Martinique.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mazatlan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mendoza.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Menominee.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Merida.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mexico_City.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Miquelon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Moncton.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Monterrey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montevideo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montreal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montserrat.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nassau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/New_York.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nipigon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nome.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Noronha.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Center.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/New_Salem.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Panama.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Pangnirtung.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Paramaribo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Phoenix.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port-au-Prince.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port_of_Spain.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Acre.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Velho.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Puerto_Rico.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rainy_River.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rankin_Inlet.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Recife.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Regina.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Resolute.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rio_Branco.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rosario.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santarem.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santiago.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santo_Domingo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Sao_Paulo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Scoresbysund.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Shiprock.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Barthelemy.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Johns.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Kitts.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Lucia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Thomas.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Vincent.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Swift_Current.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tegucigalpa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thule.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thunder_Bay.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tijuana.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Toronto.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tortola.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Vancouver.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Virgin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Whitehorse.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Winnipeg.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yakutat.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yellowknife.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Casey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Davis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/DumontDUrville.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Mawson.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/McMurdo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Palmer.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Rothera.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/South_Pole.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Syowa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Vostok.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Arctic/Longyearbyen.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aden.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Almaty.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Amman.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Anadyr.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtobe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashgabat.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashkhabad.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baghdad.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bahrain.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baku.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bangkok.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Beirut.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bishkek.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Brunei.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Calcutta.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Choibalsan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chongqing.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chungking.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Colombo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dacca.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Damascus.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dhaka.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dili.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dubai.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dushanbe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Gaza.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Harbin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ho_Chi_Minh.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hong_Kong.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hovd.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Irkutsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Istanbul.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jakarta.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jayapura.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jerusalem.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kabul.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kamchatka.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Karachi.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kashgar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Katmandu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kolkata.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Krasnoyarsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuala_Lumpur.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuching.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuwait.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macao.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Magadan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Makassar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Manila.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Muscat.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Nicosia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novosibirsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Omsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Oral.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Phnom_Penh.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pontianak.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pyongyang.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qatar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qyzylorda.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Rangoon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Riyadh.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Saigon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Sakhalin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Samarkand.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Seoul.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Shanghai.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Singapore.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Taipei.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tashkent.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tbilisi.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tehran.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimbu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimphu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tokyo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ujung_Pandang.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulaanbaatar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulan_Bator.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Urumqi.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vientiane.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vladivostok.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yakutsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yekaterinburg.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yerevan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Azores.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Bermuda.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Canary.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Cape_Verde.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faeroe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faroe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Jan_Mayen.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Madeira.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Reykjavik.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/South_Georgia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/St_Helena.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Stanley.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/ACT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Adelaide.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Brisbane.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Broken_Hill.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Canberra.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Currie.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Darwin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Eucla.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Hobart.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/LHI.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lindeman.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lord_Howe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Melbourne.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/NSW.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/North.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Perth.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Queensland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/South.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Sydney.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Tasmania.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Victoria.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/West.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Yancowinna.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/Acre.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/DeNoronha.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/East.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/West.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Atlantic.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Central.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/East-Saskatchewan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Eastern.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Mountain.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Newfoundland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Pacific.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Saskatchewan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Yukon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/Continental.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/EasterIsland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Cuba.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Egypt.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Eire.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Amsterdam.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Andorra.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Athens.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belfast.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belgrade.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Berlin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bratislava.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Brussels.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bucharest.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Budapest.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Chisinau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Copenhagen.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Dublin.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Gibraltar.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Guernsey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Helsinki.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Isle_of_Man.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Istanbul.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Jersey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kaliningrad.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kiev.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Lisbon.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Ljubljana.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/London.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Luxembourg.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Madrid.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Malta.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Mariehamn.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Minsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Monaco.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Moscow.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Nicosia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Oslo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Paris.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Podgorica.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Prague.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Riga.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Rome.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Samara.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/San_Marino.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sarajevo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Simferopol.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Skopje.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sofia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Stockholm.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tallinn.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tirane.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tiraspol.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Uzhgorod.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vaduz.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vatican.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vienna.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vilnius.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Volgograd.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Warsaw.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zagreb.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zaporozhye.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zurich.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB-Eire.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Hongkong.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iceland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Antananarivo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Chagos.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Christmas.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Cocos.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Comoro.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Kerguelen.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mahe.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Maldives.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mauritius.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mayotte.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Reunion.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iran.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Israel.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Jamaica.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Japan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Kwajalein.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Libya.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaNorte.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaSur.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/General.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ-CHAT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Navajo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PRC.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Apia.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Auckland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chatham.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Easter.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Efate.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Enderbury.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fakaofo.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fiji.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Funafuti.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Galapagos.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Gambier.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guadalcanal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guam.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Honolulu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Johnston.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kiritimati.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kosrae.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kwajalein.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Majuro.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Marquesas.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Midway.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Nauru.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Niue.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Norfolk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Noumea.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pago_Pago.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Palau.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pitcairn.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Ponape.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Port_Moresby.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Rarotonga.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Saipan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Samoa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tahiti.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tarawa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tongatapu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Truk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wake.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wallis.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Yap.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Poland.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Portugal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROC.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROK.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Singapore.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Turkey.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Alaska.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Aleutian.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Arizona.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Central.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/East-Indiana.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Eastern.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Hawaii.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Indiana-Starke.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Michigan.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Mountain.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Pacific.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Samoa.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/W-SU.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/version.txt
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/dbapiclient.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_subpostgres.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/base.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/base.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_xattr.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/xattr.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/scheduling.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/1.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_scheduling.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/icalendarstore.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/common.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/iaddressbookstore.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_legacy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_schema_v1.sql
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_tables.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/inotifications.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/idav.py
Added Paths:
-----------
CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_bootstrap_database
CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_monitor_notifications
CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_attachments
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/bootstrapdatabase.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/notifications.py
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/purge/resources.xml
CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge_old_events.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_create.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/config.plist
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/profiles.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_post_availability.request
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_user_list_principal_property_search.request
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/sim.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/subscribe.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_profiles.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_sim.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/nightly.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sim
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/some-more-data.sh
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/pg_stats_analysis.py
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_bootstrap_database.8
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_monitor_notifications.8
CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_attachments.8
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/internet/threadutils.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/python/clsprop.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/cache.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/ldapdirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_directory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_ldapdirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_livedirectory.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_cache.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia_Banderas.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Matamoros.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Beulah.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ojinaga.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santa_Isabel.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Macquarie.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kathmandu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novokuznetsk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CET.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CST6CDT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EET.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST5EDT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT+0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT-0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Greenwich.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/HST.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MET.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST7MDT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PST8PDT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chuuk.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pohnpei.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UCT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UTC.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Universal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/WET.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Zulu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/none.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_none.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_sql_tables.py
Removed Paths:
-------------
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_add_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_date.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_summary.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete_attendee.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_move.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_calendars.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_events.py
CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/vfreebusy.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/asyncsqlpool.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_asyncsqlpool.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/threadutils.py
Property Changed:
----------------
CalendarServer/branches/users/cdaboo/batchupload-6699/
CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_principals
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/index_file.py
CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_index_file.py
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699
___________________________________________________________________
Modified: svn:ignore
- .dependencies
*.tgz
data
logs
build
*.pyc
*.pyo
_trial_temp*
_run
.settings
.project
.pydevproject
+ .dependencies
*.tgz
data
logs
build
*.pyc
*.pyo
_run
.settings
.project
.pydevproject
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/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/CalendarServer/branches/users/glyph/conn-limit:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/CalendarServer/branches/users/sagen/locations-resources:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
/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/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/cached-subscription-calendars-5692:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
/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/dont-start-postgres:6592-6614
/CalendarServer/branches/users/glyph/linux-tests:6893-6900
/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
/CalendarServer/branches/users/glyph/oracle:7106-7155
/CalendarServer/branches/users/glyph/sendfdport:5388-5424
/CalendarServer/branches/users/glyph/sharedpool:6490-6550
/CalendarServer/branches/users/glyph/sql-store:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
/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:6700-7192
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_bootstrap_database (from rev 7192, CalendarServer/trunk/bin/calendarserver_bootstrap_database)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_bootstrap_database (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_bootstrap_database 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+##
+# Copyright (c) 2011 Apple Inc. All 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 sys
+
+#PYTHONPATH
+
+if __name__ == "__main__":
+ if "PYTHONPATH" in globals():
+ sys.path.insert(0, PYTHONPATH)
+ else:
+ from os.path import dirname, abspath, join
+ from subprocess import Popen, PIPE
+
+ home = dirname(dirname(abspath(__file__)))
+ run = join(home, "run")
+
+ child = Popen((run, "-p"), stdout=PIPE)
+ path, stderr = child.communicate()
+
+ path = path.rstrip("\n")
+
+ if child.wait() == 0:
+ sys.path[0:0] = path.split(":")
+
+ from calendarserver.tools.bootstrapdatabase import main
+ main()
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_monitor_notifications (from rev 7192, CalendarServer/trunk/bin/calendarserver_monitor_notifications)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_monitor_notifications (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_monitor_notifications 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+##
+# Copyright (c) 2011 Apple Inc. All 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 sys
+
+#PYTHONPATH
+
+if __name__ == "__main__":
+ if "PYTHONPATH" in globals():
+ sys.path.insert(0, PYTHONPATH)
+ else:
+ from os.path import dirname, abspath, join
+ from subprocess import Popen, PIPE
+
+ home = dirname(dirname(abspath(__file__)))
+ run = join(home, "run")
+
+ child = Popen((run, "-p"), stdout=PIPE)
+ path, stderr = child.communicate()
+
+ path = path.rstrip("\n")
+
+ if child.wait() == 0:
+ sys.path[0:0] = path.split(":")
+
+ sys.argv[1:1] = ["-f", join(home, "conf", "caldavd-dev.plist")]
+
+ from calendarserver.tools.notifications import main
+ main()
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_attachments (from rev 7192, CalendarServer/trunk/bin/calendarserver_purge_attachments)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_attachments (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_attachments 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+##
+# Copyright (c) 2006-2011 Apple Inc. All 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 sys
+
+#PYTHONPATH
+
+if __name__ == "__main__":
+ if "PYTHONPATH" in globals():
+ sys.path.insert(0, PYTHONPATH)
+ else:
+ from os.path import dirname, abspath, join
+ from subprocess import Popen, PIPE
+
+ home = dirname(dirname(abspath(__file__)))
+ run = join(home, "run")
+
+ child = Popen((run, "-p"), stdout=PIPE)
+ path, stderr = child.communicate()
+
+ path = path.rstrip("\n")
+
+ if child.wait() == 0:
+ sys.path[0:0] = path.split(":")
+
+ sys.argv[1:1] = ["-f", join(home, "conf", "caldavd-dev.plist")]
+
+ from calendarserver.tools.purge import main_purge_orphaned_attachments
+ main_purge_orphaned_attachments()
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699/bin/calendarserver_purge_principals
___________________________________________________________________
Added: svn:executable
+ *
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/opendirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/opendirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/opendirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -138,6 +138,7 @@
@return: C{list} containing a C{list} of C{str} (record name) and C{dict} attributes
for each record found, or C{None} otherwise.
"""
+ results = []
query, error = odframework.ODQuery.queryWithNode_forRecordTypes_attribute_matchType_queryValues_returnAttributes_maximumResults_error_(
directory.node,
recordType,
@@ -155,8 +156,10 @@
log.error(error)
raise ODError(error)
for record in records:
- yield recordToResult(record)
+ results.append(recordToResult(record))
+ return results
+
def queryRecordsWithAttribute_list(directory, attr, value, matchType, casei, recordType, attributes, count=0):
"""
List records in Open Directory matching specified attribute/value, and return key attributes for each one.
@@ -175,12 +178,13 @@
for each record found, or C{None} otherwise.
"""
+ results = []
query, error = odframework.ODQuery.queryWithNode_forRecordTypes_attribute_matchType_queryValues_returnAttributes_maximumResults_error_(
directory.node,
recordType,
attr,
adjustMatchType(matchType, casei),
- value,
+ value.decode("utf-8"),
attributes,
count,
None)
@@ -192,7 +196,8 @@
log.error(error)
raise ODError(error)
for record in records:
- yield recordToResult(record)
+ results.append(recordToResult(record))
+ return results
def queryRecordsWithAttributes_list(directory, compound, casei, recordType, attributes, count=0):
@@ -210,6 +215,7 @@
@return: C{list} containing a C{list} of C{str} (record name) and C{dict} attributes
for each record found, or C{None} otherwise.
"""
+ results = []
query, error = odframework.ODQuery.queryWithNode_forRecordTypes_attribute_matchType_queryValues_returnAttributes_maximumResults_error_(
directory.node,
recordType,
@@ -227,7 +233,8 @@
log.error(error)
raise ODError(error)
for record in records:
- yield recordToResult(record)
+ results.append(recordToResult(record))
+ return results
def getUserRecord(directory, user):
@@ -301,5 +308,4 @@
"""
Exceptions from DirectoryServices errors.
"""
- def __init__(self, error):
- self.message = (str(error), error.code())
+ pass
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/setup_directory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/setup_directory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/setup_directory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -26,6 +26,9 @@
masterNodeName = "/LDAPv3/127.0.0.1"
localNodeName = "/Local/Default"
+saclGroupNodeName = "/Local/Default"
+saclGroupNames = ("com.apple.access_calendar", "com.apple.access_addressbook")
+
masterUsers = [
(
"odtestamanda",
@@ -87,15 +90,49 @@
dsattributes.kDS1AttrPrimaryGroupID : ["20"],
},
),
+ (
+ "odtestat at sign",
+ {
+ dsattributes.kDS1AttrFirstName : ["AtSign"],
+ dsattributes.kDS1AttrLastName : ["Test"],
+ dsattributes.kDS1AttrDistinguishedName : ["At Sign Test"],
+ dsattributes.kDSNAttrEMailAddress : ["attsign at example.com"],
+ dsattributes.kDS1AttrGeneratedUID : ["71646A3A-1CEF-4744-AB1D-0AC855E25DC8"],
+ dsattributes.kDS1AttrUniqueID : ["33305"],
+ dsattributes.kDS1AttrPrimaryGroupID : ["20"],
+ },
+ ),
+ (
+ "odtestsatou",
+ {
+ dsattributes.kDS1AttrFirstName : ["\xe4\xbd\x90\xe8\x97\xa4\xe4\xbd\x90\xe8\x97\xa4\xe4\xbd\x90\xe8\x97\xa4".decode("utf-8")],
+ dsattributes.kDS1AttrLastName : ["Test \xe4\xbd\x90\xe8\x97\xa4".decode("utf-8")],
+ dsattributes.kDS1AttrDistinguishedName : ["\xe4\xbd\x90\xe8\x97\xa4\xe4\xbd\x90\xe8\x97\xa4\xe4\xbd\x90\xe8\x97\xa4 Test \xe4\xbd\x90\xe8\x97\xa4".decode("utf-8")],
+ dsattributes.kDSNAttrEMailAddress : ["satou at example.com"],
+ dsattributes.kDS1AttrGeneratedUID : ["C662F833-75AD-4589-9879-5FF102943CEF"],
+ dsattributes.kDS1AttrUniqueID : ["33306"],
+ dsattributes.kDS1AttrPrimaryGroupID : ["20"],
+ },
+ ),
]
masterGroups = [
(
+ "odtestsubgroupb",
+ {
+ dsattributes.kDS1AttrGeneratedUID : ["6C6CD282-E6E3-11DF-9492-0800200C9A66"],
+ dsattributes.kDS1AttrDistinguishedName : ["OD Test Subgroup B"],
+ dsattributes.kDSNAttrGroupMembers : ["9DC04A72-E6DD-11DF-9492-0800200C9A66"],
+ dsattributes.kDS1AttrPrimaryGroupID : ["33401"],
+ },
+ ),
+ (
"odtestgrouptop",
{
dsattributes.kDS1AttrGeneratedUID : ["6C6CD280-E6E3-11DF-9492-0800200C9A66"],
dsattributes.kDS1AttrDistinguishedName : ["OD Test Group Top"],
dsattributes.kDSNAttrGroupMembers : ["9DC04A70-E6DD-11DF-9492-0800200C9A66", "9DC04A71-E6DD-11DF-9492-0800200C9A66"],
+ dsattributes.kDSNAttrNestedGroups : ["6C6CD282-E6E3-11DF-9492-0800200C9A66"],
dsattributes.kDS1AttrPrimaryGroupID : ["33400"],
},
),
@@ -159,7 +196,7 @@
dsattributes.kDS1AttrGeneratedUID : ["6C6CD281-E6E3-11DF-9492-0800200C9A66"],
dsattributes.kDS1AttrDistinguishedName : ["OD Test Subgroup A"],
dsattributes.kDSNAttrGroupMembers : ["9DC04A74-E6DD-11DF-9492-0800200C9A66", "9DC04A75-E6DD-11DF-9492-0800200C9A66"],
- dsattributes.kDS1AttrPrimaryGroupID : ["33400"],
+ dsattributes.kDS1AttrPrimaryGroupID : ["33402"],
},
),
]
@@ -245,7 +282,9 @@
}
+
session = odframework.ODSession.defaultSession()
+ userRecords = []
for nodeName, info in userInfo.iteritems():
@@ -290,6 +329,9 @@
else:
print "User %s already exists" % (recordName,)
+ if record is not None:
+ userRecords.append(record)
+
print "Creating groups within %s:" % (nodeName,)
for recordName, attrs in groups:
record = lookupRecordName(node, dsattributes.kDSStdRecordTypeGroups, recordName)
@@ -305,7 +347,30 @@
print
+ # Populate SACL groups
+ node, error = odframework.ODNode.nodeWithSession_name_error_(session, saclGroupNodeName, None)
+ result, error = node.setCredentialsWithRecordType_recordName_password_error_(
+ dsattributes.kDSStdRecordTypeUsers,
+ userInfo[saclGroupNodeName]["user"],
+ userInfo[saclGroupNodeName]["password"],
+ None
+ )
+ if not error:
+ for saclGroupName in saclGroupNames:
+ saclGroupRecord = lookupRecordName(node, dsattributes.kDSStdRecordTypeGroups, saclGroupName)
+ if saclGroupRecord:
+ print "Populating %s SACL group:" % (saclGroupName,)
+ for userRecord in userRecords:
+ details, error = userRecord.recordDetailsForAttributes_error_(None, None)
+ recordName = details.get(dsattributes.kDSNAttrRecordName, [None])[0]
+ result, error = saclGroupRecord.isMemberRecord_error_(userRecord, None)
+ if result:
+ print "%s is already in the %s SACL group" % (recordName, saclGroupName)
+ else:
+ result, error = saclGroupRecord.addMemberRecord_error_(userRecord, None)
+ print "Adding %s to the %s SACL group" % (recordName, saclGroupName)
+ print
class ODError(Exception):
def __init__(self, error):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/test/test_opendirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/test/test_opendirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/platform/darwin/od/test/test_opendirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -26,7 +26,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"9DC04A74-E6DD-11DF-9492-0800200C9A66",
@@ -35,7 +35,7 @@
dsattributes.kDSStdRecordTypeUsers,
None,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# Local user:
if "odtestalbert" in recordNames:
@@ -126,12 +126,12 @@
def test_listAllRecordsWithAttributes_list_master(self):
directory = opendirectory.odInit("/LDAPv3/127.0.0.1")
- results = list(opendirectory.listAllRecordsWithAttributes_list(
+ results = opendirectory.listAllRecordsWithAttributes_list(
directory,
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
self.assertTrue(recordName in recordNames)
@@ -139,12 +139,12 @@
def test_listAllRecordsWithAttributes_list_local(self):
directory = opendirectory.odInit("/Local/Default")
- results = list(opendirectory.listAllRecordsWithAttributes_list(
+ results = opendirectory.listAllRecordsWithAttributes_list(
directory,
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.localUsers:
self.assertTrue(recordName in recordNames)
@@ -154,7 +154,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"betty",
@@ -163,7 +163,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestbetty" in recordNames)
@@ -171,7 +171,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"betty",
@@ -185,7 +185,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestbetty" in recordNames)
@@ -193,7 +193,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"Amand",
@@ -202,7 +202,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -210,7 +210,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"Amand",
@@ -224,7 +224,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -232,7 +232,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"mand",
@@ -241,7 +241,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -249,7 +249,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrFirstName,
"mand",
@@ -263,7 +263,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -271,7 +271,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"test",
@@ -280,18 +280,20 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
- self.assertTrue(recordName in recordNames)
+ if info[dsattributes.kDS1AttrLastName] == "Test":
+ self.assertTrue(recordName in recordNames)
for recordName, info in setup_directory.localUsers:
- self.assertTrue(recordName in recordNames)
+ if info[dsattributes.kDS1AttrLastName] == "Test":
+ self.assertTrue(recordName in recordNames)
def test_queryRecordsWithAttribute_list_lastname_exact_insensitive_match_multitype(self):
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"test",
@@ -305,18 +307,20 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
- self.assertTrue(recordName in recordNames)
+ if info[dsattributes.kDS1AttrLastName] == "Test":
+ self.assertTrue(recordName in recordNames)
for recordName, info in setup_directory.localUsers:
- self.assertTrue(recordName in recordNames)
+ if info[dsattributes.kDS1AttrLastName] == "Test":
+ self.assertTrue(recordName in recordNames)
def test_queryRecordsWithAttribute_list_lastname_begins_insensitive_match(self):
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"tes",
@@ -325,7 +329,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
self.assertTrue(recordName in recordNames)
@@ -336,7 +340,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"tes",
@@ -350,7 +354,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
self.assertTrue(recordName in recordNames)
@@ -361,7 +365,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"es",
@@ -370,7 +374,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
self.assertTrue(recordName in recordNames)
@@ -381,7 +385,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrLastName,
"es",
@@ -395,7 +399,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
for recordName, info in setup_directory.masterUsers:
self.assertTrue(recordName in recordNames)
@@ -407,7 +411,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrEMailAddress,
"aman",
@@ -416,7 +420,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -426,7 +430,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrEMailAddress,
"aman",
@@ -440,7 +444,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestamanda" in recordNames)
@@ -450,7 +454,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"9DC04A70-E6DD-11DF-9492-0800200C9A66",
@@ -459,7 +463,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# OD Master user:
self.assertTrue("odtestamanda" in recordNames)
@@ -468,7 +472,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"9DC04A70-E6DD-11DF-9492-0800200C9A66",
@@ -482,7 +486,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# OD Master user:
self.assertTrue("odtestamanda" in recordNames)
@@ -492,7 +496,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"9DC04A74-E6DD-11DF-9492-0800200C9A66",
@@ -501,7 +505,7 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# Local user:
self.assertTrue("odtestalbert" in recordNames)
@@ -511,7 +515,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"9DC04A74-E6DD-11DF-9492-0800200C9A66",
@@ -525,7 +529,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# Local user:
self.assertTrue("odtestalbert" in recordNames)
@@ -536,7 +540,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrRecordName,
"odtestgrouptop",
@@ -548,20 +552,20 @@
dsattributes.kDSNAttrNestedGroups,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestgrouptop" in recordNames)
groupMembers = results[0][1][dsattributes.kDSNAttrGroupMembers]
self.assertEquals(
groupMembers,
- setup_directory.masterGroups[0][1][dsattributes.kDSNAttrGroupMembers]
+ setup_directory.masterGroups[1][1][dsattributes.kDSNAttrGroupMembers]
)
def test_queryRecordsWithAttribute_list_groupMembers_recordName_local(self):
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrRecordName,
"odtestsubgroupa",
@@ -573,7 +577,7 @@
dsattributes.kDSNAttrNestedGroups,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestsubgroupa" in recordNames)
groupMembers = results[0][1][dsattributes.kDSNAttrGroupMembers]
@@ -587,7 +591,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"6C6CD280-E6E3-11DF-9492-0800200C9A66",
@@ -599,20 +603,20 @@
dsattributes.kDSNAttrNestedGroups,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestgrouptop" in recordNames)
groupMembers = results[0][1][dsattributes.kDSNAttrGroupMembers]
self.assertEquals(
groupMembers,
- setup_directory.masterGroups[0][1][dsattributes.kDSNAttrGroupMembers]
+ setup_directory.masterGroups[1][1][dsattributes.kDSNAttrGroupMembers]
)
def test_queryRecordsWithAttribute_list_groupMembers_guid_local(self):
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"6C6CD281-E6E3-11DF-9492-0800200C9A66",
@@ -624,7 +628,7 @@
dsattributes.kDSNAttrNestedGroups,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestsubgroupa" in recordNames)
groupMembers = results[0][1][dsattributes.kDSNAttrGroupMembers]
@@ -638,7 +642,7 @@
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrGroupMembers,
"9DC04A70-E6DD-11DF-9492-0800200C9A66",
@@ -649,12 +653,12 @@
dsattributes.kDS1AttrGeneratedUID,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertTrue("odtestgrouptop" in recordNames)
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDSNAttrNestedGroups,
"9DC04A70-E6DD-11DF-9492-0800200C9A66",
@@ -665,7 +669,7 @@
dsattributes.kDS1AttrGeneratedUID,
],
count=0
- ))
+ )
recordNames = [x[0] for x in results]
self.assertEquals([], recordNames)
@@ -682,7 +686,7 @@
compound = dsquery.expression(dsquery.expression.OR, expressions).generate()
- results = list(opendirectory.queryRecordsWithAttributes_list(
+ results = opendirectory.queryRecordsWithAttributes_list(
directory,
compound,
True,
@@ -694,7 +698,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# Master user:
self.assertTrue("odtestamanda" in recordNames)
@@ -712,7 +716,7 @@
compound = dsquery.expression(dsquery.expression.OR, expressions).generate()
- results = list(opendirectory.queryRecordsWithAttributes_list(
+ results = opendirectory.queryRecordsWithAttributes_list(
directory,
compound,
True,
@@ -724,7 +728,7 @@
],
USER_ATTRIBUTES,
count=0
- ))
+ )
recordNames = [x[0] for x in results]
# Local user:
self.assertTrue("odtestbill" in recordNames)
@@ -768,6 +772,38 @@
user, challenge, response, method)
self.assertTrue(result)
+ def test_digestAuth_master_wrong_password(self):
+ directory = opendirectory.odInit("/Search")
+
+ user = "odtestamanda"
+ password = "wrong"
+ node = "/LDAPv3/127.0.0.1"
+ uri = "principals/users/odtestamanda"
+ method = "PROPFIND"
+
+ challenge, response = getChallengeResponse(user, password, node,
+ uri, method)
+
+ self.assertRaises(opendirectory.ODError,
+ opendirectory.authenticateUserDigest,
+ directory, node, user, challenge, response, method)
+
+ def test_digestAuth_master_missing_record(self):
+ directory = opendirectory.odInit("/Search")
+
+ user = "missingperson"
+ password = "wrong"
+ node = "/LDAPv3/127.0.0.1"
+ uri = "principals/users/odtestamanda"
+ method = "PROPFIND"
+
+ challenge, response = getChallengeResponse(user, password, node,
+ uri, method)
+
+ self.assertRaises(opendirectory.ODError,
+ opendirectory.authenticateUserDigest,
+ directory, node, user, challenge, response, method)
+
def test_digestAuth_local(self):
directory = opendirectory.odInit("/Search")
@@ -795,11 +831,11 @@
else:
self.assertTrue(type(value) is str)
- def test_nonascii_record(self):
+ def test_nonascii_record_by_guid(self):
directory = opendirectory.odInit("/Search")
- results = list(opendirectory.queryRecordsWithAttribute_list(
+ results = opendirectory.queryRecordsWithAttribute_list(
directory,
dsattributes.kDS1AttrGeneratedUID,
"CA795296-D77A-4E09-A72F-869920A3D284",
@@ -808,9 +844,45 @@
dsattributes.kDSStdRecordTypeUsers,
USER_ATTRIBUTES,
count=0
- ))
+ )
result = results[0][1]
self.assertEquals(
result[dsattributes.kDS1AttrDistinguishedName],
"Unicode Test \xc3\x90"
)
+
+ def test_nonascii_record_by_name(self):
+
+ directory = opendirectory.odInit("/Search")
+
+ results = opendirectory.queryRecordsWithAttribute_list(
+ directory,
+ dsattributes.kDS1AttrDistinguishedName,
+ "Unicode Test \xc3\x90",
+ dsattributes.eDSExact,
+ False,
+ dsattributes.kDSStdRecordTypeUsers,
+ USER_ATTRIBUTES,
+ count=0
+ )
+ result = results[0][1]
+ self.assertEquals(
+ result[dsattributes.kDS1AttrGeneratedUID],
+ "CA795296-D77A-4E09-A72F-869920A3D284"
+ )
+
+ results = opendirectory.queryRecordsWithAttribute_list(
+ directory,
+ dsattributes.kDS1AttrFirstName,
+ "\xe4\xbd\x90\xe8\x97\xa4",
+ dsattributes.eDSStartsWith,
+ False,
+ dsattributes.kDSStdRecordTypeUsers,
+ USER_ATTRIBUTES,
+ count=0
+ )
+ result = results[0][1]
+ self.assertEquals(
+ result[dsattributes.kDS1AttrGeneratedUID],
+ "C662F833-75AD-4589-9879-5FF102943CEF"
+ )
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/root.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/root.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/root.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: calendarserver.provision.test.test_root -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All 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,24 @@
from twext.web2 import responsecode
from twext.web2.auth.wrapper import UnauthorizedResponse
from twext.web2.dav import davxml
-from twext.web2.http import HTTPError, StatusResponse
+from twext.web2.http import HTTPError, StatusResponse, RedirectResponse
+from twisted.cred.error import LoginFailed, UnauthorizedLogin
from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.web.xmlrpc import Proxy
+from twistedcaldav.cache import _CachedResponseResource
+from twistedcaldav.cache import MemcacheResponseCache, MemcacheChangeNotifier
+from twistedcaldav.cache import DisabledCache
from twistedcaldav.config import config
from twistedcaldav.extensions import DAVFile, CachingPropertyStore
from twistedcaldav.extensions import DirectoryPrincipalPropertySearchMixIn
from twistedcaldav.extensions import ReadOnlyResourceMixIn
from twistedcaldav.resource import CalDAVComplianceMixIn
+from twistedcaldav.resource import CalendarHomeResource, AddressBookHomeResource
+from twistedcaldav.directory.principal import DirectoryPrincipalResource
+from twistedcaldav.storebridge import CalendarCollectionResource,\
+ AddressBookCollectionResource
log = Logger()
@@ -56,6 +64,12 @@
"webcal" : ("calendar",),
}
+ # If a top-level resource path starts with any of these, an unauthenticated
+ # request is redirected to the auth url (config.WebCalendarAuthPath)
+ authServiceMap = {
+ "webcal" : True,
+ }
+
def __init__(self, path, *args, **kwargs):
super(RootResource, self).__init__(path, *args, **kwargs)
@@ -67,6 +81,18 @@
self.contentFilters = []
+ if config.EnableResponseCache and config.Memcached.Pools.Default.ClientEnabled:
+ self.responseCache = MemcacheResponseCache(self.fp)
+
+ # These class attributes need to be setup with our memcache notifier
+ CalendarHomeResource.cacheNotifierFactory = MemcacheChangeNotifier
+ AddressBookHomeResource.cacheNotifierFactory = MemcacheChangeNotifier
+ DirectoryPrincipalResource.cacheNotifierFactory = MemcacheChangeNotifier
+ CalendarCollectionResource.cacheNotifierFactory = MemcacheChangeNotifier
+ AddressBookCollectionResource.cacheNotifierFactory = MemcacheChangeNotifier
+ else:
+ self.responseCache = DisabledCache()
+
if config.ResponseCompression:
from twext.web2.filter import gzip
self.contentFilters.append((gzip.gzipfilter, True))
@@ -244,6 +270,35 @@
davxml.HRef.fromString("/principals/__uids__/%s/" % (record.guid,))
)
+ if not hasattr(request, "authzUser") and config.WebCalendarAuthPath:
+ topLevel = request.path.strip("/").split("/")[0]
+ if self.authServiceMap.get(topLevel, False):
+ # We've not been authenticated and the auth service is enabled
+ # for this resource, so redirect.
+
+ # Use config.ServerHostName if no x-forwarded-host header,
+ # otherwise use the final hostname in x-forwarded-host.
+ host = request.headers.getRawHeaders("x-forwarded-host",
+ [config.ServerHostName])[-1].split(",")[-1].strip()
+ port = 443 if config.EnableSSL else 80
+ scheme = "https" if config.EnableSSL else "http"
+
+ response = RedirectResponse(
+ request.unparseURL(
+ host=host,
+ port=port,
+ scheme=scheme,
+ path=config.WebCalendarAuthPath,
+ querystring="redirect=%s://%s%s" % (
+ scheme,
+ host,
+ request.path
+ )
+ )
+ )
+ raise HTTPError(response)
+
+
# We don't want the /inbox resource to pay attention to SACLs because
# we just want it to use the hard-coded ACL for the imip reply user.
# The /timezones resource is used by the wiki web calendar, so open
@@ -297,6 +352,30 @@
request.extendedLogItems = {}
request.extendedLogItems["xff"] = remote_ip[0]
+ if request.method == "PROPFIND" and not getattr(request, "notInCache", False) and len(segments) > 1:
+ try:
+ authnUser, authzUser = (yield self.authenticate(request))
+ request.authnUser = authnUser
+ request.authzUser = authzUser
+ except (UnauthorizedLogin, LoginFailed):
+ response = (yield UnauthorizedResponse.makeResponse(
+ request.credentialFactories,
+ request.remoteAddr
+ ))
+ raise HTTPError(response)
+
+ try:
+ if not getattr(request, "checkingCache", False):
+ request.checkingCache = True
+ response = (yield self.responseCache.getResponseForRequest(request))
+ if response is None:
+ request.notInCache = True
+ raise KeyError("Not found in cache.")
+
+ returnValue((_CachedResponseResource(response), []))
+ except KeyError:
+ pass
+
child = (yield super(RootResource, self).locateChild(request, segments))
returnValue(child)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/test/test_root.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/test/test_root.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/provision/test/test_root.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -366,7 +366,79 @@
)
return self.send(request, do_test)
+class SACLCacheTests(RootTests):
+
+ class StubResponseCacheResource(object):
+ def __init__(self):
+ self.cache = {}
+ self.responseCache = self
+ self.cacheHitCount = 0
+ def getResponseForRequest(self, request):
+ if str(request) in self.cache:
+ self.cacheHitCount += 1
+ return self.cache[str(request)]
+
+
+ def cacheResponseForRequest(self, request, response):
+ self.cache[str(request)] = response
+ return response
+
+ def setUp(self):
+ super(SACLCacheTests, self).setUp()
+ self.root.resource.responseCache = SACLCacheTests.StubResponseCacheResource()
+
+ def test_PROPFIND(self):
+ self.root.resource.useSacls = True
+
+ body = """<?xml version="1.0" encoding="utf-8" ?>
+<D:propfind xmlns:D="DAV:">
+<D:prop>
+<D:getetag/>
+<D:displayname/>
+</D:prop>
+</D:propfind>
+"""
+
+ request = SimpleRequest(
+ self.site,
+ "PROPFIND",
+ "/principals/users/dreid/",
+ headers=http_headers.Headers({
+ 'Authorization': ['basic', '%s' % ('dreid:dierd'.encode('base64'),)],
+ 'Content-Type': 'application/xml; charset="utf-8"',
+ 'Depth':'1',
+ }),
+ content=body
+ )
+
+ def gotResponse1(response):
+ if response.code != responsecode.MULTI_STATUS:
+ self.fail("Incorrect response for PROPFIND /principals/: %s" % (response.code,))
+
+ request = SimpleRequest(
+ self.site,
+ "PROPFIND",
+ "/principals/users/dreid/",
+ headers=http_headers.Headers({
+ 'Authorization': ['basic', '%s' % ('dreid:dierd'.encode('base64'),)],
+ 'Content-Type': 'application/xml; charset="utf-8"',
+ 'Depth':'1',
+ }),
+ content=body
+ )
+
+ d = self.send(request, gotResponse2)
+ return d
+
+ def gotResponse2(response):
+ if response.code != responsecode.MULTI_STATUS:
+ self.fail("Incorrect response for PROPFIND /principals/: %s" % (response.code,))
+ self.assertEqual(self.root.resource.responseCache.cacheHitCount, 1)
+
+ d = self.send(request, gotResponse1)
+ return d
+
class WikiTests(RootTests):
@inlineCallbacks
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/caldav.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/caldav.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -39,7 +39,7 @@
from twisted.python.usage import Options, UsageError
from twisted.python.reflect import namedClass
from twisted.plugin import IPlugin
-from twisted.internet.defer import gatherResults
+from twisted.internet.defer import gatherResults, Deferred
from twisted.internet import reactor as _reactor
from twisted.internet.reactor import addSystemEventTrigger
from twisted.internet.process import ProcessExitedAlready
@@ -72,11 +72,11 @@
from twistedcaldav.upgrade import upgradeData
from calendarserver.tap.util import pgServiceFromConfig
-from txdav.base.datastore.asyncsqlpool import ConnectionPool
-from txdav.base.datastore.asyncsqlpool import ConnectionPoolConnection
-from txdav.base.datastore.dbapiclient import DBAPIConnector
-from txdav.base.datastore.dbapiclient import postgresPreflight
+from twext.enterprise.ienterprise import POSTGRES_DIALECT
+from twext.enterprise.ienterprise import ORACLE_DIALECT
+from twext.enterprise.adbapi2 import ConnectionPool
+from twext.enterprise.adbapi2 import ConnectionPoolConnection
try:
from twistedcaldav.authkerb import NegotiateCredentialFactory
@@ -91,13 +91,17 @@
from calendarserver.tap.util import ConnectionWithPeer
from calendarserver.tap.util import storeFromConfig
from calendarserver.tap.util import transactionFactoryFromFD
+from calendarserver.tap.util import pgConnectorFromConfig
+from calendarserver.tap.util import oracleConnectorFromConfig
from calendarserver.tools.util import checkDirectory
try:
from calendarserver.version import version
version
except ImportError:
- sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "support"))
+ from twisted.python.modules import getModule
+ sys.path.insert(
+ 0, getModule(__name__).pathEntry.filePath.child("support").path)
from version import version as getVersion
version = "%s (%s*)" % getVersion()
twext.web2.server.VERSION = "CalendarServer/%s %s" % (
@@ -281,6 +285,13 @@
checkDirectory(dirpath, description, access=access, create=create)
def checkConfiguration(self):
+
+ # Having CalDAV *and* CardDAV both disabled is an illegal configuration
+ # for a running server (but is fine for command-line utilities)
+ if not config.EnableCalDAV and not config.EnableCardDAV:
+ print "Neither EnableCalDAV nor EnableCardDAV are set to True."
+ sys.exit(1)
+
uid, gid = None, None
if self.parent["uid"] or self.parent["gid"]:
@@ -627,16 +638,40 @@
L{makeService_Combined}, which does the work of actually handling
CalDAV and CardDAV requests.
"""
+ pool = None
if config.DBAMPFD:
txnFactory = transactionFactoryFromFD(int(config.DBAMPFD))
elif not config.UseDatabase:
txnFactory = None
+ elif not config.SharedConnectionPool:
+ dialect = POSTGRES_DIALECT
+ paramstyle = 'pyformat'
+ if config.DBType == '':
+ # get a PostgresService to tell us what the local connection
+ # info is, but *don't* start it (that would start one postgres
+ # master per slave, resulting in all kinds of mayhem...)
+ connectionFactory = pgServiceFromConfig(
+ config, None).produceConnection
+ elif config.DBType == 'postgres':
+ connectionFactory = pgConnectorFromConfig(config)
+ elif config.DBType == 'oracle':
+ dialect = ORACLE_DIALECT
+ paramstyle = 'numeric'
+ connectionFactory = oracleConnectorFromConfig(config)
+ else:
+ raise UsageError("unknown DB type: %r" % (config.DBType,))
+ pool = ConnectionPool(connectionFactory, dialect=dialect,
+ paramstyle=paramstyle)
+ txnFactory = pool.connection
else:
raise UsageError(
"trying to use DB in slave, but no connection info from parent"
)
store = storeFromConfig(config, txnFactory)
- return self.requestProcessingService(options, store)
+ result = self.requestProcessingService(options, store)
+ if pool is not None:
+ pool.setServiceParent(result)
+ return result
def requestProcessingService(self, options, store):
@@ -860,6 +895,7 @@
return self.storageService(toolServiceCreator)
+
def storageService(self, createMainService, uid=None, gid=None):
"""
If necessary, create a service to be started used for storage; for
@@ -911,11 +947,15 @@
return pgserv
elif config.DBType == 'postgres':
# Connect to a postgres database that is already running.
- import pgdb
return self.subServiceFactoryFactory(createMainService,
uid=overrideUID, gid=overrideGID)(
- DBAPIConnector(
- pgdb, postgresPreflight, config.DSN).connect)
+ pgConnectorFromConfig(config))
+ elif config.DBType == 'oracle':
+ # Connect to an Oracle database that is already running.
+ return self.subServiceFactoryFactory(createMainService,
+ uid=overrideUID, gid=overrideGID,
+ dialect=ORACLE_DIALECT, paramstyle='numeric')(
+ oracleConnectorFromConfig(config))
else:
raise UsageError("Unknown database type %r" (config.DBType,))
else:
@@ -923,11 +963,13 @@
return createMainService(None, store)
- def subServiceFactoryFactory(self, createMainService,
- uid=None, gid=None):
+ def subServiceFactoryFactory(self, createMainService, uid=None, gid=None,
+ dialect=POSTGRES_DIALECT,
+ paramstyle='pyformat'):
def subServiceFactory(connectionFactory):
ms = MultiService()
- cp = ConnectionPool(connectionFactory)
+ cp = ConnectionPool(connectionFactory, dialect=dialect,
+ paramstyle=paramstyle)
cp.setServiceParent(ms)
store = storeFromConfig(config, cp.connection)
mainService = createMainService(cp, store)
@@ -1083,7 +1125,8 @@
# filesystem to the database (if that's necessary, and there is
# filesystem data in need of upgrading).
def spawnerSvcCreator(pool, store):
- if pool is not None:
+ if pool is not None and config.SharedConnectionPool:
+ self.log_warn("Using Shared Connection Pool")
dispenser = ConnectionDispenser(pool)
else:
dispenser = None
@@ -1411,6 +1454,8 @@
"""
self.stopping = True
self.deferreds = {}
+ for name in self.processes:
+ self.deferreds[name] = Deferred()
super(DelayedStartupProcessMonitor, self).stopService()
# Cancel any outstanding restarts
@@ -1486,7 +1531,7 @@
self.startProcess,
name)
if self.stopping:
- deferred = self.deferreds.get(name, None)
+ deferred = self.deferreds.pop(name, None)
if deferred is not None:
deferred.callback(None)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tap/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -53,7 +53,7 @@
from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource
from twistedcaldav.directory.sudo import SudoDirectoryService
from twistedcaldav.directory.wiki import WikiDirectoryService
-from twistedcaldav.notify import NotifierFactory
+from twistedcaldav.notify import NotifierFactory, getPubSubConfiguration
from twistedcaldav.directorybackedaddressbook import DirectoryBackedAddressBookResource
from twistedcaldav.resource import CalDAVResource, AuthenticationWrapper
from twistedcaldav.schedule import IScheduleInboxResource
@@ -67,8 +67,12 @@
NegotiateCredentialFactory # pacify pyflakes
except ImportError:
NegotiateCredentialFactory = None
-from txdav.base.datastore.asyncsqlpool import ConnectionPoolClient
+from twext.enterprise.adbapi2 import ConnectionPoolClient
+from txdav.base.datastore.dbapiclient import DBAPIConnector, OracleConnector
+from txdav.base.datastore.dbapiclient import postgresPreflight
+from txdav.base.datastore.subpostgres import PostgresService
+
from calendarserver.accesslog import DirectoryLogWrapperResource
from calendarserver.provision.root import RootResource
from calendarserver.webadmin.resource import WebAdminResource
@@ -77,7 +81,6 @@
from txdav.common.datastore.sql import CommonDataStore as CommonSQLDataStore
from txdav.common.datastore.file import CommonDataStore as CommonFileDataStore
from txdav.common.datastore.sql import v1_schema
-from txdav.base.datastore.subpostgres import PostgresService
from twext.python.filepath import CachingFilePath
from urllib import quote
@@ -119,6 +122,24 @@
)
+
+def pgConnectorFromConfig(config):
+ """
+ Create a postgres DB-API connector from the given configuration.
+ """
+ import pgdb
+ return DBAPIConnector(pgdb, postgresPreflight, config.DSN).connect
+
+
+
+def oracleConnectorFromConfig(config):
+ """
+ Create a postgres DB-API connector from the given configuration.
+ """
+ return OracleConnector(config.DSN).connect
+
+
+
class ConnectionWithPeer(Connection):
connected = True
@@ -126,10 +147,12 @@
def getPeer(self):
return "<peer: %r %r>" % (self.socket.fileno(), id(self))
+
def getHost(self):
return "<host: %r %r>" % (self.socket.fileno(), id(self))
+
def transactionFactoryFromFD(dbampfd):
"""
Create a transaction factory from an inherited file descriptor.
@@ -143,7 +166,6 @@
return protocol.newTransaction
-# txnFacSub(int(config.DBAMPFD))
def storeFromConfig(config, txnFactory):
"""
@@ -160,6 +182,7 @@
notifierFactory = NotifierFactory(
config.Notifications.InternalNotificationHost,
config.Notifications.InternalNotificationPort,
+ pubSubConfig=getPubSubConfiguration(config)
)
else:
notifierFactory = None
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/bootstrapdatabase.py (from rev 7192, CalendarServer/trunk/calendarserver/tools/bootstrapdatabase.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/bootstrapdatabase.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/bootstrapdatabase.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,251 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 getopt import getopt, GetoptError
+import os
+import subprocess
+import sys
+
+CONNECTNAME = "_postgres"
+USERNAME = "caldav"
+DATABASENAME = "caldav"
+SCHEMAFILE = "/usr/share/caldavd/lib/python/txdav/common/datastore/sql_schema_v1.sql"
+SCHEMAVERSION = 3
+
+# Executables:
+CREATEDB = "/usr/bin/createdb"
+CREATEUSER = "/usr/bin/createuser"
+PSQL = "/usr/bin/psql"
+
+def usage(e=None):
+ name = os.path.basename(sys.argv[0])
+ print "usage: %s [options] username" % (name,)
+ print ""
+ print " Bootstrap calendar server postgres database and schema"
+ print ""
+ print "options:"
+ print " -h --help: print this help and exit"
+ print " -v --verbose: print additional information"
+ print ""
+
+ if e:
+ sys.stderr.write("%s\n" % (e,))
+ sys.exit(64)
+ else:
+ sys.exit(0)
+
+def createUser(verbose=False):
+ """
+ Create the user which calendar server will use to access postgres.
+ Return True if user is created, False if user already existed.
+ Raise BootstrapError if there is an issue.
+ """
+
+ cmdArgs = [
+ CREATEUSER,
+ "--username=%s" % (CONNECTNAME,),
+ USERNAME,
+ "--no-superuser",
+ "--createdb",
+ "--no-createrole"
+ ]
+ try:
+ if verbose:
+ print "\nAttempting to create user..."
+ print "Executing: %s" % (" ".join(cmdArgs))
+ out = subprocess.check_output(cmdArgs, stderr=subprocess.STDOUT)
+ if verbose:
+ print out
+ return True
+ except subprocess.CalledProcessError, e:
+ if verbose:
+ print e.output
+ if "already exists" in e.output:
+ return False
+ raise BootstrapError(
+ "%s failed:\n%s (exit code = %d)" %
+ (CREATEUSER, e.output, e.returncode)
+ )
+
+
+def createDatabase(verbose=False):
+ """
+ Create the database which calendar server will use within postgres.
+ Return True if database is created, False if database already existed.
+ Raise BootstrapError if there is an issue.
+ """
+
+ cmdArgs = [
+ CREATEDB,
+ "--username=%s" % (USERNAME,),
+ DATABASENAME,
+ ]
+ try:
+ if verbose:
+ print "\nAttempting to create database..."
+ print "Executing: %s" % (" ".join(cmdArgs))
+ out = subprocess.check_output(cmdArgs, stderr=subprocess.STDOUT)
+ if verbose:
+ print out
+ return True
+ except subprocess.CalledProcessError, e:
+ if verbose:
+ print e.output
+ if "already exists" in e.output:
+ return False
+ raise BootstrapError(
+ "%s failed:\n%s (exit code = %d)" %
+ (CREATEDB, e.output, e.returncode)
+ )
+
+
+def getSchemaVersion(verbose=False):
+ """
+ Return the version number for the schema installed in the database.
+ Raise BootstrapError if there is an issue.
+ """
+
+ cmdArgs = [
+ PSQL,
+ "-d", DATABASENAME,
+ "-U", USERNAME,
+ "-t",
+ "-c", "select value from calendarserver where name='VERSION';",
+ ]
+ try:
+ if verbose:
+ print "\nAttempting to read schema version..."
+ print "Executing: %s" % (" ".join(cmdArgs))
+ out = subprocess.check_output(cmdArgs, stderr=subprocess.STDOUT)
+ if verbose:
+ print out
+ except subprocess.CalledProcessError, e:
+ if verbose:
+ print e.output
+ raise BootstrapError(
+ "%s failed:\n%s (exit code = %d)" %
+ (PSQL, e.output, e.returncode)
+ )
+
+ try:
+ version = int(out)
+ except ValueError, e:
+ raise BootstrapError(
+ "Failed to parse schema version: %s" % (e,)
+ )
+ return version
+
+def installSchema(verbose=False):
+ """
+ Install the calendar server database schema.
+ Return True if database is created, False if database already existed.
+ Raise BootstrapError if there is an issue.
+ """
+
+ cmdArgs = [
+ PSQL,
+ "-U", USERNAME,
+ "-f", SCHEMAFILE,
+ ]
+ try:
+ if verbose:
+ print "Executing: %s" % (" ".join(cmdArgs))
+ out = subprocess.check_output(cmdArgs, stderr=subprocess.STDOUT)
+ if verbose:
+ print out
+ if "already exists" in out:
+ return False
+ return True
+ except subprocess.CalledProcessError, e:
+ if verbose:
+ print e.output
+ raise BootstrapError(
+ "%s failed:\n%s (exit code = %d)" %
+ (PSQL, e.output, e.returncode)
+ )
+
+
+class BootstrapError(Exception):
+ pass
+
+def error(s):
+ sys.stderr.write("%s\n" % (s,))
+ sys.exit(1)
+
+def main():
+ try:
+ (optargs, args) = getopt(
+ sys.argv[1:], "hv", [
+ "help",
+ "verbose",
+ ],
+ )
+ except GetoptError, e:
+ usage(e)
+
+ verbose = False
+
+ for opt, arg in optargs:
+ if opt in ("-h", "--help"):
+ usage()
+ elif opt in ("-v", "--verbose"):
+ verbose = True
+ else:
+ raise NotImplementedError(opt)
+
+
+ # Create the calendar server database user within postgres
+ try:
+ newlyCreated = createUser(verbose=verbose)
+ if newlyCreated:
+ print "Database user '%s' created" % (USERNAME,)
+ else:
+ print "Database User '%s' exists" % (USERNAME,)
+ except BootstrapError, e:
+ error("Failed to create database user '%s': %s" % (USERNAME, e))
+
+ # Create the calendar server database within postgres
+ try:
+ newlyCreated = createDatabase(verbose=verbose)
+ if newlyCreated:
+ print "Database '%s' created" % (DATABASENAME,)
+ else:
+ print "Database '%s' exists" % (DATABASENAME,)
+ except BootstrapError, e:
+ error("Failed to create database '%s': %s" % (DATABASENAME, e))
+
+ # Retrieve the version number of the installed schema
+ try:
+ version = getSchemaVersion(verbose=verbose)
+ except BootstrapError, e:
+ version = 0
+
+ if version == SCHEMAVERSION:
+ print "Latest schema version (%d) is installed" % (version,)
+
+ elif version == 0: # No schema installed
+ installSchema(verbose=verbose)
+ version = getSchemaVersion(verbose=verbose)
+ print "Successfully installed schema version %d" % (version,)
+
+ else: # upgrade needed
+ error(
+ "Schema needs to be upgraded from %d to %d" %
+ (version, SCHEMAVERSION)
+ )
+
+if __name__ == "__main__":
+ main()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/gateway.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/gateway.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/gateway.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -112,12 +112,16 @@
os.umask(config.umask)
+ # Configure memcached client settings prior to setting up resource
+ # hierarchy (in getDirectory)
+ setupMemcached(config)
+
try:
config.directory = getDirectory()
except DirectoryError, e:
respondWithError(str(e))
return
- setupMemcached(config)
+
except ConfigurationError, e:
respondWithError(str(e))
return
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/notifications.py (from rev 7192, CalendarServer/trunk/calendarserver/tools/notifications.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/notifications.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/notifications.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,587 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 calendarserver.tools.util import loadConfig
+from datetime import datetime
+from getopt import getopt, GetoptError
+from getpass import getpass
+from twisted.application.service import Service
+from twisted.internet import reactor, ssl
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.web import client
+from twisted.words.protocols.jabber import xmlstream
+from twisted.words.protocols.jabber.client import XMPPAuthenticator, IQAuthInitializer
+from twisted.words.protocols.jabber.jid import JID
+from twisted.words.protocols.jabber.xmlstream import IQ
+from twisted.words.xish import domish
+from twistedcaldav.config import config, ConfigurationError
+from twistedcaldav.util import AuthorizedHTTPGetter
+from xml.etree import ElementTree
+import os
+import signal
+import sys
+import uuid
+
+
+def usage(e=None):
+ name = os.path.basename(sys.argv[0])
+ print "usage: %s [options] username" % (name,)
+ print ""
+ print " Monitor push notification events from calendar server"
+ print ""
+ print "options:"
+ print " -a --admin <username>: Specify an administrator username"
+ print " -f --config <path>: Specify caldavd.plist configuration path"
+ print " -h --help: print this help and exit"
+ print " -H --host <hostname>: calendar server host name"
+ print " -p --port <port number>: calendar server port number"
+ print " -s --ssl: use https (default is http)"
+ print " -v --verbose: print additional information including XMPP traffic"
+ print ""
+
+ if e:
+ sys.stderr.write("%s\n" % (e,))
+ sys.exit(64)
+ else:
+ sys.exit(0)
+
+
+def main():
+ try:
+ (optargs, args) = getopt(
+ sys.argv[1:], "a:f:hH:p:sv", [
+ "admin=",
+ "config=",
+ "help",
+ "host=",
+ "port=",
+ "ssl",
+ "verbose",
+ ],
+ )
+ except GetoptError, e:
+ usage(e)
+
+ admin = None
+ configFileName = None
+ host = None
+ port = None
+ useSSL = False
+ verbose = False
+
+ for opt, arg in optargs:
+ if opt in ("-h", "--help"):
+ usage()
+ elif opt in ("-f", "--config"):
+ configFileName = arg
+ elif opt in ("-a", "--admin"):
+ admin = arg
+ elif opt in ("-H", "--host"):
+ host = arg
+ elif opt in ("-p", "--port"):
+ port = int(arg)
+ elif opt in ("-s", "--ssl"):
+ useSSL = True
+ elif opt in ("-v", "--verbose"):
+ verbose = True
+ else:
+ raise NotImplementedError(opt)
+
+ if len(args) != 1:
+ usage("Username not specified")
+
+ username = args[0]
+
+ if host is None:
+ # No host specified, so try loading config to look up settings
+ try:
+ loadConfig(configFileName)
+ except ConfigurationError, e:
+ print "Error in configuration: %s" % (e,)
+ sys.exit(1)
+
+ useSSL = config.EnableSSL
+ host = config.ServerHostName
+ port = config.SSLPort if useSSL else config.HTTPPort
+
+ if port is None:
+ usage("Must specify a port number")
+
+ if admin:
+ password = getpass("Password for administrator %s: " % (admin,))
+ else:
+ password = getpass("Password for %s: " % (username,))
+ admin = username
+
+ monitorService = PushMonitorService(useSSL, host, port, admin, username,
+ password, verbose)
+ reactor.addSystemEventTrigger("during", "startup",
+ monitorService.startService)
+ reactor.addSystemEventTrigger("before", "shutdown",
+ monitorService.stopService)
+
+ reactor.run()
+
+
+
+class PubSubClientFactory(xmlstream.XmlStreamFactory):
+ """
+ An XMPP pubsub client that subscribes to nodes and prints a message
+ whenever a notification arrives.
+ """
+
+ pubsubNS = 'http://jabber.org/protocol/pubsub'
+
+ def __init__(self, jid, password, service, nodes, verbose):
+ resource = "pushmonitor.%s" % (uuid.uuid4().hex,)
+ self.jid = "%s/%s" % (jid, resource)
+ self.service = service
+ self.nodes = nodes
+ self.verbose = verbose
+
+ if self.verbose:
+ print "JID:", self.jid, "Pubsub service:", self.service
+
+ self.presenceSeconds = 60
+ self.presenceCall = None
+ self.xmlStream = None
+ self.doKeepAlive = True
+
+ xmlstream.XmlStreamFactory.__init__(self,
+ XMPPAuthenticator(JID(self.jid), password))
+
+ self.addBootstrap(xmlstream.STREAM_CONNECTED_EVENT, self.connected)
+ self.addBootstrap(xmlstream.STREAM_END_EVENT, self.disconnected)
+ self.addBootstrap(xmlstream.INIT_FAILED_EVENT, self.initFailed)
+
+ self.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, self.authenticated)
+ self.addBootstrap(IQAuthInitializer.INVALID_USER_EVENT,
+ self.authFailed)
+ self.addBootstrap(IQAuthInitializer.AUTH_FAILED_EVENT,
+ self.authFailed)
+
+ signal.signal(signal.SIGINT, self.sigint_handler)
+
+ @inlineCallbacks
+ def sigint_handler(self, num, frame):
+ print " Shutting down..."
+ if self.xmlStream is not None:
+ for node, (url, name, kind) in self.nodes.iteritems():
+ yield self.unsubscribe(node, name, kind)
+ reactor.stop()
+
+ def connected(self, xmlStream):
+ self.xmlStream = xmlStream
+ if self.verbose:
+ print "XMPP connection successful"
+ xmlStream.rawDataInFn = self.rawDataIn
+ xmlStream.rawDataOutFn = self.rawDataOut
+ xmlStream.addObserver("/message/event/items",
+ self.handleMessageEventItems)
+
+ def disconnected(self, xmlStream):
+ self.xmlStream = None
+ if self.presenceCall is not None:
+ self.presenceCall.cancel()
+ self.presenceCall = None
+ if self.verbose:
+ print "XMPP disconnected"
+
+ def initFailed(self, failure):
+ self.xmlStream = None
+ print "XMPP connection failure: %s" % (failure,)
+ reactor.stop()
+
+ @inlineCallbacks
+ def authenticated(self, xmlStream):
+ if self.verbose:
+ print "XMPP authentication successful"
+ self.sendPresence()
+ for node, (url, name, kind) in self.nodes.iteritems():
+ yield self.subscribe(node, name, kind)
+
+ print "Awaiting notifications (hit Control-C to end)"
+
+ def authFailed(self, e):
+ print "XMPP authentication failed"
+ reactor.stop()
+
+ def sendPresence(self):
+ if self.doKeepAlive and self.xmlStream is not None:
+ presence = domish.Element(('jabber:client', 'presence'))
+ self.xmlStream.send(presence)
+ self.presenceCall = reactor.callLater(self.presenceSeconds,
+ self.sendPresence)
+
+ def handleMessageEventItems(self, iq):
+ item = iq.firstChildElement().firstChildElement()
+ if item:
+ node = item.getAttribute("node")
+ if node:
+ node = str(node)
+ url, name, kind = self.nodes.get(node, ("Not subscribed", "Unknown", "Unknown"))
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ print '%s | Notification for "%s" (%s)' % (timestamp, name, kind)
+ if self.verbose:
+ print " node = %s" % (node,)
+ print " url = %s" % (url,)
+
+
+ @inlineCallbacks
+ def subscribe(self, node, name, kind):
+ iq = IQ(self.xmlStream)
+ pubsubElement = iq.addElement("pubsub", defaultUri=self.pubsubNS)
+ subElement = pubsubElement.addElement("subscribe")
+ subElement["node"] = node
+ subElement["jid"] = self.jid
+ print 'Subscribing to "%s" (%s)' % (name, kind)
+ if self.verbose:
+ print node
+ try:
+ yield iq.send(to=self.service)
+ print "OK"
+ except Exception, e:
+ print "Subscription failure: %s %s" % (node, e)
+
+ @inlineCallbacks
+ def unsubscribe(self, node, name, kind):
+ iq = IQ(self.xmlStream)
+ pubsubElement = iq.addElement("pubsub", defaultUri=self.pubsubNS)
+ subElement = pubsubElement.addElement("unsubscribe")
+ subElement["node"] = node
+ subElement["jid"] = self.jid
+ print 'Unsubscribing from "%s" (%s)' % (name, kind)
+ if self.verbose:
+ print node
+ try:
+ yield iq.send(to=self.service)
+ print "OK"
+ except Exception, e:
+ print "Unsubscription failure: %s %s" % (node, e)
+
+
+ @inlineCallbacks
+ def retrieveSubscriptions(self):
+ # This isn't supported by Apple's pubsub service
+ iq = IQ(self.xmlStream)
+ pubsubElement = iq.addElement("pubsub", defaultUri=self.pubsubNS)
+ pubsubElement.addElement("subscriptions")
+ print "Requesting list of subscriptions"
+ try:
+ yield iq.send(to=self.service)
+ except Exception, e:
+ print "Subscription list failure: %s" % (e,)
+
+
+ def rawDataIn(self, buf):
+ print "RECV: %s" % unicode(buf, 'utf-8').encode('ascii', 'replace')
+
+ def rawDataOut(self, buf):
+ print "SEND: %s" % unicode(buf, 'utf-8').encode('ascii', 'replace')
+
+
+class PropfindRequestor(AuthorizedHTTPGetter):
+ handleStatus_207 = lambda self: self.handleStatus_200
+
+
+class PushMonitorService(Service):
+ """
+ A service which uses CalDAV to determine which pubsub node(s) correspond
+ to any calendar the user has access to (including any belonging to users
+ who have delegated access to the user). Those nodes are subscribed to
+ using XMPP and monitored for updates.
+ """
+
+ def __init__(self, useSSL, host, port, authname, username, password, verbose):
+ self.useSSL = useSSL
+ self.host = host
+ self.port = port
+ self.authname = authname
+ self.username = username
+ self.password = password
+ self.verbose = verbose
+
+ @inlineCallbacks
+ def startService(self):
+ try:
+ principals = (yield self.getProxyFor())
+ principals.add("/principals/users/%s/" % (self.username,))
+ paths = set()
+ for principal in principals:
+ name, homes = (yield self.getPrincipalDetails(principal))
+ if self.verbose:
+ print name, homes
+ for home in homes:
+ paths.add(home)
+ subscribeNodes = { }
+ for path in paths:
+ host, port, nodes = (yield self.getPushInfo(path))
+ subscribeNodes.update(nodes)
+ if subscribeNodes:
+ self.startMonitoring(host, port, subscribeNodes)
+ else:
+ print "No nodes to monitor"
+ reactor.stop()
+
+ except Exception, e:
+ print "Error:", e
+ reactor.stop()
+
+ @inlineCallbacks
+ def getPrincipalDetails(self, path):
+ """
+ Given a principal path, retrieve and return the corresponding
+ displayname and set of calendar/addressbook homes.
+ """
+
+ name = ""
+ homes = []
+
+ headers = {
+ "Depth" : "0",
+ }
+ body = """<?xml version="1.0" encoding="UTF-8"?>
+ <A:propfind xmlns:A="DAV:"
+ xmlns:CARD="urn:ietf:params:xml:ns:carddav"
+ xmlns:CAL="urn:ietf:params:xml:ns:caldav">
+ <A:prop>
+ <CAL:calendar-home-set/>
+ <CARD:addressbook-home-set/>
+ <A:displayname/>
+ </A:prop>
+ </A:propfind>
+ """
+
+ try:
+ responseBody = (yield self.makeRequest(path, "PROPFIND", headers,
+ body))
+ try:
+ doc = ElementTree.fromstring(responseBody)
+ for response in doc.findall("{DAV:}response"):
+ href = response.find("{DAV:}href")
+ for propstat in response.findall("{DAV:}propstat"):
+ status = propstat.find("{DAV:}status")
+ if "200 OK" in status.text:
+ for prop in propstat.findall("{DAV:}prop"):
+ calendarHomeSet = prop.find("{urn:ietf:params:xml:ns:caldav}calendar-home-set")
+ if calendarHomeSet is not None:
+ for href in calendarHomeSet.findall("{DAV:}href"):
+ href = href.text
+ if href:
+ homes.append(href)
+ addressbookHomeSet = prop.find("{urn:ietf:params:xml:ns:carddav}addressbook-home-set")
+ if addressbookHomeSet is not None:
+ for href in addressbookHomeSet.findall("{DAV:}href"):
+ href = href.text
+ if href:
+ homes.append(href)
+ displayName = prop.find("{DAV:}displayname")
+ if displayName is not None:
+ displayName = displayName.text
+ if displayName:
+ name = displayName
+
+ except Exception, e:
+ print "Unable to parse principal details", e
+ print responseBody
+ raise
+
+ except Exception, e:
+ print "Unable to look up principal details", e
+ raise
+
+ returnValue( (name, homes) )
+
+ @inlineCallbacks
+ def getProxyFor(self):
+ """
+ Retrieve and return the principal paths for any user that has delegated
+ calendar access to this user.
+ """
+
+ proxies = set()
+
+ headers = {
+ "Depth" : "0",
+ }
+ body = """<?xml version="1.0" encoding="UTF-8"?>
+ <A:propfind xmlns:A="DAV:">
+ <A:prop>
+ <C:calendar-proxy-read-for xmlns:C="http://calendarserver.org/ns/"/>
+ <C:calendar-proxy-write-for xmlns:C="http://calendarserver.org/ns/"/>
+ </A:prop>
+ </A:propfind>
+ """
+ path = "principals/users/%s" % (self.username,)
+
+ try:
+ responseBody = (yield self.makeRequest(path, "PROPFIND", headers,
+ body))
+ try:
+ doc = ElementTree.fromstring(responseBody)
+ for response in doc.findall("{DAV:}response"):
+ href = response.find("{DAV:}href")
+ for propstat in response.findall("{DAV:}propstat"):
+ status = propstat.find("{DAV:}status")
+ if "200 OK" in status.text:
+ for prop in propstat.findall("{DAV:}prop"):
+ for element in (
+ "{http://calendarserver.org/ns/}calendar-proxy-read-for",
+ "{http://calendarserver.org/ns/}calendar-proxy-write-for",
+ ):
+ proxyFor = prop.find(element)
+ if proxyFor is not None:
+ for href in proxyFor.findall("{DAV:}href"):
+ href = href.text
+ if href:
+ proxies.add(href)
+
+ except Exception, e:
+ print "Unable to parse proxy information", e
+ print responseBody
+ raise
+
+ except Exception, e:
+ print "Unable to look up who %s is a proxy for" % (self.username,)
+ raise
+
+ returnValue(proxies)
+
+
+ @inlineCallbacks
+ def getPushInfo(self, path):
+ """
+ Given a calendar home path, retrieve push notification info including
+ xmpp hostname and port, the pushkey for the home and for each shared
+ collection bound into the home.
+ """
+
+ headers = {
+ "Depth" : "1",
+ }
+ body = """<?xml version="1.0" encoding="UTF-8"?>
+ <A:propfind xmlns:A="DAV:">
+ <A:prop>
+ <A:displayname/>
+ <A:resourcetype/>
+ <C:pushkey xmlns:C="http://calendarserver.org/ns/"/>
+ <C:push-transports xmlns:C="http://calendarserver.org/ns/"/>
+ </A:prop>
+ </A:propfind>
+ """
+
+ try:
+ responseBody = (yield self.makeRequest(path, "PROPFIND", headers,
+ body))
+ host = None
+ port = None
+ nodes = {}
+ try:
+ doc = ElementTree.fromstring(responseBody)
+ for response in doc.findall("{DAV:}response"):
+ href = response.find("{DAV:}href")
+ key = None
+ name = None
+ if path.startswith("/calendars"):
+ kind = "Calendar home"
+ else:
+ kind = "AddressBook home"
+ for propstat in response.findall("{DAV:}propstat"):
+ status = propstat.find("{DAV:}status")
+ if "200 OK" in status.text:
+ for prop in propstat.findall("{DAV:}prop"):
+ displayName = prop.find("{DAV:}displayname")
+ if displayName is not None:
+ displayName = displayName.text
+ if displayName:
+ name = displayName
+ resourceType = prop.find("{DAV:}resourcetype")
+ if resourceType is not None:
+ shared = resourceType.find("{http://calendarserver.org/ns/}shared")
+ if shared is not None:
+ kind = "Shared calendar"
+ pushKey = prop.find("{http://calendarserver.org/ns/}pushkey")
+ if pushKey is not None:
+ pushKey = pushKey.text
+ if pushKey:
+ key = pushKey
+
+ pushTransports = prop.find("{http://calendarserver.org/ns/}push-transports")
+ if pushTransports is not None:
+ if self.verbose:
+ print "push-transports:\n\n", ElementTree.tostring(pushTransports)
+ for transport in pushTransports.findall("{http://calendarserver.org/ns/}transport"):
+ if transport.attrib["type"] == "XMPP":
+ xmppServer = transport.find("{http://calendarserver.org/ns/}xmpp-server")
+ if xmppServer is not None:
+ xmppServer = xmppServer.text
+ if xmppServer:
+ if ":" in xmppServer:
+ host, port = xmppServer.split(":")
+ port = int(port)
+ else:
+ host = xmppServer
+ port = 5222
+
+ if key and not nodes.has_key(key):
+ nodes[key] = (href.text, name, kind)
+
+ except Exception, e:
+ print "Unable to parse proxy information", e
+ print responseBody
+ raise
+
+ except Exception, e:
+ print "Unable to look up who %s is a proxy for" % (self.username,)
+ raise
+
+ if host is None:
+ raise Exception("Unable to determine xmpp server name")
+ if port is None:
+ raise Exception("Unable to determine xmpp server port")
+
+ returnValue( (host, port, nodes) )
+
+
+ def startMonitoring(self, host, port, nodes):
+ service = "pubsub.%s" % (host,)
+ jid = "%s@%s" % (self.authname, host)
+
+ pubsubFactory = PubSubClientFactory(jid, self.password, service, nodes,
+ self.verbose)
+ reactor.connectTCP(host, port, pubsubFactory)
+
+
+ def makeRequest(self, path, method, headers, body):
+ scheme = "https:" if self.useSSL else "http:"
+ url = "%s//%s:%d/%s/" % (scheme, self.host, self.port, path)
+ caldavFactory = client.HTTPClientFactory(url, method=method,
+ headers=headers, postdata=body, agent="Push Monitor")
+ caldavFactory.username = self.authname
+ caldavFactory.password = self.password
+ caldavFactory.noisy = False
+ caldavFactory.protocol = PropfindRequestor
+ if self.useSSL:
+ reactor.connectSSL(self.host, self.port, caldavFactory,
+ ssl.ClientContextFactory())
+ else:
+ reactor.connectTCP(self.host, self.port, caldavFactory)
+
+ return caldavFactory.deferred
+
+
+if __name__ == "__main__":
+ main()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/principals.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/principals.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/principals.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -243,11 +243,15 @@
os.umask(config.umask)
+ # Configure memcached client settings prior to setting up resource
+ # hierarchy (in getDirectory)
+ setupMemcached(config)
+
try:
config.directory = getDirectory()
except DirectoryError, e:
abort(e)
- setupMemcached(config)
+
except ConfigurationError, e:
abort(e)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/purge.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/purge.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/purge.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -16,32 +16,41 @@
# limitations under the License.
##
-from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
-from twisted.application.service import Service
-from calendarserver.tap.util import FakeRequest
-from calendarserver.tap.util import getRootResource
-from calendarserver.tools.principals import removeProxy
-from calendarserver.tools.util import loadConfig
+import os
+import sys
+from errno import ENOENT, EACCES
+
from datetime import date, timedelta, datetime
from getopt import getopt, GetoptError
-from twext.python.log import Logger
-from twext.web2.dav import davxml
+
+from vobject.icalendar import utc
+
+from twisted.application.service import Service
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, returnValue
from twistedcaldav import caldavxml
from twistedcaldav.caldavxml import TimeRange
from twistedcaldav.config import config, ConfigurationError
+from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
from twistedcaldav.directory.directory import DirectoryRecord
-from twistedcaldav.method.delete_common import DeleteResource
from twistedcaldav.method.put_common import StoreCalendarObjectResource
from twistedcaldav.query import calendarqueryfilter
-from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
-from vobject.icalendar import utc
-import os
-import sys
+from twext.python.log import Logger
+from twext.web2.dav import davxml
+from twext.web2.responsecode import NO_CONTENT
+
+from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
+from calendarserver.tap.util import FakeRequest
+from calendarserver.tap.util import getRootResource
+from calendarserver.tools.principals import removeProxy
+from calendarserver.tools.util import loadConfig
+
log = Logger()
+DEFAULT_BATCH_SIZE = 100
+DEFAULT_RETAIN_DAYS = 365
+
def usage_purge_events(e=None):
name = os.path.basename(sys.argv[0])
@@ -50,10 +59,32 @@
print " Remove old events from the calendar server"
print ""
print "options:"
- print " -d --days <number>: specify how many days in the past to retain (default=365)"
+ 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 " -n --dry-run: only calculate how many events to purge"
+ 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 ""
@@ -68,12 +99,12 @@
name = os.path.basename(sys.argv[0])
print "usage: %s [options]" % (name,)
print ""
- print " Remove a principal's events from the calendar server"
+ print " Remove a principal's events and contacts 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 " -h --help: print this help and exit"
- print " -n --dry-run: only calculate how many events to purge"
+ print " -n --dry-run: calculate how many events and contacts to purge, but do not purge data"
print " -v --verbose: print progress information"
print ""
@@ -84,48 +115,98 @@
sys.exit(0)
-class PurgeOldEventsService(Service):
+class WorkerService(Service):
def __init__(self, store):
self._store = store
+ def rootResource(self):
+ try:
+ rootResource = getRootResource(config, self._store)
+ except OSError, e:
+ if e.errno == ENOENT:
+ # Trying to re-write resources.xml but its parent directory does
+ # not exist. The server's never been started, so we're missing
+ # state required to do any work. (Plus, what would be the point
+ # of purging stuff from a server that's completely empty?)
+ raise ConfigurationError(
+ "It appears that the server has never been started.\n"
+ "Please start it at least once before purging anything.")
+ elif e.errno == EACCES:
+ # Trying to re-write resources.xml but it is not writable by the
+ # current user. This most likely means we're in a system
+ # configuration and the user doesn't have sufficient privileges
+ # to do the other things the tool might need to do either.
+ raise ConfigurationError("You must run this tool as root.")
+ else:
+ raise
+ return rootResource
+
+
+ @inlineCallbacks
def startService(self):
try:
- rootResource = getRootResource(config, self._store)
- directory = rootResource.getDirectory()
+ yield self.doWork()
+ except ConfigurationError, ce:
+ sys.stderr.write("Error: %s\n" % (str(ce),))
+ except Exception, e:
+ sys.stderr.write("Error: %s\n" % (e,))
+ raise
finally:
reactor.stop()
-class PurgePrincipalService(Service):
+class PurgeOldEventsService(WorkerService):
+
+ cutoff = None
+ batchSize = None
+ 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)
+
+
+
+class PurgeOrphanedAttachmentsService(WorkerService):
+
+ batchSize = None
+ dryrun = False
+ verbose = False
+
+ def doWork(self):
+ return purgeOrphanedAttachments(
+ self._store, self.batchSize,
+ verbose=self.verbose, dryrun=self.dryrun)
+
+
+
+class PurgePrincipalService(WorkerService):
+
guids = None
dryrun = False
verbose = False
- def __init__(self, store):
- self._store = store
-
@inlineCallbacks
- def startService(self):
- try:
- rootResource = getRootResource(config, self._store)
- directory = rootResource.getDirectory()
- total = (yield purgeGUIDs(directory, rootResource, self.guids,
- verbose=self.verbose, dryrun=self.dryrun))
- 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,)
- except Exception, e:
- print "Error:", e
- raise
- finally:
- reactor.stop()
+ def doWork(self):
+ rootResource = self.rootResource()
+ directory = rootResource.getDirectory()
+ total = (yield purgeGUIDs(directory, rootResource, self.guids,
+ verbose=self.verbose, dryrun=self.dryrun))
+ 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,)
+
def shared_main(configFileName, serviceClass):
try:
@@ -142,7 +223,7 @@
reactor.addSystemEventTrigger("before", "shutdown", service.stopService)
except ConfigurationError, e:
- print "Error: %s" % (e,)
+ sys.stderr.write("Error: %s\n" % (e,))
return
reactor.run()
@@ -151,8 +232,9 @@
try:
(optargs, args) = getopt(
- sys.argv[1:], "d:f:hnv", [
+ sys.argv[1:], "d:b:f:hnv", [
"days=",
+ "batch=",
"dry-run",
"config=",
"help",
@@ -166,7 +248,8 @@
# Get configuration
#
configFileName = None
- days = 365
+ days = DEFAULT_RETAIN_DAYS
+ batchSize = DEFAULT_BATCH_SIZE
dryrun = False
verbose = False
@@ -181,6 +264,13 @@
print "Invalid value for --days: %s" % (arg,)
usage_purge_events(e)
+ 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
@@ -196,17 +286,83 @@
if args:
usage_purge_events("Too many arguments: %s" % (args,))
+ if dryrun:
+ verbose = True
+
cutoff = (date.today()-timedelta(days=days)).strftime("%Y%m%dT000000Z")
+ PurgeOldEventsService.cutoff = cutoff
+ PurgeOldEventsService.batchSize = batchSize
+ PurgeOldEventsService.dryrun = dryrun
+ PurgeOldEventsService.verbose = verbose
shared_main(
configFileName,
PurgeOldEventsService,
- cutoff,
- verbose=verbose,
- dryrun=dryrun,
)
+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)
+
+ #
+ # Get configuration
+ #
+ configFileName = None
+ batchSize = DEFAULT_BATCH_SIZE
+ dryrun = False
+ verbose = False
+
+ for opt, arg in optargs:
+ if opt in ("-h", "--help"):
+ usage_purge_orphaned_attachments()
+
+ elif opt in ("-b", "--batch"):
+ try:
+ batchSize = int(arg)
+ except ValueError, e:
+ print "Invalid value for --batch: %s" % (arg,)
+ usage_purge_orphaned_attachments(e)
+
+ elif opt in ("-v", "--verbose"):
+ verbose = True
+
+ elif opt in ("-n", "--dry-run"):
+ dryrun = True
+
+ elif opt in ("-f", "--config"):
+ configFileName = arg
+
+ else:
+ raise NotImplementedError(opt)
+
+ if args:
+ usage_purge_orphaned_attachments("Too many arguments: %s" % (args,))
+
+ if dryrun:
+ verbose = True
+
+ PurgeOrphanedAttachmentsService.batchSize = batchSize
+ PurgeOrphanedAttachmentsService.dryrun = dryrun
+ PurgeOrphanedAttachmentsService.verbose = verbose
+
+ shared_main(
+ configFileName,
+ PurgeOrphanedAttachmentsService,
+ )
+
+
def main_purge_principals():
try:
@@ -257,127 +413,98 @@
@inlineCallbacks
-def callThenStop(method, *args, **kwds):
- try:
- count = (yield method(*args, **kwds))
- if kwds.get("dryrun", False):
- print "Would have purged %d events" % (count,)
- else:
- print "Purged %d events" % (count,)
- except Exception, e:
- print "Error: %s" % (e,)
- finally:
- reactor.stop()
+def purgeOldEvents(store, directory, root, date, batchSize, verbose=False,
+ dryrun=False):
-
- at inlineCallbacks
-def purgeOldEvents(directory, root, date, verbose=False, dryrun=False):
-
- calendars = root.getChild("calendars")
- uidsFPath = calendars.fp.child("__uids__")
-
if dryrun:
- print "Dry run"
+ 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)
if verbose:
- print "Scanning calendar homes ...",
+ print "Removing events older than %s..." % (date,)
- records = []
- calendars = root.getChild("calendars")
- uidsFPath = calendars.fp.child("__uids__")
+ 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 uidsFPath.exists():
- for firstFPath in uidsFPath.children():
- if len(firstFPath.basename()) == 2:
- for secondFPath in firstFPath.children():
- if len(secondFPath.basename()) == 2:
- for homeFPath in secondFPath.children():
- uid = homeFPath.basename()
- record = directory.recordWithUID(uid)
- if record is not None:
- records.append(record)
-
if verbose:
- print "%d calendar homes found" % (len(records),)
+ 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,)
- log.info("Purging events from %d calendar homes" % (len(records),))
+ returnValue(totalRemoved)
- filter = caldavxml.Filter(
- caldavxml.ComponentFilter(
- caldavxml.ComponentFilter(
- TimeRange(start=date,),
- name=("VEVENT", "VFREEBUSY", "VAVAILABILITY"),
- ),
- name="VCALENDAR",
- )
- )
- filter = calendarqueryfilter.Filter(filter)
- eventCount = 0
- for record in records:
- # Get the calendar home
- principalCollection = directory.principalCollection
- principal = principalCollection.principalForRecord(record)
- calendarHome = yield principal.calendarHome()
+ at inlineCallbacks
+def purgeOrphanedAttachments(store, batchSize, verbose=False, dryrun=False):
+
+ if dryrun:
if verbose:
- print "%s %-15s :" % (record.uid, record.shortNames[0]),
+ print "(Dry run) Searching for orphaned attachments..."
+ txn = store.newTransaction(label="Find orphaned attachments")
+ orphans = (yield txn.orphanedAttachments())
+ orphanCount = len(orphans)
+ if verbose:
+ if orphanCount == 0:
+ print "No orphaned attachments"
+ elif orphanCount == 1:
+ print "1 orphaned attachment"
+ else:
+ print "%d orphaned attachments" % (orphanCount,)
+ returnValue(orphanCount)
- homeEventCount = 0
- # For each collection in calendar home...
- for collName in calendarHome.listChildren():
- collection = calendarHome.getChild(collName)
- if collection.isCalendarCollection():
- # ...use their indexes to figure out which events to purge.
+ if verbose:
+ print "Removing orphaned attachments..."
- # First, get the list of all child resources...
- resources = set(collection.listChildren())
+ 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,),
- # ...and ignore those that appear *after* the given cutoff
- for name, uid, type in collection.index().indexedSearch(filter):
- if isinstance(name, unicode):
- name = name.encode("utf-8")
- if name in resources:
- resources.remove(name)
+ 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,)
- for name in resources:
- resource = collection.getChild(name)
- uri = "/calendars/__uids__/%s/%s/%s" % (
- record.uid,
- collName,
- name
- )
- try:
- if not dryrun:
- (yield deleteResource(root, collection, resource,
- uri, record.guid))
- eventCount += 1
- homeEventCount += 1
- except Exception, e:
- log.error("Failed to purge old event: %s (%s)" %
- (uri, e))
+ returnValue(totalRemoved)
- if verbose:
- print "%d events" % (homeEventCount,)
- returnValue(eventCount)
-def deleteResource(root, collection, resource, uri, guid, implicit=False):
- request = FakeRequest(root, "DELETE", uri)
- request.authnUser = request.authzUser = davxml.Principal(
- davxml.HRef.fromString("/principals/__uids__/%s/" % (guid,))
- )
- # TODO: this seems hacky, even for a stub request:
- request._rememberResource(resource, uri)
-
- # Cyrus says to use resource.storeRemove( ) -- see twistedcaldav/method/delete_common.py
- deleter = DeleteResource(request, resource, uri,
- collection, "infinity", allowImplicitSchedule=implicit)
- return deleter.run()
-
-
@inlineCallbacks
def purgeGUIDs(directory, root, guids, verbose=False, dryrun=False):
total = 0
@@ -514,9 +641,11 @@
@inlineCallbacks
-def purgeGUID(guid, directory, root, verbose=False, dryrun=False):
+def purgeGUID(guid, directory, root, verbose=False, dryrun=False, proxies=True,
+ when=None):
- when = datetime.now(tz=utc)
+ if when is None:
+ when = datetime.now(tz=utc)
# when = datetime(2010, 12, 6, 12, 0, 0, 0, utc)
# Does the record exist?
@@ -572,9 +701,7 @@
childResource = (yield collection.getChild(childName))
event = (yield childResource.iCalendar())
event = perUserFilter.filter(event)
- # print "BEFORE CANCEL", event
action = cancelEvent(event, when, cua)
- # print "AFTER CANCEL", action, event
uri = "/calendars/__uids__/%s/%s/%s" % (guid, collName, childName)
request.path = uri
@@ -607,12 +734,36 @@
print "Deleting: %s" % (uri,)
if not dryrun:
result = (yield childResource.storeRemove(request, True, uri))
+ if result != NO_CONTENT:
+ print "Error deleting %s/%s/%s: %s" % (guid,
+ collName, childName, result)
+
+ txn = request._newStoreTransaction
+
+ # Remove VCards
+ abHome = (yield txn.addressbookHomeWithUID(guid))
+ if abHome is not None:
+ for abColl in list( (yield abHome.addressbooks()) ):
+ for card in list( (yield abColl.addressbookObjects()) ):
+ cardName = card.name()
+ if verbose:
+ uri = "/addressbooks/__uids__/%s/%s/%s" % (guid, 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 not dryrun:
+ # Also remove the addressbook collection itself
+ (yield abHome.removeChildWithName(abColl.name()))
+
# Commit
- txn = request._newStoreTransaction
(yield txn.commit())
- if not dryrun:
+ if proxies and not dryrun:
if verbose:
print "Deleting any proxy assignments"
assignments = (yield purgeProxyAssignments(principal))
@@ -641,4 +792,3 @@
returnValue(assignments)
-
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/resources.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/resources.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/resources.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -126,11 +126,15 @@
os.umask(config.umask)
+ # Configure memcached client settings prior to setting up resource
+ # hierarchy (in getDirectory)
+ setupMemcached(config)
+
try:
config.directory = getDirectory()
except DirectoryError, e:
abort(e)
- setupMemcached(config)
+
except ConfigurationError, e:
abort(e)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/gateway/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/gateway/caldavd.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/gateway/caldavd.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -741,7 +741,13 @@
</dict>
</dict>
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
<!--
Twisted
-->
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/principals/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/principals/caldavd.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/principals/caldavd.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -741,6 +741,13 @@
</dict>
</dict>
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
+
<!--
Twisted
-->
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/purge/resources.xml (from rev 7192, CalendarServer/trunk/calendarserver/tools/test/purge/resources.xml)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/purge/resources.xml (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/purge/resources.xml 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<accounts realm="/Search">
+</accounts>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,939 +19,13 @@
from calendarserver.tools.purge import cancelEvent
from calendarserver.tools.purge import CANCELEVENT_MODIFIED, CANCELEVENT_SHOULD_DELETE
from vobject.icalendar import utc
-from datetime import datetime
-from calendarserver.tap.util import getRootResource
-from calendarserver.tools.principals import addProxy
-from calendarserver.tools.purge import purgeOldEvents, purgeGUID, purgeProxyAssignments
from datetime import datetime, timedelta
-from twext.python.filepath import CachingFilePath as FilePath
-from twext.python.plistlib import readPlistFromString
-from twext.web2.dav import davxml
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
-from twisted.trial.unittest import SkipTest
-from twistedcaldav.config import config
-from twistedcaldav.directory.directory import DirectoryRecord
-from twistedcaldav.test.util import TestCase, CapturingProcessProtocol
-import os
-import xml
-import zlib
+from twistedcaldav.test.util import TestCase
-resourceAttr = "WebDAV:{DAV:}resourcetype"
-collectionType = zlib.compress("""<?xml version='1.0' encoding='UTF-8'?>
-<resourcetype xmlns='DAV:'>
- <collection/>
- <calendar xmlns='urn:ietf:params:xml:ns:caldav'/>
-</resourcetype>
-""")
-class PurgeOldEventsTestCase(TestCase):
- skip = SkipTest("Needs to be rewritten for new-store")
-
- def setUp(self):
- super(PurgeOldEventsTestCase, self).setUp()
-
- config.DirectoryService.params['xmlFile'] = os.path.join(
- os.path.dirname(__file__), "purge", "accounts.xml"
- )
- # TODO: when rewriting for new-store, getRootResource needs a parent
- # service argument now, to know when to start/stop the connection pool.
- self.rootResource = getRootResource(config)
- self.directory = self.rootResource.getDirectory()
-
- @inlineCallbacks
- def test_purgeOldEvents(self):
- before = {
- "calendars" : {
- "__uids__" : {
- "64" : {
- "23" : {
- "6423F94A-6B76-4A3A-815B-D52CFD77935D" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "oneshot.ics": {
- "@contents" : OLD_ICS,
- },
- "endless.ics": {
- "@contents" : ENDLESS_ICS,
- },
- "awhile.ics": {
- "@contents" : REPEATING_AWHILE_ICS,
- },
- "straddling.ics": {
- "@contents" : STRADDLING_ICS,
- },
- "recent.ics": {
- "@contents" : RECENT_ICS,
- },
- },
- },
- },
- },
- },
- },
- }
- self.createHierarchy(before, config.DocumentRoot)
-
- count = (yield purgeOldEvents(self.directory, self.rootResource,
- "20100303T000000Z"))
-
- self.assertEquals(count, 2)
-
- after = {
- "__uids__" : {
- "64" : {
- "23" : {
- "6423F94A-6B76-4A3A-815B-D52CFD77935D" : {
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "endless.ics": {
- "@contents" : ENDLESS_ICS,
- },
- "straddling.ics": {
- "@contents" : STRADDLING_ICS,
- },
- "recent.ics": {
- "@contents" : RECENT_ICS,
- },
- },
- },
- },
- },
- },
- }
- self.assertTrue(self.verifyHierarchy(
- os.path.join(config.DocumentRoot, "calendars"),
- after)
- )
-
-
-
-
-OLD_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
-DTEND;TZID=US/Pacific:20000307T151500
-TRANSP:OPAQUE
-SUMMARY:Ancient event
-DTSTART;TZID=US/Pacific:20000307T111500
-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
-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:20100303T194654Z
-UID:9FDE0E4C-1495-4CAF-863B-F7F0FB15FE8C
-DTEND;TZID=US/Pacific:20000308T151500
-RRULE:FREQ=YEARLY;INTERVAL=1
-TRANSP:OPAQUE
-SUMMARY:Ancient Repeating Endless
-DTSTART;TZID=US/Pacific:20000308T111500
-DTSTAMP:20100303T194710Z
-SEQUENCE:4
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
-
-REPEATING_AWHILE_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:20100303T194716Z
-UID:76236B32-2BC4-4D78-956B-8D42D4086200
-DTEND;TZID=US/Pacific:20000309T151500
-RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=3
-TRANSP:OPAQUE
-SUMMARY:Ancient Repeat Awhile
-DTSTART;TZID=US/Pacific:20000309T111500
-DTSTAMP:20100303T194747Z
-SEQUENCE:6
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
-
-STRADDLING_ICS = """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
-CREATED:20100303T213643Z
-UID:1C219DAD-D374-4822-8C98-ADBA85E253AB
-DTEND;TZID=US/Pacific:20090508T121500
-RRULE:FREQ=MONTHLY;INTERVAL=1;UNTIL=20100509T065959Z
-TRANSP:OPAQUE
-SUMMARY:Straddling cut-off
-DTSTART;TZID=US/Pacific:20090508T111500
-DTSTAMP:20100303T213704Z
-SEQUENCE:5
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
-
-RECENT_ICS = """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
-CREATED:20100303T195159Z
-UID:F2F14D94-B944-43D9-8F6F-97F95B2764CA
-DTEND;TZID=US/Pacific:20100304T141500
-TRANSP:OPAQUE
-SUMMARY:Recent
-DTSTART;TZID=US/Pacific:20100304T120000
-DTSTAMP:20100303T195203Z
-SEQUENCE:2
-END:VEVENT
-END:VCALENDAR
-""".replace("\n", "\r\n")
-
-
-
-
-class DeprovisionTestCase(TestCase):
-
- skip = SkipTest("Needs to be rewritten for new-store")
-
- def setUp(self):
- super(DeprovisionTestCase, self).setUp()
-
- testRootPath = FilePath(__file__).sibling("deprovision")
- template = testRootPath.child("caldavd.plist").getContent()
-
- newConfig = template % {
- "ServerRoot" : os.path.abspath(config.ServerRoot),
- }
- configFilePath = FilePath(os.path.join(config.ConfigRoot, "caldavd.plist"))
- configFilePath.setContent(newConfig)
-
- self.configFileName = configFilePath.path
- config.load(self.configFileName)
-
- origUsersFile = FilePath(__file__).sibling(
- "deprovision").child("users-groups.xml")
- copyUsersFile = FilePath(config.DataRoot).child("accounts.xml")
- origUsersFile.copyTo(copyUsersFile)
-
- origResourcesFile = FilePath(__file__).sibling(
- "deprovision").child("resources-locations.xml")
- copyResourcesFile = FilePath(config.DataRoot).child("resources.xml")
- origResourcesFile.copyTo(copyResourcesFile)
-
- origAugmentFile = FilePath(__file__).sibling(
- "deprovision").child("augments.xml")
- copyAugmentFile = FilePath(config.DataRoot).child("augments.xml")
- origAugmentFile.copyTo(copyAugmentFile)
-
- # TODO: when rewriting for new-store, getRootResource needs a parent
- # service argument now, to know when to start/stop the connection pool.
- self.rootResource = getRootResource(config)
- self.directory = self.rootResource.getDirectory()
-
- # Make sure trial puts the reactor in the right state, by letting it
- # run one reactor iteration. (Ignore me, please.)
- d = Deferred()
- reactor.callLater(0, d.callback, True)
- return d
-
- @inlineCallbacks
- def runCommand(self, command, error=False):
- """
- Run the given command by feeding it as standard input to
- calendarserver_deprovision in a subprocess.
- """
- sourceRoot = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
- python = os.path.join(sourceRoot, "python")
- script = os.path.join(sourceRoot, "bin", "calendarserver_purge_guid")
-
- args = [python, script, "-f", self.configFileName]
- if error:
- args.append("--error")
-
- cwd = sourceRoot
-
- deferred = Deferred()
- reactor.spawnProcess(CapturingProcessProtocol(deferred, command), python, args, env=os.environ, path=cwd)
- output = yield deferred
- try:
- plist = readPlistFromString(output)
- except xml.parsers.expat.ExpatError, e:
- print "Error (%s) parsing (%s)" % (e, output)
- raise
-
- returnValue(plist)
-
-
- @inlineCallbacks
- def test_purgeProxies(self):
-
- # Set up fake user
- purging = "5D6ABA3C-3446-4340-8083-7E37C5BC0B26"
- record = DirectoryRecord(self.directory, "users", purging,
- shortNames=(purging,), enabledForCalendaring=True)
- record.enabled = True # Enabling might not be required here
- self.directory._tmpRecords["shortNames"][purging] = record
- self.directory._tmpRecords["guids"][purging] = record
- pc = self.directory.principalCollection
- purgingPrincipal = pc.principalForRecord(record)
-
- keeping = "291C2C29-B663-4342-8EA1-A055E6A04D65"
- keepingPrincipal = pc.principalForUID(keeping)
-
- def getProxies(principal, proxyType):
- subPrincipal = principal.getChild("calendar-proxy-" + proxyType)
- return subPrincipal.readProperty(davxml.GroupMemberSet, None)
-
- # Add purgingPrincipal as a proxy for keepingPrincipal
- (yield addProxy(keepingPrincipal, "write", purgingPrincipal))
-
- # Add keepingPrincipal as a proxy for purgingPrincipal
- (yield addProxy(purgingPrincipal, "write", keepingPrincipal))
-
- # Verify the proxy assignments
- membersProperty = (yield getProxies(keepingPrincipal, "write"))
- self.assertEquals(len(membersProperty.children), 1)
- self.assertEquals(membersProperty.children[0],
- "/principals/__uids__/5D6ABA3C-3446-4340-8083-7E37C5BC0B26/")
- membersProperty = (yield getProxies(keepingPrincipal, "read"))
- self.assertEquals(len(membersProperty.children), 0)
-
- membersProperty = (yield getProxies(purgingPrincipal, "write"))
- self.assertEquals(len(membersProperty.children), 1)
- self.assertEquals(membersProperty.children[0],
- "/principals/__uids__/291C2C29-B663-4342-8EA1-A055E6A04D65/")
- membersProperty = (yield getProxies(purgingPrincipal, "read"))
- self.assertEquals(len(membersProperty.children), 0)
-
- # Purging the guid should clear out proxy assignments
-
- assignments = (yield purgeProxyAssignments(purgingPrincipal))
- self.assertTrue(("5D6ABA3C-3446-4340-8083-7E37C5BC0B26", "write", "291C2C29-B663-4342-8EA1-A055E6A04D65") in assignments)
- self.assertTrue(("291C2C29-B663-4342-8EA1-A055E6A04D65", "write", "5D6ABA3C-3446-4340-8083-7E37C5BC0B26") in assignments)
-
- membersProperty = (yield getProxies(keepingPrincipal, "write"))
- self.assertEquals(len(membersProperty.children), 0)
- membersProperty = (yield getProxies(purgingPrincipal, "write"))
- self.assertEquals(len(membersProperty.children), 0)
-
- @inlineCallbacks
- def test_purgeExistingGUID(self):
-
- # Deprovisioned user is E9E78C86-4829-4520-A35D-70DDADAB2092
- # Keeper user is 291C2C29-B663-4342-8EA1-A055E6A04D65
-
- before = {
- "calendars" : {
- "__uids__" : {
- "E9" : {
- "E7" : {
- "E9E78C86-4829-4520-A35D-70DDADAB2092" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "noninvite.ics": {
- "@contents" : NON_INVITE_ICS,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS,
- },
- },
- },
- },
- },
- "29" : {
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS,
- },
- },
- },
- },
- },
- },
- },
- }
- self.createHierarchy(before, config.DocumentRoot)
- count, assignments = (yield purgeGUID(
- "E9E78C86-4829-4520-A35D-70DDADAB2092",
- self.directory, self.rootResource))
-
- self.assertEquals(count, 2)
-
- after = {
- "__uids__" : {
- "E9" : {
- "E7" : {
- "E9E78C86-4829-4520-A35D-70DDADAB2092" : {
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "noninvite.ics": {
- "@contents" : NON_INVITE_ICS,
- },
- },
- },
- },
- },
- "29" : {
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "inbox": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "*.ics/UID:7ED97931-9A19-4596-9D4D-52B36D6AB803": {
- "@contents" : (
- "METHOD:CANCEL",
- ),
- },
- "*.ics/UID:1974603C-B2C0-4623-92A0-2436DEAB07EF": {
- "@contents" : (
- "METHOD:REPLY",
- "ATTENDEE;CN=Deprovisioned User;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED:urn:uui\r\n d:E9E78C86-4829-4520-A35D-70DDADAB2092",
- ),
- },
- },
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "organizer.ics": {
- "@contents" : (
- "STATUS:CANCELLED",
- ),
- },
- "attendee.ics": {
- "@contents" : (
- "ATTENDEE;CN=Deprovisioned User;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED;SCHEDUL\r\n E-STATUS=2.0:urn:uuid:E9E78C86-4829-4520-A35D-70DDADAB2092",
- ),
- },
- },
- },
- },
- },
- },
- }
- self.assertTrue(self.verifyHierarchy(
- os.path.join(config.DocumentRoot, "calendars"),
- after)
- )
-
-
- @inlineCallbacks
- def test_purgeNonExistentGUID(self):
-
- before = {
- "calendars" : {
- "__uids__" : {
- "1C" : {
- "B4" : {
- "1CB4378B-DD76-462D-B4D4-BD131FE89243" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- # non-repeating, non-invite, in the past
- # = untouched
- "noninvite_past.ics": {
- "@contents" : NON_INVITE_PAST_ICS,
- },
- # non-repeating, non-invite, in the future
- # = removed
- "noninvite_future.ics": {
- "@contents" : NON_INVITE_FUTURE_ICS,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_2,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_2,
- },
- "repeating_organizer.ics": {
- "@contents" : REPEATING_ORGANIZER_ICS,
- },
- },
- },
- },
- },
- "29" : {
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_2,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_2,
- },
- "repeating_organizer.ics": {
- "@contents" : REPEATING_ORGANIZER_ICS,
- },
- },
- },
- },
- },
- },
- },
- }
- self.createHierarchy(before, config.DocumentRoot)
- count, assignments = (yield purgeGUID(
- "1CB4378B-DD76-462D-B4D4-BD131FE89243",
- self.directory, self.rootResource))
-
- self.assertEquals(count, 4)
-
- after = {
- "__uids__" : {
- "1C" : {
- "B4" : {
- "1CB4378B-DD76-462D-B4D4-BD131FE89243" : {
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "noninvite_past.ics": {
- "@contents" : NON_INVITE_PAST_ICS,
- },
- },
- },
- },
- },
- "29" : {
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "inbox": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "*.ics/UID:7ED97931-9A19-4596-9D4D-52B36D6AB803": {
- "@contents" : (
- "METHOD:CANCEL",
- ),
- },
- "*.ics/UID:1974603C-B2C0-4623-92A0-2436DEAB07EF": {
- "@contents" : (
- "METHOD:REPLY",
- "ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED:urn:uuid:1CB4378B-DD76-462D-B\r\n 4D4-BD131FE89243",
- ),
- },
- "*.ics/UID:8ED97931-9A19-4596-9D4D-52B36D6AB803": {
- "@contents" : (
- "METHOD:CANCEL",
- ),
- },
- },
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "organizer.ics": {
- "@contents" : (
- "STATUS:CANCELLED",
- ),
- },
- "attendee.ics": {
- "@contents" : (
- "ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0:urn:uuid:\r\n 1CB4378B-DD76-462D-B4D4-BD131FE89243",
- ),
- },
- "repeating_organizer.ics": {
- "@contents" : (
- "STATUS:CANCELLED",
- ),
- },
- },
- },
- },
- },
- },
- }
- self.assertTrue(self.verifyHierarchy(
- os.path.join(config.DocumentRoot, "calendars"),
- after)
- )
-
-
-
- @inlineCallbacks
- def test_purgeMultipleNonExistentGUIDs(self):
-
- before = {
- "calendars" : {
- "__uids__" : {
- "76" : { # Non-existent
- "7F" : {
- "767F9EB0-8A58-4F61-8163-4BE0BB72B873" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "noninvite.ics": {
- "@contents" : NON_INVITE_ICS_3,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_3,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_3,
- },
- "attendee2.ics": {
- "@contents" : ATTENDEE_ICS_4,
- },
- },
- },
- },
- },
- "42" : { # Non-existent
- "EB" : {
- "42EB074A-F859-4E8F-A4D0-7F0ADCB73D87" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_3,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_3,
- },
- "attendee2.ics": {
- "@contents" : ATTENDEE_ICS_4,
- },
- },
- },
- },
- },
- "29" : { # Existing
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_3,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_3,
- },
- "attendee2.ics": {
- "@contents" : ATTENDEE_ICS_4,
- },
- },
- },
- },
- },
- },
- },
- }
- self.createHierarchy(before, config.DocumentRoot)
- count, assignments = (yield purgeGUID(
- "767F9EB0-8A58-4F61-8163-4BE0BB72B873",
- self.directory, self.rootResource))
-
- self.assertEquals(count, 3)
-
- after = {
- "__uids__" : {
- "76" : { # Non-existent
- "7F" : {
- "767F9EB0-8A58-4F61-8163-4BE0BB72B873" : {
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "noninvite.ics": { # event in the past
- "@contents" : NON_INVITE_ICS_3,
- },
- },
- },
- },
- },
- "42" : { # Non-existent -- untouched
- "EB" : {
- "42EB074A-F859-4E8F-A4D0-7F0ADCB73D87" : {
- "calendar": {
- "@xattrs" :
- {
- resourceAttr : collectionType,
- },
- "organizer.ics": {
- "@contents" : ORGANIZER_ICS_3,
- },
- "attendee.ics": {
- "@contents" : ATTENDEE_ICS_3,
- },
- "attendee2.ics": {
- "@contents" : ATTENDEE_ICS_4,
- },
- },
- },
- },
- },
- "29" : {
- "1C" : {
- "291C2C29-B663-4342-8EA1-A055E6A04D65" : {
- "inbox": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "*.ics/UID:7ED97931-9A19-4596-9D4D-52B36D6AB803": {
- "@contents" : (
- "METHOD:CANCEL",
- ),
- },
- "*.ics/UID:79F26B10-6ECE-465E-9478-53F2A9FCAFEE": {
- "@contents" : (
- "METHOD:REPLY",
- "ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED:urn:uuid:767F9EB0-8A58-4F61-8\r\n 163-4BE0BB72B873",
- ),
- },
- },
- "calendar": {
- ".db.sqlite": {
- "@contents" : None, # ignore contents
- },
- ".db.sqlite-journal": {
- "@optional" : None, # not in old sqlite
- "@contents" : None, # ignore contents
- },
- "organizer.ics": {
- # Purging non-existent organizer; has non-existent
- # and existent attendees
- "@contents" : (
- "STATUS:CANCELLED",
- ),
- },
- "attendee.ics": {
- # (Note: implicit scheduler doesn't update this)
- # Purging non-existent attendee; has non-existent
- # organizer and existent attendee
- "@contents" : ATTENDEE_ICS_3,
- },
- "attendee2.ics": {
- # Purging non-existent attendee; has non-existent
- # attendee and existent organizer
- "@contents" : (
- "ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=DECLINED;SCHEDULE-STATUS=2.0:urn:uuid:\r\n 767F9EB0-8A58-4F61-8163-4BE0BB72B873",
- )
- },
- },
- },
- },
- },
- },
- }
- self.assertTrue(self.verifyHierarchy(
- os.path.join(config.DocumentRoot, "calendars"),
- after)
- )
-
-
future = (datetime.utcnow() + timedelta(days=1)).strftime("%Y%m%dT%H%M%SZ")
past = (datetime.utcnow() - timedelta(days=1)).strftime("%Y%m%dT%H%M%SZ")
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge_old_events.py (from rev 7192, CalendarServer/trunk/calendarserver/tools/test/test_purge_old_events.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge_old_events.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_purge_old_events.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,576 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 calendarserver.tools.purge
+"""
+
+from twisted.trial import unittest
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twext.web2.http_headers import MimeType
+from twistedcaldav.vcard import Component as VCardComponent
+
+
+
+from txdav.common.datastore.test.util import buildStore, populateCalendarsFrom, CommonCommonTests
+
+from calendarserver.tap.util import getRootResource
+from calendarserver.tools.purge import purgeOldEvents, purgeGUID, purgeOrphanedAttachments
+from twistedcaldav.config import config
+from twistedcaldav.memcacher import Memcacher
+from vobject.icalendar import utc
+
+import datetime
+import os
+
+
+
+OLD_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
+DTEND;TZID=US/Pacific:20000307T151500
+TRANSP:OPAQUE
+SUMMARY:Ancient event
+DTSTART;TZID=US/Pacific:20000307T111500
+DTSTAMP:20100303T181220Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+OLD_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
+TRANSP:OPAQUE
+SUMMARY:Ancient event with attachment
+DTSTART;TZID=US/Pacific:20000308T111500
+DTEND;TZID=US/Pacific:20000308T151500
+DTSTAMP:20100303T181220Z
+X-APPLE-DROPBOX:/calendars/__uids__/user01/dropbox/57A5D1F6-9A57-4F74-95
+ 20-25C617F54B88.dropbox
+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
+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:20100303T194654Z
+UID:9FDE0E4C-1495-4CAF-863B-F7F0FB15FE8C
+DTEND;TZID=US/Pacific:20000308T151500
+RRULE:FREQ=YEARLY;INTERVAL=1
+TRANSP:OPAQUE
+SUMMARY:Ancient Repeating Endless
+DTSTART;TZID=US/Pacific:20000308T111500
+DTSTAMP:20100303T194710Z
+SEQUENCE:4
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+REPEATING_AWHILE_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:20100303T194716Z
+UID:76236B32-2BC4-4D78-956B-8D42D4086200
+DTEND;TZID=US/Pacific:20000309T151500
+RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=3
+TRANSP:OPAQUE
+SUMMARY:Ancient Repeat Awhile
+DTSTART;TZID=US/Pacific:20000309T111500
+DTSTAMP:20100303T194747Z
+SEQUENCE:6
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+STRADDLING_ICS = """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
+CREATED:20100303T213643Z
+UID:1C219DAD-D374-4822-8C98-ADBA85E253AB
+DTEND;TZID=US/Pacific:20090508T121500
+RRULE:FREQ=MONTHLY;INTERVAL=1;UNTIL=20100509T065959Z
+TRANSP:OPAQUE
+SUMMARY:Straddling cut-off
+DTSTART;TZID=US/Pacific:20090508T111500
+DTSTAMP:20100303T213704Z
+SEQUENCE:5
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+RECENT_ICS = """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
+CREATED:20100303T195159Z
+UID:F2F14D94-B944-43D9-8F6F-97F95B2764CA
+DTEND;TZID=US/Pacific:20100304T141500
+TRANSP:OPAQUE
+SUMMARY:Recent
+DTSTART;TZID=US/Pacific:20100304T120000
+DTSTAMP:20100303T195203Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+""".replace("\n", "\r\n")
+
+
+VCARD_1 = """BEGIN:VCARD
+VERSION:3.0
+N:User;Test
+FN:Test User
+EMAIL;type=INTERNET;PREF:testuser at example.com
+UID:12345-67890-1.1
+END:VCARD
+""".replace("\n", "\r\n")
+
+
+class PurgeOldEventsTests(CommonCommonTests, unittest.TestCase):
+ """
+ Tests for deleting events older than a given date
+ """
+
+ metadata = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+
+ requirements = {
+ "home1" : {
+ "calendar1" : {
+ "old.ics" : (OLD_ICS, metadata,),
+ "endless.ics" : (ENDLESS_ICS, metadata,),
+ "oldattachment.ics" : (OLD_ATTACHMENT_ICS, metadata,),
+ }
+ },
+ "home2" : {
+ "calendar2" : {
+ "straddling.ics" : (STRADDLING_ICS, metadata,),
+ "recent.ics" : (RECENT_ICS, metadata,),
+ },
+ "calendar3" : {
+ "repeating_awhile.ics" : (REPEATING_AWHILE_ICS, metadata,),
+ }
+ }
+ }
+
+ @inlineCallbacks
+ def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(Memcacher, "allowTestCache", True)
+ yield super(PurgeOldEventsTests, 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__), "purge", "accounts.xml"
+ )
+ )
+ self.patch(config.ResourceService.params, "xmlFile",
+ os.path.join(
+ os.path.dirname(__file__), "purge", "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()
+
+
+ def storeUnderTest(self):
+ """
+ Create and return a L{CalendarStore} for testing.
+ """
+ return self._sqlCalendarStore
+
+
+ @inlineCallbacks
+ def test_eventsOlderThan(self):
+ cutoff = datetime.datetime(2010, 4, 1)
+ txn = self._sqlCalendarStore.newTransaction()
+
+ # Query for all old events
+ results = (yield txn.eventsOlderThan(cutoff))
+ self.assertEquals(results,
+ [
+ ['home1', 'calendar1', 'old.ics', '2000-03-07 23:15:00'],
+ ['home1', 'calendar1', 'oldattachment.ics', '2000-03-08 23:15:00'],
+ ['home2', 'calendar3', 'repeating_awhile.ics', '2002-03-09 23:15:00'],
+ ['home2', 'calendar2', 'recent.ics', '2010-03-04 22:15:00'],
+ ]
+ )
+
+ # Query for oldest event
+ results = (yield txn.eventsOlderThan(cutoff, batchSize=1))
+ self.assertEquals(results,
+ [
+ ['home1', 'calendar1', 'old.ics', '2000-03-07 23:15:00'],
+ ]
+ )
+
+ test_eventsOlderThan.todo = "New lazy indexing broke this"
+
+ @inlineCallbacks
+ def test_removeOldEvents(self):
+ cutoff = datetime.datetime(2010, 4, 1)
+ txn = self._sqlCalendarStore.newTransaction()
+
+ # Remove oldest event
+ count = (yield txn.removeOldEvents(cutoff, batchSize=1))
+ self.assertEquals(count, 1)
+ results = (yield txn.eventsOlderThan(cutoff))
+ self.assertEquals(results,
+ [
+ ['home1', 'calendar1', 'oldattachment.ics', '2000-03-08 23:15:00'],
+ ['home2', 'calendar3', 'repeating_awhile.ics', '2002-03-09 23:15:00'],
+ ['home2', 'calendar2', 'recent.ics', '2010-03-04 22:15:00'],
+ ]
+ )
+
+ # Remove remaining oldest events
+ count = (yield txn.removeOldEvents(cutoff))
+ self.assertEquals(count, 3)
+ results = (yield txn.eventsOlderThan(cutoff))
+ self.assertEquals(results, [ ])
+
+ # Remove oldest events (none left)
+ count = (yield txn.removeOldEvents(cutoff))
+ self.assertEquals(count, 0)
+
+ test_removeOldEvents.todo = "New lazy indexing broke this"
+
+
+ @inlineCallbacks
+ def _addAttachment(self):
+
+ 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"))
+ t = attachment.store(MimeType("text", "x-fixture"))
+ t.write("old attachment")
+ t.write(" text")
+ (yield t.loseConnection())
+ (yield txn.commit())
+
+ returnValue(attachment)
+
+ @inlineCallbacks
+ def test_removeOrphanedAttachments(self):
+ attachment = (yield self._addAttachment())
+ txn = self._sqlCalendarStore.newTransaction()
+ attachmentPath = attachment._path.path
+ self.assertTrue(os.path.exists(attachmentPath))
+
+ orphans = (yield txn.orphanedAttachments())
+ self.assertEquals(len(orphans), 0)
+
+ count = (yield txn.removeOrphanedAttachments(batchSize=100))
+ self.assertEquals(count, 0)
+
+ # File still exists
+ self.assertTrue(os.path.exists(attachmentPath))
+
+ # Delete all old events (including the event containing the attachment)
+ cutoff = datetime.datetime(2010, 4, 1)
+ count = (yield txn.removeOldEvents(cutoff))
+
+ # Just look for orphaned attachments but don't delete
+ orphans = (yield txn.orphanedAttachments())
+ self.assertEquals(len(orphans), 1)
+
+ # Remove orphaned attachments, should be 1
+ count = (yield txn.removeOrphanedAttachments(batchSize=100))
+ self.assertEquals(count, 1)
+
+ # Remove orphaned attachments, shouldn't be any
+ count = (yield txn.removeOrphanedAttachments())
+ self.assertEquals(count, 0)
+
+ # File isn't actually removed until after commit
+ (yield txn.commit())
+
+ # Verify the file itself is gone
+ self.assertFalse(os.path.exists(attachmentPath))
+
+ @inlineCallbacks
+ def test_purgeOldEvents(self):
+
+ # Dry run
+ total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
+ self.rootResource, datetime.datetime(2010, 4, 1), 2, dryrun=True,
+ verbose=False))
+ self.assertEquals(total, 4)
+
+ # Actually remove
+ total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
+ self.rootResource, datetime.datetime(2010, 4, 1), 2, verbose=False))
+ self.assertEquals(total, 4)
+
+ # There should be no more left
+ total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
+ self.rootResource, datetime.datetime(2010, 4, 1), 2, verbose=False))
+ self.assertEquals(total, 0)
+
+ test_purgeOldEvents.todo = "New lazy indexing broke this"
+
+ @inlineCallbacks
+ def test_purgeGUID(self):
+ txn = self._sqlCalendarStore.newTransaction()
+
+ # Create an addressbook and one CardDAV resource
+ abHome = (yield txn.addressbookHomeWithUID("home1", create=True))
+ abColl = (yield abHome.addressbookWithName("addressbook"))
+ (yield abColl.createAddressBookObjectWithName("card1",
+ VCardComponent.fromString(VCARD_1)))
+ self.assertEquals(len( (yield abColl.addressbookObjects()) ), 1)
+
+ # Verify there are 3 events in calendar1
+ calHome = (yield txn.calendarHomeWithUID("home1"))
+ calColl = (yield calHome.calendarWithName("calendar1"))
+ self.assertEquals(len( (yield calColl.calendarObjects()) ), 3)
+
+ # Make the newly created objects available to the purgeGUID transaction
+ (yield txn.commit())
+
+ # Purge home1
+ total, ignored = (yield purgeGUID("home1", self.directory,
+ self.rootResource, verbose=False, proxies=False,
+ when=datetime.datetime(2010, 4, 1, 12, 0, 0, 0, utc)))
+
+ # 2 items deleted: 1 event and 1 vcard
+ self.assertEquals(total, 2)
+
+ txn = self._sqlCalendarStore.newTransaction()
+ abHome = (yield txn.addressbookHomeWithUID("home1"))
+ abColl = (yield abHome.addressbookWithName("addressbook"))
+ self.assertEquals(abColl, None)
+
+
+ @inlineCallbacks
+ def test_purgeOrphanedAttachments(self):
+
+ (yield self._addAttachment())
+
+ # Remove old events first
+ total = (yield purgeOldEvents(self._sqlCalendarStore, self.directory,
+ self.rootResource, datetime.datetime(2010, 4, 1), 2, verbose=False))
+ self.assertEquals(total, 4)
+
+ # Dry run
+ total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
+ dryrun=True, verbose=False))
+ self.assertEquals(total, 1)
+
+ # Actually remove
+ total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
+ dryrun=False, verbose=False))
+ self.assertEquals(total, 1)
+
+ # There should be no more left
+ total = (yield purgeOrphanedAttachments(self._sqlCalendarStore, 2,
+ dryrun=False, verbose=False))
+ self.assertEquals(total, 0)
+
+ test_purgeOrphanedAttachments.todo = "New lazy indexing broke this"
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_resources.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_resources.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/test/test_resources.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,13 +19,17 @@
from twistedcaldav.directory import augment
from twistedcaldav.directory.directory import DirectoryService
from twistedcaldav.test.util import TestCase
-import dsattributes
-strGUID = dsattributes.kDS1AttrGeneratedUID
-strName = dsattributes.kDS1AttrDistinguishedName
+try:
+ import dsattributes
+ strGUID = dsattributes.kDS1AttrGeneratedUID
+ strName = dsattributes.kDS1AttrDistinguishedName
+except ImportError:
+ dsattributes = None
+
class StubDirectoryRecord(object):
def __init__(self, recordType, guid=None, shortNames=None, fullName=None):
@@ -83,6 +87,9 @@
class MigrateResourcesTestCase(TestCase):
+ if dsattributes is None:
+ skip = "dsattributes module not available"
+
@inlineCallbacks
def test_migrateResources(self):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/tools/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -157,7 +157,7 @@
root.putChild("principals", principalCollection)
# Need a data store
- _newStore = CommonDataStore(FilePath(config.DocumentRoot), True, False)
+ _newStore = CommonDataStore(FilePath(config.DocumentRoot), None, True, False)
from twistedcaldav.directory.calendar import DirectoryCalendarHomeProvisioningResource
calendarCollection = DirectoryCalendarHomeProvisioningResource(
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/webcal/resource.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/webcal/resource.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/calendarserver/webcal/resource.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -38,7 +38,9 @@
from twistedcaldav.config import config
from twistedcaldav.extensions import DAVFile, ReadOnlyResourceMixIn
+
class WebCalendarResource (ReadOnlyResourceMixIn, DAVFile):
+
def defaultAccessControlList(self):
return davxml.ACL(
davxml.ACE(
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-apple.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-apple.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-apple.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2011 Apple Inc. All 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,14 +133,24 @@
Quotas and limits
-->
- <!-- User quota (in bytes) [0 = no quota] -->
+ <!-- User quota (in bytes) [0 = no quota] applies to attachments only -->
<key>UserQuota</key>
<integer>104857600</integer><!-- 100Mb -->
- <!-- Attachment size limit (in bytes) -->
- <key>MaximumAttachmentSize</key>
- <integer>1048576</integer><!-- 1Mb -->
+ <!-- Maximum number of calendars/address books allowed in a home -->
+ <!-- 0 for no limit -->
+ <key>MaxCollectionsPerHome</key>
+ <integer>50</integer>
+ <!-- Maximum number of resources in a calendar/address book -->
+ <!-- 0 for no limit -->
+ <key>MaxResourcesPerCollection</key>
+ <integer>10000</integer>
+
+ <!-- Maximum resource size (in bytes) -->
+ <key>MaxResourceSize</key>
+ <integer>1048576</integer> <!-- 1Mb -->
+
<!-- Maximum number of unique attendees per entire event -->
<!-- 0 for no limit -->
<key>MaxAttendeesPerInstance</key>
@@ -187,7 +197,7 @@
<key>node</key>
<string>/Search</string>
<key>cacheTimeout</key>
- <integer>30</integer>
+ <integer>1</integer>
</dict>
</dict>
@@ -520,19 +530,26 @@
<key>EnableWebAdmin</key>
<true/>
+ <!-- On OS X use wiki authentication dialogs for webcal -->
+ <key>WebCalendarAuthPath</key>
+ <string>/auth</string>
+
<!-- Directory searching -->
<key>DirectoryAddressBook</key>
<dict>
<key>params</key>
<dict>
<key>queryUserRecords</key>
- <true/>
+ <false/>
<key>queryPeopleRecords</key>
- <true/>
+ <false/>
</dict>
</dict>
<key>EnableSearchAddressBook</key>
- <true/>
+ <false/>
+ <key>OpenDirectoryModule</key>
+ <string>calendarserver.platform.darwin.od.opendirectory</string>
+
</dict>
</plist>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-test.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-test.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd-test.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2011 Apple Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -131,14 +131,24 @@
Quotas and limits
-->
- <!-- User quota (in bytes) [0 = no quota] -->
+ <!-- User quota (in bytes) [0 = no quota] applies to attachments only -->
<key>UserQuota</key>
<integer>104857600</integer><!-- 100Mb -->
- <!-- Attachment size limit (in bytes) -->
- <key>MaximumAttachmentSize</key>
- <integer>1048576</integer><!-- 1Mb -->
+ <!-- Maximum number of calendars/address books allowed in a home -->
+ <!-- 0 for no limit -->
+ <key>MaxCollectionsPerHome</key>
+ <integer>50</integer>
+ <!-- Maximum number of resources in a calendar/address book -->
+ <!-- 0 for no limit -->
+ <key>MaxResourcesPerCollection</key>
+ <integer>10000</integer>
+
+ <!-- Maximum resource size (in bytes) -->
+ <key>MaxResourceSize</key>
+ <integer>1048576</integer> <!-- 1Mb -->
+
<!-- Maximum number of unique attendees per entire event -->
<!-- 0 for no limit -->
<key>MaxAttendeesPerInstance</key>
@@ -184,7 +194,98 @@
<key>node</key>
<string>/Search</string>
<key>cacheTimeout</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ -->
+
+ <!-- OpenLDAP Directory Service -->
+ <!--
+ <key>DirectoryService</key>
+ <dict>
+ <key>type</key>
+ <string>twistedcaldav.directory.ldapdirectory.LdapDirectoryService</string>
+
+ <key>params</key>
+ <dict>
+ <key>restrictEnabledRecords</key>
+ <false/>
+ <key>restrictToGroup</key>
+ <string>odtestgrouptop</string>
+ <key>cacheTimeout</key>
<integer>30</integer>
+ <key>uri</key>
+ <string>ldap://example.com/</string>
+ <key>tls</key>
+ <false/>
+ <key>tlsCACertFile</key>
+ <string></string>
+ <key>tlsCACertDir</key>
+ <string></string>
+ <key>tlsRequireCert</key>
+ <string>never</string>
+ <key>credentials</key>
+ <dict>
+ <key>dn</key>
+ <string></string>
+ <key>password</key>
+ <string></string>
+ </dict>
+ <key>authMethod</key>
+ <string>LDAP</string>
+ <key>rdnSchema</key>
+ <dict>
+ <key>base</key>
+ <string>dc=example,dc=com</string>
+ <key>guidAttr</key>
+ <string>apple-generateduid</string>
+ <key>users</key>
+ <dict>
+ <key>rdn</key>
+ <string>cn=users</string>
+ <key>attr</key>
+ <string>uid</string>
+ <key>emailSuffix</key>
+ <string></string>
+ <key>filter</key>
+ <string></string>
+ <key>recordName</key>
+ <string>uid</string>
+ </dict>
+ <key>groups</key>
+ <dict>
+ <key>rdn</key>
+ <string>cn=groups</string>
+ <key>attr</key>
+ <string>cn</string>
+ <key>emailSuffix</key>
+ <string></string>
+ <key>filter</key>
+ <string></string>
+ <key>recordName</key>
+ <string>cn</string>
+ </dict>
+ <key>attributeMapping</key>
+ <dict>
+ <key>fullName</key>
+ <string>cn</string>
+ <key>emailAddresses</key>
+ <string>mail</string>
+ <key>firstName</key>
+ <string>givenName</string>
+ <key>lastName</key>
+ <string>sn</string>
+ </dict>
+ </dict>
+ <key>groupSchema</key>
+ <dict>
+ <key>membersAttr</key>
+ <string>apple-group-memberguid</string>
+ <key>nestedGroupsAttr</key>
+ <string>apple-group-nestedgroup</string>
+ <key>memberIdAttr</key>
+ <string>apple-generateduid</string>
+ </dict>
</dict>
</dict>
-->
@@ -765,6 +866,12 @@
</array>
</dict>
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
<!-- Support for Postgres -->
<key>Postgres</key>
<dict>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/conf/caldavd.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+ Copyright (c) 2006-2011 Apple Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -113,12 +113,22 @@
Quotas and limits
-->
- <!-- User quota (in bytes) [0 = no quota] -->
+ <!-- User quota (in bytes) [0 = no quota] applies to attachments only -->
<key>UserQuota</key>
<integer>104857600</integer> <!-- 100Mb -->
- <!-- Attachment size limit (in bytes) -->
- <key>MaximumAttachmentSize</key>
+ <!-- Maximum number of calendars/address books allowed in a home -->
+ <!-- 0 for no limit -->
+ <key>MaxCollectionsPerHome</key>
+ <integer>50</integer>
+
+ <!-- Maximum number of resources in a calendar/address book -->
+ <!-- 0 for no limit -->
+ <key>MaxResourcesPerCollection</key>
+ <integer>10000</integer>
+
+ <!-- Maximum resource size (in bytes) -->
+ <key>MaxResourceSize</key>
<integer>1048576</integer> <!-- 1Mb -->
<!-- Maximum number of unique attendees per entire event -->
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/conf/resources/caldavd-resources.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/conf/resources/caldavd-resources.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/conf/resources/caldavd-resources.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -718,7 +718,13 @@
</array>
</dict>
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
<!--
Twisted
-->
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/create_caldavd_db.sh
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/create_caldavd_db.sh 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/create_caldavd_db.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,12 +1,5 @@
#!/bin/bash
-echo Creating caldav database user
-/usr/bin/createuser --username=_postgres caldav --no-superuser --createdb --no-createrole || exit 1
+/usr/sbin/calendarserver_bootstrap_database
-echo Creating caldav database
-/usr/bin/createdb --username=caldav caldav || exit 2
-
-echo Initializing caldav schema
-/usr/bin/psql -U caldav -f /usr/share/caldavd/lib/python/txdav/common/datastore/sql_schema_v1.sql || exit 3
-
exit 0
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/calendarmigrator.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/calendarmigrator.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/calendarmigrator.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -26,6 +26,7 @@
import os
import pwd
import shutil
+import subprocess
import sys
from plistlib import readPlist, writePlist
@@ -42,6 +43,8 @@
CARDDAVD_PLIST = "carddavd.plist"
NEW_SERVER_ROOT = "/Library/Server/Calendar and Contacts"
RESOURCE_MIGRATION_TRIGGER = "trigger_resource_migration"
+SERVER_ADMIN = "/usr/sbin/serveradmin"
+LAUNCHCTL = "/bin/launchctl"
verbatimKeys = """
@@ -110,7 +113,6 @@
ProxyDBService
ProxyLoadFromFile
ReadPrincipals
-RedirectHTTPToHTTPS
RejectClients
ResourceService
ResponseCompression
@@ -149,6 +151,8 @@
ErrorLogFile
MaxAddressBookMultigetHrefs
MaxAddressBookQueryResults
+RedirectHTTPToHTTPS
+SSLPort
""".split()
ignoredKkeys = """
@@ -160,7 +164,6 @@
PythonDirector
ResponseCacheTimeout
SSLPassPhraseDialog
-SSLPort
ServerStatsFile
Verbose
""".split()
@@ -201,10 +204,19 @@
if options.sourceRoot:
if os.path.exists(options.sourceRoot):
+
+ # If calendar service was running on previous system
+ # turn it off while we process configuration. There
+ # is no need to turn off addressbook because it no longer
+ # has its own launchd plist.
+ enableCalDAV, enableCardDAV = examineRunState(options)
+ if enableCalDAV:
+ unloadService(options, CALDAV_LAUNCHD_KEY)
+
newServerRootValue = migrateData(options)
- enableCalDAV, enableCardDAV = examineRunState(options)
migrateConfiguration(options, newServerRootValue, enableCalDAV,
enableCardDAV)
+
setRunState(options, enableCalDAV, enableCardDAV)
triggerResourceMigration(newServerRootValue)
@@ -248,16 +260,26 @@
def setRunState(options, enableCalDAV, enableCardDAV):
"""
- Modify the launchd settings in the new system.
+ Use serveradmin to launch the service if needed.
"""
- # Lion has no separate addressbook service, so just worry about caldav:
if enableCalDAV or enableCardDAV:
- setServiceStateDisabled(options.targetRoot, CALDAV_LAUNCHD_KEY, False)
- else:
- setServiceStateDisabled(options.targetRoot, CALDAV_LAUNCHD_KEY, True)
+ log("Starting service via serveradmin")
+ ret = subprocess.call([SERVER_ADMIN, "start", "calendar"])
+ log("serveradmin exited with %d" % (ret,))
+def unloadService(options, service):
+ """
+ Use launchctl to unload a service
+ """
+ path = os.path.join(options.targetRoot, LAUNCHD_PREFS_DIR,
+ "%s.plist" % (service,))
+ log("Unloading %s via launchctl" % (path,))
+ ret = subprocess.call([LAUNCHCTL, "unload", "-w", path])
+ log("launchctl exited with %d" % (ret,))
+
+
def triggerResourceMigration(newServerRootValue):
"""
Leave a file in the server root to act as a signal that the server
@@ -361,29 +383,70 @@
writePlist(newCalDAVDPlist, newCalDAVDPlistPath)
-def mergePlist(oldCalDAVDPlist, oldCardDAVDPlist, newCalDAVDPlist):
+def mergePlist(caldav, carddav, combined):
# These keys are copied verbatim:
for key in verbatimKeys:
- if key in oldCardDAVDPlist:
- newCalDAVDPlist[key] = oldCardDAVDPlist[key]
- if key in oldCalDAVDPlist:
- newCalDAVDPlist[key] = oldCalDAVDPlist[key]
+ if key in carddav:
+ combined[key] = carddav[key]
+ if key in caldav:
+ combined[key] = caldav[key]
# "Wiki" is a new authentication in v2.x; copy all "Authentication" sub-keys # over, and "Wiki" will be picked up from the new plist:
- if "Authentication" in oldCalDAVDPlist:
- for key in oldCalDAVDPlist["Authentication"]:
- newCalDAVDPlist["Authentication"][key] = oldCalDAVDPlist["Authentication"][key]
+ if "Authentication" in caldav:
+ for key in caldav["Authentication"]:
+ combined["Authentication"][key] = caldav["Authentication"][key]
# Strip out any unknown params from the DirectoryService:
- if "DirectoryService" in oldCalDAVDPlist:
- newCalDAVDPlist["DirectoryService"] = oldCalDAVDPlist["DirectoryService"]
- for key in newCalDAVDPlist["DirectoryService"]["params"].keys():
+ if "DirectoryService" in caldav:
+ combined["DirectoryService"] = caldav["DirectoryService"]
+ for key in combined["DirectoryService"]["params"].keys():
if key not in ("node", "cacheTimeout", "xmlFile"):
- del newCalDAVDPlist["DirectoryService"]["params"][key]
+ del combined["DirectoryService"]["params"][key]
+ # Merge ports
+ if not caldav.get("HTTPPort", 0):
+ caldav["HTTPPort"] = 8008
+ if not carddav.get("HTTPPort", 0):
+ carddav["HTTPPort"] = 8800
+ if not caldav.get("SSLPort", 0):
+ caldav["SSLPort"] = 8443
+ if not carddav.get("SSLPort", 0):
+ carddav["SSLPort"] = 8843
+ for portType in ["HTTPPort", "SSLPort"]:
+ bindPorts = list(set(caldav.get("Bind%ss" % (portType,), [])).union(set(carddav.get("Bind%ss" % (portType,), []))))
+ for prev in (carddav, caldav):
+ port = prev.get(portType, 0)
+ if port and port not in bindPorts:
+ bindPorts.append(port)
+ bindPorts.sort()
+ combined["Bind%ss" % (portType,)] = bindPorts
+ combined["HTTPPort"] = caldav["HTTPPort"]
+ combined["SSLPort"] = caldav["SSLPort"]
+
+ # Was SSL enabled?
+ sslAuthorityChain = ""
+ sslCertificate = ""
+ sslPrivateKey = ""
+ enableSSL = False
+ for prev in (carddav, caldav):
+ if (prev["SSLPort"] and prev.get("SSLCertificate", "")):
+ sslAuthorityChain = prev.get("SSLAuthorityChain", "")
+ sslCertificate = prev.get("SSLCertificate", "")
+ sslPrivateKey = prev.get("SSLPrivateKey", "")
+ enableSSL = True
+
+ combined["SSLAuthorityChain"] = sslAuthorityChain
+ combined["SSLCertificate"] = sslCertificate
+ combined["SSLPrivateKey"] = sslPrivateKey
+ combined["EnableSSL"] = enableSSL
+
+ # If SSL is enabled, redirect HTTP to HTTPS.
+ combined["RedirectHTTPToHTTPS"] = enableSSL
+
+
def isServiceDisabled(source, service):
"""
Returns whether or not a service is disabled
@@ -413,7 +476,6 @@
raise ServiceStateError("Neither %s nor %s exist" %
(overridesPath, prefsPath))
-
def setServiceStateDisabled(target, service, disabled):
"""
Modifies launchd settings for a service
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py
===================================================================
--- CalendarServer/trunk/contrib/migration/test/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,20 +0,0 @@
-# -*- test-case-name: twistedcaldav.test -*-
-##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-##
-
-"""
-Tests for the twistedcaldav module.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py (from rev 7192, CalendarServer/trunk/contrib/migration/test/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,20 @@
+# -*- test-case-name: twistedcaldav.test -*-
+##
+# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+"""
+Tests for the twistedcaldav module.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py
===================================================================
--- CalendarServer/trunk/contrib/migration/test/test_migrator.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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 twistedcaldav.test.util
-from contrib.migration.calendarmigrator import mergePlist
-
-class MigrationTests(twistedcaldav.test.util.TestCase):
- """
- Calendar Server Migration Tests
- """
-
- def test_mergeSSL(self):
-
- # SSL on for both services
- oldCalDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8443,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- oldCardDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8800,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8843,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : True,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8443,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
- # SSL off for both services
- oldCalDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 0,
- "SSLPrivateKey": "",
- }
- oldCardDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8800,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 0,
- "SSLPrivateKey": "",
- }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : False,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 8443,
- "SSLPrivateKey": "",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
- # SSL on for only caldav
- oldCalDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8443,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- oldCardDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8800,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 0,
- "SSLPrivateKey": "",
- }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : True,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8443,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
- # SSL on for only carddav
- oldCalDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 0,
- "SSLPrivateKey": "",
- }
- oldCardDAV = {
- "BindHTTPPorts": [],
- "BindSSLPorts": [],
- "HTTPPort": 8800,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8843,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : True,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 8443,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
- # Non standard ports
- oldCalDAV = {
- "BindHTTPPorts": [1111, 2222],
- "BindSSLPorts": [3333],
- "HTTPPort": 8888,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 9999,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- oldCardDAV = {
- "BindHTTPPorts": [4444, 5555],
- "BindSSLPorts": [6666],
- "HTTPPort": 7777,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 11111,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- expected = {
- "BindHTTPPorts": [1111, 2222, 4444, 5555, 7777, 8888],
- "BindSSLPorts": [3333, 6666, 9999, 11111],
- "EnableSSL" : True,
- "HTTPPort": 8888,
- "RedirectHTTPToHTTPS": True,
- "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
- "SSLCertificate": "/etc/certificates/test.cert.pem",
- "SSLPort": 9999,
- "SSLPrivateKey": "/etc/certificates/test.key.pem",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
-
- # Never had SSL enabled, so missing SSLPort
- oldCalDAV = {
- "BindHTTPPorts": [],
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPrivateKey": "",
- }
- oldCardDAV = {
- "BindHTTPPorts": [],
- "HTTPPort": 8800,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPrivateKey": "",
- }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : False,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 8443,
- "SSLPrivateKey": "",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
-
-
-
- # All settings missing!
- oldCalDAV = { }
- oldCardDAV = { }
- expected = {
- "BindHTTPPorts": [8008, 8800],
- "BindSSLPorts": [8443, 8843],
- "EnableSSL" : False,
- "HTTPPort": 8008,
- "RedirectHTTPToHTTPS": False,
- "SSLAuthorityChain": "",
- "SSLCertificate": "",
- "SSLPort": 8443,
- "SSLPrivateKey": "",
- }
- newCombined = { }
- mergePlist(oldCalDAV, oldCardDAV, newCombined)
- self.assertEquals(newCombined, expected)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py (from rev 7192, CalendarServer/trunk/contrib/migration/test/test_migrator.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/migration/test/test_migrator.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,258 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 twistedcaldav.test.util
+from contrib.migration.calendarmigrator import mergePlist
+
+class MigrationTests(twistedcaldav.test.util.TestCase):
+ """
+ Calendar Server Migration Tests
+ """
+
+ def test_mergeSSL(self):
+
+ # SSL on for both services
+ oldCalDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8800,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8843,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : True,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+ # SSL off for both services
+ oldCalDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 0,
+ "SSLPrivateKey": "",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8800,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 0,
+ "SSLPrivateKey": "",
+ }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : False,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+ # SSL on for only caldav
+ oldCalDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8800,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 0,
+ "SSLPrivateKey": "",
+ }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : True,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+ # SSL on for only carddav
+ oldCalDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 0,
+ "SSLPrivateKey": "",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [],
+ "BindSSLPorts": [],
+ "HTTPPort": 8800,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8843,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : True,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+ # Non standard ports
+ oldCalDAV = {
+ "BindHTTPPorts": [1111, 2222],
+ "BindSSLPorts": [3333],
+ "HTTPPort": 8888,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 9999,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [4444, 5555],
+ "BindSSLPorts": [6666],
+ "HTTPPort": 7777,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 11111,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ expected = {
+ "BindHTTPPorts": [1111, 2222, 4444, 5555, 7777, 8888],
+ "BindSSLPorts": [3333, 6666, 9999, 11111],
+ "EnableSSL" : True,
+ "HTTPPort": 8888,
+ "RedirectHTTPToHTTPS": True,
+ "SSLAuthorityChain": "/etc/certificates/test.chain.pem",
+ "SSLCertificate": "/etc/certificates/test.cert.pem",
+ "SSLPort": 9999,
+ "SSLPrivateKey": "/etc/certificates/test.key.pem",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+
+ # Never had SSL enabled, so missing SSLPort
+ oldCalDAV = {
+ "BindHTTPPorts": [],
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPrivateKey": "",
+ }
+ oldCardDAV = {
+ "BindHTTPPorts": [],
+ "HTTPPort": 8800,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPrivateKey": "",
+ }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : False,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
+
+
+
+ # All settings missing!
+ oldCalDAV = { }
+ oldCardDAV = { }
+ expected = {
+ "BindHTTPPorts": [8008, 8800],
+ "BindSSLPorts": [8443, 8843],
+ "EnableSSL" : False,
+ "HTTPPort": 8008,
+ "RedirectHTTPToHTTPS": False,
+ "SSLAuthorityChain": "",
+ "SSLCertificate": "",
+ "SSLPort": 8443,
+ "SSLPrivateKey": "",
+ }
+ newCombined = { }
+ mergePlist(oldCalDAV, oldCardDAV, newCombined)
+ self.assertEquals(newCombined, expected)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_change.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_change.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_change.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -32,8 +32,9 @@
from httpclient import StringProducer
from benchlib import initialize, sample
-from event import makeEvent
+from _event_create import makeEvent
+
@inlineCallbacks
def measure(host, port, dtrace, attendeeCount, samples, fieldName,
replacer, eventPerSample=False):
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_create.py (from rev 7192, CalendarServer/trunk/contrib/performance/_event_create.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_create.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/_event_create.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,168 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Various helpers for event-creation benchmarks.
+"""
+
+from uuid import uuid4
+from urllib2 import HTTPDigestAuthHandler
+from datetime import datetime, timedelta
+
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.web.http_headers import Headers
+from twisted.web.http import CREATED
+from twisted.web.client import Agent
+from twisted.internet import reactor
+
+from httpauth import AuthHandlerAgent
+from benchlib import initialize, sample
+from httpclient import StringProducer
+
+
+# XXX Represent these as vobjects? Would make it easier to add more vevents.
+event = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+END:VTIMEZONE
+%(VEVENTS)s\
+END:VCALENDAR
+"""
+
+SUMMARY = "Some random thing"
+
+vevent = """\
+BEGIN:VEVENT
+UID:%(UID)s
+DTSTART;TZID=America/Los_Angeles:%(START)s
+DTEND;TZID=America/Los_Angeles:%(END)s
+%(RRULE)s\
+CREATED:20100729T193912Z
+DTSTAMP:20100729T195557Z
+%(ORGANIZER)s\
+%(ATTENDEES)s\
+SEQUENCE:0
+SUMMARY:%(SUMMARY)s
+TRANSP:OPAQUE
+END:VEVENT
+"""
+
+attendee = """\
+ATTENDEE;CN=User %(SEQUENCE)02d;CUTYPE=INDIVIDUAL;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=NE
+ EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user%(SEQUENCE)02d
+"""
+
+organizer = """\
+ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:uuid:user%(SEQUENCE)02d
+ATTENDEE;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=ACCEPTE
+ D:urn:uuid:user%(SEQUENCE)02d
+"""
+
+def formatDate(d):
+ return ''.join(filter(str.isalnum, d.isoformat()))
+
+
+def makeOrganizer(sequence):
+ return organizer % {'SEQUENCE': sequence}
+
+
+def makeAttendees(count):
+ return [
+ attendee % {'SEQUENCE': n} for n in range(2, count + 2)]
+
+
+def makeVCalendar(uid, start, end, recurrence, organizerSequence, attendees):
+ if recurrence is None:
+ rrule = ""
+ else:
+ rrule = recurrence + "\n"
+ return event % {
+ 'VEVENTS': vevent % {
+ 'UID': uid,
+ 'START': formatDate(start),
+ 'END': formatDate(end),
+ 'SUMMARY': SUMMARY,
+ 'ORGANIZER': makeOrganizer(organizerSequence),
+ 'ATTENDEES': ''.join(attendees),
+ 'RRULE': rrule,
+ },
+ }
+
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ base = datetime(2010, 7, 30, 11, 15, 00)
+ interval = timedelta(0, 5)
+ duration = timedelta(0, 3)
+ return makeVCalendar(
+ uuid4(),
+ base + i * interval,
+ base + i * interval + duration,
+ None,
+ organizerSequence,
+ makeAttendees(attendeeCount))
+
+
+ at inlineCallbacks
+def measure(calendar, organizerSequence, events, host, port, dtrace, samples):
+ """
+ Benchmark event creation.
+ """
+ user = password = "user%02d" % (organizerSequence,)
+ root = "/"
+ principal = "/"
+
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri="http://%s:%d/" % (host, port),
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # First set things up
+ yield initialize(agent, host, port, user, password, root, principal, calendar)
+
+ method = 'PUT'
+ uri = 'http://%s:%d/calendars/__uids__/%s/%s/foo-%%d.ics' % (
+ host, port, user, calendar)
+ headers = Headers({"content-type": ["text/calendar"]})
+
+ # Sample it a bunch of times
+ samples = yield sample(
+ dtrace, samples,
+ agent, ((method, uri % (i,), headers, StringProducer(body))
+ for (i, body)
+ in events).next,
+ CREATED)
+ returnValue(samples)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -18,11 +18,10 @@
from time import time
from twisted.internet.defer import (
- DeferredSemaphore, inlineCallbacks, returnValue, gatherResults)
-# from twisted.internet.task import deferLater
+ FirstError, DeferredList, inlineCallbacks, returnValue)
from twisted.web.http_headers import Headers
-# from twisted.internet import reactor
from twisted.python.log import msg
+from twisted.web.http import NO_CONTENT, NOT_FOUND
from stats import Duration
from httpclient import StringProducer, readBody
@@ -38,19 +37,32 @@
self.principal = principal
- def deleteResource(self, url):
- return self.agent.request('DELETE', 'http://%s%s' % (self.netloc, url))
+ def _makeURL(self, path):
+ if not path.startswith('/'):
+ raise ValueError("Pass a relative URL with an absolute path")
+ return 'http://%s%s' % (self.netloc, path)
- def makeCalendar(self, url):
- return self.agent.request(
- 'MKCALENDAR', 'http://%s%s' % (self.netloc, url))
+ def deleteResource(self, path):
+ url = self._makeURL(path)
+ d = self.agent.request('DELETE', url)
+ def deleted(response):
+ if response.code not in (NO_CONTENT, NOT_FOUND):
+ raise Exception(
+ "Unexpected response to DELETE %s: %d" % (
+ url, response.code))
+ d.addCallback(deleted)
+ return d
- def writeData(self, url, data, contentType):
+ def makeCalendar(self, path):
+ return self.agent.request('MKCALENDAR', self._makeURL(path))
+
+
+ def writeData(self, path, data, contentType):
return self.agent.request(
'PUT',
- 'http://%s%s' % (self.netloc, url),
+ self._makeURL(path),
Headers({'content-type': [contentType]}),
StringProducer(data))
@@ -81,21 +93,33 @@
return d
+
+def firstResult(deferreds):
+ """
+ Return a L{Deferred} which fires when the first L{Deferred} from
+ C{deferreds} fires.
+
+ @param deferreds: A sequence of Deferreds to wait on.
+ """
+
+
+
+
@inlineCallbacks
-def sample(dtrace, samples, agent, paramgen, responseCode, concurrency=1):
- sem = DeferredSemaphore(concurrency)
-
+def sample(dtrace, sampleTime, agent, paramgen, responseCode, concurrency=1):
urlopen = Duration('HTTP')
data = {urlopen: []}
def once():
msg('emitting request')
before = time()
- d = agent.request(*paramgen())
+ params = paramgen()
+ d = agent.request(*params)
def cbResponse(response):
if response.code != responseCode:
raise Exception(
- "Unexpected response code received: %d" % (response.code,))
+ "Request %r received unexpected response code: %d" % (
+ params, response.code))
d = readBody(response)
def cbBody(ignored):
@@ -132,11 +156,30 @@
msg('starting dtrace')
yield dtrace.start()
msg('dtrace started')
+
+ start = time()
l = []
- for i in range(samples):
- l.append(sem.run(once))
- yield gatherResults(l)
+ for i in range(concurrency):
+ l.append(once())
+ while True:
+ try:
+ result, index = yield DeferredList(l, fireOnOneCallback=True, fireOnOneErrback=True)
+ except FirstError, e:
+ e.subFailure.raiseException()
+
+ # Get rid of the completed Deferred
+ del l[index]
+
+ if time() > start + sampleTime:
+ # Wait for the rest of the outstanding requests to keep things tidy
+ yield DeferredList(l)
+ # And then move on
+ break
+ else:
+ # And start a new operation to replace it
+ l.append(once())
+
msg('stopping dtrace')
leftOver = yield dtrace.stop()
msg('dtrace stopped')
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.sh
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.sh 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchlib.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -29,8 +29,13 @@
CONF=$SOURCE/conf/caldavd-dev.plist
# Names of benchmarks we can run.
-BENCHMARKS="find_calendars find_events event_move event_delete_attendee event_add_attendee event_change_date event_change_summary event_delete vfreebusy event"
+BENCHMARKS="find_calendars find_events event_move event_delete_attendee event_add_attendee event_change_date event_change_summary event_delete vfreebusy event bounded_recurrence unbounded_recurrence event_autoaccept bounded_recurrence_autoaccept unbounded_recurrence_autoaccept"
+# Custom scaling parameters for benchmarks that merit it. Be careful
+# not to exceed the 99 user limit for benchmarks where the scaling
+# parameter represents a number of users!
+SCALE_PARAMETERS="--parameters find_events:1,10,100,1000,10000"
+
# Names of metrics we can collect.
STATISTICS=(HTTP SQL read write pagein pageout)
@@ -63,7 +68,7 @@
PIDDIR=$SOURCE/$($EXTRACT $CONF ServerRoot)/$($EXTRACT $CONF RunRoot)
shift
- ./run -d -n $*
+ ./run -d $*
while sleep 2; do
instances=($PIDDIR/*instance*)
if [ "${#instances[*]}" -eq "$NUM_INSTANCES" ]; then
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmark.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmark.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmark.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -31,6 +31,7 @@
Deferred, inlineCallbacks, gatherResults)
from twisted.internet import reactor
from twisted.python.log import msg
+from twisted.python.modules import getModule
from stats import SQLDuration, Bytes
@@ -321,18 +322,23 @@
@inlineCallbacks
-def benchmark(host, port, pids, label, benchmarks):
- parameters = [1, 9, 81]
- samples = 200
+def benchmark(host, port, pids, label, scalingParameters, benchmarks):
+ # Collect samples for 2 minutes. This should give plenty of data
+ # for quick benchmarks. It will leave lots of error (due to small
+ # sample size) for very slow benchmarks, but the error isn't as
+ # interesting as the fact that a single operation takes
+ # double-digit seconds or longer to complete.
+ sampleTime = 60 * 2
statistics = {}
for (name, measure) in benchmarks:
statistics[name] = {}
+ parameters = scalingParameters.get(name, [1, 9, 81])
for p in parameters:
print '%s, parameter=%s' % (name, p)
dtrace = DTraceCollector("io_measure.d", pids)
- data = yield measure(host, port, dtrace, p, samples)
+ data = yield measure(host, port, dtrace, p, sampleTime)
statistics[name][p] = data
fObj = file(
@@ -368,6 +374,11 @@
('debug', None, 'Enable various debugging helpers'),
]
+ def __init__(self):
+ Options.__init__(self)
+ self['parameters'] = {}
+
+
def _selectBenchmarks(self, benchmarks):
"""
Select the benchmarks to run, based on those named and on the
@@ -392,12 +403,26 @@
return benchmarks
+ def opt_parameters(self, which):
+ """
+ Specify the scaling parameters for a particular benchmark.
+ The format of the value is <benchmark>:<value>,...,<value>.
+ The given benchmark will be run with a scaling parameter set
+ to each of the given values. This option may be specified
+ multiple times to specify parameters for multiple benchmarks.
+ """
+ benchmark, values = which.split(':')
+ values = map(int, values.split(','))
+ self['parameters'][benchmark] = values
+
+
def parseArgs(self, *benchmarks):
if not benchmarks:
raise UsageError("Specify at least one benchmark")
self['benchmarks'] = self._selectBenchmarks(list(benchmarks))
+
def whichPIDs(source, conf):
"""
Return a list of PIDs to dtrace.
@@ -407,6 +432,14 @@
pid.getContent() for pid in run.globChildren('*instance*')]
+_benchmarks = getModule("benchmarks")
+def resolveBenchmark(name):
+ for module in _benchmarks.iterModules():
+ if module.name == ".".join((_benchmarks.name, name)):
+ return module.load()
+ raise ValueError("Unknown benchmark: %r" % (name,))
+
+
def main():
from twisted.python.log import startLogging, err
@@ -433,7 +466,8 @@
d = benchmark(
options['host'], options['port'], pids, options['label'],
- [(arg, namedAny(arg).measure) for arg in options['benchmarks']])
- d.addErrback(err)
+ options['parameters'],
+ [(arg, resolveBenchmark(arg).measure) for arg in options['benchmarks']])
+ d.addErrback(err, "Failure at benchmark runner top-level")
reactor.callWhenRunning(d.addCallback, lambda ign: reactor.stop())
reactor.run()
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,3 +0,0 @@
-"""
-Package containing implementations of all of the microbenchmarks.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,3 @@
+"""
+Package containing implementations of all of the microbenchmarks.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,52 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of events with a bounded recurrence.
-"""
-
-from uuid import uuid4
-from itertools import count
-from datetime import datetime, timedelta
-
-from _event_create import (
- makeAttendees, makeVCalendar, formatDate, measure as _measure)
-
-def makeEvent(i, organizerSequence, attendeeCount):
- """
- Create a new half-hour long event that starts soon and recurs
- daily for the next five days.
- """
- now = datetime.now()
- start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
- end = start + timedelta(minutes=30)
- until = start + timedelta(days=5)
- rrule = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=" + formatDate(until)
- return makeVCalendar(
- uuid4(), start, end, rrule, organizerSequence,
- makeAttendees(attendeeCount))
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "bounded-recurrence"
- organizerSequence = 1
-
- # An infinite stream of recurring VEVENTS to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,52 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of events with a bounded recurrence.
+"""
+
+from uuid import uuid4
+from itertools import count
+from datetime import datetime, timedelta
+
+from _event_create import (
+ makeAttendees, makeVCalendar, formatDate, measure as _measure)
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ """
+ Create a new half-hour long event that starts soon and recurs
+ daily for the next five days.
+ """
+ now = datetime.now()
+ start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
+ end = start + timedelta(minutes=30)
+ until = start + timedelta(days=5)
+ rrule = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=" + formatDate(until)
+ return makeVCalendar(
+ uuid4(), start, end, rrule, organizerSequence,
+ makeAttendees(attendeeCount))
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "bounded-recurrence"
+ organizerSequence = 1
+
+ # An infinite stream of recurring VEVENTS to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,55 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of events with a bounded recurrence.
-"""
-
-from uuid import uuid4
-from itertools import count
-from datetime import datetime, timedelta
-
-from _event_create import (
- makeAttendees, makeVCalendar, formatDate, measure as _measure)
-
-def makeEvent(i, organizerSequence, attendeeCount):
- """
- Create a new half-hour long event that starts soon and recurs
- daily for the next five days.
- """
- now = datetime.now()
- start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
- end = start + timedelta(minutes=30)
- until = start + timedelta(days=5)
- rrule = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=" + formatDate(until)
- attendees = makeAttendees(attendeeCount)
- attendees.append(
- 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
- return makeVCalendar(
- uuid4(), start, end, rrule, organizerSequence, attendees)
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "bounded-recurrence-autoaccept"
- organizerSequence = 1
-
- # An infinite stream of recurring VEVENTS to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/bounded_recurrence_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,55 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of events with a bounded recurrence.
+"""
+
+from uuid import uuid4
+from itertools import count
+from datetime import datetime, timedelta
+
+from _event_create import (
+ makeAttendees, makeVCalendar, formatDate, measure as _measure)
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ """
+ Create a new half-hour long event that starts soon and recurs
+ daily for the next five days.
+ """
+ now = datetime.now()
+ start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
+ end = start + timedelta(minutes=30)
+ until = start + timedelta(days=5)
+ rrule = "RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=" + formatDate(until)
+ attendees = makeAttendees(attendeeCount)
+ attendees.append(
+ 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
+ ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ return makeVCalendar(
+ uuid4(), start, end, rrule, organizerSequence, attendees)
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "bounded-recurrence-autoaccept"
+ organizerSequence = 1
+
+ # An infinite stream of recurring VEVENTS to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,34 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of event creation.
-"""
-
-from itertools import count
-
-from _event_create import makeEvent, measure as _measure
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "event-creation-benchmark"
- organizerSequence = 1
-
- # An infinite stream of VEVENTs to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,34 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of event creation.
+"""
+
+from itertools import count
+
+from _event_create import makeEvent, measure as _measure
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "event-creation-benchmark"
+ organizerSequence = 1
+
+ # An infinite stream of VEVENTs to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_add_attendee.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,35 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 _event_change import measure as _measure
-from _event_create import makeAttendees
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- attendees = makeAttendees(attendeeCount)
-
- def addAttendees(event, i):
- """
- Add C{i} new attendees to the given event.
- """
- # Find the last CREATED line
- created = event.rfind('CREATED')
- # Insert the attendees before it.
- return event[:created] + ''.join(attendees) + event[created:]
-
- return _measure(
- host, port, dtrace, 0, samples, "add-attendee",
- addAttendees, eventPerSample=True)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_add_attendee.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_add_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,35 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 _event_change import measure as _measure
+from _event_create import makeAttendees
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ attendees = makeAttendees(attendeeCount)
+
+ def addAttendees(event, i):
+ """
+ Add C{i} new attendees to the given event.
+ """
+ # Find the last CREATED line
+ created = event.rfind('CREATED')
+ # Insert the attendees before it.
+ return event[:created] + ''.join(attendees) + event[created:]
+
+ return _measure(
+ host, port, dtrace, 0, samples, "add-attendee",
+ addAttendees, eventPerSample=True)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,56 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of event creation involving an
-auto-accept resource.
-"""
-
-from itertools import count
-from uuid import uuid4
-from datetime import datetime, timedelta
-
-from _event_create import (
- makeAttendees, makeVCalendar, measure as _measure)
-
-
-def makeEvent(i, organizerSequence, attendeeCount):
- base = datetime(2010, 7, 30, 11, 15, 00)
- interval = timedelta(0, 5)
- duration = timedelta(0, 3)
- attendees = makeAttendees(attendeeCount)
- attendees.append(
- 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
- return makeVCalendar(
- uuid4(),
- base + i * interval,
- base + i * interval + duration,
- None,
- organizerSequence,
- attendees)
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "event-autoaccept-creation-benchmark"
- organizerSequence = 1
-
- # An infinite stream of VEVENTs to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_autoaccept.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,56 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of event creation involving an
+auto-accept resource.
+"""
+
+from itertools import count
+from uuid import uuid4
+from datetime import datetime, timedelta
+
+from _event_create import (
+ makeAttendees, makeVCalendar, measure as _measure)
+
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ base = datetime(2010, 7, 30, 11, 15, 00)
+ interval = timedelta(0, 5)
+ duration = timedelta(0, 3)
+ attendees = makeAttendees(attendeeCount)
+ attendees.append(
+ 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
+ ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ return makeVCalendar(
+ uuid4(),
+ base + i * interval,
+ base + i * interval + duration,
+ None,
+ organizerSequence,
+ attendees)
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "event-autoaccept-creation-benchmark"
+ organizerSequence = 1
+
+ # An infinite stream of VEVENTs to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_change_date.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a change in the date boundaries of an event.
-"""
-
-
-import datetime
-
-import _event_change
-
-TIME_FORMAT = '%Y%m%dT%H%M%S'
-
-def _increment(event, marker, amount):
- # Find the last occurrence of the marker
- dtstart = event.rfind(marker)
- # Find the end of that line
- eol = event.find('\n', dtstart)
- # Find the : preceding the date on that line
- colon = event.find(':', dtstart)
- # Replace the text between the colon and the eol with the new timestamp
- old = datetime.datetime.strptime(event[colon + 1:eol], TIME_FORMAT)
- new = old + amount
- return event[:colon + 1] + new.strftime(TIME_FORMAT) + event[eol:]
-
-
-def replaceTimestamp(event, i):
- offset = datetime.timedelta(hours=i)
- return _increment(
- _increment(event, 'DTSTART', offset),
- 'DTEND', offset)
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- return _event_change.measure(
- host, port, dtrace, attendeeCount, samples, "change-date",
- replaceTimestamp)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_change_date.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_date.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,51 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Benchmark a change in the date boundaries of an event.
+"""
+
+
+import datetime
+
+import _event_change
+
+TIME_FORMAT = '%Y%m%dT%H%M%S'
+
+def _increment(event, marker, amount):
+ # Find the last occurrence of the marker
+ dtstart = event.rfind(marker)
+ # Find the end of that line
+ eol = event.find('\n', dtstart)
+ # Find the : preceding the date on that line
+ colon = event.find(':', dtstart)
+ # Replace the text between the colon and the eol with the new timestamp
+ old = datetime.datetime.strptime(event[colon + 1:eol], TIME_FORMAT)
+ new = old + amount
+ return event[:colon + 1] + new.strftime(TIME_FORMAT) + event[eol:]
+
+
+def replaceTimestamp(event, i):
+ offset = datetime.timedelta(hours=i)
+ return _increment(
+ _increment(event, 'DTSTART', offset),
+ 'DTEND', offset)
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ return _event_change.measure(
+ host, port, dtrace, attendeeCount, samples, "change-date",
+ replaceTimestamp)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_change_summary.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,27 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 _event_create import SUMMARY
-from _event_change import measure as _measure
-
-def replaceSummary(event, i):
- return event.replace(SUMMARY, 'Replacement summary %d' % (i,))
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- return _measure(
- host, port, dtrace, attendeeCount, samples, "change-summary",
- replaceSummary)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_change_summary.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_change_summary.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,27 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 _event_create import SUMMARY
+from _event_change import measure as _measure
+
+def replaceSummary(event, i):
+ return event.replace(SUMMARY, 'Replacement summary %d' % (i,))
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ return _measure(
+ host, port, dtrace, attendeeCount, samples, "change-summary",
+ replaceSummary)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_delete.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,77 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of event deletion.
-"""
-
-from itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import NO_CONTENT
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import initialize, sample
-from event import makeEvent
-
- at inlineCallbacks
-def measure(host, port, dtrace, attendeeCount, samples):
- organizerSequence = 1
- user = password = "user%02d" % (organizerSequence,)
- root = "/"
- principal = "/"
- calendar = "event-deletion-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Set up the calendar first
- yield initialize(agent, host, port, user, password, root, principal, calendar)
-
- # An infinite stream of VEVENTs to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount))
- for i in count(2))
-
- # Create enough events to delete
- uri = 'http://%s:%d/calendars/__uids__/%s/%s/foo-%%d.ics' % (
- host, port, user, calendar)
- headers = Headers({"content-type": ["text/calendar"]})
- urls = []
- for i, body in events:
- urls.append(uri % (i,))
- yield agent.request(
- 'PUT', urls[-1], headers, StringProducer(body))
- if len(urls) == samples:
- break
-
- # Now delete them all
- samples = yield sample(
- dtrace, samples,
- agent, (('DELETE', url) for url in urls).next,
- NO_CONTENT)
- returnValue(samples)
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_delete.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,77 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of event deletion.
+"""
+
+from itertools import count
+from urllib2 import HTTPDigestAuthHandler
+
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.web.client import Agent
+from twisted.web.http_headers import Headers
+from twisted.web.http import NO_CONTENT
+
+from httpauth import AuthHandlerAgent
+from httpclient import StringProducer
+
+from benchlib import initialize, sample
+from event import makeEvent
+
+ at inlineCallbacks
+def measure(host, port, dtrace, attendeeCount, samples):
+ organizerSequence = 1
+ user = password = "user%02d" % (organizerSequence,)
+ root = "/"
+ principal = "/"
+ calendar = "event-deletion-benchmark"
+
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri="http://%s:%d/" % (host, port),
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # Set up the calendar first
+ yield initialize(agent, host, port, user, password, root, principal, calendar)
+
+ # An infinite stream of VEVENTs to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount))
+ for i in count(2))
+
+ # Create enough events to delete
+ uri = 'http://%s:%d/calendars/__uids__/%s/%s/foo-%%d.ics' % (
+ host, port, user, calendar)
+ headers = Headers({"content-type": ["text/calendar"]})
+ urls = []
+ for i, body in events:
+ urls.append(uri % (i,))
+ yield agent.request(
+ 'PUT', urls[-1], headers, StringProducer(body))
+ if len(urls) == samples:
+ break
+
+ # Now delete them all
+ samples = yield sample(
+ dtrace, samples,
+ agent, (('DELETE', url) for url in urls).next,
+ NO_CONTENT)
+ returnValue(samples)
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_delete_attendee.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,35 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 _event_change
-
-def measure(host, port, dtrace, attendeeCount, samples):
- def deleteAttendees(event, i):
- """
- Add C{i} new attendees to the given event.
- """
- for n in range(attendeeCount):
- # Find the beginning of an ATTENDEE line
- attendee = event.find('ATTENDEE')
- # And the end of it
- eol = event.find('\n', attendee)
- # And remove it
- event = event[:attendee] + event[eol:]
- return event
-
- return _event_change.measure(
- host, port, dtrace, attendeeCount, samples, "delete-attendee",
- deleteAttendees, eventPerSample=True)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_delete_attendee.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_delete_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,35 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 _event_change
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ def deleteAttendees(event, i):
+ """
+ Add C{i} new attendees to the given event.
+ """
+ for n in range(attendeeCount):
+ # Find the beginning of an ATTENDEE line
+ attendee = event.find('ATTENDEE')
+ # And the end of it
+ eol = event.find('\n', attendee)
+ # And remove it
+ event = event[:attendee] + event[eol:]
+ return event
+
+ return _event_change.measure(
+ host, port, dtrace, attendeeCount, samples, "delete-attendee",
+ deleteAttendees, eventPerSample=True)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/event_move.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,77 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count, cycle
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import CREATED
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import initialize, sample
-from event import makeEvent
-
- at inlineCallbacks
-def measure(host, port, dtrace, attendeeCount, samples):
- organizerSequence = 1
- user = password = "user%02d" % (organizerSequence,)
- root = "/"
- principal = "/"
-
- # Two calendars between which to move the event.
- fooCalendar = "event-move-foo-benchmark"
- barCalendar = "event-move-bar-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Set up the calendars first
- for calendar in [fooCalendar, barCalendar]:
- yield initialize(
- agent, host, port, user, password, root, principal, calendar)
-
- fooURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
- host, port, user, fooCalendar)
- barURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
- host, port, user, barCalendar)
-
- # Create the event that will move around
- headers = Headers({"content-type": ["text/calendar"]})
- yield agent.request(
- 'PUT', fooURI, headers,
- StringProducer(makeEvent(1, organizerSequence, attendeeCount)))
-
- # Move it around sooo much
- source = cycle([fooURI, barURI])
- dest = cycle([barURI, fooURI])
-
- params = (
- ('MOVE', source.next(),
- Headers({"destination": [dest.next()], "overwrite": ["F"]}))
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, CREATED)
- returnValue(samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/event_move.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/event_move.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,77 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 itertools import count, cycle
+from urllib2 import HTTPDigestAuthHandler
+
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.web.client import Agent
+from twisted.web.http_headers import Headers
+from twisted.web.http import CREATED
+
+from httpauth import AuthHandlerAgent
+from httpclient import StringProducer
+
+from benchlib import initialize, sample
+from event import makeEvent
+
+ at inlineCallbacks
+def measure(host, port, dtrace, attendeeCount, samples):
+ organizerSequence = 1
+ user = password = "user%02d" % (organizerSequence,)
+ root = "/"
+ principal = "/"
+
+ # Two calendars between which to move the event.
+ fooCalendar = "event-move-foo-benchmark"
+ barCalendar = "event-move-bar-benchmark"
+
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri="http://%s:%d/" % (host, port),
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # Set up the calendars first
+ for calendar in [fooCalendar, barCalendar]:
+ yield initialize(
+ agent, host, port, user, password, root, principal, calendar)
+
+ fooURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
+ host, port, user, fooCalendar)
+ barURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
+ host, port, user, barCalendar)
+
+ # Create the event that will move around
+ headers = Headers({"content-type": ["text/calendar"]})
+ yield agent.request(
+ 'PUT', fooURI, headers,
+ StringProducer(makeEvent(1, organizerSequence, attendeeCount)))
+
+ # Move it around sooo much
+ source = cycle([fooURI, barURI])
+ dest = cycle([barURI, fooURI])
+
+ params = (
+ ('MOVE', source.next(),
+ Headers({"destination": [dest.next()], "overwrite": ["F"]}))
+ for i in count(1))
+
+ samples = yield sample(dtrace, samples, agent, params.next, CREATED)
+ returnValue(samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/find_calendars.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,104 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import MULTI_STATUS
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import CalDAVAccount, sample
-
-PROPFIND = """\
-<?xml version="1.0" encoding="utf-8"?>
-<x0:propfind xmlns:x0="DAV:" xmlns:x3="http://apple.com/ns/ical/" xmlns:x1="http://calendarserver.org/ns/" xmlns:x2="urn:ietf:params:xml:ns:caldav">
- <x0:prop>
- <x1:xmpp-server/>
- <x1:xmpp-uri/>
- <x1:getctag/>
- <x0:displayname/>
- <x2:calendar-description/>
- <x3:calendar-color/>
- <x3:calendar-order/>
- <x2:supported-calendar-component-set/>
- <x0:resourcetype/>
- <x0:owner/>
- <x2:calendar-free-busy-set/>
- <x2:schedule-calendar-transp/>
- <x2:schedule-default-calendar-URL/>
- <x0:quota-available-bytes/>
- <x0:quota-used-bytes/>
- <x2:calendar-timezone/>
- <x0:current-user-privilege-set/>
- <x1:source/>
- <x1:subscribed-strip-alarms/>
- <x1:subscribed-strip-attachments/>
- <x1:subscribed-strip-todos/>
- <x3:refreshrate/>
- <x1:push-transports/>
- <x1:pushkey/>
- <x1:publish-url/>
- </x0:prop>
-</x0:propfind>
-"""
-
- at inlineCallbacks
-def measure(host, port, dtrace, numCalendars, samples):
- # There's already the "calendar" calendar
- numCalendars -= 1
-
- user = password = "user10"
- root = "/"
- principal = "/"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Create the number of calendars necessary
- account = CalDAVAccount(
- agent,
- "%s:%d" % (host, port),
- user=user, password=password,
- root=root, principal=principal)
- cal = "/calendars/users/%s/propfind-%%d/" % (user,)
- for i in range(numCalendars):
- yield account.makeCalendar(cal % (i,))
-
- body = StringProducer(PROPFIND)
- params = (
- ('PROPFIND', 'http://%s:%d/calendars/__uids__/%s/' % (host, port, user),
- Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
-
- # Delete the calendars we created to leave the server in roughly
- # the same state as we found it.
- for i in range(numCalendars):
- yield account.deleteResource(cal % (i,))
-
- returnValue(samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/find_calendars.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_calendars.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,104 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 itertools import count
+from urllib2 import HTTPDigestAuthHandler
+
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.web.client import Agent
+from twisted.web.http_headers import Headers
+from twisted.web.http import MULTI_STATUS
+
+from httpauth import AuthHandlerAgent
+from httpclient import StringProducer
+
+from benchlib import CalDAVAccount, sample
+
+PROPFIND = """\
+<?xml version="1.0" encoding="utf-8"?>
+<x0:propfind xmlns:x0="DAV:" xmlns:x3="http://apple.com/ns/ical/" xmlns:x1="http://calendarserver.org/ns/" xmlns:x2="urn:ietf:params:xml:ns:caldav">
+ <x0:prop>
+ <x1:xmpp-server/>
+ <x1:xmpp-uri/>
+ <x1:getctag/>
+ <x0:displayname/>
+ <x2:calendar-description/>
+ <x3:calendar-color/>
+ <x3:calendar-order/>
+ <x2:supported-calendar-component-set/>
+ <x0:resourcetype/>
+ <x0:owner/>
+ <x2:calendar-free-busy-set/>
+ <x2:schedule-calendar-transp/>
+ <x2:schedule-default-calendar-URL/>
+ <x0:quota-available-bytes/>
+ <x0:quota-used-bytes/>
+ <x2:calendar-timezone/>
+ <x0:current-user-privilege-set/>
+ <x1:source/>
+ <x1:subscribed-strip-alarms/>
+ <x1:subscribed-strip-attachments/>
+ <x1:subscribed-strip-todos/>
+ <x3:refreshrate/>
+ <x1:push-transports/>
+ <x1:pushkey/>
+ <x1:publish-url/>
+ </x0:prop>
+</x0:propfind>
+"""
+
+ at inlineCallbacks
+def measure(host, port, dtrace, numCalendars, samples):
+ # There's already the "calendar" calendar
+ numCalendars -= 1
+
+ user = password = "user10"
+ root = "/"
+ principal = "/"
+
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri="http://%s:%d/" % (host, port),
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # Create the number of calendars necessary
+ account = CalDAVAccount(
+ agent,
+ "%s:%d" % (host, port),
+ user=user, password=password,
+ root=root, principal=principal)
+ cal = "/calendars/users/%s/propfind-%%d/" % (user,)
+ for i in range(numCalendars):
+ yield account.makeCalendar(cal % (i,))
+
+ body = StringProducer(PROPFIND)
+ params = (
+ ('PROPFIND', 'http://%s:%d/calendars/__uids__/%s/' % (host, port, user),
+ Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
+ for i in count(1))
+
+ samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
+
+ # Delete the calendars we created to leave the server in roughly
+ # the same state as we found it.
+ for i in range(numCalendars):
+ yield account.deleteResource(cal % (i,))
+
+ returnValue(samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/find_events.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,98 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue, gatherResults
-from twisted.internet.task import cooperate
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import MULTI_STATUS
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import CalDAVAccount, sample
-from event import makeEvent
-
-PROPFIND = """\
-<?xml version="1.0" encoding="utf-8"?>
-<x0:propfind xmlns:x0="DAV:" xmlns:x1="http://calendarserver.org/ns/">
- <x0:prop>
- <x0:getetag/>
- <x0:resourcetype/>
- <x1:notificationtype/>
- </x0:prop>
-</x0:propfind>
-"""
-
-def uploadEvents(numEvents, agent, uri, cal):
- def worker():
- for i in range(numEvents):
- event = makeEvent(i, 1, 0)
- yield agent.request(
- 'PUT',
- '%s%s%d.ics' % (uri, cal, i),
- Headers({"content-type": ["text/calendar"]}),
- StringProducer(event))
- worker = worker()
- return gatherResults([
- cooperate(worker).whenDone() for i in range(3)])
-
-
- at inlineCallbacks
-def measure(host, port, dtrace, numEvents, samples):
- user = password = "user11"
- root = "/"
- principal = "/"
-
- uri = "http://%s:%d/" % (host, port)
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri=uri,
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Create the number of calendars necessary
- account = CalDAVAccount(
- agent,
- "%s:%d" % (host, port),
- user=user, password=password,
- root=root, principal=principal)
- cal = "calendars/users/%s/find-events/" % (user,)
- yield account.makeCalendar("/" + cal)
-
- # Create the indicated number of events on the calendar
- yield uploadEvents(numEvents, agent, uri, cal)
-
- body = StringProducer(PROPFIND)
- params = (
- ('PROPFIND',
- '%scalendars/__uids__/%s/find-events/' % (uri, user),
- Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
-
- # Delete the calendar we created to leave the server in roughly
- # the same state as we found it.
- yield account.deleteResource("/" + cal)
-
- returnValue(samples)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/find_events.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/find_events.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,98 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 itertools import count
+from urllib2 import HTTPDigestAuthHandler
+
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue, gatherResults
+from twisted.internet.task import cooperate
+from twisted.web.client import Agent
+from twisted.web.http_headers import Headers
+from twisted.web.http import MULTI_STATUS
+
+from httpauth import AuthHandlerAgent
+from httpclient import StringProducer
+
+from benchlib import CalDAVAccount, sample
+from event import makeEvent
+
+PROPFIND = """\
+<?xml version="1.0" encoding="utf-8"?>
+<x0:propfind xmlns:x0="DAV:" xmlns:x1="http://calendarserver.org/ns/">
+ <x0:prop>
+ <x0:getetag/>
+ <x0:resourcetype/>
+ <x1:notificationtype/>
+ </x0:prop>
+</x0:propfind>
+"""
+
+def uploadEvents(numEvents, agent, uri, cal):
+ def worker():
+ for i in range(numEvents):
+ event = makeEvent(i, 1, 0)
+ yield agent.request(
+ 'PUT',
+ '%s%s%d.ics' % (uri, cal, i),
+ Headers({"content-type": ["text/calendar"]}),
+ StringProducer(event))
+ worker = worker()
+ return gatherResults([
+ cooperate(worker).whenDone() for i in range(3)])
+
+
+ at inlineCallbacks
+def measure(host, port, dtrace, numEvents, samples):
+ user = password = "user11"
+ root = "/"
+ principal = "/"
+
+ uri = "http://%s:%d/" % (host, port)
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri=uri,
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # Create the number of calendars necessary
+ account = CalDAVAccount(
+ agent,
+ "%s:%d" % (host, port),
+ user=user, password=password,
+ root=root, principal=principal)
+ cal = "calendars/users/%s/find-events/" % (user,)
+ yield account.makeCalendar("/" + cal)
+
+ # Create the indicated number of events on the calendar
+ yield uploadEvents(numEvents, agent, uri, cal)
+
+ body = StringProducer(PROPFIND)
+ params = (
+ ('PROPFIND',
+ '%scalendars/__uids__/%s/find-events/' % (uri, user),
+ Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
+ for i in count(1))
+
+ samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
+
+ # Delete the calendar we created to leave the server in roughly
+ # the same state as we found it.
+ yield account.deleteResource("/" + cal)
+
+ returnValue(samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of events with an unbounded recurrence.
-"""
-
-from uuid import uuid4
-from itertools import count
-from datetime import datetime, timedelta
-
-from _event_create import (
- makeAttendees, makeVCalendar, measure as _measure)
-
-def makeEvent(i, organizerSequence, attendeeCount):
- """
- Create a new half-hour long event that starts soon and weekly for
- as long the server allows.
- """
- now = datetime.now()
- start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
- end = start + timedelta(minutes=30)
- return makeVCalendar(
- uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence,
- makeAttendees(attendeeCount))
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "unbounded-recurrence"
- organizerSequence = 1
-
- # An infinite stream of recurring VEVENTS to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,51 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of events with an unbounded recurrence.
+"""
+
+from uuid import uuid4
+from itertools import count
+from datetime import datetime, timedelta
+
+from _event_create import (
+ makeAttendees, makeVCalendar, measure as _measure)
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ """
+ Create a new half-hour long event that starts soon and weekly for
+ as long the server allows.
+ """
+ now = datetime.now()
+ start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
+ end = start + timedelta(minutes=30)
+ return makeVCalendar(
+ uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence,
+ makeAttendees(attendeeCount))
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "unbounded-recurrence"
+ organizerSequence = 1
+
+ # An infinite stream of recurring VEVENTS to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,54 +0,0 @@
-##
-# Copyright (c) 2011 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of events with an unbounded recurrence.
-"""
-
-from uuid import uuid4
-from itertools import count
-from datetime import datetime, timedelta
-
-from _event_create import (
- makeAttendees, makeVCalendar, measure as _measure)
-
-def makeEvent(i, organizerSequence, attendeeCount):
- """
- Create a new half-hour long event that starts soon and weekly for
- as long the server allows.
- """
- now = datetime.now()
- start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
- end = start + timedelta(minutes=30)
- attendees = makeAttendees(attendeeCount)
- attendees.append(
- 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
- ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
- return makeVCalendar(
- uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence, attendees)
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- calendar = "unbounded-recurrence-autoaccept"
- organizerSequence = 1
-
- # An infinite stream of recurring VEVENTS to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- return _measure(
- calendar, organizerSequence, events,
- host, port, dtrace, samples)
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/unbounded_recurrence_autoaccept.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,54 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of events with an unbounded recurrence.
+"""
+
+from uuid import uuid4
+from itertools import count
+from datetime import datetime, timedelta
+
+from _event_create import (
+ makeAttendees, makeVCalendar, measure as _measure)
+
+def makeEvent(i, organizerSequence, attendeeCount):
+ """
+ Create a new half-hour long event that starts soon and weekly for
+ as long the server allows.
+ """
+ now = datetime.now()
+ start = now.replace(minute=15, second=0, microsecond=0) + timedelta(hours=i)
+ end = start + timedelta(minutes=30)
+ attendees = makeAttendees(attendeeCount)
+ attendees.append(
+ 'ATTENDEE;CN="Resource 01";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;RSVP=T\n'
+ ' RUE;SCHEDULE-STATUS="1.2":urn:uuid:resource01\n')
+ return makeVCalendar(
+ uuid4(), start, end, "RRULE:FREQ=WEEKLY", organizerSequence, attendees)
+
+
+def measure(host, port, dtrace, attendeeCount, samples):
+ calendar = "unbounded-recurrence-autoaccept"
+ organizerSequence = 1
+
+ # An infinite stream of recurring VEVENTS to PUT to the server.
+ events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
+
+ return _measure(
+ calendar, organizerSequence, events,
+ host, port, dtrace, samples)
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,147 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of VFREEBUSY requests.
-"""
-
-from urllib2 import HTTPDigestAuthHandler
-from uuid import uuid4
-from datetime import datetime, timedelta
-
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.internet import reactor
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import OK
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-from benchlib import initialize, sample
-
-# XXX Represent these as vobjects? Would make it easier to add more vevents.
-event = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VTIMEZONE
-TZID:America/New_York
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-END:VTIMEZONE
-%(VEVENTS)s\
-END:VCALENDAR
-"""
-
-vfreebusy = """\
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-VERSION:2.0
-METHOD:REQUEST
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VFREEBUSY
-UID:81F582C8-4E7F-491C-85F4-E541864BE0FA
-DTEND:20100730T150000Z
-ATTENDEE:urn:uuid:user02
-DTSTART:20100730T140000Z
-X-CALENDARSERVER-MASK-UID:EC75A61B-08A3-44FD-BFBB-2457BBD0D490
-DTSTAMP:20100729T174751Z
-ORGANIZER:mailto:user01 at example.com
-SUMMARY:Availability for urn:uuid:user02
-END:VFREEBUSY
-END:VCALENDAR
-"""
-
-def formatDate(d):
- return ''.join(filter(str.isalnum, d.isoformat()))
-
-def makeEvent(i):
- s = """\
-BEGIN:VEVENT
-UID:%(UID)s
-DTSTART;TZID=America/New_York:%(START)s
-DTEND;TZID=America/New_York:%(END)s
-CREATED:20100729T193912Z
-DTSTAMP:20100729T195557Z
-SEQUENCE:%(SEQUENCE)s
-SUMMARY:STUFF IS THINGS
-TRANSP:OPAQUE
-END:VEVENT
-"""
- base = datetime(2010, 7, 30, 11, 15, 00)
- interval = timedelta(hours=2)
- duration = timedelta(hours=1)
- return event % {
- 'VEVENTS': s % {
- 'UID': uuid4(),
- 'START': formatDate(base + i * interval),
- 'END': formatDate(base + i * interval + duration),
- 'SEQUENCE': i,
- },
- }
-
-
-def makeEvents(n):
- return [makeEvent(i) for i in range(n)]
-
-
- at inlineCallbacks
-def measure(host, port, dtrace, events, samples):
- user = password = "user01"
- root = "/"
- principal = "/"
- calendar = "vfreebusy-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # First set things up
- account = yield initialize(
- agent, host, port, user, password, root, principal, calendar)
-
- base = "/calendars/users/%s/%s/foo-%%d.ics" % (user, calendar)
- for i, cal in enumerate(makeEvents(events)):
- yield account.writeData(base % (i,), cal, "text/calendar")
-
- method = 'POST'
- uri = 'http://%s:%d/calendars/__uids__/%s/outbox/' % (host, port, user)
- headers = Headers({"content-type": ["text/calendar"]})
- body = StringProducer(vfreebusy)
-
- samples = yield sample(
- dtrace, samples,
- agent, lambda: (method, uri, headers, body),
- OK)
- returnValue(samples)
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py (from rev 7192, CalendarServer/trunk/contrib/performance/benchmarks/vfreebusy.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/benchmarks/vfreebusy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,147 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Benchmark a server's handling of VFREEBUSY requests.
+"""
+
+from urllib2 import HTTPDigestAuthHandler
+from uuid import uuid4
+from datetime import datetime, timedelta
+
+from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.internet import reactor
+from twisted.web.client import Agent
+from twisted.web.http_headers import Headers
+from twisted.web.http import OK
+
+from httpauth import AuthHandlerAgent
+from httpclient import StringProducer
+from benchlib import initialize, sample
+
+# XXX Represent these as vobjects? Would make it easier to add more vevents.
+event = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+END:VTIMEZONE
+%(VEVENTS)s\
+END:VCALENDAR
+"""
+
+vfreebusy = """\
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+VERSION:2.0
+METHOD:REQUEST
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+BEGIN:VFREEBUSY
+UID:81F582C8-4E7F-491C-85F4-E541864BE0FA
+DTEND:20100730T150000Z
+ATTENDEE:urn:uuid:user02
+DTSTART:20100730T140000Z
+X-CALENDARSERVER-MASK-UID:EC75A61B-08A3-44FD-BFBB-2457BBD0D490
+DTSTAMP:20100729T174751Z
+ORGANIZER:mailto:user01 at example.com
+SUMMARY:Availability for urn:uuid:user02
+END:VFREEBUSY
+END:VCALENDAR
+"""
+
+def formatDate(d):
+ return ''.join(filter(str.isalnum, d.isoformat()))
+
+def makeEvent(i):
+ s = """\
+BEGIN:VEVENT
+UID:%(UID)s
+DTSTART;TZID=America/New_York:%(START)s
+DTEND;TZID=America/New_York:%(END)s
+CREATED:20100729T193912Z
+DTSTAMP:20100729T195557Z
+SEQUENCE:%(SEQUENCE)s
+SUMMARY:STUFF IS THINGS
+TRANSP:OPAQUE
+END:VEVENT
+"""
+ base = datetime(2010, 7, 30, 11, 15, 00)
+ interval = timedelta(hours=2)
+ duration = timedelta(hours=1)
+ return event % {
+ 'VEVENTS': s % {
+ 'UID': uuid4(),
+ 'START': formatDate(base + i * interval),
+ 'END': formatDate(base + i * interval + duration),
+ 'SEQUENCE': i,
+ },
+ }
+
+
+def makeEvents(n):
+ return [makeEvent(i) for i in range(n)]
+
+
+ at inlineCallbacks
+def measure(host, port, dtrace, events, samples):
+ user = password = "user01"
+ root = "/"
+ principal = "/"
+ calendar = "vfreebusy-benchmark"
+
+ authinfo = HTTPDigestAuthHandler()
+ authinfo.add_password(
+ realm="Test Realm",
+ uri="http://%s:%d/" % (host, port),
+ user=user,
+ passwd=password)
+ agent = AuthHandlerAgent(Agent(reactor), authinfo)
+
+ # First set things up
+ account = yield initialize(
+ agent, host, port, user, password, root, principal, calendar)
+
+ base = "/calendars/users/%s/%s/foo-%%d.ics" % (user, calendar)
+ for i, cal in enumerate(makeEvents(events)):
+ yield account.writeData(base % (i,), cal, "text/calendar")
+
+ method = 'POST'
+ uri = 'http://%s:%d/calendars/__uids__/%s/outbox/' % (host, port, user)
+ headers = Headers({"content-type": ["text/calendar"]})
+ body = StringProducer(vfreebusy)
+
+ samples = yield sample(
+ dtrace, samples,
+ agent, lambda: (method, uri, headers, body),
+ OK)
+ returnValue(samples)
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,153 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of event creation.
-"""
-
-from itertools import count
-from urllib2 import HTTPDigestAuthHandler
-from uuid import uuid4
-from datetime import datetime, timedelta
-
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.internet import reactor
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import CREATED
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-from benchlib import initialize, sample
-
-# XXX Represent these as vobjects? Would make it easier to add more vevents.
-event = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VTIMEZONE
-TZID:America/Los_Angeles
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-TZNAME:PST
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-TZNAME:PDT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-END:DAYLIGHT
-END:VTIMEZONE
-%(VEVENTS)s\
-END:VCALENDAR
-"""
-
-attendee = """\
-ATTENDEE;CN=User %(SEQUENCE)02d;CUTYPE=INDIVIDUAL;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=NE
- EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user%(SEQUENCE)02d
-"""
-
-organizer = """\
-ORGANIZER;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com:urn:uuid:user%(SEQUENCE)02d
-ATTENDEE;CN=User %(SEQUENCE)02d;EMAIL=user%(SEQUENCE)02d at example.com;PARTSTAT=ACCEPTE
- D:urn:uuid:user%(SEQUENCE)02d
-"""
-
-def makeOrganizer(sequence):
- return organizer % {'SEQUENCE': sequence}
-
-def makeAttendees(count):
- return ''.join([
- attendee % {'SEQUENCE': n} for n in range(2, count + 2)])
-
-
-def formatDate(d):
- return ''.join(filter(str.isalnum, d.isoformat()))
-
-
-SUMMARY = "STUFF IS THINGS"
-
-def makeEvent(i, organizerSequence, attendeeCount):
- s = """\
-BEGIN:VEVENT
-UID:%(UID)s
-DTSTART;TZID=America/Los_Angeles:%(START)s
-DTEND;TZID=America/Los_Angeles:%(END)s
-CREATED:20100729T193912Z
-DTSTAMP:20100729T195557Z
-%(ORGANIZER)s\
-%(ATTENDEES)s\
-SEQUENCE:0
-SUMMARY:%(summary)s
-TRANSP:OPAQUE
-END:VEVENT
-"""
- base = datetime(2010, 7, 30, 11, 15, 00)
- interval = timedelta(0, 5)
- duration = timedelta(0, 3)
- return event % {
- 'VEVENTS': s % {
- 'UID': uuid4(),
- 'START': formatDate(base + i * interval),
- 'END': formatDate(base + i * interval + duration),
- 'ORGANIZER': makeOrganizer(organizerSequence),
- 'ATTENDEES': makeAttendees(attendeeCount),
- 'summary': SUMMARY,
- },
- }
-
-
- at inlineCallbacks
-def measure(host, port, dtrace, attendeeCount, samples):
- organizerSequence = 1
- user = password = "user%02d" % (organizerSequence,)
- root = "/"
- principal = "/"
- calendar = "event-creation-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # First set things up
- yield initialize(agent, host, port, user, password, root, principal, calendar)
-
- method = 'PUT'
- uri = 'http://%s:%d/calendars/__uids__/%s/%s/foo-%%d.ics' % (
- host, port, user, calendar)
- headers = Headers({"content-type": ["text/calendar"]})
-
- # An infinite stream of VEVENTs to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount)) for i in count(2))
-
- # Sample it a bunch of times
- samples = yield sample(
- dtrace, samples,
- agent, ((method, uri % (i,), headers, StringProducer(body))
- for (i, body)
- in events).next,
- CREATED)
- returnValue(samples)
-
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_add_attendee.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_add_attendee.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_add_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 _event_change
-
-from event import makeAttendees
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- attendees = makeAttendees(attendeeCount)
-
- def addAttendees(event, i):
- """
- Add C{i} new attendees to the given event.
- """
- # Find the last CREATED line
- created = event.rfind('CREATED')
- # Insert the attendees before it.
- return event[:created] + attendees + event[created:]
-
- return _event_change.measure(
- host, port, dtrace, 0, samples, "add-attendee",
- addAttendees, eventPerSample=True)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_date.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_date.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_date.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a change in the date boundaries of an event.
-"""
-
-
-import datetime
-
-import _event_change
-
-TIME_FORMAT = '%Y%m%dT%H%M%S'
-
-def _increment(event, marker, amount):
- # Find the last occurrence of the marker
- dtstart = event.rfind(marker)
- # Find the end of that line
- eol = event.find('\n', dtstart)
- # Find the : preceding the date on that line
- colon = event.find(':', dtstart)
- # Replace the text between the colon and the eol with the new timestamp
- old = datetime.datetime.strptime(event[colon + 1:eol], TIME_FORMAT)
- new = old + amount
- return event[:colon + 1] + new.strftime(TIME_FORMAT) + event[eol:]
-
-
-def replaceTimestamp(event, i):
- offset = datetime.timedelta(hours=i)
- return _increment(
- _increment(event, 'DTSTART', offset),
- 'DTEND', offset)
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- return _event_change.measure(
- host, port, dtrace, attendeeCount, samples, "change-date",
- replaceTimestamp)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_summary.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_summary.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_change_summary.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,28 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 event import SUMMARY
-
-import _event_change
-
-def replaceSummary(event, i):
- return event.replace(SUMMARY, 'Replacement summary %d' % (i,))
-
-
-def measure(host, port, dtrace, attendeeCount, samples):
- return _event_change.measure(
- host, port, dtrace, attendeeCount, samples, "change-summary",
- replaceSummary)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,77 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of event deletion.
-"""
-
-from itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import NO_CONTENT
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import initialize, sample
-from event import makeEvent
-
- at inlineCallbacks
-def measure(host, port, dtrace, attendeeCount, samples):
- organizerSequence = 1
- user = password = "user%02d" % (organizerSequence,)
- root = "/"
- principal = "/"
- calendar = "event-deletion-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Set up the calendar first
- yield initialize(agent, host, port, user, password, root, principal, calendar)
-
- # An infinite stream of VEVENTs to PUT to the server.
- events = ((i, makeEvent(i, organizerSequence, attendeeCount))
- for i in count(2))
-
- # Create enough events to delete
- uri = 'http://%s:%d/calendars/__uids__/%s/%s/foo-%%d.ics' % (
- host, port, user, calendar)
- headers = Headers({"content-type": ["text/calendar"]})
- urls = []
- for i, body in events:
- urls.append(uri % (i,))
- yield agent.request(
- 'PUT', urls[-1], headers, StringProducer(body))
- if len(urls) == samples:
- break
-
- # Now delete them all
- samples = yield sample(
- dtrace, samples,
- agent, (('DELETE', url) for url in urls).next,
- NO_CONTENT)
- returnValue(samples)
-
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete_attendee.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete_attendee.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_delete_attendee.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,35 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 _event_change
-
-def measure(host, port, dtrace, attendeeCount, samples):
- def deleteAttendees(event, i):
- """
- Add C{i} new attendees to the given event.
- """
- for n in range(attendeeCount):
- # Find the beginning of an ATTENDEE line
- attendee = event.find('ATTENDEE')
- # And the end of it
- eol = event.find('\n', attendee)
- # And remove it
- event = event[:attendee] + event[eol:]
- return event
-
- return _event_change.measure(
- host, port, dtrace, attendeeCount, samples, "delete-attendee",
- deleteAttendees, eventPerSample=True)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_move.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_move.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/event_move.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,77 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count, cycle
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import CREATED
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import initialize, sample
-from event import makeEvent
-
- at inlineCallbacks
-def measure(host, port, dtrace, attendeeCount, samples):
- organizerSequence = 1
- user = password = "user%02d" % (organizerSequence,)
- root = "/"
- principal = "/"
-
- # Two calendars between which to move the event.
- fooCalendar = "event-move-foo-benchmark"
- barCalendar = "event-move-bar-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Set up the calendars first
- for calendar in [fooCalendar, barCalendar]:
- yield initialize(
- agent, host, port, user, password, root, principal, calendar)
-
- fooURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
- host, port, user, fooCalendar)
- barURI = 'http://%s:%d/calendars/__uids__/%s/%s/some-event.ics' % (
- host, port, user, barCalendar)
-
- # Create the event that will move around
- headers = Headers({"content-type": ["text/calendar"]})
- yield agent.request(
- 'PUT', fooURI, headers,
- StringProducer(makeEvent(1, organizerSequence, attendeeCount)))
-
- # Move it around sooo much
- source = cycle([fooURI, barURI])
- dest = cycle([barURI, fooURI])
-
- params = (
- ('MOVE', source.next(),
- Headers({"destination": [dest.next()], "overwrite": ["F"]}))
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, CREATED)
- returnValue(samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_calendars.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_calendars.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_calendars.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,104 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import MULTI_STATUS
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import CalDAVAccount, sample
-
-PROPFIND = """\
-<?xml version="1.0" encoding="utf-8"?>
-<x0:propfind xmlns:x0="DAV:" xmlns:x3="http://apple.com/ns/ical/" xmlns:x1="http://calendarserver.org/ns/" xmlns:x2="urn:ietf:params:xml:ns:caldav">
- <x0:prop>
- <x1:xmpp-server/>
- <x1:xmpp-uri/>
- <x1:getctag/>
- <x0:displayname/>
- <x2:calendar-description/>
- <x3:calendar-color/>
- <x3:calendar-order/>
- <x2:supported-calendar-component-set/>
- <x0:resourcetype/>
- <x0:owner/>
- <x2:calendar-free-busy-set/>
- <x2:schedule-calendar-transp/>
- <x2:schedule-default-calendar-URL/>
- <x0:quota-available-bytes/>
- <x0:quota-used-bytes/>
- <x2:calendar-timezone/>
- <x0:current-user-privilege-set/>
- <x1:source/>
- <x1:subscribed-strip-alarms/>
- <x1:subscribed-strip-attachments/>
- <x1:subscribed-strip-todos/>
- <x3:refreshrate/>
- <x1:push-transports/>
- <x1:pushkey/>
- <x1:publish-url/>
- </x0:prop>
-</x0:propfind>
-"""
-
- at inlineCallbacks
-def measure(host, port, dtrace, numCalendars, samples):
- # There's already the "calendar" calendar
- numCalendars -= 1
-
- user = password = "user10"
- root = "/"
- principal = "/"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Create the number of calendars necessary
- account = CalDAVAccount(
- agent,
- "%s:%d" % (host, port),
- user=user, password=password,
- root=root, principal=principal)
- cal = "/calendars/users/%s/propfind-%%d/" % (user,)
- for i in range(numCalendars):
- yield account.makeCalendar(cal % (i,))
-
- body = StringProducer(PROPFIND)
- params = (
- ('PROPFIND', 'http://%s:%d/calendars/__uids__/%s/' % (host, port, user),
- Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
-
- # Delete the calendars we created to leave the server in roughly
- # the same state as we found it.
- for i in range(numCalendars):
- yield account.deleteResource(cal % (i,))
-
- returnValue(samples)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_events.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_events.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/find_events.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,89 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 itertools import count
-from urllib2 import HTTPDigestAuthHandler
-
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import MULTI_STATUS
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-
-from benchlib import CalDAVAccount, sample
-from event import makeEvent
-
-PROPFIND = """\
-<?xml version="1.0" encoding="utf-8"?>
-<x0:propfind xmlns:x0="DAV:" xmlns:x1="http://calendarserver.org/ns/">
- <x0:prop>
- <x0:getetag/>
- <x0:resourcetype/>
- <x1:notificationtype/>
- </x0:prop>
-</x0:propfind>
-"""
-
- at inlineCallbacks
-def measure(host, port, dtrace, numEvents, samples):
- user = password = "user11"
- root = "/"
- principal = "/"
-
- uri = "http://%s:%d/" % (host, port)
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri=uri,
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # Create the number of calendars necessary
- account = CalDAVAccount(
- agent,
- "%s:%d" % (host, port),
- user=user, password=password,
- root=root, principal=principal)
- cal = "/calendars/users/%s/find-events/" % (user,)
- yield account.makeCalendar(cal)
-
- # Create the indicated number of events on the calendar
- for i in range(numEvents):
- event = makeEvent(i, 1, 0)
- yield agent.request(
- 'PUT',
- '%s%s%d.ics' % (uri, cal, i),
- Headers({"content-type": ["text/calendar"]}),
- StringProducer(event))
-
- body = StringProducer(PROPFIND)
- params = (
- ('PROPFIND',
- '%scalendars/__uids__/%s/find-events/' % (uri, user),
- Headers({"depth": ["1"], "content-type": ["text/xml"]}), body)
- for i in count(1))
-
- samples = yield sample(dtrace, samples, agent, params.next, MULTI_STATUS)
-
- # Delete the calendar we created to leave the server in roughly
- # the same state as we found it.
- yield account.deleteResource(cal)
-
- returnValue(samples)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/fix-units.sql
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/fix-units.sql 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/fix-units.sql 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,11 +19,11 @@
update codespeed_benchmark set units_title = 'Statements' where name like '%-SQLcount';
update codespeed_benchmark set units_title = 'Bytes' where name like '%-read';
update codespeed_benchmark set units_title = 'Bytes' where name like '%-write';
-update codespeed_benchmark set units_title = 'Bytes' where name like '%-pagein';
-update codespeed_benchmark set units_title = 'Bytes' where name like '%-pageout';
+update codespeed_benchmark set units_title = 'Pages' where name like '%-pagein';
+update codespeed_benchmark set units_title = 'Pages' where name like '%-pageout';
update codespeed_benchmark set units = 'statements' where name like '%-SQLcount';
update codespeed_benchmark set units = 'bytes' where name like '%-read';
update codespeed_benchmark set units = 'bytes' where name like '%-write';
-update codespeed_benchmark set units = 'bytes' where name like '%-pagein';
-update codespeed_benchmark set units = 'bytes' where name like '%-pageout';
+update codespeed_benchmark set units = 'pages' where name like '%-pagein';
+update codespeed_benchmark set units = 'pages' where name like '%-pageout';
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpauth.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpauth.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpauth.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -16,7 +16,9 @@
import urlparse, urllib2
+from twisted.python.log import msg
from twisted.web.http_headers import Headers
+from twisted.web.http import UNAUTHORIZED
# CalDAVClientLibrary
from protocol.http.authentication.digest import Digest
@@ -70,10 +72,15 @@
def request(self, method, uri, headers=None, bodyProducer=None):
+ return self._requestWithAuth(method, uri, headers, bodyProducer)
+
+
+ def _requestWithAuth(self, method, uri, headers, bodyProducer):
key = self._authKey(method, uri)
if key in self._challenged:
- return self._respondToChallenge(self._challenged[key], method, uri, headers, bodyProducer)
- d = self._agent.request(method, uri, headers, bodyProducer)
+ d = self._respondToChallenge(self._challenged[key], method, uri, headers, bodyProducer)
+ else:
+ d = self._agent.request(method, uri, headers, bodyProducer)
d.addCallback(self._authenticate, method, uri, headers, bodyProducer)
return d
@@ -102,11 +109,18 @@
def _authenticate(self, response, method, uri, headers, bodyProducer):
- if response.code == 401:
+ if response.code == UNAUTHORIZED:
+ if headers is None:
+ authorization = None
+ else:
+ authorization = headers.getRawHeaders('authorization')
+ msg("UNAUTHORIZED response to %s %s (Authorization=%r)" % (
+ method, uri, authorization))
# Look for a challenge
authorization = response.headers.getRawHeaders('www-authenticate')
if authorization is None:
- raise Exception("401 response with no WWW-Authenticate header")
+ raise Exception(
+ "UNAUTHORIZED response with no WWW-Authenticate header")
for auth in authorization:
challenge = self._parse(auth)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpclient.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpclient.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/httpclient.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,7 +21,9 @@
from twisted.internet.protocol import Protocol
from twisted.internet.defer import Deferred, succeed
from twisted.web.iweb import IBodyProducer
+from twisted.internet.interfaces import IConsumer
+
class _BufferReader(Protocol):
def __init__(self, finished):
self.finished = finished
@@ -50,6 +52,9 @@
implements(IBodyProducer)
def __init__(self, body):
+ if not isinstance(body, str):
+ raise TypeError(
+ "StringProducer body must be str, not %r" % (type(body),))
self._body = body
self.length = len(self._body)
@@ -57,3 +62,21 @@
def startProducing(self, consumer):
consumer.write(self._body)
return succeed(None)
+
+
+
+class MemoryConsumer(object):
+ implements(IConsumer)
+
+ def __init__(self):
+ self._buffer = []
+
+
+ def write(self, bytes):
+ self._buffer.append(bytes)
+
+
+ def value(self):
+ if len(self._buffer) > 1:
+ self._buffer = ["".join(self._buffer)]
+ return "".join(self._buffer)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/config.plist (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/config.plist)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/config.plist (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/config.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2011 Apple Inc. All 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.
+ -->
+
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+
+ <key>server</key>
+ <dict>
+ <key>host</key>
+ <string>127.0.0.1</string>
+
+ <key>port</key>
+ <integer>8008</integer>
+ </dict>
+
+ <key>arrival</key>
+ <dict>
+ <key>factory</key>
+ <string>loadtest.population.SmoothRampUp</string>
+
+ <key>groups</key>
+ <integer>60</integer>
+
+ <key>groupSize</key>
+ <integer>1</integer>
+
+ <key>interval</key>
+ <integer>13</integer>
+
+ </dict>
+
+ <key>clients</key>
+ <array>
+ <dict>
+ <key>software</key>
+ <string>loadtest.ical.SnowLeopard</string>
+
+ <key>profiles</key>
+ <array>
+ <string>loadtest.profiles.Eventer</string>
+ <string>loadtest.profiles.Inviter</string>
+ <string>loadtest.profiles.Accepter</string>
+ </array>
+
+ <key>weight</key>
+ <integer>1</integer>
+ </dict>
+ </array>
+
+ <key>observers</key>
+ <array>
+ <string>loadtest.population.ReportStatistics</string>
+ </array>
+
+ </dict>
+</plist>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/ical.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/ical.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/ical.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -15,17 +15,24 @@
#
##
+from uuid import uuid4
from operator import getitem
-from pprint import pprint
+from pprint import pformat
+from datetime import datetime
from xml.etree import ElementTree
ElementTree.QName.__repr__ = lambda self: '<QName %r>' % (self.text,)
-from twisted.python.log import err, msg
+from vobject import readComponents
+from vobject.base import ContentLine
+from vobject.icalendar import VEvent, dateTimeToString
+
+from twisted.python.log import addObserver, err, msg
from twisted.python.filepath import FilePath
from twisted.internet.defer import Deferred, inlineCallbacks, returnValue
from twisted.internet.task import LoopingCall
from twisted.web.http_headers import Headers
+from twisted.web.http import OK, MULTI_STATUS, CREATED, NO_CONTENT
from twisted.web.client import Agent
from protocol.webdav.propfindparser import PropFindParser
@@ -36,36 +43,105 @@
from httpclient import StringProducer, readBody
from httpauth import AuthHandlerAgent
+from subscribe import Periodical
+
def loadRequestBody(label):
return FilePath(__file__).sibling('request-data').child(label + '.request').getContent()
SUPPORTED_REPORT_SET = '{DAV:}supported-report-set'
+class IncorrectResponseCode(Exception):
+ """
+ Raised when a response has a code other than the one expected.
+ @ivar expected: The response code which was expected.
+ @type expected: C{int}
+
+ @ivar response: The response which was received
+ @type response: L{twisted.web.client.Response}
+ """
+ def __init__(self, expected, response):
+ self.expected = expected
+ self.response = response
+
+
+
class Event(object):
- def __init__(self, url, etag):
+ def __init__(self, url, etag, vevent=None):
self.url = url
self.etag = etag
+ self.scheduleTag = None
+ self.vevent = vevent
+ def getUID(self):
+ """
+ Return the UID from the vevent, if there is one.
+ """
+ if self.vevent is not None:
+ uid = self.vevent.contents['vevent'][0].contents['uid'][0]
+ return uid.value
+ return None
+
+
+
class Calendar(object):
def __init__(self, resourceType, name, url, ctag):
self.resourceType = resourceType
self.name = name
self.url = url
self.ctag = ctag
+ self.events = {}
-class SnowLeopard(object):
+class BaseClient(object):
+ user = None
+ _events = None
+ _calendars = None
+
+ def _setEvent(self, href, event):
+ self._events[href] = event
+ calendar, uid = href.rsplit('/', 1)
+ self._calendars[calendar + '/'].events[uid] = event
+
+
+ def addEvent(self, href, vcalendar):
+ raise NotImplementedError("%r does not implement addEvent" % (self.__class__,))
+
+
+ def deleteEvent(self, href):
+ raise NotImplementedError("%r does not implement deleteEvent" % (self.__class__,))
+
+
+ def addEventAttendee(self, href, attendee):
+ raise NotImplementedError("%r does not implement addEventAttendee" % (self.__class__,))
+
+
+ def changeEventAttendee(self, href, oldAttendee, newAttendee):
+ raise NotImplementedError("%r does not implement changeEventAttendee" % (self.__class__,))
+
+
+
+class SnowLeopard(BaseClient):
"""
Implementation of the SnowLeopard iCal network behavior.
+
+ Anything SnowLeopard iCal does on its own, or any particular
+ network behaviors it takes in response to a user action, belong on
+ this class.
+
+ Usage-profile based behaviors ("the user modifies an event every
+ 3.2 minutes") belong elsewhere.
"""
USER_AGENT = "DAVKit/4.0.3 (732); CalendarStore/4.0.3 (991); iCal/4.0.3 (1388); Mac OS X/10.6.4 (10F569)"
- CALENDAR_HOME_POLL_INTERVAL = 15 * 60
+ # The default interval, used if none is specified in external
+ # configuration. This is also the actual value used by Snow
+ # Leopard iCal.
+ CALENDAR_HOME_POLL_INTERVAL = 60 * 15
_STARTUP_PRINCIPAL_PROPFIND = loadRequestBody('sl_startup_principal_propfind')
_STARTUP_PRINCIPALS_REPORT = loadRequestBody('sl_startup_principals_report')
@@ -76,13 +152,21 @@
_CALENDAR_PROPFIND = loadRequestBody('sl_calendar_propfind')
_CALENDAR_REPORT = loadRequestBody('sl_calendar_report')
+ _USER_LIST_PRINCIPAL_PROPERTY_SEARCH = loadRequestBody('sl_user_list_principal_property_search')
+ _POST_AVAILABILITY = loadRequestBody('sl_post_availability')
- def __init__(self, reactor, host, port, user, auth):
+ email = None
+
+ def __init__(self, reactor, host, port, user, auth, calendarHomePollInterval=None):
self.reactor = reactor
self.agent = AuthHandlerAgent(Agent(self.reactor), auth)
self.root = 'http://%s:%d/' % (host, port)
self.user = user
+ if calendarHomePollInterval is None:
+ calendarHomePollInterval = self.CALENDAR_HOME_POLL_INTERVAL
+ self.calendarHomePollInterval = calendarHomePollInterval
+
# Keep track of the calendars on this account, keys are
# Calendar URIs, values are Calendar instances.
self._calendars = {}
@@ -93,19 +177,40 @@
# part of), values are Event instances.
self._events = {}
+ # Allow events to go out into the world.
+ self.catalog = {
+ "eventChanged": Periodical(),
+ }
- def _request(self, method, url, headers, body):
- # XXX Do return code checking here.
+
+ def _request(self, expectedResponseCode, method, url, headers=None, body=None):
+ if headers is None:
+ headers = Headers({})
headers.setRawHeaders('User-Agent', [self.USER_AGENT])
+ msg(type="request", method=method, url=url, user=self.user)
d = self.agent.request(method, url, headers, body)
before = self.reactor.seconds()
- def report(passthrough):
- after = self.reactor.seconds()
+ def report(response):
# XXX This is time to receive response headers, not time
# to receive full response. Should measure the latter, if
# not both.
- msg(type="request", duration=(after - before), url=url)
- return passthrough
+ after = self.reactor.seconds()
+
+ # XXX If the response code is wrong, there's probably not
+ # point passing the response down the callback chain.
+ # errback?
+ success = response.code == expectedResponseCode
+
+ # if not success:
+ # import pdb; pdb.set_trace()
+ msg(
+ type="response", success=success, method=method,
+ headers=headers, body=body,
+ duration=(after - before), url=url)
+
+ if success:
+ return response
+ raise IncorrectResponseCode(expectedResponseCode, response)
d.addCallback(report)
return d
@@ -162,6 +267,7 @@
"""
principalURL = '/principals/__uids__/' + user + '/'
d = self._request(
+ MULTI_STATUS,
'PROPFIND',
self.root + principalURL[1:],
Headers({
@@ -170,7 +276,9 @@
StringProducer(self._STARTUP_PRINCIPAL_PROPFIND))
d.addCallback(readBody)
d.addCallback(self._parseMultiStatus)
- d.addCallback(getitem, principalURL)
+ def get(result):
+ return result[principalURL]
+ d.addCallback(get)
return d
@@ -178,6 +286,7 @@
if principalCollectionSet.startswith('/'):
principalCollectionSet = principalCollectionSet[1:]
d = self._request(
+ OK,
'REPORT',
self.root + principalCollectionSet,
Headers({
@@ -194,6 +303,7 @@
if not calendarHomeSet.endswith('/'):
calendarHomeSet = calendarHomeSet + '/'
d = self._request(
+ MULTI_STATUS,
'PROPFIND',
self.root + calendarHomeSet,
Headers({
@@ -214,13 +324,12 @@
# First do a PROPFIND on the calendar to learn about events it
# might have.
response = yield self._request(
+ MULTI_STATUS,
'PROPFIND',
self.root + url,
Headers({'content-type': ['text/xml'], 'depth': ['1']}),
StringProducer(self._CALENDAR_PROPFIND))
- # XXX Check the response status code
-
body = yield readBody(response)
result = self._parseMultiStatus(body)
@@ -228,22 +337,44 @@
if responseHref == calendar.url:
continue
- etag = result[responseHref].getTextProperties()[davxml.getetag]
+ try:
+ etag = result[responseHref].getTextProperties()[davxml.getetag]
+ except KeyError:
+ # XXX Ignore things with no etag? Seems to be dropbox.
+ continue
+
if responseHref not in self._events:
- self._events[responseHref] = Event(responseHref, None)
-
- if self._events[responseHref].etag != etag:
- response = yield self._updateEvent(url, responseHref)
+ self._setEvent(responseHref, Event(responseHref, None))
+
+ event = self._events[responseHref]
+ if event.etag != etag:
+ response = yield self._eventReport(url, responseHref)
body = yield readBody(response)
- result = self._parseMultiStatus(body)[responseHref]
- etag = result.getTextProperties()[davxml.getetag]
- self._events[responseHref].etag = etag
+ res = self._parseMultiStatus(body)[responseHref]
+ text = res.getTextProperties()
+ etag = text[davxml.getetag]
+ try:
+ scheduleTag = text[caldavxml.schedule_tag]
+ except KeyError:
+ scheduleTag = None
+ body = text[caldavxml.calendar_data]
+ self.eventChanged(responseHref, etag, scheduleTag, body)
+
+ def eventChanged(self, href, etag, scheduleTag, body):
+ event = self._events[href]
+ event.etag = etag
+ if scheduleTag is not None:
+ event.scheduleTag = scheduleTag
+ event.vevent = list(readComponents(body))[0]
+ self.catalog["eventChanged"].issue(href)
+
- def _updateEvent(self, calendar, event):
+ def _eventReport(self, calendar, event):
# Next do a REPORT on each event that might have information
# we don't know about.
return self._request(
+ MULTI_STATUS,
'REPORT',
self.root + calendar,
Headers({'content-type': ['text/xml']}),
@@ -256,8 +387,11 @@
for cal in calendars:
if self._calendars.setdefault(cal.url, cal).ctag != cal.ctag or True:
self._updateCalendar(cal)
- break
- d.addCallback(cbCalendars)
+ def ebCalendars(reason):
+ reason.trap(IncorrectResponseCode)
+ msg(type="aggregate", operation="poll", success=False)
+ d.addCallbacks(cbCalendars, ebCalendars)
+ d.addErrback(err, "Unexpected failure during calendar home poll")
return d
@@ -265,6 +399,7 @@
if notificationURL.startswith('/'):
notificationURL = notificationURL[1:]
d = self._request(
+ MULTI_STATUS,
'PROPFIND',
self.root + notificationURL,
Headers({
@@ -280,6 +415,7 @@
if principalURL.startswith('/'):
principalURL = principalURL[1:]
d = self._request(
+ OK,
'REPORT',
self.root + principalURL,
Headers({
@@ -294,8 +430,18 @@
def startup(self):
# Orient ourselves, or something
principal = yield self._principalPropfind(self.user)
+
hrefs = principal.getHrefProperties()
+ # Remember our own email-like principal address
+ for principalURL in hrefs[caldavxml.calendar_user_address_set]:
+ if principalURL.toString().startswith(u"mailto:"):
+ self.email = principalURL.toString()
+ elif principalURL.toString().startswith(u"urn:"):
+ self.uuid = principalURL.toString()
+ if self.email is None:
+ raise ValueError("Cannot operate without a mail-style principal URL")
+
# Do another kind of thing I guess
principalCollection = hrefs[davxml.principal_collection_set].toString()
(yield self._principalsReport(principalCollection))
@@ -313,6 +459,15 @@
returnValue(principal)
+ def _calendarCheckLoop(self, calendarHome):
+ """
+ Periodically check the calendar home for changes to calendars.
+ """
+ pollCalendarHome = LoopingCall(
+ self._checkCalendarsForEvents, calendarHome)
+ pollCalendarHome.start(self.calendarHomePollInterval)
+
+
@inlineCallbacks
def run(self):
"""
@@ -320,17 +475,198 @@
"""
principal = yield self.startup()
hrefs = principal.getHrefProperties()
+ self._calendarCheckLoop(hrefs[caldavxml.calendar_home_set].toString())
- # Poll Calendar Home (and notifications?) every 15 (or
- # whatever) minutes
- pollCalendarHome = LoopingCall(
- self._checkCalendarsForEvents,
- hrefs[caldavxml.calendar_home_set].toString())
- pollCalendarHome.start(self.CALENDAR_HOME_POLL_INTERVAL)
-
+ # XXX Oops, should probably stop sometime.
yield Deferred()
+ def _makeSelfAttendee(self):
+ attendee = ContentLine(
+ name=u'ATTENDEE', params=[
+ [u'CN', self.user],
+ [u'CUTYPE', u'INDIVIDUAL'],
+ [u'PARTSTAT', u'ACCEPTED'],
+ ],
+ value=self.uuid,
+ encoded=True)
+ attendee.parentBehavior = VEvent
+ return attendee
+
+
+ def _makeSelfOrganizer(self):
+ organizer = ContentLine(
+ name=u'ORGANIZER', params=[
+ [u'CN', self.user],
+ ],
+ value=self.uuid,
+ encoded=True)
+ organizer.parentBehavior = VEvent
+ return organizer
+
+
+ def addEventAttendee(self, href, attendee):
+ name = attendee.params[u'CN'][0].encode('utf-8')
+ prefix = name[:4].lower()
+ email = attendee.params[u'EMAIL'][0].encode('utf-8')
+
+ event = self._events[href]
+ vevent = event.vevent
+
+ # First try to discover some names to supply to the
+ # auto-completion
+ d = self._request(
+ MULTI_STATUS, 'REPORT', self.root + 'principals/',
+ Headers({'content-type': ['text/xml']}),
+ StringProducer(self._USER_LIST_PRINCIPAL_PROPERTY_SEARCH % {
+ 'displayname': prefix,
+ 'email': prefix,
+ 'firstname': prefix,
+ 'lastname': prefix,
+ }))
+ d.addCallback(readBody)
+ def narrowed(ignored):
+ # Next just learn about the one name we selected.
+ d = self._request(
+ MULTI_STATUS, 'REPORT', self.root + 'principals/',
+ Headers({'content-type': ['text/xml']}),
+ StringProducer(self._USER_LIST_PRINCIPAL_PROPERTY_SEARCH % {
+ 'displayname': name,
+ 'email': name,
+ 'firstname': name,
+ 'lastname': name,
+ }))
+ d.addCallback(readBody)
+ return d
+ d.addCallback(narrowed)
+ def specific(ignored):
+ # Now learn about the attendee's availability
+ uid = vevent.contents[u'vevent'][0].contents[u'uid'][0].value
+ start = vevent.contents[u'vevent'][0].contents[u'dtstart'][0].value
+ end = vevent.contents[u'vevent'][0].contents[u'dtend'][0].value
+ now = datetime.now()
+ d = self._request(
+ OK, 'POST', self.root + 'calendars/__uids__/' + self.user + '/outbox/',
+ Headers({
+ 'content-type': ['text/calendar'],
+ 'originator': [self.email],
+ 'recipient': ['mailto:' + email]}),
+ StringProducer(self._POST_AVAILABILITY % {
+ 'attendee': 'mailto:' + email,
+ 'organizer': self.email,
+ 'vfreebusy-uid': str(uuid4()).upper(),
+ 'event-uid': uid.encode('utf-8'),
+ 'start': dateTimeToString(start, convertToUTC=True),
+ 'end': dateTimeToString(end, convertToUTC=True),
+ 'now': dateTimeToString(now, convertToUTC=True)}))
+ d.addCallback(readBody)
+ return d
+ d.addCallback(specific)
+ def availability(ignored):
+ # If the event has no attendees, add ourselves as an attendee.
+ attendees = vevent.contents[u'vevent'][0].contents.setdefault(u'attendee', [])
+ if len(attendees) == 0:
+ # First add ourselves as a participant and as the
+ # organizer. In the future for this event we should
+ # already have those roles.
+ attendees.append(self._makeSelfAttendee())
+ vevent.contents[u'vevent'][0].contents[u'organizer'] = [self._makeSelfOrganizer()]
+ attendees.append(attendee)
+
+ # At last, upload the new event definition
+ d = self._request(
+ NO_CONTENT, 'PUT', self.root + href[1:].encode('utf-8'),
+ Headers({
+ 'content-type': ['text/calendar'],
+ 'if-match': [event.etag]}),
+ StringProducer(vevent.serialize()))
+ return d
+ d.addCallback(availability)
+ # Finally, re-retrieve the event to update the etag
+ d.addCallback(self._updateEvent, href)
+ return d
+
+
+ def changeEventAttendee(self, href, oldAttendee, newAttendee):
+ event = self._events[href]
+ vevent = event.vevent
+
+ # Change the event to have the new attendee instead of the old attendee
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ attendees.remove(oldAttendee)
+ attendees.append(newAttendee)
+ headers = Headers({
+ 'content-type': ['text/calendar'],
+ })
+ if event.scheduleTag is not None:
+ headers.addRawHeader('if-schedule-tag-match', event.scheduleTag)
+
+ d = self._request(
+ NO_CONTENT, 'PUT', self.root + href[1:].encode('utf-8'),
+ headers, StringProducer(vevent.serialize()))
+ d.addCallback(self._updateEvent, href)
+ return d
+
+
+ def deleteEvent(self, href):
+ """
+ Issue a DELETE for the given URL and remove local state
+ associated with that event.
+ """
+ d = self._request(
+ NO_CONTENT, 'DELETE', self.root + href[1:].encode('utf-8'))
+
+ calendar, uid = href.rsplit('/', 1)
+ del self._events[href]
+ del self._calendars[calendar + u'/'].events[uid]
+
+ return d
+
+
+ def addEvent(self, href, vcalendar):
+ headers = Headers({
+ 'content-type': ['text/calendar'],
+ })
+ d = self._request(
+ CREATED, 'PUT', self.root + href[1:].encode('utf-8'),
+ headers, StringProducer(vcalendar.serialize()))
+ d.addCallback(self._localUpdateEvent, href, vcalendar)
+ return d
+
+
+ def _localUpdateEvent(self, response, href, vcalendar):
+ headers = response.headers
+ etag = headers.getRawHeaders("etag", [None])[0]
+ scheduleTag = headers.getRawHeaders("schedule-tag", [None])[0]
+
+ event = Event(href, etag, vcalendar)
+ event.scheduleTag = scheduleTag
+ self._setEvent(href, event)
+
+
+ def _updateEvent(self, ignored, href):
+ d = self._request(OK, 'GET', self.root + href[1:].encode('utf-8'))
+ def getETag(response):
+ headers = response.headers
+ etag = headers.getRawHeaders('etag')[0]
+ scheduleTag = headers.getRawHeaders('schedule-tag', [None])[0]
+ return readBody(response).addCallback(
+ lambda body: (etag, scheduleTag, body))
+ d.addCallback(getETag)
+ def record((etag, scheduleTag, body)):
+ self.eventChanged(href, etag, scheduleTag, body)
+ d.addCallback(record)
+ return d
+
+
+
+class RequestLogger(object):
+ def observe(self, event):
+ if event.get("type") == "request":
+ print event["user"], event["method"], event["url"]
+
+
+
def main():
from urllib2 import HTTPDigestAuthHandler
from twisted.internet import reactor
@@ -340,6 +676,9 @@
uri="http://127.0.0.1:8008/",
user="user01",
passwd="user01")
+
+ addObserver(RequestLogger().observe)
+
client = SnowLeopard(reactor, '127.0.0.1', 8008, 'user01', auth)
d = client.run()
d.addErrback(err, "Snow Leopard client run() problem")
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/population.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/population.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/population.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -22,20 +22,58 @@
from itertools import izip
+from twisted.python.util import FancyEqMixin
+from twisted.python.log import msg, err
+
from stats import mean, median, stddev, mad
-from loadtest.ical import SnowLeopard
+from loadtest.ical import SnowLeopard, RequestLogger
+from loadtest.profiles import Eventer, Inviter, Accepter
-class PopulationParameters(object):
+class ClientType(object, FancyEqMixin):
"""
+ @ivar clientType: An L{ICalendarClient} implementation
+ @ivar profileTypes: A list of L{ICalendarUserProfile} implementations
+ """
+ compareAttributes = ("clientType", "profileTypes")
+
+ def __init__(self, clientType, profileTypes):
+ self.clientType = clientType
+ self.profileTypes = profileTypes
+
+
+
+class PopulationParameters(object, FancyEqMixin):
+ """
Descriptive statistics about a population of Calendar Server users.
"""
+ compareAttributes = ("clients",)
+
+ def __init__(self):
+ self.clients = []
+
+
+ def addClient(self, weight, clientType):
+ """
+ Add another type of client to these parameters.
+
+ @param weight: A C{int} giving the weight of this client type.
+ The higher the weight, the more frequently a client of
+ this type will show up in the population described by
+ these parameters.
+
+ @param clientType: A L{ClientType} instance describing the
+ type of client to add.
+ """
+ self.clients.append((weight, clientType))
+
+
def clientTypes(self):
"""
Return a list of two-tuples giving the weights and types of
clients in the population.
"""
- return [(1, SnowLeopard)]
+ return self.clients
@@ -66,7 +104,7 @@
population with the given parameters.
@type parameters: L{PopulationParameters}
- @rtype: generator of L{ICalendarClient} providers
+ @rtype: generator of L{ClientType} instances
"""
for (clientType,) in izip(self._cycle(parameters.clientTypes())):
yield clientType
@@ -83,14 +121,19 @@
self._user = 1
- def _nextUser(self):
+ def _nextUserNumber(self):
+ result = self._user
+ self._user += 1
+ return result
+
+
+ def _createUser(self, number):
from urllib2 import HTTPDigestAuthHandler
- user = "user%02d" % (self._user,)
- self._user += 1
+ user = "user%02d" % (number,)
auth = HTTPDigestAuthHandler()
auth.add_password(
realm="Test Realm",
- uri="http://127.0.0.1:8008/",
+ uri="http://%s:%d/" % (self.host, self.port),
user=user,
passwd=user)
return user, auth
@@ -98,28 +141,125 @@
def add(self, numClients):
for n in range(numClients):
- user, auth = self._nextUser()
- client = self._pop.next()(self.reactor, self.host, self.port, user, auth)
- client.run()
- print 'Now running', self._user, 'clients.'
+ number = self._nextUserNumber()
+ user, auth = self._createUser(number)
+ clientType = self._pop.next()
+ client = clientType.clientType(
+ self.reactor, self.host, self.port, user, auth)
+ d = client.run()
+ d.addCallbacks(self._clientSuccess, self._clientFailure)
+ for profileType in clientType.profileTypes:
+ profileType(self.reactor, client, number).run()
+ msg(type="status", clientCount=self._user - 1)
-class Statistics(object):
+
+ def _clientSuccess(self, result):
+ pass
+
+
+ def _clientFailure(self, reason):
+ err(reason, "Client stopped with error")
+
+
+
+class SmoothRampUp(object):
+ def __init__(self, reactor, groups, groupSize, interval):
+ self.reactor = reactor
+ self.groups = groups
+ self.groupSize = groupSize
+ self.interval = interval
+
+
+ def run(self, simulator):
+ for i in range(self.groups):
+ self.reactor.callLater(
+ self.interval * i, simulator.add, self.groupSize)
+
+
+
+class StatisticsBase(object):
+ def observe(self, event):
+ if event.get('type') == 'response':
+ self.eventReceived(event)
+
+
+ def report(self):
+ pass
+
+
+
+class SimpleStatistics(StatisticsBase):
def __init__(self):
self._times = []
- def observe(self, event):
- if event.get('type') == 'request':
- self._times.append(event['duration'])
- if len(self._times) == 200:
- print 'mean:', mean(self._times)
- print 'median:', median(self._times)
- print 'stddev:', stddev(self._times)
- print 'mad:', mad(self._times)
- del self._times[:100]
-
+ def eventReceived(self, event):
+ self._times.append(event['duration'])
+ if len(self._times) == 200:
+ print 'mean:', mean(self._times)
+ print 'median:', median(self._times)
+ print 'stddev:', stddev(self._times)
+ print 'mad:', mad(self._times)
+ del self._times[:100]
+
+
+
+class ReportStatistics(StatisticsBase):
+ _fields = [
+ ('operation', 10, '%10s'),
+ ('count', 8, '%8s'),
+ ('failed', 8, '%8s'),
+ ('>3sec', 8, '%8s'),
+ ('mean', 8, '%8.4f'),
+ ('median', 8, '%8.4f'),
+ ]
+
+ def __init__(self):
+ self._perMethodTimes = {}
+
+
+ def eventReceived(self, event):
+ dataset = self._perMethodTimes.setdefault(event['method'], [])
+ dataset.append((event['success'], event['duration']))
+
+
+ def _printHeader(self):
+ format = []
+ labels = []
+ for (label, width, fmt) in self._fields:
+ format.append('%%%ds' % (width,))
+ labels.append(label)
+ print ''.join(format) % tuple(labels)
+
+
+ def _summarizeData(self, method, data):
+ failed = 0
+ threesec = 0
+ durations = []
+ for (success, duration) in data:
+ if not success:
+ failed += 1
+ if duration > 3:
+ threesec += 1
+ durations.append(duration)
+
+ return method, len(data), failed, threesec, mean(durations), median(durations)
+
+
+ def _printData(self, *values):
+ format = ''.join(fmt for (label, width, fmt) in self._fields)
+ print format % values
+
+
+ def report(self):
+ print
+ self._printHeader()
+ for method, data in self._perMethodTimes.iteritems():
+ self._printData(*self._summarizeData(method, data))
+
+
def main():
import random
@@ -127,21 +267,28 @@
from twisted.internet.task import LoopingCall
from twisted.python.log import addObserver
- addObserver(Statistics().observe)
+ from twisted.python.failure import startDebugMode
+ startDebugMode()
+ report = ReportStatistics()
+ addObserver(SimpleStatistics().observe)
+ addObserver(report.observe)
+ addObserver(RequestLogger().observe)
+
r = random.Random()
r.seed(100)
populator = Populator(r)
parameters = PopulationParameters()
+ parameters.addClient(
+ 1, ClientType(SnowLeopard, [Eventer, Inviter, Accepter]))
simulator = CalendarClientSimulator(
populator, parameters, reactor, '127.0.0.1', 8008)
- # Add some clients.
- call = LoopingCall(simulator.add, 1)
- call.start(3)
- reactor.callLater(3 * 90, call.stop)
+ arrivalPolicy = SmoothRampUp(groups=10, groupSize=1, interval=3)
+ arrivalPolicy.run(reactor, simulator)
reactor.run()
+ report.report()
if __name__ == '__main__':
main()
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/profiles.py (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/profiles.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/profiles.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/profiles.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,293 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+#
+##
+
+"""
+Implementation of specific end-user behaviors.
+"""
+
+import random
+from uuid import uuid4
+
+from datetime import datetime, timedelta
+
+from vobject import readComponents
+from vobject.base import Component, ContentLine
+from vobject.icalendar import VEvent
+
+from protocol.caldav.definitions import caldavxml
+
+from twisted.python.log import msg
+from twisted.internet.defer import succeed, fail
+from twisted.internet.task import LoopingCall
+
+
+class ProfileBase(object):
+ """
+ Base class which provides some conveniences for profile
+ implementations.
+ """
+ random = random
+
+ def __init__(self, reactor, client, userNumber):
+ self._reactor = reactor
+ self._client = client
+ self._number = userNumber
+
+
+ def _calendarsOfType(self, calendarType):
+ return [
+ cal
+ for cal
+ in self._client._calendars.itervalues()
+ if cal.resourceType == calendarType]
+
+
+class CannotAddAttendee(Exception):
+ """
+ Indicates no new attendees can be invited to a particular event.
+ """
+
+
+
+class Inviter(ProfileBase):
+ """
+ A Calendar user who invites and de-invites other users to events.
+ """
+ def run(self):
+ self._call = LoopingCall(self._invite)
+ self._call.clock = self._reactor
+ # XXX Base this on something real
+ self._call.start(20)
+
+
+ def _addAttendee(self, event, attendees):
+ """
+ Create a new attendee to add to the list of attendees for the
+ given event.
+ """
+ invitees = set([u'urn:uuid:user%02d' % (self._number,)])
+ for att in attendees:
+ invitees.add(att.value)
+
+ for i in range(10):
+ invitee = max(1, int(self.random.gauss(self._number, 3)))
+ uuid = u'urn:uuid:user%02d' % (invitee,)
+ if uuid not in invitees:
+ break
+ else:
+ return fail(CannotAddAttendee("Can't find uninvited user to invite."))
+
+ user = u'User %02d' % (invitee,)
+ email = u'user%02d at example.com' % (invitee,)
+
+ attendee = ContentLine(
+ name=u'ATTENDEE', params=[
+ [u'CN', user],
+ [u'CUTYPE', u'INDIVIDUAL'],
+ [u'EMAIL', email],
+ [u'PARTSTAT', u'NEEDS-ACTION'],
+ [u'ROLE', u'REQ-PARTICIPANT'],
+ [u'RSVP', u'TRUE'],
+ # [u'SCHEDULE-STATUS', u'1.2'],
+ ],
+ value=uuid,
+ encoded=True)
+ attendee.parentBehavior = VEvent
+
+ return succeed(attendee)
+
+
+ def _invite(self):
+ """
+ Try to add a new attendee to an event, or perhaps remove an
+ existing attendee from an event.
+
+ @return: C{None} if there are no events to play with,
+ otherwise a L{Deferred} which fires when the attendee
+ change has been made.
+ """
+ # Find calendars which are eligible for invites
+ calendars = self._calendarsOfType(caldavxml.calendar)
+
+ while calendars:
+ # Pick one at random from which to try to select an event
+ # to modify.
+ calendar = self.random.choice(calendars)
+ calendars.remove(calendar)
+
+ if not calendar.events:
+ continue
+
+ events = calendar.events.keys()
+ while events:
+ uuid = self.random.choice(events)
+ events.remove(uuid)
+ event = calendar.events[uuid].vevent
+ if event is None:
+ continue
+
+ href = calendar.url + uuid
+
+ # Find out who might attend
+ attendees = event.contents['vevent'][0].contents.get('attendee', [])
+
+ d = self._addAttendee(event, attendees)
+ d.addCallbacks(
+ lambda attendee:
+ self._client.addEventAttendee(
+ href, attendee),
+ lambda reason: reason.trap(CannotAddAttendee))
+ return d
+
+
+
+class Accepter(ProfileBase):
+ """
+ A Calendar user who accepts invitations to events.
+ """
+
+ def __init__(self, reactor, client, userNumber):
+ ProfileBase.__init__(self, reactor, client, userNumber)
+ self._accepting = set()
+
+
+ def run(self):
+ self._subscription = self._client.catalog["eventChanged"].subscribe(self.eventChanged)
+
+
+ def eventChanged(self, href):
+ # Just respond to normal calendar events
+ calendar = href.rsplit('/', 1)[0] + '/'
+ try:
+ calendar = self._client._calendars[calendar]
+ except KeyError:
+ return
+ if calendar.resourceType != caldavxml.calendar:
+ return
+ if href in self._accepting:
+ return
+
+ vevent = self._client._events[href].vevent
+ # Check to see if this user is in the attendee list in the
+ # NEEDS-ACTION PARTSTAT.
+ attendees = vevent.contents['vevent'][0].contents.get('attendee', [])
+ for attendee in attendees:
+ if attendee.params[u'EMAIL'][0] == self._client.email[len('mailto:'):]:
+ if attendee.params[u'PARTSTAT'][0] == 'NEEDS-ACTION':
+ # XXX Base this on something real
+ delay = self.random.gauss(10, 2)
+ self._accepting.add(href)
+ self._reactor.callLater(
+ delay, self._acceptInvitation, href, attendee)
+ return
+
+
+ def _acceptInvitation(self, href, attendee):
+ self._accepting.remove(href)
+ accepted = self._makeAcceptedAttendee(attendee)
+ d = self._client.changeEventAttendee(href, attendee, accepted)
+ def accepted(ignored):
+ # Find the corresponding event in the inbox and delete it.
+ uid = self._client._events[href].getUID()
+ for cal in self._client._calendars.itervalues():
+ if cal.resourceType == caldavxml.schedule_inbox:
+ for event in cal.events.itervalues():
+ if uid == event.getUID():
+ return self._client.deleteEvent(event.url)
+ d.addCallback(accepted)
+ return d
+
+
+ def _makeAcceptedAttendee(self, attendee):
+ accepted = ContentLine.duplicate(attendee)
+ accepted.params[u'PARTSTAT'] = [u'ACCEPTED']
+ try:
+ del accepted.params[u'RSVP']
+ except KeyError:
+ msg("Duplicated an attendee with no RSVP: %r" % (attendee,))
+ return accepted
+
+
+
+class Eventer(ProfileBase):
+ """
+ A Calendar user who creates new events.
+ """
+ _eventTemplate = list(readComponents("""\
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:EDT
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:EST
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20101018T155431Z
+UID:C98AD237-55AD-4F7D-9009-0D355D835822
+DTEND;TZID=America/New_York:20101021T130000
+TRANSP:OPAQUE
+SUMMARY:Simple event
+DTSTART;TZID=America/New_York:20101021T120000
+DTSTAMP:20101018T155438Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+"""))[0]
+
+ def run(self):
+ self._call = LoopingCall(self._addEvent)
+ self._call.clock = self._reactor
+ # XXX Base this on something real
+ self._call.start(25)
+
+
+ def _addEvent(self):
+ calendars = self._calendarsOfType(caldavxml.calendar)
+
+ while calendars:
+ calendar = self.random.choice(calendars)
+ calendars.remove(calendar)
+
+ # Copy the template event and fill in some of its fields
+ # to make a new event to create on the calendar.
+ vcalendar = Component.duplicate(self._eventTemplate)
+ vevent = vcalendar.contents[u'vevent'][0]
+ tz = vevent.contents[u'created'][0].value.tzinfo
+ dtstamp = datetime.now(tz)
+ vevent.contents[u'created'][0].value = dtstamp
+ vevent.contents[u'dtstamp'][0].value = dtstamp
+ vevent.contents[u'dtstart'][0].value = dtstamp
+ vevent.contents[u'dtend'][0].value = dtstamp + timedelta(hours=1)
+ vevent.contents[u'uid'][0].value = unicode(uuid4())
+
+ href = '%s%s.ics' % (
+ calendar.url, vevent.contents[u'uid'][0].value)
+ return self._client.addEvent(href, vcalendar)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_post_availability.request (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_post_availability.request)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_post_availability.request (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_post_availability.request 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+VERSION:2.0
+METHOD:REQUEST
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+BEGIN:VFREEBUSY
+UID:%(vfreebusy-uid)s
+DTEND:%(end)s
+ATTENDEE:%(attendee)s
+DTSTART:%(start)s
+X-CALENDARSERVER-MASK-UID:%(event-uid)s
+DTSTAMP:%(now)s
+ORGANIZER:%(organizer)s
+SUMMARY:Availability for %(attendee)s
+END:VFREEBUSY
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_user_list_principal_property_search.request (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_user_list_principal_property_search.request)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_user_list_principal_property_search.request (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/request-data/sl_user_list_principal_property_search.request 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<x0:principal-property-search xmlns:x2="urn:ietf:params:xml:ns:caldav" xmlns:x0="DAV:" xmlns:x1="http://calendarserver.org/ns/" test="anyof"><x0:property-search><x0:prop><x0:displayname/></x0:prop><x0:match match-type="starts-with">%(displayname)s</x0:match></x0:property-search><x0:property-search><x0:prop><x1:email-address-set/></x0:prop><x0:match match-type="starts-with">%(email)s</x0:match></x0:property-search><x0:property-search><x0:prop><x1:first-name/></x0:prop><x0:match match-type="starts-with">%(firstname)s</x0:match></x0:property-search><x0:property-search><x0:prop><x1:last-name/></x0:prop><x0:match match-type="starts-with">%(lastname)s</x0:match></x0:property-search><x0:prop><x1:email-address-set/><x2:calendar-user-address-set/><x2:calendar-user-type/><x0:displayname/><x1:last-name/><x1:first-name/><x1:record-type/><x0:principal-URL/></x0:prop></x0:principal-property-search>
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/sim.py (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/sim.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/sim.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/sim.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,184 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 sys import argv
+from random import Random
+from plistlib import readPlist
+from collections import namedtuple
+
+from twisted.python.filepath import FilePath
+from twisted.python.log import addObserver
+from twisted.python.usage import UsageError, Options
+from twisted.python.reflect import namedAny
+
+from loadtest.ical import SnowLeopard
+from loadtest.profiles import Eventer, Inviter, Accepter
+from loadtest.population import (
+ Populator, ClientType, PopulationParameters, SmoothRampUp,
+ CalendarClientSimulator)
+
+
+class SimOptions(Options):
+ """
+ Command line configuration options for the load simulator.
+ """
+ config = None
+
+ def opt_config(self, path):
+ """
+ ini-syntax configuration file from which to read simulation
+ parameters.
+ """
+ try:
+ configFile = FilePath(path).open()
+ except IOError, e:
+ raise UsageError("--config %s: %s" % (path, e.strerror))
+ try:
+ self.config = readPlist(configFile)
+ except Exception, e:
+ raise UsageError(
+ "--config %s: %s" % (path, str(e)))
+
+
+ def opt_debug(self):
+ """
+ Enable Deferred and Failure debugging.
+ """
+ self.opt_debug_deferred()
+ self.opt_debug_failure()
+
+
+ def opt_debug_deferred(self):
+ """
+ Enable Deferred debugging.
+ """
+ from twisted.internet.defer import setDebugging
+ setDebugging(True)
+
+
+ def opt_debug_failure(self):
+ """
+ Enable Failure debugging.
+ """
+ from twisted.python.failure import startDebugMode
+ startDebugMode()
+
+
+ def postOptions(self):
+ if self.config is None:
+ raise UsageError("Specify a configuration file using --config <path>")
+
+
+Server = namedtuple('Server', 'host port')
+Arrival = namedtuple('Arrival', 'factory parameters')
+
+
+class LoadSimulator(object):
+ """
+ A L{LoadSimulator} simulates some configuration of calendar
+ clients.
+
+ @type server: L{Server}
+ @type arrival: L{Arrival}
+ @type parameters: L{PopulationParameters}
+ """
+ def __init__(self, server, arrival, parameters, observers=None, reactor=None):
+ if reactor is None:
+ from twisted.internet import reactor
+ self.server = server
+ self.arrival = arrival
+ self.parameters = parameters
+ self.observers = observers
+ self.reactor = reactor
+
+
+ @classmethod
+ def fromCommandLine(cls, args=None):
+ if args is None:
+ args = argv[1:]
+
+ options = SimOptions()
+ try:
+ options.parseOptions(args)
+ except UsageError, e:
+ raise SystemExit(str(e))
+
+ if 'server' in options.config:
+ server = Server(
+ options.config['server']['host'],
+ options.config['server']['port'])
+ else:
+ server = Server('127.0.0.1', 8008)
+
+ if 'arrival' in options.config:
+ params = options.config['arrival']
+ factory = namedAny(params.pop('factory'))
+ arrival = Arrival(factory, params)
+ else:
+ arrival = Arrival(
+ SmoothRampUp, dict(groups=10, groupSize=1, interval=3))
+
+ parameters = PopulationParameters()
+ if 'clients' in options.config:
+ for clientConfig in options.config['clients']:
+ parameters.addClient(
+ clientConfig["weight"],
+ ClientType(
+ namedAny(clientConfig["software"]),
+ [namedAny(profile)
+ for profile in clientConfig["profiles"]]))
+ if not parameters.clients:
+ parameters.addClient(
+ 1, ClientType(SnowLeopard, [Eventer, Inviter, Accepter]))
+
+ observers = []
+ if 'observers' in options.config:
+ for observerName in options.config['observers']:
+ observers.append(namedAny(observerName)())
+
+ return cls(server, arrival, parameters, observers)
+
+
+ @classmethod
+ def main(cls, args=None):
+ simulator = cls.fromCommandLine(args)
+ raise SystemExit(simulator.run())
+
+
+ def createSimulator(self):
+ host = self.server.host
+ port = self.server.port
+ populator = Populator(Random())
+ return CalendarClientSimulator(
+ populator, self.parameters, self.reactor, host, port)
+
+
+ def createArrivalPolicy(self):
+ return self.arrival.factory(self.reactor, **self.arrival.parameters)
+
+
+ def run(self):
+ for obs in self.observers:
+ addObserver(obs.observe)
+ sim = self.createSimulator()
+ arrivalPolicy = self.createArrivalPolicy()
+ arrivalPolicy.run(sim)
+ self.reactor.run()
+ for obs in self.observers:
+ obs.report()
+
+main = LoadSimulator.main
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/subscribe.py (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/subscribe.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/subscribe.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/subscribe.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,30 @@
+
+class Subscription(object):
+ def __init__(self, periodical, subscriber):
+ self.periodical = periodical
+ self.subscriber = subscriber
+
+
+ def cancel(self):
+ self.peridical.subscriptions.remove(self)
+
+
+ def issue(self, issue):
+ self.subscriber(issue)
+
+
+
+class Periodical(object):
+ def __init__(self):
+ self.subscriptions = []
+
+
+ def subscribe(self, who):
+ subscription = Subscription(self, who)
+ self.subscriptions.append(subscription)
+ return subscription
+
+
+ def issue(self, issue):
+ for subscr in self.subscriptions:
+ subscr.issue(issue)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_ical.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_ical.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_ical.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -15,6 +15,10 @@
#
##
+from vobject import readComponents
+from vobject.base import Component, ContentLine
+
+from twisted.internet.defer import Deferred
from twisted.trial.unittest import TestCase
from protocol.url import URL
@@ -22,9 +26,76 @@
from protocol.caldav.definitions import caldavxml
from protocol.caldav.definitions import csxml
-from ical import SnowLeopard
+from loadtest.ical import Event, Calendar, SnowLeopard
+from httpclient import MemoryConsumer
+EVENT_UID = 'D94F247D-7433-43AF-B84B-ADD684D023B0'
+EVENT = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:EDT
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:EST
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20101018T155454Z
+UID:%(UID)s
+DTEND;TZID=America/New_York:20101028T130000
+ATTENDEE;CN="User 03";CUTYPE=INDIVIDUAL;EMAIL="user03 at example.com";PARTS
+ TAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:user03 at example.co
+ m
+ATTENDEE;CN="User 01";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailto:user01@
+ example.com
+TRANSP:OPAQUE
+SUMMARY:Attended Event
+DTSTART;TZID=America/New_York:20101028T120000
+DTSTAMP:20101018T155513Z
+ORGANIZER;CN="User 01":mailto:user01 at example.com
+SEQUENCE:3
+END:VEVENT
+END:VCALENDAR
+""" % {'UID': EVENT_UID}
+
+
+class EventTests(TestCase):
+ """
+ Tests for L{Event}.
+ """
+ def test_uid(self):
+ """
+ When the C{vevent} attribute of an L{Event} instance is set,
+ L{Event.getUID} returns the UID value from it.
+ """
+ event = Event(u'/foo/bar', u'etag', list(readComponents(EVENT))[0])
+ self.assertEquals(event.getUID(), EVENT_UID)
+
+
+ def test_withoutUID(self):
+ """
+ When an L{Event} has a C{vevent} attribute set to C{None},
+ L{Event.getUID} returns C{None}.
+ """
+ event = Event(u'/bar/baz', u'etag')
+ self.assertIdentical(event.getUID(), None)
+
+
+
PRINCIPAL_PROPFIND_RESPONSE = """\
<?xml version='1.0' encoding='UTF-8'?>
<multistatus xmlns='DAV:'>
@@ -719,9 +790,6 @@
</multistatus>
"""
-
-
-
class SnowLeopardTests(TestCase):
"""
Tests for L{SnowLeopard}.
@@ -801,3 +869,142 @@
self.assertEquals(outbox.name, None)
self.assertEquals(outbox.url, "/calendars/__uids__/user01/outbox/")
self.assertEquals(outbox.ctag, None)
+
+
+ def test_changeEventAttendee(self):
+ """
+ SnowLeopard.changeEventAttendee removes one attendee from an
+ existing event and appends another.
+ """
+ requests = []
+ def request(*args):
+ result = Deferred()
+ requests.append((result, args))
+ return result
+ self.client._request = request
+
+ vevent = list(readComponents(EVENT))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ old = attendees[0]
+ new = ContentLine.duplicate(old)
+ new.params[u'CN'] = [u'Some Other Guy']
+ event = Event(u'/some/calendar/1234.ics', None, vevent)
+ self.client._events[event.url] = event
+ self.client.changeEventAttendee(event.url, old, new)
+
+ result, req = requests.pop(0)
+
+ # iCal PUTs the new VCALENDAR object.
+ expectedResponseCode, method, url, headers, body = req
+ self.assertEquals(method, 'PUT')
+ self.assertEquals(url, 'http://127.0.0.1:80' + event.url)
+ self.assertIsInstance(url, str)
+ self.assertEquals(headers.getRawHeaders('content-type'), ['text/calendar'])
+
+ consumer = MemoryConsumer()
+ finished = body.startProducing(consumer)
+ def cbFinished(ignored):
+ vevent = list(readComponents(consumer.value()))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 2)
+ self.assertEquals(attendees[0].params[u'CN'], [u'User 01'])
+ self.assertEquals(attendees[1].params[u'CN'], [u'Some Other Guy'])
+ finished.addCallback(cbFinished)
+ return finished
+
+
+ def test_addEvent(self):
+ """
+ L{SnowLeopard.addEvent} PUTs the event passed to it to the
+ server and updates local state to reflect its existence.
+ """
+ requests = []
+ def request(*args):
+ result = Deferred()
+ requests.append((result, args))
+ return result
+ self.client._request = request
+
+ vcalendar = list(readComponents(EVENT))[0]
+ d = self.client.addEvent(u'/mumble/frotz.ics', vcalendar)
+
+ result, req = requests.pop(0)
+
+ # iCal PUTs the new VCALENDAR object.
+ expectedResponseCode, method, url, headers, body = req
+ self.assertEquals(method, 'PUT')
+ self.assertEquals(url, 'http://127.0.0.1:80/mumble/frotz.ics')
+ self.assertIsInstance(url, str)
+ self.assertEquals(headers.getRawHeaders('content-type'), ['text/calendar'])
+
+ consumer = MemoryConsumer()
+ finished = body.startProducing(consumer)
+ def cbFinished(ignored):
+ self.assertComponentsEqual(
+ list(readComponents(consumer.value()))[0],
+ vcalendar)
+ finished.addCallback(cbFinished)
+ return finished
+
+
+ def test_deleteEvent(self):
+ """
+ L{SnowLeopard.deleteEvent} DELETEs the event at the relative
+ URL passed to it and updates local state to reflect its
+ removal.
+ """
+ requests = []
+ def request(*args):
+ result = Deferred()
+ requests.append((result, args))
+ return result
+ self.client._request = request
+
+ calendar = Calendar(caldavxml.calendar, u'calendar', u'/foo/', None)
+ event = Event(calendar.url + u'bar.ics', None)
+ self.client._calendars[calendar.url] = calendar
+ self.client._setEvent(event.url, event)
+
+ d = self.client.deleteEvent(event.url)
+
+ result, req = requests.pop()
+
+ expectedResponseCode, method, url = req
+ self.assertEquals(method, 'DELETE')
+ self.assertEquals(url, 'http://127.0.0.1:80' + event.url)
+ self.assertIsInstance(url, str)
+
+ self.assertNotIn(event.url, self.client._events)
+ self.assertNotIn(u'bar.ics', calendar.events)
+
+
+ def assertComponentsEqual(self, first, second):
+ self.assertEquals(first.name, second.name, "Component names not equal")
+ self.assertEquals(first.behavior, second.behavior, "Component behaviors not equal")
+
+ for k in first.contents:
+ if k not in second.contents:
+ self.fail("Content %r present in first but not second" % (k,))
+ self.assertEquals(
+ len(first.contents[k]), len(second.contents[k]), "Different length content %r" % (k,))
+ for (a, b) in zip(first.contents[k], second.contents[k]):
+ if isinstance(a, ContentLine):
+ f = self.assertContentLinesEqual
+ elif isinstance(a, Component):
+ f = self.assertComponentsEqual
+ else:
+ f = self.assertEquals
+ f(a, b)
+ for k in second.contents:
+ if k not in first.contents:
+ self.fail("Content %r present in second but not first" % (k,))
+
+
+ def assertContentLinesEqual(self, first, second):
+ self.assertEquals(first.name, second.name, "ContentLine names not equal")
+ self.assertEquals(first.behavior, second.behavior, "ContentLine behaviors not equal")
+ self.assertEquals(first.value, second.value, "ContentLine values not equal")
+ self.assertEquals(first.params, second.params, "ContentLine params not equal")
+ self.assertEquals(
+ first.singletonparams, second.singletonparams,
+ "ContentLine singletonparams not equal")
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_profiles.py (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/test_profiles.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_profiles.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_profiles.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,562 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 loadtest.profiles.
+"""
+
+from vobject import readComponents
+
+from protocol.caldav.definitions import caldavxml
+
+from twisted.trial.unittest import TestCase
+from twisted.internet.task import Clock
+from twisted.internet.defer import succeed
+
+from loadtest.profiles import Eventer, Inviter, Accepter
+from loadtest.ical import Calendar, Event, BaseClient
+
+SIMPLE_EVENT = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Apple Inc.//iCal 4.0.3//EN
+CALSCALE:GREGORIAN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:20070311T020000
+TZNAME:EDT
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+DTSTART:20071104T020000
+TZNAME:EST
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VEVENT
+CREATED:20101018T155431Z
+UID:C98AD237-55AD-4F7D-9009-0D355D835822
+DTEND;TZID=America/New_York:20101021T130000
+TRANSP:OPAQUE
+SUMMARY:Simple event
+DTSTART;TZID=America/New_York:20101021T120000
+DTSTAMP:20101018T155438Z
+SEQUENCE:2
+END:VEVENT
+END:VCALENDAR
+"""
+
+INVITED_EVENT = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:882C3D50-0DAE-45CB-A2E7-DA75DA9BE452
+DTSTART;TZID=America/New_York:20110131T130000
+DTEND;TZID=America/New_York:20110131T140000
+ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
+ CEPTED:urn:uuid:user01
+ATTENDEE;CN=User 02;CUTYPE=INDIVIDUAL;EMAIL=user02 at example.com;PARTSTAT=NE
+ EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:urn:uuid:user02
+CREATED:20110124T170357Z
+DTSTAMP:20110124T170425Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+SEQUENCE:3
+SUMMARY:Some Event For You
+TRANSP:TRANSPARENT
+X-APPLE-NEEDS-REPLY:TRUE
+END:VEVENT
+END:VCALENDAR
+"""
+
+ACCEPTED_EVENT = """\
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VTIMEZONE
+TZID:America/New_York
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:882C3D50-0DAE-45CB-A2E7-DA75DA9BE452
+DTSTART;TZID=America/New_York:20110131T130000
+DTEND;TZID=America/New_York:20110131T140000
+ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01 at example.com;PARTSTAT=AC
+ CEPTED:urn:uuid:user01
+ATTENDEE;CN=User 02;CUTYPE=INDIVIDUAL;EMAIL=user02 at example.com;PARTSTAT=AC
+ CEPTED:urn:uuid:user02
+CREATED:20110124T170357Z
+DTSTAMP:20110124T170425Z
+ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:uuid:user01
+SEQUENCE:3
+SUMMARY:Some Event For You
+TRANSP:TRANSPARENT
+X-APPLE-NEEDS-REPLY:TRUE
+END:VEVENT
+END:VCALENDAR
+"""
+
+
+
+class Deterministic(object):
+ def gauss(self, mean, stddev):
+ """
+ Pretend to return a value from a gaussian distribution with mu
+ parameter C{mean} and sigma parameter C{stddev}. But actually
+ always return C{mean + 1}.
+ """
+ return mean + 1
+
+
+ def choice(self, sequence):
+ return sequence[0]
+
+
+
+class StubClient(BaseClient):
+ def __init__(self, number):
+ self._events = {}
+ self._calendars = {}
+ self.user = u"user%02d" % (number,)
+ self.email = u"mailto:user%02d at example.com" % (number,)
+
+
+ def addEvent(self, href, vevent):
+ self._events[href] = Event(href, None, vevent)
+
+
+ def deleteEvent(self, href):
+ event = self._events.pop(href)
+ calendar, uid = href.rsplit('/', 1)
+ del self._calendars[calendar + '/'].events[uid]
+
+
+ def addEventAttendee(self, href, attendee):
+ vevent = self._events[href].vevent
+ attendees = vevent.contents[u'vevent'][0].contents.setdefault(u'attendee', [])
+ attendees.append(attendee)
+
+
+ def changeEventAttendee(self, href, old, new):
+ vevent = self._events[href].vevent
+ attendees = vevent.contents[u'vevent'][0].contents.setdefault(u'attendee', [])
+ attendees.remove(old)
+ attendees.append(new)
+ return succeed(None)
+
+
+class InviterTests(TestCase):
+ """
+ Tests for loadtest.profiles.Inviter.
+ """
+ def _simpleAccount(self, userNumber, eventText):
+ vevent = list(readComponents(eventText))[0]
+ calendar = Calendar(
+ caldavxml.calendar, u'calendar', u'/cal/', None)
+ event = Event(calendar.url + u'1234.ics', None, vevent)
+ calendar.events = {u'1234.ics': event}
+ client = StubClient(userNumber)
+ client._events.update({event.url: event})
+ client._calendars.update({calendar.url: calendar})
+
+ return vevent, event, calendar, client
+
+
+ def test_doNotAddAttendeeToInbox(self):
+ """
+ When the only calendar with any events is a schedule inbox, no
+ attempt is made to add attendees to an event on that calendar.
+ """
+ userNumber = 10
+ vevent, event, calendar, client = self._simpleAccount(
+ userNumber, SIMPLE_EVENT)
+ calendar.resourceType = caldavxml.schedule_inbox
+ inviter = Inviter(None, client, userNumber)
+ inviter._invite()
+ self.assertNotIn(u'attendee', vevent.contents[u'vevent'][0].contents)
+
+
+ def test_doNotAddAttendeeToNoCalendars(self):
+ """
+ When there are no calendars and no events at all, the inviter
+ does nothing.
+ """
+ userNumber = 13
+ client = StubClient(userNumber)
+ inviter = Inviter(None, client, userNumber)
+ inviter._invite()
+ self.assertEquals(client._events, {})
+ self.assertEquals(client._calendars, {})
+
+
+ def test_doNotAddAttendeeToUninitializedEvent(self):
+ """
+ When there is an L{Event} on a calendar but the details of the
+ event have not yet been retrieved, no attempt is made to add
+ invitees to that event.
+ """
+ userNumber = 19
+ vevent, event, calendar, client = self._simpleAccount(
+ userNumber, SIMPLE_EVENT)
+ event.vevent = event.etag = event.scheduleTag = None
+ inviter = Inviter(None, client, userNumber)
+ inviter._invite()
+ self.assertEquals(client._events, {event.url: event})
+ self.assertEquals(client._calendars, {calendar.url: calendar})
+
+
+ def test_addAttendeeToEvent(self):
+ """
+ When there is a normal calendar with an event, inviter adds an
+ attendee to it.
+ """
+ userNumber = 16
+ vevent, event, calendar, client = self._simpleAccount(
+ userNumber, SIMPLE_EVENT)
+ inviter = Inviter(None, client, userNumber)
+ inviter.random = Deterministic()
+ inviter._invite()
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 1)
+ self.assertEquals(attendees[0].params, {
+ u'CN': [u'User %d' % (userNumber + 1,)],
+ u'CUTYPE': [u'INDIVIDUAL'],
+ u'EMAIL': [u'user%d at example.com' % (userNumber + 1,)],
+ u'PARTSTAT': [u'NEEDS-ACTION'],
+ u'ROLE': [u'REQ-PARTICIPANT'],
+ u'RSVP': [u'TRUE']})
+
+
+
+ def test_doNotAddSelfToEvent(self):
+ """
+ If the inviter randomly selects its own user to be added to
+ the attendee list, a different user is added instead.
+ """
+ selfNumber = 12
+ vevent, event, calendar, client = self._simpleAccount(
+ selfNumber, SIMPLE_EVENT)
+
+ otherNumber = 20
+ values = [selfNumber, otherNumber]
+
+ inviter = Inviter(None, client, selfNumber)
+ inviter.random = Deterministic()
+ inviter.random.gauss = lambda mu, sigma: values.pop(0)
+ inviter._invite()
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 1)
+ self.assertEquals(attendees[0].params, {
+ u'CN': [u'User %d' % (otherNumber,)],
+ u'CUTYPE': [u'INDIVIDUAL'],
+ u'EMAIL': [u'user%d at example.com' % (otherNumber,)],
+ u'PARTSTAT': [u'NEEDS-ACTION'],
+ u'ROLE': [u'REQ-PARTICIPANT'],
+ u'RSVP': [u'TRUE']})
+
+
+
+ def test_doNotAddExistingToEvent(self):
+ """
+ If the inviter randomly selects a user which is already an
+ invitee on the event, a different user is added instead.
+ """
+ selfNumber = 13
+ vevent, event, calendar, client = self._simpleAccount(
+ selfNumber, INVITED_EVENT)
+
+ invitee = vevent.contents[u'vevent'][0].contents[u'attendee'][0]
+ inviteeNumber = int(invitee.params[u'CN'][0].split()[1])
+ anotherNumber = inviteeNumber + 5
+ values = [inviteeNumber, anotherNumber]
+
+ inviter = Inviter(None, client, selfNumber)
+ inviter.random = Deterministic()
+ inviter.random.gauss = lambda mu, sigma: values.pop(0)
+ inviter._invite()
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 3)
+ self.assertEquals(attendees[2].params, {
+ u'CN': [u'User %02d' % (anotherNumber,)],
+ u'CUTYPE': [u'INDIVIDUAL'],
+ u'EMAIL': [u'user%02d at example.com' % (anotherNumber,)],
+ u'PARTSTAT': [u'NEEDS-ACTION'],
+ u'ROLE': [u'REQ-PARTICIPANT'],
+ u'RSVP': [u'TRUE']})
+
+
+ def test_everybodyInvitedAlready(self):
+ """
+ If the first so-many randomly selected users we come across
+ are already attendees on the event, the invitation attempt is
+ abandoned.
+ """
+ selfNumber = 1
+ vevent, event, calendar, client = self._simpleAccount(
+ selfNumber, INVITED_EVENT)
+ inviter = Inviter(None, client, selfNumber)
+ inviter.random = Deterministic()
+ # Always return a user number which has already been invited.
+ inviter.random.gauss = lambda mu, sigma: 2
+ inviter._invite()
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 2)
+
+
+
+class AccepterTests(TestCase):
+ """
+ Tests for loadtest.profiles.Accepter.
+ """
+ def test_ignoreEventOnUnknownCalendar(self):
+ """
+ If an event on an unknown calendar changes, it is ignored.
+ """
+ userNumber = 13
+ client = StubClient(userNumber)
+ accepter = Accepter(None, client, userNumber)
+ accepter.eventChanged('/some/calendar/1234.ics')
+
+
+ def test_ignoreNonCalendar(self):
+ """
+ If an event is on a calendar which is not of type
+ {CALDAV:}calendar, it is ignored.
+ """
+ userNumber = 14
+ calendarURL = '/some/calendar/'
+ calendar = Calendar(
+ caldavxml.schedule_inbox, u'inbox', calendarURL, None)
+ client = StubClient(userNumber)
+ client._calendars[calendarURL] = calendar
+ accepter = Accepter(None, client, userNumber)
+ accepter.eventChanged(calendarURL + '1234.ics')
+
+
+ def test_ignoreAccepted(self):
+ """
+ If the client is an attendee on an event but the PARTSTAT is
+ not NEEDS-ACTION, the event is ignored.
+ """
+ vevent = list(readComponents(ACCEPTED_EVENT))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ userNumber = int(attendees[1].params[u'CN'][0].split(None, 1)[1])
+ calendarURL = '/some/calendar/'
+ calendar = Calendar(
+ caldavxml.calendar, u'calendar', calendarURL, None)
+ client = StubClient(userNumber)
+ client._calendars[calendarURL] = calendar
+ event = Event(calendarURL + u'1234.ics', None, vevent)
+ client._events[event.url] = event
+ accepter = Accepter(None, client, userNumber)
+ accepter.eventChanged(event.url)
+
+
+ def test_ignoreAlreadyAccepting(self):
+ """
+ If the client sees an event change a second time before
+ responding to an invitation found on it during the first
+ change notification, the second change notification does not
+ generate another accept attempt.
+ """
+ clock = Clock()
+ randomDelay = 7
+ vevent = list(readComponents(INVITED_EVENT))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ userNumber = int(attendees[1].params[u'CN'][0].split(None, 1)[1])
+ calendarURL = '/some/calendar/'
+ calendar = Calendar(
+ caldavxml.calendar, u'calendar', calendarURL, None)
+ client = StubClient(userNumber)
+ client._calendars[calendarURL] = calendar
+ event = Event(calendarURL + u'1234.ics', None, vevent)
+ client._events[event.url] = event
+ accepter = Accepter(clock, client, userNumber)
+ accepter.random = Deterministic()
+ accepter.random.gauss = lambda mu, sigma: randomDelay
+ accepter.eventChanged(event.url)
+ accepter.eventChanged(event.url)
+ clock.advance(randomDelay)
+
+
+ def test_acceptInvitation(self):
+ """
+ If the client is an attendee on an event and the PARTSTAT is
+ NEEDS-ACTION, a response is generated which accepts the
+ invitation and the corresponding event in the
+ I{schedule-inbox} is deleted.
+ """
+ clock = Clock()
+ randomDelay = 7
+ vevent = list(readComponents(INVITED_EVENT))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ userNumber = int(attendees[1].params[u'CN'][0].split(None, 1)[1])
+ client = StubClient(userNumber)
+
+ calendarURL = '/some/calendar/'
+ calendar = Calendar(
+ caldavxml.calendar, u'calendar', calendarURL, None)
+ client._calendars[calendarURL] = calendar
+
+ inboxURL = '/some/inbox/'
+ inbox = Calendar(
+ caldavxml.schedule_inbox, u'the inbox', inboxURL, None)
+ client._calendars[inboxURL] = inbox
+
+ event = Event(calendarURL + u'1234.ics', None, vevent)
+ client._setEvent(event.url, event)
+
+ inboxEvent = Event(inboxURL + u'4321.ics', None, vevent)
+ client._setEvent(inboxEvent.url, inboxEvent)
+
+ accepter = Accepter(clock, client, userNumber)
+ accepter.random = Deterministic()
+ accepter.random.gauss = lambda mu, sigma: randomDelay
+ accepter.eventChanged(event.url)
+ clock.advance(randomDelay)
+
+ vevent = client._events[event.url].vevent
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 2)
+ self.assertEquals(
+ attendees[1].params[u'CN'], [u'User %02d' % (userNumber,)])
+ self.assertEquals(
+ attendees[1].params[u'PARTSTAT'], [u'ACCEPTED'])
+ self.assertNotIn(u'RSVP', attendees[1].params)
+
+ self.assertNotIn(inboxEvent.url, client._events)
+ self.assertNotIn('4321.ics', inbox.events)
+
+
+ def test_reacceptInvitation(self):
+ """
+ If a client accepts an invitation on an event and then is
+ later re-invited to the same event, the invitation is again
+ accepted.
+ """
+ clock = Clock()
+ randomDelay = 7
+ vevent = list(readComponents(INVITED_EVENT))[0]
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ userNumber = int(attendees[1].params[u'CN'][0].split(None, 1)[1])
+ calendarURL = '/some/calendar/'
+ calendar = Calendar(
+ caldavxml.calendar, u'calendar', calendarURL, None)
+ client = StubClient(userNumber)
+ client._calendars[calendarURL] = calendar
+ event = Event(calendarURL + u'1234.ics', None, vevent)
+ client._events[event.url] = event
+ accepter = Accepter(clock, client, userNumber)
+ accepter.random = Deterministic()
+ accepter.random.gauss = lambda mu, sigma: randomDelay
+ accepter.eventChanged(event.url)
+ clock.advance(randomDelay)
+
+ # Now re-set the event so it has to be accepted again
+ event.vevent = list(readComponents(INVITED_EVENT))[0]
+
+ # And now re-deliver it
+ accepter.eventChanged(event.url)
+ clock.advance(randomDelay)
+
+ # And ensure that it was accepted again
+ vevent = client._events[event.url].vevent
+ attendees = vevent.contents[u'vevent'][0].contents[u'attendee']
+ self.assertEquals(len(attendees), 2)
+ self.assertEquals(
+ attendees[1].params[u'CN'], [u'User %02d' % (userNumber,)])
+ self.assertEquals(
+ attendees[1].params[u'PARTSTAT'], [u'ACCEPTED'])
+ self.assertNotIn(u'RSVP', attendees[1].params)
+
+
+
+class EventerTests(TestCase):
+ """
+ Tests for loadtest.profiles.Eventer, a profile which adds new
+ events on calendars.
+ """
+ def test_doNotAddEventOnInbox(self):
+ """
+ When the only calendar is a schedule inbox, no attempt is made
+ to add events on it.
+ """
+ calendar = Calendar(
+ caldavxml.schedule_inbox, u'inbox', u'/sched/inbox', None)
+ client = StubClient(21)
+ client._calendars.update({calendar.url: calendar})
+
+ eventer = Eventer(None, client, None)
+ eventer._addEvent()
+
+ self.assertEquals(client._events, {})
+
+
+ def test_addEvent(self):
+ """
+ When there is a normal calendar to add events to,
+ L{Eventer._addEvent} adds an event to it.
+ """
+ calendar = Calendar(
+ caldavxml.calendar, u'personal stuff', u'/cals/personal', None)
+ client = StubClient(31)
+ client._calendars.update({calendar.url: calendar})
+
+ eventer = Eventer(None, client, None)
+ eventer._addEvent()
+
+ self.assertEquals(len(client._events), 1)
+
+ # XXX Vary the event period/interval and the uid
+
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_sim.py (from rev 7192, CalendarServer/trunk/contrib/performance/loadtest/test_sim.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_sim.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/loadtest/test_sim.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,279 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 operator import setitem
+from plistlib import writePlistToString
+
+from twisted.python.log import LogPublisher, theLogPublisher, msg
+from twisted.python.usage import UsageError
+from twisted.python.filepath import FilePath
+from twisted.trial.unittest import TestCase
+from twisted.internet.defer import succeed
+from twisted.internet.task import Clock
+
+from loadtest.ical import SnowLeopard
+from loadtest.profiles import Eventer, Inviter, Accepter
+from loadtest.population import (
+ SmoothRampUp, ClientType, PopulationParameters, CalendarClientSimulator,
+ SimpleStatistics)
+from loadtest.sim import Server, Arrival, SimOptions, LoadSimulator, main
+
+VALID_CONFIG = {
+ 'server': {
+ 'host': '127.0.0.1',
+ 'port': 8008,
+ },
+ 'arrival': {
+ 'factory': 'loadtest.population.SmoothRampUp',
+ 'groups': 10,
+ 'groupSize': 1,
+ 'interval': 3,
+ },
+ }
+
+VALID_CONFIG_PLIST = writePlistToString(VALID_CONFIG)
+
+
+class SimOptionsTests(TestCase):
+ def test_missingConfig(self):
+ """
+ If the I{config} option is not specified,
+ L{SimOptions.parseOptions} raises a L{UsageError} indicating
+ it is required.
+ """
+ options = SimOptions()
+ exc = self.assertRaises(UsageError, options.parseOptions, [])
+ self.assertEquals(
+ str(exc), "Specify a configuration file using --config <path>")
+
+
+ def test_configFileNotFound(self):
+ """
+ If the filename given to the I{config} option is not found,
+ L{SimOptions.parseOptions} raises a L{UsageError} indicating
+ this.
+ """
+ name = self.mktemp()
+ options = SimOptions()
+ exc = self.assertRaises(
+ UsageError, options.parseOptions, ['--config', name])
+ self.assertEquals(
+ str(exc), "--config %s: No such file or directory" % (name,))
+
+
+ def test_configFileNotParseable(self):
+ """
+ If the contents of the file given to the I{config} option
+ cannot be parsed by L{ConfigParser},
+ L{SimOptions.parseOptions} raises a L{UsageError} indicating
+ this.
+ """
+ config = self.mktemp()
+ FilePath(config).setContent("some random junk")
+ options = SimOptions()
+ exc = self.assertRaises(
+ UsageError, options.parseOptions, ['--config', config])
+ self.assertEquals(
+ str(exc),
+ "--config %s: syntax error: line 1, column 0" % (config,))
+
+
+
+class Reactor(object):
+ message = "some event to be observed"
+
+ def run(self):
+ msg(self.message)
+
+
+
+class Observer(object):
+ def __init__(self):
+ self.reported = False
+ self.events = []
+
+
+ def observe(self, event):
+ self.events.append(event)
+
+
+ def report(self):
+ self.reported = True
+
+
+
+class NullArrival(object):
+ def run(self, sim):
+ pass
+
+
+
+class StubSimulator(LoadSimulator):
+ def run(self):
+ return 3
+
+
+
+class LoadSimulatorTests(TestCase):
+ def test_main(self):
+ """
+ L{LoadSimulator.main} raises L{SystemExit} with the result of
+ L{LoadSimulator.run}.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(VALID_CONFIG_PLIST)
+
+ exc = self.assertRaises(
+ SystemExit, StubSimulator.main, ['--config', config.path])
+ self.assertEquals(
+ exc.args, (StubSimulator(None, None, None).run(),))
+
+
+ def test_createSimulator(self):
+ """
+ L{LoadSimulator.createSimulator} creates a
+ L{CalendarClientSimulator} with its own reactor and host and
+ port information from the configuration file.
+ """
+ host = '127.0.0.7'
+ port = 1243
+ reactor = object()
+ sim = LoadSimulator(Server(host, port), None, None, reactor=reactor)
+ calsim = sim.createSimulator()
+ self.assertIsInstance(calsim, CalendarClientSimulator)
+ self.assertIdentical(calsim.reactor, reactor)
+ self.assertEquals(calsim.host, host)
+ self.assertEquals(calsim.port, port)
+
+
+ def test_loadServerConfig(self):
+ """
+ The Calendar Server host and port are loaded from the [server]
+ section of the configuration file specified.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(writePlistToString({
+ "server": {
+ "host": "127.0.0.1",
+ "port": 1234,
+ },
+ }))
+ sim = LoadSimulator.fromCommandLine(['--config', config.path])
+ self.assertEquals(sim.server, Server("127.0.0.1", 1234))
+
+
+ def test_loadArrivalConfig(self):
+ """
+ The arrival policy type and arguments are loaded from the
+ [arrival] section of the configuration file specified.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(writePlistToString({
+ "arrival": {
+ "factory": "loadtest.population.SmoothRampUp",
+ "groups": 10,
+ "groupSize": 1,
+ "interval": 3,
+ },
+ }))
+ sim = LoadSimulator.fromCommandLine(['--config', config.path])
+ self.assertEquals(
+ sim.arrival,
+ Arrival(SmoothRampUp, dict(groups=10, groupSize=1, interval=3)))
+
+
+ def test_createArrivalPolicy(self):
+ """
+ L{LoadSimulator.createArrivalPolicy} creates an arrival
+ policy based on the L{Arrival} passed to its initializer.
+ """
+ class FakeArrival(object):
+ def __init__(self, reactor, x, y):
+ self.reactor = reactor
+ self.x = x
+ self.y = y
+
+ reactor = object()
+ sim = LoadSimulator(
+ None, Arrival(FakeArrival, {'x': 3, 'y': 2}), None, reactor=reactor)
+ arrival = sim.createArrivalPolicy()
+ self.assertIsInstance(arrival, FakeArrival)
+ self.assertIdentical(arrival.reactor, reactor)
+ self.assertEquals(arrival.x, 3)
+ self.assertEquals(arrival.y, 2)
+
+
+ def test_loadPopulationParameters(self):
+ """
+ Client weights and profiles are loaded from the [clients]
+ section of the configuration file specified.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(writePlistToString({
+ "clients": [{
+ "software": "loadtest.ical.SnowLeopard",
+ "profiles": ["loadtest.profiles.Eventer"],
+ "weight": 3,
+ }]}))
+ sim = LoadSimulator.fromCommandLine(['--config', config.path])
+ expectedParameters = PopulationParameters()
+ expectedParameters.addClient(3, ClientType(SnowLeopard, [Eventer]))
+ self.assertEquals(sim.parameters, expectedParameters)
+
+
+ def test_requireClient(self):
+ """
+ At least one client is required, so if a configuration with an
+ empty clients array is specified, a single default client type
+ is used.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(writePlistToString({"clients": []}))
+ sim = LoadSimulator.fromCommandLine(['--config', config.path])
+ expectedParameters = PopulationParameters()
+ expectedParameters.addClient(
+ 1, ClientType(SnowLeopard, [Eventer, Inviter, Accepter]))
+ self.assertEquals(sim.parameters, expectedParameters)
+
+
+ def test_loadLogObservers(self):
+ """
+ Log observers specified in the [observers] section of the
+ configuration file are added to the logging system.
+ """
+ config = FilePath(self.mktemp())
+ config.setContent(writePlistToString({
+ "observers": ["loadtest.population.SimpleStatistics"]}))
+ sim = LoadSimulator.fromCommandLine(['--config', config.path])
+ self.assertEquals(len(sim.observers), 1)
+ self.assertIsInstance(sim.observers[0], SimpleStatistics)
+
+ def test_observeRunReport(self):
+ """
+ Each log observer is added to the log publisher before the
+ simulation run is started and has its C{report} method called
+ after the simulation run completes.
+ """
+ observers = [Observer()]
+ sim = LoadSimulator(
+ Server('example.com', 123),
+ Arrival(lambda reactor: NullArrival(), {}),
+ None, observers, Reactor())
+ sim.run()
+ self.assertTrue(observers[0].reported)
+ self.assertEquals(
+ observers[0].events[0]['message'], (Reactor.message,))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/massupload.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/massupload.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/massupload.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -27,7 +27,6 @@
class MassUploadOptions(UploadOptions):
optParameters = [
("benchmarks", None, None, ""),
- ("parameters", None, None, ""),
("statistics", None, None, "")]
opt_statistic = None
@@ -55,7 +54,7 @@
def go():
for benchmark in benchmarks:
- for param in options['parameters'].split():
+ for param in raw[benchmark].keys():
for statistic in options['statistics'].split():
stat, samples = select(
raw, benchmark, param, statistic)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/nightly.sh (from rev 7192, CalendarServer/trunk/contrib/performance/nightly.sh)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/nightly.sh (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/nightly.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,28 @@
+#!/bin/bash -x
+
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+cd ~codespeed/Projects/CalendarServer/trunk
+if [ "`svn diff -rBASE:HEAD`" = "" ]; then
+ # There are no changes
+ exit
+else
+ svn up
+ REV="$(./contrib/performance/svn-revno .)"
+ cd ~codespeed/performance
+ ./sample.sh "$REV" ~codespeed/Projects/CalendarServer/trunk "$1"
+fi
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/run.sh
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/run.sh 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/run.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -16,4 +16,4 @@
# limitations under the License.
##
-PYTHONPATH=$PYTHONPATH:~/Projects/CalendarServer/Twisted "$@"
+PYTHONPATH=$PYTHONPATH:~/Projects/CalendarServer/Twisted:~/Projects/CalDAVClientLibrary/trunk/src "$@"
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sample.sh
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sample.sh 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sample.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -20,11 +20,12 @@
sudo -v # Force up to date sudo token before the user walks away
-REV=$1
-SOURCE_DIR=$2
-RESULTS=$3
+REV_SPEC="$1"
+SOURCE_DIR="$2"
+RESULTS="$3"
-update_and_build $REV
+update_and_build "$REV_SPEC"
+REV="$(./svn-revno "$SOURCE_DIR")"
if [ "$HOSTS_COUNT" != "" ]; then
CONCURRENT="--hosts-count $HOSTS_COUNT --host-index $HOST_INDEX"
@@ -40,13 +41,12 @@
rm -rf data/
start 2
popd
- sudo ./run.sh ./benchmark $CONCURRENT --label r$REV-$backend --source-directory $SOURCE_DIR $BENCHMARKS
+ sudo ./run.sh ./benchmark $CONCURRENT --label r$REV-$backend --source-directory $SOURCE_DIR $SCALE_PARAMETERS $BENCHMARKS
data=`echo -n r$REV-$backend*`
./run.sh ./massupload \
--url $ADDURL --revision $REV \
--revision-date "$DATE" --environment nmosbuilder \
--backend $backend \
- --parameters "1 9 81" \
--statistics "${STATISTICS[*]}" \
$data
mv $data $RESULTS
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/setbackend.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/setbackend.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/setbackend.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -14,6 +14,12 @@
# limitations under the License.
##
+"""
+Generate a new calendar server configuration file based on an existing
+one, with a few values changed to satisfy requirements of the
+benchmarking tools.
+"""
+
import sys
from xml.etree import ElementTree
from xml.etree import ElementPath
@@ -26,16 +32,20 @@
value = 'false'
else:
raise RuntimeError("Don't know what to do with %r" % (sys.argv[2],))
- replace(conf.getiterator(), value)
+
+ # Here are the config changes we make - use the specified backend
+ replace(conf.getiterator(), 'UseDatabase', value)
+ # - and disable the response cache
+ replace(conf.getiterator(), 'EnableResponseCache', 'false')
conf.write(sys.stdout)
-def replace(elements, value):
+def replace(elements, key, value):
found = False
for ele in elements:
if found:
ele.tag = value
return
- if ele.tag == 'key' and ele.text == 'UseDatabase':
+ if ele.tag == 'key' and ele.text == key:
found = True
raise RuntimeError("Failed to find <key>UseDatabase</key>")
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sim (from rev 7192, CalendarServer/trunk/contrib/performance/sim)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sim (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/sim 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+##
+# Copyright (c) 2011 Apple Inc. All 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 loadtest.sim import main
+main()
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/some-more-data.sh (from rev 7192, CalendarServer/trunk/contrib/performance/some-more-data.sh)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/some-more-data.sh (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/some-more-data.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,33 @@
+#!/bin/bash -x
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+
+. ./benchlib.sh
+
+sudo -v # Force up to date sudo token before the user walks away
+
+SOURCE_DIR="$1"
+RESULTS="$2"
+
+NOW="$(date +%s)"
+
+WHEN=($((60*60*24*7)) $((60*60*24*31)) $((60*60*24*31*3)))
+for when in ${WHEN[*]}; do
+ THEN=$(($NOW-$when))
+ REV_SPEC="{$(date -r "$THEN" +"%Y-%m-%d")}"
+ ./sample.sh "$REV_SPEC" "$SOURCE_DIR" "$RESULTS"
+done
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/speedcenter.tac
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/speedcenter.tac 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/speedcenter.tac 2011-03-14 20:54:05 UTC (rev 7193)
@@ -14,19 +14,36 @@
# limitations under the License.
##
+import os
+
+from twisted.python.threadpool import ThreadPool
from twisted.python.modules import getModule
-from twisted.application.service import Application
+from twisted.application.service import Application, Service
from twisted.application.internet import TCPServer
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
+class ThreadService(Service):
+ def __init__(self):
+ self.pool = ThreadPool(minthreads=0, maxthreads=1)
+
+ def startService(self):
+ self.pool.start()
+
+ def stopService(self):
+ self.pool.stop()
+
+
speedcenter = getModule("speedcenter").filePath
django = speedcenter.sibling("wsgi").child("django.wsgi")
namespace = {"__file__": django.path}
execfile(django.path, namespace, namespace)
+threads = ThreadService()
application = Application("SpeedCenter")
-resource = WSGIResource(reactor, reactor.getThreadPool(), namespace["application"])
-site = Site(resource, 'httpd.log')
-TCPServer(8000, site).setServiceParent(application)
+threads.setServiceParent(application)
+
+resource = WSGIResource(reactor, threads.pool, namespace["application"])
+site = Site(resource) # , 'httpd.log')
+TCPServer(int(os.environ.get('PORT', 8000)), site).setServiceParent(application)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/stats.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/stats.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/stats.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -100,7 +100,7 @@
commands = ['summarize', 'statements', 'transcript']
def _is_literal(self, token):
- if sqlparse.tokens.is_token_subtype(token.ttype, sqlparse.tokens.Literal):
+ if token.ttype in sqlparse.tokens.Literal:
return True
if token.ttype == sqlparse.tokens.Keyword and token.value in (u'True', u'False'):
return True
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_benchmark.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_benchmark.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_benchmark.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -35,6 +35,17 @@
self.options = BenchmarkOptions()
+ def test_parameters(self):
+ """
+ The I{--parameters} option can be specified multiple time and
+ each time specifies the parameters for a particular benchmark
+ as a comma separated list of integers.
+ """
+ self.options.parseOptions(["--parameters", "foo:1,10,100", "foo"])
+ self.assertEquals(
+ self.options['parameters'], {"foo": [1, 10, 100]})
+
+
def test_filterBenchmarksWithoutDistribution(self):
"""
If neither I{--hosts-count} nor I{--host-index} are supplied,
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_event_change_date.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_event_change_date.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/test_event_change_date.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -14,11 +14,9 @@
# limitations under the License.
##
-import datetime
-
from twisted.trial.unittest import TestCase
-from event_change_date import replaceTimestamp
+from benchmarks.event_change_date import replaceTimestamp
calendarHead = """\
BEGIN:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/vfreebusy.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/vfreebusy.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/performance/vfreebusy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,147 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Benchmark a server's handling of VFREEBUSY requests.
-"""
-
-from urllib2 import HTTPDigestAuthHandler
-from uuid import uuid4
-from datetime import datetime, timedelta
-
-from twisted.internet.defer import inlineCallbacks, returnValue
-from twisted.internet import reactor
-from twisted.web.client import Agent
-from twisted.web.http_headers import Headers
-from twisted.web.http import OK
-
-from httpauth import AuthHandlerAgent
-from httpclient import StringProducer
-from benchlib import initialize, sample
-
-# XXX Represent these as vobjects? Would make it easier to add more vevents.
-event = """\
-BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VTIMEZONE
-TZID:America/New_York
-BEGIN:STANDARD
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-TZNAME:EST
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-TZNAME:EDT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-END:DAYLIGHT
-END:VTIMEZONE
-%(VEVENTS)s\
-END:VCALENDAR
-"""
-
-vfreebusy = """\
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-VERSION:2.0
-METHOD:REQUEST
-PRODID:-//Apple Inc.//iCal 4.0.3//EN
-BEGIN:VFREEBUSY
-UID:81F582C8-4E7F-491C-85F4-E541864BE0FA
-DTEND:20100730T150000Z
-ATTENDEE:urn:uuid:user02
-DTSTART:20100730T140000Z
-X-CALENDARSERVER-MASK-UID:EC75A61B-08A3-44FD-BFBB-2457BBD0D490
-DTSTAMP:20100729T174751Z
-ORGANIZER:mailto:user01 at example.com
-SUMMARY:Availability for urn:uuid:user02
-END:VFREEBUSY
-END:VCALENDAR
-"""
-
-def formatDate(d):
- return ''.join(filter(str.isalnum, d.isoformat()))
-
-def makeEvent(i):
- s = """\
-BEGIN:VEVENT
-UID:%(UID)s
-DTSTART;TZID=America/New_York:%(START)s
-DTEND;TZID=America/New_York:%(END)s
-CREATED:20100729T193912Z
-DTSTAMP:20100729T195557Z
-SEQUENCE:%(SEQUENCE)s
-SUMMARY:STUFF IS THINGS
-TRANSP:OPAQUE
-END:VEVENT
-"""
- base = datetime(2010, 7, 30, 11, 15, 00)
- interval = timedelta(hours=2)
- duration = timedelta(hours=1)
- return event % {
- 'VEVENTS': s % {
- 'UID': uuid4(),
- 'START': formatDate(base + i * interval),
- 'END': formatDate(base + i * interval + duration),
- 'SEQUENCE': i,
- },
- }
-
-
-def makeEvents(n):
- return [makeEvent(i) for i in range(n)]
-
-
- at inlineCallbacks
-def measure(host, port, dtrace, events, samples):
- user = password = "user01"
- root = "/"
- principal = "/"
- calendar = "vfreebusy-benchmark"
-
- authinfo = HTTPDigestAuthHandler()
- authinfo.add_password(
- realm="Test Realm",
- uri="http://%s:%d/" % (host, port),
- user=user,
- passwd=password)
- agent = AuthHandlerAgent(Agent(reactor), authinfo)
-
- # First set things up
- account = yield initialize(
- agent, host, port, user, password, root, principal, calendar)
-
- base = "/calendars/users/%s/%s/foo-%%d.ics" % (user, calendar)
- for i, cal in enumerate(makeEvents(events)):
- yield account.writeData(base % (i,), cal, "text/calendar")
-
- method = 'POST'
- uri = 'http://%s:%d/calendars/__uids__/%s/outbox/' % (host, port, user)
- headers = Headers({"content-type": ["text/calendar"]})
- body = StringProducer(vfreebusy)
-
- samples = yield sample(
- dtrace, samples,
- agent, lambda: (method, uri, headers, body),
- OK)
- returnValue(samples)
-
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/LO_DB_upgrade.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/LO_DB_upgrade.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/LO_DB_upgrade.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -15,15 +15,6 @@
# limitations under the License.
##
-from twext.web2.dav.element.parser import WebDAVDocument
-from twext.web2.dav.resource import TwistedQuotaUsedProperty
-from twistedcaldav.caldavxml import ScheduleTag
-from twistedcaldav.customxml import TwistedCalendarHasPrivateCommentsProperty,\
- TwistedCalendarAccessProperty, TwistedSchedulingObjectResource,\
- TwistedScheduleMatchETags
-from twistedcaldav.ical import Component
-from txdav.base.propertystore.base import PropertyName
-import sys
"""
Tool to manage schema upgrade of SQL database during internal development phase as we don't have
@@ -33,8 +24,17 @@
run this script - no arguments needed.
"""
+from twext.web2.dav.element.parser import WebDAVDocument
+from twext.web2.dav.resource import TwistedQuotaUsedProperty
+from twistedcaldav.caldavxml import ScheduleTag
+from twistedcaldav.customxml import TwistedCalendarHasPrivateCommentsProperty,\
+ TwistedCalendarAccessProperty, TwistedSchedulingObjectResource,\
+ TwistedScheduleMatchETags
+from twistedcaldav.ical import Component
+from txdav.base.propertystore.base import PropertyName
import pg
import pgdb
+import sys
def query(db, sql, params=()):
@@ -42,6 +42,25 @@
cursor.execute(sql, params)
return cursor
+def queryIgnoreAlreadyExists(db, sql, params=()):
+
+ try:
+ query(db, sql, params)
+ except pg.DatabaseError, e:
+ if str(e).find("already exists") == -1:
+ print "Fatal SQL error: %s" % (e,)
+ sys.exit(1)
+ db.commit()
+
+def queryExit(db, sql, params=()):
+
+ try:
+ query(db, sql, params)
+ except pg.DatabaseError, e:
+ print "Fatal SQL error: %s" % (e,)
+ sys.exit(1)
+ db.commit()
+
def rowsForProperty(propelement):
pname = PropertyName.fromElement(propelement)
return query(db, """
@@ -63,12 +82,84 @@
db = pgdb.connect(database='caldav', host='localhost')
+ # Add CALENDAR_HOME index
+ print "Create the CALENDAR_HOME_OWNER_UID index"
+ queryIgnoreAlreadyExists(db, "create index CALENDAR_HOME_OWNER_UID on CALENDAR_HOME(OWNER_UID)")
+
+ # Create the CALENDAR_HOME_METADATA table and provision with empty data
+ print "Create the CALENDAR_HOME_METADATA table"
+ queryIgnoreAlreadyExists(db, """
+ ----------------------------
+ -- Calendar Home Metadata --
+ ----------------------------
+
+ create table CALENDAR_HOME_METADATA (
+ RESOURCE_ID integer not null references CALENDAR_HOME on delete cascade,
+ QUOTA_USED_BYTES integer default 0 not null
+ );
+
+ create index CALENDAR_HOME_METADATA_RESOURCE_ID
+ on CALENDAR_HOME_METADATA(RESOURCE_ID);
+
+ insert into CALENDAR_HOME_METADATA
+ select RESOURCE_ID from CALENDAR_HOME
+ """)
+
+ # Add INVITE index
+ print "Create indexes for INVITE table"
+ queryIgnoreAlreadyExists(db, """
+ create index INVITE_INVITE_UID on INVITE(INVITE_UID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index INVITE_RESOURCE_ID on INVITE(INVITE_UID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index INVITE_HOME_RESOURCE_ID on INVITE(INVITE_UID);
+ """)
+
+ # Add NOTIFICATION_HOME index
+ print "Create the NOTIFICATION_HOME_OWNER_UID index"
+ queryIgnoreAlreadyExists(db, "create index NOTIFICATION_HOME_OWNER_UID on NOTIFICATION_HOME(OWNER_UID)")
+
+ # Alter the NOTIFICATION table
+ print "Alter the NOTIFICATION table and add indexes"
+ queryIgnoreAlreadyExists(db, """
+ alter table NOTIFICATION
+ alter column
+ XML_TYPE TYPE varchar(255),
+ alter column
+ XML_DATA TYPE text;
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index NOTIFICATION_NOTIFICATION_HOME_RESOURCE_ID on
+ NOTIFICATION(NOTIFICATION_HOME_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index NOTIFICATION_NOTIFICATION_UID on NOTIFICATION(NOTIFICATION_UID);
+ """)
+
+ # Add CALENDAR_BIND index
+ print "Create indexes for CALENDAR_BIND table"
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_BIND_HOME_RESOURCE_ID on
+ CALENDAR_BIND(CALENDAR_HOME_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_BIND_RESOURCE_ID on
+ CALENDAR_BIND(CALENDAR_RESOURCE_ID);
+ """)
+
# Alter the CALENDAR_OBJECT table and add columns
print "Alter the CALENDAR_OBJECT table"
- try:
- query(db, """
- alter table CALENDAR_OBJECT
+ queryIgnoreAlreadyExists(db, """
+ alter table CALENDAR_OBJECT
+ alter column
+ ATTACHMENTS_MODE TYPE integer,
+ alter column
+ ATTACHMENTS_MODE set default 0,
add column
+ DROPBOX_ID varchar(255),
+ add column
ACCESS integer default 0 not null,
add column
SCHEDULE_OBJECT boolean default false not null,
@@ -78,27 +169,197 @@
SCHEDULE_ETAGS text default null,
add column
PRIVATE_COMMENTS boolean default false not null;
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID on
+ CALENDAR_OBJECT(CALENDAR_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID_AND_ICALENDAR_UID on
+ CALENDAR_OBJECT(CALENDAR_RESOURCE_ID, ICALENDAR_UID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID_RECURRANCE_MAX on
+ CALENDAR_OBJECT(CALENDAR_RESOURCE_ID, RECURRANCE_MAX);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_ORGANIZER_OBJECT on
+ CALENDAR_OBJECT(ORGANIZER_OBJECT);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_DROPBOX_ID on
+ CALENDAR_OBJECT(DROPBOX_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ delete from CALENDAR_OBJECT_ATTACHMENTS_MODE;
+ 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');
+ """)
+ queryIgnoreAlreadyExists(db, """
+ -- 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' );
+ """)
+
+ # Add TIME_RANGE index
+ print "Create indexes for TIME_RANGE table"
+ queryIgnoreAlreadyExists(db, """
+ create index TIME_RANGE_CALENDAR_RESOURCE_ID on
+ TIME_RANGE(CALENDAR_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index TIME_RANGE_CALENDAR_OBJECT_RESOURCE_ID on
+ TIME_RANGE(CALENDAR_OBJECT_RESOURCE_ID);
+ """)
+
+ # Add TRANSPARENCY index
+ print "Create indexes for TRANSPARENCY table"
+ queryIgnoreAlreadyExists(db, """
+ create index TRANSPARENCY_TIME_RANGE_INSTANCE_ID on
+ TRANSPARENCY(TIME_RANGE_INSTANCE_ID);
+ """)
+
+ # Alter the ATTACHMENT table
+ print "Alter the ATTACHMENT table"
+ queryExit(db, """
+ delete from ATTACHMENT;
+ """)
+ queryIgnoreAlreadyExists(db, """
+ alter table ATTACHMENT
+ drop column if exists
+ CALENDAR_OBJECT_RESOURCE_ID,
+ add column
+ CALENDAR_HOME_RESOURCE_ID integer not null references CALENDAR_HOME,
+ add column
+ DROPBOX_ID varchar(255) not null,
+ add
+ unique(DROPBOX_ID, PATH);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index ATTACHMENT_DROPBOX_ID on ATTACHMENT(DROPBOX_ID);
+ """)
+
+ # Drop the ITIP_MESSAGE table
+ print "Drop the ITIP_MESSAGE table"
+ queryExit(db, """
+ drop table if exists ITIP_MESSAGE;
+ """)
+
+ # Add ADDRESSBOOK_HOME index
+ print "Create the ADDRESSBOOK_HOME_OWNER_UID index"
+ queryIgnoreAlreadyExists(db, "create index ADDRESSBOOK_HOME_OWNER_UID on ADDRESSBOOK_HOME(OWNER_UID)")
+
+ # Create the ADDRESSBOOK_HOME_METADATA table and provision with empty data
+ print "Create the ADDRESSBOOK_HOME_METADATA table"
+ queryIgnoreAlreadyExists(db, """
+ --------------------------------
+ -- AddressBook Home Meta-data --
+ --------------------------------
+
+ create table ADDRESSBOOK_HOME_METADATA (
+ RESOURCE_ID integer not null references ADDRESSBOOK_HOME on delete cascade,
+ QUOTA_USED_BYTES integer default 0 not null
+ );
- -- 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' );
- """)
+ create index ADDRESSBOOK_HOME_METADATA_RESOURCE_ID
+ on ADDRESSBOOK_HOME_METADATA(RESOURCE_ID);
+
+ insert into ADDRESSBOOK_HOME_METADATA
+ select RESOURCE_ID from ADDRESSBOOK_HOME
+ """)
+
+ # Add ADDRESSBOOK_BIND index
+ print "Create indexes for ADDRESSBOOK_BIND table"
+ queryIgnoreAlreadyExists(db, """
+ create index ADDRESSBOOK_BIND_HOME_RESOURCE_ID on
+ ADDRESSBOOK_BIND(ADDRESSBOOK_HOME_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index ADDRESSBOOK_BIND_RESOURCE_ID on
+ ADDRESSBOOK_BIND(ADDRESSBOOK_RESOURCE_ID);
+ """)
+
+ # Add ADDRESSBOOK_OBJECT index
+ print "Create indexes for ADDRESSBOOK_OBJECT table"
+ queryIgnoreAlreadyExists(db, """
+ create index ADDRESSBOOK_OBJECT_ADDRESSBOOK_RESOURCE_ID on
+ ADDRESSBOOK_OBJECT(ADDRESSBOOK_RESOURCE_ID);
+ """)
+
+ # Alter the CALENDAR_OBJECT_REVISIONS table
+ print "Alter the CALENDAR_OBJECT_REVISIONS table"
+ queryExit(db, """
+ alter table CALENDAR_OBJECT_REVISIONS
+ alter column
+ REVISION set default nextval('REVISION_SEQ');
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on CALENDAR_OBJECT_REVISIONS(CALENDAR_HOME_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index CALENDAR_OBJECT_REVISIONS_RESOURCE_ID
+ on CALENDAR_OBJECT_REVISIONS(CALENDAR_RESOURCE_ID);
+ """)
+
+ # Alter the ADDRESSBOOK_OBJECT_REVISIONS table
+ print "Alter the ADDRESSBOOK_OBJECT_REVISIONS table"
+ queryExit(db, """
+ alter table ADDRESSBOOK_OBJECT_REVISIONS
+ alter column
+ REVISION set default nextval('REVISION_SEQ');
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index ADDRESSBOOK_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_HOME_RESOURCE_ID);
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index ADDRESSBOOK_OBJECT_REVISIONS_RESOURCE_ID
+ on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_RESOURCE_ID);
+ """)
+
+ # Alter the NOTIFICATION_OBJECT_REVISIONS table
+ print "Alter the NOTIFICATION_OBJECT_REVISIONS table"
+ queryExit(db, """
+ alter table NOTIFICATION_OBJECT_REVISIONS
+ alter column
+ REVISION set default nextval('REVISION_SEQ');
+ """)
+ queryIgnoreAlreadyExists(db, """
+ create index NOTIFICATION_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on NOTIFICATION_OBJECT_REVISIONS(NOTIFICATION_HOME_RESOURCE_ID);
+ """)
+
+ # Add CALENDARSERVER table
+ print "Add the CALENDARSERVER table"
+ queryIgnoreAlreadyExists(db, """
+ --------------------
+ -- Schema Version --
+ --------------------
- except pg.DatabaseError, e:
- if str(e).find("already exists") == -1:
- print "Fatal SQL error: %s" % (e,)
- sys.exit(1)
- db.commit()
+ create table CALENDARSERVER (
+ NAME varchar(255),
+ VALUE varchar(255),
+ unique(NAME)
+ );
+
+ insert into CALENDARSERVER values ('VERSION', '3');
+ """)
+
+
+
+
# Copy and remove each dead property
# TwistedCalendarAccessProperty - copy string value into column.
@@ -127,11 +388,16 @@
for row in rowsForProperty(TwistedSchedulingObjectResource):
resource_id, value = row
prop = WebDAVDocument.fromString(value).root_element
+ mapped = {
+ "": "true",
+ "true": "true",
+ "false": "false",
+ }[str(prop)]
query(db, """
update CALENDAR_OBJECT
set SCHEDULE_OBJECT = %s
where RESOURCE_ID = %s
- """, (str(prop), resource_id,)
+ """, (mapped, resource_id,)
)
removeProperty(TwistedSchedulingObjectResource)
db.commit()
@@ -178,82 +444,10 @@
removeProperty(TwistedCalendarHasPrivateCommentsProperty)
db.commit()
- # Create the CALENDAR_HOME_METADATA table
- print "Create the CALENDAR_HOME_METADATA table"
- try:
- query(db, """
- ----------------------------
- -- Calendar Home Metadata --
- ----------------------------
-
- create table CALENDAR_HOME_METADATA (
- RESOURCE_ID integer not null references CALENDAR_HOME on delete cascade,
- QUOTA_USED_BYTES integer default 0 not null
- );
- """)
-
- # Provision with empty data
- query(db, """
- insert into CALENDAR_HOME_METADATA
- select RESOURCE_ID from CALENDAR_HOME
- """, ()
- )
-
- except pg.DatabaseError, e:
- if str(e).find("already exists") == -1:
- print "Fatal SQL error: %s" % (e,)
- sys.exit(1)
- db.commit()
+ # Quota is now only calculated on attachments and we are removing attachments in this upgrade
- # Alter the ADDRESSBOOK_HOME_METADATA table
- print "Create the ADDRESSBOOK_HOME_METADATA table"
- try:
- query(db, """
- --------------------------------
- -- AddressBook Home Meta-data --
- --------------------------------
-
- create table ADDRESSBOOK_HOME_METADATA (
- RESOURCE_ID integer not null references ADDRESSBOOK_HOME on delete cascade,
- QUOTA_USED_BYTES integer default 0 not null
- );
- """)
-
- # Provision with empty data
- query(db, """
- insert into ADDRESSBOOK_HOME_METADATA
- select RESOURCE_ID from ADDRESSBOOK_HOME
- """, ()
- )
-
- except pg.DatabaseError, e:
- if str(e).find("already exists") == -1:
- print "Fatal SQL error: %s" % (e,)
- sys.exit(1)
- db.commit()
-
- # Copy and remove each dead property
-
# TwistedQuotaUsedProperty - copy string value into column.
- print "Move TwistedQuotaUsedProperty"
- for row in rowsForProperty(TwistedQuotaUsedProperty):
- resource_id, value = row
- prop = WebDAVDocument.fromString(value).root_element
-
- # Since we don't know whether the resource-id is a calendar home or addressbook home
- # just try updating both tables - the one that does not match will simply be ignored.
- query(db, """
- update CALENDAR_HOME_METADATA
- set QUOTA_USED_BYTES = %s
- where RESOURCE_ID = %s
- """, (int(str(prop)), resource_id,)
- )
- query(db, """
- update ADDRESSBOOK_HOME_METADATA
- set QUOTA_USED_BYTES = %s
- where RESOURCE_ID = %s
- """, (int(str(prop)), resource_id,)
- )
+ print "Remove TwistedQuotaUsedProperty"
removeProperty(TwistedQuotaUsedProperty)
db.commit()
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/pg_stats_analysis.py (from rev 7192, CalendarServer/trunk/contrib/tools/pg_stats_analysis.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/pg_stats_analysis.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/pg_stats_analysis.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,229 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 sqlparse
+import os
+from gzip import GzipFile
+import collections
+import tables
+import textwrap
+import sys
+import getopt
+
+def safePercent(x, y, multiplier=100):
+ return ((multiplier * x) / y) if y else 0
+
+def _is_literal(token):
+ if token.ttype in sqlparse.tokens.Literal:
+ return True
+ if token.ttype == sqlparse.tokens.Keyword and token.value in (u'True', u'False'):
+ return True
+ return False
+
+def _substitute(expression, replacement):
+ try:
+ expression.tokens
+ except AttributeError:
+ return
+
+ for i, token in enumerate(expression.tokens):
+ if _is_literal(token):
+ expression.tokens[i] = replacement
+ elif token.is_whitespace():
+ expression.tokens[i] = sqlparse.sql.Token('Whitespace', ' ')
+ else:
+ _substitute(token, replacement)
+
+def sqlnormalize(sql):
+ try:
+ statements = sqlparse.parse(sql)
+ except ValueError, e:
+ print e
+ # Replace any literal values with placeholders
+ qmark = sqlparse.sql.Token('Operator', '?')
+ _substitute(statements[0], qmark)
+ return sqlparse.format(statements[0].to_unicode().encode('ascii'))
+
+COLUMN_userid = 0
+COLUMN_dbid = 1
+COLUMN_query = 2
+COLUMN_calls = 3
+COLUMN_total_time = 4
+COLUMN_rows = 5
+COLUMN_shared_blks_hit = 6
+COLUMN_shared_blks_read = 7
+COLUMN_shared_blks_written = 8
+COLUMN_local_blks_hit = 9
+COLUMN_local_blks_read = 10
+COLUMN_local_blks_written = 11
+COLUMN_temp_blks_read = 12
+COLUMN_temp_blks_written = 13
+
+def sqlStatementsReport(entries):
+
+ dcount = collections.defaultdict(int)
+ dtime = collections.defaultdict(float)
+ drows = collections.defaultdict(int)
+ for entry in entries:
+ dcount[entry[COLUMN_query]] += int(entry[COLUMN_calls])
+ dtime[entry[COLUMN_query]] += float(entry[COLUMN_total_time])
+ drows[entry[COLUMN_query]] += int(entry[COLUMN_rows])
+
+ daverage = {}
+ for k in dcount.keys():
+ daverage[k] = dtime[k]/dcount[k]
+
+ counttotal = sum(dcount.values())
+ timetotal = sum(dtime.values())
+ averagetotal = sum(daverage.values())
+
+ for sorttype, sortedkeys in (
+ ("total time", [i[0] for i in sorted(dtime.iteritems(), key=lambda x:x[1], reverse=True)],),
+ ("count", [i[0] for i in sorted(dcount.iteritems(), key=lambda x:x[1], reverse=True)],),
+ ("average time", [i[0] for i in sorted(daverage.iteritems(), key=lambda x:x[1], reverse=True)],),
+ ):
+ table = tables.Table()
+ table.addHeader(("Statement", "Count", "Count %", "Total Time", "Total Time %", "Av. Time", "Av. Time %", "Av. rows",))
+ table.setDefaultColumnFormats((
+ tables.Table.ColumnFormat("%s", tables.Table.ColumnFormat.LEFT_JUSTIFY),
+ tables.Table.ColumnFormat("%d", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%.2f%%", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%f", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%.2f%%", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%f", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%.2f%%", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ tables.Table.ColumnFormat("%.1f", tables.Table.ColumnFormat.RIGHT_JUSTIFY),
+ ))
+
+ for key in sortedkeys:
+
+ keylines = textwrap.wrap(key, 72, subsequent_indent=" ")
+ table.addRow((
+ keylines[0],
+ dcount[key],
+ safePercent(dcount[key], counttotal, 100.0),
+ dtime[key],
+ safePercent(dtime[key], timetotal, 100.0),
+ daverage[key],
+ safePercent(daverage[key], averagetotal, 100.0),
+ float(drows[key])/dcount[key],
+ ))
+
+ for keyline in keylines[1:]:
+ table.addRow((
+ keyline,
+ None,
+ None,
+ None,
+ None,
+ None,
+ None,
+ None,
+ ))
+
+ print "Queries sorted by %s" % (sorttype,)
+ table.printTable()
+ print ""
+
+def parseStats(logFilePath, donormlize=True, verbose=False):
+
+ fpath = os.path.expanduser(logFilePath)
+ if fpath.endswith(".gz"):
+ f = GzipFile(fpath)
+ else:
+ f = open(fpath)
+
+ # Punt past data
+ for line in f:
+ if line.startswith("---"):
+ break
+
+ entries = []
+ for line in f:
+ bits = line.split("|")
+ if len(bits) > COLUMN_query:
+ while bits[COLUMN_query].endswith("+"):
+ line = f.next()
+ newbits = line.split("|")
+ bits[COLUMN_query] = bits[COLUMN_query][:-1] + newbits[COLUMN_query]
+
+ pos = bits[COLUMN_query].find("BEGIN:VCALENDAR")
+ if pos != -1:
+ bits[COLUMN_query] = bits[COLUMN_query][:pos]
+
+ if donormlize:
+ bits[COLUMN_query] = sqlnormalize(bits[COLUMN_query].strip())
+
+ if bits[COLUMN_query] not in (
+ "BEGIN",
+ "COMMIT",
+ "ROLLBACK",
+ ) and bits[COLUMN_query].find("pg_catalog") == -1:
+ bits = [bit.strip() for bit in bits]
+ entries.append(bits)
+ if verbose and divmod(len(entries), 1000)[1] == 0:
+ print "%d entries" % (len(entries),)
+ #if float(bits[COLUMN_total_time]) > 1:
+ # print bits[COLUMN_total_time], bits[COLUMN_query]
+
+ if verbose:
+ print "Read %d entries" % (len(entries,))
+
+ sqlStatementsReport(entries)
+
+def usage(error_msg=None):
+ if error_msg:
+ print error_msg
+
+ print """Usage: pg_stats_analysis.py [options] FILE
+Options:
+ -h Print this help and exit
+ -v Generate progress information
+ --no-normalize Do not normalize SQL statements
+
+Arguments:
+ FILE File name for pg_stat_statements output to analyze.
+
+Description:
+This utility will analyze the output of s pg_stat_statement table.
+"""
+
+ if error_msg:
+ raise ValueError(error_msg)
+ else:
+ sys.exit(0)
+
+if __name__ == '__main__':
+
+ normalize = True
+ verbose = False
+ options, args = getopt.getopt(sys.argv[1:], "hv", ["no-normalize",])
+
+ for option, value in options:
+ if option == "-h":
+ usage()
+ elif option == "-v":
+ verbose = True
+ elif option == "--no-normalize":
+ normalize = False
+ else:
+ usage("Unrecognized option: %s" % (option,))
+
+ # Process arguments
+ if len(args) != 1:
+ usage("Must have a file argument")
+
+ parseStats(args[0], normalize, verbose)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/protocolanalysis.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/protocolanalysis.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/protocolanalysis.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -238,7 +238,7 @@
self.parseLine(line)
# Filter method
- if self.ignoreNonHTTPMethods and self.currentLine.method not in httpMethods:
+ if self.ignoreNonHTTPMethods and not self.currentLine.method.startswith("REPORT(") and self.currentLine.method not in httpMethods:
self.currentLine.method = "???"
# Do hour ranges
@@ -692,7 +692,7 @@
def summarizeUserInteraction(self, adjustedMethod):
summary = {}
otherData = self.otherUserCalendarRequests.get(adjustedMethod, {})
- for user, others in otherData.iteritems():
+ for _ignore_user, others in otherData.iteritems():
bucket = self.getCountBucket(len(others), userInteractionCountBuckets)
summary[bucket] = summary.get(bucket, 0) + 1
return summary
@@ -1229,7 +1229,7 @@
total = sum(summary.values())
for k, v in sorted(summary.iteritems()):
# Chop off the "(a):" part.
- table.addRow((k[4:], v, 100.0 * float(v) / total))
+ table.addRow((k[4:], v, safePercent(float(v), total)))
table.printTabDelimitedData() if doTabs else table.printTable()
print ""
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/request_monitor.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/request_monitor.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/contrib/tools/request_monitor.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -77,7 +77,22 @@
output, _ignore_error = child.communicate()
return output.split("\n")
+def cpuPerDaemon():
+ a = []
+ child = Popen(
+ args=[
+ "ps", "auxw",
+ ],
+ stdout=PIPE, stderr=STDOUT,
+ )
+ output, _ignore_ = child.communicate()
+ for l in output.split("\n"):
+ if "ProcessType=" in l:
+ f = l.split()
+ a.append(f[2])
+ return ", ".join(a)
+
def cpuidle():
child = Popen(
args=[
@@ -380,6 +395,7 @@
q = idleHistory()
print "CPU idle %:", q[0], " (Recent", ", ".join(q[1:]), "Oldest)"
print "Memory free:", freemem()
+ print "CPU Per Daemon:", cpuPerDaemon()
if avg:
print avg, "|",
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/Admin/ExtendedLogItems.txt
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/Admin/ExtendedLogItems.txt 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/Admin/ExtendedLogItems.txt 2011-03-14 20:54:05 UTC (rev 7193)
@@ -59,6 +59,10 @@
the number of attendee refreshes completed after a scheduling
operation.
+ ``itip.auto``
+
+ the number of auto-accept attendees specified
+
``itip.reply``
Either ``reply`` or ``cancel`` depending on...???
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_bootstrap_database.8 (from rev 7192, CalendarServer/trunk/doc/calendarserver_bootstrap_database.8)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_bootstrap_database.8 (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_bootstrap_database.8 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,41 @@
+.\"
+.\" Copyright (c) 2011 Apple Inc. All 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.
+.\"
+.\" The following requests are required for all man pages.
+.Dd February 14, 2011
+.Dt CALENDARSERVER_BOOTSTRAP_DATABASE 8
+.Os
+.Sh NAME
+.Nm calendarserver_bootstrap_database
+.Nd Darwin Calendar Server database bootstrap utility
+.Sh SYNOPSIS
+.Nm
+.Op Fl -verbose
+.Op Fl -help
+.Sh DESCRIPTION
+.Nm
+is a tool which creates the Postgres user Calendar Server will use to connect, creates a database, and installs the schema.
+.Pp
+.Nm
+should be run as root.
+.Sh OPTIONS
+.Bl -tag -width flag
+.It Fl h, -help
+Display usage information
+.It Fl v, -verbose
+Print detailed information about what commands are being executed
+.El
+.Sh SEE ALSO
+.Xr caldavd 8
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_monitor_notifications.8 (from rev 7192, CalendarServer/trunk/doc/calendarserver_monitor_notifications.8)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_monitor_notifications.8 (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_monitor_notifications.8 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,60 @@
+.\"
+.\" Copyright (c) 2011 Apple Inc. All 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.
+.\"
+.\" The following requests are required for all man pages.
+.Dd Feb 3, 2011
+.Dt CALENDARSERVER_MONITOR_NOTIFICATIONS 8
+.Os
+.Sh NAME
+.Nm calendarserver_monitor_notifications
+.Nd Darwin Calendar Server push notification monitor
+.Sh SYNOPSIS
+.Nm
+.Op Fl -admin Ar username
+.Op Fl -config Ar file
+.Op Fl -host Ar hostname
+.Op Fl -port Ar port-number
+.Op Fl -ssl
+.Op Fl -verbose
+.Op Fl -help
+.Ar username
+.Sh DESCRIPTION
+.Nm
+is a tool for making sure XMPP push notifications are working properly. Given a username and password it will connect to the calendar server and determine which pubsub node(s) correspond to that user's calendar home, as well as those of any user which has delegated calendar access. Next it will subscribe to those nodes and await notifications, printing them to stdout. An administrator can monitor the push notifications for another user by passing the --admin option. Exit by hitting Control-C.
+.Pp
+.Sh OPTIONS
+.Bl -tag -width flag
+.It Fl a, -admin
+Authenticate using the credentials of the given administrator.
+.It Fl h, -help
+Display usage information.
+.It Fl f, -config Ar FILE
+Use the Calendar Server configuration specified in the given file. Defaults to /etc/caldavd/caldavd.plist.
+.It Fl H, -host Ar HOSTNAME
+Connect to the specified calendar server. If not passed on the command line, the host name is looked up in the configuration file.
+.It Fl p, -port Ar NUMBER
+Connect to the specified port number. If not passed on the command line, the port number is looked up in the configuration file.
+.It Fl s, -ssl
+Use https to connect to calendar server (default is http).
+.It Fl v, -verbose
+Print debugging information.
+.El
+.Sh FILES
+.Bl -tag -width flag
+.It /etc/caldavd/caldavd.plist
+The Calendar Server configuration file.
+.El
+.Sh SEE ALSO
+.Xr caldavd 8
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_attachments.8 (from rev 7192, CalendarServer/trunk/doc/calendarserver_purge_attachments.8)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_attachments.8 (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_attachments.8 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,54 @@
+.\"
+.\" Copyright (c) 2006-2011 Apple Inc. All 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.
+.\"
+.\" The following requests are required for all man pages.
+.Dd June 17, 2009
+.Dt CALENDARSERVER_PURGE_ATTACHMENTS 8
+.Os
+.Sh NAME
+.Nm calendarserver_purge_attachments
+.Nd Darwin Calendar Server orphaned attachments clean-up utility
+.Sh SYNOPSIS
+.Nm
+.Op Fl -config Ar file
+.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.
+.Pp
+.Nm
+should be run as a user with the same priviledges as the Calendar
+Server itself, as it needs to read and write data that belongs to the
+server.
+.Sh OPTIONS
+.Bl -tag -width flag
+.It Fl h, -help
+Display usage information
+.It Fl f, -config Ar FILE
+Use the Calendar Server configuration specified in the given file. Defaults to /etc/caldavd/caldavd.plist.
+.It Fl n, -dry-run
+Calculate and display how many orphaned attachments would be removed, but don't actually remove them.
+.It Fl v, -verbose
+Print progress information.
+.El
+.Sh FILES
+.Bl -tag -width flag
+.It /etc/caldavd/caldavd.plist
+The Calendar Server configuration file.
+.El
+.Sh SEE ALSO
+.Xr caldavd 8
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_events.8
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_events.8 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_events.8 2011-03-14 20:54:05 UTC (rev 7193)
@@ -41,12 +41,12 @@
Display usage information
.It Fl f, -config Ar FILE
Use the Calendar Server configuration specified in the given file. Defaults to /etc/caldavd/caldavd.plist.
+.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 events would be removed, but don't actually remove them.
.It Fl v, -verbose
-Print progress information including purged events per calendar home.
-.It Fl d, -days Ar NUMBER
-Specify how many days in the past to retain. Defaults to 365 days.
+Print progress information.
.El
.Sh FILES
.Bl -tag -width flag
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_principals.8
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_principals.8 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/doc/calendarserver_purge_principals.8 2011-03-14 20:54:05 UTC (rev 7193)
@@ -30,7 +30,7 @@
.Op guid ...
.Sh DESCRIPTION
.Nm
-is a tool for removing one or more principals' future events and proxy assignments from the calendar server. Events in the past are retained, but any ongoing events are canceled.
+is a tool for removing one or more principals' future events, proxy assignments, and contacts from the calendar server. 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
@@ -43,7 +43,7 @@
.It Fl f, -config Ar FILE
Use the Calendar Server configuration specified in the given file. Defaults to /etc/caldavd/caldavd.plist.
.It Fl n, -dry-run
-Calculate and display how many events would be removed, but don't actually remove them.
+Calculate and display how many events and contacts would be removed, but don't actually remove them.
.It Fl v, -verbose
Print progress information.
.El
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.icalendar.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.icalendar.patch 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.icalendar.patch 2011-03-14 20:54:05 UTC (rev 7193)
@@ -8,19 +8,32 @@
# although it isn't actually supposed to be escaped according to rfc2445 TEXT
-escapableCharList = '\\;,Nn"'
+-def stringToTextValues(s, listSeparator=',', charList=None, strict=False):
+# COLON included to work around Address Book's escaping it in vCard data,
+# despite the fact that it is similarly not supposed to be escaped.
+
+escapableCharList = '\\;:,Nn'
+
- def stringToTextValues(s, listSeparator=',', charList=None, strict=False):
++def stringToTextValues(s, listSeparator=',', charList=None, strict=False, leaveEscapes=False):
"""Returns list of strings."""
-
+
if charList is None:
charList = escapableCharList
-@@ -1675,9 +1679,10 @@
+@@ -1655,7 +1659,10 @@
+
+ if state == "read normal":
+ if char == '\\':
+- state = "read escaped char"
++ if leaveEscapes:
++ current.append(char)
++ else:
++ state = "read escaped char"
+ elif char == listSeparator:
+ state = "read normal"
+ current = "".join(current)
+@@ -1675,9 +1682,10 @@
else:
current.append(char)
else:
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.vcard.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.vcard.patch 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/lib-patches/vobject/vobject.vcard.patch 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,7 +21,7 @@
- return [toListOrString(i) for i in
- stringToTextValues(string, listSeparator=';', charList=';')]
+ return [(toListOrString(i) if maybeList else i) for i in
-+ stringToTextValues(string, listSeparator=';')]
++ stringToTextValues(string, listSeparator=';', leaveEscapes=maybeList)]
def toList(stringOrList):
if isinstance(stringOrList, basestring):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/pyflakes
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/pyflakes 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/pyflakes 2011-03-14 20:54:05 UTC (rev 7193)
@@ -4,7 +4,7 @@
set -u
wd="$(cd "$(dirname "$0")" && pwd)";
-flakes="$(cd "${wd}/../Pyflakes" && pwd)";
+flakes="$(cd "${wd}/../pyflakes-0.4.0" && pwd)";
export PYTHONPATH="${flakes}:${PYTHONPATH:-}";
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/setup.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/setup.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/setup.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -121,8 +121,11 @@
"bin/calendarserver_manage_principals",
"bin/calendarserver_command_gateway",
"bin/calendarserver_purge_events",
+ "bin/calendarserver_purge_attachments",
"bin/calendarserver_purge_principals",
"bin/calendarserver_migrate_resources",
+ "bin/calendarserver_monitor_notifications",
+ "bin/calendarserver_bootstrap_database",
],
data_files = [ ("caldavd", ["conf/caldavd.plist"]), ],
ext_modules = extensions,
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/support/Makefile.Apple
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/support/Makefile.Apple 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/support/Makefile.Apple 2011-03-14 20:54:05 UTC (rev 7193)
@@ -47,16 +47,17 @@
PyXML-0.8.4:: $(BuildDirectory)/PyXML-0.8.4
vobject:: $(BuildDirectory)/vobject
PyGreSQL-4.0:: $(BuildDirectory)/PyGreSQL-4.0
+sqlparse-0.1.2:: $(BuildDirectory)/sqlparse-0.1.2
$(Project):: $(BuildDirectory)/$(Project)
-build:: PyKerberos PyOpenDirectory PyXML-0.8.4 vobject PyGreSQL-4.0 $(Project)
+build:: PyKerberos PyOpenDirectory PyXML-0.8.4 vobject PyGreSQL-4.0 sqlparse-0.1.2 $(Project)
setup:
$(_v) ./run -g
-prep:: setup CalDAVTester.tgz PyKerberos.tgz PyOpenDirectory.tgz PyXML-0.8.4.tgz vobject.tgz PyGreSQL-4.0.tgz
+prep:: setup CalDAVTester.tgz PyKerberos.tgz PyOpenDirectory.tgz PyXML-0.8.4.tgz vobject.tgz PyGreSQL-4.0.tgz sqlparse-0.1.2.tgz
-PyKerberos PyOpenDirectory PyXML-0.8.4 vobject PyGreSQL-4.0 $(Project)::
+PyKerberos PyOpenDirectory PyXML-0.8.4 vobject PyGreSQL-4.0 sqlparse-0.1.2 $(Project)::
@echo "Building $@..."
$(_v) cd $(BuildDirectory)/$@ && $(Environment) $(PYTHON) setup.py build
@@ -72,6 +73,7 @@
$(_v) cd $(BuildDirectory)/PyXML-0.8.4 && $(Environment) $(PYTHON) setup.py install $(PY_INSTALL_FLAGS)
$(_v) cd $(BuildDirectory)/vobject && $(Environment) $(PYTHON) setup.py install $(PY_INSTALL_FLAGS)
$(_v) cd $(BuildDirectory)/PyGreSQL-4.0 && $(Environment) $(PYTHON) setup.py install $(PY_INSTALL_FLAGS)
+ $(_v) cd $(BuildDirectory)/sqlparse-0.1.2 && $(Environment) $(PYTHON) setup.py install $(PY_INSTALL_FLAGS)
$(_v) for so in $$(find "$(DSTROOT)$(PY_HOME)/lib" -type f -name '*.so'); do $(STRIP) -Sx "$${so}"; done
$(_v) $(INSTALL_FILE) "$(Sources)/conf/caldavd-apple.plist" "$(DSTROOT)$(ETCDIR)/caldavd/caldavd.plist"
$(_v) chmod -R ugo+r "$(DSTROOT)$(PY_HOME)"
@@ -86,6 +88,9 @@
$(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_migrate_resources.8" "$(DSTROOT)$(MANDIR)/man8"
$(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_command_gateway.8" "$(DSTROOT)$(MANDIR)/man8"
$(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_purge_events.8" "$(DSTROOT)$(MANDIR)/man8"
+ $(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_monitor_notifications.8" "$(DSTROOT)$(MANDIR)/man8"
+ $(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_bootstrap_database.8" "$(DSTROOT)$(MANDIR)/man8"
+ $(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_purge_attachments.8" "$(DSTROOT)$(MANDIR)/man8"
$(_v) $(INSTALL_FILE) "$(Sources)/doc/calendarserver_purge_principals.8" "$(DSTROOT)$(MANDIR)/man8"
$(_v) gzip -9 -f "$(DSTROOT)$(MANDIR)/man8/"*.[0-9]
@echo "Installing launchd config..."
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/support/build.sh
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/support/build.sh 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/support/build.sh 2011-03-14 20:54:05 UTC (rev 7193)
@@ -2,7 +2,7 @@
# -*- sh-basic-offset: 2 -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -181,24 +181,83 @@
if [ -n "${cache_deps}" ] && [ -n "${hash}" ]; then
mkdir -p "${cache_deps}";
- cache_file="${cache_deps}/${name}-$(echo "${url}" | hash)-$(basename "${url}")";
+ local cache_basename="${name}-$(echo "${url}" | hash)-$(basename "${url}")";
+ local cache_file="${cache_deps}/${cache_basename}";
+ check_hash () {
+ local file="$1"; shift;
+
+ if [ "${hash}" == "md5" ]; then
+ local sum="$(hash "${file}" | perl -pe 's|^.*([0-9a-f]{32}).*$|\1|')";
+ if [ -n "${md5}" ]; then
+ echo "Checking MD5 sum for ${name}...";
+ if [ "${md5}" != "${sum}" ]; then
+ echo "ERROR: MD5 sum for downloaded file is wrong: ${sum} != ${md5}";
+ return 1;
+ fi;
+ else
+ echo "MD5 sum for ${name} is ${sum}";
+ fi;
+ fi;
+ }
+
if [ ! -f "${cache_file}" ]; then
echo "Downloading ${name}...";
- curl -L "${url}" -o "${cache_file}";
- fi;
- if [ "${hash}" == "md5" ]; then
- local sum="$(hash "${cache_file}" | perl -pe 's|^.*([0-9a-f]{32}).*$|\1|')";
- if [ -n "${md5}" ]; then
- echo "Checking MD5 sum for ${name}...";
- if [ "${md5}" != "${sum}" ]; then
- echo "ERROR: MD5 sum for cache file ${cache_file} ${sum} != ${md5}. Corrupt file?";
+ local pkg_host="static.calendarserver.org";
+ local pkg_path="/pkg";
+
+ #
+ # Try getting a copy from calendarserver.org.
+ #
+ local tmp="$(mktemp "/tmp/${cache_basename}.XXXXX")";
+ curl -L "http://${pkg_host}${pkg_path}/${cache_basename}" -o "${tmp}";
+ echo "";
+ if [ ! -s "${tmp}" ] || grep '<title>404 Not Found</title>' "${tmp}" > /dev/null; then
+ rm -f "${tmp}";
+ echo "${name} is not available from calendarserver.org; trying upstream source.";
+ elif ! check_hash "${tmp}"; then
+ rm -f "${tmp}";
+ echo "${name} from calendarserver.org is invalid; trying upstream source.";
+ fi;
+
+ #
+ # That didn't work. Try getting a copy from the upstream source.
+ #
+ if [ ! -f "${tmp}" ]; then
+ curl -L "${url}" -o "${tmp}";
+ echo "";
+
+ if [ ! -s "${tmp}" ] || grep '<title>404 Not Found</title>' "${tmp}" > /dev/null; then
+ rm -f "${tmp}";
+ echo "${name} is not available from upstream source: ${url}";
exit 1;
+ elif ! check_hash "${tmp}"; then
+ rm -f "${tmp}";
+ echo "${name} from upstream source is invalid: ${url}";
+ exit 1;
fi;
- else
- echo "MD5 sum for ${name} is ${sum}";
+
+ if egrep '^${pkg_host} ' "${HOME}/.ssh/known_hosts" > /dev/null 2>&1; then
+ echo "Copying cache file up to ${pkg_host}.";
+ if ! scp "${tmp}" "${pkg_host}:/www/hosts/${pkg_host}${pkg_path}/${cache_basename}"; then
+ echo "Failed to copy cache file up to ${pkg_host}.";
+ fi;
+ echo ""
+ fi;
fi;
+
+ #
+ # OK, we should be good
+ #
+ mv "${tmp}" "${cache_file}";
+ else
+ #
+ # We have the file cached, just verify hash
+ #
+ if ! check_hash "${cache_file}"; then
+ exit 1;
+ fi;
fi;
echo "Unpacking ${name} from cache...";
@@ -493,9 +552,9 @@
fi;
if ! type postgres > /dev/null 2>&1; then
- local pgv="9.0.1";
+ local pgv="9.0.3";
local pg="postgresql-${pgv}";
- c_dependency -m "5093c321bc47af2ea9afa726605ff1ce" \
+ c_dependency -m "56386ded2d5dcd8a4ceef0da81c3d22c" \
"PostgreSQL" "${pg}" \
"ftp://ftp5.us.postgresql.org/pub/PostgreSQL/source/v${pgv}/${pg}.tar.gz" \
--with-python;
@@ -515,10 +574,11 @@
"Zope Interface" "zope.interface" "${zi}" \
"http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz";
- local px="PyXML-0.8.4";
- py_dependency -m "1f7655050cebbb664db976405fdba209" \
+ local pv="0.8.4";
+ local px="PyXML-${pv}";
+ py_dependency -v "${pv}" -m "1f7655050cebbb664db976405fdba209" \
"PyXML" "xml.dom.ext" "${px}" \
- "http://static.calendarserver.org/${px}.tar.gz";
+ "http://superb-sea2.dl.sourceforge.net/project/pyxml/pyxml/${pv}/${px}.tar.gz";
local po="pyOpenSSL-0.10";
py_dependency -v 0.9 -m "34db8056ec53ce80c7f5fc58bee9f093" \
@@ -531,25 +591,27 @@
"${svn_uri_base}/PyKerberos/trunk";
fi;
- #if [ "$(uname -s)" == "Darwin" ]; then
+ if [ "$(uname -s)" == "Darwin" ]; then
py_dependency -r 6656 \
"PyOpenDirectory" "opendirectory" "PyOpenDirectory" \
"${svn_uri_base}/PyOpenDirectory/trunk";
- #fi;
+ fi;
py_dependency -v 0.5 -r 1038 \
"xattr" "xattr" "xattr" \
"http://svn.red-bean.com/bob/xattr/releases/xattr-0.6.1/";
if [ "${py_version}" != "${py_version##2.5}" ] && ! py_have_module select26; then
+ local s26="select26-0.1a3";
py_dependency -m "01b8929e7cfc4a8deb777b92e3115c15" \
- "select26" "select26" "select26-0.1a3" \
- "http://pypi.python.org/packages/source/s/select26/select26-0.1a3.tar.gz";
+ "select26" "select26" "${s26}" \
+ "http://pypi.python.org/packages/source/s/select26/${s26}.tar.gz";
fi;
+ local pg="PyGreSQL-4.0";
py_dependency -v 4.0 -m "1aca50e59ff4cc56abe9452a9a49c5ff" -o \
- "PyGreSQL" "pgdb" "PyGreSQL-4.0" \
- "http://pypi.python.org/packages/source/P/PyGreSQL/PyGreSQL-4.0.tar.gz";
+ "PyGreSQL" "pgdb" "${pg}" \
+ "http://pypi.python.org/packages/source/P/PyGreSQL/${pg}.tar.gz";
py_dependency -v 10.1 -r 30159 \
"Twisted" "twisted" "Twisted" \
@@ -560,9 +622,14 @@
"dateutil" "dateutil" "${du}" \
"http://www.labix.org/download/python-dateutil/${du}.tar.gz";
+ local ld="python-ldap-2.3.13";
+ py_dependency -v "2.3.13" -m "895223d32fa10bbc29aa349bfad59175" \
+ "python-ldap" "python-ldap" "${ld}" \
+ "http://pypi.python.org/packages/source/p/python-ldap/${ld}.tar.gz";
+
# XXX actually vObject should be imported in-place.
py_dependency -fie -r 219 \
- "vObject" "vobject" "vobject" \
+ "vobject" "vobject" "vobject" \
"http://svn.osafoundation.org/vobject/trunk";
#
@@ -570,13 +637,17 @@
# they are useful to developers.
#
- py_dependency -v 0.1.1 -m "000053e0352f5bf19c2f8d5242329ea4" \
- "SQLParse" "sqlparse" "sqlparse-0.1.1" \
- "http://python-sqlparse.googlecode.com/files/sqlparse-0.1.1.tar.gz";
+ py_dependency -v 0.1.2 -m "aa9852ad81822723adcd9f96838de14e" \
+ "SQLParse" "sqlparse" "sqlparse-0.1.2" \
+ "http://python-sqlparse.googlecode.com/files/sqlparse-0.1.2.tar.gz";
+ py_dependency -v 0.4.0 -m "630a72510aae8758f48cf60e4fa17176" \
+ "Pyflakes" "pyflakes" "pyflakes-0.4.0" \
+ "http://pypi.python.org/packages/source/p/pyflakes/pyflakes-0.4.0.tar.gz";
+
svn_get "CalDAVTester" "${top}/CalDAVTester" "${svn_uri_base}/CalDAVTester/trunk" HEAD;
- svn_get "Pyflakes" "${top}/Pyflakes" http://divmod.org/svn/Divmod/trunk/Pyflakes HEAD;
+ svn_get "CalDAVClientLibrary" "${top}/CalDAVClientLibrary" "${svn_uri_base}/CalDAVClientLibrary/trunk" HEAD;
local pd="pydoctor-0.3";
py_dependency -m "b000aa1fb458fe25952dadf26049ae68" \
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/support/patchapply
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/support/patchapply 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/support/patchapply 2011-03-14 20:54:05 UTC (rev 7193)
@@ -24,7 +24,7 @@
#
#projects = ("Twisted", "vobject", "dateutil", "xattr")
-projects = ("Twisted", "vobject",)
+projects = ("vobject",)
cwd = os.getcwd()
libpatches = os.path.join(cwd, "lib-patches")
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/support/submit
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/support/submit 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/support/submit 2011-03-14 20:54:05 UTC (rev 7193)
@@ -127,7 +127,7 @@
echo "";
echo "Copying ${src}...";
ignores="$(mktemp -t CalendarServer_ignores)";
- svn st --no-ignore | sed -n -e 's|^I......||p' > "${ignores}";
+ svn st --no-ignore | sed -n -e 's|^I...... ||p' > "${ignores}";
rsync -av --exclude=".svn" --exclude="_trial_temp" --exclude="*.pyc" --exclude="*.so" --exclude-from="${ignores}" "${src}/" "${wc}";
rm "${ignores}";
else
@@ -190,7 +190,7 @@
else
echo "";
echo "Submitting sources for ${project_version}...";
- ~rc/bin/submitproject "${wc}" "${release}";
+ submitproject "${wc}" "${release}";
fi;
rm -rf "${tmp}";
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/test
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/test 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/test 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,7 +21,7 @@
wd="$(cd "$(dirname "$0")" && pwd -L)";
-. support/build.sh;
+. "${wd}/support/build.sh";
do_setup="false";
do_get="false";
@@ -78,4 +78,5 @@
find "${wd}" -name \*.pyc -print0 | xargs -0 rm;
-cd "${wd}" && "${python}" "${trial}" --rterrors ${random} ${until_fail} ${no_colour} ${coverage} ${test_modules};
+mkdir -p "${wd}/data";
+cd "${wd}" && "${python}" "${trial}" --temp-directory="${wd}/data/trial" --rterrors ${random} ${until_fail} ${no_colour} ${coverage} ${test_modules};
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,20 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Extensions in the spirit of Twisted's "enterprise" package; things related to
-database connectivity and management.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py (from rev 7192, CalendarServer/trunk/twext/enterprise/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,20 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Extensions in the spirit of Twisted's "enterprise" package; things related to
+database connectivity and management.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/adbapi2.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,933 +0,0 @@
-from twext.enterprise.ienterprise import IDerivedParameter
-# -*- test-case-name: twext.enterprise.test.test_adbapi2 -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Asynchronous multi-process connection pool.
-
-This is similar to L{twisted.enterprise.adbapi}, but can hold a transaction (and
-thereby a thread) open across multiple asynchronous operations, rather than
-forcing the transaction to be completed entirely in a thread and/or entirely in
-a single SQL statement.
-
-Also, this module includes an AMP protocol for multiplexing connections through
-a single choke-point host. This is not currently in use, however, as AMP needs
-some optimization before it can be low-impact enough for this to be an
-improvement.
-"""
-
-import sys
-
-from cStringIO import StringIO
-from cPickle import dumps, loads
-from itertools import count
-
-from zope.interface import implements
-
-from twisted.internet.defer import inlineCallbacks
-from twisted.internet.defer import returnValue
-from twisted.internet.defer import Deferred
-from twisted.protocols.amp import Boolean
-from twisted.python.failure import Failure
-from twisted.protocols.amp import Argument, String, Command, AMP, Integer
-from twisted.internet import reactor as _reactor
-from twisted.application.service import Service
-from twisted.python import log
-from twisted.internet.defer import maybeDeferred
-from twisted.python.components import proxyForInterface
-
-from twext.internet.threadutils import ThreadHolder
-from twisted.internet.defer import succeed
-from twext.enterprise.ienterprise import ConnectionError
-from twisted.internet.defer import fail
-from twext.enterprise.ienterprise import (
- AlreadyFinishedError, IAsyncTransaction, POSTGRES_DIALECT
-)
-
-
-# FIXME: there should be no defaults for connection metadata, it should be
-# discovered dynamically everywhere. Right now it's specified as an explicit
-# argument to the ConnectionPool but it should probably be determined
-# automatically from the database binding.
-
-DEFAULT_PARAM_STYLE = 'pyformat'
-DEFAULT_DIALECT = POSTGRES_DIALECT
-
-
-def _forward(thunk):
- """
- Forward an attribute to the connection pool.
- """
- @property
- def getter(self):
- return getattr(self._pool, thunk.func_name)
- return getter
-
-
-
-class _ConnectedTxn(object):
- """
- L{IAsyncTransaction} implementation based on a L{ThreadHolder} in the
- current process.
- """
- implements(IAsyncTransaction)
-
- def __init__(self, pool, threadHolder, connection, cursor):
- self._pool = pool
- self._completed = True
- self._cursor = cursor
- self._connection = connection
- self._holder = threadHolder
- self._first = True
-
-
- @_forward
- def paramstyle(self):
- """
- The paramstyle attribute is mirrored from the connection pool.
- """
-
-
- @_forward
- def dialect(self):
- """
- The dialect attribute is mirrored from the connection pool.
- """
-
-
- def _reallyExecSQL(self, sql, args=None, raiseOnZeroRowCount=None):
- wasFirst = self._first
- self._first = False
- if args is None:
- args = []
- derived = None
- for n, arg in enumerate(args):
- if IDerivedParameter.providedBy(arg):
- if derived is None:
- # Be sparing with extra allocations, as this usually isn't
- # needed, and we're doing a ton of extra work to support it.
- derived = []
- derived.append(arg)
- args[n] = arg.preQuery(self._cursor)
- try:
- self._cursor.execute(sql, args)
- except:
- if wasFirst:
- self._connection.close()
- self._connection = self._pool.connectionFactory()
- self._cursor = self._connection.cursor()
- result = self._reallyExecSQL(sql, args, raiseOnZeroRowCount)
- return result
- else:
- raise
- if derived is not None:
- for arg in derived:
- arg.postQuery(self._cursor)
- if raiseOnZeroRowCount is not None and self._cursor.rowcount == 0:
- raise raiseOnZeroRowCount()
- if self._cursor.description:
- return self._cursor.fetchall()
- else:
- return None
-
-
- noisy = False
-
- def execSQL(self, *args, **kw):
- result = self._holder.submit(
- lambda : self._reallyExecSQL(*args, **kw)
- )
- if self.noisy:
- def reportResult(results):
- sys.stdout.write("\n".join([
- "",
- "SQL: %r %r" % (args, kw),
- "Results: %r" % (results,),
- "",
- ]))
- return results
- result.addBoth(reportResult)
- return result
-
-
- def _end(self, really):
- """
- Common logic for commit or abort. Executed in the cursor main thread.
- """
- if not self._completed:
- self._completed = True
- def reallySomething():
- # Executed in the cursor thread.
- if self._cursor is None:
- return
- really()
- self._first = True
- result = self._holder.submit(reallySomething)
- self._pool._repoolAfter(self, result)
- return result
- else:
- raise AlreadyFinishedError()
-
-
- def commit(self):
- return self._end(self._connection.commit)
-
-
- def abort(self):
- 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.
-
- @raise RuntimeError: if the transaction has not been committed or
- aborted.
- """
- if not self._completed:
- raise RuntimeError("Attempt to re-set active transaction.")
- self._completed = False
-
-
- def _releaseConnection(self):
- """
- Release the thread and database connection associated with this
- transaction.
- """
- self._completed = True
- self._stopped = True
- holder = self._holder
- self._holder = None
-
- def _reallyClose():
- if self._cursor is None:
- return
- self._connection.close()
- holder.submit(_reallyClose)
- return holder.stop()
-
-
-
-class _NoTxn(object):
- """
- An L{IAsyncTransaction} that indicates a local failure before we could even
- communicate any statements (or possibly even any connection attempts) to the
- server.
- """
- implements(IAsyncTransaction)
-
- def __init__(self, pool):
- self.paramstyle = pool.paramstyle
- self.dialect = pool.dialect
-
-
- def _everything(self, *a, **kw):
- """
- Everything fails with a L{ConnectionError}.
- """
- return fail(ConnectionError())
-
-
- execSQL = _everything
- commit = _everything
- abort = _everything
-
-
-
-class _WaitingTxn(object):
- """
- A L{_WaitingTxn} is an implementation of L{IAsyncTransaction} which cannot
- yet actually execute anything, so it waits and spools SQL requests for later
- execution. When a L{_ConnectedTxn} becomes available later, it can be
- unspooled onto that.
- """
-
- implements(IAsyncTransaction)
-
- def __init__(self, pool):
- self._spool = []
- self.paramstyle = pool.paramstyle
- self.dialect = pool.dialect
-
-
- def _enspool(self, cmd, a=(), kw={}):
- d = Deferred()
- self._spool.append((d, cmd, a, kw))
- return d
-
-
- def _iterDestruct(self):
- """
- Iterate the spool list destructively, while popping items from the
- beginning. This allows code which executes more SQL in the callback of
- a Deferred to not interfere with the originally submitted order of
- commands.
- """
- while self._spool:
- yield self._spool.pop(0)
-
-
- def _unspool(self, other):
- """
- Unspool this transaction onto another transaction.
-
- @param other: another provider of L{IAsyncTransaction} which will
- actually execute the SQL statements we have been buffering.
- """
- for (d, cmd, a, kw) in self._iterDestruct():
- self._relayCommand(other, d, cmd, a, kw)
-
-
- def _relayCommand(self, other, d, cmd, a, kw):
- """
- Relay a single command to another transaction.
- """
- maybeDeferred(getattr(other, cmd), *a, **kw).chainDeferred(d)
-
-
- def execSQL(self, *a, **kw):
- return self._enspool('execSQL', a, kw)
-
-
- def commit(self):
- return self._enspool('commit')
-
-
- def abort(self):
- return succeed(None)
-
-
-
-class _SingleTxn(proxyForInterface(iface=IAsyncTransaction,
- originalAttribute='_baseTxn')):
- """
- A L{_SingleTxn} is a single-use wrapper for the longer-lived
- L{_ConnectedTxn}, so that if a badly-behaved API client accidentally hangs
- on to one of these and, for example C{.abort()}s it multiple times once
- another client is using that connection, it will get some harmless
- tracebacks.
-
- It's a wrapper around a "real" implementation; either a L{_ConnectedTxn},
- L{_NoTxn}, or L{_WaitingTxn} depending on the availability of real
- underlying datbase connections.
-
- This is the only L{IAsyncTransaction} implementation exposed to application
- code.
- """
-
- def __init__(self, pool, baseTxn):
- self._pool = pool
- self._baseTxn = baseTxn
- self._complete = False
-
-
- def __repr__(self):
- """
- Reveal the backend in the string representation.
- """
- return '_SingleTxn(%r)' % (self._baseTxn,)
-
-
- def _unspoolOnto(self, baseTxn):
- """
- Replace my C{_baseTxn}, currently a L{_WaitingTxn}, with a new
- implementation of L{IAsyncTransaction} that will actually do the work;
- either a L{_ConnectedTxn} or a L{_NoTxn}.
- """
- spooledBase = self._baseTxn
- self._baseTxn = baseTxn
- spooledBase._unspool(baseTxn)
-
-
- def execSQL(self, *a, **kw):
- self._checkComplete()
- return super(_SingleTxn, self).execSQL(*a, **kw)
-
-
- def commit(self):
- self._markComplete()
- return super(_SingleTxn, self).commit()
-
-
- def abort(self):
- self._markComplete()
- if self in self._pool._waiting:
- self._stopWaiting()
- return succeed(None)
- return super(_SingleTxn, self).abort()
-
-
- def _stopWaiting(self):
- """
- Stop waiting for a free transaction and fail.
- """
- self._pool._waiting.remove(self)
- self._unspoolOnto(_NoTxn(self._pool))
-
-
- def _checkComplete(self):
- """
- If the transaction is complete, raise L{AlreadyFinishedError}
- """
- if self._complete:
- raise AlreadyFinishedError()
-
-
- def _markComplete(self):
- """
- Mark the transaction as complete, raising AlreadyFinishedError.
- """
- self._checkComplete()
- self._complete = True
-
-
-
-class _ConnectingPseudoTxn(object):
-
- _retry = None
-
- def __init__(self, pool, holder):
- self._pool = pool
- self._holder = holder
-
-
- def abort(self):
- if self._retry is not None:
- self._retry.cancel()
- d = self._holder.stop()
- def removeme(ignored):
- if self in self._pool._busy:
- self._pool._busy.remove(self)
- d.addCallback(removeme)
- return d
-
-
-
-def _fork(x):
- """
- Produce a L{Deferred} that will fire when another L{Deferred} fires without
- disturbing its results.
- """
- d = Deferred()
- def fired(result):
- d.callback(result)
- return result
-
- x.addBoth(fired)
- return d
-
-
-
-class ConnectionPool(Service, object):
- """
- This is a central service that has a threadpool and executes SQL statements
- asynchronously, in a pool.
-
- @ivar connectionFactory: a 0-or-1-argument callable that returns a DB-API
- connection. The optional argument can be used as a label for
- diagnostic purposes.
-
- @ivar maxConnections: The connection pool will not attempt to make more
- than this many concurrent connections to the database.
-
- @type maxConnections: C{int}
-
- @ivar reactor: The reactor used for scheduling threads as well as retries
- for failed connect() attempts.
-
- @type reactor: L{IReactorTime} and L{IReactorThreads} provider.
-
- @ivar _free: The list of free L{_ConnectedTxn} objects which are not
- currently attached to a L{_SingleTxn} object, and have active
- connections ready for processing a new transaction.
-
- @ivar _busy: The list of busy L{_ConnectedTxn} objects; those currently
- servicing an unfinished L{_SingleTxn} object.
-
- @ivar _finishing: The list of 2-tuples of L{_ConnectedTxn} objects which
- have had C{abort} or C{commit} called on them, but are not done
- executing that method, and the L{Deferred} returned from that method
- that will be fired when its execution has completed.
-
- @ivar _waiting: The list of L{_SingleTxn} objects attached to a
- L{_WaitingTxn}; i.e. those which are awaiting a connection to become
- free so that they can be executed.
-
- @ivar _stopping: Is this L{ConnectionPool} in the process of shutting down?
- (If so, new connections will not be established.)
- """
-
- reactor = _reactor
-
- RETRY_TIMEOUT = 10.0
-
-
- def __init__(self, connectionFactory, maxConnections=10,
- paramstyle=DEFAULT_PARAM_STYLE, dialect=DEFAULT_DIALECT):
-
- super(ConnectionPool, self).__init__()
- self.connectionFactory = connectionFactory
- self.maxConnections = maxConnections
- self.paramstyle = paramstyle
- self.dialect = dialect
-
- self._free = []
- self._busy = []
- self._waiting = []
- self._finishing = []
- self._stopping = False
-
-
- def startService(self):
- """
- No startup necessary.
- """
-
-
- @inlineCallbacks
- def stopService(self):
- """
- Forcibly abort any outstanding transactions, and release all resources
- (notably, threads).
- """
- self._stopping = True
-
- # Phase 1: Cancel any transactions that are waiting so they won't try to
- # eagerly acquire new connections as they flow into the free-list.
- while self._waiting:
- waiting = self._waiting[0]
- waiting._stopWaiting()
-
- # Phase 2: Wait for all the Deferreds from the L{_ConnectedTxn}s that
- # have *already* been stopped.
- while self._finishing:
- yield _fork(self._finishing[0][1])
-
- # Phase 3: All of the busy transactions must be aborted first. As each
- # one is aborted, it will remove itself from the list.
- while self._busy:
- yield self._busy[0].abort()
-
- # Phase 4: All transactions should now be in the free list, since
- # 'abort()' will have put them there. Shut down all the associated
- # ThreadHolders.
- while self._free:
- # Releasing a L{_ConnectedTxn} doesn't automatically recycle it /
- # remove it the way aborting a _SingleTxn does, so we need to .pop()
- # here. L{_ConnectedTxn.stop} really shouldn't be able to fail, as
- # it's just stopping the thread, and the holder's stop() is
- # independently submitted from .abort() / .close().
- yield self._free.pop()._releaseConnection()
-
-
- def _createHolder(self):
- """
- Create a L{ThreadHolder}. (Test hook.)
- """
- return ThreadHolder(self.reactor)
-
-
- def connection(self, label="<unlabeled>"):
- """
- Find and immediately return an L{IAsyncTransaction} object. Execution
- of statements, commit and abort on that transaction may be delayed until
- a real underlying database connection is available.
-
- @return: an L{IAsyncTransaction}
- """
- if self._stopping:
- return _NoTxn(self)
- if self._free:
- basetxn = self._free.pop(0)
- self._busy.append(basetxn)
- txn = _SingleTxn(self, basetxn)
- else:
- txn = _SingleTxn(self, _WaitingTxn(self))
- self._waiting.append(txn)
- # FIXME/TESTME: should be len(self._busy) + len(self._finishing)
- # (free doesn't need to be considered, as it's tested above)
- if self._activeConnectionCount() < self.maxConnections:
- self._startOneMore()
- return txn
-
-
- def _activeConnectionCount(self):
- """
- @return: the number of active outgoing connections to the database.
- """
- return len(self._busy) + len(self._finishing)
-
-
- def _startOneMore(self):
- """
- Start one more _ConnectedTxn.
- """
- holder = self._createHolder()
- holder.start()
- txn = _ConnectingPseudoTxn(self, holder)
- # take up a slot in the 'busy' list, sit there so we can be aborted.
- self._busy.append(txn)
- def initCursor():
- # support threadlevel=1; we can't necessarily cursor() in a
- # different thread than we do transactions in.
- connection = self.connectionFactory()
- cursor = connection.cursor()
- return (connection, cursor)
- def finishInit((connection, cursor)):
- baseTxn = _ConnectedTxn(
- pool=self,
- threadHolder=holder,
- connection=connection,
- cursor=cursor
- )
- self._busy.remove(txn)
- self._repoolNow(baseTxn)
- def maybeTryAgain(f):
- log.err(f, "Re-trying connection due to connection failure")
- txn._retry = self.reactor.callLater(self.RETRY_TIMEOUT, resubmit)
- def resubmit():
- d = holder.submit(initCursor)
- d.addCallbacks(finishInit, maybeTryAgain)
- resubmit()
-
-
- def _repoolAfter(self, txn, d):
- """
- Re-pool the given L{_ConnectedTxn} after the given L{Deferred} has
- fired.
- """
- self._busy.remove(txn)
- finishRecord = (txn, d)
- self._finishing.append(finishRecord)
- def repool(result):
- self._finishing.remove(finishRecord)
- self._repoolNow(txn)
- return result
- def discard(result):
- self._finishing.remove(finishRecord)
- txn._releaseConnection()
- self._startOneMore()
- return result
- return d.addCallbacks(repool, discard)
-
-
- def _repoolNow(self, txn):
- """
- Recycle a L{_ConnectedTxn} into the free list.
- """
- txn.reset()
- if self._waiting:
- waiting = self._waiting.pop(0)
- self._busy.append(txn)
- waiting._unspoolOnto(txn)
- else:
- self._free.append(txn)
-
-
-
-def txnarg():
- return [('transactionID', Integer())]
-
-
-CHUNK_MAX = 0xffff
-
-class BigArgument(Argument):
- """
- An argument whose payload can be larger than L{CHUNK_MAX}, by splitting
- across multiple AMP keys.
- """
- def fromBox(self, name, strings, objects, proto):
- value = StringIO()
- for counter in count():
- chunk = strings.get("%s.%d" % (name, counter))
- if chunk is None:
- break
- value.write(chunk)
- objects[name] = self.fromString(value.getvalue())
-
-
- def toBox(self, name, strings, objects, proto):
- value = StringIO(self.toString(objects[name]))
- for counter in count():
- nextChunk = value.read(CHUNK_MAX)
- if not nextChunk:
- break
- strings["%s.%d" % (name, counter)] = nextChunk
-
-
-
-class Pickle(BigArgument):
- """
- A pickle sent over AMP. This is to serialize the 'args' argument to
- C{execSQL}, which is the dynamically-typed 'args' list argument to a DB-API
- C{execute} function, as well as its dynamically-typed result ('rows').
-
- This should be cleaned up into a nicer structure, but this is not a network
- protocol, so we can be a little relaxed about security.
-
- This is a L{BigArgument} rather than a regular L{Argument} because
- individual arguments and query results need to contain entire vCard or
- iCalendar documents, which can easily be greater than 64k.
- """
-
- def toString(self, inObject):
- return dumps(inObject)
-
- def fromString(self, inString):
- return loads(inString)
-
-
-
-
-class StartTxn(Command):
- """
- Start a transaction, identified with an ID generated by the client.
- """
- arguments = txnarg()
-
-
-
-class ExecSQL(Command):
- """
- Execute an SQL statement.
- """
- arguments = [('sql', String()),
- ('queryID', String()),
- ('args', Pickle())] + txnarg()
-
-
-
-class Row(Command):
- """
- A row has been returned. Sent from server to client in response to
- L{ExecSQL}.
- """
-
- arguments = [('queryID', String()),
- ('row', Pickle())]
-
-
-
-class QueryComplete(Command):
- """
- A query issued with L{ExecSQL} is complete.
- """
-
- arguments = [('queryID', String()),
- ('norows', Boolean())]
-
-
-
-class Commit(Command):
- arguments = txnarg()
-
-
-
-class Abort(Command):
- arguments = txnarg()
-
-
-
-class _NoRows(Exception):
- """
- Placeholder exception to report zero rows.
- """
-
-
-class ConnectionPoolConnection(AMP):
- """
- A L{ConnectionPoolConnection} is a single connection to a
- L{ConnectionPool}.
- """
-
- def __init__(self, pool):
- """
- Initialize a mapping of transaction IDs to transaction objects.
- """
- super(ConnectionPoolConnection, self).__init__()
- self.pool = pool
- self._txns = {}
-
-
- @StartTxn.responder
- def start(self, transactionID):
- self._txns[transactionID] = self.pool.connection()
- return {}
-
-
- @ExecSQL.responder
- @inlineCallbacks
- def receivedSQL(self, transactionID, queryID, sql, args):
- try:
- rows = yield self._txns[transactionID].execSQL(sql, args, _NoRows)
- except _NoRows:
- norows = True
- else:
- norows = False
- if rows is not None:
- for row in rows:
- # Either this should be yielded or it should be
- # requiresAnswer=False
- self.callRemote(Row, queryID=queryID, row=row)
- self.callRemote(QueryComplete, queryID=queryID, norows=norows)
- returnValue({})
-
-
- def _complete(self, transactionID, thunk):
- txn = self._txns.pop(transactionID)
- return thunk(txn).addCallback(lambda ignored: {})
-
-
- @Commit.responder
- def commit(self, transactionID):
- """
- Successfully complete the given transaction.
- """
- return self._complete(transactionID, lambda x: x.commit())
-
-
- @Abort.responder
- def abort(self, transactionID):
- """
- Roll back the given transaction.
- """
- return self._complete(transactionID, lambda x: x.abort())
-
-
-
-class ConnectionPoolClient(AMP):
- """
- A client which can execute SQL.
- """
- def __init__(self):
- super(ConnectionPoolClient, self).__init__()
- self._nextID = count().next
- self._txns = {}
- self._queries = {}
-
-
- def newTransaction(self):
- """
- Create a new networked provider of L{IAsyncTransaction}.
-
- (This will ultimately call L{ConnectionPool.connection} on the other end
- of the wire.)
-
- @rtype: L{IAsyncTransaction}
- """
- txnid = str(self._nextID())
- txn = _NetTransaction(client=self, transactionID=txnid)
- self._txns[txnid] = txn
- self.callRemote(StartTxn, transactionID=txnid)
- return txn
-
-
- @Row.responder
- def row(self, queryID, row):
- self._queries[queryID].row(row)
- return {}
-
-
- @QueryComplete.responder
- def complete(self, queryID, norows):
- self._queries.pop(queryID).done(norows)
- return {}
-
-
-
-class _Query(object):
- def __init__(self, raiseOnZeroRowCount):
- self.results = []
- self.deferred = Deferred()
- self.raiseOnZeroRowCount = raiseOnZeroRowCount
-
-
- def row(self, row):
- """
- A row was received.
- """
- self.results.append(row)
-
-
- def done(self, norows):
- """
- The query is complete.
-
- @param norows: A boolean. True if there were not any rows.
- """
- if norows and (self.raiseOnZeroRowCount is not None):
- exc = self.raiseOnZeroRowCount()
- self.deferred.errback(Failure(exc))
- else:
- self.deferred.callback(self.results)
-
-
-
-class _NetTransaction(object):
- """
- A L{_NetTransaction} is an L{AMP}-protocol-based provider of the
- L{IAsyncTransaction} interface. It sends SQL statements, query results, and
- commit/abort commands via an AMP socket to a pooling process.
- """
-
- implements(IAsyncTransaction)
-
- # See DEFAULT_PARAM_STYLE FIXME above.
- paramstyle = DEFAULT_PARAM_STYLE
-
- def __init__(self, client, transactionID):
- """
- Initialize a transaction with a L{ConnectionPoolClient} and a unique
- transaction identifier.
- """
- self._client = client
- self._transactionID = transactionID
- self._completed = False
-
-
- def execSQL(self, sql, args=None, raiseOnZeroRowCount=None):
- if args is None:
- args = []
- queryID = str(self._client._nextID())
- query = self._client._queries[queryID] = _Query(raiseOnZeroRowCount)
- self._client.callRemote(ExecSQL, queryID=queryID, sql=sql, args=args,
- transactionID=self._transactionID)
- return query.deferred
-
-
- def _complete(self, command):
- if self._completed:
- raise AlreadyFinishedError()
- self._completed = True
- return self._client.callRemote(
- command, transactionID=self._transactionID
- ).addCallback(lambda x: None)
-
-
- def commit(self):
- return self._complete(Commit)
-
-
- def abort(self):
- return self._complete(Abort)
-
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py (from rev 7192, CalendarServer/trunk/twext/enterprise/adbapi2.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/adbapi2.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,933 @@
+from twext.enterprise.ienterprise import IDerivedParameter
+# -*- test-case-name: twext.enterprise.test.test_adbapi2 -*-
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Asynchronous multi-process connection pool.
+
+This is similar to L{twisted.enterprise.adbapi}, but can hold a transaction (and
+thereby a thread) open across multiple asynchronous operations, rather than
+forcing the transaction to be completed entirely in a thread and/or entirely in
+a single SQL statement.
+
+Also, this module includes an AMP protocol for multiplexing connections through
+a single choke-point host. This is not currently in use, however, as AMP needs
+some optimization before it can be low-impact enough for this to be an
+improvement.
+"""
+
+import sys
+
+from cStringIO import StringIO
+from cPickle import dumps, loads
+from itertools import count
+
+from zope.interface import implements
+
+from twisted.internet.defer import inlineCallbacks
+from twisted.internet.defer import returnValue
+from twisted.internet.defer import Deferred
+from twisted.protocols.amp import Boolean
+from twisted.python.failure import Failure
+from twisted.protocols.amp import Argument, String, Command, AMP, Integer
+from twisted.internet import reactor as _reactor
+from twisted.application.service import Service
+from twisted.python import log
+from twisted.internet.defer import maybeDeferred
+from twisted.python.components import proxyForInterface
+
+from twext.internet.threadutils import ThreadHolder
+from twisted.internet.defer import succeed
+from twext.enterprise.ienterprise import ConnectionError
+from twisted.internet.defer import fail
+from twext.enterprise.ienterprise import (
+ AlreadyFinishedError, IAsyncTransaction, POSTGRES_DIALECT
+)
+
+
+# FIXME: there should be no defaults for connection metadata, it should be
+# discovered dynamically everywhere. Right now it's specified as an explicit
+# argument to the ConnectionPool but it should probably be determined
+# automatically from the database binding.
+
+DEFAULT_PARAM_STYLE = 'pyformat'
+DEFAULT_DIALECT = POSTGRES_DIALECT
+
+
+def _forward(thunk):
+ """
+ Forward an attribute to the connection pool.
+ """
+ @property
+ def getter(self):
+ return getattr(self._pool, thunk.func_name)
+ return getter
+
+
+
+class _ConnectedTxn(object):
+ """
+ L{IAsyncTransaction} implementation based on a L{ThreadHolder} in the
+ current process.
+ """
+ implements(IAsyncTransaction)
+
+ def __init__(self, pool, threadHolder, connection, cursor):
+ self._pool = pool
+ self._completed = True
+ self._cursor = cursor
+ self._connection = connection
+ self._holder = threadHolder
+ self._first = True
+
+
+ @_forward
+ def paramstyle(self):
+ """
+ The paramstyle attribute is mirrored from the connection pool.
+ """
+
+
+ @_forward
+ def dialect(self):
+ """
+ The dialect attribute is mirrored from the connection pool.
+ """
+
+
+ def _reallyExecSQL(self, sql, args=None, raiseOnZeroRowCount=None):
+ wasFirst = self._first
+ self._first = False
+ if args is None:
+ args = []
+ derived = None
+ for n, arg in enumerate(args):
+ if IDerivedParameter.providedBy(arg):
+ if derived is None:
+ # Be sparing with extra allocations, as this usually isn't
+ # needed, and we're doing a ton of extra work to support it.
+ derived = []
+ derived.append(arg)
+ args[n] = arg.preQuery(self._cursor)
+ try:
+ self._cursor.execute(sql, args)
+ except:
+ if wasFirst:
+ self._connection.close()
+ self._connection = self._pool.connectionFactory()
+ self._cursor = self._connection.cursor()
+ result = self._reallyExecSQL(sql, args, raiseOnZeroRowCount)
+ return result
+ else:
+ raise
+ if derived is not None:
+ for arg in derived:
+ arg.postQuery(self._cursor)
+ if raiseOnZeroRowCount is not None and self._cursor.rowcount == 0:
+ raise raiseOnZeroRowCount()
+ if self._cursor.description:
+ return self._cursor.fetchall()
+ else:
+ return None
+
+
+ noisy = False
+
+ def execSQL(self, *args, **kw):
+ result = self._holder.submit(
+ lambda : self._reallyExecSQL(*args, **kw)
+ )
+ if self.noisy:
+ def reportResult(results):
+ sys.stdout.write("\n".join([
+ "",
+ "SQL: %r %r" % (args, kw),
+ "Results: %r" % (results,),
+ "",
+ ]))
+ return results
+ result.addBoth(reportResult)
+ return result
+
+
+ def _end(self, really):
+ """
+ Common logic for commit or abort. Executed in the cursor main thread.
+ """
+ if not self._completed:
+ self._completed = True
+ def reallySomething():
+ # Executed in the cursor thread.
+ if self._cursor is None:
+ return
+ really()
+ self._first = True
+ result = self._holder.submit(reallySomething)
+ self._pool._repoolAfter(self, result)
+ return result
+ else:
+ raise AlreadyFinishedError()
+
+
+ def commit(self):
+ return self._end(self._connection.commit)
+
+
+ def abort(self):
+ 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.
+
+ @raise RuntimeError: if the transaction has not been committed or
+ aborted.
+ """
+ if not self._completed:
+ raise RuntimeError("Attempt to re-set active transaction.")
+ self._completed = False
+
+
+ def _releaseConnection(self):
+ """
+ Release the thread and database connection associated with this
+ transaction.
+ """
+ self._completed = True
+ self._stopped = True
+ holder = self._holder
+ self._holder = None
+
+ def _reallyClose():
+ if self._cursor is None:
+ return
+ self._connection.close()
+ holder.submit(_reallyClose)
+ return holder.stop()
+
+
+
+class _NoTxn(object):
+ """
+ An L{IAsyncTransaction} that indicates a local failure before we could even
+ communicate any statements (or possibly even any connection attempts) to the
+ server.
+ """
+ implements(IAsyncTransaction)
+
+ def __init__(self, pool):
+ self.paramstyle = pool.paramstyle
+ self.dialect = pool.dialect
+
+
+ def _everything(self, *a, **kw):
+ """
+ Everything fails with a L{ConnectionError}.
+ """
+ return fail(ConnectionError())
+
+
+ execSQL = _everything
+ commit = _everything
+ abort = _everything
+
+
+
+class _WaitingTxn(object):
+ """
+ A L{_WaitingTxn} is an implementation of L{IAsyncTransaction} which cannot
+ yet actually execute anything, so it waits and spools SQL requests for later
+ execution. When a L{_ConnectedTxn} becomes available later, it can be
+ unspooled onto that.
+ """
+
+ implements(IAsyncTransaction)
+
+ def __init__(self, pool):
+ self._spool = []
+ self.paramstyle = pool.paramstyle
+ self.dialect = pool.dialect
+
+
+ def _enspool(self, cmd, a=(), kw={}):
+ d = Deferred()
+ self._spool.append((d, cmd, a, kw))
+ return d
+
+
+ def _iterDestruct(self):
+ """
+ Iterate the spool list destructively, while popping items from the
+ beginning. This allows code which executes more SQL in the callback of
+ a Deferred to not interfere with the originally submitted order of
+ commands.
+ """
+ while self._spool:
+ yield self._spool.pop(0)
+
+
+ def _unspool(self, other):
+ """
+ Unspool this transaction onto another transaction.
+
+ @param other: another provider of L{IAsyncTransaction} which will
+ actually execute the SQL statements we have been buffering.
+ """
+ for (d, cmd, a, kw) in self._iterDestruct():
+ self._relayCommand(other, d, cmd, a, kw)
+
+
+ def _relayCommand(self, other, d, cmd, a, kw):
+ """
+ Relay a single command to another transaction.
+ """
+ maybeDeferred(getattr(other, cmd), *a, **kw).chainDeferred(d)
+
+
+ def execSQL(self, *a, **kw):
+ return self._enspool('execSQL', a, kw)
+
+
+ def commit(self):
+ return self._enspool('commit')
+
+
+ def abort(self):
+ return succeed(None)
+
+
+
+class _SingleTxn(proxyForInterface(iface=IAsyncTransaction,
+ originalAttribute='_baseTxn')):
+ """
+ A L{_SingleTxn} is a single-use wrapper for the longer-lived
+ L{_ConnectedTxn}, so that if a badly-behaved API client accidentally hangs
+ on to one of these and, for example C{.abort()}s it multiple times once
+ another client is using that connection, it will get some harmless
+ tracebacks.
+
+ It's a wrapper around a "real" implementation; either a L{_ConnectedTxn},
+ L{_NoTxn}, or L{_WaitingTxn} depending on the availability of real
+ underlying datbase connections.
+
+ This is the only L{IAsyncTransaction} implementation exposed to application
+ code.
+ """
+
+ def __init__(self, pool, baseTxn):
+ self._pool = pool
+ self._baseTxn = baseTxn
+ self._complete = False
+
+
+ def __repr__(self):
+ """
+ Reveal the backend in the string representation.
+ """
+ return '_SingleTxn(%r)' % (self._baseTxn,)
+
+
+ def _unspoolOnto(self, baseTxn):
+ """
+ Replace my C{_baseTxn}, currently a L{_WaitingTxn}, with a new
+ implementation of L{IAsyncTransaction} that will actually do the work;
+ either a L{_ConnectedTxn} or a L{_NoTxn}.
+ """
+ spooledBase = self._baseTxn
+ self._baseTxn = baseTxn
+ spooledBase._unspool(baseTxn)
+
+
+ def execSQL(self, *a, **kw):
+ self._checkComplete()
+ return super(_SingleTxn, self).execSQL(*a, **kw)
+
+
+ def commit(self):
+ self._markComplete()
+ return super(_SingleTxn, self).commit()
+
+
+ def abort(self):
+ self._markComplete()
+ if self in self._pool._waiting:
+ self._stopWaiting()
+ return succeed(None)
+ return super(_SingleTxn, self).abort()
+
+
+ def _stopWaiting(self):
+ """
+ Stop waiting for a free transaction and fail.
+ """
+ self._pool._waiting.remove(self)
+ self._unspoolOnto(_NoTxn(self._pool))
+
+
+ def _checkComplete(self):
+ """
+ If the transaction is complete, raise L{AlreadyFinishedError}
+ """
+ if self._complete:
+ raise AlreadyFinishedError()
+
+
+ def _markComplete(self):
+ """
+ Mark the transaction as complete, raising AlreadyFinishedError.
+ """
+ self._checkComplete()
+ self._complete = True
+
+
+
+class _ConnectingPseudoTxn(object):
+
+ _retry = None
+
+ def __init__(self, pool, holder):
+ self._pool = pool
+ self._holder = holder
+
+
+ def abort(self):
+ if self._retry is not None:
+ self._retry.cancel()
+ d = self._holder.stop()
+ def removeme(ignored):
+ if self in self._pool._busy:
+ self._pool._busy.remove(self)
+ d.addCallback(removeme)
+ return d
+
+
+
+def _fork(x):
+ """
+ Produce a L{Deferred} that will fire when another L{Deferred} fires without
+ disturbing its results.
+ """
+ d = Deferred()
+ def fired(result):
+ d.callback(result)
+ return result
+
+ x.addBoth(fired)
+ return d
+
+
+
+class ConnectionPool(Service, object):
+ """
+ This is a central service that has a threadpool and executes SQL statements
+ asynchronously, in a pool.
+
+ @ivar connectionFactory: a 0-or-1-argument callable that returns a DB-API
+ connection. The optional argument can be used as a label for
+ diagnostic purposes.
+
+ @ivar maxConnections: The connection pool will not attempt to make more
+ than this many concurrent connections to the database.
+
+ @type maxConnections: C{int}
+
+ @ivar reactor: The reactor used for scheduling threads as well as retries
+ for failed connect() attempts.
+
+ @type reactor: L{IReactorTime} and L{IReactorThreads} provider.
+
+ @ivar _free: The list of free L{_ConnectedTxn} objects which are not
+ currently attached to a L{_SingleTxn} object, and have active
+ connections ready for processing a new transaction.
+
+ @ivar _busy: The list of busy L{_ConnectedTxn} objects; those currently
+ servicing an unfinished L{_SingleTxn} object.
+
+ @ivar _finishing: The list of 2-tuples of L{_ConnectedTxn} objects which
+ have had C{abort} or C{commit} called on them, but are not done
+ executing that method, and the L{Deferred} returned from that method
+ that will be fired when its execution has completed.
+
+ @ivar _waiting: The list of L{_SingleTxn} objects attached to a
+ L{_WaitingTxn}; i.e. those which are awaiting a connection to become
+ free so that they can be executed.
+
+ @ivar _stopping: Is this L{ConnectionPool} in the process of shutting down?
+ (If so, new connections will not be established.)
+ """
+
+ reactor = _reactor
+
+ RETRY_TIMEOUT = 10.0
+
+
+ def __init__(self, connectionFactory, maxConnections=10,
+ paramstyle=DEFAULT_PARAM_STYLE, dialect=DEFAULT_DIALECT):
+
+ super(ConnectionPool, self).__init__()
+ self.connectionFactory = connectionFactory
+ self.maxConnections = maxConnections
+ self.paramstyle = paramstyle
+ self.dialect = dialect
+
+ self._free = []
+ self._busy = []
+ self._waiting = []
+ self._finishing = []
+ self._stopping = False
+
+
+ def startService(self):
+ """
+ No startup necessary.
+ """
+
+
+ @inlineCallbacks
+ def stopService(self):
+ """
+ Forcibly abort any outstanding transactions, and release all resources
+ (notably, threads).
+ """
+ self._stopping = True
+
+ # Phase 1: Cancel any transactions that are waiting so they won't try to
+ # eagerly acquire new connections as they flow into the free-list.
+ while self._waiting:
+ waiting = self._waiting[0]
+ waiting._stopWaiting()
+
+ # Phase 2: Wait for all the Deferreds from the L{_ConnectedTxn}s that
+ # have *already* been stopped.
+ while self._finishing:
+ yield _fork(self._finishing[0][1])
+
+ # Phase 3: All of the busy transactions must be aborted first. As each
+ # one is aborted, it will remove itself from the list.
+ while self._busy:
+ yield self._busy[0].abort()
+
+ # Phase 4: All transactions should now be in the free list, since
+ # 'abort()' will have put them there. Shut down all the associated
+ # ThreadHolders.
+ while self._free:
+ # Releasing a L{_ConnectedTxn} doesn't automatically recycle it /
+ # remove it the way aborting a _SingleTxn does, so we need to .pop()
+ # here. L{_ConnectedTxn.stop} really shouldn't be able to fail, as
+ # it's just stopping the thread, and the holder's stop() is
+ # independently submitted from .abort() / .close().
+ yield self._free.pop()._releaseConnection()
+
+
+ def _createHolder(self):
+ """
+ Create a L{ThreadHolder}. (Test hook.)
+ """
+ return ThreadHolder(self.reactor)
+
+
+ def connection(self, label="<unlabeled>"):
+ """
+ Find and immediately return an L{IAsyncTransaction} object. Execution
+ of statements, commit and abort on that transaction may be delayed until
+ a real underlying database connection is available.
+
+ @return: an L{IAsyncTransaction}
+ """
+ if self._stopping:
+ return _NoTxn(self)
+ if self._free:
+ basetxn = self._free.pop(0)
+ self._busy.append(basetxn)
+ txn = _SingleTxn(self, basetxn)
+ else:
+ txn = _SingleTxn(self, _WaitingTxn(self))
+ self._waiting.append(txn)
+ # FIXME/TESTME: should be len(self._busy) + len(self._finishing)
+ # (free doesn't need to be considered, as it's tested above)
+ if self._activeConnectionCount() < self.maxConnections:
+ self._startOneMore()
+ return txn
+
+
+ def _activeConnectionCount(self):
+ """
+ @return: the number of active outgoing connections to the database.
+ """
+ return len(self._busy) + len(self._finishing)
+
+
+ def _startOneMore(self):
+ """
+ Start one more _ConnectedTxn.
+ """
+ holder = self._createHolder()
+ holder.start()
+ txn = _ConnectingPseudoTxn(self, holder)
+ # take up a slot in the 'busy' list, sit there so we can be aborted.
+ self._busy.append(txn)
+ def initCursor():
+ # support threadlevel=1; we can't necessarily cursor() in a
+ # different thread than we do transactions in.
+ connection = self.connectionFactory()
+ cursor = connection.cursor()
+ return (connection, cursor)
+ def finishInit((connection, cursor)):
+ baseTxn = _ConnectedTxn(
+ pool=self,
+ threadHolder=holder,
+ connection=connection,
+ cursor=cursor
+ )
+ self._busy.remove(txn)
+ self._repoolNow(baseTxn)
+ def maybeTryAgain(f):
+ log.err(f, "Re-trying connection due to connection failure")
+ txn._retry = self.reactor.callLater(self.RETRY_TIMEOUT, resubmit)
+ def resubmit():
+ d = holder.submit(initCursor)
+ d.addCallbacks(finishInit, maybeTryAgain)
+ resubmit()
+
+
+ def _repoolAfter(self, txn, d):
+ """
+ Re-pool the given L{_ConnectedTxn} after the given L{Deferred} has
+ fired.
+ """
+ self._busy.remove(txn)
+ finishRecord = (txn, d)
+ self._finishing.append(finishRecord)
+ def repool(result):
+ self._finishing.remove(finishRecord)
+ self._repoolNow(txn)
+ return result
+ def discard(result):
+ self._finishing.remove(finishRecord)
+ txn._releaseConnection()
+ self._startOneMore()
+ return result
+ return d.addCallbacks(repool, discard)
+
+
+ def _repoolNow(self, txn):
+ """
+ Recycle a L{_ConnectedTxn} into the free list.
+ """
+ txn.reset()
+ if self._waiting:
+ waiting = self._waiting.pop(0)
+ self._busy.append(txn)
+ waiting._unspoolOnto(txn)
+ else:
+ self._free.append(txn)
+
+
+
+def txnarg():
+ return [('transactionID', Integer())]
+
+
+CHUNK_MAX = 0xffff
+
+class BigArgument(Argument):
+ """
+ An argument whose payload can be larger than L{CHUNK_MAX}, by splitting
+ across multiple AMP keys.
+ """
+ def fromBox(self, name, strings, objects, proto):
+ value = StringIO()
+ for counter in count():
+ chunk = strings.get("%s.%d" % (name, counter))
+ if chunk is None:
+ break
+ value.write(chunk)
+ objects[name] = self.fromString(value.getvalue())
+
+
+ def toBox(self, name, strings, objects, proto):
+ value = StringIO(self.toString(objects[name]))
+ for counter in count():
+ nextChunk = value.read(CHUNK_MAX)
+ if not nextChunk:
+ break
+ strings["%s.%d" % (name, counter)] = nextChunk
+
+
+
+class Pickle(BigArgument):
+ """
+ A pickle sent over AMP. This is to serialize the 'args' argument to
+ C{execSQL}, which is the dynamically-typed 'args' list argument to a DB-API
+ C{execute} function, as well as its dynamically-typed result ('rows').
+
+ This should be cleaned up into a nicer structure, but this is not a network
+ protocol, so we can be a little relaxed about security.
+
+ This is a L{BigArgument} rather than a regular L{Argument} because
+ individual arguments and query results need to contain entire vCard or
+ iCalendar documents, which can easily be greater than 64k.
+ """
+
+ def toString(self, inObject):
+ return dumps(inObject)
+
+ def fromString(self, inString):
+ return loads(inString)
+
+
+
+
+class StartTxn(Command):
+ """
+ Start a transaction, identified with an ID generated by the client.
+ """
+ arguments = txnarg()
+
+
+
+class ExecSQL(Command):
+ """
+ Execute an SQL statement.
+ """
+ arguments = [('sql', String()),
+ ('queryID', String()),
+ ('args', Pickle())] + txnarg()
+
+
+
+class Row(Command):
+ """
+ A row has been returned. Sent from server to client in response to
+ L{ExecSQL}.
+ """
+
+ arguments = [('queryID', String()),
+ ('row', Pickle())]
+
+
+
+class QueryComplete(Command):
+ """
+ A query issued with L{ExecSQL} is complete.
+ """
+
+ arguments = [('queryID', String()),
+ ('norows', Boolean())]
+
+
+
+class Commit(Command):
+ arguments = txnarg()
+
+
+
+class Abort(Command):
+ arguments = txnarg()
+
+
+
+class _NoRows(Exception):
+ """
+ Placeholder exception to report zero rows.
+ """
+
+
+class ConnectionPoolConnection(AMP):
+ """
+ A L{ConnectionPoolConnection} is a single connection to a
+ L{ConnectionPool}.
+ """
+
+ def __init__(self, pool):
+ """
+ Initialize a mapping of transaction IDs to transaction objects.
+ """
+ super(ConnectionPoolConnection, self).__init__()
+ self.pool = pool
+ self._txns = {}
+
+
+ @StartTxn.responder
+ def start(self, transactionID):
+ self._txns[transactionID] = self.pool.connection()
+ return {}
+
+
+ @ExecSQL.responder
+ @inlineCallbacks
+ def receivedSQL(self, transactionID, queryID, sql, args):
+ try:
+ rows = yield self._txns[transactionID].execSQL(sql, args, _NoRows)
+ except _NoRows:
+ norows = True
+ else:
+ norows = False
+ if rows is not None:
+ for row in rows:
+ # Either this should be yielded or it should be
+ # requiresAnswer=False
+ self.callRemote(Row, queryID=queryID, row=row)
+ self.callRemote(QueryComplete, queryID=queryID, norows=norows)
+ returnValue({})
+
+
+ def _complete(self, transactionID, thunk):
+ txn = self._txns.pop(transactionID)
+ return thunk(txn).addCallback(lambda ignored: {})
+
+
+ @Commit.responder
+ def commit(self, transactionID):
+ """
+ Successfully complete the given transaction.
+ """
+ return self._complete(transactionID, lambda x: x.commit())
+
+
+ @Abort.responder
+ def abort(self, transactionID):
+ """
+ Roll back the given transaction.
+ """
+ return self._complete(transactionID, lambda x: x.abort())
+
+
+
+class ConnectionPoolClient(AMP):
+ """
+ A client which can execute SQL.
+ """
+ def __init__(self):
+ super(ConnectionPoolClient, self).__init__()
+ self._nextID = count().next
+ self._txns = {}
+ self._queries = {}
+
+
+ def newTransaction(self):
+ """
+ Create a new networked provider of L{IAsyncTransaction}.
+
+ (This will ultimately call L{ConnectionPool.connection} on the other end
+ of the wire.)
+
+ @rtype: L{IAsyncTransaction}
+ """
+ txnid = str(self._nextID())
+ txn = _NetTransaction(client=self, transactionID=txnid)
+ self._txns[txnid] = txn
+ self.callRemote(StartTxn, transactionID=txnid)
+ return txn
+
+
+ @Row.responder
+ def row(self, queryID, row):
+ self._queries[queryID].row(row)
+ return {}
+
+
+ @QueryComplete.responder
+ def complete(self, queryID, norows):
+ self._queries.pop(queryID).done(norows)
+ return {}
+
+
+
+class _Query(object):
+ def __init__(self, raiseOnZeroRowCount):
+ self.results = []
+ self.deferred = Deferred()
+ self.raiseOnZeroRowCount = raiseOnZeroRowCount
+
+
+ def row(self, row):
+ """
+ A row was received.
+ """
+ self.results.append(row)
+
+
+ def done(self, norows):
+ """
+ The query is complete.
+
+ @param norows: A boolean. True if there were not any rows.
+ """
+ if norows and (self.raiseOnZeroRowCount is not None):
+ exc = self.raiseOnZeroRowCount()
+ self.deferred.errback(Failure(exc))
+ else:
+ self.deferred.callback(self.results)
+
+
+
+class _NetTransaction(object):
+ """
+ A L{_NetTransaction} is an L{AMP}-protocol-based provider of the
+ L{IAsyncTransaction} interface. It sends SQL statements, query results, and
+ commit/abort commands via an AMP socket to a pooling process.
+ """
+
+ implements(IAsyncTransaction)
+
+ # See DEFAULT_PARAM_STYLE FIXME above.
+ paramstyle = DEFAULT_PARAM_STYLE
+
+ def __init__(self, client, transactionID):
+ """
+ Initialize a transaction with a L{ConnectionPoolClient} and a unique
+ transaction identifier.
+ """
+ self._client = client
+ self._transactionID = transactionID
+ self._completed = False
+
+
+ def execSQL(self, sql, args=None, raiseOnZeroRowCount=None):
+ if args is None:
+ args = []
+ queryID = str(self._client._nextID())
+ query = self._client._queries[queryID] = _Query(raiseOnZeroRowCount)
+ self._client.callRemote(ExecSQL, queryID=queryID, sql=sql, args=args,
+ transactionID=self._transactionID)
+ return query.deferred
+
+
+ def _complete(self, command):
+ if self._completed:
+ raise AlreadyFinishedError()
+ self._completed = True
+ return self._client.callRemote(
+ command, transactionID=self._transactionID
+ ).addCallback(lambda x: None)
+
+
+ def commit(self):
+ return self._complete(Commit)
+
+
+ def abort(self):
+ return self._complete(Abort)
+
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,27 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Toolkit for building a Data-Access Layer (DAL).
-
-This includes an abstract representation of SQL objects like tables, columns,
-sequences and queries, a parser to convert your schema to that representation,
-and tools for working with it.
-
-In some ways this is similar to the low levels of something like SQLAlchemy, but
-it is designed to be more introspectable, to allow for features like automatic
-caching and index detection. NB: work in progress.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,27 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Toolkit for building a Data-Access Layer (DAL).
+
+This includes an abstract representation of SQL objects like tables, columns,
+sequences and queries, a parser to convert your schema to that representation,
+and tools for working with it.
+
+In some ways this is similar to the low levels of something like SQLAlchemy, but
+it is designed to be more introspectable, to allow for features like automatic
+caching and index detection. NB: work in progress.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/model.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,379 +0,0 @@
-# -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Model classes for SQL.
-"""
-from twisted.python.util import FancyEqMixin
-
-class SQLType(object):
- """
- A data-type as defined in SQL; like "integer" or "real" or "varchar(255)".
-
- @ivar name: the name of this type.
- @type name: C{str}
-
- @ivar length: the length of this type, if it is a type like 'varchar' or
- 'character' that comes with a parenthetical length.
- @type length: C{int} or C{NoneType}
- """
-
- def __init__(self, name, length):
- _checkstr(name)
- self.name = name
- self.length = length
-
-
- def __eq__(self, other):
- """
- Compare equal to other L{SQLTypes} with matching name and length.
- """
- if not isinstance(other, SQLType):
- return NotImplemented
- return (self.name, self.length) == (other.name, other.length)
-
-
- def __ne__(self, other):
- """
- (Inequality is the opposite of equality.)
- """
- if not isinstance(other, SQLType):
- return NotImplemented
- return not self.__eq__(other)
-
-
- def __repr__(self):
- """
- A useful string representation which includes the name and length if
- present.
- """
- if self.length:
- lendesc = '(%s)' % (self.length)
- else:
- lendesc = ''
- return '<SQL Type: %r%s>' % (self.name, lendesc)
-
-
-
-class Constraint(object):
- """
- A constraint on a set of columns.
-
- @ivar type: the type of constraint. Currently, only C{'UNIQUE'} and C{'NOT
- NULL'} are supported.
- @type type: C{str}
-
- @ivar affectsColumns: Columns affected by this constraint.
-
- @type affectsColumns: C{list} of L{Column}
- """
-
- # Values for 'type' attribute:
- NOT_NULL = 'NOT NULL'
- UNIQUE = 'UNIQUE'
-
- def __init__(self, type, affectsColumns):
- self.affectsColumns = affectsColumns
- # XXX: possibly different constraint types should have different
- # classes?
- self.type = type
-
-
-
-class ProcedureCall(object):
- """
- An invocation of a stored procedure or built-in function.
- """
-
- def __init__(self, name, args):
- _checkstr(name)
- self.name = name
- self.args = args
-
-
-
-class NO_DEFAULT(object):
- """
- Placeholder value for not having a default. (C{None} would not be suitable,
- as that would imply a default of C{NULL}).
- """
-
-
-
-def _checkstr(x):
- """
- Verify that C{x} is a C{str}. Raise a L{ValueError} if not. This is to
- prevent pollution with unicode values.
- """
- if not isinstance(x, str):
- raise ValueError("%r is not a str." % (x,))
-
-
-
-class Column(FancyEqMixin, object):
- """
- A column from a table.
-
- @ivar table: The L{Table} to which this L{Column} belongs.
- @type table: L{Table}
-
- @ivar name: The unqualified name of this column. For example, in the case
- of a column BAR in a table FOO, this would be the string C{'BAR'}.
- @type name: C{str}
-
- @ivar type: The declared type of this column.
- @type type: L{SQLType}
-
- @ivar references: If this column references a foreign key on another table,
- this will be a reference to that table; otherwise (normally) C{None}.
- @type references: L{Table} or C{NoneType}
-
- @ivar cascade: If this column references another table, will this column's
- row be deleted when the matching row in that other table is deleted?
- (In other words, the SQL feature 'on delete cascade'.)
- @type cascade: C{bool}
- """
-
- compareAttributes = 'table name'.split()
-
- def __init__(self, table, name, type):
- _checkstr(name)
- self.table = table
- self.name = name
- self.type = type
- self.default = NO_DEFAULT
- self.references = None
- self.cascade = False
-
-
- def __repr__(self):
- return '<Column (%s %r)>' % (self.name, self.type)
-
-
- def canBeNull(self):
- """
- Can this column ever be C{NULL}, i.e. C{None}? In other words, is it
- free of any C{NOT NULL} constraints?
-
- @return: C{True} if so, C{False} if not.
- """
- for constraint in self.table.constraints:
- if self in constraint.affectsColumns:
- if constraint.type is Constraint.NOT_NULL:
- return False
- return True
-
-
- def setDefaultValue(self, value):
- """
- Change the default value of this column. (Should only be called during
- schema parsing.)
- """
- self.default = value
-
-
- def needsValue(self):
- """
- Does this column require a value in INSERT statements which create rows?
-
- @return: C{True} for L{Column}s with no default specified which also
- cannot be NULL, C{False} otherwise.
-
- @rtype: C{bool}
- """
- return not (self.canBeNull() or
- (self.default not in (None, NO_DEFAULT)))
-
-
- def doesReferenceName(self, name):
- """
- Change this column to refer to a table in the schema. (Should only be
- called during schema parsing.)
-
- @param name: the name of a L{Table} in this L{Column}'s L{Schema}.
- @type name: L{str}
- """
- self.references = self.table.schema.tableNamed(name)
- if self.references.primaryKey.type != self.type:
- print 'Mismatch', self.references.primaryKey.type, self.type
-
-
-
-class Table(FancyEqMixin, object):
- """
- A set of columns.
-
- @ivar descriptiveComment: A docstring for the table. Parsed from a '--'
- comment preceding this table in the SQL schema file that was parsed, if
- any.
- @type descriptiveComment: C{str}
-
- @ivar schema: a reference to the L{Schema} to which this table belongs.
- """
-
- compareAttributes = 'schema name'.split()
-
- def __init__(self, schema, name):
- _checkstr(name)
- self.descriptiveComment = ''
- self.schema = schema
- self.name = name
- self.columns = []
- self.constraints = []
- self.schemaRows = []
- self.primaryKey = None
- self.schema.tables.append(self)
-
-
- def __repr__(self):
- return '<Table %r:%r>' % (self.name, self.columns)
-
-
- def columnNamed(self, name):
- """
- Retrieve a column from this table with a given name.
-
- @raise KeyError: if no such table exists.
-
- @return: a column
-
- @rtype: L{Column}
- """
- for column in self.columns:
- if column.name == name:
- return column
- raise KeyError("no such column: %r" % (name,))
-
-
- def addColumn(self, name, type):
- """
- A new column was parsed for this table.
-
- @param name: The unqualified name of the column.
-
- @type name: C{str}
-
- @param type: The L{SQLType} describing the column's type.
- """
- column = Column(self, name, type)
- self.columns.append(column)
- return column
-
-
- def tableConstraint(self, constraintType, columnNames):
- """
- This table is affected by a constraint. (Should only be called during
- schema parsing.)
-
- @param constraintType: the type of constraint; either
- L{Constraint.NOT_NULL} or L{Constraint.UNIQUE}, currently.
- """
- affectsColumns = []
- for name in columnNames:
- affectsColumns.append(self.columnNamed(name))
- self.constraints.append(Constraint(constraintType, affectsColumns))
-
-
- def insertSchemaRow(self, values):
- """
- A statically-defined row was inserted as part of the schema itself.
- This is used for tables that want to track static enumerations, for
- example, but want to be referred to by a foreign key in other tables for
- proper referential integrity.
-
- Append this data to this L{Table}'s L{Table.schemaRows}.
-
- (Should only be called during schema parsing.)
-
- @param values: a C{list} of data items, one for each column in this
- table's current list of L{Column}s.
- """
- row = {}
- for column, value in zip(self.columns, values):
- row[column] = value
- self.schemaRows.append(row)
-
-
- def addComment(self, comment):
- """
- Add a comment to C{descriptiveComment}.
-
- @param comment: some additional descriptive text
- @type comment: C{str}
- """
- self.descriptiveComment = comment
-
-
- def uniques(self):
- """
- @return: an iterable of C{set}s of C{Column}s which are unique within
- this table.
- """
- for constraint in self.constraints:
- if constraint.type is Constraint.UNIQUE:
- yield set(constraint.affectsColumns)
-
-
-
-class Sequence(FancyEqMixin, object):
- """
- A sequence object.
- """
-
- compareAttributes = 'name'.split()
-
- def __init__(self, name):
- _checkstr(name)
- self.name = name
- self.referringColumns = []
-
-
- def __repr__(self):
- return '<Sequence %r>' % (self.name,)
-
-
-
-class Schema(object):
- """
- A schema containing tables, indexes, and sequences.
- """
-
- def __init__(self, filename='<string>'):
- self.filename = filename
- self.tables = []
- self.sequences = []
-
-
- def __repr__(self):
- return '<Schema %r>' % (self.filename,)
-
-
- def tableNamed(self, name):
- for table in self.tables:
- if table.name == name:
- return table
- raise KeyError(name)
-
-
- def sequenceNamed(self, name):
- for sequence in self.sequences:
- if sequence.name == name:
- return sequence
- raise KeyError(name)
-
-
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/model.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/model.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,379 @@
+# -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Model classes for SQL.
+"""
+from twisted.python.util import FancyEqMixin
+
+class SQLType(object):
+ """
+ A data-type as defined in SQL; like "integer" or "real" or "varchar(255)".
+
+ @ivar name: the name of this type.
+ @type name: C{str}
+
+ @ivar length: the length of this type, if it is a type like 'varchar' or
+ 'character' that comes with a parenthetical length.
+ @type length: C{int} or C{NoneType}
+ """
+
+ def __init__(self, name, length):
+ _checkstr(name)
+ self.name = name
+ self.length = length
+
+
+ def __eq__(self, other):
+ """
+ Compare equal to other L{SQLTypes} with matching name and length.
+ """
+ if not isinstance(other, SQLType):
+ return NotImplemented
+ return (self.name, self.length) == (other.name, other.length)
+
+
+ def __ne__(self, other):
+ """
+ (Inequality is the opposite of equality.)
+ """
+ if not isinstance(other, SQLType):
+ return NotImplemented
+ return not self.__eq__(other)
+
+
+ def __repr__(self):
+ """
+ A useful string representation which includes the name and length if
+ present.
+ """
+ if self.length:
+ lendesc = '(%s)' % (self.length)
+ else:
+ lendesc = ''
+ return '<SQL Type: %r%s>' % (self.name, lendesc)
+
+
+
+class Constraint(object):
+ """
+ A constraint on a set of columns.
+
+ @ivar type: the type of constraint. Currently, only C{'UNIQUE'} and C{'NOT
+ NULL'} are supported.
+ @type type: C{str}
+
+ @ivar affectsColumns: Columns affected by this constraint.
+
+ @type affectsColumns: C{list} of L{Column}
+ """
+
+ # Values for 'type' attribute:
+ NOT_NULL = 'NOT NULL'
+ UNIQUE = 'UNIQUE'
+
+ def __init__(self, type, affectsColumns):
+ self.affectsColumns = affectsColumns
+ # XXX: possibly different constraint types should have different
+ # classes?
+ self.type = type
+
+
+
+class ProcedureCall(object):
+ """
+ An invocation of a stored procedure or built-in function.
+ """
+
+ def __init__(self, name, args):
+ _checkstr(name)
+ self.name = name
+ self.args = args
+
+
+
+class NO_DEFAULT(object):
+ """
+ Placeholder value for not having a default. (C{None} would not be suitable,
+ as that would imply a default of C{NULL}).
+ """
+
+
+
+def _checkstr(x):
+ """
+ Verify that C{x} is a C{str}. Raise a L{ValueError} if not. This is to
+ prevent pollution with unicode values.
+ """
+ if not isinstance(x, str):
+ raise ValueError("%r is not a str." % (x,))
+
+
+
+class Column(FancyEqMixin, object):
+ """
+ A column from a table.
+
+ @ivar table: The L{Table} to which this L{Column} belongs.
+ @type table: L{Table}
+
+ @ivar name: The unqualified name of this column. For example, in the case
+ of a column BAR in a table FOO, this would be the string C{'BAR'}.
+ @type name: C{str}
+
+ @ivar type: The declared type of this column.
+ @type type: L{SQLType}
+
+ @ivar references: If this column references a foreign key on another table,
+ this will be a reference to that table; otherwise (normally) C{None}.
+ @type references: L{Table} or C{NoneType}
+
+ @ivar cascade: If this column references another table, will this column's
+ row be deleted when the matching row in that other table is deleted?
+ (In other words, the SQL feature 'on delete cascade'.)
+ @type cascade: C{bool}
+ """
+
+ compareAttributes = 'table name'.split()
+
+ def __init__(self, table, name, type):
+ _checkstr(name)
+ self.table = table
+ self.name = name
+ self.type = type
+ self.default = NO_DEFAULT
+ self.references = None
+ self.cascade = False
+
+
+ def __repr__(self):
+ return '<Column (%s %r)>' % (self.name, self.type)
+
+
+ def canBeNull(self):
+ """
+ Can this column ever be C{NULL}, i.e. C{None}? In other words, is it
+ free of any C{NOT NULL} constraints?
+
+ @return: C{True} if so, C{False} if not.
+ """
+ for constraint in self.table.constraints:
+ if self in constraint.affectsColumns:
+ if constraint.type is Constraint.NOT_NULL:
+ return False
+ return True
+
+
+ def setDefaultValue(self, value):
+ """
+ Change the default value of this column. (Should only be called during
+ schema parsing.)
+ """
+ self.default = value
+
+
+ def needsValue(self):
+ """
+ Does this column require a value in INSERT statements which create rows?
+
+ @return: C{True} for L{Column}s with no default specified which also
+ cannot be NULL, C{False} otherwise.
+
+ @rtype: C{bool}
+ """
+ return not (self.canBeNull() or
+ (self.default not in (None, NO_DEFAULT)))
+
+
+ def doesReferenceName(self, name):
+ """
+ Change this column to refer to a table in the schema. (Should only be
+ called during schema parsing.)
+
+ @param name: the name of a L{Table} in this L{Column}'s L{Schema}.
+ @type name: L{str}
+ """
+ self.references = self.table.schema.tableNamed(name)
+ if self.references.primaryKey.type != self.type:
+ print 'Mismatch', self.references.primaryKey.type, self.type
+
+
+
+class Table(FancyEqMixin, object):
+ """
+ A set of columns.
+
+ @ivar descriptiveComment: A docstring for the table. Parsed from a '--'
+ comment preceding this table in the SQL schema file that was parsed, if
+ any.
+ @type descriptiveComment: C{str}
+
+ @ivar schema: a reference to the L{Schema} to which this table belongs.
+ """
+
+ compareAttributes = 'schema name'.split()
+
+ def __init__(self, schema, name):
+ _checkstr(name)
+ self.descriptiveComment = ''
+ self.schema = schema
+ self.name = name
+ self.columns = []
+ self.constraints = []
+ self.schemaRows = []
+ self.primaryKey = None
+ self.schema.tables.append(self)
+
+
+ def __repr__(self):
+ return '<Table %r:%r>' % (self.name, self.columns)
+
+
+ def columnNamed(self, name):
+ """
+ Retrieve a column from this table with a given name.
+
+ @raise KeyError: if no such table exists.
+
+ @return: a column
+
+ @rtype: L{Column}
+ """
+ for column in self.columns:
+ if column.name == name:
+ return column
+ raise KeyError("no such column: %r" % (name,))
+
+
+ def addColumn(self, name, type):
+ """
+ A new column was parsed for this table.
+
+ @param name: The unqualified name of the column.
+
+ @type name: C{str}
+
+ @param type: The L{SQLType} describing the column's type.
+ """
+ column = Column(self, name, type)
+ self.columns.append(column)
+ return column
+
+
+ def tableConstraint(self, constraintType, columnNames):
+ """
+ This table is affected by a constraint. (Should only be called during
+ schema parsing.)
+
+ @param constraintType: the type of constraint; either
+ L{Constraint.NOT_NULL} or L{Constraint.UNIQUE}, currently.
+ """
+ affectsColumns = []
+ for name in columnNames:
+ affectsColumns.append(self.columnNamed(name))
+ self.constraints.append(Constraint(constraintType, affectsColumns))
+
+
+ def insertSchemaRow(self, values):
+ """
+ A statically-defined row was inserted as part of the schema itself.
+ This is used for tables that want to track static enumerations, for
+ example, but want to be referred to by a foreign key in other tables for
+ proper referential integrity.
+
+ Append this data to this L{Table}'s L{Table.schemaRows}.
+
+ (Should only be called during schema parsing.)
+
+ @param values: a C{list} of data items, one for each column in this
+ table's current list of L{Column}s.
+ """
+ row = {}
+ for column, value in zip(self.columns, values):
+ row[column] = value
+ self.schemaRows.append(row)
+
+
+ def addComment(self, comment):
+ """
+ Add a comment to C{descriptiveComment}.
+
+ @param comment: some additional descriptive text
+ @type comment: C{str}
+ """
+ self.descriptiveComment = comment
+
+
+ def uniques(self):
+ """
+ @return: an iterable of C{set}s of C{Column}s which are unique within
+ this table.
+ """
+ for constraint in self.constraints:
+ if constraint.type is Constraint.UNIQUE:
+ yield set(constraint.affectsColumns)
+
+
+
+class Sequence(FancyEqMixin, object):
+ """
+ A sequence object.
+ """
+
+ compareAttributes = 'name'.split()
+
+ def __init__(self, name):
+ _checkstr(name)
+ self.name = name
+ self.referringColumns = []
+
+
+ def __repr__(self):
+ return '<Sequence %r>' % (self.name,)
+
+
+
+class Schema(object):
+ """
+ A schema containing tables, indexes, and sequences.
+ """
+
+ def __init__(self, filename='<string>'):
+ self.filename = filename
+ self.tables = []
+ self.sequences = []
+
+
+ def __repr__(self):
+ return '<Schema %r>' % (self.filename,)
+
+
+ def tableNamed(self, name):
+ for table in self.tables:
+ if table.name == name:
+ return table
+ raise KeyError(name)
+
+
+ def sequenceNamed(self, name):
+ for sequence in self.sequences:
+ if sequence.name == name:
+ return sequence
+ raise KeyError(name)
+
+
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/parseschema.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,468 +0,0 @@
-# -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Parser for SQL schema.
-"""
-
-from itertools import chain
-
-from sqlparse import parse, keywords
-from sqlparse.tokens import Keyword, Punctuation, Number, String, Name
-from sqlparse.sql import (Comment, Identifier, Parenthesis, IdentifierList,
- Function)
-
-from twext.enterprise.dal.model import Schema, Table, SQLType, ProcedureCall
-from twext.enterprise.dal.model import Constraint
-from twext.enterprise.dal.model import Sequence
-
-
-
-def _fixKeywords():
- """
- Work around bugs in SQLParse, adding SEQUENCE as a keyword (since it is
- treated as one in postgres) and removing ACCESS and SIZE (since we use those
- as column names). Technically those are keywords in SQL, but they aren't
- treated as such by postgres's parser.
- """
- keywords.KEYWORDS['SEQUENCE'] = Keyword
- for columnNameKeyword in ['ACCESS', 'SIZE']:
- del keywords.KEYWORDS[columnNameKeyword]
-
-_fixKeywords()
-
-
-
-def tableFromCreateStatement(schema, stmt):
- """
- Add a table from a CREATE TABLE sqlparse statement object.
-
- @param schema: The schema to add the table statement to.
-
- @type schema: L{Schema}
-
- @param stmt: The C{CREATE TABLE} statement object.
-
- @type stmt: L{Statement}
- """
- i = iterSignificant(stmt)
- expect(i, ttype=Keyword.DDL, value='CREATE')
- expect(i, ttype=Keyword, value='TABLE')
- function = expect(i, cls=Function)
- i = iterSignificant(function)
- name = expect(i, cls=Identifier).get_name().encode('utf-8')
- self = Table(schema, name)
- parens = expect(i, cls=Parenthesis)
- cp = _ColumnParser(self, iterSignificant(parens), parens)
- cp.parse()
- return self
-
-
-
-def schemaFromPath(path):
- """
- Get a L{Schema}.
-
- @param path: a L{FilePath}-like object containing SQL.
-
- @return: a L{Schema} object with the contents of the given C{path} parsed
- and added to it as L{Table} objects.
- """
- schema = Schema(path.basename())
- schemaData = path.getContent()
- addSQLToSchema(schema, schemaData)
- return schema
-
-
-
-def addSQLToSchema(schema, schemaData):
- """
- Add new SQL to an existing schema.
-
- @param schema: The schema to add the new SQL to.
-
- @type schema: L{Schema}
-
- @param schemaData: A string containing some SQL statements.
-
- @type schemaData: C{str}
-
- @return: the C{schema} argument
- """
- parsed = parse(schemaData)
- for stmt in parsed:
- preface = ''
- while stmt.tokens and not significant(stmt.tokens[0]):
- preface += str(stmt.tokens.pop(0))
- if not stmt.tokens:
- continue
- if stmt.get_type() == 'CREATE':
- createType = stmt.token_next(1, True).value.upper()
- if createType == u'TABLE':
- t = tableFromCreateStatement(schema, stmt)
- t.addComment(preface)
- elif createType == u'SEQUENCE':
- schema.sequences.append(
- Sequence(
- stmt.token_next(2, True).get_name().encode('utf-8')))
- elif stmt.get_type() == 'INSERT':
- insertTokens = iterSignificant(stmt)
- expect(insertTokens, ttype=Keyword.DML, value='INSERT')
- expect(insertTokens, ttype=Keyword, value='INTO')
- tableName = expect(insertTokens, cls=Identifier).get_name()
- expect(insertTokens, ttype=Keyword, value='VALUES')
- values = expect(insertTokens, cls=Parenthesis)
- vals = iterSignificant(values)
- expect(vals, ttype=Punctuation, value='(')
- valuelist = expect(vals, cls=IdentifierList)
- expect(vals, ttype=Punctuation, value=')')
- rowData = []
- for ident in valuelist.get_identifiers():
- rowData.append(
- {Number.Integer: int,
- String.Single: _destringify}
- [ident.ttype](ident.value)
- )
-
- schema.tableNamed(tableName).insertSchemaRow(rowData)
- else:
- print 'unknown type:', stmt.get_type()
- return schema
-
-
-
-class _ColumnParser(object):
- """
- Stateful parser for the things between commas.
- """
-
- def __init__(self, table, parenIter, parens):
- """
- @param table: the L{Table} to add data to.
-
- @param parenIter: the iterator.
- """
- self.parens = parens
- self.iter = parenIter
- self.table = table
-
-
- def __iter__(self):
- """
- This object is an iterator; return itself.
- """
- return self
-
-
- def next(self):
- """
- Get the next L{IdentifierList}.
- """
- result = self.iter.next()
- if isinstance(result, IdentifierList):
- # Expand out all identifier lists, since they seem to pop up
- # incorrectly. We should never see one in a column list anyway.
- # http://code.google.com/p/python-sqlparse/issues/detail?id=25
- while result.tokens:
- it = result.tokens.pop()
- if significant(it):
- self.pushback(it)
- return self.next()
- return result
-
-
- def pushback(self, value):
- """
- Push the value back onto this iterator so it will be returned by the
- next call to C{next}.
- """
- self.iter = chain(iter((value,)), self.iter)
-
-
- def parse(self):
- """
- Parse everything.
- """
- expect(self.iter, ttype=Punctuation, value=u"(")
- while self.nextColumn():
- pass
-
-
- def nextColumn(self):
- """
- Parse the next column or constraint, depending on the next token.
- """
- maybeIdent = self.next()
- if maybeIdent.ttype == Name:
- return self.parseColumn(maybeIdent.value)
- elif isinstance(maybeIdent, Identifier):
- return self.parseColumn(maybeIdent.get_name())
- else:
- return self.parseConstraint(maybeIdent)
-
-
- def namesInParens(self, parens):
- parens = iterSignificant(parens)
- expect(parens, ttype=Punctuation, value="(")
- idorids = parens.next()
- if isinstance(idorids, Identifier):
- idnames = [idorids.get_name()]
- elif isinstance(idorids, IdentifierList):
- idnames = [x.get_name() for x in idorids.get_identifiers()]
- else:
- raise ViolatedExpectation("identifier or list", repr(idorids))
- expect(parens, ttype=Punctuation, value=")")
- return idnames
-
-
- def parseConstraint(self, constraintType):
- """
- Parse a 'free' constraint, described explicitly in the table as opposed
- to being implicitly associated with a column by being placed after it.
- """
- # only know about PRIMARY KEY and UNIQUE for now
- if constraintType.match(Keyword, 'PRIMARY'):
- expect(self, ttype=Keyword, value='KEY')
- names = self.namesInParens(expect(self, cls=Parenthesis))
- self.table.primaryKey = tuple(self.table.columnNamed(n)
- for n in names)
- elif constraintType.match(Keyword, 'UNIQUE'):
- names = self.namesInParens(expect(self, cls=Parenthesis))
- self.table.tableConstraint(Constraint.UNIQUE, names)
- else:
- raise ViolatedExpectation('PRIMARY or UNIQUE', constraintType)
- return self.checkEnd(self.next())
-
-
- def checkEnd(self, val):
- """
- After a column or constraint, check the end.
- """
- if val.value == u",":
- return True
- elif val.value == u")":
- return False
- else:
- raise ViolatedExpectation(", or )", val)
-
-
- def parseColumn(self, name):
- """
- Parse a column with the given name.
- """
- typeName = self.next()
- if isinstance(typeName, Function):
- [funcIdent, args] = iterSignificant(typeName)
- typeName = funcIdent
- arggetter = iterSignificant(args)
- expect(arggetter, value=u'(')
- typeLength = int(expect(arggetter,
- ttype=Number.Integer).value.encode('utf-8'))
- else:
- maybeTypeArgs = self.next()
- if isinstance(maybeTypeArgs, Parenthesis):
- # type arguments
- significant = iterSignificant(maybeTypeArgs)
- expect(significant, value=u"(")
- typeLength = int(significant.next().value)
- else:
- # something else
- typeLength = None
- self.pushback(maybeTypeArgs)
- theType = SQLType(typeName.value.encode("utf-8"), typeLength)
- theColumn = self.table.addColumn(
- name=name.encode("utf-8"), type=theType
- )
- for val in self:
- if val.ttype == Punctuation:
- return self.checkEnd(val)
- else:
- expected = True
- def oneConstraint(t):
- self.table.tableConstraint(t,
- [theColumn.name])
-
- if val.match(Keyword, 'PRIMARY'):
- expect(self, ttype=Keyword, value='KEY')
- # XXX check to make sure there's no other primary key yet
- self.table.primaryKey = theColumn
- elif val.match(Keyword, 'UNIQUE'):
- # XXX add UNIQUE constraint
- oneConstraint(Constraint.UNIQUE)
- elif val.match(Keyword, 'NOT'):
- # possibly not necessary, as 'NOT NULL' is a single keyword
- # in sqlparse as of 0.1.2
- expect(self, ttype=Keyword, value='NULL')
- oneConstraint(Constraint.NOT_NULL)
- elif val.match(Keyword, 'NOT NULL'):
- oneConstraint(Constraint.NOT_NULL)
- elif val.match(Keyword, 'DEFAULT'):
- theDefault = self.next()
- if isinstance(theDefault, Function):
- thingo = theDefault.tokens[0].get_name()
- parens = expectSingle(
- theDefault.tokens[-1], cls=Parenthesis
- )
- pareniter = iterSignificant(parens)
- if thingo.upper() == 'NEXTVAL':
- expect(pareniter, ttype=Punctuation, value="(")
- seqname = _destringify(
- expect(pareniter, ttype=String.Single).value)
- defaultValue = self.table.schema.sequenceNamed(
- seqname
- )
- defaultValue.referringColumns.append(theColumn)
- else:
- defaultValue = ProcedureCall(thingo.encode('utf-8'),
- parens)
- elif theDefault.ttype == Number.Integer:
- defaultValue = int(theDefault.value)
- elif (theDefault.ttype == Keyword and
- theDefault.value.lower() == 'false'):
- defaultValue = False
- elif (theDefault.ttype == Keyword and
- theDefault.value.lower() == 'true'):
- defaultValue = True
- elif (theDefault.ttype == Keyword and
- theDefault.value.lower() == 'null'):
- defaultValue = None
- elif theDefault.ttype == String.Single:
- defaultValue = _destringify(theDefault.value)
- else:
- raise RuntimeError(
- "not sure what to do: default %r" % (
- theDefault))
- theColumn.setDefaultValue(defaultValue)
- elif val.match(Keyword, 'REFERENCES'):
- target = nameOrIdentifier(self.next())
- theColumn.doesReferenceName(target)
- elif val.match(Keyword, 'ON'):
- expect(self, ttype=Keyword.DML, value='DELETE')
- expect(self, ttype=Keyword, value='CASCADE')
- theColumn.cascade = True
- else:
- expected = False
- if not expected:
- print 'UNEXPECTED TOKEN:', repr(val), theColumn
- print self.parens
- import pprint
- pprint.pprint(self.parens.tokens)
- return 0
-
-
-
-
-class ViolatedExpectation(Exception):
- """
- An expectation about the structure of the SQL syntax was violated.
- """
-
- def __init__(self, expected, got):
- self.expected = expected
- self.got = got
- super(ViolatedExpectation, self).__init__(
- "Expected %r got %s" % (expected, got)
- )
-
-
-
-def nameOrIdentifier(token):
- """
- Determine if the given object is a name or an identifier, and return the
- textual value of that name or identifier.
-
- @rtype: L{str}
- """
- if isinstance(token, Identifier):
- return token.get_name()
- elif token.ttype == Name:
- return token.value
- else:
- raise ViolatedExpectation("identifier or name", repr(token))
-
-
-
-def expectSingle(nextval, ttype=None, value=None, cls=None):
- """
- Expect some properties from retrieved value.
-
- @param ttype: A token type to compare against.
-
- @param value: A value to compare against.
-
- @param cls: A class to check if the value is an instance of.
-
- @raise ViolatedExpectation: if an unexpected token is found.
-
- @return: C{nextval}, if it matches.
- """
- if ttype is not None:
- if nextval.ttype != ttype:
- raise ViolatedExpectation(ttype, '%s:%s' % (nextval.ttype, nextval))
- if value is not None:
- if nextval.value.upper() != value.upper():
- raise ViolatedExpectation(value, nextval.value)
- if cls is not None:
- if nextval.__class__ != cls:
- raise ViolatedExpectation(cls, repr(nextval))
- return nextval
-
-
-
-def expect(iterator, **kw):
- """
- Retrieve a value from an iterator and check its properties. Same signature
- as L{expectSingle}, except it takes an iterator instead of a value.
-
- @see L{expectSingle}
- """
- nextval = iterator.next()
- return expectSingle(nextval, **kw)
-
-
-
-def significant(token):
- """
- Determine if the token is 'significant', i.e. that it is not a comment and
- not whitespace.
- """
- # comment has 'None' is_whitespace() result. intentional?
- return (not isinstance(token, Comment) and not token.is_whitespace())
-
-
-
-def iterSignificant(tokenList):
- """
- Iterate tokens that pass the test given by L{significant}, from a given
- L{TokenList}.
- """
- for token in tokenList.tokens:
- if significant(token):
- yield token
-
-
-
-def _destringify(strval):
- """
- Convert a single-quoted SQL string into its actual represented value.
- (Assumes standards compliance, since we should be controlling all the input
- here. The only quoting syntax respected is "''".)
- """
- return strval[1:-1].replace("''", "'")
-
-
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/parseschema.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/parseschema.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,468 @@
+# -*- test-case-name: twext.enterprise.dal.test.test_parseschema -*-
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Parser for SQL schema.
+"""
+
+from itertools import chain
+
+from sqlparse import parse, keywords
+from sqlparse.tokens import Keyword, Punctuation, Number, String, Name
+from sqlparse.sql import (Comment, Identifier, Parenthesis, IdentifierList,
+ Function)
+
+from twext.enterprise.dal.model import Schema, Table, SQLType, ProcedureCall
+from twext.enterprise.dal.model import Constraint
+from twext.enterprise.dal.model import Sequence
+
+
+
+def _fixKeywords():
+ """
+ Work around bugs in SQLParse, adding SEQUENCE as a keyword (since it is
+ treated as one in postgres) and removing ACCESS and SIZE (since we use those
+ as column names). Technically those are keywords in SQL, but they aren't
+ treated as such by postgres's parser.
+ """
+ keywords.KEYWORDS['SEQUENCE'] = Keyword
+ for columnNameKeyword in ['ACCESS', 'SIZE']:
+ del keywords.KEYWORDS[columnNameKeyword]
+
+_fixKeywords()
+
+
+
+def tableFromCreateStatement(schema, stmt):
+ """
+ Add a table from a CREATE TABLE sqlparse statement object.
+
+ @param schema: The schema to add the table statement to.
+
+ @type schema: L{Schema}
+
+ @param stmt: The C{CREATE TABLE} statement object.
+
+ @type stmt: L{Statement}
+ """
+ i = iterSignificant(stmt)
+ expect(i, ttype=Keyword.DDL, value='CREATE')
+ expect(i, ttype=Keyword, value='TABLE')
+ function = expect(i, cls=Function)
+ i = iterSignificant(function)
+ name = expect(i, cls=Identifier).get_name().encode('utf-8')
+ self = Table(schema, name)
+ parens = expect(i, cls=Parenthesis)
+ cp = _ColumnParser(self, iterSignificant(parens), parens)
+ cp.parse()
+ return self
+
+
+
+def schemaFromPath(path):
+ """
+ Get a L{Schema}.
+
+ @param path: a L{FilePath}-like object containing SQL.
+
+ @return: a L{Schema} object with the contents of the given C{path} parsed
+ and added to it as L{Table} objects.
+ """
+ schema = Schema(path.basename())
+ schemaData = path.getContent()
+ addSQLToSchema(schema, schemaData)
+ return schema
+
+
+
+def addSQLToSchema(schema, schemaData):
+ """
+ Add new SQL to an existing schema.
+
+ @param schema: The schema to add the new SQL to.
+
+ @type schema: L{Schema}
+
+ @param schemaData: A string containing some SQL statements.
+
+ @type schemaData: C{str}
+
+ @return: the C{schema} argument
+ """
+ parsed = parse(schemaData)
+ for stmt in parsed:
+ preface = ''
+ while stmt.tokens and not significant(stmt.tokens[0]):
+ preface += str(stmt.tokens.pop(0))
+ if not stmt.tokens:
+ continue
+ if stmt.get_type() == 'CREATE':
+ createType = stmt.token_next(1, True).value.upper()
+ if createType == u'TABLE':
+ t = tableFromCreateStatement(schema, stmt)
+ t.addComment(preface)
+ elif createType == u'SEQUENCE':
+ schema.sequences.append(
+ Sequence(
+ stmt.token_next(2, True).get_name().encode('utf-8')))
+ elif stmt.get_type() == 'INSERT':
+ insertTokens = iterSignificant(stmt)
+ expect(insertTokens, ttype=Keyword.DML, value='INSERT')
+ expect(insertTokens, ttype=Keyword, value='INTO')
+ tableName = expect(insertTokens, cls=Identifier).get_name()
+ expect(insertTokens, ttype=Keyword, value='VALUES')
+ values = expect(insertTokens, cls=Parenthesis)
+ vals = iterSignificant(values)
+ expect(vals, ttype=Punctuation, value='(')
+ valuelist = expect(vals, cls=IdentifierList)
+ expect(vals, ttype=Punctuation, value=')')
+ rowData = []
+ for ident in valuelist.get_identifiers():
+ rowData.append(
+ {Number.Integer: int,
+ String.Single: _destringify}
+ [ident.ttype](ident.value)
+ )
+
+ schema.tableNamed(tableName).insertSchemaRow(rowData)
+ else:
+ print 'unknown type:', stmt.get_type()
+ return schema
+
+
+
+class _ColumnParser(object):
+ """
+ Stateful parser for the things between commas.
+ """
+
+ def __init__(self, table, parenIter, parens):
+ """
+ @param table: the L{Table} to add data to.
+
+ @param parenIter: the iterator.
+ """
+ self.parens = parens
+ self.iter = parenIter
+ self.table = table
+
+
+ def __iter__(self):
+ """
+ This object is an iterator; return itself.
+ """
+ return self
+
+
+ def next(self):
+ """
+ Get the next L{IdentifierList}.
+ """
+ result = self.iter.next()
+ if isinstance(result, IdentifierList):
+ # Expand out all identifier lists, since they seem to pop up
+ # incorrectly. We should never see one in a column list anyway.
+ # http://code.google.com/p/python-sqlparse/issues/detail?id=25
+ while result.tokens:
+ it = result.tokens.pop()
+ if significant(it):
+ self.pushback(it)
+ return self.next()
+ return result
+
+
+ def pushback(self, value):
+ """
+ Push the value back onto this iterator so it will be returned by the
+ next call to C{next}.
+ """
+ self.iter = chain(iter((value,)), self.iter)
+
+
+ def parse(self):
+ """
+ Parse everything.
+ """
+ expect(self.iter, ttype=Punctuation, value=u"(")
+ while self.nextColumn():
+ pass
+
+
+ def nextColumn(self):
+ """
+ Parse the next column or constraint, depending on the next token.
+ """
+ maybeIdent = self.next()
+ if maybeIdent.ttype == Name:
+ return self.parseColumn(maybeIdent.value)
+ elif isinstance(maybeIdent, Identifier):
+ return self.parseColumn(maybeIdent.get_name())
+ else:
+ return self.parseConstraint(maybeIdent)
+
+
+ def namesInParens(self, parens):
+ parens = iterSignificant(parens)
+ expect(parens, ttype=Punctuation, value="(")
+ idorids = parens.next()
+ if isinstance(idorids, Identifier):
+ idnames = [idorids.get_name()]
+ elif isinstance(idorids, IdentifierList):
+ idnames = [x.get_name() for x in idorids.get_identifiers()]
+ else:
+ raise ViolatedExpectation("identifier or list", repr(idorids))
+ expect(parens, ttype=Punctuation, value=")")
+ return idnames
+
+
+ def parseConstraint(self, constraintType):
+ """
+ Parse a 'free' constraint, described explicitly in the table as opposed
+ to being implicitly associated with a column by being placed after it.
+ """
+ # only know about PRIMARY KEY and UNIQUE for now
+ if constraintType.match(Keyword, 'PRIMARY'):
+ expect(self, ttype=Keyword, value='KEY')
+ names = self.namesInParens(expect(self, cls=Parenthesis))
+ self.table.primaryKey = tuple(self.table.columnNamed(n)
+ for n in names)
+ elif constraintType.match(Keyword, 'UNIQUE'):
+ names = self.namesInParens(expect(self, cls=Parenthesis))
+ self.table.tableConstraint(Constraint.UNIQUE, names)
+ else:
+ raise ViolatedExpectation('PRIMARY or UNIQUE', constraintType)
+ return self.checkEnd(self.next())
+
+
+ def checkEnd(self, val):
+ """
+ After a column or constraint, check the end.
+ """
+ if val.value == u",":
+ return True
+ elif val.value == u")":
+ return False
+ else:
+ raise ViolatedExpectation(", or )", val)
+
+
+ def parseColumn(self, name):
+ """
+ Parse a column with the given name.
+ """
+ typeName = self.next()
+ if isinstance(typeName, Function):
+ [funcIdent, args] = iterSignificant(typeName)
+ typeName = funcIdent
+ arggetter = iterSignificant(args)
+ expect(arggetter, value=u'(')
+ typeLength = int(expect(arggetter,
+ ttype=Number.Integer).value.encode('utf-8'))
+ else:
+ maybeTypeArgs = self.next()
+ if isinstance(maybeTypeArgs, Parenthesis):
+ # type arguments
+ significant = iterSignificant(maybeTypeArgs)
+ expect(significant, value=u"(")
+ typeLength = int(significant.next().value)
+ else:
+ # something else
+ typeLength = None
+ self.pushback(maybeTypeArgs)
+ theType = SQLType(typeName.value.encode("utf-8"), typeLength)
+ theColumn = self.table.addColumn(
+ name=name.encode("utf-8"), type=theType
+ )
+ for val in self:
+ if val.ttype == Punctuation:
+ return self.checkEnd(val)
+ else:
+ expected = True
+ def oneConstraint(t):
+ self.table.tableConstraint(t,
+ [theColumn.name])
+
+ if val.match(Keyword, 'PRIMARY'):
+ expect(self, ttype=Keyword, value='KEY')
+ # XXX check to make sure there's no other primary key yet
+ self.table.primaryKey = theColumn
+ elif val.match(Keyword, 'UNIQUE'):
+ # XXX add UNIQUE constraint
+ oneConstraint(Constraint.UNIQUE)
+ elif val.match(Keyword, 'NOT'):
+ # possibly not necessary, as 'NOT NULL' is a single keyword
+ # in sqlparse as of 0.1.2
+ expect(self, ttype=Keyword, value='NULL')
+ oneConstraint(Constraint.NOT_NULL)
+ elif val.match(Keyword, 'NOT NULL'):
+ oneConstraint(Constraint.NOT_NULL)
+ elif val.match(Keyword, 'DEFAULT'):
+ theDefault = self.next()
+ if isinstance(theDefault, Function):
+ thingo = theDefault.tokens[0].get_name()
+ parens = expectSingle(
+ theDefault.tokens[-1], cls=Parenthesis
+ )
+ pareniter = iterSignificant(parens)
+ if thingo.upper() == 'NEXTVAL':
+ expect(pareniter, ttype=Punctuation, value="(")
+ seqname = _destringify(
+ expect(pareniter, ttype=String.Single).value)
+ defaultValue = self.table.schema.sequenceNamed(
+ seqname
+ )
+ defaultValue.referringColumns.append(theColumn)
+ else:
+ defaultValue = ProcedureCall(thingo.encode('utf-8'),
+ parens)
+ elif theDefault.ttype == Number.Integer:
+ defaultValue = int(theDefault.value)
+ elif (theDefault.ttype == Keyword and
+ theDefault.value.lower() == 'false'):
+ defaultValue = False
+ elif (theDefault.ttype == Keyword and
+ theDefault.value.lower() == 'true'):
+ defaultValue = True
+ elif (theDefault.ttype == Keyword and
+ theDefault.value.lower() == 'null'):
+ defaultValue = None
+ elif theDefault.ttype == String.Single:
+ defaultValue = _destringify(theDefault.value)
+ else:
+ raise RuntimeError(
+ "not sure what to do: default %r" % (
+ theDefault))
+ theColumn.setDefaultValue(defaultValue)
+ elif val.match(Keyword, 'REFERENCES'):
+ target = nameOrIdentifier(self.next())
+ theColumn.doesReferenceName(target)
+ elif val.match(Keyword, 'ON'):
+ expect(self, ttype=Keyword.DML, value='DELETE')
+ expect(self, ttype=Keyword, value='CASCADE')
+ theColumn.cascade = True
+ else:
+ expected = False
+ if not expected:
+ print 'UNEXPECTED TOKEN:', repr(val), theColumn
+ print self.parens
+ import pprint
+ pprint.pprint(self.parens.tokens)
+ return 0
+
+
+
+
+class ViolatedExpectation(Exception):
+ """
+ An expectation about the structure of the SQL syntax was violated.
+ """
+
+ def __init__(self, expected, got):
+ self.expected = expected
+ self.got = got
+ super(ViolatedExpectation, self).__init__(
+ "Expected %r got %s" % (expected, got)
+ )
+
+
+
+def nameOrIdentifier(token):
+ """
+ Determine if the given object is a name or an identifier, and return the
+ textual value of that name or identifier.
+
+ @rtype: L{str}
+ """
+ if isinstance(token, Identifier):
+ return token.get_name()
+ elif token.ttype == Name:
+ return token.value
+ else:
+ raise ViolatedExpectation("identifier or name", repr(token))
+
+
+
+def expectSingle(nextval, ttype=None, value=None, cls=None):
+ """
+ Expect some properties from retrieved value.
+
+ @param ttype: A token type to compare against.
+
+ @param value: A value to compare against.
+
+ @param cls: A class to check if the value is an instance of.
+
+ @raise ViolatedExpectation: if an unexpected token is found.
+
+ @return: C{nextval}, if it matches.
+ """
+ if ttype is not None:
+ if nextval.ttype != ttype:
+ raise ViolatedExpectation(ttype, '%s:%s' % (nextval.ttype, nextval))
+ if value is not None:
+ if nextval.value.upper() != value.upper():
+ raise ViolatedExpectation(value, nextval.value)
+ if cls is not None:
+ if nextval.__class__ != cls:
+ raise ViolatedExpectation(cls, repr(nextval))
+ return nextval
+
+
+
+def expect(iterator, **kw):
+ """
+ Retrieve a value from an iterator and check its properties. Same signature
+ as L{expectSingle}, except it takes an iterator instead of a value.
+
+ @see L{expectSingle}
+ """
+ nextval = iterator.next()
+ return expectSingle(nextval, **kw)
+
+
+
+def significant(token):
+ """
+ Determine if the token is 'significant', i.e. that it is not a comment and
+ not whitespace.
+ """
+ # comment has 'None' is_whitespace() result. intentional?
+ return (not isinstance(token, Comment) and not token.is_whitespace())
+
+
+
+def iterSignificant(tokenList):
+ """
+ Iterate tokens that pass the test given by L{significant}, from a given
+ L{TokenList}.
+ """
+ for token in tokenList.tokens:
+ if significant(token):
+ yield token
+
+
+
+def _destringify(strval):
+ """
+ Convert a single-quoted SQL string into its actual represented value.
+ (Assumes standards compliance, since we should be controlling all the input
+ here. The only quoting syntax respected is "''".)
+ """
+ return strval[1:-1].replace("''", "'")
+
+
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/syntax.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,1174 +0,0 @@
-# -*- test-case-name: twext.enterprise.dal.test.test_sqlsyntax -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Syntax wrappers and generators for SQL.
-"""
-
-import itertools
-
-from zope.interface import implements
-
-from twisted.internet.defer import succeed
-
-from twext.enterprise.ienterprise import POSTGRES_DIALECT, ORACLE_DIALECT
-from twext.enterprise.ienterprise import IDerivedParameter
-
-from twext.enterprise.util import mapOracleOutputType
-from twext.enterprise.dal.model import Schema, Table, Column, Sequence
-
-try:
- import cx_Oracle
- cx_Oracle
-except ImportError:
- cx_Oracle = None
-
-class ConnectionMetadata(object):
- """
- Representation of the metadata about the database connection required to
- generate some SQL, for a single statement. Contains information necessary
- to generate placeholder strings and determine the database dialect.
- """
-
- def __init__(self, dialect):
- self.dialect = dialect
-
-
- def placeholder(self):
- raise NotImplementedError("See subclasses.")
-
-
-
-class FixedPlaceholder(ConnectionMetadata):
- """
- Metadata about a connection which uses a fixed string as its placeholder.
- """
-
- def __init__(self, dialect, placeholder):
- super(FixedPlaceholder, self).__init__(dialect)
- self._placeholder = placeholder
-
-
- def placeholder(self):
- return self._placeholder
-
-
-
-class NumericPlaceholder(ConnectionMetadata):
-
- def __init__(self, dialect):
- super(NumericPlaceholder, self).__init__(dialect)
- self._next = itertools.count(1).next
-
-
- def placeholder(self):
- return ':' + str(self._next())
-
-
-
-def defaultMetadata():
- """
- Generate a default L{ConnectionMetadata}
- """
- return FixedPlaceholder(POSTGRES_DIALECT, '?')
-
-
-
-class TableMismatch(Exception):
- """
- A table in a statement did not match with a column.
- """
-
-
-
-class NotEnoughValues(ValueError):
- """
- Not enough values were supplied for an L{Insert}.
- """
-
-
-
-class _Statement(object):
- """
- An SQL statement that may be executed. (An abstract base class, must
- implement several methods.)
- """
-
- _paramstyles = {
- 'pyformat': lambda dialect: FixedPlaceholder(dialect, "%s"),
- 'numeric': NumericPlaceholder
- }
-
-
- def toSQL(self, metadata=None):
- if metadata is None:
- metadata = defaultMetadata()
- return self._toSQL(metadata)
-
-
- def _extraVars(self, txn, metadata):
- return {}
-
-
- def _extraResult(self, result, outvars, metadata):
- return result
-
-
- def on(self, txn, raiseOnZeroRowCount=None, **kw):
- """
- Execute this statement on a given L{IAsyncTransaction} and return the
- resulting L{Deferred}.
- """
- metadata = self._paramstyles[txn.paramstyle](txn.dialect)
- outvars = self._extraVars(txn, metadata)
- kw.update(outvars)
- fragment = self.toSQL(metadata).bind(**kw)
- result = txn.execSQL(fragment.text, fragment.parameters,
- raiseOnZeroRowCount)
- return self._extraResult(result, outvars, metadata)
-
-
-
-class Syntax(object):
- """
- Base class for syntactic convenience.
-
- This class will define dynamic attribute access to represent its underlying
- model as a Python namespace.
-
- You can access the underlying model as '.model'.
- """
-
- modelType = None
- model = None
-
- def __init__(self, model):
- if not isinstance(model, self.modelType):
- # make sure we don't get a misleading repr()
- raise ValueError("type mismatch: %r %r", type(self), model)
- self.model = model
-
-
- def __repr__(self):
- if self.model is not None:
- return '<Syntax for: %r>' % (self.model,)
- return super(Syntax, self).__repr__()
-
-
-
-def comparison(comparator):
- def __(self, other):
- if other is None:
- return NullComparison(self, comparator)
- if isinstance(other, Select):
- return NotImplemented
- if isinstance(other, ColumnSyntax):
- return ColumnComparison(self, comparator, other)
- else:
- return CompoundComparison(self, comparator, Constant(other))
- return __
-
-
-
-class ExpressionSyntax(Syntax):
- __eq__ = comparison('=')
- __ne__ = comparison('!=')
- __gt__ = comparison('>')
- __ge__ = comparison('>=')
- __lt__ = comparison('<')
- __le__ = comparison('<=')
- __add__ = comparison("+")
- __sub__ = comparison("-")
- __div__= comparison("/")
- __mul__= comparison("*")
-
-
- def __nonzero__(self):
- raise ValueError(
- "SQL expressions should not be tested for truth value in Python.")
-
-
- def In(self, subselect):
- # Can't be Select.__contains__ because __contains__ gets __nonzero__
- # called on its result by the 'in' syntax.
- return CompoundComparison(self, 'in', subselect)
-
-
-
-class FunctionInvocation(ExpressionSyntax):
- def __init__(self, function, *args):
- self.function = function
- self.args = args
-
-
- def allColumns(self):
- """
- All of the columns in all of the arguments' columns.
- """
- def ac():
- for arg in self.args:
- for column in arg.allColumns():
- yield column
- return list(ac())
-
-
- def subSQL(self, metadata, allTables):
- result = SQLFragment(self.function.nameFor(metadata))
- result.append(_inParens(
- _commaJoined(_convert(arg).subSQL(metadata, allTables)
- for arg in self.args)))
- return result
-
-
-
-class Constant(ExpressionSyntax):
- def __init__(self, value):
- self.value = value
-
-
- def allColumns(self):
- return []
-
-
- def subSQL(self, metadata, allTables):
- return SQLFragment(metadata.placeholder(), [self.value])
-
-
-
-class NamedValue(ExpressionSyntax):
- """
- A constant within the database; something pre-defined, such as
- CURRENT_TIMESTAMP.
- """
- def __init__(self, name):
- self.name = name
-
-
- def subSQL(self, metadata, allTables):
- return SQLFragment(self.name)
-
-
-
-class Function(object):
- """
- An L{Function} is a representation of an SQL Function function.
- """
-
- def __init__(self, name, oracleName=None):
- self.name = name
- self.oracleName = oracleName
-
-
- def nameFor(self, metadata):
- if metadata.dialect == ORACLE_DIALECT and self.oracleName is not None:
- return self.oracleName
- return self.name
-
-
- def __call__(self, *args):
- """
- Produce an L{FunctionInvocation}
- """
- return FunctionInvocation(self, *args)
-
-
-
-Max = Function("max")
-Len = Function("character_length", "length")
-
-
-
-class SchemaSyntax(Syntax):
- """
- Syntactic convenience for L{Schema}.
- """
-
- modelType = Schema
-
- def __getattr__(self, attr):
- try:
- tableModel = self.model.tableNamed(attr)
- except KeyError:
- try:
- seqModel = self.model.sequenceNamed(attr)
- except KeyError:
- raise AttributeError("schema has no table or sequence %r" % (attr,))
- else:
- return SequenceSyntax(seqModel)
- else:
- syntax = TableSyntax(tableModel)
- # Needs to be preserved here so that aliasing will work.
- setattr(self, attr, syntax)
- return syntax
-
-
- def __iter__(self):
- for table in self.model.tables:
- yield TableSyntax(table)
-
-
-
-class SequenceSyntax(ExpressionSyntax):
- """
- Syntactic convenience for L{Sequence}.
- """
-
- modelType = Sequence
-
- def subSQL(self, metadata, allTables):
- """
- Convert to an SQL fragment.
- """
- if metadata.dialect == ORACLE_DIALECT:
- fmt = "%s.nextval"
- else:
- fmt = "nextval('%s')"
- return SQLFragment(fmt % (self.model.name,))
-
-
-
-class TableSyntax(Syntax):
- """
- Syntactic convenience for L{Table}.
- """
-
- modelType = Table
-
- def join(self, otherTableSyntax, on=None, type=''):
- if on is None:
- type = 'cross'
- return Join(self, type, otherTableSyntax, on)
-
-
- def subSQL(self, metadata, allTables):
- """
- For use in a 'from' clause.
- """
- # XXX maybe there should be a specific method which is only invoked
- # from the FROM clause, that only tables and joins would implement?
- return SQLFragment(self.model.name)
-
-
- def __getattr__(self, attr):
- return ColumnSyntax(self.model.columnNamed(attr))
-
-
- def __iter__(self):
- for column in self.model.columns:
- yield ColumnSyntax(column)
-
-
- def tables(self):
- return [self]
-
-
- def aliases(self):
- result = {}
- for k, v in self.__dict__.items():
- if isinstance(v, ColumnSyntax):
- result[k] = v
- return result
-
-
- def __contains__(self, columnSyntax):
- if isinstance(columnSyntax, FunctionInvocation):
- columnSyntax = columnSyntax.arg
- return (columnSyntax.model in self.model.columns)
-
-
-
-class Join(object):
- """
- A DAL object representing an SQL 'join' statement.
-
- @ivar leftSide: a L{Join} or L{TableSyntax} representing the left side of
- this join.
-
- @ivar rightSide: a L{TableSyntax} representing the right side of this join.
-
- @ivar type: the type of join this is. For example, for a left outer join,
- this would be C{'left outer'}.
- @type type: C{str}
-
- @ivar on: the 'on' clause of this table.
-
- @type on: L{ExpressionSyntax}
- """
-
- def __init__(self, leftSide, type, rightSide, on):
- self.leftSide = leftSide
- self.type = type
- self.rightSide = rightSide
- self.on = on
-
-
- def subSQL(self, metadata, allTables):
- stmt = SQLFragment()
- stmt.append(self.leftSide.subSQL(metadata, allTables))
- stmt.text += ' '
- if self.type:
- stmt.text += self.type
- stmt.text += ' '
- stmt.text += 'join '
- stmt.append(self.rightSide.subSQL(metadata, allTables))
- if self.type != 'cross':
- stmt.text += ' on '
- stmt.append(self.on.subSQL(metadata, allTables))
- return stmt
-
-
- def tables(self):
- return self.leftSide.tables() + self.rightSide.tables()
-
-
- def join(self, otherTable, on=None, type=None):
- if on is None:
- type = 'cross'
- return Join(self, type, otherTable, on)
-
-
-_KEYWORDS = ["access",
- # SQL keyword, but we have a column with this name
- "path",
- # Not actually a standard keyword, but a function in oracle, and we
- # have a column with this name.
- "size",
- # not actually sure what this is; only experimentally determined
- # that not quoting it causes an issue.
- ]
-
-
-class ColumnSyntax(ExpressionSyntax):
- """
- Syntactic convenience for L{Column}.
- """
-
- modelType = Column
-
-
- def allColumns(self):
- return [self]
-
-
- def subSQL(self, metadata, allTables):
- # XXX This, and 'model', could in principle conflict with column names.
- # Maybe do something about that.
- name = self.model.name
- if metadata.dialect == ORACLE_DIALECT and name.lower() in _KEYWORDS:
- name = '"%s"' % (name,)
-
- for tableSyntax in allTables:
- if self.model.table is not tableSyntax.model:
- if self.model.name in (c.name for c in
- tableSyntax.model.columns):
- return SQLFragment((self.model.table.name + '.' + name))
- return SQLFragment(name)
-
-
-
-class Comparison(ExpressionSyntax):
-
- def __init__(self, a, op, b):
- self.a = a
- self.op = op
- self.b = b
-
-
- def _subexpression(self, expr, metadata, allTables):
- result = expr.subSQL(metadata, allTables)
- if self.op not in ('and', 'or') and isinstance(expr, Comparison):
- result = _inParens(result)
- return result
-
-
- def booleanOp(self, operand, other):
- return CompoundComparison(self, operand, other)
-
-
- def And(self, other):
- return self.booleanOp('and', other)
-
-
- def Or(self, other):
- return self.booleanOp('or', other)
-
-
-
-class NullComparison(Comparison):
- """
- A L{NullComparison} is a comparison of a column or expression with None.
- """
- def __init__(self, a, op):
- # 'b' is always None for this comparison type
- super(NullComparison, self).__init__(a, op, None)
-
-
- def subSQL(self, metadata, allTables):
- sqls = SQLFragment()
- sqls.append(self.a.subSQL(metadata, allTables))
- sqls.text += " is "
- if self.op != "=":
- sqls.text += "not "
- sqls.text += "null"
- return sqls
-
-
-
-class CompoundComparison(Comparison):
- """
- A compound comparison; two or more constraints, joined by an operation
- (currently only AND or OR).
- """
-
- def allColumns(self):
- return self.a.allColumns() + self.b.allColumns()
-
-
- def subSQL(self, metadata, allTables):
- stmt = SQLFragment()
- result = self._subexpression(self.a, metadata, allTables)
- if isinstance(self.a, CompoundComparison) and self.a.op == 'or' and self.op == 'and':
- result = _inParens(result)
- stmt.append(result)
-
- stmt.text += ' %s ' % (self.op,)
-
- result = self._subexpression(self.b, metadata, allTables)
- if isinstance(self.b, CompoundComparison) and self.b.op == 'or' and self.op == 'and':
- result = _inParens(result)
- stmt.append(result)
- return stmt
-
-
-
-class ColumnComparison(CompoundComparison):
- """
- Comparing two columns is the same as comparing any other two expressions,
- (for now).
- """
-
-
-
-class _AllColumns(object):
-
- def subSQL(self, metadata, allTables):
- return SQLFragment('*')
-
-ALL_COLUMNS = _AllColumns()
-
-
-
-class _SomeColumns(object):
-
- def __init__(self, columns):
- self.columns = columns
-
-
- def subSQL(self, metadata, allTables):
- first = True
- cstatement = SQLFragment()
- for column in self.columns:
- if first:
- first = False
- else:
- cstatement.append(SQLFragment(", "))
- cstatement.append(column.subSQL(metadata, allTables))
- return cstatement
-
-
-
-def _columnsMatchTables(columns, tables):
- for expression in columns:
- for column in expression.allColumns():
- for table in tables:
- if column in table:
- break
- else:
- return False
- return True
-
-
-class Tuple(object):
-
- def __init__(self, columns):
- self.columns = columns
-
-
- def subSQL(self, metadata, allTables):
- return _inParens(_commaJoined(c.subSQL(metadata, allTables)
- for c in self.columns))
-
-
- def allColumns(self):
- return self.columns
-
-
-
-
-class Select(_Statement):
- """
- 'select' statement.
- """
-
- def __init__(self, columns=None, Where=None, From=None, OrderBy=None,
- GroupBy=None, Limit=None, ForUpdate=False, Ascending=None,
- Having=None, Distinct=False):
- self.From = From
- self.Where = Where
- self.Distinct = Distinct
- if not isinstance(OrderBy, (list, tuple, type(None))):
- OrderBy = [OrderBy]
- self.OrderBy = OrderBy
- if not isinstance(GroupBy, (list, tuple, type(None))):
- GroupBy = [GroupBy]
- self.GroupBy = GroupBy
- self.Limit = Limit
- self.Having = Having
- if columns is None:
- columns = ALL_COLUMNS
- else:
- if not _columnsMatchTables(columns, From.tables()):
- raise TableMismatch()
-
- columns = _SomeColumns(columns)
- self.columns = columns
- self.ForUpdate = ForUpdate
- self.Ascending = Ascending
-
-
- def __eq__(self, other):
- """
- Create a comparison.
- """
- if isinstance(other, (list, tuple)):
- other = Tuple(other)
- return CompoundComparison(other, '=', self)
-
-
- def _toSQL(self, metadata):
- """
- @return: a 'select' statement with placeholders and arguments
-
- @rtype: L{SQLFragment}
- """
- stmt = SQLFragment("select ")
- if self.Distinct:
- stmt.text += "distinct "
- allTables = self.From.tables()
- stmt.append(self.columns.subSQL(metadata, allTables))
- stmt.text += " from "
- stmt.append(self.From.subSQL(metadata, allTables))
- if self.Where is not None:
- wherestmt = self.Where.subSQL(metadata, allTables)
- stmt.text += " where "
- stmt.append(wherestmt)
- if self.GroupBy is not None:
- stmt.text += " group by "
- fst = True
- for subthing in self.GroupBy:
- if fst:
- fst = False
- else:
- stmt.text += ', '
- stmt.append(subthing.subSQL(metadata, allTables))
- if self.Having is not None:
- havingstmt = self.Having.subSQL(metadata, allTables)
- stmt.text += " having "
- stmt.append(havingstmt)
- if self.OrderBy is not None:
- stmt.text += " order by "
- fst = True
- for subthing in self.OrderBy:
- if fst:
- fst = False
- else:
- stmt.text += ', '
- stmt.append(subthing.subSQL(metadata, allTables))
- if self.Ascending is not None:
- if self.Ascending:
- kw = " asc"
- else:
- kw = " desc"
- stmt.append(SQLFragment(kw))
- if self.ForUpdate:
- stmt.text += " for update"
- if self.Limit is not None:
- stmt.text += " limit "
- stmt.append(Constant(self.Limit).subSQL(metadata, allTables))
- return stmt
-
-
- def subSQL(self, metadata, allTables):
- result = SQLFragment("(")
- result.append(self.toSQL(metadata))
- result.append(SQLFragment(")"))
- return result
-
-
-
-def _commaJoined(stmts):
- first = True
- cstatement = SQLFragment()
- for stmt in stmts:
- if first:
- first = False
- else:
- cstatement.append(SQLFragment(", "))
- cstatement.append(stmt)
- return cstatement
-
-
-
-def _inParens(stmt):
- result = SQLFragment("(")
- result.append(stmt)
- result.append(SQLFragment(")"))
- return result
-
-
-
-def _fromSameTable(columns):
- """
- Extract the common table used by a list of L{Column} objects, raising
- L{TableMismatch}.
- """
- table = columns[0].table
- for column in columns:
- if table is not column.table:
- raise TableMismatch("Columns must all be from the same table.")
- return table
-
-
-
-def _modelsFromMap(columnMap):
- """
- Get the L{Column} objects from a mapping of L{ColumnSyntax} to values.
- """
- return [c.model for c in columnMap.keys()]
-
-
-
-class _CommaList(object):
- def __init__(self, subfragments):
- self.subfragments = subfragments
-
-
- def subSQL(self, metadata, allTables):
- return _commaJoined(f.subSQL(metadata, allTables)
- for f in self.subfragments)
-
-
-
-class _DMLStatement(_Statement):
- """
- Common functionality of Insert/Update/Delete statements.
- """
-
- def _returningClause(self, metadata, stmt, allTables):
- """
- Add a dialect-appropriate 'returning' clause to the end of the given SQL
- statement.
-
- @param metadata: describes the database we are generating the statement for.
- @type metadata: L{ConnectionMetadata}
-
- @param stmt: the SQL fragment generated without the 'returning' clause
- @type stmt: L{SQLFragment}
-
- @param allTables: all tables involved in the query; see any C{subSQL}
- method.
-
- @return: the C{stmt} parameter.
- """
- retclause = self.Return
- if isinstance(retclause, (tuple, list)):
- retclause = _CommaList(retclause)
- if retclause is not None:
- stmt.text += ' returning '
- stmt.append(retclause.subSQL(metadata, allTables))
- if metadata.dialect == ORACLE_DIALECT:
- stmt.text += ' into '
- params = []
- retvals = self._returnAsList()
- for n, v in enumerate(retvals):
- params.append(
- Constant(Parameter("oracle_out_" + str(n)))
- .subSQL(metadata, allTables)
- )
- stmt.append(_commaJoined(params))
- return stmt
-
-
- def _returnAsList(self):
- if not isinstance(self.Return, (tuple, list)):
- return [self.Return]
- else:
- return self.Return
-
-
- def _extraVars(self, txn, metadata):
- result = []
- rvars = self._returnAsList()
- if metadata.dialect == ORACLE_DIALECT:
- for n, v in enumerate(rvars):
- result.append(("oracle_out_" + str(n), _OracleOutParam(v)))
- return result
-
-
- def _extraResult(self, result, outvars, metadata):
- if metadata.dialect == ORACLE_DIALECT and self.Return is not None:
- def processIt(shouldBeNone):
- result = [[v.value for k, v in outvars]]
- return result
- return result.addCallback(processIt)
- else:
- return result
-
-
-
-class _OracleOutParam(object):
- implements(IDerivedParameter)
-
- def __init__(self, columnSyntax):
- self.columnSyntax = columnSyntax
-
-
- def preQuery(self, cursor):
- self.columnSyntax
- typeMap = {'integer': cx_Oracle.NUMBER,
- 'text': cx_Oracle.CLOB,
- 'varchar': cx_Oracle.STRING,
- 'timestamp': cx_Oracle.TIMESTAMP}
- typeID = self.columnSyntax.model.type.name.lower()
- self.var = cursor.var(typeMap[typeID])
- return self.var
-
-
- def postQuery(self, cursor):
- self.value = mapOracleOutputType(self.var.getvalue())
-
-
-
-class Insert(_DMLStatement):
- """
- 'insert' statement.
- """
-
- def __init__(self, columnMap, Return=None):
- self.columnMap = columnMap
- self.Return = Return
- columns = _modelsFromMap(columnMap)
- table = _fromSameTable(columns)
- required = [column for column in table.columns if column.needsValue()]
- unspecified = [column for column in required
- if column not in columns]
- if unspecified:
- raise NotEnoughValues(
- 'Columns [%s] required.' %
- (', '.join([c.name for c in unspecified])))
-
-
- def _toSQL(self, metadata):
- """
- @return: a 'insert' statement with placeholders and arguments
-
- @rtype: L{SQLFragment}
- """
- columnsAndValues = self.columnMap.items()
- tableModel = columnsAndValues[0][0].model.table
- specifiedColumnModels = [x.model for x in self.columnMap.keys()]
- if metadata.dialect == ORACLE_DIALECT:
- # See test_nextSequenceDefaultImplicitExplicitOracle.
- for column in tableModel.columns:
- if isinstance(column.default, Sequence):
- columnSyntax = ColumnSyntax(column)
- if column not in specifiedColumnModels:
- columnsAndValues.append(
- (columnSyntax, SequenceSyntax(column.default))
- )
- sortedColumns = sorted(columnsAndValues,
- key=lambda (c, v): c.model.name)
- allTables = []
- stmt = SQLFragment('insert into ')
- stmt.append(TableSyntax(tableModel).subSQL(metadata, allTables))
- stmt.append(SQLFragment(" "))
- stmt.append(_inParens(_commaJoined(
- [c.subSQL(metadata, allTables) for (c, v) in
- sortedColumns])))
- stmt.append(SQLFragment(" values "))
- stmt.append(_inParens(_commaJoined(
- [_convert(v).subSQL(metadata, allTables)
- for (c, v) in sortedColumns])))
- return self._returningClause(metadata, stmt, allTables)
-
-
-
-def _convert(x):
- """
- Convert a value to an appropriate SQL AST node. (Currently a simple
- isinstance, could be promoted to use adaptation if we want to get fancy.)
- """
- if isinstance(x, ExpressionSyntax):
- return x
- else:
- return Constant(x)
-
-
-
-class Update(_DMLStatement):
- """
- 'update' statement
- """
-
- def __init__(self, columnMap, Where, Return=None):
- super(Update, self).__init__()
- _fromSameTable(_modelsFromMap(columnMap))
- self.columnMap = columnMap
- self.Where = Where
- self.Return = Return
-
-
- def _toSQL(self, metadata):
- """
- @return: a 'insert' statement with placeholders and arguments
-
- @rtype: L{SQLFragment}
- """
- sortedColumns = sorted(self.columnMap.items(),
- key=lambda (c, v): c.model.name)
- allTables = []
- result = SQLFragment('update ')
- result.append(
- TableSyntax(sortedColumns[0][0].model.table).subSQL(
- metadata, allTables)
- )
- result.text += ' set '
- result.append(
- _commaJoined(
- [c.subSQL(metadata, allTables).append(
- SQLFragment(" = ").subSQL(metadata, allTables)
- ).append(_convert(v).subSQL(metadata, allTables))
- for (c, v) in sortedColumns]
- )
- )
- result.append(SQLFragment( ' where '))
- result.append(self.Where.subSQL(metadata, allTables))
- return self._returningClause(metadata, result, allTables)
-
-
-
-class Delete(_DMLStatement):
- """
- 'delete' statement.
- """
-
- def __init__(self, From, Where, Return=None):
- self.From = From
- self.Where = Where
- self.Return = Return
-
-
- def _toSQL(self, metadata):
- result = SQLFragment()
- allTables = self.From.tables()
- result.text += 'delete from '
- result.append(self.From.subSQL(metadata, allTables))
- result.text += ' where '
- result.append(self.Where.subSQL(metadata, allTables))
- return self._returningClause(metadata, result, allTables)
-
-
-
-class Lock(_Statement):
- """
- An SQL 'lock' statement.
- """
-
- def __init__(self, table, mode):
- self.table = table
- self.mode = mode
-
-
- @classmethod
- def exclusive(cls, table):
- return cls(table, 'exclusive')
-
-
- def _toSQL(self, metadata):
- return SQLFragment('lock table ').append(
- self.table.subSQL(metadata, [self.table])).append(
- SQLFragment(' in %s mode' % (self.mode,)))
-
-
-
-class Savepoint(_Statement):
- """
- An SQL 'savepoint' statement.
- """
-
- def __init__(self, name):
- self.name = name
-
-
- def _toSQL(self, metadata):
- return SQLFragment('savepoint %s' % (self.name,))
-
-
-class RollbackToSavepoint(_Statement):
- """
- An SQL 'rollback to savepoint' statement.
- """
-
- def __init__(self, name):
- self.name = name
-
-
- def _toSQL(self, metadata):
- return SQLFragment('rollback to savepoint %s' % (self.name,))
-
-
-class ReleaseSavepoint(_Statement):
- """
- An SQL 'release savepoint' statement.
- """
-
- def __init__(self, name):
- self.name = name
-
-
- def _toSQL(self, metadata):
- return SQLFragment('release savepoint %s' % (self.name,))
-
-
-
-class SavepointAction(object):
-
- def __init__(self, name):
- self._name = name
-
-
- def acquire(self, txn):
- return Savepoint(self._name).on(txn)
-
-
- def rollback(self, txn):
- return RollbackToSavepoint(self._name).on(txn)
-
-
- def release(self, txn):
- if txn.dialect == ORACLE_DIALECT:
- # There is no 'release savepoint' statement in oracle, but then, we
- # don't need it because there's no resource to manage. Just don't
- # do anything.
- return NoOp()
- else:
- return ReleaseSavepoint(self._name).on(txn)
-
-
-
-class NoOp(object):
- def on(self, *a, **kw):
- return succeed(None)
-
-
-
-class SQLFragment(object):
- """
- Combination of SQL text and arguments; a statement which may be executed
- against a database.
- """
-
- def __init__(self, text="", parameters=None):
- self.text = text
- if parameters is None:
- parameters = []
- self.parameters = parameters
-
-
- def bind(self, **kw):
- params = []
- for parameter in self.parameters:
- if isinstance(parameter, Parameter):
- params.append(kw[parameter.name])
- else:
- params.append(parameter)
- return SQLFragment(self.text, params)
-
-
- def append(self, anotherStatement):
- self.text += anotherStatement.text
- self.parameters += anotherStatement.parameters
- return self
-
-
- def __eq__(self, stmt):
- if not isinstance(stmt, SQLFragment):
- return NotImplemented
- return (self.text, self.parameters) == (stmt.text, stmt.parameters)
-
-
- def __ne__(self, stmt):
- if not isinstance(stmt, SQLFragment):
- return NotImplemented
- return not self.__eq__(stmt)
-
-
- def __repr__(self):
- return self.__class__.__name__ + repr((self.text, self.parameters))
-
-
- def subSQL(self, metadata, allTables):
- return self
-
-
-
-class Parameter(object):
-
- def __init__(self, name):
- self.name = name
-
-
- def __eq__(self, param):
- if not isinstance(param, Parameter):
- return NotImplemented
- return self.name == param.name
-
-
- def __ne__(self, param):
- if not isinstance(param, Parameter):
- return NotImplemented
- return not self.__eq__(param)
-
-
- def __repr__(self):
- return 'Parameter(%r)' % (self.name,)
-
-
-# Common helpers:
-
-# current timestamp in UTC format. Hack to support standard syntax for this,
-# rather than the compatibility procedure found in various databases.
-utcNowSQL = NamedValue("CURRENT_TIMESTAMP at time zone 'UTC'")
-
-# You can't insert a column with no rows. In SQL that just isn't valid syntax,
-# and in this DAL you need at least one key or we can't tell what table you're
-# talking about. Luckily there's the 'default' keyword to the rescue, which, in
-# the context of an INSERT statement means 'use the default value explicitly'.
-# (Although this is a special keyword in a CREATE statement, in an INSERT it
-# behaves like an expression to the best of my knowledge.)
-default = NamedValue('default')
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/syntax.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/syntax.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,1174 @@
+# -*- test-case-name: twext.enterprise.dal.test.test_sqlsyntax -*-
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Syntax wrappers and generators for SQL.
+"""
+
+import itertools
+
+from zope.interface import implements
+
+from twisted.internet.defer import succeed
+
+from twext.enterprise.ienterprise import POSTGRES_DIALECT, ORACLE_DIALECT
+from twext.enterprise.ienterprise import IDerivedParameter
+
+from twext.enterprise.util import mapOracleOutputType
+from twext.enterprise.dal.model import Schema, Table, Column, Sequence
+
+try:
+ import cx_Oracle
+ cx_Oracle
+except ImportError:
+ cx_Oracle = None
+
+class ConnectionMetadata(object):
+ """
+ Representation of the metadata about the database connection required to
+ generate some SQL, for a single statement. Contains information necessary
+ to generate placeholder strings and determine the database dialect.
+ """
+
+ def __init__(self, dialect):
+ self.dialect = dialect
+
+
+ def placeholder(self):
+ raise NotImplementedError("See subclasses.")
+
+
+
+class FixedPlaceholder(ConnectionMetadata):
+ """
+ Metadata about a connection which uses a fixed string as its placeholder.
+ """
+
+ def __init__(self, dialect, placeholder):
+ super(FixedPlaceholder, self).__init__(dialect)
+ self._placeholder = placeholder
+
+
+ def placeholder(self):
+ return self._placeholder
+
+
+
+class NumericPlaceholder(ConnectionMetadata):
+
+ def __init__(self, dialect):
+ super(NumericPlaceholder, self).__init__(dialect)
+ self._next = itertools.count(1).next
+
+
+ def placeholder(self):
+ return ':' + str(self._next())
+
+
+
+def defaultMetadata():
+ """
+ Generate a default L{ConnectionMetadata}
+ """
+ return FixedPlaceholder(POSTGRES_DIALECT, '?')
+
+
+
+class TableMismatch(Exception):
+ """
+ A table in a statement did not match with a column.
+ """
+
+
+
+class NotEnoughValues(ValueError):
+ """
+ Not enough values were supplied for an L{Insert}.
+ """
+
+
+
+class _Statement(object):
+ """
+ An SQL statement that may be executed. (An abstract base class, must
+ implement several methods.)
+ """
+
+ _paramstyles = {
+ 'pyformat': lambda dialect: FixedPlaceholder(dialect, "%s"),
+ 'numeric': NumericPlaceholder
+ }
+
+
+ def toSQL(self, metadata=None):
+ if metadata is None:
+ metadata = defaultMetadata()
+ return self._toSQL(metadata)
+
+
+ def _extraVars(self, txn, metadata):
+ return {}
+
+
+ def _extraResult(self, result, outvars, metadata):
+ return result
+
+
+ def on(self, txn, raiseOnZeroRowCount=None, **kw):
+ """
+ Execute this statement on a given L{IAsyncTransaction} and return the
+ resulting L{Deferred}.
+ """
+ metadata = self._paramstyles[txn.paramstyle](txn.dialect)
+ outvars = self._extraVars(txn, metadata)
+ kw.update(outvars)
+ fragment = self.toSQL(metadata).bind(**kw)
+ result = txn.execSQL(fragment.text, fragment.parameters,
+ raiseOnZeroRowCount)
+ return self._extraResult(result, outvars, metadata)
+
+
+
+class Syntax(object):
+ """
+ Base class for syntactic convenience.
+
+ This class will define dynamic attribute access to represent its underlying
+ model as a Python namespace.
+
+ You can access the underlying model as '.model'.
+ """
+
+ modelType = None
+ model = None
+
+ def __init__(self, model):
+ if not isinstance(model, self.modelType):
+ # make sure we don't get a misleading repr()
+ raise ValueError("type mismatch: %r %r", type(self), model)
+ self.model = model
+
+
+ def __repr__(self):
+ if self.model is not None:
+ return '<Syntax for: %r>' % (self.model,)
+ return super(Syntax, self).__repr__()
+
+
+
+def comparison(comparator):
+ def __(self, other):
+ if other is None:
+ return NullComparison(self, comparator)
+ if isinstance(other, Select):
+ return NotImplemented
+ if isinstance(other, ColumnSyntax):
+ return ColumnComparison(self, comparator, other)
+ else:
+ return CompoundComparison(self, comparator, Constant(other))
+ return __
+
+
+
+class ExpressionSyntax(Syntax):
+ __eq__ = comparison('=')
+ __ne__ = comparison('!=')
+ __gt__ = comparison('>')
+ __ge__ = comparison('>=')
+ __lt__ = comparison('<')
+ __le__ = comparison('<=')
+ __add__ = comparison("+")
+ __sub__ = comparison("-")
+ __div__= comparison("/")
+ __mul__= comparison("*")
+
+
+ def __nonzero__(self):
+ raise ValueError(
+ "SQL expressions should not be tested for truth value in Python.")
+
+
+ def In(self, subselect):
+ # Can't be Select.__contains__ because __contains__ gets __nonzero__
+ # called on its result by the 'in' syntax.
+ return CompoundComparison(self, 'in', subselect)
+
+
+
+class FunctionInvocation(ExpressionSyntax):
+ def __init__(self, function, *args):
+ self.function = function
+ self.args = args
+
+
+ def allColumns(self):
+ """
+ All of the columns in all of the arguments' columns.
+ """
+ def ac():
+ for arg in self.args:
+ for column in arg.allColumns():
+ yield column
+ return list(ac())
+
+
+ def subSQL(self, metadata, allTables):
+ result = SQLFragment(self.function.nameFor(metadata))
+ result.append(_inParens(
+ _commaJoined(_convert(arg).subSQL(metadata, allTables)
+ for arg in self.args)))
+ return result
+
+
+
+class Constant(ExpressionSyntax):
+ def __init__(self, value):
+ self.value = value
+
+
+ def allColumns(self):
+ return []
+
+
+ def subSQL(self, metadata, allTables):
+ return SQLFragment(metadata.placeholder(), [self.value])
+
+
+
+class NamedValue(ExpressionSyntax):
+ """
+ A constant within the database; something pre-defined, such as
+ CURRENT_TIMESTAMP.
+ """
+ def __init__(self, name):
+ self.name = name
+
+
+ def subSQL(self, metadata, allTables):
+ return SQLFragment(self.name)
+
+
+
+class Function(object):
+ """
+ An L{Function} is a representation of an SQL Function function.
+ """
+
+ def __init__(self, name, oracleName=None):
+ self.name = name
+ self.oracleName = oracleName
+
+
+ def nameFor(self, metadata):
+ if metadata.dialect == ORACLE_DIALECT and self.oracleName is not None:
+ return self.oracleName
+ return self.name
+
+
+ def __call__(self, *args):
+ """
+ Produce an L{FunctionInvocation}
+ """
+ return FunctionInvocation(self, *args)
+
+
+
+Max = Function("max")
+Len = Function("character_length", "length")
+
+
+
+class SchemaSyntax(Syntax):
+ """
+ Syntactic convenience for L{Schema}.
+ """
+
+ modelType = Schema
+
+ def __getattr__(self, attr):
+ try:
+ tableModel = self.model.tableNamed(attr)
+ except KeyError:
+ try:
+ seqModel = self.model.sequenceNamed(attr)
+ except KeyError:
+ raise AttributeError("schema has no table or sequence %r" % (attr,))
+ else:
+ return SequenceSyntax(seqModel)
+ else:
+ syntax = TableSyntax(tableModel)
+ # Needs to be preserved here so that aliasing will work.
+ setattr(self, attr, syntax)
+ return syntax
+
+
+ def __iter__(self):
+ for table in self.model.tables:
+ yield TableSyntax(table)
+
+
+
+class SequenceSyntax(ExpressionSyntax):
+ """
+ Syntactic convenience for L{Sequence}.
+ """
+
+ modelType = Sequence
+
+ def subSQL(self, metadata, allTables):
+ """
+ Convert to an SQL fragment.
+ """
+ if metadata.dialect == ORACLE_DIALECT:
+ fmt = "%s.nextval"
+ else:
+ fmt = "nextval('%s')"
+ return SQLFragment(fmt % (self.model.name,))
+
+
+
+class TableSyntax(Syntax):
+ """
+ Syntactic convenience for L{Table}.
+ """
+
+ modelType = Table
+
+ def join(self, otherTableSyntax, on=None, type=''):
+ if on is None:
+ type = 'cross'
+ return Join(self, type, otherTableSyntax, on)
+
+
+ def subSQL(self, metadata, allTables):
+ """
+ For use in a 'from' clause.
+ """
+ # XXX maybe there should be a specific method which is only invoked
+ # from the FROM clause, that only tables and joins would implement?
+ return SQLFragment(self.model.name)
+
+
+ def __getattr__(self, attr):
+ return ColumnSyntax(self.model.columnNamed(attr))
+
+
+ def __iter__(self):
+ for column in self.model.columns:
+ yield ColumnSyntax(column)
+
+
+ def tables(self):
+ return [self]
+
+
+ def aliases(self):
+ result = {}
+ for k, v in self.__dict__.items():
+ if isinstance(v, ColumnSyntax):
+ result[k] = v
+ return result
+
+
+ def __contains__(self, columnSyntax):
+ if isinstance(columnSyntax, FunctionInvocation):
+ columnSyntax = columnSyntax.arg
+ return (columnSyntax.model in self.model.columns)
+
+
+
+class Join(object):
+ """
+ A DAL object representing an SQL 'join' statement.
+
+ @ivar leftSide: a L{Join} or L{TableSyntax} representing the left side of
+ this join.
+
+ @ivar rightSide: a L{TableSyntax} representing the right side of this join.
+
+ @ivar type: the type of join this is. For example, for a left outer join,
+ this would be C{'left outer'}.
+ @type type: C{str}
+
+ @ivar on: the 'on' clause of this table.
+
+ @type on: L{ExpressionSyntax}
+ """
+
+ def __init__(self, leftSide, type, rightSide, on):
+ self.leftSide = leftSide
+ self.type = type
+ self.rightSide = rightSide
+ self.on = on
+
+
+ def subSQL(self, metadata, allTables):
+ stmt = SQLFragment()
+ stmt.append(self.leftSide.subSQL(metadata, allTables))
+ stmt.text += ' '
+ if self.type:
+ stmt.text += self.type
+ stmt.text += ' '
+ stmt.text += 'join '
+ stmt.append(self.rightSide.subSQL(metadata, allTables))
+ if self.type != 'cross':
+ stmt.text += ' on '
+ stmt.append(self.on.subSQL(metadata, allTables))
+ return stmt
+
+
+ def tables(self):
+ return self.leftSide.tables() + self.rightSide.tables()
+
+
+ def join(self, otherTable, on=None, type=None):
+ if on is None:
+ type = 'cross'
+ return Join(self, type, otherTable, on)
+
+
+_KEYWORDS = ["access",
+ # SQL keyword, but we have a column with this name
+ "path",
+ # Not actually a standard keyword, but a function in oracle, and we
+ # have a column with this name.
+ "size",
+ # not actually sure what this is; only experimentally determined
+ # that not quoting it causes an issue.
+ ]
+
+
+class ColumnSyntax(ExpressionSyntax):
+ """
+ Syntactic convenience for L{Column}.
+ """
+
+ modelType = Column
+
+
+ def allColumns(self):
+ return [self]
+
+
+ def subSQL(self, metadata, allTables):
+ # XXX This, and 'model', could in principle conflict with column names.
+ # Maybe do something about that.
+ name = self.model.name
+ if metadata.dialect == ORACLE_DIALECT and name.lower() in _KEYWORDS:
+ name = '"%s"' % (name,)
+
+ for tableSyntax in allTables:
+ if self.model.table is not tableSyntax.model:
+ if self.model.name in (c.name for c in
+ tableSyntax.model.columns):
+ return SQLFragment((self.model.table.name + '.' + name))
+ return SQLFragment(name)
+
+
+
+class Comparison(ExpressionSyntax):
+
+ def __init__(self, a, op, b):
+ self.a = a
+ self.op = op
+ self.b = b
+
+
+ def _subexpression(self, expr, metadata, allTables):
+ result = expr.subSQL(metadata, allTables)
+ if self.op not in ('and', 'or') and isinstance(expr, Comparison):
+ result = _inParens(result)
+ return result
+
+
+ def booleanOp(self, operand, other):
+ return CompoundComparison(self, operand, other)
+
+
+ def And(self, other):
+ return self.booleanOp('and', other)
+
+
+ def Or(self, other):
+ return self.booleanOp('or', other)
+
+
+
+class NullComparison(Comparison):
+ """
+ A L{NullComparison} is a comparison of a column or expression with None.
+ """
+ def __init__(self, a, op):
+ # 'b' is always None for this comparison type
+ super(NullComparison, self).__init__(a, op, None)
+
+
+ def subSQL(self, metadata, allTables):
+ sqls = SQLFragment()
+ sqls.append(self.a.subSQL(metadata, allTables))
+ sqls.text += " is "
+ if self.op != "=":
+ sqls.text += "not "
+ sqls.text += "null"
+ return sqls
+
+
+
+class CompoundComparison(Comparison):
+ """
+ A compound comparison; two or more constraints, joined by an operation
+ (currently only AND or OR).
+ """
+
+ def allColumns(self):
+ return self.a.allColumns() + self.b.allColumns()
+
+
+ def subSQL(self, metadata, allTables):
+ stmt = SQLFragment()
+ result = self._subexpression(self.a, metadata, allTables)
+ if isinstance(self.a, CompoundComparison) and self.a.op == 'or' and self.op == 'and':
+ result = _inParens(result)
+ stmt.append(result)
+
+ stmt.text += ' %s ' % (self.op,)
+
+ result = self._subexpression(self.b, metadata, allTables)
+ if isinstance(self.b, CompoundComparison) and self.b.op == 'or' and self.op == 'and':
+ result = _inParens(result)
+ stmt.append(result)
+ return stmt
+
+
+
+class ColumnComparison(CompoundComparison):
+ """
+ Comparing two columns is the same as comparing any other two expressions,
+ (for now).
+ """
+
+
+
+class _AllColumns(object):
+
+ def subSQL(self, metadata, allTables):
+ return SQLFragment('*')
+
+ALL_COLUMNS = _AllColumns()
+
+
+
+class _SomeColumns(object):
+
+ def __init__(self, columns):
+ self.columns = columns
+
+
+ def subSQL(self, metadata, allTables):
+ first = True
+ cstatement = SQLFragment()
+ for column in self.columns:
+ if first:
+ first = False
+ else:
+ cstatement.append(SQLFragment(", "))
+ cstatement.append(column.subSQL(metadata, allTables))
+ return cstatement
+
+
+
+def _columnsMatchTables(columns, tables):
+ for expression in columns:
+ for column in expression.allColumns():
+ for table in tables:
+ if column in table:
+ break
+ else:
+ return False
+ return True
+
+
+class Tuple(object):
+
+ def __init__(self, columns):
+ self.columns = columns
+
+
+ def subSQL(self, metadata, allTables):
+ return _inParens(_commaJoined(c.subSQL(metadata, allTables)
+ for c in self.columns))
+
+
+ def allColumns(self):
+ return self.columns
+
+
+
+
+class Select(_Statement):
+ """
+ 'select' statement.
+ """
+
+ def __init__(self, columns=None, Where=None, From=None, OrderBy=None,
+ GroupBy=None, Limit=None, ForUpdate=False, Ascending=None,
+ Having=None, Distinct=False):
+ self.From = From
+ self.Where = Where
+ self.Distinct = Distinct
+ if not isinstance(OrderBy, (list, tuple, type(None))):
+ OrderBy = [OrderBy]
+ self.OrderBy = OrderBy
+ if not isinstance(GroupBy, (list, tuple, type(None))):
+ GroupBy = [GroupBy]
+ self.GroupBy = GroupBy
+ self.Limit = Limit
+ self.Having = Having
+ if columns is None:
+ columns = ALL_COLUMNS
+ else:
+ if not _columnsMatchTables(columns, From.tables()):
+ raise TableMismatch()
+
+ columns = _SomeColumns(columns)
+ self.columns = columns
+ self.ForUpdate = ForUpdate
+ self.Ascending = Ascending
+
+
+ def __eq__(self, other):
+ """
+ Create a comparison.
+ """
+ if isinstance(other, (list, tuple)):
+ other = Tuple(other)
+ return CompoundComparison(other, '=', self)
+
+
+ def _toSQL(self, metadata):
+ """
+ @return: a 'select' statement with placeholders and arguments
+
+ @rtype: L{SQLFragment}
+ """
+ stmt = SQLFragment("select ")
+ if self.Distinct:
+ stmt.text += "distinct "
+ allTables = self.From.tables()
+ stmt.append(self.columns.subSQL(metadata, allTables))
+ stmt.text += " from "
+ stmt.append(self.From.subSQL(metadata, allTables))
+ if self.Where is not None:
+ wherestmt = self.Where.subSQL(metadata, allTables)
+ stmt.text += " where "
+ stmt.append(wherestmt)
+ if self.GroupBy is not None:
+ stmt.text += " group by "
+ fst = True
+ for subthing in self.GroupBy:
+ if fst:
+ fst = False
+ else:
+ stmt.text += ', '
+ stmt.append(subthing.subSQL(metadata, allTables))
+ if self.Having is not None:
+ havingstmt = self.Having.subSQL(metadata, allTables)
+ stmt.text += " having "
+ stmt.append(havingstmt)
+ if self.OrderBy is not None:
+ stmt.text += " order by "
+ fst = True
+ for subthing in self.OrderBy:
+ if fst:
+ fst = False
+ else:
+ stmt.text += ', '
+ stmt.append(subthing.subSQL(metadata, allTables))
+ if self.Ascending is not None:
+ if self.Ascending:
+ kw = " asc"
+ else:
+ kw = " desc"
+ stmt.append(SQLFragment(kw))
+ if self.ForUpdate:
+ stmt.text += " for update"
+ if self.Limit is not None:
+ stmt.text += " limit "
+ stmt.append(Constant(self.Limit).subSQL(metadata, allTables))
+ return stmt
+
+
+ def subSQL(self, metadata, allTables):
+ result = SQLFragment("(")
+ result.append(self.toSQL(metadata))
+ result.append(SQLFragment(")"))
+ return result
+
+
+
+def _commaJoined(stmts):
+ first = True
+ cstatement = SQLFragment()
+ for stmt in stmts:
+ if first:
+ first = False
+ else:
+ cstatement.append(SQLFragment(", "))
+ cstatement.append(stmt)
+ return cstatement
+
+
+
+def _inParens(stmt):
+ result = SQLFragment("(")
+ result.append(stmt)
+ result.append(SQLFragment(")"))
+ return result
+
+
+
+def _fromSameTable(columns):
+ """
+ Extract the common table used by a list of L{Column} objects, raising
+ L{TableMismatch}.
+ """
+ table = columns[0].table
+ for column in columns:
+ if table is not column.table:
+ raise TableMismatch("Columns must all be from the same table.")
+ return table
+
+
+
+def _modelsFromMap(columnMap):
+ """
+ Get the L{Column} objects from a mapping of L{ColumnSyntax} to values.
+ """
+ return [c.model for c in columnMap.keys()]
+
+
+
+class _CommaList(object):
+ def __init__(self, subfragments):
+ self.subfragments = subfragments
+
+
+ def subSQL(self, metadata, allTables):
+ return _commaJoined(f.subSQL(metadata, allTables)
+ for f in self.subfragments)
+
+
+
+class _DMLStatement(_Statement):
+ """
+ Common functionality of Insert/Update/Delete statements.
+ """
+
+ def _returningClause(self, metadata, stmt, allTables):
+ """
+ Add a dialect-appropriate 'returning' clause to the end of the given SQL
+ statement.
+
+ @param metadata: describes the database we are generating the statement for.
+ @type metadata: L{ConnectionMetadata}
+
+ @param stmt: the SQL fragment generated without the 'returning' clause
+ @type stmt: L{SQLFragment}
+
+ @param allTables: all tables involved in the query; see any C{subSQL}
+ method.
+
+ @return: the C{stmt} parameter.
+ """
+ retclause = self.Return
+ if isinstance(retclause, (tuple, list)):
+ retclause = _CommaList(retclause)
+ if retclause is not None:
+ stmt.text += ' returning '
+ stmt.append(retclause.subSQL(metadata, allTables))
+ if metadata.dialect == ORACLE_DIALECT:
+ stmt.text += ' into '
+ params = []
+ retvals = self._returnAsList()
+ for n, v in enumerate(retvals):
+ params.append(
+ Constant(Parameter("oracle_out_" + str(n)))
+ .subSQL(metadata, allTables)
+ )
+ stmt.append(_commaJoined(params))
+ return stmt
+
+
+ def _returnAsList(self):
+ if not isinstance(self.Return, (tuple, list)):
+ return [self.Return]
+ else:
+ return self.Return
+
+
+ def _extraVars(self, txn, metadata):
+ result = []
+ rvars = self._returnAsList()
+ if metadata.dialect == ORACLE_DIALECT:
+ for n, v in enumerate(rvars):
+ result.append(("oracle_out_" + str(n), _OracleOutParam(v)))
+ return result
+
+
+ def _extraResult(self, result, outvars, metadata):
+ if metadata.dialect == ORACLE_DIALECT and self.Return is not None:
+ def processIt(shouldBeNone):
+ result = [[v.value for k, v in outvars]]
+ return result
+ return result.addCallback(processIt)
+ else:
+ return result
+
+
+
+class _OracleOutParam(object):
+ implements(IDerivedParameter)
+
+ def __init__(self, columnSyntax):
+ self.columnSyntax = columnSyntax
+
+
+ def preQuery(self, cursor):
+ self.columnSyntax
+ typeMap = {'integer': cx_Oracle.NUMBER,
+ 'text': cx_Oracle.CLOB,
+ 'varchar': cx_Oracle.STRING,
+ 'timestamp': cx_Oracle.TIMESTAMP}
+ typeID = self.columnSyntax.model.type.name.lower()
+ self.var = cursor.var(typeMap[typeID])
+ return self.var
+
+
+ def postQuery(self, cursor):
+ self.value = mapOracleOutputType(self.var.getvalue())
+
+
+
+class Insert(_DMLStatement):
+ """
+ 'insert' statement.
+ """
+
+ def __init__(self, columnMap, Return=None):
+ self.columnMap = columnMap
+ self.Return = Return
+ columns = _modelsFromMap(columnMap)
+ table = _fromSameTable(columns)
+ required = [column for column in table.columns if column.needsValue()]
+ unspecified = [column for column in required
+ if column not in columns]
+ if unspecified:
+ raise NotEnoughValues(
+ 'Columns [%s] required.' %
+ (', '.join([c.name for c in unspecified])))
+
+
+ def _toSQL(self, metadata):
+ """
+ @return: a 'insert' statement with placeholders and arguments
+
+ @rtype: L{SQLFragment}
+ """
+ columnsAndValues = self.columnMap.items()
+ tableModel = columnsAndValues[0][0].model.table
+ specifiedColumnModels = [x.model for x in self.columnMap.keys()]
+ if metadata.dialect == ORACLE_DIALECT:
+ # See test_nextSequenceDefaultImplicitExplicitOracle.
+ for column in tableModel.columns:
+ if isinstance(column.default, Sequence):
+ columnSyntax = ColumnSyntax(column)
+ if column not in specifiedColumnModels:
+ columnsAndValues.append(
+ (columnSyntax, SequenceSyntax(column.default))
+ )
+ sortedColumns = sorted(columnsAndValues,
+ key=lambda (c, v): c.model.name)
+ allTables = []
+ stmt = SQLFragment('insert into ')
+ stmt.append(TableSyntax(tableModel).subSQL(metadata, allTables))
+ stmt.append(SQLFragment(" "))
+ stmt.append(_inParens(_commaJoined(
+ [c.subSQL(metadata, allTables) for (c, v) in
+ sortedColumns])))
+ stmt.append(SQLFragment(" values "))
+ stmt.append(_inParens(_commaJoined(
+ [_convert(v).subSQL(metadata, allTables)
+ for (c, v) in sortedColumns])))
+ return self._returningClause(metadata, stmt, allTables)
+
+
+
+def _convert(x):
+ """
+ Convert a value to an appropriate SQL AST node. (Currently a simple
+ isinstance, could be promoted to use adaptation if we want to get fancy.)
+ """
+ if isinstance(x, ExpressionSyntax):
+ return x
+ else:
+ return Constant(x)
+
+
+
+class Update(_DMLStatement):
+ """
+ 'update' statement
+ """
+
+ def __init__(self, columnMap, Where, Return=None):
+ super(Update, self).__init__()
+ _fromSameTable(_modelsFromMap(columnMap))
+ self.columnMap = columnMap
+ self.Where = Where
+ self.Return = Return
+
+
+ def _toSQL(self, metadata):
+ """
+ @return: a 'insert' statement with placeholders and arguments
+
+ @rtype: L{SQLFragment}
+ """
+ sortedColumns = sorted(self.columnMap.items(),
+ key=lambda (c, v): c.model.name)
+ allTables = []
+ result = SQLFragment('update ')
+ result.append(
+ TableSyntax(sortedColumns[0][0].model.table).subSQL(
+ metadata, allTables)
+ )
+ result.text += ' set '
+ result.append(
+ _commaJoined(
+ [c.subSQL(metadata, allTables).append(
+ SQLFragment(" = ").subSQL(metadata, allTables)
+ ).append(_convert(v).subSQL(metadata, allTables))
+ for (c, v) in sortedColumns]
+ )
+ )
+ result.append(SQLFragment( ' where '))
+ result.append(self.Where.subSQL(metadata, allTables))
+ return self._returningClause(metadata, result, allTables)
+
+
+
+class Delete(_DMLStatement):
+ """
+ 'delete' statement.
+ """
+
+ def __init__(self, From, Where, Return=None):
+ self.From = From
+ self.Where = Where
+ self.Return = Return
+
+
+ def _toSQL(self, metadata):
+ result = SQLFragment()
+ allTables = self.From.tables()
+ result.text += 'delete from '
+ result.append(self.From.subSQL(metadata, allTables))
+ result.text += ' where '
+ result.append(self.Where.subSQL(metadata, allTables))
+ return self._returningClause(metadata, result, allTables)
+
+
+
+class Lock(_Statement):
+ """
+ An SQL 'lock' statement.
+ """
+
+ def __init__(self, table, mode):
+ self.table = table
+ self.mode = mode
+
+
+ @classmethod
+ def exclusive(cls, table):
+ return cls(table, 'exclusive')
+
+
+ def _toSQL(self, metadata):
+ return SQLFragment('lock table ').append(
+ self.table.subSQL(metadata, [self.table])).append(
+ SQLFragment(' in %s mode' % (self.mode,)))
+
+
+
+class Savepoint(_Statement):
+ """
+ An SQL 'savepoint' statement.
+ """
+
+ def __init__(self, name):
+ self.name = name
+
+
+ def _toSQL(self, metadata):
+ return SQLFragment('savepoint %s' % (self.name,))
+
+
+class RollbackToSavepoint(_Statement):
+ """
+ An SQL 'rollback to savepoint' statement.
+ """
+
+ def __init__(self, name):
+ self.name = name
+
+
+ def _toSQL(self, metadata):
+ return SQLFragment('rollback to savepoint %s' % (self.name,))
+
+
+class ReleaseSavepoint(_Statement):
+ """
+ An SQL 'release savepoint' statement.
+ """
+
+ def __init__(self, name):
+ self.name = name
+
+
+ def _toSQL(self, metadata):
+ return SQLFragment('release savepoint %s' % (self.name,))
+
+
+
+class SavepointAction(object):
+
+ def __init__(self, name):
+ self._name = name
+
+
+ def acquire(self, txn):
+ return Savepoint(self._name).on(txn)
+
+
+ def rollback(self, txn):
+ return RollbackToSavepoint(self._name).on(txn)
+
+
+ def release(self, txn):
+ if txn.dialect == ORACLE_DIALECT:
+ # There is no 'release savepoint' statement in oracle, but then, we
+ # don't need it because there's no resource to manage. Just don't
+ # do anything.
+ return NoOp()
+ else:
+ return ReleaseSavepoint(self._name).on(txn)
+
+
+
+class NoOp(object):
+ def on(self, *a, **kw):
+ return succeed(None)
+
+
+
+class SQLFragment(object):
+ """
+ Combination of SQL text and arguments; a statement which may be executed
+ against a database.
+ """
+
+ def __init__(self, text="", parameters=None):
+ self.text = text
+ if parameters is None:
+ parameters = []
+ self.parameters = parameters
+
+
+ def bind(self, **kw):
+ params = []
+ for parameter in self.parameters:
+ if isinstance(parameter, Parameter):
+ params.append(kw[parameter.name])
+ else:
+ params.append(parameter)
+ return SQLFragment(self.text, params)
+
+
+ def append(self, anotherStatement):
+ self.text += anotherStatement.text
+ self.parameters += anotherStatement.parameters
+ return self
+
+
+ def __eq__(self, stmt):
+ if not isinstance(stmt, SQLFragment):
+ return NotImplemented
+ return (self.text, self.parameters) == (stmt.text, stmt.parameters)
+
+
+ def __ne__(self, stmt):
+ if not isinstance(stmt, SQLFragment):
+ return NotImplemented
+ return not self.__eq__(stmt)
+
+
+ def __repr__(self):
+ return self.__class__.__name__ + repr((self.text, self.parameters))
+
+
+ def subSQL(self, metadata, allTables):
+ return self
+
+
+
+class Parameter(object):
+
+ def __init__(self, name):
+ self.name = name
+
+
+ def __eq__(self, param):
+ if not isinstance(param, Parameter):
+ return NotImplemented
+ return self.name == param.name
+
+
+ def __ne__(self, param):
+ if not isinstance(param, Parameter):
+ return NotImplemented
+ return not self.__eq__(param)
+
+
+ def __repr__(self):
+ return 'Parameter(%r)' % (self.name,)
+
+
+# Common helpers:
+
+# current timestamp in UTC format. Hack to support standard syntax for this,
+# rather than the compatibility procedure found in various databases.
+utcNowSQL = NamedValue("CURRENT_TIMESTAMP at time zone 'UTC'")
+
+# You can't insert a column with no rows. In SQL that just isn't valid syntax,
+# and in this DAL you need at least one key or we can't tell what table you're
+# talking about. Luckily there's the 'default' keyword to the rescue, which, in
+# the context of an INSERT statement means 'use the default value explicitly'.
+# (Although this is a special keyword in a CREATE statement, in an INSERT it
+# behaves like an expression to the best of my knowledge.)
+default = NamedValue('default')
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/test/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,19 +0,0 @@
-##
-# Copyright (c) 2005-2010 Apple Inc. All 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 twext.enterprise.dal.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/test/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,19 @@
+##
+# Copyright (c) 2005-2010 Apple Inc. All 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 twext.enterprise.dal.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/test/test_parseschema.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,246 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 parsing an SQL schema, which cover L{twext.enterprise.dal.model}
-and L{twext.enterprise.dal.parseschema}.
-"""
-
-from twext.enterprise.dal.model import Schema
-
-from twext.enterprise.dal.parseschema import addSQLToSchema
-from twisted.trial.unittest import TestCase
-
-
-class ParsingExampleTests(TestCase):
- """
- Tests for parsing some sample schemas.
- """
-
- def test_simplest(self):
- """
- Parse an extremely simple schema with one table in it.
- """
- s = Schema()
- addSQLToSchema(s, "create table foo (bar integer);")
- self.assertEquals(len(s.tables), 1)
- foo = s.tableNamed('foo')
- self.assertEquals(len(foo.columns), 1)
- bar = foo.columns[0]
- self.assertEquals(bar.name, "bar")
- self.assertEquals(bar.type.name, "integer")
-
-
- def test_stringTypes(self):
- """
- Table and column names should be byte strings.
- """
- s = Schema()
- addSQLToSchema(s, "create table foo (bar integer);")
- self.assertEquals(len(s.tables), 1)
- foo = s.tableNamed('foo')
- self.assertIsInstance(foo.name, str)
- self.assertIsInstance(foo.columnNamed('bar').name, str)
-
-
- def test_typeWithLength(self):
- """
- Parse a type with a length.
- """
- s = Schema()
- addSQLToSchema(s, "create table foo (bar varchar(6543))")
- bar = s.tableNamed('foo').columnNamed('bar')
- self.assertEquals(bar.type.name, "varchar")
- self.assertEquals(bar.type.length, 6543)
-
-
- def test_sequence(self):
- """
- Parsing a 'create sequence' statement adds a L{Sequence} to the
- L{Schema}.
- """
- s = Schema()
- addSQLToSchema(s, "create sequence myseq;")
- self.assertEquals(len(s.sequences), 1)
- self.assertEquals(s.sequences[0].name, "myseq")
-
-
- def test_sequenceColumn(self):
- """
- Parsing a 'create sequence' statement adds a L{Sequence} to the
- L{Schema}, and then a table that contains a column which uses the SQL
- C{nextval()} function to retrieve its default value from that sequence,
- will cause the L{Column} object to refer to the L{Sequence} and vice
- versa.
- """
- s = Schema()
- addSQLToSchema(s,
- """
- create sequence thingy;
- create table thetable (
- thecolumn integer default nextval('thingy')
- );
- """)
- self.assertEquals(len(s.sequences), 1)
- self.assertEquals(s.sequences[0].name, "thingy")
- self.assertEquals(s.tables[0].columns[0].default, s.sequences[0])
- self.assertEquals(s.sequences[0].referringColumns,
- [s.tables[0].columns[0]])
-
-
- def test_sequenceDefault(self):
- """
- Default sequence column.
- """
- s = Schema()
- addSQLToSchema(s,
- """
- create sequence alpha;
- create table foo (
- bar integer default nextval('alpha') not null,
- qux integer not null
- );
- """)
- self.assertEquals(s.tableNamed("foo").columnNamed("bar").needsValue(),
- False)
-
-
- def test_defaultConstantColumns(self):
- """
- Parsing a 'default' column with an appropriate type in it will return
- that type as the 'default' attribute of the Column object.
- """
- s = Schema()
- addSQLToSchema(s,
- """
- create table a (
- b integer default 4321,
- c boolean default false,
- d boolean default true,
- e varchar(255) default 'sample value',
- f varchar(255) default null
- );
- """)
- table = s.tableNamed("a")
- self.assertEquals(table.columnNamed("b").default, 4321)
- self.assertEquals(table.columnNamed("c").default, False)
- self.assertEquals(table.columnNamed("d").default, True)
- self.assertEquals(table.columnNamed("e").default, 'sample value')
- self.assertEquals(table.columnNamed("f").default, None)
-
-
- def test_needsValue(self):
- """
- Columns with defaults, or with a 'not null' constraint don't need a
- value; columns without one don't.
- """
- s = Schema()
- addSQLToSchema(s,
- """
- create table a (
- b integer default 4321 not null,
- c boolean default false,
- d integer not null,
- e integer
- )
- """)
- table = s.tableNamed("a")
- # Has a default, NOT NULL.
- self.assertEquals(table.columnNamed("b").needsValue(), False)
- # Has a default _and_ nullable.
- self.assertEquals(table.columnNamed("c").needsValue(), False)
- # No default, not nullable.
- self.assertEquals(table.columnNamed("d").needsValue(), True)
- # Just nullable.
- self.assertEquals(table.columnNamed("e").needsValue(), False)
-
-
- def test_notNull(self):
- """
- A column with a NOT NULL constraint in SQL will be parsed as a
- constraint which returns False from its C{canBeNull()} method.
- """
- s = Schema()
- addSQLToSchema(s,
- """
- create table alpha (beta integer,
- gamma integer not null);
- """)
- t = s.tableNamed('alpha')
- self.assertEquals(True, t.columnNamed('beta').canBeNull())
- self.assertEquals(False, t.columnNamed('gamma').canBeNull())
-
-
- def test_unique(self):
- """
- A column with a UNIQUE constraint in SQL will result in the table
- listing that column as a unique set.
- """
- for identicalSchema in [
- "create table sample (example integer unique);",
- "create table sample (example integer, unique(example));"]:
- s = Schema()
- addSQLToSchema(s, identicalSchema)
- table = s.tableNamed('sample')
- column = table.columnNamed('example')
- self.assertEquals(list(table.uniques()), [set([column])])
-
-
- def test_multiUnique(self):
- """
- A column with a UNIQUE constraint in SQL will result in the table
- listing that column as a unique set.
- """
- s = Schema()
- addSQLToSchema(
- s,
- "create table a (b integer, c integer, unique(b, c), unique(c));")
- a = s.tableNamed('a')
- b = a.columnNamed('b')
- c = a.columnNamed('c')
- self.assertEquals(list(a.uniques()),
- [set([b, c]), set([c])])
-
-
- def test_multiPrimaryKey(self):
- """
- A table with a multi-column PRIMARY KEY clause will be parsed as a tuple
- primaryKey attribute on the Table object.
- """
- s = Schema()
- addSQLToSchema(
- s, "create table a (b integer, c integer, primary key(b, c))")
- a = s.tableNamed("a")
- self.assertEquals(a.primaryKey,
- (a.columnNamed("b"), a.columnNamed("c")))
-
-
- def test_cascade(self):
- """
- A column with an 'on delete cascade' constraint will have its C{cascade}
- attribute set to True.
- """
- s = Schema()
- addSQLToSchema(
- s,
- """
- create table a (b integer primary key);
- create table c (d integer references a on delete cascade);
- """)
- self.assertEquals(s.tableNamed("a").columnNamed("b").cascade, False)
- self.assertEquals(s.tableNamed("c").columnNamed("d").cascade, True)
-
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/test/test_parseschema.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_parseschema.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,246 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 parsing an SQL schema, which cover L{twext.enterprise.dal.model}
+and L{twext.enterprise.dal.parseschema}.
+"""
+
+from twext.enterprise.dal.model import Schema
+
+from twext.enterprise.dal.parseschema import addSQLToSchema
+from twisted.trial.unittest import TestCase
+
+
+class ParsingExampleTests(TestCase):
+ """
+ Tests for parsing some sample schemas.
+ """
+
+ def test_simplest(self):
+ """
+ Parse an extremely simple schema with one table in it.
+ """
+ s = Schema()
+ addSQLToSchema(s, "create table foo (bar integer);")
+ self.assertEquals(len(s.tables), 1)
+ foo = s.tableNamed('foo')
+ self.assertEquals(len(foo.columns), 1)
+ bar = foo.columns[0]
+ self.assertEquals(bar.name, "bar")
+ self.assertEquals(bar.type.name, "integer")
+
+
+ def test_stringTypes(self):
+ """
+ Table and column names should be byte strings.
+ """
+ s = Schema()
+ addSQLToSchema(s, "create table foo (bar integer);")
+ self.assertEquals(len(s.tables), 1)
+ foo = s.tableNamed('foo')
+ self.assertIsInstance(foo.name, str)
+ self.assertIsInstance(foo.columnNamed('bar').name, str)
+
+
+ def test_typeWithLength(self):
+ """
+ Parse a type with a length.
+ """
+ s = Schema()
+ addSQLToSchema(s, "create table foo (bar varchar(6543))")
+ bar = s.tableNamed('foo').columnNamed('bar')
+ self.assertEquals(bar.type.name, "varchar")
+ self.assertEquals(bar.type.length, 6543)
+
+
+ def test_sequence(self):
+ """
+ Parsing a 'create sequence' statement adds a L{Sequence} to the
+ L{Schema}.
+ """
+ s = Schema()
+ addSQLToSchema(s, "create sequence myseq;")
+ self.assertEquals(len(s.sequences), 1)
+ self.assertEquals(s.sequences[0].name, "myseq")
+
+
+ def test_sequenceColumn(self):
+ """
+ Parsing a 'create sequence' statement adds a L{Sequence} to the
+ L{Schema}, and then a table that contains a column which uses the SQL
+ C{nextval()} function to retrieve its default value from that sequence,
+ will cause the L{Column} object to refer to the L{Sequence} and vice
+ versa.
+ """
+ s = Schema()
+ addSQLToSchema(s,
+ """
+ create sequence thingy;
+ create table thetable (
+ thecolumn integer default nextval('thingy')
+ );
+ """)
+ self.assertEquals(len(s.sequences), 1)
+ self.assertEquals(s.sequences[0].name, "thingy")
+ self.assertEquals(s.tables[0].columns[0].default, s.sequences[0])
+ self.assertEquals(s.sequences[0].referringColumns,
+ [s.tables[0].columns[0]])
+
+
+ def test_sequenceDefault(self):
+ """
+ Default sequence column.
+ """
+ s = Schema()
+ addSQLToSchema(s,
+ """
+ create sequence alpha;
+ create table foo (
+ bar integer default nextval('alpha') not null,
+ qux integer not null
+ );
+ """)
+ self.assertEquals(s.tableNamed("foo").columnNamed("bar").needsValue(),
+ False)
+
+
+ def test_defaultConstantColumns(self):
+ """
+ Parsing a 'default' column with an appropriate type in it will return
+ that type as the 'default' attribute of the Column object.
+ """
+ s = Schema()
+ addSQLToSchema(s,
+ """
+ create table a (
+ b integer default 4321,
+ c boolean default false,
+ d boolean default true,
+ e varchar(255) default 'sample value',
+ f varchar(255) default null
+ );
+ """)
+ table = s.tableNamed("a")
+ self.assertEquals(table.columnNamed("b").default, 4321)
+ self.assertEquals(table.columnNamed("c").default, False)
+ self.assertEquals(table.columnNamed("d").default, True)
+ self.assertEquals(table.columnNamed("e").default, 'sample value')
+ self.assertEquals(table.columnNamed("f").default, None)
+
+
+ def test_needsValue(self):
+ """
+ Columns with defaults, or with a 'not null' constraint don't need a
+ value; columns without one don't.
+ """
+ s = Schema()
+ addSQLToSchema(s,
+ """
+ create table a (
+ b integer default 4321 not null,
+ c boolean default false,
+ d integer not null,
+ e integer
+ )
+ """)
+ table = s.tableNamed("a")
+ # Has a default, NOT NULL.
+ self.assertEquals(table.columnNamed("b").needsValue(), False)
+ # Has a default _and_ nullable.
+ self.assertEquals(table.columnNamed("c").needsValue(), False)
+ # No default, not nullable.
+ self.assertEquals(table.columnNamed("d").needsValue(), True)
+ # Just nullable.
+ self.assertEquals(table.columnNamed("e").needsValue(), False)
+
+
+ def test_notNull(self):
+ """
+ A column with a NOT NULL constraint in SQL will be parsed as a
+ constraint which returns False from its C{canBeNull()} method.
+ """
+ s = Schema()
+ addSQLToSchema(s,
+ """
+ create table alpha (beta integer,
+ gamma integer not null);
+ """)
+ t = s.tableNamed('alpha')
+ self.assertEquals(True, t.columnNamed('beta').canBeNull())
+ self.assertEquals(False, t.columnNamed('gamma').canBeNull())
+
+
+ def test_unique(self):
+ """
+ A column with a UNIQUE constraint in SQL will result in the table
+ listing that column as a unique set.
+ """
+ for identicalSchema in [
+ "create table sample (example integer unique);",
+ "create table sample (example integer, unique(example));"]:
+ s = Schema()
+ addSQLToSchema(s, identicalSchema)
+ table = s.tableNamed('sample')
+ column = table.columnNamed('example')
+ self.assertEquals(list(table.uniques()), [set([column])])
+
+
+ def test_multiUnique(self):
+ """
+ A column with a UNIQUE constraint in SQL will result in the table
+ listing that column as a unique set.
+ """
+ s = Schema()
+ addSQLToSchema(
+ s,
+ "create table a (b integer, c integer, unique(b, c), unique(c));")
+ a = s.tableNamed('a')
+ b = a.columnNamed('b')
+ c = a.columnNamed('c')
+ self.assertEquals(list(a.uniques()),
+ [set([b, c]), set([c])])
+
+
+ def test_multiPrimaryKey(self):
+ """
+ A table with a multi-column PRIMARY KEY clause will be parsed as a tuple
+ primaryKey attribute on the Table object.
+ """
+ s = Schema()
+ addSQLToSchema(
+ s, "create table a (b integer, c integer, primary key(b, c))")
+ a = s.tableNamed("a")
+ self.assertEquals(a.primaryKey,
+ (a.columnNamed("b"), a.columnNamed("c")))
+
+
+ def test_cascade(self):
+ """
+ A column with an 'on delete cascade' constraint will have its C{cascade}
+ attribute set to True.
+ """
+ s = Schema()
+ addSQLToSchema(
+ s,
+ """
+ create table a (b integer primary key);
+ create table c (d integer references a on delete cascade);
+ """)
+ self.assertEquals(s.tableNamed("a").columnNamed("b").cascade, False)
+ self.assertEquals(s.tableNamed("c").columnNamed("d").cascade, True)
+
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,927 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.dal.syntax}
-"""
-
-from twext.enterprise.dal.model import Schema
-from twext.enterprise.dal.parseschema import addSQLToSchema
-from twext.enterprise.dal import syntax
-from twext.enterprise.dal.syntax import (
- SchemaSyntax, Select, Insert, Update, Delete, Lock, SQLFragment,
- TableMismatch, Parameter, Max, Len, NotEnoughValues
-, Savepoint, RollbackToSavepoint, ReleaseSavepoint, SavepointAction)
-
-from twext.enterprise.dal.syntax import Function
-
-from twext.enterprise.dal.syntax import FixedPlaceholder, NumericPlaceholder
-from twext.enterprise.ienterprise import POSTGRES_DIALECT, ORACLE_DIALECT
-from twext.enterprise.test.test_adbapi2 import ConnectionFactory
-from twext.enterprise.adbapi2 import ConnectionPool
-from twext.enterprise.test.test_adbapi2 import resultOf
-from twext.enterprise.test.test_adbapi2 import FakeThreadHolder
-from twisted.trial.unittest import TestCase
-
-
-
-class _FakeTransaction(object):
- """
- An L{IAsyncTransaction} that provides the relevant metadata for SQL
- generation.
- """
-
- def __init__(self, paramstyle):
- self.paramstyle = 'qmark'
-
-
-
-class GenerationTests(TestCase):
- """
- Tests for syntactic helpers to generate SQL queries.
- """
-
- def setUp(self):
- s = Schema(self.id())
- addSQLToSchema(schema=s, schemaData="""
- create sequence A_SEQ;
- create table FOO (BAR integer, BAZ varchar(255));
- create table BOZ (QUX integer, QUUX integer);
- create table OTHER (BAR integer,
- FOO_BAR integer not null);
- create table TEXTUAL (MYTEXT varchar(255));
- create table LEVELS (ACCESS integer, USERNAME varchar(255));
- """)
- self.schema = SchemaSyntax(s)
-
-
- def test_simplestSelect(self):
- """
- L{Select} generates a 'select' statement, by default, asking for all
- rows in a table.
- """
- self.assertEquals(Select(From=self.schema.FOO).toSQL(),
- SQLFragment("select * from FOO", []))
-
-
- def test_simpleWhereClause(self):
- """
- L{Select} generates a 'select' statement with a 'where' clause
- containing an expression.
- """
- self.assertEquals(Select(From=self.schema.FOO,
- Where=self.schema.FOO.BAR == 1).toSQL(),
- SQLFragment("select * from FOO where BAR = ?", [1]))
-
-
- def test_alternateMetadata(self):
- """
- L{Select} generates a 'select' statement with the specified placeholder
- syntax when explicitly given L{ConnectionMetadata} which specifies a
- placeholder.
- """
- self.assertEquals(Select(From=self.schema.FOO,
- Where=self.schema.FOO.BAR == 1).toSQL(
- FixedPlaceholder(POSTGRES_DIALECT, "$$")),
- SQLFragment("select * from FOO where BAR = $$", [1]))
-
-
- def test_columnComparison(self):
- """
- L{Select} generates a 'select' statement which compares columns.
- """
- self.assertEquals(Select(From=self.schema.FOO,
- Where=self.schema.FOO.BAR ==
- self.schema.FOO.BAZ).toSQL(),
- SQLFragment("select * from FOO where BAR = BAZ", []))
-
-
- def test_comparisonTestErrorPrevention(self):
- """
- The comparison object between columns raises an exception when compared
- for a truth value, so that code will not accidentally test for '==' and
- always get a true value.
- """
- def sampleComparison():
- if self.schema.FOO.BAR == self.schema.FOO.BAZ:
- return 'comparison should not succeed'
- self.assertRaises(ValueError, sampleComparison)
-
-
- def test_nullComparison(self):
- """
- Comparing a column with None results in the generation of an 'is null'
- or 'is not null' SQL statement.
- """
- self.assertEquals(Select(From=self.schema.FOO,
- Where=self.schema.FOO.BAR ==
- None).toSQL(),
- SQLFragment(
- "select * from FOO where BAR is null", []))
- self.assertEquals(Select(From=self.schema.FOO,
- Where=self.schema.FOO.BAR !=
- None).toSQL(),
- SQLFragment(
- "select * from FOO where BAR is not null", []))
-
-
- def test_compoundWhere(self):
- """
- L{Select.And} and L{Select.Or} will return compound columns.
- """
- self.assertEquals(
- Select(From=self.schema.FOO,
- Where=(self.schema.FOO.BAR < 2).Or(
- self.schema.FOO.BAR > 5)).toSQL(),
- SQLFragment("select * from FOO where BAR < ? or BAR > ?", [2, 5]))
-
-
- def test_orderBy(self):
- """
- L{Select}'s L{OrderBy} parameter generates an 'order by' clause for a
- 'select' statement.
- """
- self.assertEquals(
- Select(From=self.schema.FOO,
- OrderBy=self.schema.FOO.BAR).toSQL(),
- SQLFragment("select * from FOO order by BAR")
- )
-
-
- def test_orderByOrder(self):
- """
- L{Select}'s L{Ascending} parameter specifies an ascending/descending
- order for query results with an OrderBy clause.
- """
- self.assertEquals(
- Select(From=self.schema.FOO,
- OrderBy=self.schema.FOO.BAR,
- Ascending=False).toSQL(),
- SQLFragment("select * from FOO order by BAR desc")
- )
-
- self.assertEquals(
- Select(From=self.schema.FOO,
- OrderBy=self.schema.FOO.BAR,
- Ascending=True).toSQL(),
- SQLFragment("select * from FOO order by BAR asc")
- )
-
- self.assertEquals(
- Select(From=self.schema.FOO,
- OrderBy=[self.schema.FOO.BAR, self.schema.FOO.BAZ],
- Ascending=True).toSQL(),
- SQLFragment("select * from FOO order by BAR, BAZ asc")
- )
-
-
- def test_forUpdate(self):
- """
- L{Select}'s L{ForUpdate} parameter generates a 'for update' clause at
- the end of the query.
- """
- self.assertEquals(
- Select(From=self.schema.FOO, ForUpdate=True).toSQL(),
- SQLFragment("select * from FOO for update")
- )
-
-
- def test_groupBy(self):
- """
- L{Select}'s L{GroupBy} parameter generates a 'group by' clause for a
- 'select' statement.
- """
- self.assertEquals(
- Select(From=self.schema.FOO,
- GroupBy=self.schema.FOO.BAR).toSQL(),
- SQLFragment("select * from FOO group by BAR")
- )
-
-
- def test_groupByMulti(self):
- """
- L{Select}'s L{GroupBy} parameter can accept multiple columns in a list.
- """
- self.assertEquals(
- Select(From=self.schema.FOO,
- GroupBy=[self.schema.FOO.BAR,
- self.schema.FOO.BAZ]).toSQL(),
- SQLFragment("select * from FOO group by BAR, BAZ")
- )
-
-
- def test_joinClause(self):
- """
- A table's .join() method returns a join statement in a SELECT.
- """
- self.assertEquals(
- Select(From=self.schema.FOO.join(
- self.schema.BOZ, self.schema.FOO.BAR ==
- self.schema.BOZ.QUX)).toSQL(),
- SQLFragment("select * from FOO join BOZ on BAR = QUX", [])
- )
-
-
- def test_crossJoin(self):
- """
- A join with no clause specified will generate a cross join. (This is an
- explicit synonym for an implicit join: i.e. 'select * from FOO, BAR'.)
- """
- self.assertEquals(
- Select(From=self.schema.FOO.join(self.schema.BOZ)).toSQL(),
- SQLFragment("select * from FOO cross join BOZ")
- )
-
-
- def test_joinJoin(self):
- """
- L{Join.join} will result in a multi-table join.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR,
- self.schema.BOZ.QUX],
- From=self.schema.FOO
- .join(self.schema.BOZ).join(self.schema.OTHER)).toSQL(),
- SQLFragment(
- "select FOO.BAR, QUX from FOO "
- "cross join BOZ cross join OTHER")
- )
-
-
- def test_multiJoin(self):
- """
- L{Join.join} has the same signature as L{TableSyntax.join} and supports
- the same 'on' and 'type' arguments.
- """
-
- self.assertEquals(
- Select([self.schema.FOO.BAR],
- From=self.schema.FOO.join(
- self.schema.BOZ).join(
- self.schema.OTHER,
- self.schema.OTHER.BAR == self.schema.FOO.BAR,
- 'left outer')).toSQL(),
- SQLFragment(
- "select FOO.BAR from FOO cross join BOZ left outer join OTHER "
- "on OTHER.BAR = FOO.BAR")
- )
-
-
- def test_columnSelection(self):
- """
- If a column is specified by the argument to L{Select}, those will be
- output by the SQL statement rather than the all-columns wildcard.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR],
- From=self.schema.FOO).toSQL(),
- SQLFragment("select BAR from FOO")
- )
-
-
- def test_columnAliases(self):
- """
- When attributes are set on a L{TableSyntax}, they will be remembered as
- column aliases, and their alias names may be retrieved via the
- L{TableSyntax.aliases} method.
- """
- self.assertEquals(self.schema.FOO.aliases(), {})
- self.schema.FOO.ALIAS = self.schema.FOO.BAR
- # you comparing ColumnSyntax object results in a ColumnComparison, which
- # you can't test for truth.
- fixedForEquality = dict([(k, v.model) for k, v in
- self.schema.FOO.aliases().items()])
- self.assertEquals(fixedForEquality,
- {'ALIAS': self.schema.FOO.BAR.model})
- self.assertIdentical(self.schema.FOO.ALIAS.model,
- self.schema.FOO.BAR.model)
-
-
- def test_multiColumnSelection(self):
- """
- If multiple columns are specified by the argument to L{Select}, those
- will be output by the SQL statement rather than the all-columns
- wildcard.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAZ,
- self.schema.FOO.BAR],
- From=self.schema.FOO).toSQL(),
- SQLFragment("select BAZ, BAR from FOO")
- )
-
-
- def test_joinColumnSelection(self):
- """
- If multiple columns are specified by the argument to L{Select} that uses
- a L{TableSyntax.join}, those will be output by the SQL statement.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAZ,
- self.schema.BOZ.QUX],
- From=self.schema.FOO.join(self.schema.BOZ,
- self.schema.FOO.BAR ==
- self.schema.BOZ.QUX)).toSQL(),
- SQLFragment("select BAZ, QUX from FOO join BOZ on BAR = QUX")
- )
-
-
- def test_tableMismatch(self):
- """
- When a column in the 'columns' argument does not match the table from
- the 'From' argument, L{Select} raises a L{TableMismatch}.
- """
- self.assertRaises(TableMismatch, Select, [self.schema.BOZ.QUX],
- From=self.schema.FOO)
-
-
- def test_qualifyNames(self):
- """
- When two columns in the FROM clause requested from different tables have
- the same name, the emitted SQL should explicitly disambiguate them.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR,
- self.schema.OTHER.BAR],
- From=self.schema.FOO.join(self.schema.OTHER,
- self.schema.OTHER.FOO_BAR ==
- self.schema.FOO.BAR)).toSQL(),
- SQLFragment(
- "select FOO.BAR, OTHER.BAR from FOO "
- "join OTHER on FOO_BAR = FOO.BAR"))
-
-
- def test_bindParameters(self):
- """
- L{SQLFragment.bind} returns a copy of that L{SQLFragment} with the
- L{Parameter} objects in its parameter list replaced with the keyword
- arguments to C{bind}.
- """
-
- self.assertEquals(
- Select(From=self.schema.FOO,
- Where=(self.schema.FOO.BAR > Parameter("testing")).And(
- self.schema.FOO.BAZ < 7)).toSQL().bind(testing=173),
- SQLFragment("select * from FOO where BAR > ? and BAZ < ?",
- [173, 7]))
-
-
- def test_inSubSelect(self):
- """
- L{ColumnSyntax.In} returns a sub-expression using the SQL 'in' syntax.
- """
- wherein = (self.schema.FOO.BAR.In(
- Select([self.schema.BOZ.QUX], From=self.schema.BOZ)))
- self.assertEquals(
- Select(From=self.schema.FOO, Where=wherein).toSQL(),
- SQLFragment(
- "select * from FOO where BAR in (select QUX from BOZ)"))
-
-
- def test_max(self):
- """
- L{Max}C{(column)} produces an object in the 'columns' clause that
- renders the 'max' aggregate in SQL.
- """
- self.assertEquals(
- Select([Max(self.schema.BOZ.QUX)], From=self.schema.BOZ).toSQL(),
- SQLFragment(
- "select max(QUX) from BOZ"))
-
-
- def test_aggregateComparison(self):
- """
- L{Max}C{(column) > constant} produces an object in the 'columns' clause
- that renders a comparison to the 'max' aggregate in SQL.
- """
- self.assertEquals(Select([Max(self.schema.BOZ.QUX) + 12],
- From=self.schema.BOZ).toSQL(),
- SQLFragment("select max(QUX) + ? from BOZ", [12]))
-
-
- def test_multiColumnExpression(self):
- """
- Multiple columns may be provided in an expression in the 'columns'
- portion of a Select() statement. All arithmetic operators are
- supported.
- """
- self.assertEquals(
- Select([((self.schema.FOO.BAR + self.schema.FOO.BAZ) / 3) * 7],
- From=self.schema.FOO).toSQL(),
- SQLFragment("select ((BAR + BAZ) / ?) * ? from FOO", [3, 7])
- )
-
-
- def test_len(self):
- """
- Test for the 'Len' function for determining character length of a
- column. (Note that this should be updated to use different techniques
- as necessary in different databases.)
- """
- self.assertEquals(
- Select([Len(self.schema.TEXTUAL.MYTEXT)],
- From=self.schema.TEXTUAL).toSQL(),
- SQLFragment(
- "select character_length(MYTEXT) from TEXTUAL"))
-
-
- def test_insert(self):
- """
- L{Insert.toSQL} generates an 'insert' statement with all the relevant
- columns.
- """
- self.assertEquals(
- Insert({self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: 9}).toSQL(),
- SQLFragment("insert into FOO (BAR, BAZ) values (?, ?)", [23, 9]))
-
-
- def test_insertNotEnough(self):
- """
- L{Insert}'s constructor will raise L{NotEnoughValues} if columns have
- not been specified.
- """
- notEnough = self.assertRaises(
- NotEnoughValues, Insert, {self.schema.OTHER.BAR: 9}
- )
- self.assertEquals(str(notEnough), "Columns [FOO_BAR] required.")
-
-
- def test_insertReturning(self):
- """
- L{Insert}'s C{Return} argument will insert an SQL 'returning' clause.
- """
- self.assertEquals(
- Insert({self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: 9},
- Return=self.schema.FOO.BAR).toSQL(),
- SQLFragment(
- "insert into FOO (BAR, BAZ) values (?, ?) returning BAR",
- [23, 9])
- )
-
-
- def test_insertMultiReturn(self):
- """
- L{Insert}'s C{Return} argument can also be a C{tuple}, which will insert
- an SQL 'returning' clause with multiple columns.
- """
- self.assertEquals(
- Insert({self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: 9},
- Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ)).toSQL(),
- SQLFragment(
- "insert into FOO (BAR, BAZ) values (?, ?) returning BAR, BAZ",
- [23, 9])
- )
-
-
- def test_insertMultiReturnOracle(self):
- """
- In Oracle's SQL dialect, the 'returning' clause requires an 'into'
- clause indicating where to put the results, as they can't be simply
- relayed to the cursor. Further, additional bound variables are required
- to capture the output parameters.
- """
- self.assertEquals(
- Insert({self.schema.FOO.BAR: 40,
- self.schema.FOO.BAZ: 50},
- Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ)).toSQL(
- NumericPlaceholder(ORACLE_DIALECT)
- ),
- SQLFragment(
- "insert into FOO (BAR, BAZ) values (:1, :2) returning BAR, BAZ"
- " into :3, :4",
- [40, 50, Parameter("oracle_out_0"), Parameter("oracle_out_1")]
- )
- )
-
-
- def test_insertMultiReturnOnOracleTxn(self):
- """
- As described in L{test_insertMultiReturnOracle}, Oracle deals with
- 'returning' clauses by using out parameters. However, this is not quite
- enough, as the code needs to actually retrieve the values from the out
- parameters.
- """
- class FakeCXOracleModule(object):
- NUMBER = 'the NUMBER type'
- STRING = 'a string type (for varchars)'
- CLOB = 'the clob type. (for text)'
- TIMESTAMP = 'for timestamps!'
- self.patch(syntax, 'cx_Oracle', FakeCXOracleModule)
- factory = ConnectionFactory()
- pool = ConnectionPool(factory.connect, maxConnections=2,
- dialect=ORACLE_DIALECT,
- paramstyle='numeric')
- self.paused = False
- pool._createHolder = lambda : FakeThreadHolder(self)
- pool.startService()
- conn = pool.connection()
- i = Insert({self.schema.FOO.BAR: 40,
- self.schema.FOO.BAZ: 50},
- Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ))
- # See fake result generation in test_adbapi2.py.
- result = resultOf(i.on(conn))
- self.assertEquals(result, [[[300, 301]]])
- curvars = factory.connections[0].cursors[0].variables
- self.assertEquals(len(curvars), 2)
- self.assertEquals(curvars[0].type, FakeCXOracleModule.NUMBER)
- self.assertEquals(curvars[1].type, FakeCXOracleModule.STRING)
-
-
- def test_insertMismatch(self):
- """
- L{Insert} raises L{TableMismatch} if the columns specified aren't all
- from the same table.
- """
- self.assertRaises(
- TableMismatch,
- Insert, {self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: 9,
- self.schema.TEXTUAL.MYTEXT: 'hello'}
- )
-
-
- def test_quotingOnKeywordConflict(self):
- """
- 'access' is a keyword, so although our schema parser will leniently
- accept it, it must be quoted in any outgoing SQL. (This is only done in
- the Oracle dialect, because it isn't necessary in postgres, and
- idiosyncratic case-folding rules make it challenging to do it in both.)
- """
- self.assertEquals(
- Insert({self.schema.LEVELS.ACCESS: 1,
- self.schema.LEVELS.USERNAME:
- "hi"}).toSQL(FixedPlaceholder(ORACLE_DIALECT, "?")),
- SQLFragment(
- 'insert into LEVELS ("ACCESS", USERNAME) values (?, ?)',
- [1, "hi"])
- )
- self.assertEquals(
- Insert({self.schema.LEVELS.ACCESS: 1,
- self.schema.LEVELS.USERNAME:
- "hi"}).toSQL(FixedPlaceholder(POSTGRES_DIALECT, "?")),
- SQLFragment(
- 'insert into LEVELS (ACCESS, USERNAME) values (?, ?)',
- [1, "hi"])
- )
-
-
- def test_updateReturning(self):
- """
- L{update}'s C{Return} argument will update an SQL 'returning' clause.
- """
- self.assertEquals(
- Update({self.schema.FOO.BAR: 23},
- self.schema.FOO.BAZ == 43,
- Return=self.schema.FOO.BAR).toSQL(),
- SQLFragment(
- "update FOO set BAR = ? where BAZ = ? returning BAR",
- [23, 43])
- )
-
-
- def test_updateMismatch(self):
- """
- L{Update} raises L{TableMismatch} if the columns specified aren't all
- from the same table.
- """
- self.assertRaises(
- TableMismatch,
- Update, {self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: 9,
- self.schema.TEXTUAL.MYTEXT: 'hello'},
- Where=self.schema.FOO.BAZ == 9
- )
-
-
- def test_updateFunction(self):
- """
- L{Update} values may be L{FunctionInvocation}s, to update to computed
- values in the database.
- """
- sqlfunc = Function("hello")
- self.assertEquals(
- Update(
- {self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: sqlfunc()},
- Where=self.schema.FOO.BAZ == 9
- ).toSQL(),
- SQLFragment("update FOO set BAR = ?, BAZ = hello() "
- "where BAZ = ?", [23, 9])
- )
-
-
- def test_insertFunction(self):
- """
- L{Update} values may be L{FunctionInvocation}s, to update to computed
- values in the database.
- """
- sqlfunc = Function("hello")
- self.assertEquals(
- Insert(
- {self.schema.FOO.BAR: 23,
- self.schema.FOO.BAZ: sqlfunc()},
- ).toSQL(),
- SQLFragment("insert into FOO (BAR, BAZ) "
- "values (?, hello())", [23])
- )
-
-
- def test_deleteReturning(self):
- """
- L{Delete}'s C{Return} argument will delete an SQL 'returning' clause.
- """
- self.assertEquals(
- Delete(self.schema.FOO,
- Where=self.schema.FOO.BAR == 7,
- Return=self.schema.FOO.BAZ).toSQL(),
- SQLFragment(
- "delete from FOO where BAR = ? returning BAZ", [7])
- )
-
-
- def test_update(self):
- """
- L{Update.toSQL} generates an 'update' statement.
- """
- self.assertEquals(
- Update({self.schema.FOO.BAR: 4321},
- self.schema.FOO.BAZ == 1234).toSQL(),
- SQLFragment("update FOO set BAR = ? where BAZ = ?", [4321, 1234]))
-
-
- def test_delete(self):
- """
- L{Delete} generates an SQL 'delete' statement.
- """
- self.assertEquals(
- Delete(self.schema.FOO,
- Where=self.schema.FOO.BAR == 12).toSQL(),
- SQLFragment(
- "delete from FOO where BAR = ?", [12])
- )
-
-
- def test_lock(self):
- """
- L{Lock.exclusive} generates a ('lock table') statement, locking the
- table in the specified mode.
- """
- self.assertEquals(Lock.exclusive(self.schema.FOO).toSQL(),
- SQLFragment("lock table FOO in exclusive mode"))
-
-
- def test_savepoint(self):
- """
- L{Savepoint} generates a ('savepoint') statement.
- """
- self.assertEquals(Savepoint("test").toSQL(),
- SQLFragment("savepoint test"))
-
- def test_rollbacktosavepoint(self):
- """
- L{RollbackToSavepoint} generates a ('rollback to savepoint') statement.
- """
- self.assertEquals(RollbackToSavepoint("test").toSQL(),
- SQLFragment("rollback to savepoint test"))
-
- def test_releasesavepoint(self):
- """
- L{ReleaseSavepoint} generates a ('release savepoint') statement.
- """
- self.assertEquals(ReleaseSavepoint("test").toSQL(),
- SQLFragment("release savepoint test"))
-
- def test_savepointaction(self):
- """
- L{SavepointAction} generates a ('savepoint') statement.
- """
- self.assertEquals(SavepointAction("test")._name, "test")
-
- def test_limit(self):
- """
- A L{Select} object with a 'Limit' keyword parameter will generate
- a SQL statement with a 'limit' clause.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR],
- From=self.schema.FOO,
- Limit=123).toSQL(),
- SQLFragment(
- "select BAR from FOO limit ?", [123]))
-
-
- def test_having(self):
- """
- A L{Select} object with a 'Having' keyword parameter will generate
- a SQL statement with a 'having' expression.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR],
- From=self.schema.FOO,
- Having=Max(self.schema.FOO.BAZ) < 7).toSQL(),
- SQLFragment("select BAR from FOO having max(BAZ) < ?", [7])
- )
-
-
- def test_distinct(self):
- """
- A L{Select} object with a 'Disinct' keyword parameter with a value of
- C{True} will generate a SQL statement with a 'distinct' keyword
- preceding its list of columns.
- """
- self.assertEquals(
- Select([self.schema.FOO.BAR], From=self.schema.FOO,
- Distinct=True).toSQL(),
- SQLFragment("select distinct BAR from FOO")
- )
-
-
- def test_nextSequenceValue(self):
- """
- When a sequence is used as a value in an expression, it renders as the
- call to 'nextval' that will produce its next value.
- """
- self.assertEquals(
- Insert({self.schema.BOZ.QUX:
- self.schema.A_SEQ}).toSQL(),
- SQLFragment("insert into BOZ (QUX) values (nextval('A_SEQ'))", []))
-
-
- def test_nextSequenceValueOracle(self):
- """
- When a sequence is used as a value in an expression in the Oracle
- dialect, it renders as the 'nextval' attribute of the appropriate
- sequence.
- """
- self.assertEquals(
- Insert({self.schema.BOZ.QUX:
- self.schema.A_SEQ}).toSQL(
- FixedPlaceholder(ORACLE_DIALECT, "?")),
- SQLFragment("insert into BOZ (QUX) values (A_SEQ.nextval)", []))
-
-
- def test_nextSequenceDefaultImplicitExplicitOracle(self):
- """
- In Oracle's dialect, sequence defaults can't be implemented without
- using triggers, so instead we just explicitly always include the
- sequence default value.
- """
- addSQLToSchema(
- schema=self.schema.model, schemaData=
- "create table DFLTR (a varchar(255), "
- "b integer default nextval('A_SEQ'));"
- )
- self.assertEquals(
- Insert({self.schema.DFLTR.a: 'hello'}).toSQL(
- FixedPlaceholder(ORACLE_DIALECT, "?")
- ),
- SQLFragment("insert into DFLTR (a, b) values "
- "(?, A_SEQ.nextval)", ['hello']),
- )
- # Should be the same if it's explicitly specified.
- self.assertEquals(
- Insert({self.schema.DFLTR.a: 'hello',
- self.schema.DFLTR.b: self.schema.A_SEQ}).toSQL(
- FixedPlaceholder(ORACLE_DIALECT, "?")
- ),
- SQLFragment("insert into DFLTR (a, b) values "
- "(?, A_SEQ.nextval)", ['hello']),
- )
-
-
- def test_numericParams(self):
- """
- An L{IAsyncTransaction} with the 'numeric' paramstyle attribute will
- cause statements to be generated with parameters in the style of :1 :2
- :3, as per the DB-API.
- """
- stmts = []
- class FakeOracleTxn(object):
- def execSQL(self, text, params, exc):
- stmts.append((text, params))
- dialect = ORACLE_DIALECT
- paramstyle = 'numeric'
- Select([self.schema.FOO.BAR],
- From=self.schema.FOO,
- Where=(self.schema.FOO.BAR == 7).And(
- self.schema.FOO.BAZ == 9)
- ).on(FakeOracleTxn())
- self.assertEquals(
- stmts, [("select BAR from FOO where BAR = :1 and BAZ = :2",
- [7, 9])]
- )
-
-
- def test_nestedLogicalExpressions(self):
- """
- Make sure that logical operator precedence inserts proper parenthesis
- when needed. e.g. 'a.And(b.Or(c))' needs to be 'a and (b or c)' not 'a
- and b or c'.
- """
- self.assertEquals(
- Select(
- From=self.schema.FOO,
- Where=(self.schema.FOO.BAR != 7).
- And(self.schema.FOO.BAZ != 8).
- And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
- ).toSQL(),
- SQLFragment("select * from FOO where BAR != ? and BAZ != ? and "
- "(BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
-
- self.assertEquals(
- Select(
- From=self.schema.FOO,
- Where=(self.schema.FOO.BAR != 7).
- Or(self.schema.FOO.BAZ != 8).
- Or((self.schema.FOO.BAR == 8).And(self.schema.FOO.BAZ == 0))
- ).toSQL(),
- SQLFragment("select * from FOO where BAR != ? or BAZ != ? or "
- "BAR = ? and BAZ = ?", [7, 8, 8, 0]))
-
- self.assertEquals(
- Select(
- From=self.schema.FOO,
- Where=(self.schema.FOO.BAR != 7).
- Or(self.schema.FOO.BAZ != 8).
- And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
- ).toSQL(),
- SQLFragment("select * from FOO where (BAR != ? or BAZ != ?) and "
- "(BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
-
-
- def test_updateWithNULL(self):
- """
- As per the DB-API specification, "SQL NULL values are represented by the
- Python None singleton on input and output." When a C{None} is provided
- as a value to an L{Update}, it will be relayed to the database as a
- parameter.
- """
- self.assertEquals(
- Update({self.schema.BOZ.QUX: None},
- Where=self.schema.BOZ.QUX == 7).toSQL(),
- SQLFragment("update BOZ set QUX = ? where QUX = ?", [None, 7])
- )
-
-
- def test_subSelectComparison(self):
- """
- A comparison of a column to a sub-select in a where clause will result
- in a parenthetical 'Where' clause.
- """
- self.assertEquals(
- Update(
- {self.schema.BOZ.QUX: 9},
- Where=self.schema.BOZ.QUX ==
- Select([self.schema.FOO.BAR], From=self.schema.FOO,
- Where=self.schema.FOO.BAZ == 12)).toSQL(),
- SQLFragment(
- # NOTE: it's very important that the comparison _always_ go in
- # this order (column from the UPDATE first, inner SELECT second)
- # as the other order will be considered a syntax error.
- "update BOZ set QUX = ? where QUX = ("
- "select BAR from FOO where BAZ = ?)", [9, 12]
- )
- )
-
-
- def test_tupleComparison(self):
- """
- A L{Tuple} allows for simultaneous comparison of multiple values in a
- C{Where} clause. This feature is particularly useful when issuing an
- L{Update} or L{Delete}, where the comparison is with values from a
- subselect. (A L{Tuple} will be automatically generated upon comparison
- to a C{tuple} or C{list}.)
- """
- self.assertEquals(
- Update(
- {self.schema.BOZ.QUX: 1},
- Where=(self.schema.BOZ.QUX, self.schema.BOZ.QUUX) ==
- Select([self.schema.FOO.BAR, self.schema.FOO.BAZ],
- From=self.schema.FOO,
- Where=self.schema.FOO.BAZ == 2)).toSQL(),
- SQLFragment(
- # NOTE: it's very important that the comparison _always_ go in
- # this order (tuple of columns from the UPDATE first, inner
- # SELECT second) as the other order will be considered a syntax
- # error.
- "update BOZ set QUX = ? where (QUX, QUUX) = ("
- "select BAR, BAZ from FOO where BAZ = ?)", [1, 2]
- )
- )
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py (from rev 7192, CalendarServer/trunk/twext/enterprise/dal/test/test_sqlsyntax.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/dal/test/test_sqlsyntax.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,927 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.dal.syntax}
+"""
+
+from twext.enterprise.dal.model import Schema
+from twext.enterprise.dal.parseschema import addSQLToSchema
+from twext.enterprise.dal import syntax
+from twext.enterprise.dal.syntax import (
+ SchemaSyntax, Select, Insert, Update, Delete, Lock, SQLFragment,
+ TableMismatch, Parameter, Max, Len, NotEnoughValues
+, Savepoint, RollbackToSavepoint, ReleaseSavepoint, SavepointAction)
+
+from twext.enterprise.dal.syntax import Function
+
+from twext.enterprise.dal.syntax import FixedPlaceholder, NumericPlaceholder
+from twext.enterprise.ienterprise import POSTGRES_DIALECT, ORACLE_DIALECT
+from twext.enterprise.test.test_adbapi2 import ConnectionFactory
+from twext.enterprise.adbapi2 import ConnectionPool
+from twext.enterprise.test.test_adbapi2 import resultOf
+from twext.enterprise.test.test_adbapi2 import FakeThreadHolder
+from twisted.trial.unittest import TestCase
+
+
+
+class _FakeTransaction(object):
+ """
+ An L{IAsyncTransaction} that provides the relevant metadata for SQL
+ generation.
+ """
+
+ def __init__(self, paramstyle):
+ self.paramstyle = 'qmark'
+
+
+
+class GenerationTests(TestCase):
+ """
+ Tests for syntactic helpers to generate SQL queries.
+ """
+
+ def setUp(self):
+ s = Schema(self.id())
+ addSQLToSchema(schema=s, schemaData="""
+ create sequence A_SEQ;
+ create table FOO (BAR integer, BAZ varchar(255));
+ create table BOZ (QUX integer, QUUX integer);
+ create table OTHER (BAR integer,
+ FOO_BAR integer not null);
+ create table TEXTUAL (MYTEXT varchar(255));
+ create table LEVELS (ACCESS integer, USERNAME varchar(255));
+ """)
+ self.schema = SchemaSyntax(s)
+
+
+ def test_simplestSelect(self):
+ """
+ L{Select} generates a 'select' statement, by default, asking for all
+ rows in a table.
+ """
+ self.assertEquals(Select(From=self.schema.FOO).toSQL(),
+ SQLFragment("select * from FOO", []))
+
+
+ def test_simpleWhereClause(self):
+ """
+ L{Select} generates a 'select' statement with a 'where' clause
+ containing an expression.
+ """
+ self.assertEquals(Select(From=self.schema.FOO,
+ Where=self.schema.FOO.BAR == 1).toSQL(),
+ SQLFragment("select * from FOO where BAR = ?", [1]))
+
+
+ def test_alternateMetadata(self):
+ """
+ L{Select} generates a 'select' statement with the specified placeholder
+ syntax when explicitly given L{ConnectionMetadata} which specifies a
+ placeholder.
+ """
+ self.assertEquals(Select(From=self.schema.FOO,
+ Where=self.schema.FOO.BAR == 1).toSQL(
+ FixedPlaceholder(POSTGRES_DIALECT, "$$")),
+ SQLFragment("select * from FOO where BAR = $$", [1]))
+
+
+ def test_columnComparison(self):
+ """
+ L{Select} generates a 'select' statement which compares columns.
+ """
+ self.assertEquals(Select(From=self.schema.FOO,
+ Where=self.schema.FOO.BAR ==
+ self.schema.FOO.BAZ).toSQL(),
+ SQLFragment("select * from FOO where BAR = BAZ", []))
+
+
+ def test_comparisonTestErrorPrevention(self):
+ """
+ The comparison object between columns raises an exception when compared
+ for a truth value, so that code will not accidentally test for '==' and
+ always get a true value.
+ """
+ def sampleComparison():
+ if self.schema.FOO.BAR == self.schema.FOO.BAZ:
+ return 'comparison should not succeed'
+ self.assertRaises(ValueError, sampleComparison)
+
+
+ def test_nullComparison(self):
+ """
+ Comparing a column with None results in the generation of an 'is null'
+ or 'is not null' SQL statement.
+ """
+ self.assertEquals(Select(From=self.schema.FOO,
+ Where=self.schema.FOO.BAR ==
+ None).toSQL(),
+ SQLFragment(
+ "select * from FOO where BAR is null", []))
+ self.assertEquals(Select(From=self.schema.FOO,
+ Where=self.schema.FOO.BAR !=
+ None).toSQL(),
+ SQLFragment(
+ "select * from FOO where BAR is not null", []))
+
+
+ def test_compoundWhere(self):
+ """
+ L{Select.And} and L{Select.Or} will return compound columns.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR < 2).Or(
+ self.schema.FOO.BAR > 5)).toSQL(),
+ SQLFragment("select * from FOO where BAR < ? or BAR > ?", [2, 5]))
+
+
+ def test_orderBy(self):
+ """
+ L{Select}'s L{OrderBy} parameter generates an 'order by' clause for a
+ 'select' statement.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ OrderBy=self.schema.FOO.BAR).toSQL(),
+ SQLFragment("select * from FOO order by BAR")
+ )
+
+
+ def test_orderByOrder(self):
+ """
+ L{Select}'s L{Ascending} parameter specifies an ascending/descending
+ order for query results with an OrderBy clause.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ OrderBy=self.schema.FOO.BAR,
+ Ascending=False).toSQL(),
+ SQLFragment("select * from FOO order by BAR desc")
+ )
+
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ OrderBy=self.schema.FOO.BAR,
+ Ascending=True).toSQL(),
+ SQLFragment("select * from FOO order by BAR asc")
+ )
+
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ OrderBy=[self.schema.FOO.BAR, self.schema.FOO.BAZ],
+ Ascending=True).toSQL(),
+ SQLFragment("select * from FOO order by BAR, BAZ asc")
+ )
+
+
+ def test_forUpdate(self):
+ """
+ L{Select}'s L{ForUpdate} parameter generates a 'for update' clause at
+ the end of the query.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO, ForUpdate=True).toSQL(),
+ SQLFragment("select * from FOO for update")
+ )
+
+
+ def test_groupBy(self):
+ """
+ L{Select}'s L{GroupBy} parameter generates a 'group by' clause for a
+ 'select' statement.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ GroupBy=self.schema.FOO.BAR).toSQL(),
+ SQLFragment("select * from FOO group by BAR")
+ )
+
+
+ def test_groupByMulti(self):
+ """
+ L{Select}'s L{GroupBy} parameter can accept multiple columns in a list.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ GroupBy=[self.schema.FOO.BAR,
+ self.schema.FOO.BAZ]).toSQL(),
+ SQLFragment("select * from FOO group by BAR, BAZ")
+ )
+
+
+ def test_joinClause(self):
+ """
+ A table's .join() method returns a join statement in a SELECT.
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO.join(
+ self.schema.BOZ, self.schema.FOO.BAR ==
+ self.schema.BOZ.QUX)).toSQL(),
+ SQLFragment("select * from FOO join BOZ on BAR = QUX", [])
+ )
+
+
+ def test_crossJoin(self):
+ """
+ A join with no clause specified will generate a cross join. (This is an
+ explicit synonym for an implicit join: i.e. 'select * from FOO, BAR'.)
+ """
+ self.assertEquals(
+ Select(From=self.schema.FOO.join(self.schema.BOZ)).toSQL(),
+ SQLFragment("select * from FOO cross join BOZ")
+ )
+
+
+ def test_joinJoin(self):
+ """
+ L{Join.join} will result in a multi-table join.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR,
+ self.schema.BOZ.QUX],
+ From=self.schema.FOO
+ .join(self.schema.BOZ).join(self.schema.OTHER)).toSQL(),
+ SQLFragment(
+ "select FOO.BAR, QUX from FOO "
+ "cross join BOZ cross join OTHER")
+ )
+
+
+ def test_multiJoin(self):
+ """
+ L{Join.join} has the same signature as L{TableSyntax.join} and supports
+ the same 'on' and 'type' arguments.
+ """
+
+ self.assertEquals(
+ Select([self.schema.FOO.BAR],
+ From=self.schema.FOO.join(
+ self.schema.BOZ).join(
+ self.schema.OTHER,
+ self.schema.OTHER.BAR == self.schema.FOO.BAR,
+ 'left outer')).toSQL(),
+ SQLFragment(
+ "select FOO.BAR from FOO cross join BOZ left outer join OTHER "
+ "on OTHER.BAR = FOO.BAR")
+ )
+
+
+ def test_columnSelection(self):
+ """
+ If a column is specified by the argument to L{Select}, those will be
+ output by the SQL statement rather than the all-columns wildcard.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR],
+ From=self.schema.FOO).toSQL(),
+ SQLFragment("select BAR from FOO")
+ )
+
+
+ def test_columnAliases(self):
+ """
+ When attributes are set on a L{TableSyntax}, they will be remembered as
+ column aliases, and their alias names may be retrieved via the
+ L{TableSyntax.aliases} method.
+ """
+ self.assertEquals(self.schema.FOO.aliases(), {})
+ self.schema.FOO.ALIAS = self.schema.FOO.BAR
+ # you comparing ColumnSyntax object results in a ColumnComparison, which
+ # you can't test for truth.
+ fixedForEquality = dict([(k, v.model) for k, v in
+ self.schema.FOO.aliases().items()])
+ self.assertEquals(fixedForEquality,
+ {'ALIAS': self.schema.FOO.BAR.model})
+ self.assertIdentical(self.schema.FOO.ALIAS.model,
+ self.schema.FOO.BAR.model)
+
+
+ def test_multiColumnSelection(self):
+ """
+ If multiple columns are specified by the argument to L{Select}, those
+ will be output by the SQL statement rather than the all-columns
+ wildcard.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAZ,
+ self.schema.FOO.BAR],
+ From=self.schema.FOO).toSQL(),
+ SQLFragment("select BAZ, BAR from FOO")
+ )
+
+
+ def test_joinColumnSelection(self):
+ """
+ If multiple columns are specified by the argument to L{Select} that uses
+ a L{TableSyntax.join}, those will be output by the SQL statement.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAZ,
+ self.schema.BOZ.QUX],
+ From=self.schema.FOO.join(self.schema.BOZ,
+ self.schema.FOO.BAR ==
+ self.schema.BOZ.QUX)).toSQL(),
+ SQLFragment("select BAZ, QUX from FOO join BOZ on BAR = QUX")
+ )
+
+
+ def test_tableMismatch(self):
+ """
+ When a column in the 'columns' argument does not match the table from
+ the 'From' argument, L{Select} raises a L{TableMismatch}.
+ """
+ self.assertRaises(TableMismatch, Select, [self.schema.BOZ.QUX],
+ From=self.schema.FOO)
+
+
+ def test_qualifyNames(self):
+ """
+ When two columns in the FROM clause requested from different tables have
+ the same name, the emitted SQL should explicitly disambiguate them.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR,
+ self.schema.OTHER.BAR],
+ From=self.schema.FOO.join(self.schema.OTHER,
+ self.schema.OTHER.FOO_BAR ==
+ self.schema.FOO.BAR)).toSQL(),
+ SQLFragment(
+ "select FOO.BAR, OTHER.BAR from FOO "
+ "join OTHER on FOO_BAR = FOO.BAR"))
+
+
+ def test_bindParameters(self):
+ """
+ L{SQLFragment.bind} returns a copy of that L{SQLFragment} with the
+ L{Parameter} objects in its parameter list replaced with the keyword
+ arguments to C{bind}.
+ """
+
+ self.assertEquals(
+ Select(From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR > Parameter("testing")).And(
+ self.schema.FOO.BAZ < 7)).toSQL().bind(testing=173),
+ SQLFragment("select * from FOO where BAR > ? and BAZ < ?",
+ [173, 7]))
+
+
+ def test_inSubSelect(self):
+ """
+ L{ColumnSyntax.In} returns a sub-expression using the SQL 'in' syntax.
+ """
+ wherein = (self.schema.FOO.BAR.In(
+ Select([self.schema.BOZ.QUX], From=self.schema.BOZ)))
+ self.assertEquals(
+ Select(From=self.schema.FOO, Where=wherein).toSQL(),
+ SQLFragment(
+ "select * from FOO where BAR in (select QUX from BOZ)"))
+
+
+ def test_max(self):
+ """
+ L{Max}C{(column)} produces an object in the 'columns' clause that
+ renders the 'max' aggregate in SQL.
+ """
+ self.assertEquals(
+ Select([Max(self.schema.BOZ.QUX)], From=self.schema.BOZ).toSQL(),
+ SQLFragment(
+ "select max(QUX) from BOZ"))
+
+
+ def test_aggregateComparison(self):
+ """
+ L{Max}C{(column) > constant} produces an object in the 'columns' clause
+ that renders a comparison to the 'max' aggregate in SQL.
+ """
+ self.assertEquals(Select([Max(self.schema.BOZ.QUX) + 12],
+ From=self.schema.BOZ).toSQL(),
+ SQLFragment("select max(QUX) + ? from BOZ", [12]))
+
+
+ def test_multiColumnExpression(self):
+ """
+ Multiple columns may be provided in an expression in the 'columns'
+ portion of a Select() statement. All arithmetic operators are
+ supported.
+ """
+ self.assertEquals(
+ Select([((self.schema.FOO.BAR + self.schema.FOO.BAZ) / 3) * 7],
+ From=self.schema.FOO).toSQL(),
+ SQLFragment("select ((BAR + BAZ) / ?) * ? from FOO", [3, 7])
+ )
+
+
+ def test_len(self):
+ """
+ Test for the 'Len' function for determining character length of a
+ column. (Note that this should be updated to use different techniques
+ as necessary in different databases.)
+ """
+ self.assertEquals(
+ Select([Len(self.schema.TEXTUAL.MYTEXT)],
+ From=self.schema.TEXTUAL).toSQL(),
+ SQLFragment(
+ "select character_length(MYTEXT) from TEXTUAL"))
+
+
+ def test_insert(self):
+ """
+ L{Insert.toSQL} generates an 'insert' statement with all the relevant
+ columns.
+ """
+ self.assertEquals(
+ Insert({self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: 9}).toSQL(),
+ SQLFragment("insert into FOO (BAR, BAZ) values (?, ?)", [23, 9]))
+
+
+ def test_insertNotEnough(self):
+ """
+ L{Insert}'s constructor will raise L{NotEnoughValues} if columns have
+ not been specified.
+ """
+ notEnough = self.assertRaises(
+ NotEnoughValues, Insert, {self.schema.OTHER.BAR: 9}
+ )
+ self.assertEquals(str(notEnough), "Columns [FOO_BAR] required.")
+
+
+ def test_insertReturning(self):
+ """
+ L{Insert}'s C{Return} argument will insert an SQL 'returning' clause.
+ """
+ self.assertEquals(
+ Insert({self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: 9},
+ Return=self.schema.FOO.BAR).toSQL(),
+ SQLFragment(
+ "insert into FOO (BAR, BAZ) values (?, ?) returning BAR",
+ [23, 9])
+ )
+
+
+ def test_insertMultiReturn(self):
+ """
+ L{Insert}'s C{Return} argument can also be a C{tuple}, which will insert
+ an SQL 'returning' clause with multiple columns.
+ """
+ self.assertEquals(
+ Insert({self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: 9},
+ Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ)).toSQL(),
+ SQLFragment(
+ "insert into FOO (BAR, BAZ) values (?, ?) returning BAR, BAZ",
+ [23, 9])
+ )
+
+
+ def test_insertMultiReturnOracle(self):
+ """
+ In Oracle's SQL dialect, the 'returning' clause requires an 'into'
+ clause indicating where to put the results, as they can't be simply
+ relayed to the cursor. Further, additional bound variables are required
+ to capture the output parameters.
+ """
+ self.assertEquals(
+ Insert({self.schema.FOO.BAR: 40,
+ self.schema.FOO.BAZ: 50},
+ Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ)).toSQL(
+ NumericPlaceholder(ORACLE_DIALECT)
+ ),
+ SQLFragment(
+ "insert into FOO (BAR, BAZ) values (:1, :2) returning BAR, BAZ"
+ " into :3, :4",
+ [40, 50, Parameter("oracle_out_0"), Parameter("oracle_out_1")]
+ )
+ )
+
+
+ def test_insertMultiReturnOnOracleTxn(self):
+ """
+ As described in L{test_insertMultiReturnOracle}, Oracle deals with
+ 'returning' clauses by using out parameters. However, this is not quite
+ enough, as the code needs to actually retrieve the values from the out
+ parameters.
+ """
+ class FakeCXOracleModule(object):
+ NUMBER = 'the NUMBER type'
+ STRING = 'a string type (for varchars)'
+ CLOB = 'the clob type. (for text)'
+ TIMESTAMP = 'for timestamps!'
+ self.patch(syntax, 'cx_Oracle', FakeCXOracleModule)
+ factory = ConnectionFactory()
+ pool = ConnectionPool(factory.connect, maxConnections=2,
+ dialect=ORACLE_DIALECT,
+ paramstyle='numeric')
+ self.paused = False
+ pool._createHolder = lambda : FakeThreadHolder(self)
+ pool.startService()
+ conn = pool.connection()
+ i = Insert({self.schema.FOO.BAR: 40,
+ self.schema.FOO.BAZ: 50},
+ Return=(self.schema.FOO.BAR, self.schema.FOO.BAZ))
+ # See fake result generation in test_adbapi2.py.
+ result = resultOf(i.on(conn))
+ self.assertEquals(result, [[[300, 301]]])
+ curvars = factory.connections[0].cursors[0].variables
+ self.assertEquals(len(curvars), 2)
+ self.assertEquals(curvars[0].type, FakeCXOracleModule.NUMBER)
+ self.assertEquals(curvars[1].type, FakeCXOracleModule.STRING)
+
+
+ def test_insertMismatch(self):
+ """
+ L{Insert} raises L{TableMismatch} if the columns specified aren't all
+ from the same table.
+ """
+ self.assertRaises(
+ TableMismatch,
+ Insert, {self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: 9,
+ self.schema.TEXTUAL.MYTEXT: 'hello'}
+ )
+
+
+ def test_quotingOnKeywordConflict(self):
+ """
+ 'access' is a keyword, so although our schema parser will leniently
+ accept it, it must be quoted in any outgoing SQL. (This is only done in
+ the Oracle dialect, because it isn't necessary in postgres, and
+ idiosyncratic case-folding rules make it challenging to do it in both.)
+ """
+ self.assertEquals(
+ Insert({self.schema.LEVELS.ACCESS: 1,
+ self.schema.LEVELS.USERNAME:
+ "hi"}).toSQL(FixedPlaceholder(ORACLE_DIALECT, "?")),
+ SQLFragment(
+ 'insert into LEVELS ("ACCESS", USERNAME) values (?, ?)',
+ [1, "hi"])
+ )
+ self.assertEquals(
+ Insert({self.schema.LEVELS.ACCESS: 1,
+ self.schema.LEVELS.USERNAME:
+ "hi"}).toSQL(FixedPlaceholder(POSTGRES_DIALECT, "?")),
+ SQLFragment(
+ 'insert into LEVELS (ACCESS, USERNAME) values (?, ?)',
+ [1, "hi"])
+ )
+
+
+ def test_updateReturning(self):
+ """
+ L{update}'s C{Return} argument will update an SQL 'returning' clause.
+ """
+ self.assertEquals(
+ Update({self.schema.FOO.BAR: 23},
+ self.schema.FOO.BAZ == 43,
+ Return=self.schema.FOO.BAR).toSQL(),
+ SQLFragment(
+ "update FOO set BAR = ? where BAZ = ? returning BAR",
+ [23, 43])
+ )
+
+
+ def test_updateMismatch(self):
+ """
+ L{Update} raises L{TableMismatch} if the columns specified aren't all
+ from the same table.
+ """
+ self.assertRaises(
+ TableMismatch,
+ Update, {self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: 9,
+ self.schema.TEXTUAL.MYTEXT: 'hello'},
+ Where=self.schema.FOO.BAZ == 9
+ )
+
+
+ def test_updateFunction(self):
+ """
+ L{Update} values may be L{FunctionInvocation}s, to update to computed
+ values in the database.
+ """
+ sqlfunc = Function("hello")
+ self.assertEquals(
+ Update(
+ {self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: sqlfunc()},
+ Where=self.schema.FOO.BAZ == 9
+ ).toSQL(),
+ SQLFragment("update FOO set BAR = ?, BAZ = hello() "
+ "where BAZ = ?", [23, 9])
+ )
+
+
+ def test_insertFunction(self):
+ """
+ L{Update} values may be L{FunctionInvocation}s, to update to computed
+ values in the database.
+ """
+ sqlfunc = Function("hello")
+ self.assertEquals(
+ Insert(
+ {self.schema.FOO.BAR: 23,
+ self.schema.FOO.BAZ: sqlfunc()},
+ ).toSQL(),
+ SQLFragment("insert into FOO (BAR, BAZ) "
+ "values (?, hello())", [23])
+ )
+
+
+ def test_deleteReturning(self):
+ """
+ L{Delete}'s C{Return} argument will delete an SQL 'returning' clause.
+ """
+ self.assertEquals(
+ Delete(self.schema.FOO,
+ Where=self.schema.FOO.BAR == 7,
+ Return=self.schema.FOO.BAZ).toSQL(),
+ SQLFragment(
+ "delete from FOO where BAR = ? returning BAZ", [7])
+ )
+
+
+ def test_update(self):
+ """
+ L{Update.toSQL} generates an 'update' statement.
+ """
+ self.assertEquals(
+ Update({self.schema.FOO.BAR: 4321},
+ self.schema.FOO.BAZ == 1234).toSQL(),
+ SQLFragment("update FOO set BAR = ? where BAZ = ?", [4321, 1234]))
+
+
+ def test_delete(self):
+ """
+ L{Delete} generates an SQL 'delete' statement.
+ """
+ self.assertEquals(
+ Delete(self.schema.FOO,
+ Where=self.schema.FOO.BAR == 12).toSQL(),
+ SQLFragment(
+ "delete from FOO where BAR = ?", [12])
+ )
+
+
+ def test_lock(self):
+ """
+ L{Lock.exclusive} generates a ('lock table') statement, locking the
+ table in the specified mode.
+ """
+ self.assertEquals(Lock.exclusive(self.schema.FOO).toSQL(),
+ SQLFragment("lock table FOO in exclusive mode"))
+
+
+ def test_savepoint(self):
+ """
+ L{Savepoint} generates a ('savepoint') statement.
+ """
+ self.assertEquals(Savepoint("test").toSQL(),
+ SQLFragment("savepoint test"))
+
+ def test_rollbacktosavepoint(self):
+ """
+ L{RollbackToSavepoint} generates a ('rollback to savepoint') statement.
+ """
+ self.assertEquals(RollbackToSavepoint("test").toSQL(),
+ SQLFragment("rollback to savepoint test"))
+
+ def test_releasesavepoint(self):
+ """
+ L{ReleaseSavepoint} generates a ('release savepoint') statement.
+ """
+ self.assertEquals(ReleaseSavepoint("test").toSQL(),
+ SQLFragment("release savepoint test"))
+
+ def test_savepointaction(self):
+ """
+ L{SavepointAction} generates a ('savepoint') statement.
+ """
+ self.assertEquals(SavepointAction("test")._name, "test")
+
+ def test_limit(self):
+ """
+ A L{Select} object with a 'Limit' keyword parameter will generate
+ a SQL statement with a 'limit' clause.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR],
+ From=self.schema.FOO,
+ Limit=123).toSQL(),
+ SQLFragment(
+ "select BAR from FOO limit ?", [123]))
+
+
+ def test_having(self):
+ """
+ A L{Select} object with a 'Having' keyword parameter will generate
+ a SQL statement with a 'having' expression.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR],
+ From=self.schema.FOO,
+ Having=Max(self.schema.FOO.BAZ) < 7).toSQL(),
+ SQLFragment("select BAR from FOO having max(BAZ) < ?", [7])
+ )
+
+
+ def test_distinct(self):
+ """
+ A L{Select} object with a 'Disinct' keyword parameter with a value of
+ C{True} will generate a SQL statement with a 'distinct' keyword
+ preceding its list of columns.
+ """
+ self.assertEquals(
+ Select([self.schema.FOO.BAR], From=self.schema.FOO,
+ Distinct=True).toSQL(),
+ SQLFragment("select distinct BAR from FOO")
+ )
+
+
+ def test_nextSequenceValue(self):
+ """
+ When a sequence is used as a value in an expression, it renders as the
+ call to 'nextval' that will produce its next value.
+ """
+ self.assertEquals(
+ Insert({self.schema.BOZ.QUX:
+ self.schema.A_SEQ}).toSQL(),
+ SQLFragment("insert into BOZ (QUX) values (nextval('A_SEQ'))", []))
+
+
+ def test_nextSequenceValueOracle(self):
+ """
+ When a sequence is used as a value in an expression in the Oracle
+ dialect, it renders as the 'nextval' attribute of the appropriate
+ sequence.
+ """
+ self.assertEquals(
+ Insert({self.schema.BOZ.QUX:
+ self.schema.A_SEQ}).toSQL(
+ FixedPlaceholder(ORACLE_DIALECT, "?")),
+ SQLFragment("insert into BOZ (QUX) values (A_SEQ.nextval)", []))
+
+
+ def test_nextSequenceDefaultImplicitExplicitOracle(self):
+ """
+ In Oracle's dialect, sequence defaults can't be implemented without
+ using triggers, so instead we just explicitly always include the
+ sequence default value.
+ """
+ addSQLToSchema(
+ schema=self.schema.model, schemaData=
+ "create table DFLTR (a varchar(255), "
+ "b integer default nextval('A_SEQ'));"
+ )
+ self.assertEquals(
+ Insert({self.schema.DFLTR.a: 'hello'}).toSQL(
+ FixedPlaceholder(ORACLE_DIALECT, "?")
+ ),
+ SQLFragment("insert into DFLTR (a, b) values "
+ "(?, A_SEQ.nextval)", ['hello']),
+ )
+ # Should be the same if it's explicitly specified.
+ self.assertEquals(
+ Insert({self.schema.DFLTR.a: 'hello',
+ self.schema.DFLTR.b: self.schema.A_SEQ}).toSQL(
+ FixedPlaceholder(ORACLE_DIALECT, "?")
+ ),
+ SQLFragment("insert into DFLTR (a, b) values "
+ "(?, A_SEQ.nextval)", ['hello']),
+ )
+
+
+ def test_numericParams(self):
+ """
+ An L{IAsyncTransaction} with the 'numeric' paramstyle attribute will
+ cause statements to be generated with parameters in the style of :1 :2
+ :3, as per the DB-API.
+ """
+ stmts = []
+ class FakeOracleTxn(object):
+ def execSQL(self, text, params, exc):
+ stmts.append((text, params))
+ dialect = ORACLE_DIALECT
+ paramstyle = 'numeric'
+ Select([self.schema.FOO.BAR],
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR == 7).And(
+ self.schema.FOO.BAZ == 9)
+ ).on(FakeOracleTxn())
+ self.assertEquals(
+ stmts, [("select BAR from FOO where BAR = :1 and BAZ = :2",
+ [7, 9])]
+ )
+
+
+ def test_nestedLogicalExpressions(self):
+ """
+ Make sure that logical operator precedence inserts proper parenthesis
+ when needed. e.g. 'a.And(b.Or(c))' needs to be 'a and (b or c)' not 'a
+ and b or c'.
+ """
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ And(self.schema.FOO.BAZ != 8).
+ And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where BAR != ? and BAZ != ? and "
+ "(BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
+
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ Or(self.schema.FOO.BAZ != 8).
+ Or((self.schema.FOO.BAR == 8).And(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where BAR != ? or BAZ != ? or "
+ "BAR = ? and BAZ = ?", [7, 8, 8, 0]))
+
+ self.assertEquals(
+ Select(
+ From=self.schema.FOO,
+ Where=(self.schema.FOO.BAR != 7).
+ Or(self.schema.FOO.BAZ != 8).
+ And((self.schema.FOO.BAR == 8).Or(self.schema.FOO.BAZ == 0))
+ ).toSQL(),
+ SQLFragment("select * from FOO where (BAR != ? or BAZ != ?) and "
+ "(BAR = ? or BAZ = ?)", [7, 8, 8, 0]))
+
+
+ def test_updateWithNULL(self):
+ """
+ As per the DB-API specification, "SQL NULL values are represented by the
+ Python None singleton on input and output." When a C{None} is provided
+ as a value to an L{Update}, it will be relayed to the database as a
+ parameter.
+ """
+ self.assertEquals(
+ Update({self.schema.BOZ.QUX: None},
+ Where=self.schema.BOZ.QUX == 7).toSQL(),
+ SQLFragment("update BOZ set QUX = ? where QUX = ?", [None, 7])
+ )
+
+
+ def test_subSelectComparison(self):
+ """
+ A comparison of a column to a sub-select in a where clause will result
+ in a parenthetical 'Where' clause.
+ """
+ self.assertEquals(
+ Update(
+ {self.schema.BOZ.QUX: 9},
+ Where=self.schema.BOZ.QUX ==
+ Select([self.schema.FOO.BAR], From=self.schema.FOO,
+ Where=self.schema.FOO.BAZ == 12)).toSQL(),
+ SQLFragment(
+ # NOTE: it's very important that the comparison _always_ go in
+ # this order (column from the UPDATE first, inner SELECT second)
+ # as the other order will be considered a syntax error.
+ "update BOZ set QUX = ? where QUX = ("
+ "select BAR from FOO where BAZ = ?)", [9, 12]
+ )
+ )
+
+
+ def test_tupleComparison(self):
+ """
+ A L{Tuple} allows for simultaneous comparison of multiple values in a
+ C{Where} clause. This feature is particularly useful when issuing an
+ L{Update} or L{Delete}, where the comparison is with values from a
+ subselect. (A L{Tuple} will be automatically generated upon comparison
+ to a C{tuple} or C{list}.)
+ """
+ self.assertEquals(
+ Update(
+ {self.schema.BOZ.QUX: 1},
+ Where=(self.schema.BOZ.QUX, self.schema.BOZ.QUUX) ==
+ Select([self.schema.FOO.BAR, self.schema.FOO.BAZ],
+ From=self.schema.FOO,
+ Where=self.schema.FOO.BAZ == 2)).toSQL(),
+ SQLFragment(
+ # NOTE: it's very important that the comparison _always_ go in
+ # this order (tuple of columns from the UPDATE first, inner
+ # SELECT second) as the other order will be considered a syntax
+ # error.
+ "update BOZ set QUX = ? where (QUX, QUUX) = ("
+ "select BAR, BAZ from FOO where BAZ = ?)", [1, 2]
+ )
+ )
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/ienterprise.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,142 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Interfaces, mostly related to L{twext.enterprise.adbapi2}.
-"""
-
-__all__ = [
- "IAsyncTransaction",
-]
-
-from zope.interface import Interface, Attribute
-
-
-class AlreadyFinishedError(Exception):
- """
- The transaction was already completed via an C{abort} or C{commit} and
- cannot be aborted or committed again.
- """
-
-
-
-class ConnectionError(Exception):
- """
- An error occurred with the underlying database connection.
- """
-
-
-
-POSTGRES_DIALECT = 'postgres-dialect'
-ORACLE_DIALECT = 'oracle-dialect'
-
-
-
-class IAsyncTransaction(Interface):
- """
- Asynchronous execution of SQL.
-
- Note that there is no {begin()} method; if an L{IAsyncTransaction} exists,
- it is assumed to have been started.
- """
-
- paramstyle = Attribute(
- """
- A copy of the 'paramstyle' attribute from a DB-API 2.0 module.
- """)
-
-
- dialect = Attribute(
- """
- A copy of the 'dialect' attribute from the connection pool. One of the
- C{*_DIALECT} constants in this module, such as C{POSTGRES_DIALECT}.
- """)
-
-
- def execSQL(sql, args=(), raiseOnZeroRowCount=None):
- """
- Execute some SQL.
-
- @param sql: an SQL string.
-
- @type sql: C{str}
-
- @param args: C{list} of arguments to interpolate into C{sql}.
-
- @param raiseOnZeroRowCount: a 0-argument callable which returns an
- exception to raise if the executed SQL does not affect any rows.
-
- @return: L{Deferred} which fires C{list} of C{tuple}
-
- @raise: C{raiseOnZeroRowCount} if it was specified and no rows were
- affected.
- """
-
-
- def commit():
- """
- Commit changes caused by this transaction.
-
- @return: L{Deferred} which fires with C{None} upon successful
- completion of this transaction.
- """
-
-
- def abort():
- """
- Roll back changes caused by this transaction.
-
- @return: L{Deferred} which fires with C{None} upon successful
- rollback of this transaction.
- """
-
-
-
-class IDerivedParameter(Interface):
- """
- A parameter which needs to be derived from the underlying DB-API cursor;
- implicitly, meaning that this must also interact with the actual thread
- manipulating said cursor. If a provider of this interface is passed in the
- C{args} argument to L{IAsyncTransaction.execSQL}, it will have its
- C{prequery} and C{postquery} methods invoked on it before and after
- executing the SQL query in question, respectively.
- """
-
- def preQuery(cursor):
- """
- Before running a query, invoke this method with the cursor that the
- query will be run on.
-
- (This can be used, for example, to allocate a special database-specific
- variable based on the cursor, like an out parameter.)
-
- @param cursor: the DB-API cursor.
-
- @return: the concrete value which should be passed to the DB-API layer.
- """
-
-
- def postQuery(cursor):
- """
- After running a query, invoke this method in the DB-API thread.
-
- (This can be used, for example, to manipulate any state created in the
- preQuery method.)
-
- @param cursor: the DB-API cursor.
-
- @return: C{None}
- """
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py (from rev 7192, CalendarServer/trunk/twext/enterprise/ienterprise.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/ienterprise.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,142 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Interfaces, mostly related to L{twext.enterprise.adbapi2}.
+"""
+
+__all__ = [
+ "IAsyncTransaction",
+]
+
+from zope.interface import Interface, Attribute
+
+
+class AlreadyFinishedError(Exception):
+ """
+ The transaction was already completed via an C{abort} or C{commit} and
+ cannot be aborted or committed again.
+ """
+
+
+
+class ConnectionError(Exception):
+ """
+ An error occurred with the underlying database connection.
+ """
+
+
+
+POSTGRES_DIALECT = 'postgres-dialect'
+ORACLE_DIALECT = 'oracle-dialect'
+
+
+
+class IAsyncTransaction(Interface):
+ """
+ Asynchronous execution of SQL.
+
+ Note that there is no {begin()} method; if an L{IAsyncTransaction} exists,
+ it is assumed to have been started.
+ """
+
+ paramstyle = Attribute(
+ """
+ A copy of the 'paramstyle' attribute from a DB-API 2.0 module.
+ """)
+
+
+ dialect = Attribute(
+ """
+ A copy of the 'dialect' attribute from the connection pool. One of the
+ C{*_DIALECT} constants in this module, such as C{POSTGRES_DIALECT}.
+ """)
+
+
+ def execSQL(sql, args=(), raiseOnZeroRowCount=None):
+ """
+ Execute some SQL.
+
+ @param sql: an SQL string.
+
+ @type sql: C{str}
+
+ @param args: C{list} of arguments to interpolate into C{sql}.
+
+ @param raiseOnZeroRowCount: a 0-argument callable which returns an
+ exception to raise if the executed SQL does not affect any rows.
+
+ @return: L{Deferred} which fires C{list} of C{tuple}
+
+ @raise: C{raiseOnZeroRowCount} if it was specified and no rows were
+ affected.
+ """
+
+
+ def commit():
+ """
+ Commit changes caused by this transaction.
+
+ @return: L{Deferred} which fires with C{None} upon successful
+ completion of this transaction.
+ """
+
+
+ def abort():
+ """
+ Roll back changes caused by this transaction.
+
+ @return: L{Deferred} which fires with C{None} upon successful
+ rollback of this transaction.
+ """
+
+
+
+class IDerivedParameter(Interface):
+ """
+ A parameter which needs to be derived from the underlying DB-API cursor;
+ implicitly, meaning that this must also interact with the actual thread
+ manipulating said cursor. If a provider of this interface is passed in the
+ C{args} argument to L{IAsyncTransaction.execSQL}, it will have its
+ C{prequery} and C{postquery} methods invoked on it before and after
+ executing the SQL query in question, respectively.
+ """
+
+ def preQuery(cursor):
+ """
+ Before running a query, invoke this method with the cursor that the
+ query will be run on.
+
+ (This can be used, for example, to allocate a special database-specific
+ variable based on the cursor, like an out parameter.)
+
+ @param cursor: the DB-API cursor.
+
+ @return: the concrete value which should be passed to the DB-API layer.
+ """
+
+
+ def postQuery(cursor):
+ """
+ After running a query, invoke this method in the DB-API thread.
+
+ (This can be used, for example, to manipulate any state created in the
+ preQuery method.)
+
+ @param cursor: the DB-API cursor.
+
+ @return: C{None}
+ """
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/test/__init__.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,20 +0,0 @@
-
-##
-# Copyright (c) 2010 Apple Inc. All 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}.
-"""
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py (from rev 7192, CalendarServer/trunk/twext/enterprise/test/__init__.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/__init__.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,20 @@
+
+##
+# Copyright (c) 2010 Apple Inc. All 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}.
+"""
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/test/test_adbapi2.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,849 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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.adbapi2}.
-"""
-
-from itertools import count
-
-from twisted.trial.unittest import TestCase
-
-from twisted.internet.defer import execute
-from twisted.internet.task import Clock
-
-from twisted.internet.defer import Deferred
-from twext.enterprise.ienterprise import ConnectionError
-from twext.enterprise.adbapi2 import ConnectionPool
-
-
-def resultOf(deferred, propagate=False):
- """
- Add a callback and errback which will capture the result of a L{Deferred} in
- a list, and return that list. If 'propagate' is True, pass through the
- results.
- """
- results = []
- if propagate:
- def cb(r):
- results.append(r)
- return r
- else:
- cb = results.append
- deferred.addBoth(cb)
- return results
-
-
-
-class Child(object):
- """
- An object with a L{Parent}, in its list of C{children}.
- """
- def __init__(self, parent):
- self.closed = False
- self.parent = parent
- self.parent.children.append(self)
-
- def close(self):
- self.closed = True
-
-
-
-class Parent(object):
- """
- An object with a list of L{Child}ren.
- """
-
- def __init__(self):
- self.children = []
-
-
-
-class FakeConnection(Parent, Child):
- """
- Fake Stand-in for DB-API 2.0 connection.
-
- @ivar executions: the number of statements which have been executed.
- """
-
- executions = 0
-
- def __init__(self, factory):
- """
- Initialize list of cursors
- """
- Parent.__init__(self)
- Child.__init__(self, factory)
- self.id = factory.idcounter.next()
- self._executeFailQueue = []
-
-
- def executeWillFail(self, thunk):
- """
- The next call to L{FakeCursor.execute} will fail with an exception
- returned from the given callable.
- """
- self._executeFailQueue.append(thunk)
-
-
- @property
- def cursors(self):
- "Alias to make tests more readable."
- return self.children
-
-
- def cursor(self):
- return FakeCursor(self)
-
-
- def commit(self):
- if self.parent.commitFail:
- self.parent.commitFail = False
- raise CommitFail()
-
-
- def rollback(self):
- if self.parent.rollbackFail:
- self.parent.rollbackFail = False
- raise RollbackFail()
-
-
-
-class RollbackFail(Exception):
- """
- Sample rollback-failure exception.
- """
-
-
-
-class CommitFail(Exception):
- """
- Sample Commit-failure exception.
- """
-
-
-
-class FakeCursor(Child):
- """
- Fake stand-in for a DB-API 2.0 cursor.
- """
- def __init__(self, connection):
- Child.__init__(self, connection)
- self.rowcount = 0
- # not entirely correct, but all we care about is its truth value.
- self.description = False
- self.variables = []
-
-
- @property
- def connection(self):
- "Alias to make tests more readable."
- return self.parent
-
-
- def execute(self, sql, args=()):
- self.connection.executions += 1
- if self.connection._executeFailQueue:
- raise self.connection._executeFailQueue.pop(0)()
- self.sql = sql
- self.description = True
- self.rowcount = 1
- return
-
-
- def var(self, type, *args):
- """
- Return a database variable in the style of the cx_Oracle bindings.
- """
- v = FakeVariable(self, type, args)
- self.variables.append(v)
- return v
-
-
- def fetchall(self):
- """
- Just echo the SQL that was executed in the last query.
- """
- return [[self.connection.id, self.sql]]
-
-
-
-class FakeVariable(object):
- def __init__(self, cursor, type, args):
- self.cursor = cursor
- self.type = type
- self.args = args
-
-
- def getvalue(self):
- return self.cursor.variables.index(self) + 300
-
-
-
-class ConnectionFactory(Parent):
-
- rollbackFail = False
- commitFail = False
-
- def __init__(self):
- Parent.__init__(self)
- self.idcounter = count(1)
- self._connectResultQueue = []
- self.defaultConnect()
-
-
- @property
- def connections(self):
- "Alias to make tests more readable."
- return self.children
-
-
- def connect(self):
- """
- Implement the C{ConnectionFactory} callable expected by
- L{ConnectionPool}.
- """
- if self._connectResultQueue:
- thunk = self._connectResultQueue.pop(0)
- else:
- thunk = self._default
- return thunk()
-
-
- def willConnect(self):
- """
- Used by tests to queue a successful result for connect().
- """
- def thunk():
- return FakeConnection(self)
- self._connectResultQueue.append(thunk)
-
-
- def willFail(self):
- """
- Used by tests to queue a successful result for connect().
- """
- def thunk():
- raise FakeConnectionError()
- self._connectResultQueue.append(thunk)
-
-
- def defaultConnect(self):
- """
- By default, connection attempts will succeed.
- """
- self.willConnect()
- self._default = self._connectResultQueue.pop()
-
-
- def defaultFail(self):
- """
- By default, connection attempts will fail.
- """
- self.willFail()
- self._default = self._connectResultQueue.pop()
-
-
-
-class FakeConnectionError(Exception):
- """
- Synthetic error that might occur during connection.
- """
-
-
-
-class FakeThreadHolder(object):
- """
- Run things submitted to this ThreadHolder on the main thread, so that
- execution is easier to control.
- """
-
- def __init__(self, test):
- self.started = False
- self.stopped = False
- self.test = test
- self.queue = []
-
-
- def start(self):
- """
- Mark this L{FakeThreadHolder} as not started.
- """
- self.started = True
-
-
- def stop(self):
- """
- Mark this L{FakeThreadHolder} as stopped.
- """
- def stopped(nothing):
- self.stopped = True
- return self.submit(lambda : None).addCallback(stopped)
-
-
- def submit(self, work):
- """
- Call the function (or queue it)
- """
- if self.test.paused:
- d = Deferred()
- self.queue.append((d, work))
- return d
- else:
- return execute(work)
-
-
- def flush(self):
- """
- Fire all deferreds previously returned from submit.
- """
- self.queue, queue = [], self.queue
- for (d, work) in queue:
- try:
- result = work()
- except:
- d.errback()
- else:
- d.callback(result)
-
-
-
-class ConnectionPoolTests(TestCase):
- """
- Tests for L{ConnectionPool}.
- """
-
- def setUp(self):
- """
- Create a L{ConnectionPool} attached to a C{ConnectionFactory}. Start
- the L{ConnectionPool}.
- """
- self.paused = False
- self.holders = []
- self.factory = ConnectionFactory()
- self.pool = ConnectionPool(self.factory.connect,
- maxConnections=2)
- self.pool._createHolder = self.makeAHolder
- self.clock = self.pool.reactor = Clock()
- self.pool.startService()
-
-
- def tearDown(self):
- """
- Make sure the service is stopped and the fake ThreadHolders are all
- executing their queues so failed tests can exit cleanly.
- """
- self.flushHolders()
-
-
- def flushHolders(self):
- """
- Flush all pending C{submit}s since C{pauseHolders} was called.
- """
- self.paused = False
- for holder in self.holders:
- holder.flush()
-
-
- def pauseHolders(self):
- """
- Pause all L{FakeThreadHolder}s, causing C{submit} to return an unfired
- L{Deferred}.
- """
- self.paused = True
-
-
- def makeAHolder(self):
- """
- Make a ThreadHolder-alike.
- """
- fth = FakeThreadHolder(self)
- self.holders.append(fth)
- return fth
-
-
- def test_tooManyConnections(self):
- """
- When the number of outstanding busy transactions exceeds the number of
- slots specified by L{ConnectionPool.maxConnections},
- L{ConnectionPool.connection} will return a pooled transaction that is
- not backed by any real database connection; this object will queue its
- SQL statements until an existing connection becomes available.
- """
- a = self.pool.connection()
-
- alphaResult = resultOf(a.execSQL("alpha"))
- [[counter, echo]] = alphaResult[0]
-
- b = self.pool.connection()
- # 'b' should have opened a connection.
- self.assertEquals(len(self.factory.connections), 2)
- betaResult = resultOf(b.execSQL("beta"))
- [[bcounter, becho]] = betaResult[0]
-
- # both 'a' and 'b' are holding open a connection now; let's try to open
- # a third one. (The ordering will be deterministic even if this fails,
- # because those threads are already busy.)
- c = self.pool.connection()
- gammaResult = resultOf(c.execSQL("gamma"))
-
- # Did 'c' open a connection? Let's hope not...
- self.assertEquals(len(self.factory.connections), 2)
- # SQL shouldn't be executed too soon...
- self.assertEquals(gammaResult, [])
-
- commitResult = resultOf(b.commit())
-
- # Now that 'b' has committed, 'c' should be able to complete.
- [[ccounter, cecho]] = gammaResult[0]
-
- # The connection for 'a' ought to still be busy, so let's make sure
- # we're using the one for 'c'.
- self.assertEquals(ccounter, bcounter)
-
- # Sanity check: the commit should have succeded!
- self.assertEquals(commitResult, [None])
-
-
- def test_stopService(self):
- """
- L{ConnectionPool.stopService} stops all the associated L{ThreadHolder}s
- and thereby frees up the resources it is holding.
- """
- a = self.pool.connection()
- [[[counter, echo]]] = resultOf(a.execSQL("alpha"))
- self.assertEquals(len(self.factory.connections), 1)
- self.assertEquals(len(self.holders), 1)
- [holder] = self.holders
- self.assertEquals(holder.started, True)
- self.assertEquals(holder.stopped, False)
- self.pool.stopService()
- self.assertEquals(len(self.holders), 1)
- self.assertEquals(holder.started, True)
- self.assertEquals(holder.stopped, True)
- # Closing fake connections removes them from the list.
- self.assertEquals(len(self.factory.connections), 1)
- self.assertEquals(self.factory.connections[0].closed, True)
-
-
- def test_retryAfterConnectError(self):
- """
- When the C{connectionFactory} passed to L{ConnectionPool} raises an
- exception, the L{ConnectionPool} will log the exception and delay
- execution of a new connection's SQL methods until an attempt succeeds.
- """
- self.factory.willFail()
- self.factory.willFail()
- self.factory.willConnect()
- c = self.pool.connection()
- def checkOneFailure():
- errors = self.flushLoggedErrors(FakeConnectionError)
- self.assertEquals(len(errors), 1)
- checkOneFailure()
- d = c.execSQL("alpha")
- happened = []
- d.addBoth(happened.append)
- self.assertEquals(happened, [])
- self.clock.advance(self.pool.RETRY_TIMEOUT + 0.01)
- checkOneFailure()
- self.assertEquals(happened, [])
- self.clock.advance(self.pool.RETRY_TIMEOUT + 0.01)
- self.assertEquals(happened, [[[1, "alpha"]]])
-
-
- def test_shutdownDuringRetry(self):
- """
- If a L{ConnectionPool} is attempting to shut down while it's in the
- process of re-trying a connection attempt that received an error, the
- connection attempt should be cancelled and the shutdown should complete
- as normal.
- """
- self.factory.defaultFail()
- self.pool.connection()
- errors = self.flushLoggedErrors(FakeConnectionError)
- self.assertEquals(len(errors), 1)
- stopd = []
- self.pool.stopService().addBoth(stopd.append)
- self.assertEquals([None], stopd)
- self.assertEquals(self.clock.calls, [])
- [holder] = self.holders
- self.assertEquals(holder.started, True)
- self.assertEquals(holder.stopped, True)
-
-
- def test_shutdownDuringAttemptSuccess(self):
- """
- If L{ConnectionPool.stopService} is called while a connection attempt is
- outstanding, the resulting L{Deferred} won't be fired until the
- connection attempt has finished; in this case, succeeded.
- """
- self.pauseHolders()
- self.pool.connection()
- stopd = []
- self.pool.stopService().addBoth(stopd.append)
- self.assertEquals(stopd, [])
- self.flushHolders()
- self.assertEquals(stopd, [None])
- [holder] = self.holders
- self.assertEquals(holder.started, True)
- self.assertEquals(holder.stopped, True)
-
-
- def test_shutdownDuringAttemptFailed(self):
- """
- If L{ConnectionPool.stopService} is called while a connection attempt is
- outstanding, the resulting L{Deferred} won't be fired until the
- connection attempt has finished; in this case, failed.
- """
- self.factory.defaultFail()
- self.pauseHolders()
- self.pool.connection()
- stopd = []
- self.pool.stopService().addBoth(stopd.append)
- self.assertEquals(stopd, [])
- self.flushHolders()
- errors = self.flushLoggedErrors(FakeConnectionError)
- self.assertEquals(len(errors), 1)
- self.assertEquals(stopd, [None])
- [holder] = self.holders
- self.assertEquals(holder.started, True)
- self.assertEquals(holder.stopped, True)
-
-
- def test_stopServiceMidAbort(self):
- """
- When L{ConnectionPool.stopService} is called with deferreds from
- C{abort} still outstanding, it will wait for the currently-aborting
- transaction to fully abort before firing the L{Deferred} returned from
- C{stopService}.
- """
- # TODO: commit() too?
- self.pauseHolders()
- c = self.pool.connection()
- abortResult = resultOf(c.abort())
- # Should abort instantly, as it hasn't managed to unspool anything yet.
- # FIXME: kill all Deferreds associated with this thing, make sure that
- # any outstanding query callback chains get nuked.
- self.assertEquals(abortResult, [None])
- stopResult = resultOf(self.pool.stopService())
- self.assertEquals(stopResult, [])
- self.flushHolders()
- #self.assertEquals(abortResult, [None])
- self.assertEquals(stopResult, [None])
-
-
- def test_stopServiceWithSpooled(self):
- """
- When L{ConnectionPool.stopService} is called when spooled transactions
- are outstanding, any pending L{Deferreds} returned by those transactions
- will be failed with L{ConnectionError}.
- """
- # Use up the free slots so we have to spool.
- hold = []
- hold.append(self.pool.connection())
- hold.append(self.pool.connection())
-
- c = self.pool.connection()
- se = resultOf(c.execSQL("alpha"))
- ce = resultOf(c.commit())
- self.assertEquals(se, [])
- self.assertEquals(ce, [])
- self.pool.stopService()
- self.assertEquals(se[0].type, ConnectionError)
- self.assertEquals(ce[0].type, ConnectionError)
-
-
- def test_repoolSpooled(self):
- """
- Regression test for a somewhat tricky-to-explain bug: when a spooled
- transaction which has already had commit() called on it before it's
- received a real connection to start executing on, it will not leave
- behind any detritus that prevents stopService from working.
- """
- self.pauseHolders()
- c = self.pool.connection()
- c2 = self.pool.connection()
- c3 = self.pool.connection()
- c.commit()
- c2.commit()
- c3.commit()
- self.flushHolders()
- self.assertEquals(len(self.factory.connections), 2)
- stopResult = resultOf(self.pool.stopService())
- self.assertEquals(stopResult, [None])
- self.assertEquals(len(self.factory.connections), 2)
- self.assertEquals(self.factory.connections[0].closed, True)
- self.assertEquals(self.factory.connections[1].closed, True)
-
-
- def test_connectAfterStop(self):
- """
- Calls to connection() after stopService() result in transactions which
- immediately fail all operations.
- """
- stopResults = resultOf(self.pool.stopService())
- self.assertEquals(stopResults, [None])
- self.pauseHolders()
- postClose = self.pool.connection()
- queryResult = resultOf(postClose.execSQL("hello"))
- self.assertEquals(len(queryResult), 1)
- self.assertEquals(queryResult[0].type, ConnectionError)
-
-
- def test_connectAfterStartedStopping(self):
- """
- Calls to connection() after stopService() has been called but before it
- has completed will result in transactions which immediately fail all
- operations.
- """
- self.pauseHolders()
- preClose = self.pool.connection()
- preCloseResult = resultOf(preClose.execSQL('statement'))
- stopResult = resultOf(self.pool.stopService())
- postClose = self.pool.connection()
- queryResult = resultOf(postClose.execSQL("hello"))
- self.assertEquals(stopResult, [])
- self.assertEquals(len(queryResult), 1)
- self.assertEquals(queryResult[0].type, ConnectionError)
- self.assertEquals(len(preCloseResult), 1)
- self.assertEquals(preCloseResult[0].type, ConnectionError)
-
-
- def test_abortFailsDuringStopService(self):
- """
- L{IAsyncTransaction.abort} might fail, most likely because the
- underlying database connection has already been disconnected. If this
- happens, shutdown should continue.
- """
- txns = []
- txns.append(self.pool.connection())
- txns.append(self.pool.connection())
- # Fail one (and only one) call to rollback().
- self.factory.rollbackFail = True
- stopResult = resultOf(self.pool.stopService())
- self.assertEquals(stopResult, [None])
- self.assertEquals(len(self.flushLoggedErrors(RollbackFail)), 1)
- self.assertEquals(self.factory.connections[0].closed, True)
- self.assertEquals(self.factory.connections[1].closed, True)
-
-
- def test_abortRecycledTransaction(self):
- """
- L{ConnectionPool.stopService} will shut down if a recycled transaction
- is still pending.
- """
- recycled = self.pool.connection()
- recycled.commit()
- remember = []
- remember.append(self.pool.connection())
- self.assertEquals(resultOf(self.pool.stopService()), [None])
-
-
- def test_waitForAlreadyAbortedTransaction(self):
- """
- L{ConnectionPool.stopService} will wait for all transactions to shut
- down before exiting, including those which have already been stopped.
- """
- it = self.pool.connection()
- self.pauseHolders()
- abortResult = resultOf(it.abort())
-
- # steal it from the queue so we can do it out of order
- d, work = self.holders[0].queue.pop()
- # that should be the only work unit so don't continue if something else
- # got in there
- self.assertEquals(self.holders[0].queue, [])
- self.assertEquals(len(self.holders), 1)
- self.flushHolders()
- stopResult = resultOf(self.pool.stopService())
- # Sanity check that we haven't actually stopped it yet
- self.assertEquals(abortResult, [])
- # We haven't fired it yet, so the service had better not have stopped...
- self.assertEquals(stopResult, [])
- d.callback(None)
- self.assertEquals(abortResult, [None])
- self.assertEquals(stopResult, [None])
-
-
- def test_tooManyConnectionsWhileOthersFinish(self):
- """
- L{ConnectionPool.connection} will not spawn more than the maximum
- connections if there are finishing transactions outstanding.
- """
- a = self.pool.connection()
- b = self.pool.connection()
- self.pauseHolders()
- a.abort()
- b.abort()
- # Remove the holders for the existing connections, so that the 'extra'
- # connection() call wins the race and gets executed first.
- self.holders[:] = []
- self.pool.connection()
- self.flushHolders()
- self.assertEquals(len(self.factory.connections), 2)
-
-
- def test_propagateParamstyle(self):
- """
- Each different type of L{IAsyncTransaction} relays the C{paramstyle}
- attribute from the L{ConnectionPool}.
- """
- TEST_PARAMSTYLE = "justtesting"
- self.pool.paramstyle = TEST_PARAMSTYLE
- normaltxn = self.pool.connection()
- self.assertEquals(normaltxn.paramstyle, TEST_PARAMSTYLE)
- self.pauseHolders()
- extra = []
- extra.append(self.pool.connection())
- waitingtxn = self.pool.connection()
- self.assertEquals(waitingtxn.paramstyle, TEST_PARAMSTYLE)
- self.flushHolders()
- self.pool.stopService()
- notxn = self.pool.connection()
- self.assertEquals(notxn.paramstyle, TEST_PARAMSTYLE)
-
-
- def test_propagateDialect(self):
- """
- Each different type of L{IAsyncTransaction} relays the C{dialect}
- attribute from the L{ConnectionPool}.
- """
- TEST_DIALECT = "otherdialect"
- self.pool.dialect = TEST_DIALECT
- normaltxn = self.pool.connection()
- self.assertEquals(normaltxn.dialect, TEST_DIALECT)
- self.pauseHolders()
- extra = []
- extra.append(self.pool.connection())
- waitingtxn = self.pool.connection()
- self.assertEquals(waitingtxn.dialect, TEST_DIALECT)
- self.flushHolders()
- self.pool.stopService()
- notxn = self.pool.connection()
- self.assertEquals(notxn.dialect, TEST_DIALECT)
-
-
- def test_reConnectWhenFirstExecFails(self):
- """
- Generally speaking, DB-API 2.0 adapters do not provide information about
- the cause of a failed 'execute' method; they definitely don't provide it
- in a way which can be identified as related to the syntax of the query,
- the state of the database itself, the state of the connection, etc.
-
- Therefore the best general heuristic for whether the connection to the
- database has been lost and needs to be re-established is to catch
- exceptions which are raised by the I{first} statement executed in a
- transaction.
- """
- # Allow 'connect' to succeed. This should behave basically the same
- # whether connect() happened to succeed in some previous transaction and
- # it's recycling the underlying transaction, or connect() just
- # succeeded. Either way you just have a _SingleTxn wrapping a
- # _ConnectedTxn.
- txn = self.pool.connection()
- self.assertEquals(len(self.factory.connections), 1,
- "Sanity check failed.")
- self.factory.connections[0].executeWillFail(RuntimeError)
- results = resultOf(txn.execSQL("hello, world!"))
- [[[counter, echo]]] = results
- self.assertEquals("hello, world!", echo)
- # Two execution attempts should have been made, one on each connection.
- # The first failed with a RuntimeError, but that is deliberately
- # obscured, because then we tried again and it succeeded.
- self.assertEquals(len(self.factory.connections), 2,
- "No new connection opened.")
- self.assertEquals(self.factory.connections[0].executions, 1)
- self.assertEquals(self.factory.connections[1].executions, 1)
- self.assertEquals(self.factory.connections[0].closed, True)
- self.assertEquals(self.factory.connections[1].closed, False)
-
-
- def test_reConnectWhenSecondExecFailsThenFirstExecFails(self):
- """
- Other connection-oriented errors might raise exceptions if they occur in
- the middle of a transaction, but that should cause the error to be
- caught, the transaction to be aborted, and the (closed) connection to be
- recycled, where the next transaction that attempts to do anything with
- it will encounter the error immediately and discover it needs to be
- recycled.
-
- It would be better if this behavior were invisible, but that could only
- be accomplished with more precise database exceptions. We may come up
- with support in the future for more precisely identifying exceptions,
- but I{unknown} exceptions should continue to be treated in this manner,
- relaying the exception back to application code but attempting a
- re-connection on the next try.
- """
- txn = self.pool.connection()
- [[[counter, echo]]] = resultOf(txn.execSQL("hello, world!", []))
- self.factory.connections[0].executeWillFail(ZeroDivisionError)
- [f] = resultOf(txn.execSQL("divide by zero", []))
- f.trap(ZeroDivisionError)
- self.assertEquals(self.factory.connections[0].executions, 2)
- # Reconnection should work exactly as before.
- self.assertEquals(self.factory.connections[0].closed, False)
- # Application code has to roll back its transaction at this point, since
- # it failed (and we don't necessarily know why it failed: not enough
- # information).
- txn.abort()
- self.factory.connections[0].executions = 0 # re-set for next test
- self.assertEquals(len(self.factory.connections), 1)
- self.test_reConnectWhenFirstExecFails()
-
-
- def test_disconnectOnFailedRollback(self):
- """
- When C{rollback} fails for any reason on a connection object, then we
- don't know what state it's in. Most likely, it's already been
- disconnected, so the connection should be closed and the transaction
- de-pooled instead of recycled.
-
- Also, a new connection will immediately be established to keep the pool
- size the same.
- """
- txn = self.pool.connection()
- self.factory.rollbackFail = True
- [x] = resultOf(txn.abort())
- # Abort does not propagate the error on, the transaction merely gets
- # disposed of.
- self.assertIdentical(x, None)
- self.assertEquals(len(self.pool._free), 1)
- self.assertNotIn(txn._baseTxn, self.pool._free)
- self.assertEquals(self.pool._finishing, [])
- self.assertEquals(len(self.factory.connections), 2)
- self.assertEquals(self.factory.connections[0].closed, True)
- self.assertEquals(self.factory.connections[1].closed, False)
- self.assertEquals(len(self.flushLoggedErrors(RollbackFail)), 1)
-
-
- def test_exceptionPropagatesFailedCommit(self):
- """
- A failed C{rollback} is fine (the premature death of the connection
- without C{commit} means that the changes are surely gone), but a failed
- C{commit} has to be relayed to client code, since that actually means
- some changes didn't hit the database.
- """
- txn = self.pool.connection()
- self.factory.commitFail = True
- [x] = resultOf(txn.commit())
- x.trap(CommitFail)
- self.assertEquals(len(self.pool._free), 1)
- self.assertNotIn(txn._baseTxn, self.pool._free)
- self.assertEquals(self.pool._finishing, [])
- self.assertEquals(len(self.factory.connections), 2)
- self.assertEquals(self.factory.connections[0].closed, True)
- self.assertEquals(self.factory.connections[1].closed, False)
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py (from rev 7192, CalendarServer/trunk/twext/enterprise/test/test_adbapi2.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/test/test_adbapi2.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,849 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.adbapi2}.
+"""
+
+from itertools import count
+
+from twisted.trial.unittest import TestCase
+
+from twisted.internet.defer import execute
+from twisted.internet.task import Clock
+
+from twisted.internet.defer import Deferred
+from twext.enterprise.ienterprise import ConnectionError
+from twext.enterprise.adbapi2 import ConnectionPool
+
+
+def resultOf(deferred, propagate=False):
+ """
+ Add a callback and errback which will capture the result of a L{Deferred} in
+ a list, and return that list. If 'propagate' is True, pass through the
+ results.
+ """
+ results = []
+ if propagate:
+ def cb(r):
+ results.append(r)
+ return r
+ else:
+ cb = results.append
+ deferred.addBoth(cb)
+ return results
+
+
+
+class Child(object):
+ """
+ An object with a L{Parent}, in its list of C{children}.
+ """
+ def __init__(self, parent):
+ self.closed = False
+ self.parent = parent
+ self.parent.children.append(self)
+
+ def close(self):
+ self.closed = True
+
+
+
+class Parent(object):
+ """
+ An object with a list of L{Child}ren.
+ """
+
+ def __init__(self):
+ self.children = []
+
+
+
+class FakeConnection(Parent, Child):
+ """
+ Fake Stand-in for DB-API 2.0 connection.
+
+ @ivar executions: the number of statements which have been executed.
+ """
+
+ executions = 0
+
+ def __init__(self, factory):
+ """
+ Initialize list of cursors
+ """
+ Parent.__init__(self)
+ Child.__init__(self, factory)
+ self.id = factory.idcounter.next()
+ self._executeFailQueue = []
+
+
+ def executeWillFail(self, thunk):
+ """
+ The next call to L{FakeCursor.execute} will fail with an exception
+ returned from the given callable.
+ """
+ self._executeFailQueue.append(thunk)
+
+
+ @property
+ def cursors(self):
+ "Alias to make tests more readable."
+ return self.children
+
+
+ def cursor(self):
+ return FakeCursor(self)
+
+
+ def commit(self):
+ if self.parent.commitFail:
+ self.parent.commitFail = False
+ raise CommitFail()
+
+
+ def rollback(self):
+ if self.parent.rollbackFail:
+ self.parent.rollbackFail = False
+ raise RollbackFail()
+
+
+
+class RollbackFail(Exception):
+ """
+ Sample rollback-failure exception.
+ """
+
+
+
+class CommitFail(Exception):
+ """
+ Sample Commit-failure exception.
+ """
+
+
+
+class FakeCursor(Child):
+ """
+ Fake stand-in for a DB-API 2.0 cursor.
+ """
+ def __init__(self, connection):
+ Child.__init__(self, connection)
+ self.rowcount = 0
+ # not entirely correct, but all we care about is its truth value.
+ self.description = False
+ self.variables = []
+
+
+ @property
+ def connection(self):
+ "Alias to make tests more readable."
+ return self.parent
+
+
+ def execute(self, sql, args=()):
+ self.connection.executions += 1
+ if self.connection._executeFailQueue:
+ raise self.connection._executeFailQueue.pop(0)()
+ self.sql = sql
+ self.description = True
+ self.rowcount = 1
+ return
+
+
+ def var(self, type, *args):
+ """
+ Return a database variable in the style of the cx_Oracle bindings.
+ """
+ v = FakeVariable(self, type, args)
+ self.variables.append(v)
+ return v
+
+
+ def fetchall(self):
+ """
+ Just echo the SQL that was executed in the last query.
+ """
+ return [[self.connection.id, self.sql]]
+
+
+
+class FakeVariable(object):
+ def __init__(self, cursor, type, args):
+ self.cursor = cursor
+ self.type = type
+ self.args = args
+
+
+ def getvalue(self):
+ return self.cursor.variables.index(self) + 300
+
+
+
+class ConnectionFactory(Parent):
+
+ rollbackFail = False
+ commitFail = False
+
+ def __init__(self):
+ Parent.__init__(self)
+ self.idcounter = count(1)
+ self._connectResultQueue = []
+ self.defaultConnect()
+
+
+ @property
+ def connections(self):
+ "Alias to make tests more readable."
+ return self.children
+
+
+ def connect(self):
+ """
+ Implement the C{ConnectionFactory} callable expected by
+ L{ConnectionPool}.
+ """
+ if self._connectResultQueue:
+ thunk = self._connectResultQueue.pop(0)
+ else:
+ thunk = self._default
+ return thunk()
+
+
+ def willConnect(self):
+ """
+ Used by tests to queue a successful result for connect().
+ """
+ def thunk():
+ return FakeConnection(self)
+ self._connectResultQueue.append(thunk)
+
+
+ def willFail(self):
+ """
+ Used by tests to queue a successful result for connect().
+ """
+ def thunk():
+ raise FakeConnectionError()
+ self._connectResultQueue.append(thunk)
+
+
+ def defaultConnect(self):
+ """
+ By default, connection attempts will succeed.
+ """
+ self.willConnect()
+ self._default = self._connectResultQueue.pop()
+
+
+ def defaultFail(self):
+ """
+ By default, connection attempts will fail.
+ """
+ self.willFail()
+ self._default = self._connectResultQueue.pop()
+
+
+
+class FakeConnectionError(Exception):
+ """
+ Synthetic error that might occur during connection.
+ """
+
+
+
+class FakeThreadHolder(object):
+ """
+ Run things submitted to this ThreadHolder on the main thread, so that
+ execution is easier to control.
+ """
+
+ def __init__(self, test):
+ self.started = False
+ self.stopped = False
+ self.test = test
+ self.queue = []
+
+
+ def start(self):
+ """
+ Mark this L{FakeThreadHolder} as not started.
+ """
+ self.started = True
+
+
+ def stop(self):
+ """
+ Mark this L{FakeThreadHolder} as stopped.
+ """
+ def stopped(nothing):
+ self.stopped = True
+ return self.submit(lambda : None).addCallback(stopped)
+
+
+ def submit(self, work):
+ """
+ Call the function (or queue it)
+ """
+ if self.test.paused:
+ d = Deferred()
+ self.queue.append((d, work))
+ return d
+ else:
+ return execute(work)
+
+
+ def flush(self):
+ """
+ Fire all deferreds previously returned from submit.
+ """
+ self.queue, queue = [], self.queue
+ for (d, work) in queue:
+ try:
+ result = work()
+ except:
+ d.errback()
+ else:
+ d.callback(result)
+
+
+
+class ConnectionPoolTests(TestCase):
+ """
+ Tests for L{ConnectionPool}.
+ """
+
+ def setUp(self):
+ """
+ Create a L{ConnectionPool} attached to a C{ConnectionFactory}. Start
+ the L{ConnectionPool}.
+ """
+ self.paused = False
+ self.holders = []
+ self.factory = ConnectionFactory()
+ self.pool = ConnectionPool(self.factory.connect,
+ maxConnections=2)
+ self.pool._createHolder = self.makeAHolder
+ self.clock = self.pool.reactor = Clock()
+ self.pool.startService()
+
+
+ def tearDown(self):
+ """
+ Make sure the service is stopped and the fake ThreadHolders are all
+ executing their queues so failed tests can exit cleanly.
+ """
+ self.flushHolders()
+
+
+ def flushHolders(self):
+ """
+ Flush all pending C{submit}s since C{pauseHolders} was called.
+ """
+ self.paused = False
+ for holder in self.holders:
+ holder.flush()
+
+
+ def pauseHolders(self):
+ """
+ Pause all L{FakeThreadHolder}s, causing C{submit} to return an unfired
+ L{Deferred}.
+ """
+ self.paused = True
+
+
+ def makeAHolder(self):
+ """
+ Make a ThreadHolder-alike.
+ """
+ fth = FakeThreadHolder(self)
+ self.holders.append(fth)
+ return fth
+
+
+ def test_tooManyConnections(self):
+ """
+ When the number of outstanding busy transactions exceeds the number of
+ slots specified by L{ConnectionPool.maxConnections},
+ L{ConnectionPool.connection} will return a pooled transaction that is
+ not backed by any real database connection; this object will queue its
+ SQL statements until an existing connection becomes available.
+ """
+ a = self.pool.connection()
+
+ alphaResult = resultOf(a.execSQL("alpha"))
+ [[counter, echo]] = alphaResult[0]
+
+ b = self.pool.connection()
+ # 'b' should have opened a connection.
+ self.assertEquals(len(self.factory.connections), 2)
+ betaResult = resultOf(b.execSQL("beta"))
+ [[bcounter, becho]] = betaResult[0]
+
+ # both 'a' and 'b' are holding open a connection now; let's try to open
+ # a third one. (The ordering will be deterministic even if this fails,
+ # because those threads are already busy.)
+ c = self.pool.connection()
+ gammaResult = resultOf(c.execSQL("gamma"))
+
+ # Did 'c' open a connection? Let's hope not...
+ self.assertEquals(len(self.factory.connections), 2)
+ # SQL shouldn't be executed too soon...
+ self.assertEquals(gammaResult, [])
+
+ commitResult = resultOf(b.commit())
+
+ # Now that 'b' has committed, 'c' should be able to complete.
+ [[ccounter, cecho]] = gammaResult[0]
+
+ # The connection for 'a' ought to still be busy, so let's make sure
+ # we're using the one for 'c'.
+ self.assertEquals(ccounter, bcounter)
+
+ # Sanity check: the commit should have succeded!
+ self.assertEquals(commitResult, [None])
+
+
+ def test_stopService(self):
+ """
+ L{ConnectionPool.stopService} stops all the associated L{ThreadHolder}s
+ and thereby frees up the resources it is holding.
+ """
+ a = self.pool.connection()
+ [[[counter, echo]]] = resultOf(a.execSQL("alpha"))
+ self.assertEquals(len(self.factory.connections), 1)
+ self.assertEquals(len(self.holders), 1)
+ [holder] = self.holders
+ self.assertEquals(holder.started, True)
+ self.assertEquals(holder.stopped, False)
+ self.pool.stopService()
+ self.assertEquals(len(self.holders), 1)
+ self.assertEquals(holder.started, True)
+ self.assertEquals(holder.stopped, True)
+ # Closing fake connections removes them from the list.
+ self.assertEquals(len(self.factory.connections), 1)
+ self.assertEquals(self.factory.connections[0].closed, True)
+
+
+ def test_retryAfterConnectError(self):
+ """
+ When the C{connectionFactory} passed to L{ConnectionPool} raises an
+ exception, the L{ConnectionPool} will log the exception and delay
+ execution of a new connection's SQL methods until an attempt succeeds.
+ """
+ self.factory.willFail()
+ self.factory.willFail()
+ self.factory.willConnect()
+ c = self.pool.connection()
+ def checkOneFailure():
+ errors = self.flushLoggedErrors(FakeConnectionError)
+ self.assertEquals(len(errors), 1)
+ checkOneFailure()
+ d = c.execSQL("alpha")
+ happened = []
+ d.addBoth(happened.append)
+ self.assertEquals(happened, [])
+ self.clock.advance(self.pool.RETRY_TIMEOUT + 0.01)
+ checkOneFailure()
+ self.assertEquals(happened, [])
+ self.clock.advance(self.pool.RETRY_TIMEOUT + 0.01)
+ self.assertEquals(happened, [[[1, "alpha"]]])
+
+
+ def test_shutdownDuringRetry(self):
+ """
+ If a L{ConnectionPool} is attempting to shut down while it's in the
+ process of re-trying a connection attempt that received an error, the
+ connection attempt should be cancelled and the shutdown should complete
+ as normal.
+ """
+ self.factory.defaultFail()
+ self.pool.connection()
+ errors = self.flushLoggedErrors(FakeConnectionError)
+ self.assertEquals(len(errors), 1)
+ stopd = []
+ self.pool.stopService().addBoth(stopd.append)
+ self.assertEquals([None], stopd)
+ self.assertEquals(self.clock.calls, [])
+ [holder] = self.holders
+ self.assertEquals(holder.started, True)
+ self.assertEquals(holder.stopped, True)
+
+
+ def test_shutdownDuringAttemptSuccess(self):
+ """
+ If L{ConnectionPool.stopService} is called while a connection attempt is
+ outstanding, the resulting L{Deferred} won't be fired until the
+ connection attempt has finished; in this case, succeeded.
+ """
+ self.pauseHolders()
+ self.pool.connection()
+ stopd = []
+ self.pool.stopService().addBoth(stopd.append)
+ self.assertEquals(stopd, [])
+ self.flushHolders()
+ self.assertEquals(stopd, [None])
+ [holder] = self.holders
+ self.assertEquals(holder.started, True)
+ self.assertEquals(holder.stopped, True)
+
+
+ def test_shutdownDuringAttemptFailed(self):
+ """
+ If L{ConnectionPool.stopService} is called while a connection attempt is
+ outstanding, the resulting L{Deferred} won't be fired until the
+ connection attempt has finished; in this case, failed.
+ """
+ self.factory.defaultFail()
+ self.pauseHolders()
+ self.pool.connection()
+ stopd = []
+ self.pool.stopService().addBoth(stopd.append)
+ self.assertEquals(stopd, [])
+ self.flushHolders()
+ errors = self.flushLoggedErrors(FakeConnectionError)
+ self.assertEquals(len(errors), 1)
+ self.assertEquals(stopd, [None])
+ [holder] = self.holders
+ self.assertEquals(holder.started, True)
+ self.assertEquals(holder.stopped, True)
+
+
+ def test_stopServiceMidAbort(self):
+ """
+ When L{ConnectionPool.stopService} is called with deferreds from
+ C{abort} still outstanding, it will wait for the currently-aborting
+ transaction to fully abort before firing the L{Deferred} returned from
+ C{stopService}.
+ """
+ # TODO: commit() too?
+ self.pauseHolders()
+ c = self.pool.connection()
+ abortResult = resultOf(c.abort())
+ # Should abort instantly, as it hasn't managed to unspool anything yet.
+ # FIXME: kill all Deferreds associated with this thing, make sure that
+ # any outstanding query callback chains get nuked.
+ self.assertEquals(abortResult, [None])
+ stopResult = resultOf(self.pool.stopService())
+ self.assertEquals(stopResult, [])
+ self.flushHolders()
+ #self.assertEquals(abortResult, [None])
+ self.assertEquals(stopResult, [None])
+
+
+ def test_stopServiceWithSpooled(self):
+ """
+ When L{ConnectionPool.stopService} is called when spooled transactions
+ are outstanding, any pending L{Deferreds} returned by those transactions
+ will be failed with L{ConnectionError}.
+ """
+ # Use up the free slots so we have to spool.
+ hold = []
+ hold.append(self.pool.connection())
+ hold.append(self.pool.connection())
+
+ c = self.pool.connection()
+ se = resultOf(c.execSQL("alpha"))
+ ce = resultOf(c.commit())
+ self.assertEquals(se, [])
+ self.assertEquals(ce, [])
+ self.pool.stopService()
+ self.assertEquals(se[0].type, ConnectionError)
+ self.assertEquals(ce[0].type, ConnectionError)
+
+
+ def test_repoolSpooled(self):
+ """
+ Regression test for a somewhat tricky-to-explain bug: when a spooled
+ transaction which has already had commit() called on it before it's
+ received a real connection to start executing on, it will not leave
+ behind any detritus that prevents stopService from working.
+ """
+ self.pauseHolders()
+ c = self.pool.connection()
+ c2 = self.pool.connection()
+ c3 = self.pool.connection()
+ c.commit()
+ c2.commit()
+ c3.commit()
+ self.flushHolders()
+ self.assertEquals(len(self.factory.connections), 2)
+ stopResult = resultOf(self.pool.stopService())
+ self.assertEquals(stopResult, [None])
+ self.assertEquals(len(self.factory.connections), 2)
+ self.assertEquals(self.factory.connections[0].closed, True)
+ self.assertEquals(self.factory.connections[1].closed, True)
+
+
+ def test_connectAfterStop(self):
+ """
+ Calls to connection() after stopService() result in transactions which
+ immediately fail all operations.
+ """
+ stopResults = resultOf(self.pool.stopService())
+ self.assertEquals(stopResults, [None])
+ self.pauseHolders()
+ postClose = self.pool.connection()
+ queryResult = resultOf(postClose.execSQL("hello"))
+ self.assertEquals(len(queryResult), 1)
+ self.assertEquals(queryResult[0].type, ConnectionError)
+
+
+ def test_connectAfterStartedStopping(self):
+ """
+ Calls to connection() after stopService() has been called but before it
+ has completed will result in transactions which immediately fail all
+ operations.
+ """
+ self.pauseHolders()
+ preClose = self.pool.connection()
+ preCloseResult = resultOf(preClose.execSQL('statement'))
+ stopResult = resultOf(self.pool.stopService())
+ postClose = self.pool.connection()
+ queryResult = resultOf(postClose.execSQL("hello"))
+ self.assertEquals(stopResult, [])
+ self.assertEquals(len(queryResult), 1)
+ self.assertEquals(queryResult[0].type, ConnectionError)
+ self.assertEquals(len(preCloseResult), 1)
+ self.assertEquals(preCloseResult[0].type, ConnectionError)
+
+
+ def test_abortFailsDuringStopService(self):
+ """
+ L{IAsyncTransaction.abort} might fail, most likely because the
+ underlying database connection has already been disconnected. If this
+ happens, shutdown should continue.
+ """
+ txns = []
+ txns.append(self.pool.connection())
+ txns.append(self.pool.connection())
+ # Fail one (and only one) call to rollback().
+ self.factory.rollbackFail = True
+ stopResult = resultOf(self.pool.stopService())
+ self.assertEquals(stopResult, [None])
+ self.assertEquals(len(self.flushLoggedErrors(RollbackFail)), 1)
+ self.assertEquals(self.factory.connections[0].closed, True)
+ self.assertEquals(self.factory.connections[1].closed, True)
+
+
+ def test_abortRecycledTransaction(self):
+ """
+ L{ConnectionPool.stopService} will shut down if a recycled transaction
+ is still pending.
+ """
+ recycled = self.pool.connection()
+ recycled.commit()
+ remember = []
+ remember.append(self.pool.connection())
+ self.assertEquals(resultOf(self.pool.stopService()), [None])
+
+
+ def test_waitForAlreadyAbortedTransaction(self):
+ """
+ L{ConnectionPool.stopService} will wait for all transactions to shut
+ down before exiting, including those which have already been stopped.
+ """
+ it = self.pool.connection()
+ self.pauseHolders()
+ abortResult = resultOf(it.abort())
+
+ # steal it from the queue so we can do it out of order
+ d, work = self.holders[0].queue.pop()
+ # that should be the only work unit so don't continue if something else
+ # got in there
+ self.assertEquals(self.holders[0].queue, [])
+ self.assertEquals(len(self.holders), 1)
+ self.flushHolders()
+ stopResult = resultOf(self.pool.stopService())
+ # Sanity check that we haven't actually stopped it yet
+ self.assertEquals(abortResult, [])
+ # We haven't fired it yet, so the service had better not have stopped...
+ self.assertEquals(stopResult, [])
+ d.callback(None)
+ self.assertEquals(abortResult, [None])
+ self.assertEquals(stopResult, [None])
+
+
+ def test_tooManyConnectionsWhileOthersFinish(self):
+ """
+ L{ConnectionPool.connection} will not spawn more than the maximum
+ connections if there are finishing transactions outstanding.
+ """
+ a = self.pool.connection()
+ b = self.pool.connection()
+ self.pauseHolders()
+ a.abort()
+ b.abort()
+ # Remove the holders for the existing connections, so that the 'extra'
+ # connection() call wins the race and gets executed first.
+ self.holders[:] = []
+ self.pool.connection()
+ self.flushHolders()
+ self.assertEquals(len(self.factory.connections), 2)
+
+
+ def test_propagateParamstyle(self):
+ """
+ Each different type of L{IAsyncTransaction} relays the C{paramstyle}
+ attribute from the L{ConnectionPool}.
+ """
+ TEST_PARAMSTYLE = "justtesting"
+ self.pool.paramstyle = TEST_PARAMSTYLE
+ normaltxn = self.pool.connection()
+ self.assertEquals(normaltxn.paramstyle, TEST_PARAMSTYLE)
+ self.pauseHolders()
+ extra = []
+ extra.append(self.pool.connection())
+ waitingtxn = self.pool.connection()
+ self.assertEquals(waitingtxn.paramstyle, TEST_PARAMSTYLE)
+ self.flushHolders()
+ self.pool.stopService()
+ notxn = self.pool.connection()
+ self.assertEquals(notxn.paramstyle, TEST_PARAMSTYLE)
+
+
+ def test_propagateDialect(self):
+ """
+ Each different type of L{IAsyncTransaction} relays the C{dialect}
+ attribute from the L{ConnectionPool}.
+ """
+ TEST_DIALECT = "otherdialect"
+ self.pool.dialect = TEST_DIALECT
+ normaltxn = self.pool.connection()
+ self.assertEquals(normaltxn.dialect, TEST_DIALECT)
+ self.pauseHolders()
+ extra = []
+ extra.append(self.pool.connection())
+ waitingtxn = self.pool.connection()
+ self.assertEquals(waitingtxn.dialect, TEST_DIALECT)
+ self.flushHolders()
+ self.pool.stopService()
+ notxn = self.pool.connection()
+ self.assertEquals(notxn.dialect, TEST_DIALECT)
+
+
+ def test_reConnectWhenFirstExecFails(self):
+ """
+ Generally speaking, DB-API 2.0 adapters do not provide information about
+ the cause of a failed 'execute' method; they definitely don't provide it
+ in a way which can be identified as related to the syntax of the query,
+ the state of the database itself, the state of the connection, etc.
+
+ Therefore the best general heuristic for whether the connection to the
+ database has been lost and needs to be re-established is to catch
+ exceptions which are raised by the I{first} statement executed in a
+ transaction.
+ """
+ # Allow 'connect' to succeed. This should behave basically the same
+ # whether connect() happened to succeed in some previous transaction and
+ # it's recycling the underlying transaction, or connect() just
+ # succeeded. Either way you just have a _SingleTxn wrapping a
+ # _ConnectedTxn.
+ txn = self.pool.connection()
+ self.assertEquals(len(self.factory.connections), 1,
+ "Sanity check failed.")
+ self.factory.connections[0].executeWillFail(RuntimeError)
+ results = resultOf(txn.execSQL("hello, world!"))
+ [[[counter, echo]]] = results
+ self.assertEquals("hello, world!", echo)
+ # Two execution attempts should have been made, one on each connection.
+ # The first failed with a RuntimeError, but that is deliberately
+ # obscured, because then we tried again and it succeeded.
+ self.assertEquals(len(self.factory.connections), 2,
+ "No new connection opened.")
+ self.assertEquals(self.factory.connections[0].executions, 1)
+ self.assertEquals(self.factory.connections[1].executions, 1)
+ self.assertEquals(self.factory.connections[0].closed, True)
+ self.assertEquals(self.factory.connections[1].closed, False)
+
+
+ def test_reConnectWhenSecondExecFailsThenFirstExecFails(self):
+ """
+ Other connection-oriented errors might raise exceptions if they occur in
+ the middle of a transaction, but that should cause the error to be
+ caught, the transaction to be aborted, and the (closed) connection to be
+ recycled, where the next transaction that attempts to do anything with
+ it will encounter the error immediately and discover it needs to be
+ recycled.
+
+ It would be better if this behavior were invisible, but that could only
+ be accomplished with more precise database exceptions. We may come up
+ with support in the future for more precisely identifying exceptions,
+ but I{unknown} exceptions should continue to be treated in this manner,
+ relaying the exception back to application code but attempting a
+ re-connection on the next try.
+ """
+ txn = self.pool.connection()
+ [[[counter, echo]]] = resultOf(txn.execSQL("hello, world!", []))
+ self.factory.connections[0].executeWillFail(ZeroDivisionError)
+ [f] = resultOf(txn.execSQL("divide by zero", []))
+ f.trap(ZeroDivisionError)
+ self.assertEquals(self.factory.connections[0].executions, 2)
+ # Reconnection should work exactly as before.
+ self.assertEquals(self.factory.connections[0].closed, False)
+ # Application code has to roll back its transaction at this point, since
+ # it failed (and we don't necessarily know why it failed: not enough
+ # information).
+ txn.abort()
+ self.factory.connections[0].executions = 0 # re-set for next test
+ self.assertEquals(len(self.factory.connections), 1)
+ self.test_reConnectWhenFirstExecFails()
+
+
+ def test_disconnectOnFailedRollback(self):
+ """
+ When C{rollback} fails for any reason on a connection object, then we
+ don't know what state it's in. Most likely, it's already been
+ disconnected, so the connection should be closed and the transaction
+ de-pooled instead of recycled.
+
+ Also, a new connection will immediately be established to keep the pool
+ size the same.
+ """
+ txn = self.pool.connection()
+ self.factory.rollbackFail = True
+ [x] = resultOf(txn.abort())
+ # Abort does not propagate the error on, the transaction merely gets
+ # disposed of.
+ self.assertIdentical(x, None)
+ self.assertEquals(len(self.pool._free), 1)
+ self.assertNotIn(txn._baseTxn, self.pool._free)
+ self.assertEquals(self.pool._finishing, [])
+ self.assertEquals(len(self.factory.connections), 2)
+ self.assertEquals(self.factory.connections[0].closed, True)
+ self.assertEquals(self.factory.connections[1].closed, False)
+ self.assertEquals(len(self.flushLoggedErrors(RollbackFail)), 1)
+
+
+ def test_exceptionPropagatesFailedCommit(self):
+ """
+ A failed C{rollback} is fine (the premature death of the connection
+ without C{commit} means that the changes are surely gone), but a failed
+ C{commit} has to be relayed to client code, since that actually means
+ some changes didn't hit the database.
+ """
+ txn = self.pool.connection()
+ self.factory.commitFail = True
+ [x] = resultOf(txn.commit())
+ x.trap(CommitFail)
+ self.assertEquals(len(self.pool._free), 1)
+ self.assertNotIn(txn._baseTxn, self.pool._free)
+ self.assertEquals(self.pool._finishing, [])
+ self.assertEquals(len(self.factory.connections), 2)
+ self.assertEquals(self.factory.connections[0].closed, True)
+ self.assertEquals(self.factory.connections[1].closed, False)
+
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py
===================================================================
--- CalendarServer/trunk/twext/enterprise/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,61 +0,0 @@
-
-##
-# Copyright (c) 2010 Apple Inc. All 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 for dealing with different databases.
-"""
-
-from datetime import datetime
-from twistedcaldav.dateops import SQL_TIMESTAMP_FORMAT
-
-def mapOracleOutputType(column):
- """
- Map a single output value from cx_Oracle based on some rules and
- expectations that we have based on the pgdb bindings.
-
- @param column: a single value from a column.
-
- @return: a converted value based on the type of the input; oracle CLOBs and
- datetime timestamps will be converted to strings, all other types will
- be left alone.
- """
- if hasattr(column, 'read'):
- # Try to detect large objects and format convert them to
- # strings on the fly. We need to do this as we read each
- # row, due to the issue described here -
- # http://cx-oracle.sourceforge.net/html/lob.html - in
- # particular, the part where it says "In particular, do not
- # use the fetchall() method".
- return column.read()
- elif isinstance(column, datetime):
- # cx_Oracle properly maps the type of timestamps to datetime
- # objects. However, our code is mostly written against
- # PyGreSQL, which just emits strings as results and expects
- # to have to convert them itself.. Since it's easier to
- # just detect the datetimes and stringify them, for now
- # we'll do that.
- return column.strftime(SQL_TIMESTAMP_FORMAT)
- elif isinstance(column, float):
- if int(column) == column:
- return int(column)
- else:
- return column
- else:
- return column
-
-
-
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py (from rev 7192, CalendarServer/trunk/twext/enterprise/util.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/enterprise/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,61 @@
+
+##
+# Copyright (c) 2010 Apple Inc. All 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 for dealing with different databases.
+"""
+
+from datetime import datetime
+from twistedcaldav.dateops import SQL_TIMESTAMP_FORMAT
+
+def mapOracleOutputType(column):
+ """
+ Map a single output value from cx_Oracle based on some rules and
+ expectations that we have based on the pgdb bindings.
+
+ @param column: a single value from a column.
+
+ @return: a converted value based on the type of the input; oracle CLOBs and
+ datetime timestamps will be converted to strings, all other types will
+ be left alone.
+ """
+ if hasattr(column, 'read'):
+ # Try to detect large objects and format convert them to
+ # strings on the fly. We need to do this as we read each
+ # row, due to the issue described here -
+ # http://cx-oracle.sourceforge.net/html/lob.html - in
+ # particular, the part where it says "In particular, do not
+ # use the fetchall() method".
+ return column.read()
+ elif isinstance(column, datetime):
+ # cx_Oracle properly maps the type of timestamps to datetime
+ # objects. However, our code is mostly written against
+ # PyGreSQL, which just emits strings as results and expects
+ # to have to convert them itself.. Since it's easier to
+ # just detect the datetimes and stringify them, for now
+ # we'll do that.
+ return column.strftime(SQL_TIMESTAMP_FORMAT)
+ elif isinstance(column, float):
+ if int(column) == column:
+ return int(column)
+ else:
+ return column
+ else:
+ return column
+
+
+
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/internet/threadutils.py (from rev 7192, CalendarServer/trunk/twext/internet/threadutils.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/internet/threadutils.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/internet/threadutils.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,111 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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 sys
+from Queue import Queue
+
+
+from twisted.python.failure import Failure
+from twisted.internet.defer import Deferred
+
+
+_DONE = object()
+
+_STATE_STOPPED = 'STOPPED'
+_STATE_RUNNING = 'RUNNING'
+_STATE_STOPPING = 'STOPPING'
+
+class ThreadHolder(object):
+ """
+ A queue which will hold a reactor threadpool thread open until all of the
+ work in that queue is done.
+ """
+
+ def __init__(self, reactor):
+ self._reactor = reactor
+ self._state = _STATE_STOPPED
+ self._stopper = None
+ self._q = None
+
+
+ def _run(self):
+ """
+ Worker function which runs in a non-reactor thread.
+ """
+ while True:
+ work = self._q.get()
+ if work is _DONE:
+ def finishStopping():
+ self._state = _STATE_STOPPED
+ self._q = None
+ s = self._stopper
+ self._stopper = None
+ s.callback(None)
+ self._reactor.callFromThread(finishStopping)
+ return
+ self._oneWorkUnit(*work)
+
+
+ def _oneWorkUnit(self, deferred, instruction):
+ try:
+ result = instruction()
+ except:
+ etype, evalue, etb = sys.exc_info()
+ def relayFailure():
+ f = Failure(evalue, etype, etb)
+ deferred.errback(f)
+ self._reactor.callFromThread(relayFailure)
+ else:
+ self._reactor.callFromThread(deferred.callback, result)
+
+
+ def submit(self, work):
+ """
+ Submit some work to be run.
+
+ @param work: a 0-argument callable, which will be run in a thread.
+
+ @return: L{Deferred} that fires with the result of L{work}
+ """
+ d = Deferred()
+ self._q.put((d, work))
+ return d
+
+
+ def start(self):
+ """
+ Start this thing, if it's stopped.
+ """
+ if self._state != _STATE_STOPPED:
+ raise RuntimeError("Not stopped.")
+ self._state = _STATE_RUNNING
+ self._q = Queue(0)
+ self._reactor.callInThread(self._run)
+
+
+ def stop(self):
+ """
+ Stop this thing and release its thread, if it's running.
+ """
+ if self._state != _STATE_RUNNING:
+ raise RuntimeError("Not running.")
+ s = self._stopper = Deferred()
+ self._state = _STATE_STOPPING
+ self._q.put(_DONE)
+ return s
+
+
+
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/python/clsprop.py (from rev 7192, CalendarServer/trunk/twext/python/clsprop.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/python/clsprop.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/python/clsprop.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,41 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+"""
+A small utility for defining static class properties.
+"""
+
+class classproperty(object):
+ """
+ Decorator for a method that wants to return a static class property. The
+ decorated method will only be invoked once, for each class, and that value
+ will be returned for that class.
+ """
+
+ def __init__(self, thunk):
+ self.thunk = thunk
+ self._classcache = {}
+
+
+ def __get__(self, instance, owner):
+ cc = self._classcache
+ if owner in cc:
+ cached = cc[owner]
+ else:
+ cached = self.thunk(owner)
+ cc[owner] = cached
+ return cached
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/http.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/http.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/http.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -79,8 +79,9 @@
error.namespace = xml_namespace
error.name = xml_name
- if description:
- output = davxml.Error(error, davxml.ErrorDescription(description)).toxml()
+ self.description = description
+ if self.description:
+ output = davxml.Error(error, davxml.ErrorDescription(self.description)).toxml()
else:
output = davxml.Error(error).toxml()
@@ -337,7 +338,7 @@
def messageForFailure(failure):
if failure.check(HTTPError):
if isinstance(failure.value.response, ErrorResponse):
- return None
- if isinstance(failure.value.response, StatusResponse):
return failure.value.response.description
+ elif isinstance(failure.value.response, StatusResponse):
+ return failure.value.response.description
return str(failure)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/proppatch.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/proppatch.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/proppatch.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twext.web2.dav.test.test_prop.PROP.test_PROPPATCH -*-
##
-# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2005-2011 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
@@ -47,7 +47,7 @@
Respond to a PROPPATCH request. (RFC 2518, section 8.2)
"""
if not self.exists():
- log.err("File not found: %s" % (self.path,))
+ log.err("File not found: %s" % (self,))
raise HTTPError(responsecode.NOT_FOUND)
x = waitForDeferred(self.authorize(request, (davxml.WriteProperties(),)))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/put_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/put_common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/dav/method/put_common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -234,7 +234,10 @@
diff_size = new_dest_size - old_dest_size
if diff_size >= destquota[0]:
log.err("Over quota: available %d, need %d" % (destquota[0], diff_size))
- raise HTTPError(ErrorResponse(responsecode.INSUFFICIENT_STORAGE_SPACE, (dav_namespace, "quota-not-exceeded")))
+ raise HTTPError(ErrorResponse(
+ responsecode.INSUFFICIENT_STORAGE_SPACE,
+ (dav_namespace, "quota-not-exceeded")
+ ))
d = waitForDeferred(destination.quotaSizeAdjust(request, diff_size))
yield d
d.getResult()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/metafd.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/metafd.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twext/web2/metafd.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -208,7 +208,7 @@
# If load has indeed decreased (i.e. in any case except 'a new,
# idle process replaced an old, idle process'), then start
# listening again.
- if result < previousStatus:
+ if result < previousStatus and self.running:
for f in self.factories:
f.myServer.myPort.startReading()
else:
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/cache.py (from rev 7192, CalendarServer/trunk/twistedcaldav/cache.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/cache.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/cache.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,460 @@
+##
+# Copyright (c) 2008-2011 Apple Inc. All 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 cPickle
+import hashlib
+import uuid
+
+from zope.interface import implements
+
+from twisted.internet.defer import succeed, maybeDeferred, inlineCallbacks,\
+ returnValue
+from twext.web2.dav.util import allDataFromStream
+from twext.web2.http import Response
+from twext.web2.iweb import IResource
+from twext.web2.stream import MemoryStream
+
+from twext.python.log import LoggingMixIn
+
+from twistedcaldav.memcachepool import CachePoolUserMixIn, defaultCachePool
+from twistedcaldav.config import config
+
+"""
+The basic principals of the PROPFIND cache are this:
+
+(1) In RootResource.locateChild we "intercept" request processing at a very early stage (before traversing the resource
+hierarchy for the request URI). If the request is a PROPFIND we check to see whether a cache entry exists and if so immediately
+return that. If no cache entry exists, normal PROPFIND processing occurs.
+
+(2) The PropfindCacheMixin class is mixed into calendar/address book homes. That causes all valid PROPFIND responses to be
+cached, and also provides a cache invalidation api to allow signaling of changes that need to invalidate the cache. The main
+and child resources need to cause that api to be called when appropriate changes occur.
+
+(3) The response cache entries consist of a key, derived from the request only, and a value. The value contains the set of tokens
+in effect at the time the entry was cached, together with the response that was cached. The tokens are:
+
+ - principalToken - a token for the authenticated user's principal
+ - directoryToken - a hash of that principal's directory record
+ - uriToken - a token for the request uri
+ - childTokens - tokens for any child resources the request uri depends on (for depth:1)
+
+ The current principalToken, uriToken and childTokens values are themselves stored in the cache using the key prefix 'cacheToken:'.
+When the 'changeCache' api is called the cached value for the matching token is updated.
+
+(4) When a request is being checked in the cache, the response cache entry key is first computed and any value extracted. The
+tokens in the value are then checked against the current set of tokens in the cache. If there is any mismatch between tokens, the
+cache entry is considered invalid and the cached response is not returned. If everything matches up, the cached response is returned
+to the caller and ultimately sent directly back to the client.
+
+(5) Because of shared calendars/address books that can affect the calendar/address book homes of several different users at once, we
+need to keep track of the separate childTokens for each child resource. The tokens for shared resources are keyed of the sharer's uri,
+so sharee's homes use that token. That way a single token for all shared instances is used and changed just once.
+
+(6) Principals and directory records need to be included as tokens to take account of variations in access control based on who
+is making the request (including proxy state changes etc).
+
+"""
+
+class DisabledCacheNotifier(object):
+ def __init__(self, *args, **kwargs):
+ pass
+
+ def changed(self):
+ return succeed(None)
+
+
+class DisabledCache(object):
+ def getResponseForRequest(self, request):
+ return succeed(None)
+
+ def cacheResponseForRequest(self, request, response):
+ return succeed(response)
+
+
+class URINotFoundException(Exception):
+ def __init__(self, uri):
+ self.uri = uri
+
+
+ def __repr__(self):
+ return "%s: Could not find URI %r" % (
+ self.__class__.__name__,
+ self.uri)
+
+
+class MemcacheChangeNotifier(LoggingMixIn, CachePoolUserMixIn):
+
+ def __init__(self, resource, cachePool=None, cacheHandle="Default"):
+ self._resource = resource
+ self._cachePool = cachePool
+ self._cachePoolHandle = cacheHandle
+
+ def _newCacheToken(self):
+ return str(uuid.uuid4())
+
+ def changed(self):
+ """
+ Change the cache token for a resource
+
+ return: A L{Deferred} that fires when the token has been changed.
+ """
+ url = self._resource.url()
+
+ self.log_debug("Changing Cache Token for %r" % (url,))
+ return self.getCachePool().set(
+ 'cacheToken:%s' % (url,),
+ self._newCacheToken(), expireTime=config.ResponseCacheTimeout*60)
+
+class BaseResponseCache(LoggingMixIn):
+ """
+ A base class which provides some common operations
+ """
+ def _principalURI(self, principal):
+ return str(principal.children[0])
+
+
+ def _uriNotFound(self, f, uri):
+ f.trap(AttributeError)
+ raise URINotFoundException(uri)
+
+
+ def _getRecordForURI(self, uri, request):
+ """
+ Return the directory record for the specified principal uri.
+ """
+ def _getRecord(resrc):
+ if hasattr(resrc, 'record'):
+ return resrc.record
+
+ try:
+ return request.locateResource(uri).addCallback(
+ _getRecord).addErrback(self._uriNotFound, uri)
+ except AssertionError:
+ raise URINotFoundException(uri)
+
+
+ def _canonicalizeURIForRequest(self, uri, request):
+ """
+ Always use canonicalized forms of the URIs for caching (i.e. __uids__ paths).
+
+ Do this without calling locateResource which may cause a query on the store.
+ """
+
+ uribits = uri.split("/")
+ if len(uribits) > 1 and uribits[1] in ("principals", "calendars", "addressbooks"):
+ if uribits[2] == "__uids__":
+ return succeed(uri)
+ else:
+ recordType = uribits[2]
+ recordName = uribits[3]
+ directory = request.site.resource.getDirectory()
+ record = directory.recordWithShortName(recordType, recordName)
+ if record is not None:
+ uribits[2] = "__uids__"
+ uribits[3] = record.uid
+ return succeed("/".join(uribits))
+
+
+ # Fall back to the locateResource approach
+ try:
+ return request.locateResource(uri).addCallback(
+ lambda resrc: resrc.url()).addErrback(self._uriNotFound, uri)
+ except AssertionError:
+ raise URINotFoundException(uri)
+
+
+ def _getURIs(self, request):
+ """
+ Get principal and resource URIs from the request.
+ """
+ def _getSecondURI(rURI):
+ return self._canonicalizeURIForRequest(
+ self._principalURI(request.authnUser),
+ request).addCallback(lambda pURI: (pURI, rURI))
+
+ d = self._canonicalizeURIForRequest(request.uri, request)
+ d.addCallback(_getSecondURI)
+
+ return d
+
+ @inlineCallbacks
+ def _requestKey(self, request):
+ """
+ Get a key for this request. This depends on the method, Depth: header, authn user principal,
+ request uri and a hash of the request body (the body being normalized for property order).
+ """
+ requestBody = (yield allDataFromStream(request.stream))
+ if requestBody is not None:
+ # Give it back to the request so it can be read again
+ request.stream = MemoryStream(requestBody)
+ request.stream.doStartReading = None
+
+ # Normalize the property order by doing a "dumb" sort on lines
+ requestLines = requestBody.splitlines()
+ requestLines.sort()
+ requestBody = "\n".join(requestLines)
+
+ request.cacheKey = (request.method,
+ self._principalURI(request.authnUser),
+ request.uri,
+ request.headers.getHeader('depth'),
+ hash(requestBody))
+
+ returnValue(request.cacheKey)
+
+
+ def _getResponseBody(self, key, response):
+ d1 = allDataFromStream(response.stream)
+ d1.addCallback(lambda responseBody: (key, responseBody))
+ return d1
+
+
+class MemcacheResponseCache(BaseResponseCache, CachePoolUserMixIn):
+ def __init__(self, docroot, cachePool=None):
+ self._docroot = docroot
+ self._cachePool = cachePool
+
+
+ def _tokenForURI(self, uri, cachePoolHandle=None):
+ """
+ Get the current token for a particular URI.
+ """
+
+ if cachePoolHandle:
+ return defaultCachePool(cachePoolHandle).get('cacheToken:%s' % (uri,))
+ else:
+ return self.getCachePool().get('cacheToken:%s' % (uri,))
+
+ @inlineCallbacks
+ def _tokensForChildren(self, rURI, request):
+ """
+ Create a dict of child resource tokens for any "recorded" during this request in the childCacheURIs attribute.
+ """
+
+ if hasattr(request, "childCacheURIs"):
+ tokens = dict([(uri, (yield self._tokenForURI(uri)),) for uri in request.childCacheURIs])
+ returnValue(tokens)
+ else:
+ returnValue({})
+
+ @inlineCallbacks
+ def _getTokens(self, request):
+ """
+ Tokens are a principal token, directory record token, resource token and list
+ of child resource tokens. A change to any one of those will cause cache invalidation.
+ """
+ tokens = []
+ pURI, rURI = (yield self._getURIs(request))
+ tokens.append((yield self._tokenForURI(pURI, "PrincipalToken")))
+ tokens.append(hash((yield self._getRecordForURI(pURI, request))))
+ tokens.append((yield self._tokenForURI(rURI)))
+ tokens.append((yield self._tokensForChildren(rURI, request)))
+ returnValue(tokens)
+
+
+ @inlineCallbacks
+ def _hashedRequestKey(self, request):
+ """
+ Make a key for a response cache entry. This depends on various request parameters
+ (see _requestKey for details).
+ """
+ oldkey = (yield self._requestKey(request))
+ request.cacheKey = key = hashlib.md5(
+ ':'.join([str(t) for t in oldkey])).hexdigest()
+ self.log_debug("hashing key for get: %r to %r" % (oldkey, key))
+ returnValue(request.cacheKey)
+
+
+ @inlineCallbacks
+ def getResponseForRequest(self, request):
+ """
+ Try to match a request and a response cache entry. We first get the request key and match that, then pull
+ the cache entry and decompose it into tokens and response. We then compare the cached tokens with their current values.
+ If all match, we can return the cached response data.
+ """
+ try:
+ key = (yield self._hashedRequestKey(request))
+
+ self.log_debug("Checking cache for: %r" % (key,))
+ _ignore_flags, value = (yield self.getCachePool().get(key))
+
+ if value is None:
+ self.log_debug("Not in cache: %r" % (key,))
+ returnValue(None)
+
+ self.log_debug("Found in cache: %r = %r" % (key, value))
+
+ (principalToken, directoryToken, uriToken, childTokens, (code, headers, body)) = cPickle.loads(value)
+ currentTokens = (yield self._getTokens(request))
+
+ if currentTokens[0] != principalToken:
+ self.log_debug(
+ "Principal token doesn't match for %r: %r != %r" % (
+ request.cacheKey,
+ currentTokens[0],
+ principalToken))
+ returnValue(None)
+
+ if currentTokens[1] != directoryToken:
+ self.log_debug(
+ "Directory Record Token doesn't match for %r: %r != %r" % (
+ request.cacheKey,
+ currentTokens[1],
+ directoryToken))
+ returnValue(None)
+
+ if currentTokens[2] != uriToken:
+ self.log_debug(
+ "URI token doesn't match for %r: %r != %r" % (
+ request.cacheKey,
+ currentTokens[2],
+ uriToken))
+ returnValue(None)
+
+ for childuri, token in childTokens.items():
+ currentToken = (yield self._tokenForURI(childuri))
+ if currentToken != token:
+ self.log_debug(
+ "Child %s token doesn't match for %r: %r != %r" % (
+ childuri,
+ request.cacheKey,
+ currentToken,
+ token))
+ returnValue(None)
+
+ r = Response(code,
+ stream=MemoryStream(body))
+
+ for key, value in headers.iteritems():
+ r.headers.setRawHeaders(key, value)
+
+ returnValue(r)
+
+ except URINotFoundException, e:
+ self.log_debug("Could not locate URI: %r" % (e,))
+ returnValue(None)
+
+ @inlineCallbacks
+ def cacheResponseForRequest(self, request, response):
+ """
+ Given a request and its response, make a response cache entry that encodes the response and various
+ cache tokens. Later, when getResponseForRequest is called we retrieve this entry and compare the
+ old cache tokens with the current ones. If any have changed the response cache entry is removed.
+ """
+ try:
+ if hasattr(request, 'cacheKey'):
+ key = request.cacheKey
+ else:
+ key = (yield self._hashedRequestKey(request))
+
+ key, responseBody = (yield self._getResponseBody(key, response))
+
+ response.headers.removeHeader('date')
+ response.stream = MemoryStream(responseBody)
+ pToken, dToken, uToken, cTokens = (yield self._getTokens(request))
+
+ cacheEntry = cPickle.dumps((
+ pToken,
+ dToken,
+ uToken,
+ cTokens,
+ (
+ response.code,
+ dict(list(response.headers.getAllRawHeaders())),
+ responseBody
+ )
+ ))
+ self.log_debug("Adding to cache: %r = %r" % (key, cacheEntry))
+ yield self.getCachePool().set(key, cacheEntry,
+ expireTime=config.ResponseCacheTimeout*60)
+
+ except URINotFoundException, e:
+ self.log_debug("Could not locate URI: %r" % (e,))
+
+ returnValue(response)
+
+
+class _CachedResponseResource(object):
+ implements(IResource)
+
+ def __init__(self, response):
+ self._response = response
+
+ def renderHTTP(self, request):
+ if not hasattr(request, "extendedLogItems"):
+ request.extendedLogItems = {}
+ request.extendedLogItems["cached"] = "1"
+ return self._response
+
+ def locateChild(self, request, segments):
+ return self, []
+
+
+class PropfindCacheMixin(object):
+ """
+ A mixin that causes a resource's PROPFIND response to be cached. It also adds an api to change the
+ resource's uriToken - this must be used whenever something changes to cause the cache to be invalidated.
+ """
+ def renderHTTP(self, request):
+ def _cacheResponse(responseCache, response):
+ return responseCache.cacheResponseForRequest(request, response)
+
+ def _getResponseCache(response):
+ d1 = request.locateResource("/")
+ d1.addCallback(lambda resource: resource.responseCache)
+ d1.addCallback(_cacheResponse, response)
+ return d1
+
+ d = maybeDeferred(super(PropfindCacheMixin, self).renderHTTP, request)
+
+ if request.method == 'PROPFIND':
+ d.addCallback(_getResponseCache)
+ return d
+
+ def changeCache(self):
+ if hasattr(self, 'cacheNotifier'):
+ return self.cacheNotifier.changed()
+ else:
+ self.log_debug("%r does not have a cacheNotifier but was changed" % (self,))
+
+class ResponseCacheMixin(object):
+ """
+ This is a mixin for a child resource that does not itself cache PROPFINDs, but needs to invalidate a parent
+ resource's PROPFIND cache by virtue of a change to its own childToken.
+ """
+
+ def changeCache(self):
+ if hasattr(self, 'cacheNotifier'):
+ return self.cacheNotifier.changed()
+ else:
+ self.log_debug("%r does not have a cacheNotifier but was changed" % (self,))
+
+class CacheStoreNotifier(object):
+
+ def __init__(self, resource):
+ self.resource = resource
+
+ def notify(self, op="update"):
+ self.resource.changeCache()
+
+ def clone(self, label="default", id=None):
+ return self
+
+ def getID(self, label="default"):
+ return None
+
+ def nodeName(self, label="default"):
+ return succeed(None)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/customxml.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/customxml.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/customxml.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -37,7 +37,6 @@
import datetime
calendarserver_namespace = "http://calendarserver.org/ns/"
-mobileme_namespace = "http://cal.me.com/_namespace/"
calendarserver_proxy_compliance = (
"calendar-proxy",
@@ -225,6 +224,24 @@
return found
+class MaxCollections (davxml.WebDAVTextElement):
+ """
+ Maximum number of child collections in a home collection
+ """
+ namespace = calendarserver_namespace
+ name = "max-collections"
+ hidden = True
+ protected = True
+
+class MaxResources (davxml.WebDAVTextElement):
+ """
+ Maximum number of child resources in a collection
+ """
+ namespace = calendarserver_namespace
+ name = "max-resources"
+ hidden = True
+ protected = True
+
class Timezones (davxml.WebDAVEmptyElement):
"""
Denotes a timezone service resource.
@@ -304,7 +321,7 @@
}
allowed_children = {
(calendarserver_namespace, "subscription-url") : (1, 1),
- (mobileme_namespace, "apsbundleid") : (1, 1),
+ (calendarserver_namespace, "apsbundleid") : (1, 1),
(calendarserver_namespace, "xmpp-server") : (1, 1),
(calendarserver_namespace, "xmpp-uri") : (1, 1),
}
@@ -317,7 +334,7 @@
allowed_children = { (davxml.dav_namespace, "href"): (0, 1) }
class PubSubAPSBundleIDProperty (davxml.WebDAVTextElement):
- namespace = mobileme_namespace
+ namespace = calendarserver_namespace
name = "apsbundleid"
protected = True
hidden = True
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dateops.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dateops.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dateops.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -54,6 +54,21 @@
else:
return datetime.datetime.fromordinal(dt.toordinal())
+def normalizeToUTC(dt):
+ """
+ Normalize a L{datetime.date} or L{datetime.datetime} object to UTC.
+ """
+ if not isinstance(dt, datetime.date):
+ raise TypeError("%r is not a datetime.date instance" % (dt,))
+
+ if isinstance(dt, datetime.datetime):
+ if dt.tzinfo is not None:
+ return dt.astimezone(utc)
+ else:
+ return dt.replace(tzinfo=utc)
+ else:
+ return datetime.datetime.fromordinal(dt.toordinal()).replace(tzinfo=utc)
+
def floatoffset(dt, tzinfo):
"""
Apply the timezone offset to the supplied time, then force tz to utc. This gives the local
@@ -223,12 +238,20 @@
return (start, end - start)
else:
return (start, end)
-
+
+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 datetimeMktime(dt):
assert isinstance(dt, datetime.date)
-
+
if dt.tzinfo is None:
dt.replace(tzinfo=utc)
return calendar.timegm(dt.utctimetuple())
-
\ No newline at end of file
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/aggregate.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/aggregate.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/aggregate.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -139,6 +139,8 @@
return self._queryAll("recordWithUID", uid)
+ recordWithGUID = recordWithUID
+
def recordWithAuthID(self, authID):
return self._queryAll("recordWithAuthID", authID)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/appleopendirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/appleopendirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,3 +1,4 @@
+# -*- test-case-name: twistedcaldav.directory.test.test_opendirectory -*-
##
# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
#
@@ -54,7 +55,7 @@
return "<%s %r: %r>" % (self.__class__.__name__, self.realmName, self.node)
- def __init__(self, params, dosetup=True):
+ def __init__(self, params):
"""
@param params: a dictionary containing the following keys:
node: an OpenDirectory node name to bind to.
@@ -64,15 +65,14 @@
restrictToGroup: C{str} guid or name of group used to
restrict enabled users.
cacheTimeout: C{int} number of minutes before cache is invalidated.
- @param dosetup: if C{True} then the directory records are initialized,
- if C{False} they are not.
- This should only be set to C{False} when doing unit tests.
+ negativeCache: C{False} cache the fact that a record wasn't found
"""
defaults = {
'node' : '/Search',
'restrictEnabledRecords' : False,
'restrictToGroup' : '',
- 'cacheTimeout' : 30,
+ 'cacheTimeout' : 1,
+ 'negativeCaching' : False,
'recordTypes' : (
self.recordType_users,
self.recordType_groups,
@@ -83,7 +83,8 @@
self._recordTypes = params['recordTypes']
- super(OpenDirectoryService, self).__init__(params['cacheTimeout'])
+ super(OpenDirectoryService, self).__init__(params['cacheTimeout'],
+ params['negativeCaching'])
self.odModule = namedModule(config.OpenDirectoryModule)
@@ -105,8 +106,6 @@
else:
self.restrictToGUID = True
self.restrictedTimestamp = 0
- self._records = {}
- self._delayedCalls = set()
@property
def restrictedGUIDs(self):
@@ -632,8 +631,7 @@
listRecordTypes,
attrs,
))
- results.extend(
- lookupMethod(
+ lookedUp = lookupMethod(
self.directory,
queryattr,
indexKey,
@@ -642,7 +640,7 @@
listRecordTypes,
attrs,
)
- )
+ results.extend(lookedUp)
except self.odModule.ODError, ex:
if ex.message[1] == -14987:
@@ -748,6 +746,8 @@
record.enabledForCalendaring = False
record.enabledForAddressBooks = False
+ record.applySACLs()
+
if record.enabledForCalendaring:
enabledRecords.append(record)
else:
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/augment.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/augment.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/augment.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -208,11 +208,15 @@
XMLFile based augment database implementation.
"""
- def __init__(self, xmlFiles, cacheTimeout=30):
+ def __init__(self, xmlFiles, statSeconds=15):
super(AugmentXMLDB, self).__init__()
self.xmlFiles = [fullServerPath(config.DataRoot, path) for path in xmlFiles]
- self.cacheTimeout = cacheTimeout * 60 # Value is mins we want secs
+ self.xmlFileStats = { }
+ for path in self.xmlFiles:
+ self.xmlFileStats[path] = (0, 0) # mtime, size
+
+ self.statSeconds = statSeconds # Don't stat more often than this value
self.lastCached = 0
self.db = {}
@@ -246,7 +250,7 @@
"""
# May need to re-cache
- if self.lastCached + self.cacheTimeout <= time.time():
+ if time.time() - self.lastCached > self.statSeconds:
self.refresh()
return succeed(self.db.get(uid))
@@ -433,6 +437,18 @@
self.removeAugmentRecords(self.db.keys())
return succeed(None)
+ def _shouldReparse(self, xmlFile):
+ """
+ Check to see whether the given file has been modified since we last
+ parsed it.
+ """
+ oldModTime, oldSize = self.xmlFileStats.get(xmlFile, (0, 0))
+ newModTime = os.path.getmtime(xmlFile)
+ newSize = os.path.getsize(xmlFile)
+ if (oldModTime != newModTime) or (oldSize != newSize):
+ return True
+ return False
+
def _parseXML(self):
"""
Parse self.xmlFiles into AugmentRecords.
@@ -446,8 +462,14 @@
allMissing = True
for xmlFile in self.xmlFiles:
if os.path.exists(xmlFile):
- # Creating a parser does the parse
- XMLAugmentsParser(xmlFile, results)
+ # Compare previously seen modification time and size of each
+ # xml file. If unchanged, skip.
+ if self._shouldReparse(xmlFile):
+ # Creating a parser does the parse
+ XMLAugmentsParser(xmlFile, results)
+ newModTime = os.path.getmtime(xmlFile)
+ newSize = os.path.getsize(xmlFile)
+ self.xmlFileStats[xmlFile] = (newModTime, newSize)
allMissing = False
if allMissing:
@@ -457,7 +479,7 @@
enabledForCalendaring=True,
enabledForAddressBooks=True,
)
-
+
return results
class AugmentADAPI(AugmentDB, AbstractADBAPIDatabase):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/cachingdirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/cachingdirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/cachingdirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -144,7 +144,8 @@
def __init__(
self,
- cacheTimeout=30,
+ cacheTimeout=1,
+ negativeCaching=False,
cacheClass=DictRecordTypeCache,
):
"""
@@ -152,6 +153,7 @@
"""
self.cacheTimeout = cacheTimeout * 60
+ self.negativeCaching = negativeCaching
self.cacheClass = cacheClass
self._initCaches()
@@ -254,7 +256,7 @@
recordWithUID = recordWithGUID
- def _lookupRecord(self, recordTypes, indexType, indexKey, cacheOnMiss=True):
+ def _lookupRecord(self, recordTypes, indexType, indexKey):
if recordTypes is None:
recordTypes = self.recordTypes()
@@ -285,8 +287,8 @@
if record:
return record
- if cacheOnMiss:
-
+ if self.negativeCaching:
+
# Check negative cache (take cache entry timeout into account)
try:
disabledTime = self._disabledKeys[indexType][indexKey]
@@ -294,26 +296,28 @@
return None
except KeyError:
pass
-
- # Check memcache
- if config.Memcached.Pools.Default.ClientEnabled:
- key = "dir|%s|%s|%s|%s" % (self.baseGUID, indexType, indexKey,
- "|".join(self.recordTypes()))
- self.log_debug("Memcache: checking %s" % (key,))
- try:
- record = self.memcacheGet(key)
- except DirectoryMemcacheError:
- self.log_error("Memcache: failed to get %s" % (key,))
- record = None
+ # Check memcache
+ if config.Memcached.Pools.Default.ClientEnabled:
+ key = "dir|%s|%s|%s|%s" % (self.baseGUID, indexType, indexKey,
+ "|".join(self.recordTypes()))
+ self.log_debug("Memcache: checking %s" % (key,))
- if record is None:
- self.log_debug("Memcache: miss %s" % (key,))
- else:
- self.log_debug("Memcache: hit %s" % (key,))
- self.recordCacheForType(record.recordType).addRecord(record, indexType, indexKey, useMemcache=False)
- return record
+ try:
+ record = self.memcacheGet(key)
+ except DirectoryMemcacheError:
+ self.log_error("Memcache: failed to get %s" % (key,))
+ record = None
+ if record is None:
+ self.log_debug("Memcache: miss %s" % (key,))
+ else:
+ self.log_debug("Memcache: hit %s" % (key,))
+ self.recordCacheForType(record.recordType).addRecord(record, indexType, indexKey, useMemcache=False)
+ return record
+
+ if self.negativeCaching:
+
# Check negative memcache
try:
val = self.memcacheGet("-%s" % (key,))
@@ -325,16 +329,18 @@
self._disabledKeys[indexType][indexKey] = time.time()
return None
- # Try query
- self.log_debug("Faulting record for attribute '%s' with value '%s'" % (indexType, indexKey,))
- self.queryDirectory(recordTypes, indexType, indexKey)
-
- # Now try again from cache
- record = lookup()
- if record:
- self.log_debug("Found record for attribute '%s' with value '%s'" % (indexType, indexKey,))
- return record
+ # Try query
+ self.log_debug("Faulting record for attribute '%s' with value '%s'" % (indexType, indexKey,))
+ self.queryDirectory(recordTypes, indexType, indexKey)
+
+ # Now try again from cache
+ record = lookup()
+ if record:
+ self.log_debug("Found record for attribute '%s' with value '%s'" % (indexType, indexKey,))
+ return record
+ if self.negativeCaching:
+
# Add to negative cache with timestamp
self.log_debug("Failed to fault record for attribute '%s' with value '%s'" % (indexType, indexKey,))
self._disabledKeys[indexType][indexKey] = time.time()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/calendaruserproxy.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/calendaruserproxy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -193,9 +193,22 @@
principals.append(principal)
newUIDs.add(principal.principalUID())
+ # Get the old set of UIDs
+ oldUIDs = (yield self._index().getMembers(self.uid))
+
# Change membership
yield self.setGroupMemberSetPrincipals(principals)
-
+
+ # Invalidate the primary principal's cache, and any principal's whose
+ # membership status changed
+ yield self.parent.cacheNotifier.changed()
+
+ changedUIDs = newUIDs.symmetric_difference(oldUIDs)
+ for uid in changedUIDs:
+ principal = self.pcollection.principalForUID(uid)
+ if principal:
+ yield principal.cacheNotifier.changed()
+
returnValue(True)
def setGroupMemberSetPrincipals(self, principals):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/digest.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/digest.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/digest.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -163,8 +163,8 @@
if result:
raise AssertionError("nonce value already cached in credentials database: %s" % (c,))
- # The database record is a tuple of (client ip, nonce-count, timestamp)
- yield self.db.set(c, (str(peer.host), 0, time.time()))
+ # The database record is a tuple of (nonce-count, timestamp)
+ yield self.db.set(c, (0, time.time()))
challenge = {
'nonce': c,
@@ -263,20 +263,14 @@
"""
nonce = auth.get('nonce')
- clientip = request.forwarded_for if hasattr(request, "forwarded_for") else str(request.remoteAddr.host)
nonce_count = auth.get('nc')
# First check we have this nonce
result = (yield self.db.get(nonce))
if result is None:
raise error.LoginFailed('Invalid nonce value: %s' % (nonce,))
- db_clientip, db_nonce_count, db_timestamp = result
+ db_nonce_count, db_timestamp = result
- # Next check client ip
- if db_clientip != clientip:
- yield self._invalidate(nonce)
- raise error.LoginFailed('Client IPs do not match: %s and %s' % (clientip, db_clientip,))
-
# cnonce and nonce-count MUST be present if qop is present
if auth.get('qop') is not None:
if auth.get('cnonce') is None:
@@ -295,7 +289,7 @@
if nonce_count != db_nonce_count + 1:
yield self._invalidate(nonce)
raise error.LoginFailed('nonce-count value out of sequence: %s should be one more than %s' % (nonce_count, db_nonce_count,))
- yield self.db.set(nonce, (db_clientip, nonce_count, db_timestamp))
+ yield self.db.set(nonce, (nonce_count, db_timestamp))
else:
# When not using qop the stored nonce-count must always be zero.
# i.e. we can't allow a qop auth then a non-qop auth with the same nonce
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/directory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/directory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -435,13 +435,14 @@
self.enabledForAddressBooks = augment.enabledForAddressBooks
self.autoSchedule = augment.autoSchedule
- if self.enabledForCalendaring and self.recordType == self.service.recordType_groups:
+ if (self.enabledForCalendaring or self.enabledForAddressBooks) and self.recordType == self.service.recordType_groups:
self.enabledForCalendaring = False
+ self.enabledForAddressBooks = False
# For augment records cloned from the Default augment record,
# don't emit this message:
if not augment.clonedFromDefault:
- self.log_error("Group '%s(%s)' cannot be enabled for calendaring" % (self.guid, self.shortNames[0],))
+ self.log_error("Group '%s(%s)' cannot be enabled for calendaring or address books" % (self.guid, self.shortNames[0],))
else:
# Groups are by default always enabled
@@ -449,6 +450,24 @@
self.hostedAt = ""
self.enabledForCalendaring = False
+
+ def applySACLs(self):
+ """
+ Disable calendaring and addressbooks as dictated by SACLs
+ """
+
+ if config.EnableSACLs and self.CheckSACL:
+ username = self.shortNames[0]
+ if self.CheckSACL(username, "calendar") != 0:
+ self.log_debug("%s is not enabled for calendaring due to SACL"
+ % (username,))
+ self.enabledForCalendaring = False
+ if self.CheckSACL(username, "addressbook") != 0:
+ self.log_debug("%s is not enabled for addressbooks due to SACL"
+ % (username,))
+ self.enabledForAddressBooks = False
+
+
def members(self):
return ()
@@ -499,3 +518,13 @@
def __init__(self, recordType):
DirectoryError.__init__(self, "Invalid record type: %s" % (recordType,))
self.recordType = recordType
+
+
+# So CheckSACL will be parameterized
+# We do this after DirectoryRecord is defined
+try:
+ from calendarserver.platform.darwin._sacl import CheckSACL
+ DirectoryRecord.CheckSACL = CheckSACL
+except ImportError:
+ DirectoryRecord.CheckSACL = None
+
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/ldapdirectory.py (from rev 7192, CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/ldapdirectory.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/ldapdirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,826 @@
+##
+# Copyright (c) 2008-2009 Aymeric Augustin. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All 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.
+##
+
+"""
+LDAP directory service implementation. Supports principal-property-search
+and restrictToGroup features.
+
+The following attributes from standard schemas are used:
+* Core (RFC 4519):
+ . cn | commonName
+ . givenName
+ . member (if not using NIS groups)
+ . ou
+ . sn | surname
+ . uid | userid (if using NIS groups)
+* COSINE (RFC 4524):
+ . mail
+* InetOrgPerson (RFC 2798):
+ . displayName (if cn is unavailable)
+* NIS (RFC):
+ . gecos (if cn is unavailable)
+ . memberUid (if using NIS groups)
+"""
+
+__all__ = [
+ "LdapDirectoryService",
+]
+
+import ldap
+try:
+ # Note: PAM support is currently untested
+ import PAM
+ pamAvailable = True
+except ImportError:
+ pamAvailable = False
+
+import time
+from twisted.cred.credentials import UsernamePassword
+from twistedcaldav.directory.cachingdirectory import (CachingDirectoryService,
+ CachingDirectoryRecord)
+from twistedcaldav.directory import augment
+from twistedcaldav.directory.directory import DirectoryConfigurationError
+from twisted.internet.defer import succeed
+
+class LdapDirectoryService(CachingDirectoryService):
+ """
+ LDAP based implementation of L{IDirectoryService}.
+ """
+ baseGUID = "5A871574-0C86-44EE-B11B-B9440C3DC4DD"
+
+ def __repr__(self):
+ return "<%s %r: %r>" % (self.__class__.__name__, self.realmName,
+ self.uri)
+
+ def __init__(self, params):
+ """
+ @param params: a dictionary containing the following keys:
+ cacheTimeout, realmName, uri, tls, tlsCACertFile, tlsCACertDir,
+ tlsRequireCert, crendentials, rdnSchema, groupSchema
+ """
+
+ defaults = {
+ "cacheTimeout": 1,
+ "negativeCaching": False,
+ "restrictEnabledRecords": False,
+ "restrictToGroup": "",
+ "recordTypes": ("users", "groups"),
+ "uri": "ldap://localhost/",
+ "tls": False,
+ "tlsCACertFile": None,
+ "tlsCACertDir": None,
+ "tlsRequireCert": None, # never, allow, try, demand, hard
+ "credentials": {
+ "dn": None,
+ "password": None,
+ },
+ "authMethod": "LDAP",
+ "rdnSchema": {
+ "base": "dc=example,dc=com",
+ "guidAttr": None,
+ "users": {
+ "rdn": "ou=People",
+ "attr": "uid", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "uid", # uniquely identifies user records
+ },
+ "groups": {
+ "rdn": "ou=Group",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies group records
+ },
+ "locations": {
+ "rdn": "ou=Locations",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies location records
+ },
+ "resources": {
+ "rdn": "ou=Resources",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies resource records
+ },
+ },
+ "groupSchema": {
+ "membersAttr": "member", # how members are specified
+ "nestedGroupsAttr": None, # how nested groups are specified
+ "memberIdAttr": None, # which attribute the above refer to
+ },
+ "attributeMapping": { # maps internal record names to LDAP
+ "fullName" : "cn",
+ "emailAddresses" : "mail",
+ "firstName" : "givenName",
+ "lastName" : "sn",
+ },
+ }
+ ignored = None
+ params = self.getParams(params, defaults, ignored)
+
+ self._recordTypes = params["recordTypes"]
+
+ super(LdapDirectoryService, self).__init__(params["cacheTimeout"],
+ params["negativeCaching"])
+
+ self.realmName = params["uri"]
+ self.uri = params["uri"]
+ self.tls = params["tls"]
+ self.tlsCACertFile = params["tlsCACertFile"]
+ self.tlsCACertDir = params["tlsCACertDir"]
+ self.tlsRequireCert = params["tlsRequireCert"]
+ self.credentials = params["credentials"]
+ self.authMethod = params["authMethod"]
+ self.rdnSchema = params["rdnSchema"]
+ self.groupSchema = params["groupSchema"]
+ self.attributeMapping = params["attributeMapping"]
+
+ self.base = ldap.dn.str2dn(self.rdnSchema["base"])
+
+ # Certain attributes (such as entryUUID) may be hidden and not
+ # returned by default when queried for all attributes. Therefore it is
+ # necessary to explicitly pass all the possible attributes list
+ # for ldap searches
+ attrSet = set(["mail", "uid", "userid", "cn", "commonName",
+ "displayName", "gecos", "givenName", "sn", "surname"])
+ if self.rdnSchema["guidAttr"]:
+ attrSet.add(self.rdnSchema["guidAttr"])
+ for recordType in self.recordTypes():
+ if self.rdnSchema[recordType]["attr"]:
+ attrSet.add(self.rdnSchema[recordType]["attr"])
+ if self.groupSchema["membersAttr"]:
+ attrSet.add(self.groupSchema["membersAttr"])
+ if self.groupSchema["nestedGroupsAttr"]:
+ attrSet.add(self.groupSchema["nestedGroupsAttr"])
+ if self.groupSchema["memberIdAttr"]:
+ attrSet.add(self.groupSchema["memberIdAttr"])
+ self.attrList = list(attrSet)
+
+ self.typeRDNs = {}
+ for recordType in self.recordTypes():
+ self.typeRDNs[recordType] = ldap.dn.str2dn(
+ self.rdnSchema[recordType]["rdn"]
+ )
+
+ # Create LDAP connection
+ self.log_info("Connecting to LDAP %s" % (repr(self.uri),))
+
+ self.ldap = self.createLDAPConnection()
+ if self.credentials.get("dn", ""):
+ try:
+ self.log_info("Binding to LDAP %s" %
+ (repr(self.credentials.get("dn")),))
+ self.ldap.simple_bind_s(self.credentials.get("dn"),
+ self.credentials.get("password"))
+ except ldap.INVALID_CREDENTIALS:
+ msg = "Can't bind to LDAP %s: check credentials" % (self.uri,)
+ self.log_error(msg)
+ raise DirectoryConfigurationError(msg)
+
+ # Separate LDAP connection used solely for authenticating clients
+ self.authLDAP = None
+
+ # Restricting access by directory group
+ self.restrictEnabledRecords = params['restrictEnabledRecords']
+ self.restrictToGroup = params['restrictToGroup']
+ self.restrictedTimestamp = 0
+
+
+ def recordTypes(self):
+ return self._recordTypes
+
+
+ def createLDAPConnection(self):
+ """
+ Create and configure LDAP connection
+ """
+ cxn = ldap.ldapobject.ReconnectLDAPObject(self.uri)
+
+ if self.tlsCACertFile:
+ cxn.set_option(ldap.OPT_X_TLS_CACERTFILE, self.tlsCACertFile)
+ if self.tlsCACertDir:
+ cxn.set_option(ldap.OPT_X_TLS_CACERTDIR, self.tlsCACertDir)
+
+ if self.tlsRequireCert == "never":
+ cxn.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_NEVER)
+ elif self.tlsRequireCert == "allow":
+ cxn.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_ALLOW)
+ elif self.tlsRequireCert == "try":
+ cxn.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_TRY)
+ elif self.tlsRequireCert == "demand":
+ cxn.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
+ elif self.tlsRequireCert == "hard":
+ cxn.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_HARD)
+
+ if self.tls:
+ cxn.start_tls_s()
+
+ return cxn
+
+
+ def authenticate(self, dn, password):
+ """
+ Perform simple bind auth, raising ldap.INVALID_CREDENTIALS if
+ bad password
+ """
+ if self.authLDAP is None:
+ self.log_debug("Creating authentication connection to LDAP")
+ self.authLDAP = self.createLDAPConnection()
+ self.log_debug("Authenticating %s" % (dn,))
+ self.authLDAP.bind_s(dn, password)
+
+
+ @property
+ def restrictedGUIDs(self):
+ """
+ Look up (and cache) the set of guids that are members of the
+ restrictToGroup. If restrictToGroup is not set, return None to
+ indicate there are no group restrictions.
+
+ guidAttr must also be specified in config for restrictToGroups to work.
+ """
+ if self.restrictEnabledRecords and self.rdnSchema["guidAttr"]:
+
+ if time.time() - self.restrictedTimestamp > self.cacheTimeout:
+ # fault in the members of group of name self.restrictToGroup
+
+ recordType = self.recordType_groups
+ base = self.typeRDNs[recordType] + self.base
+ filter = "(cn=%s)" % (self.restrictToGroup,)
+ self.log_info("Retrieving ldap record with base %s and filter %s." %
+ (ldap.dn.dn2str(base), filter))
+ result = self.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.attrList)
+
+ if len(result) == 1:
+ dn, attrs = result[0]
+ if self.groupSchema["membersAttr"]:
+ members = self._getMultipleLdapAttributes(attrs,
+ self.groupSchema["membersAttr"])
+ if self.groupSchema["nestedGroupsAttr"]:
+ nestedGroups = self._getMultipleLdapAttributes(attrs,
+ self.groupSchema["nestedGroupsAttr"])
+
+ else:
+ members = []
+ nestedGroups = []
+
+ self._cachedRestrictedGUIDs = set(self._expandGroupMembership(members, nestedGroups, returnGroups=True))
+ self.log_debug("Got %d restricted group members" % (len(self._cachedRestrictedGUIDs),))
+ self.restrictedTimestamp = time.time()
+ return self._cachedRestrictedGUIDs
+ else:
+ # No restrictions
+ return None
+
+
+ def _expandGroupMembership(self, members, nestedGroups,
+ processedGUIDs=None, returnGroups=False):
+
+ if processedGUIDs is None:
+ processedGUIDs = set()
+
+ if isinstance(members, str):
+ members = [members]
+
+ if isinstance(nestedGroups, str):
+ nestedGroups = [nestedGroups]
+
+ for memberGUID in members:
+ if memberGUID not in processedGUIDs:
+ processedGUIDs.add(memberGUID)
+ yield memberGUID
+
+ for groupGUID in nestedGroups:
+ if groupGUID in processedGUIDs:
+ continue
+
+ recordType = self.recordType_groups
+ base = self.typeRDNs[recordType] + self.base
+ filter = "(%s=%s)" % (self.rdnSchema["guidAttr"], groupGUID)
+
+ self.log_info("Retrieving ldap record with base %s and filter %s." %
+ (ldap.dn.dn2str(base), filter))
+ result = self.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.attrList)
+
+ if len(result) == 0:
+ continue
+
+ if len(result) == 1:
+ dn, attrs = result[0]
+ if self.groupSchema["membersAttr"]:
+ subMembers = self._getMultipleLdapAttributes(attrs,
+ self.groupSchema["membersAttr"])
+ else:
+ subMembers = []
+
+ if self.groupSchema["nestedGroupsAttr"]:
+ subNestedGroups = self._getMultipleLdapAttributes(attrs,
+ self.groupSchema["nestedGroupsAttr"])
+ else:
+ subNestedGroups = []
+
+ processedGUIDs.add(groupGUID)
+ if returnGroups:
+ yield groupGUID
+
+ for GUID in self._expandGroupMembership(subMembers,
+ subNestedGroups, processedGUIDs, returnGroups):
+ yield GUID
+
+
+ def _getUniqueLdapAttribute(self, attrs, *keys):
+ """
+ Get the first value for one or several attributes
+ Useful when attributes have aliases (e.g. sn vs. surname)
+ """
+ for key in keys:
+ values = attrs.get(key)
+ if values is not None:
+ return values[0]
+ return None
+
+
+ def _getMultipleLdapAttributes(self, attrs, *keys):
+ """
+ Get all values for one or several attributes
+ """
+ results = []
+ for key in keys:
+ values = attrs.get(key)
+ if values is not None:
+ results += values
+ return set(results)
+
+
+ def _ldapResultToRecord(self, dn, attrs, recordType):
+ """
+ Convert the attrs returned by a LDAP search into a LdapDirectoryRecord
+ object.
+
+ Mappings are hardcoded below but the most standard LDAP schemas were
+ used to define them
+ """
+
+ guid = None
+ shortNames = ()
+ authIDs = set()
+ fullName = None
+ firstName = None
+ lastName = None
+ emailAddresses = set()
+ calendarUserAddresses = set()
+ enabledForCalendaring = None
+ uid = None
+
+ # First check for and add guid
+ guidAttr = self.rdnSchema["guidAttr"]
+ if guidAttr:
+ guid = self._getUniqueLdapAttribute(attrs, guidAttr)
+
+ # Find or build email
+ emailAddresses = self._getMultipleLdapAttributes(attrs, "mail")
+ emailSuffix = self.rdnSchema[recordType]["emailSuffix"]
+
+ if len(emailAddresses) == 0 and emailSuffix is not None:
+ emailPrefix = self._getUniqueLdapAttribute(attrs,
+ self.rdnSchema[recordType]["attr"])
+ emailAddresses.add(emailPrefix + emailSuffix)
+
+ # LDAP attribute -> principal matchings
+ shortNames = (self._getUniqueLdapAttribute(attrs, self.rdnSchema[recordType]["recordName"]),)
+ if recordType == self.recordType_users:
+ fullName = self._getUniqueLdapAttribute(attrs, "cn", "commonName",
+ "displayName", "gecos")
+ firstName = self._getUniqueLdapAttribute(attrs, "givenName")
+ lastName = self._getUniqueLdapAttribute(attrs, "sn", "surname")
+ calendarUserAddresses = emailAddresses
+ enabledForCalendaring = True
+ elif recordType == self.recordType_groups:
+ fullName = self._getUniqueLdapAttribute(attrs, "cn")
+ enabledForCalendaring = False
+ elif recordType in (self.recordType_resources,
+ self.recordType_locations):
+ fullName = self._getUniqueLdapAttribute(attrs, "cn")
+ calendarUserAddresses = emailAddresses
+ enabledForCalendaring = True
+
+ record = LdapDirectoryRecord(
+ service = self,
+ recordType = recordType,
+ guid = guid,
+ shortNames = shortNames,
+ authIDs = authIDs,
+ fullName = fullName,
+ firstName = firstName,
+ lastName = lastName,
+ emailAddresses = emailAddresses,
+ calendarUserAddresses = calendarUserAddresses,
+ enabledForCalendaring = enabledForCalendaring,
+ uid = uid,
+ dn = dn,
+ attrs = attrs,
+ )
+
+ # Look up augment information
+ # TODO: this needs to be deferred but for now we hard code the
+ # deferred result because we know it is completing immediately.
+ d = augment.AugmentService.getAugmentRecord(record.guid,
+ recordType)
+ d.addCallback(lambda x:record.addAugmentInformation(x))
+
+ return record
+
+
+ def queryDirectory(self, recordTypes, indexType, indexKey):
+ """
+ Queries the LDAP directory for the record which has an attribute value
+ matching the indexType and indexKey parameters.
+
+ recordTypes is a list of record types to limit the search to.
+ indexType specifies one of the CachingDirectoryService contstants
+ identifying which attribute to search on.
+ indexKey is the value to search for.
+
+ Nothing is returned -- the resulting record (if any) is placed in
+ the cache.
+ """
+ self.log_debug("LDAP query for types %s, indexType %s and indexKey %s"
+ % (recordTypes, indexType, indexKey))
+
+ for recordType in recordTypes:
+ # Build base for this record Type
+ base = self.typeRDNs[recordType] + self.base
+
+ # Build filter
+ filter = "(!(objectClass=organizationalUnit))"
+ typeFilter = self.rdnSchema[recordType]["filter"]
+ if typeFilter:
+ filter = "(&%s%s)" % (filter, typeFilter)
+
+ if indexType == self.INDEX_TYPE_GUID:
+ # Query on guid only works if guid attribute has been defined.
+ # Support for query on guid even if is auto-generated should
+ # be added.
+ guidAttr = self.rdnSchema["guidAttr"]
+ if not guidAttr: return
+ filter = "(&%s(%s=%s))" % (filter, guidAttr, indexKey)
+
+ elif indexType == self.INDEX_TYPE_SHORTNAME:
+ filter = "(&%s(%s=%s))" % (
+ filter,
+ self.rdnSchema[recordType]["recordName"],
+ indexKey
+ )
+
+ elif indexType == self.INDEX_TYPE_CUA:
+ # indexKey is of the form "mailto:test at example.net"
+ email = indexKey[7:] # strip "mailto:"
+ emailSuffix = self.rdnSchema[recordType]["emailSuffix"]
+ if emailSuffix is not None and email.partition("@")[2] == emailSuffix:
+ filter = "(&%s(|(&(!(mail=*))(%s=%s))(mail=%s)))" % (
+ filter,
+ self.rdnSchema[recordType]["attr"],
+ email.partition("@")[0],
+ email
+ )
+ else:
+ filter = "(&%s(mail=%s))" % (filter, email)
+
+ elif indexType == self.INDEX_TYPE_AUTHID:
+ return
+
+ # Query the LDAP server
+ self.log_info("Retrieving ldap record with base %s and filter %s." %
+ (ldap.dn.dn2str(base), filter))
+ result = self.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.attrList)
+
+ if result:
+ dn, attrs = result.pop()
+
+ unrestricted = True
+ if self.restrictedGUIDs is not None:
+ guidAttr = self.rdnSchema["guidAttr"]
+ if guidAttr:
+ guid = self._getUniqueLdapAttribute(attrs, guidAttr)
+ if guid not in self.restrictedGUIDs:
+ unrestricted = False
+
+ record = self._ldapResultToRecord(dn, attrs, recordType)
+ self.log_debug("Got LDAP record %s" % (record,))
+ self.recordCacheForType(recordType).addRecord(record,
+ indexType, indexKey
+ )
+
+ if not unrestricted:
+ self.log_debug("%s is not enabled because it's not a member of group: %s" % (guid, self.restrictToGroup))
+ record.enabledForCalendaring = False
+ record.enabledForAddressBooks = False
+
+ record.applySACLs()
+
+ def recordsMatchingFields(self, fields, operand="or", recordType=None):
+ """
+ Carries out the work of a principal-property-search against LDAP
+ Returns a deferred list of directory records.
+ """
+
+ records = []
+
+ recordTypes = [recordType] if recordType else self.recordTypes()
+ for recordType in recordTypes:
+ filter = buildFilter(self.attributeMapping, fields, operand=operand)
+
+ if filter is not None:
+
+ # Query the LDAP server
+ base = self.typeRDNs[recordType] + self.base
+
+ self.log_debug("LDAP search %s %s" %
+ (ldap.dn.dn2str(base), filter))
+ results = self.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.attrList)
+
+ for dn, attrs in results:
+ # Skip if group restriction is in place and guid is not
+ # a member
+ if self.restrictedGUIDs is not None:
+ guidAttr = self.rdnSchema["guidAttr"]
+ if guidAttr:
+ guid = self._getUniqueLdapAttribute(attrs, guidAttr)
+ if guid not in self.restrictedGUIDs:
+ continue
+
+ record = self._ldapResultToRecord(dn, attrs, recordType)
+ records.append(record)
+
+ return succeed(records)
+
+
+def buildFilter(mapping, fields, operand="or"):
+ """
+ Create an LDAP filter string from a list of tuples representing directory
+ attributes to search
+
+ mapping is a dict mapping internal directory attribute names to ldap names.
+ fields is a list of tuples...
+ (directory field name, value to search, caseless (ignored), matchType)
+ ...where matchType is one of "starts-with", "contains", "exact"
+ """
+
+ converted = []
+ for field, value, caseless, matchType in fields:
+ ldapField = mapping.get(field, None)
+ if ldapField:
+ if matchType == "starts-with":
+ value = "%s*" % (value,)
+ elif matchType == "contains":
+ value = "*%s*" % (value,)
+ # otherwise it's an exact match
+ converted.append("(%s=%s)" % (ldapField, value))
+
+ if len(converted) == 0:
+ filter = None
+ elif len(converted) == 1:
+ filter = converted[0]
+ else:
+ operand = ("|" if operand == "or" else "&")
+ filter = "(%s%s)" % (operand, "".join(converted))
+
+ return filter
+
+
+class LdapDirectoryRecord(CachingDirectoryRecord):
+ """
+ LDAP implementation of L{IDirectoryRecord}.
+ """
+ def __init__(
+ self, service, recordType,
+ guid, shortNames, authIDs, fullName,
+ firstName, lastName, emailAddresses,
+ calendarUserAddresses, enabledForCalendaring, uid,
+ dn, attrs
+ ):
+ super(LdapDirectoryRecord, self).__init__(
+ service = service,
+ recordType = recordType,
+ guid = guid,
+ shortNames = shortNames,
+ authIDs = authIDs,
+ fullName = fullName,
+ firstName = firstName,
+ lastName = lastName,
+ emailAddresses = emailAddresses,
+ calendarUserAddresses = calendarUserAddresses,
+ enabledForCalendaring = enabledForCalendaring,
+ uid = uid,
+ )
+
+ # Save attributes of dn and attrs in case you might need them later
+ self.dn = dn
+ self.attrs = attrs
+
+ # Identifiers of the members of this record if it is a group
+ membersAttrs = []
+ if self.service.groupSchema["membersAttr"]:
+ membersAttrs.append(self.service.groupSchema["membersAttr"])
+ if self.service.groupSchema["nestedGroupsAttr"]:
+ membersAttrs.append(self.service.groupSchema["nestedGroupsAttr"])
+ self._memberIds = self.service._getMultipleLdapAttributes(attrs,
+ *membersAttrs)
+
+ # Identifier of this record as a group member
+ memberIdAttr = self.service.groupSchema["memberIdAttr"]
+ if memberIdAttr:
+ self._memberId = self.service._getUniqueLdapAttribute(attrs,
+ memberIdAttr)
+ else:
+ self._memberId = self.dn
+
+
+ def members(self):
+ """ Return the records representing members of this group """
+
+ try:
+ return self._members_storage
+ except AttributeError:
+ self._members_storage = self._members()
+ return self._members_storage
+
+ def _members(self):
+ """ Fault in records for the members of this group """
+
+ memberIdAttr = self.service.groupSchema["memberIdAttr"]
+ results = []
+
+ for memberId in self._memberIds:
+
+ for recordType in self.service.recordTypes():
+
+ if memberIdAttr:
+ base = self.service.base
+ filter = "(%s=%s)" % (memberIdAttr, memberId)
+ self.log_debug("Retrieving subtree of %s with filter %s" %
+ (ldap.dn.dn2str(base), filter),
+ system="LdapDirectoryService")
+ result = self.service.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.service.attrList)
+
+ else:
+ self.log_debug("Retrieving %s." % memberId,
+ system="LdapDirectoryService")
+ result = self.service.ldap.search_s(memberId,
+ ldap.SCOPE_BASE, attrlist=self.service.attrList)
+
+ if result:
+ # TODO: what about duplicates?
+
+ dn, attrs = result.pop()
+
+ if recordType == self.service.recordType_users:
+ shortName = self.service._getUniqueLdapAttribute(attrs,
+ "uid", "userid")
+ elif recordType in (
+ self.service.recordType_groups,
+ self.service.recordType_resources,
+ self.service.recordType_locations
+ ):
+ shortName = self.service._getUniqueLdapAttribute(attrs,
+ "cn")
+
+ record = self.service.recordWithShortName(recordType,
+ shortName)
+ if record:
+ results.append(record)
+ break
+
+ return results
+
+ def groups(self):
+ """ Return the records representing groups this record is a member of """
+ try:
+ return self._groups_storage
+ except AttributeError:
+ self._groups_storage = self._groups()
+ return self._groups_storage
+
+ def _groups(self):
+ """ Fault in the groups of which this record is a member """
+
+ recordType = self.service.recordType_groups
+ base = self.service.typeRDNs[recordType] + self.service.base
+
+ membersAttrs = []
+ if self.service.groupSchema["membersAttr"]:
+ membersAttrs.append(self.service.groupSchema["membersAttr"])
+ if self.service.groupSchema["nestedGroupsAttr"]:
+ membersAttrs.append(self.service.groupSchema["nestedGroupsAttr"])
+
+ if len(membersAttrs) == 1:
+ filter = "(%s=%s)" % (membersAttrs[0], self._memberId)
+ else:
+ filter = "(|%s)" % ( "".join(
+ ["(%s=%s)" % (a, self._memberId) for a in membersAttrs]
+ ),
+ )
+ self.log_debug("Finding groups containing %s" % (self._memberId,))
+ groups = []
+
+ try:
+ results = self.service.ldap.search_s(ldap.dn.dn2str(base),
+ ldap.SCOPE_SUBTREE, filter, self.service.attrList)
+
+ for dn, attrs in results:
+ shortName = self.service._getUniqueLdapAttribute(attrs, "cn")
+ self.log_debug("%s is a member of %s" % (self._memberId, shortName))
+ groups.append(self.service.recordWithShortName(recordType,
+ shortName))
+ except ldap.PROTOCOL_ERROR, e:
+ self.log_warn(str(e))
+
+ return groups
+
+
+ def verifyCredentials(self, credentials):
+ """ Supports PAM or simple LDAP bind for username+password """
+
+ if isinstance(credentials, UsernamePassword):
+
+ # TODO: investigate:
+ # Check that the username supplied matches one of the shortNames
+ # (The DCS might already enforce this constraint, not sure)
+ if credentials.username not in self.shortNames:
+ return False
+
+ # Check cached password
+ try:
+ if credentials.password == self.password:
+ return True
+ except AttributeError:
+ pass
+
+ if self.service.authMethod.upper() == "PAM":
+ # Authenticate against PAM (UNTESTED)
+
+ if not pamAvailable:
+ msg = "PAM module is not installed"
+ self.log_error(msg)
+ raise DirectoryConfigurationError(msg)
+
+ def pam_conv(auth, query_list, userData):
+ return [(credentials.password, 0)]
+
+ auth = PAM.pam()
+ auth.start("caldav")
+ auth.set_item(PAM.PAM_USER, credentials.username)
+ auth.set_item(PAM.PAM_CONV, pam_conv)
+ try:
+ auth.authenticate()
+ except PAM.error:
+ return False
+ else:
+ # Cache the password to avoid further LDAP queries
+ self.password = credentials.password
+ return True
+
+ elif self.service.authMethod.upper() == "LDAP":
+
+ # Authenticate against LDAP
+ try:
+ self.service.authenticate(self.dn, credentials.password)
+ # Cache the password to avoid further LDAP queries
+ self.password = credentials.password
+ return True
+
+ except ldap.INVALID_CREDENTIALS:
+ self.log_info("Invalid credentials for %s" %
+ (repr(self.dn),), system="LdapDirectoryService")
+ return False
+
+ else:
+ msg = "Unknown Authentication Method '%s'" % (
+ self.service.authMethod.upper(),)
+ self.log_error(msg)
+ raise DirectoryConfigurationError(msg)
+
+ return super(LdapDirectoryRecord, self).verifyCredentials(credentials)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/principal.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/principal.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -35,8 +35,6 @@
from urllib import unquote
from urlparse import urlparse
-from weakref import WeakValueDictionary
-
from twisted.cred.credentials import UsernamePassword
from twisted.python.failure import Failure
from twisted.internet.defer import inlineCallbacks, returnValue
@@ -52,6 +50,7 @@
from twistedcaldav.authkerb import NegotiateCredentials
from twistedcaldav.config import config
+from twistedcaldav.cache import DisabledCacheNotifier, PropfindCacheMixin
from twistedcaldav.directory import calendaruserproxy
from twistedcaldav.directory import augment
from twistedcaldav.directory.calendaruserproxy import CalendarUserProxyPrincipalResource
@@ -316,12 +315,12 @@
# First see if the address is a principal URI
principal = self._principalForURI(address)
if principal:
- if isinstance(principal, DirectoryCalendarPrincipalResource):
+ if isinstance(principal, DirectoryCalendarPrincipalResource) and principal.record.enabledForCalendaring:
return principal
else:
# Next try looking it up in the directory
record = self.directory.recordWithCalendarUserAddress(address)
- if record is not None and record.enabled:
+ if record is not None and record.enabled and record.enabledForCalendaring:
return self.principalForRecord(record)
log.debug("No principal for calendar user address: %r" % (address,))
@@ -436,7 +435,6 @@
)
self.parent = parent
- self._principalResourceCache = WeakValueDictionary()
def principalForUID(self, uid):
return self.parent.principalForUID(uid)
@@ -448,15 +446,12 @@
if record is None:
return None
- if record in self._principalResourceCache:
- return self._principalResourceCache[record]
if record.enabledForCalendaring or record.enabledForAddressBooks:
# XXX these are different features and one should not automatically
# imply the other...
principal = DirectoryCalendarPrincipalResource(self, record)
else:
principal = DirectoryPrincipalResource(self, record)
- self._principalResourceCache[record] = principal
return principal
##
@@ -500,7 +495,7 @@
def principalCollections(self):
return self.parent.principalCollections()
-class DirectoryPrincipalResource (PermissionsMixIn, DAVPrincipalResource):
+class DirectoryPrincipalResource (PropfindCacheMixin, PermissionsMixIn, DAVPrincipalResource):
"""
Directory principal resource.
"""
@@ -514,6 +509,8 @@
davxml.ResourceID.qname(),
)
+ cacheNotifierFactory = DisabledCacheNotifier
+
def __init__(self, parent, record):
"""
@param parent: the parent of this resource.
@@ -521,6 +518,8 @@
"""
super(DirectoryPrincipalResource, self).__init__()
+ self.cacheNotifier = self.cacheNotifierFactory(self, cacheHandle="PrincipalToken")
+
if self.isCollection():
slash = "/"
else:
@@ -820,6 +819,12 @@
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.
@@ -829,17 +834,28 @@
returnValue(result)
def extraDirectoryBodyItems(self, request):
- return "".join((
- """\nCalendar homes:\n""" , format_list(format_link(u) for u in self.calendarHomeURLs()),
- """\nCalendar user addresses:\n""" , format_list(format_link(a) for a in self.calendarUserAddresses()),
- """\nAddress Book homes:\n""" , format_list(format_link(u) for u in self.addressBookHomeURLs()),
- ))
+ extra = ""
+ if self.record.enabledForCalendaring:
+ extra += "".join((
+ """\nCalendar homes:\n""" , format_list(format_link(u) for u in self.calendarHomeURLs()),
+ """\nCalendar user addresses:\n""" , format_list(format_link(a) for a in self.calendarUserAddresses()),
+ ))
+ if self.record.enabledForAddressBooks:
+ extra += "".join((
+ """\nAddress Book homes:\n""" , format_list(format_link(u) for u in self.addressBookHomeURLs()),
+ ))
+ return extra
##
# CalDAV
##
def calendarUserAddresses(self):
+
+ # No CUAs if not enabledForCalendaring.
+ if not self.record.enabledForCalendaring:
+ return set()
+
# Get any CUAs defined by the directory implementation.
addresses = set(self.record.calendarUserAddresses)
@@ -888,7 +904,10 @@
returnValue(notification)
def calendarHomeURLs(self):
- homeURL = self._homeChildURL(None)
+ if self.record.enabledForCalendaring:
+ homeURL = self._homeChildURL(None)
+ else:
+ homeURL = ""
return (homeURL,) if homeURL else ()
def scheduleInboxURL(self):
@@ -910,7 +929,10 @@
return None
def addressBookHomeURLs(self):
- homeURL = self._addressBookHomeChildURL(None)
+ if self.record.enabledForAddressBooks:
+ homeURL = self._addressBookHomeChildURL(None)
+ else:
+ homeURL = ""
return (homeURL,) if homeURL else ()
def _homeChildURL(self, name):
@@ -921,7 +943,7 @@
self.record.service.calendarHomesCollection.url(),
uidsResourceName,
self.record.uid
- )
+ ) + "/"
url = self.calendarHomeURL
if url is None:
return None
@@ -946,7 +968,7 @@
self.record.service.addressBookHomesCollection.url(),
uidsResourceName,
self.record.uid
- )
+ ) + "/"
url = self.addressBookHomeURL
if url is None:
return None
@@ -970,7 +992,8 @@
return self
if config.EnableProxyPrincipals and name in ("calendar-proxy-read", "calendar-proxy-write"):
- return CalendarUserProxyPrincipalResource(self, name)
+ # name is required to be str
+ return CalendarUserProxyPrincipalResource(self, str(name))
else:
return None
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/accounts.xml 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/accounts.xml 2011-03-14 20:54:05 UTC (rev 7193)
@@ -81,6 +81,28 @@
<name>c</name>
<email-address>c at example.com</email-address>
</user>
+ <user>
+ <uid>usercalonly</uid>
+ <guid>9E1FFAC4-3CCD-45A1-8272-D161C92D2EEE</guid>
+ <password>a</password>
+ <name>a calonly</name>
+ <email-address>a-calonly at example.com</email-address>
+ </user>
+ <user>
+ <uid>useradbkonly</uid>
+ <guid>7678EC8A-A069-4E82-9066-7279C6718507</guid>
+ <password>a</password>
+ <name>a adbkonly</name>
+ <email-address>a-adbkonly at example.com</email-address>
+ </user>
+ <user>
+ <uid>nonascii</uid>
+ <uid>nonascii佐藤</uid>
+ <guid>320B73A1-46E2-4180-9563-782DFDBE1F63</guid>
+ <password>a</password>
+ <name>佐藤佐藤佐藤</name>
+ <email-address>nonascii at example.com</email-address>
+ </user>
<user repeat="2">
<uid>user%02d</uid>
<guid>user%02d</guid>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/augments.xml
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/augments.xml 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/augments.xml 2011-03-14 20:54:05 UTC (rev 7193)
@@ -76,10 +76,14 @@
<record>
<uid>right_coast</uid>
<enable>true</enable>
+ <enable-calendar>true</enable-calendar>
+ <enable-addressbook>true</enable-addressbook>
</record>
<record>
<uid>left_coast</uid>
<enable>true</enable>
+ <enable-calendar>true</enable-calendar>
+ <enable-addressbook>true</enable-addressbook>
</record>
<record>
<uid>both_coasts</uid>
@@ -154,4 +158,14 @@
<enable>true</enable>
<enable-calendar>true</enable-calendar>
</record>
+ <record>
+ <uid>9E1FFAC4-3CCD-45A1-8272-D161C92D2EEE</uid>
+ <enable>true</enable>
+ <enable-calendar>true</enable-calendar>
+ </record>
+ <record>
+ <uid>7678EC8A-A069-4E82-9066-7279C6718507</uid>
+ <enable>true</enable>
+ <enable-addressbook>true</enable-addressbook>
+ </record>
</augments>
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/resources/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/resources/caldavd.plist 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/resources/caldavd.plist 2011-03-14 20:54:05 UTC (rev 7193)
@@ -719,7 +719,13 @@
</array>
</dict>
+ <!-- Response Caching -->
+ <key>EnableResponseCache</key>
+ <true/>
+ <key>ResponseCacheTimeout</key>
+ <integer>30</integer> <!-- in minutes -->
+
<!--
Twisted
-->
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_augment.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_augment.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_augment.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -274,6 +274,17 @@
yield self._checkRecord(newdb, item)
yield self._checkRecord(newdb, testModifyRecords[0])
+ def test_shouldReparse(self):
+ """
+ Verify that a change to the file will get noticed
+ """
+ newxmlfile = FilePath(self.mktemp())
+ FilePath(xmlFile).copyTo(newxmlfile)
+ db = AugmentXMLDB((newxmlfile.path,))
+ self.assertFalse(db._shouldReparse(newxmlfile.path)) # No need to parse
+ newxmlfile.setContent("") # Change the file
+ self.assertTrue(db._shouldReparse(newxmlfile.path)) # Need to parse
+
class AugmentSqliteTests(AugmentTests, AugmentTestsMixin):
def _db(self, dbpath=None):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_cachedirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_cachedirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_cachedirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -252,3 +252,39 @@
"Kerberos:user03 at example.com"
) is not None)
self.assertFalse(self.service.queried)
+
+ def test_negativeCaching(self):
+ self.dummyRecords()
+
+ # If negativeCaching is off, each miss will result in a call to
+ # queryDirectory( )
+ self.service.negativeCaching = False
+
+ self.service.queried = False
+ self.assertEquals(self.service.recordWithGUID(self.guidForShortName("missing")), None)
+ self.assertTrue(self.service.queried)
+
+ self.service.queried = False
+ self.assertEquals(self.service.recordWithGUID(self.guidForShortName("missing")), None)
+ self.assertTrue(self.service.queried)
+
+
+ # However, if negativeCaching is on, a miss is recorded as such,
+ # preventing a similar queryDirectory( ) until cacheTimeout passes
+ self.service.negativeCaching = True
+
+ self.service.queried = False
+ self.assertEquals(self.service.recordWithGUID(self.guidForShortName("missing")), None)
+ self.assertTrue(self.service.queried)
+
+ self.service.queried = False
+ self.assertEquals(self.service.recordWithGUID(self.guidForShortName("missing")), None)
+ self.assertFalse(self.service.queried)
+
+ # Simulate time passing by clearing the negative timestamp for this
+ # entry, then try again, this time queryDirectory( ) is called
+ self.service._disabledKeys[self.service.INDEX_TYPE_GUID][self.guidForShortName("missing")] = 0
+
+ self.service.queried = False
+ self.assertEquals(self.service.recordWithGUID(self.guidForShortName("missing")), None)
+ self.assertTrue(self.service.queried)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_digest.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_digest.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_digest.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2005-2007 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -440,41 +440,6 @@
response.headers.getHeader("www-authenticate")[0][1]
@inlineCallbacks
- def test_incompatibleClientIp(self):
- """
- Test that the login fails when the request comes from a client ip
- other than what is encoded in the opaque.
- """
-
- credentialFactories = (
- FakeDigestCredentialFactory('md5', 'auth', 'test realm', self.namespace1),
- FakeDigestCredentialFactory('md5', '', 'test realm', self.namespace2)
- )
-
- for ctr, factory in enumerate(credentialFactories):
- challenge = (yield factory.getChallenge(address.IPv4Address('TCP', '127.0.0.2', 80)))
-
- clientResponse = authRequest1[ctr] % (
- challenge['nonce'],
- self.getDigestResponse(challenge, "00000001"),
- )
-
- request = _trivial_GET()
- yield self.assertRaisesDeferred(
- error.LoginFailed,
- factory.decode,
- clientResponse,
- request
- )
-
- response = (yield UnauthorizedResponse.makeResponse(
- {"Digest":factory},
- request.remoteAddr,
- ))
- wwwhdrs = response.headers.getHeader("www-authenticate")[0][1]
- self.assertTrue('stale' not in wwwhdrs, msg="Stale parameter in Digest WWW-Authenticate headers: %s" % (wwwhdrs,))
-
- @inlineCallbacks
def test_oldNonce(self):
"""
Test that the login fails when the given opaque is older than
@@ -488,8 +453,8 @@
for ctr, factory in enumerate(credentialFactories):
challenge = (yield factory.getChallenge(clientAddress))
- clientip, nonce_count, timestamp = (yield factory.db.get(challenge['nonce']))
- factory.db.set(challenge['nonce'], (clientip, nonce_count, timestamp - 2 * digest.DigestCredentialFactory.CHALLENGE_LIFETIME_SECS))
+ nonce_count, timestamp = (yield factory.db.get(challenge['nonce']))
+ factory.db.set(challenge['nonce'], (nonce_count, timestamp - 2 * digest.DigestCredentialFactory.CHALLENGE_LIFETIME_SECS))
clientResponse = authRequest1[ctr] % (
challenge['nonce'],
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_directory.py (from rev 7192, CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_directory.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_directory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,59 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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 twistedcaldav.test.util import TestCase
+from twistedcaldav.config import config
+from twistedcaldav.directory.directory import DirectoryService, DirectoryRecord
+
+def StubCheckSACL(cls, username, service):
+ services = {
+ "calendar" : ["amanda", "betty"],
+ "addressbook" : ["amanda", "carlene"],
+ }
+ if username in services[service]:
+ return 0
+ return 1
+
+class SALCTests(TestCase):
+
+ def setUp(self):
+ self.patch(DirectoryRecord, "CheckSACL", StubCheckSACL)
+ self.patch(config, "EnableSACLs", True)
+ self.service = DirectoryService()
+ self.service.setRealm("test")
+ self.service.baseGUID = "0E8E6EC2-8E52-4FF3-8F62-6F398B08A498"
+
+
+ def test_applySACLs(self):
+ """
+ Users not in calendar SACL will have enabledForCalendaring set to
+ False.
+ Users not in addressbook SACL will have enabledForAddressBooks set to
+ False.
+ """
+
+ data = [
+ ("amanda", True, True,),
+ ("betty", True, False,),
+ ("carlene", False, True,),
+ ("daniel", False, False,),
+ ]
+ for username, cal, ab in data:
+ record = DirectoryRecord(self.service, "users", None, (username,),
+ enabledForCalendaring=True, enabledForAddressBooks=True)
+ record.applySACLs()
+ self.assertEquals(record.enabledForCalendaring, cal)
+ self.assertEquals(record.enabledForAddressBooks, ab)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_ldapdirectory.py (from rev 7192, CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_ldapdirectory.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_ldapdirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,85 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+try:
+ from twistedcaldav.directory.ldapdirectory import buildFilter
+except ImportError:
+ print "Skipping because ldap module not installed"
+else:
+ from twistedcaldav.test.util import TestCase
+
+ class BuildFilterTestCase(TestCase):
+
+ def test_buildFilter(self):
+ mapping = {
+ "fullName" : "cn",
+ "emailAddresses" : "mail",
+ "firstName" : "givenName",
+ "lastName" : "sn",
+ }
+
+ entries = [
+ {
+ "fields" : [
+ ("fullName", "mor", True, u"starts-with"),
+ ("emailAddresses", "mor", True, u"starts-with"),
+ ("firstName", "mor", True, u"starts-with"),
+ ("lastName", "mor", True, u"starts-with")
+ ],
+ "operand" : "or",
+ "recordType" : None,
+ "expected" : "(|(cn=mor*)(mail=mor*)(givenName=mor*)(sn=mor*))"
+ },
+ {
+ "fields" : [
+ ("fullName", "mor", True, u"starts-with"),
+ ],
+ "operand" : "or",
+ "recordType" : None,
+ "expected" : "(cn=mor*)"
+ },
+ {
+ "fields" : [
+ ("fullName", "mor", True, u"contains"),
+ ("emailAddresses", "mor", True, u"equals"),
+ ("invalid", "mor", True, u"starts-with"),
+ ],
+ "operand" : "and",
+ "recordType" : None,
+ "expected" : "(&(cn=*mor*)(mail=mor))"
+ },
+ {
+ "fields" : [
+ ("invalid", "mor", True, u"contains"),
+ ("invalid", "mor", True, u"starts-with"),
+ ],
+ "operand" : "and",
+ "recordType" : None,
+ "expected" : None
+ },
+ {
+ "fields" : [ ],
+ "operand" : "and",
+ "recordType" : None,
+ "expected" : None
+ },
+ ]
+ for entry in entries:
+ self.assertEquals(
+ buildFilter(mapping, entry["fields"],
+ operand=entry["operand"]),
+ entry["expected"]
+ )
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_livedirectory.py (from rev 7192, CalendarServer/trunk/twistedcaldav/directory/test/test_livedirectory.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_livedirectory.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_livedirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,191 @@
+##
+# Copyright (c) 2011 Apple Inc. All 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.
+##
+
+runLDAPTests = False
+runODTests = False
+
+try:
+ import ldap
+
+ testServer = "localhost"
+ base = "dc=example,dc=com"
+
+ try:
+ cxn = ldap.open(testServer)
+ results = cxn.search_s(base, ldap.SCOPE_SUBTREE, "(uid=odtestamanda)",
+ ["cn"])
+ if len(results) == 1:
+ runLDAPTests = True
+ except ldap.LDAPError:
+ pass # Don't run live tests
+
+except ImportError:
+ print "Could not import ldap module (skipping LDAP tests)"
+
+try:
+ from calendarserver.platform.darwin.od import opendirectory, dsattributes
+
+ directory = opendirectory.odInit("/Search")
+
+ results = list(opendirectory.queryRecordsWithAttribute_list(
+ directory,
+ dsattributes.kDS1AttrGeneratedUID,
+ "9DC04A70-E6DD-11DF-9492-0800200C9A66",
+ dsattributes.eDSExact,
+ False,
+ dsattributes.kDSStdRecordTypeUsers,
+ None,
+ count=0
+ ))
+ recordNames = [x[0] for x in results]
+ if "odtestamanda" in recordNames:
+ runODTests = True
+ else:
+ print "Test OD records not found (skipping OD tests)"
+
+except ImportError:
+ print "Could not import OpenDirectory framework (skipping OD tests)"
+
+
+if runLDAPTests or runODTests:
+
+ from twistedcaldav.test.util import TestCase
+ from twistedcaldav.directory import augment
+ from twistedcaldav.directory.test.test_xmlfile import augmentsFile
+ from twisted.internet.defer import inlineCallbacks
+
+ augment.AugmentService = augment.AugmentXMLDB(xmlFiles=(augmentsFile.path,))
+
+
+ class LiveDirectoryTests(object):
+
+ def test_ldapRecordWithShortName(self):
+ record = self.svc.recordWithShortName("users", "odtestamanda")
+ self.assertTrue(record is not None)
+
+ def test_ldapRecordWithGUID(self):
+ record = self.svc.recordWithGUID("9DC04A70-E6DD-11DF-9492-0800200C9A66")
+ self.assertTrue(record is not None)
+
+ @inlineCallbacks
+ def test_ldapRecordsMatchingFields(self):
+ fields = (
+ ("firstName", "Amanda", True, "exact"),
+ ("lastName", "Te", True, "starts-with"),
+ )
+ records = list(
+ (yield self.svc.recordsMatchingFields(fields, operand="and"))
+ )
+ self.assertEquals(1, len(records))
+ record = self.svc.recordWithGUID("9DC04A70-E6DD-11DF-9492-0800200C9A66")
+ self.assertEquals(records, [record])
+
+ @inlineCallbacks
+ def test_restrictToGroup(self):
+ self.svc.restrictEnabledRecords = True
+ self.svc.restrictToGroup = "odtestgrouptop"
+
+ # Faulting in specific records will return records outside of
+ # the restrictToGroup, but they won't be enabledForCalendaring
+ # and AddressBooks:
+
+ # Amanda is a direct member of that group
+ record = self.svc.recordWithShortName("users", "odtestamanda")
+ self.assertTrue(record.enabledForCalendaring)
+ self.assertTrue(record.enabledForAddressBooks)
+
+ # Betty is a direct member of that group
+ record = self.svc.recordWithShortName("users", "odtestbetty")
+ self.assertTrue(record.enabledForCalendaring)
+ self.assertTrue(record.enabledForAddressBooks)
+
+ # Carlene is in a nested group
+ record = self.svc.recordWithShortName("users", "odtestcarlene")
+ self.assertTrue(record.enabledForCalendaring)
+ self.assertTrue(record.enabledForAddressBooks)
+
+ # Denise is not in the group
+ record = self.svc.recordWithShortName("users", "odtestdenise")
+ self.assertFalse(record.enabledForCalendaring)
+ self.assertFalse(record.enabledForAddressBooks)
+
+ # Searching for records using principal-property-search will not
+ # yield records outside of the restrictToGroup:
+
+ fields = (
+ ("lastName", "Test", True, "exact"),
+ )
+ records = list(
+ (yield self.svc.recordsMatchingFields(fields))
+ )
+ self.assertEquals(3, len(records))
+
+ # These two are directly in the restrictToGroup:
+ record = self.svc.recordWithShortName("users", "odtestamanda")
+ self.assertTrue(record in records)
+ record = self.svc.recordWithShortName("users", "odtestbetty")
+ self.assertTrue(record in records)
+ # Carlene is still picked up because she is in a nested group
+ record = self.svc.recordWithShortName("users", "odtestcarlene")
+ self.assertTrue(record in records)
+
+
+
+ if runLDAPTests:
+
+ from twistedcaldav.directory.ldapdirectory import LdapDirectoryService
+ print "Running live LDAP tests against %s" % (testServer,)
+
+ class LiveLDAPDirectoryServiceCase(LiveDirectoryTests, TestCase):
+
+ def setUp(self):
+ params = {
+ "uri": "ldap://%s" % (testServer,),
+ "rdnSchema": {
+ "base": base,
+ "guidAttr": "apple-generateduid",
+ "users": {
+ "rdn": "cn=users",
+ "attr": "uid", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ },
+ "groups": {
+ "rdn": "cn=groups",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ },
+ },
+ "groupSchema": {
+ "membersAttr": "apple-group-memberguid", # how members are specified
+ "nestedGroupsAttr" : "apple-group-nestedgroup", # how nested groups are specified
+ "memberIdAttr": "apple-generateduid", # which attribute the above refers to
+ },
+ }
+ self.svc = LdapDirectoryService(params)
+
+
+ if runODTests:
+
+ from twistedcaldav.directory.appleopendirectory import OpenDirectoryService
+ print "Running live OD tests"
+
+ class LiveODDirectoryServiceCase(LiveDirectoryTests, TestCase):
+
+ def setUp(self):
+ params = {}
+ self.svc = OpenDirectoryService(params)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_opendirectory.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_opendirectory.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,10 +19,12 @@
except ImportError:
pass
else:
- import twext.web2.auth.digest
+ from twisted.trial.unittest import SkipTest
+ from twisted.internet.defer import inlineCallbacks
+ from twisted.python.runtime import platform
+ from twext.web2.auth.digest import DigestedCredentials
import twistedcaldav.directory.test.util
from twistedcaldav.directory import augment
- from twisted.internet.defer import inlineCallbacks
from twistedcaldav.directory.directory import DirectoryService
from twistedcaldav.directory.appleopendirectory import OpenDirectoryRecord
from calendarserver.platform.darwin.od import dsattributes
@@ -42,6 +44,8 @@
"""
Test Open Directory directory implementation.
"""
+ if not platform.isMacOSX():
+ skip = "Currently, OpenDirectory backend only works on MacOS X."
recordTypes = set((
DirectoryService.recordType_users,
DirectoryService.recordType_groups,
@@ -52,12 +56,11 @@
def setUp(self):
super(OpenDirectory, self).setUp()
augment.AugmentService = augment.AugmentXMLDB(xmlFiles=())
- self._service = OpenDirectoryService({'node' : "/Search"}, dosetup=False)
+ try:
+ self._service = OpenDirectoryService({"node" : "/Search"})
+ except ImportError, e:
+ raise SkipTest("OpenDirectory module is not available: %s" % (e,))
- def tearDown(self):
- for call in self._service._delayedCalls:
- call.cancel()
-
def service(self):
return self._service
@@ -93,7 +96,7 @@
)
digestFields = {}
- digested = twext.web2.auth.digest.DigestedCredentials("user", "GET", "example.com", digestFields, None)
+ digested = DigestedCredentials("user", "GET", "example.com", digestFields, None)
self.assertFalse(record.verifyCredentials(digested))
@@ -132,7 +135,7 @@
record.digestcache = {}
record.digestcache["/"] = response
- digested = twext.web2.auth.digest.DigestedCredentials("user", "GET", "example.com", digestFields, None)
+ digested = DigestedCredentials("user", "GET", "example.com", digestFields, None)
self.assertTrue(record.verifyCredentials(digested))
@@ -355,15 +358,17 @@
# OR
#
fields = [
- ('fullName', 'mor', True, u'starts-with'),
- ('emailAddresses', 'mor', True, u'starts-with'),
- ('firstName', 'mor', True, u'starts-with'),
- ('lastName', 'mor', True, u'starts-with')
+ ("fullName", "mor", True, u"starts-with"),
+ ("emailAddresses", "mor", True, u"starts-with"),
+ ("firstName", "mor", True, u"starts-with"),
+ ("lastName", "mor", True, u"starts-with"),
]
# any record type
- results = (yield self.service().recordsMatchingFields(fields,
- lookupMethod=lookupMethod))
+ results = (yield self.service().recordsMatchingFields(
+ fields,
+ lookupMethod=lookupMethod
+ ))
results = list(results)
self.assertEquals(len(results), 4)
for record in results:
@@ -388,8 +393,8 @@
# AND
#
fields = [
- ('firstName', 'morgen', True, u'equals'),
- ('lastName', 'age', True, u'contains')
+ ("firstName", "morgen", True, u"equals"),
+ ("lastName", "age", True, u"contains")
]
results = (yield self.service().recordsMatchingFields(fields,
operand="and", lookupMethod=lookupMethod))
@@ -400,7 +405,7 @@
# case sensitivity
#
fields = [
- ('firstName', 'morgen', False, u'equals'),
+ ("firstName", "morgen", False, u"equals"),
]
results = (yield self.service().recordsMatchingFields(fields,
lookupMethod=lookupMethod))
@@ -408,10 +413,12 @@
self.assertEquals(len(results), 0)
fields = [
- ('firstName', 'morgen', True, u'equals'),
+ ("firstName", "morgen", True, u"equals"),
]
- results = (yield self.service().recordsMatchingFields(fields,
- lookupMethod=lookupMethod))
+ results = (yield self.service().recordsMatchingFields(
+ fields,
+ lookupMethod=lookupMethod
+ ))
results = list(results)
self.assertEquals(len(results), 1)
@@ -419,11 +426,14 @@
# no matches
#
fields = [
- ('firstName', 'xyzzy', True, u'starts-with'),
- ('lastName', 'plugh', True, u'contains')
+ ("firstName", "xyzzy", True, u"starts-with"),
+ ("lastName", "plugh", True, u"contains")
]
- results = (yield self.service().recordsMatchingFields(fields,
- operand="and", lookupMethod=lookupMethod))
+ results = (yield self.service().recordsMatchingFields(
+ fields,
+ operand="and",
+ lookupMethod=lookupMethod
+ ))
results = list(results)
self.assertEquals(len(results), 0)
@@ -440,4 +450,9 @@
def setUp(self):
super(OpenDirectorySubset, self).setUp()
augment.AugmentService = augment.AugmentXMLDB(xmlFiles=())
- self._service = OpenDirectoryService({'node' : "/Search", 'recordTypes' : (DirectoryService.recordType_users, DirectoryService.recordType_groups)}, dosetup=False)
+ self._service = OpenDirectoryService(
+ {
+ "node" : "/Search",
+ "recordTypes" : (DirectoryService.recordType_users, DirectoryService.recordType_groups),
+ }
+ )
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_principal.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_principal.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,10 +21,15 @@
from twext.web2.dav import davxml
from twext.web2.dav.fileop import rmdir
from twext.web2.dav.resource import AccessDeniedError
+from twext.web2.http import HTTPError
from twext.web2.test.test_server import SimpleRequest
+from twistedcaldav.cache import DisabledCacheNotifier
+from twistedcaldav.caldavxml import caldav_namespace
from twistedcaldav.config import config
+from twistedcaldav.customxml import calendarserver_namespace
from twistedcaldav.directory import augment, calendaruserproxy
+from twistedcaldav.directory.addressbook import DirectoryAddressBookHomeProvisioningResource
from twistedcaldav.directory.calendar import DirectoryCalendarHomeProvisioningResource
from twistedcaldav.directory.directory import DirectoryService
from twistedcaldav.directory.xmlfile import XMLDirectoryService
@@ -33,11 +38,14 @@
from twistedcaldav.directory.principal import DirectoryPrincipalTypeProvisioningResource
from twistedcaldav.directory.principal import DirectoryPrincipalResource
from twistedcaldav.directory.principal import DirectoryCalendarPrincipalResource
+from twistedcaldav import carddavxml
+import twistedcaldav.test.util
-import twistedcaldav.test.util
from txdav.common.datastore.file import CommonDataStore
+from urllib import quote
+
class ProvisionedPrincipals (twistedcaldav.test.util.TestCase):
"""
Directory service provisioned principals.
@@ -109,14 +117,19 @@
self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
shortNames = set((yield typeResource.listChildren()))
- self.assertEquals(shortNames, set(r.shortNames[0] for r in directory.listRecords(recordType)))
+ # Handle records with mulitple shortNames
+ expected = []
+ for r in directory.listRecords(recordType):
+ expected.extend(r.shortNames)
+ self.assertEquals(shortNames, set(expected))
for shortName in shortNames:
#print " -> %s" % (shortName,)
recordResource = typeResource.getChild(shortName)
self.failUnless(isinstance(recordResource, DirectoryPrincipalResource))
- recordURL = typeURL + shortName + "/"
+ # shortName may be non-ascii
+ recordURL = typeURL + quote(shortName) + "/"
self.assertIn(recordURL, (recordResource.principalURL(),) + tuple(recordResource.alternateURIs()))
principalCollections = recordResource.principalCollections()
@@ -176,19 +189,6 @@
self.failIf(principal is None)
self.assertEquals(record, principal.record)
-
- def test_principalForUIDCache(self):
- """
- L{DirectoryPrincipalUIDProvisioningResource.principalForUID} should
- return an identical principal resource when passed the same principal.
- """
- for provisioningResource, recordType, recordResource, record in self._allRecords():
- principal = provisioningResource.principalForRecord(record)
- principal2 = provisioningResource.principalForRecord(record)
- self.assertIdentical(principal, principal2,
- ("mismatch from %s" % (provisioningResource,)))
-
-
def test_principalForRecord(self):
"""
DirectoryPrincipalProvisioningResource.principalForRecord()
@@ -247,7 +247,7 @@
None
)
-
+ @inlineCallbacks
def test_enabledForCalendaring(self):
"""
DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
@@ -259,8 +259,52 @@
self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
else:
self.assertTrue(isinstance(principal, DirectoryPrincipalResource))
- self.assertFalse(isinstance(principal, DirectoryCalendarPrincipalResource))
+ if record.enabledForAddressBooks:
+ self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
+ else:
+ self.assertFalse(isinstance(principal, DirectoryCalendarPrincipalResource))
+ @inlineCallbacks
+ def hasProperty(property):
+ self.assertTrue(property in principal.liveProperties())
+ yield principal.readProperty(property, None)
+
+ @inlineCallbacks
+ def doesNotHaveProperty(property):
+ self.assertTrue(property not in principal.liveProperties())
+ try:
+ yield principal.readProperty(property, None)
+ except HTTPError:
+ pass
+ except:
+ self.fail("Wrong exception type")
+ else:
+ self.fail("No exception principal: %s, property %s" % (principal, property,))
+
+ if record.enabledForCalendaring:
+ yield hasProperty((caldav_namespace, "calendar-home-set"))
+ yield hasProperty((caldav_namespace, "calendar-user-address-set"))
+ yield hasProperty((caldav_namespace, "schedule-inbox-URL"))
+ yield hasProperty((caldav_namespace, "schedule-outbox-URL"))
+ yield hasProperty((caldav_namespace, "calendar-user-type"))
+ yield hasProperty((calendarserver_namespace, "calendar-proxy-read-for"))
+ yield hasProperty((calendarserver_namespace, "calendar-proxy-write-for"))
+ yield hasProperty((calendarserver_namespace, "auto-schedule"))
+ else:
+ yield doesNotHaveProperty((caldav_namespace, "calendar-home-set"))
+ yield doesNotHaveProperty((caldav_namespace, "calendar-user-address-set"))
+ yield doesNotHaveProperty((caldav_namespace, "schedule-inbox-URL"))
+ yield doesNotHaveProperty((caldav_namespace, "schedule-outbox-URL"))
+ yield doesNotHaveProperty((caldav_namespace, "calendar-user-type"))
+ yield doesNotHaveProperty((calendarserver_namespace, "calendar-proxy-read-for"))
+ yield doesNotHaveProperty((calendarserver_namespace, "calendar-proxy-write-for"))
+ yield doesNotHaveProperty((calendarserver_namespace, "auto-schedule"))
+
+ if record.enabledForAddressBooks:
+ yield hasProperty(carddavxml.AddressBookHomeSet.qname())
+ else:
+ yield doesNotHaveProperty(carddavxml.AddressBookHomeSet.qname())
+
def test_enabledAsOrganizer(self):
"""
DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
@@ -298,6 +342,15 @@
# DirectoryPrincipalResource
##
+ def test_cacheNotifier(self):
+ """
+ Each DirectoryPrincipalResource should have a cacheNotifier attribute
+ that is an instance of DisabledCacheNotifier
+ """
+ for provisioningResource, recordType, recordResource, record in self._allRecords():
+ self.failUnless(isinstance(recordResource.cacheNotifier,
+ DisabledCacheNotifier))
+
def test_displayName(self):
"""
DirectoryPrincipalResource.displayName()
@@ -343,6 +396,57 @@
).issubset(set(recordResource.calendarUserAddresses()))
)
+ # Verify that if not enabled for calendaring, no CUAs:
+ record.enabledForCalendaring = False
+ self.failIf(recordResource.calendarUserAddresses())
+
+ def test_addressBookHomeURLs(self):
+ """
+ DirectoryPrincipalResource.addressBookHomeURLs(),
+ """
+ # No addressbook home provisioner should result in no addressbook homes.
+ for provisioningResource, recordType, recordResource, record in self._allRecords():
+ if record.enabledForAddressBooks:
+ self.failIf(tuple(recordResource.addressBookHomeURLs()))
+
+ # Need to create a addressbook home provisioner for each service.
+ addressBookRootResources = {}
+
+ for directory in self.directoryServices:
+ path = os.path.join(self.docroot, directory.__class__.__name__)
+
+ if os.path.exists(path):
+ rmdir(path)
+ os.mkdir(path)
+
+ # Need a data store
+ _newStore = CommonDataStore(path, None, True, False)
+
+ provisioningResource = DirectoryAddressBookHomeProvisioningResource(
+ directory,
+ "/addressbooks/",
+ _newStore
+ )
+
+ addressBookRootResources[directory.__class__.__name__] = provisioningResource
+
+ # AddressBook home provisioners should result in addressBook homes.
+ for provisioningResource, recordType, recordResource, record in self._allRecords():
+ if record.enabledForAddressBooks:
+ homeURLs = tuple(recordResource.addressBookHomeURLs())
+ self.failUnless(homeURLs)
+
+ # Turn off enabledForAddressBooks and addressBookHomeURLs should
+ # be empty
+ record.enabledForAddressBooks = False
+ self.failIf(tuple(recordResource.addressBookHomeURLs()))
+ record.enabledForAddressBooks = True
+
+ addressBookRootURL = addressBookRootResources[record.service.__class__.__name__].url()
+
+ for homeURL in homeURLs:
+ self.failUnless(homeURL.startswith(addressBookRootURL))
+
def test_calendarHomeURLs(self):
"""
DirectoryPrincipalResource.calendarHomeURLs(),
@@ -367,7 +471,7 @@
os.mkdir(path)
# Need a data store
- _newStore = CommonDataStore(path, True, False)
+ _newStore = CommonDataStore(path, None, True, False)
provisioningResource = DirectoryCalendarHomeProvisioningResource(
directory,
@@ -383,6 +487,12 @@
homeURLs = tuple(recordResource.calendarHomeURLs())
self.failUnless(homeURLs)
+ # Turn off enabledForCalendaring and calendarHomeURLs should
+ # be empty
+ record.enabledForCalendaring = False
+ self.failIf(tuple(recordResource.calendarHomeURLs()))
+ record.enabledForCalendaring = True
+
calendarRootURL = calendarRootResources[record.service.__class__.__name__].url()
inboxURL = recordResource.scheduleInboxURL()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -20,7 +20,8 @@
from twistedcaldav.directory.directory import DirectoryService
from twistedcaldav.test.util import xmlFile, augmentsFile, proxiesFile
-from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource
+from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource,\
+ DirectoryPrincipalResource
from twistedcaldav.directory.xmlfile import XMLDirectoryService
import twistedcaldav.test.util
@@ -300,7 +301,37 @@
set(["5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1",
"8B4288F6-CC82-491D-8EF9-642EF4F3E7D0"]))
+ @inlineCallbacks
+ def test_setGroupMemberSetNotifiesPrincipalCaches(self):
+ class StubCacheNotifier(object):
+ changedCount = 0
+ def changed(self):
+ self.changedCount += 1
+ return succeed(None)
+ user = self._getPrincipalByShortName(self.directoryService.recordType_users, "cdaboo")
+
+ proxyGroup = user.getChild("calendar-proxy-write")
+
+ notifier = StubCacheNotifier()
+
+ oldCacheNotifier = DirectoryPrincipalResource.cacheNotifierFactory
+
+ try:
+ DirectoryPrincipalResource.cacheNotifierFactory = (lambda _1, _2, **kwargs: notifier)
+
+ self.assertEquals(notifier.changedCount, 0)
+
+ yield proxyGroup.setGroupMemberSet(
+ davxml.GroupMemberSet(
+ davxml.HRef.fromString(
+ "/XMLDirectoryService/__uids__/5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1/")),
+ None)
+
+ self.assertEquals(notifier.changedCount, 1)
+ finally:
+ DirectoryPrincipalResource.cacheNotifierFactory = oldCacheNotifier
+
def test_proxyFor(self):
return self._proxyForTest(
@@ -516,3 +547,25 @@
yield self._clearProxy(principal, proxyType)
yield self._clearProxy(fakePrincipal, proxyType)
+
+
+ @inlineCallbacks
+ def test_NonAsciiProxy(self):
+ """
+ Ensure that principalURLs with non-ascii don't cause problems
+ within CalendarUserProxyPrincipalResource
+ """
+
+ recordType = DirectoryService.recordType_users
+ proxyType = "calendar-proxy-read"
+
+ record = self.directoryService.recordWithGUID("320B73A1-46E2-4180-9563-782DFDBE1F63")
+ provisioningResource = self.principalRootResources[self.directoryService.__class__.__name__]
+ principal = provisioningResource.principalForRecord(record)
+ proxyPrincipal = provisioningResource.principalForShortName(recordType,
+ "wsanchez")
+
+ yield self._addProxy(principal, proxyType, proxyPrincipal)
+ memberships = yield proxyPrincipal._calendar_user_proxy_index().getMemberships(proxyPrincipal.principalUID())
+ for uid in memberships:
+ subPrincipal = provisioningResource.principalForUID(uid)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,3 +1,4 @@
+# -*- test-case-name: twistedcaldav.directory.test.test_util -*-
##
# Copyright (c) 2006-2007 Apple Inc. All rights reserved.
#
@@ -22,7 +23,7 @@
"uuidFromName",
]
-from txdav.idav import AlreadyFinishedError
+from twext.enterprise.ienterprise import AlreadyFinishedError
from uuid import UUID, uuid5
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/wiki.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/wiki.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/wiki.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -28,6 +28,7 @@
from twisted.web.xmlrpc import Proxy, Fault
from twext.web2.http import HTTPError, StatusResponse
from twext.web2.auth.wrapper import UnauthorizedResponse
+from twext.web2 import responsecode
from twext.python.log import Logger
@@ -182,6 +183,11 @@
request.authnUser,
davxml.Grant(
davxml.Privilege(davxml.Read()),
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
+
+ # We allow write-properties so that direct sharees can change
+ # e.g. calendar color properties
+ davxml.Privilege(davxml.WriteProperties()),
),
TwistedACLInheritable(),
),
@@ -191,6 +197,7 @@
),
davxml.Grant(
davxml.Privilege(davxml.Read()),
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
),
TwistedACLInheritable(),
)
@@ -203,12 +210,7 @@
request.authnUser,
davxml.Grant(
davxml.Privilege(davxml.Read()),
- ),
- TwistedACLInheritable(),
- ),
- davxml.ACE(
- request.authnUser,
- davxml.Grant(
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
davxml.Privilege(davxml.Write()),
),
TwistedACLInheritable(),
@@ -219,14 +221,7 @@
),
davxml.Grant(
davxml.Privilege(davxml.Read()),
- ),
- TwistedACLInheritable(),
- ),
- davxml.ACE(
- davxml.Principal(
- davxml.HRef.fromString("/principals/wikis/%s/" % (wikiID,))
- ),
- davxml.Grant(
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
davxml.Privilege(davxml.Write()),
),
TwistedACLInheritable(),
@@ -246,7 +241,7 @@
raise HTTPError(
StatusResponse(
- 403,
+ responsecode.FORBIDDEN,
"You are not allowed to access this wiki"
)
)
@@ -258,8 +253,15 @@
wikiID, fault))
if fault.faultCode == 2: # non-existent user
- raise HTTPError(StatusResponse(403, fault.faultString))
+ raise HTTPError(StatusResponse(responsecode.FORBIDDEN, fault.faultString))
else: # fault.faultCode == 12, non-existent wiki
- raise HTTPError(StatusResponse(404, fault.faultString))
+ raise HTTPError(StatusResponse(responsecode.NOT_FOUND, fault.faultString))
+ except HTTPError:
+ # pass through the HTTPError we might have raised above
+ raise
+
+ except Exception, e:
+ log.error("Wiki ACL RPC failed: %s" % (e,))
+ raise HTTPError(StatusResponse(responsecode.SERVICE_UNAVAILABLE, "Wiki ACL RPC failed"))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/xmlfile.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/directory/xmlfile.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -69,12 +69,14 @@
self.recordType_resources,
),
'realmName' : '/Search',
+ 'statSeconds' : 15,
}
ignored = None
params = self.getParams(params, defaults, ignored)
self._recordTypes = params['recordTypes']
self.realmName = params['realmName']
+ self.statSeconds = params['statSeconds']
super(XMLDirectoryService, self).__init__()
@@ -138,15 +140,15 @@
XMLAccountRecords as returned by XMLAccountsParser, returns a list
of XMLAccountRecords.
- The XML file is only stat'ed at most every 60 seconds, and is only
- reparsed if it's been modified.
+ The XML file is only stat'ed at most every self.statSeconds, and is
+ only reparsed if it's been modified.
FIXME: don't return XMLAccountRecords, and have any code in this module
which currently does work with XMLAccountRecords, modify such code to
use XMLDirectoryRecords instead.
"""
currentTime = time()
- if self._alwaysStat or currentTime - self._lastCheck > 60:
+ if self._alwaysStat or currentTime - self._lastCheck > self.statSeconds:
self.xmlFile.restat()
self._lastCheck = currentTime
fileInfo = (self.xmlFile.getmtime(), self.xmlFile.getsize())
@@ -356,7 +358,7 @@
element = addSubElement(parent, xmlType)
for value in principal.shortNames:
- addSubElement(element, "uid", text=value)
+ addSubElement(element, "uid", text=value.decode("utf-8"))
addSubElement(element, "guid", text=principal.guid)
if principal.fullName is not None:
addSubElement(element, "name", text=principal.fullName.decode("utf-8"))
@@ -365,11 +367,11 @@
if principal.lastName is not None:
addSubElement(element, "last-name", text=principal.lastName.decode("utf-8"))
for value in principal.emailAddresses:
- addSubElement(element, "email-address", text=value)
+ addSubElement(element, "email-address", text=value.decode("utf-8"))
if principal.extras:
extrasElement = addSubElement(element, "extras")
for key, value in principal.extras.iteritems():
- addSubElement(extrasElement, key, text=value)
+ addSubElement(extrasElement, key, text=value.decode("utf-8"))
return element
@@ -395,7 +397,25 @@
self.xmlFile.setContent(elementToXML(element))
+ # Fix up the file ownership because setContent doesn't maintain it
+ uid = -1
+ if config.UserName:
+ try:
+ uid = pwd.getpwnam(config.UserName).pw_uid
+ except KeyError:
+ self.log_error("User not found: %s" % (config.UserName,))
+ gid = -1
+ if config.GroupName:
+ try:
+ gid = grp.getgrnam(config.GroupName).gr_gid
+ except KeyError:
+ self.log_error("Group not found: %s" % (config.GroupName,))
+
+ if uid != -1 and gid != -1:
+ os.chown(self.xmlFile.path, uid, gid)
+
+
def createRecord(self, recordType, guid=None, shortNames=(), authIDs=set(),
fullName=None, firstName=None, lastName=None, emailAddresses=set(),
uid=None, password=None, **kwargs):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dropbox.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dropbox.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/dropbox.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -119,5 +119,6 @@
def http_PUT(self, request):
return ErrorResponse(
responsecode.FORBIDDEN,
- (calendarserver_namespace, "valid-drop-box")
+ (calendarserver_namespace, "valid-drop-box"),
+ "Cannot store resources in dropbox",
)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/extensions.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/extensions.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -37,7 +37,6 @@
from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.cred.error import LoginFailed, UnauthorizedLogin
-import twext.web2.server
from twext.web2 import responsecode, server
from twext.web2.auth.wrapper import UnauthorizedResponse
from twext.web2.http import HTTPError, Response, RedirectResponse
@@ -58,7 +57,6 @@
from twext.python.log import Logger, LoggingMixIn
-import twistedcaldav
from twistedcaldav import customxml
from twistedcaldav.customxml import calendarserver_namespace
from twistedcaldav.util import Alternator
@@ -336,7 +334,7 @@
log.warn(msg)
raise HTTPError(StatusResponse(responsecode.BAD_REQUEST, msg))
caseless = (caseless == "yes")
- matchType = match.attributes.get("match-type", "contains")
+ matchType = match.attributes.get("match-type", u"contains").encode("utf-8")
if matchType not in ("starts-with", "contains", "equals"):
msg = "Bad XML: unknown value for match-type attribute: %s" % (matchType,)
log.warn(msg)
@@ -682,7 +680,25 @@
))
+def updateCacheTokenOnCallback(f):
+ def wrapper(self, *args, **kwargs):
+ if hasattr(self, "cacheNotifier"):
+ def updateToken(response):
+ d = self.cacheNotifier.changed()
+ d.addCallback(lambda _: response)
+ return d
+ d = maybeDeferred(f, self, *args, **kwargs)
+
+ if hasattr(self, "cacheNotifier"):
+ d.addCallback(updateToken)
+
+ return d
+ else:
+ return f(self, *args, **kwargs)
+
+ return wrapper
+
class DAVResource (DirectoryPrincipalPropertySearchMixIn,
SudoersMixin, SuperDAVResource, LoggingMixIn,
DirectoryRenderingMixIn, StaticRenderMixin):
@@ -692,6 +708,22 @@
Note we add StaticRenderMixin as a base class because we need all the etag etc behavior
that is currently in static.py but is actually applicable to any type of resource.
"""
+
+ @updateCacheTokenOnCallback
+ def http_PROPPATCH(self, request):
+ return super(DAVResource, self).http_PROPPATCH(request)
+
+
+ @updateCacheTokenOnCallback
+ def http_DELETE(self, request):
+ return super(DAVResource, self).http_DELETE(request)
+
+
+ @updateCacheTokenOnCallback
+ def http_ACL(self, request):
+ return super(DAVResource, self).http_ACL(request)
+
+
http_REPORT = http_REPORT
def davComplianceClasses(self):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/freebusyurl.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/freebusyurl.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/freebusyurl.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -160,13 +160,21 @@
# Some things we do not handle
if self.token or self.user:
- raise HTTPError(ErrorResponse(responsecode.NOT_ACCEPTABLE, (calendarserver_namespace, "supported-query-parameter")))
+ raise HTTPError(ErrorResponse(
+ responsecode.NOT_ACCEPTABLE,
+ (calendarserver_namespace, "supported-query-parameter"),
+ "Invalid query parameter",
+ ))
# Check format
if self.format:
self.format = self.format.split(";")[0]
if self.format not in ("text/calendar", "text/plain"):
- raise HTTPError(ErrorResponse(responsecode.NOT_ACCEPTABLE, (calendarserver_namespace, "supported-format")))
+ raise HTTPError(ErrorResponse(
+ responsecode.NOT_ACCEPTABLE,
+ (calendarserver_namespace, "supported-format"),
+ "Invalid return format requested",
+ ))
else:
self.format = "text/calendar"
@@ -183,17 +191,29 @@
if self.duration:
self.duration = parse_duration(self.duration)
except ValueError:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-query-parameters")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
+ ))
# Sanity check start/end/duration
# End and duration cannot both be present
if self.end and self.duration:
- raise HTTPError(ErrorResponse(responsecode.NOT_ACCEPTABLE, (calendarserver_namespace, "valid-query-parameters")))
+ raise HTTPError(ErrorResponse(
+ responsecode.NOT_ACCEPTABLE,
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
+ ))
# Duration must be positive
if self.duration and self.duration.days < 0:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-query-parameters")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
+ ))
# Now fill in the missing pieces
if self.start is None:
@@ -206,7 +226,11 @@
# End > start
if self.end <= self.start:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-query-parameters")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
+ ))
# TODO: We should probably verify that the actual time-range is within sensible bounds (e.g. not too far in the past or future and not too long)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/ical.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/ical.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/ical.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1310,9 +1310,10 @@
self.validateComponentsForCalDAV(False)
- def validateComponentsForCalDAV(self, method):
+ def validateComponentsForCalDAV(self, method, fix=False):
"""
@param method: True if METHOD property is allowed, False otherwise.
+ @param fix: True to try and fix bogus data
@raise InvalidICalendarDataError: if the given calendar component is not valid for
use as a X{CalDAV} resource.
"""
@@ -1405,18 +1406,30 @@
# If they're not both date or both date-time, raise error
if (subcomponent.hasProperty("DTSTART") and
subcomponent.hasProperty("RRULE")):
- dtType = type(subcomponent.getProperty("DTSTART").value())
+ dtValue = subcomponent.propertyNativeValue("DTSTART")
+ dtType = type(dtValue)
+ # Using properties("RRULE") rather than getRRuleSet() here
+ # because the dateutil rrule's _until values are datetime
+ # even if the UNTIL is a date (and therefore we can't
+ # check validity without doing the following):
for rrule in subcomponent.properties("RRULE"):
indexedTokens = {}
indexedTokens.update([valuePart.split("=")
for valuePart in rrule.value().split(";")])
- until = indexedTokens.get('UNTIL', None)
+ until = indexedTokens.get("UNTIL", None)
if until:
untilType = datetime.date if len(until) == 8 else datetime.datetime
if untilType is not dtType:
msg = "Calendar resources must have matching type for DTSTART and UNTIL"
log.debug(msg)
- raise InvalidICalendarDataError(msg)
+ if fix:
+ rrules = subcomponent.getRRuleSet()
+ if rrules:
+ log.debug("Fixing mismatch")
+ # vobject fixes DTSTART/UNTIL mismatches
+ subcomponent.setRRuleSet(rrules)
+ else:
+ raise InvalidICalendarDataError(msg)
timezone_refs.update(subcomponent.timezoneIDs())
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/mail.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/mail.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/mail.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -853,6 +853,7 @@
attendees.append( (cn, mailto) )
+ recipient = recipient.lower()
toAddr = recipient
if not recipient.startswith("mailto:"):
raise ValueError("ATTENDEE address '%s' must be mailto: for iMIP operation." % (recipient,))
@@ -909,12 +910,13 @@
else: # REPLY
inviteState = "reply"
+ originator = originator.lower()
if not originator.startswith("mailto:"):
raise ValueError("Originator address '%s' must be mailto: for REPLY." % (originator,))
formattedFrom = fromAddr = originator = originator[7:]
organizerMailto = str(calendar.getOrganizer())
- if not organizerMailto.startswith("mailto:"):
+ if not organizerMailto.lower().startswith("mailto:"):
raise ValueError("ORGANIZER address '%s' must be mailto: for REPLY." % (organizerMailto,))
orgEmail = organizerMailto[7:]
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcachepool.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcachepool.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcachepool.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -360,8 +360,11 @@
def add(self, *args, **kwargs):
return self.performRequest('add', *args, **kwargs)
+ def flush_all(self, *args, **kwargs):
+ return self.performRequest('flush_all', *args, **kwargs)
+
class CachePoolUserMixIn(object):
"""
A mixin that returns a saved cache pool or fetches the default cache pool.
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcacher.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcacher.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/memcacher.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -70,6 +70,10 @@
except KeyError:
return succeed(False)
+ def flush_all(self):
+ self._cache = {}
+ return succeed(True)
+
#TODO: an sqlite based cacher that can be used for multiple instance servers
# in the absence of memcached. This is not ideal and we may want to not implement
# this, but it is being documented for completeness.
@@ -93,7 +97,10 @@
def delete(self, key):
return succeed(True)
- def __init__(self, namespace, pickle=False, no_invalidation=False):
+ def flush_all(self):
+ return succeed(True)
+
+ def __init__(self, namespace, pickle=False, no_invalidation=False, key_normalization=True):
"""
@param namespace: a unique namespace for this cache's keys
@type namespace: C{str}
@@ -105,6 +112,9 @@
is not present,as there is no issue with caches in each instance getting out of sync. If C{False} the
nullCacher will be used for the multi-instance case when memcached is not configured.
@type no_invalidation: C{bool}
+ @param key_normalization: if C{True} the key is assumed to possibly be longer than the Memcache key size and so additional
+ work is done to truncate and append a hash.
+ @type key_normalization: C{bool}
"""
assert len(namespace) <= Memcacher.NAMESPACE_MAX_LENGTH, "Memcacher namespace must be less than or equal to %s characters long" % (Memcacher.NAMESPACE_MAX_LENGTH,)
@@ -113,6 +123,7 @@
self._namespace = namespace
self._pickle = pickle
self._noInvalidation = no_invalidation
+ self._key_normalization = key_normalization
def _getMemcacheProtocol(self):
@@ -141,9 +152,12 @@
key = key.encode("utf-8")
assert isinstance(key, str), "Key must be a str."
- hash = hashlib.md5(key).hexdigest()
- key = key[:Memcacher.TRUNCATED_KEY_LENGTH]
- return "%s-%s" % (key.translate(Memcacher.keyNormalizeTranslateTable), hash,)
+ if self._key_normalization:
+ hash = hashlib.md5(key).hexdigest()
+ key = key[:Memcacher.TRUNCATED_KEY_LENGTH]
+ return "%s-%s" % (key.translate(Memcacher.keyNormalizeTranslateTable), hash,)
+ else:
+ return key
def add(self, key, value, expire_time=0):
@@ -177,7 +191,10 @@
d.addCallback(_gotit)
return d
-
def delete(self, key):
self.log_debug("Deleting Cache Token for %r" % (key,))
return self._getMemcacheProtocol().delete('%s:%s' % (self._namespace, self._normalizeKey(key)))
+
+ def flush_all(self):
+ self.log_debug("Flushing All Cache Tokens")
+ return self._getMemcacheProtocol().flush_all()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -88,7 +88,11 @@
# Checks for copying a calendar collection
if self.isCalendarCollection():
log.err("Attempt to copy a calendar collection into another calendar collection %s" % destination)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "calendar-collection-location-ok")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot copy calendar collection inside another calendar collection",
+ ))
# We also do not allow regular collections in calendar collections
if self.isCollection():
@@ -168,7 +172,11 @@
# Checks for copying a calendar collection
if self.isCalendarCollection():
log.err("Attempt to move a calendar collection into another calendar collection %s" % destination)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "calendar-collection-location-ok")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot move calendar collection inside another calendar collection",
+ ))
# We also do not allow regular collections in calendar collections
if self.isCollection():
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove_contact.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove_contact.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/copymove_contact.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -81,7 +81,11 @@
# Checks for copying an addressbook collection
if self.isAddressBookCollection():
log.err("Attempt to copy an addressbook collection into another addressbook collection %s" % destination)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "addressbook-collection-location-ok")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot copy address book collection inside another address book collection",
+ ))
# We also do not allow regular collections in addressbook collections
if self.isCollection():
@@ -148,7 +152,11 @@
# Checks for copying an addressbook collection
if self.isAddressBookCollection():
log.err("Attempt to move an addressbook collection into another addressbook collection %s" % destination)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "addressbook-collection-location-ok")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot move address book collection inside another address book collection",
+ ))
# We also do not allow regular collections in addressbook collections
if self.isCollection():
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/get.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/get.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/get.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -46,7 +46,11 @@
if request.args:
action = request.args.get("action", ("",))
if len(action) != 1:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-action")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-action"),
+ "Invalid action parameter: %s" % (action,),
+ ))
action = action[0]
dispatch = {
@@ -54,7 +58,11 @@
}.get(action, None)
if dispatch is None:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "supported-action")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "supported-action"),
+ "Action not supported: %s" % (action,),
+ ))
response = (yield dispatch(request))
returnValue(response)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcalendar.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcalendar.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcalendar.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -53,16 +53,18 @@
log.err("Attempt to create collection where resource exists: %s" % (self,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (davxml.dav_namespace, "resource-must-be-null"))
- )
+ (davxml.dav_namespace, "resource-must-be-null"),
+ "Resource already exists",
+ ))
if not parent.isCollection():
log.err("Attempt to create collection with non-collection parent: %s"
% (self,))
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldavxml.caldav_namespace, "calendar-collection-location-ok"))
- )
+ (caldavxml.caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot create calendar inside another calendar",
+ ))
#
# Read request body
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcol.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcol.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/mkcol.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -58,16 +58,18 @@
% (self,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (davxml.dav_namespace, "resource-must-be-null"))
- )
+ (davxml.dav_namespace, "resource-must-be-null"),
+ "Resource already exists",
+ ))
if not parent.isCollection():
log.err("Attempt to create collection with non-collection parent: %s"
% (self,))
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (davxml.dav_namespace, "collection-location-ok"))
- )
+ (davxml.dav_namespace, "collection-location-ok"),
+ "Cannot create calendar inside another calendar",
+ ))
#
# Don't allow DAV collections in a calendar or address book collection
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/post.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/post.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/post.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -75,7 +75,11 @@
content_type = request.headers.getHeader("content-type")
if content_type is not None and (content_type.mediaType, content_type.mediaSubtype) != ("text", "calendar"):
self.log_error("MIME type %s not allowed in calendar collection" % (content_type,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "supported-calendar-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-calendar-data"),
+ "Wrong MIME type for calendar collection",
+ ))
# Read the calendar component from the stream
try:
@@ -87,7 +91,11 @@
# We must have some data at this point
if calendardata is None:
# Use correct DAV:error response
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="No calendar data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="No calendar data"
+ ))
# Create a new name if one was not provided
name = md5(str(calendardata) + str(time.time()) + request.path).hexdigest() + ".ics"
@@ -124,7 +132,11 @@
content_type = request.headers.getHeader("content-type")
if content_type is not None and (content_type.mediaType, content_type.mediaSubtype) != ("text", "vcard"):
self.log_error("MIME type %s not allowed in address book collection" % (content_type,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "supported-address-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "supported-address-data"),
+ "Wrong MIME type for address book collection",
+ ))
# Read the calendar component from the stream
try:
@@ -136,7 +148,11 @@
# We must have some data at this point
if vcarddata is None:
# Use correct DAV:error response
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-address-data"), description="No address data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-address-data"),
+ description="No address data"
+ ))
# Create a new name if one was not provided
name = md5(str(vcarddata) + str(time.time()) + request.path).hexdigest() + ".vcf"
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/propfind.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/propfind.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/propfind.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -127,6 +127,10 @@
inherited_aces=filtered_aces,
)
+ # This needed for propfind cache tracking of children changes
+ if depth == "1":
+ request.childCacheURIs = []
+
for readable, resource, uri in resources:
if readable:
if search_properties is "names":
@@ -183,6 +187,11 @@
propstats.append(xml_propstat)
xml_response = davxml.PropertyStatusResponse(davxml.HRef(uri), *propstats)
+
+ # This needed for propfind cache tracking of children changes
+ if depth == "1":
+ if resource != self and hasattr(resource, "url"):
+ request.childCacheURIs.append(resource.url())
else:
xml_response = davxml.StatusResponse(davxml.HRef(uri), davxml.Status.fromResponseCode(responsecode.FORBIDDEN))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -52,7 +52,11 @@
content_type = request.headers.getHeader("content-type")
if content_type is not None and (content_type.mediaType, content_type.mediaSubtype) != ("text", "calendar"):
log.err("MIME type %s not allowed in calendar collection" % (content_type,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "supported-calendar-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid MIME type for calendar collection",
+ ))
# Read the calendar component from the stream
try:
@@ -64,7 +68,11 @@
# We must have some data at this point
if calendardata is None:
# Use correct DAV:error response
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="No calendar data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="No calendar data"
+ ))
storer = StoreCalendarObjectResource(
request = request,
@@ -87,7 +95,11 @@
content_type = request.headers.getHeader("content-type")
if content_type is not None and (content_type.mediaType, content_type.mediaSubtype) != ("text", "vcard"):
log.err("MIME type %s not allowed in address book collection" % (content_type,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "supported-address-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "supported-address-data"),
+ "Invalid MIME type for address book collection",
+ ))
# Read the vcard component from the stream
try:
@@ -99,7 +111,11 @@
# We must have some data at this point
if vcarddata is None:
# Use correct DAV:error response
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-address-data"), description="No vcard data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-address-data"),
+ description="No vcard data"
+ ))
storer = StoreAddressObjectResource(
request = request,
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_addressbook_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_addressbook_common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_addressbook_common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2005-2009 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All 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,6 @@
import types
from twisted.internet import reactor
-from twisted.python.failure import Failure
from txdav.common.icommondatastore import ReservationError
@@ -31,16 +30,15 @@
from twisted.internet.defer import returnValue
from twext.web2 import responsecode
from twext.web2.dav import davxml
-from twext.web2.dav.element.base import dav_namespace
from twext.web2.dav.http import ErrorResponse
from twext.web2.dav.util import joinURL, parentForURL
from twext.web2.http import HTTPError
from twext.web2.http import StatusResponse
-from twext.web2.http_headers import MimeType, generateContentType
from twext.web2.stream import MemoryStream
from twistedcaldav.config import config
from twistedcaldav.carddavxml import NoUIDConflict, carddav_namespace
+from twistedcaldav import customxml
from twistedcaldav.vcard import Component
from twext.python.log import Logger
@@ -162,13 +160,27 @@
log.err(message)
raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Resource name not allowed"))
+ # Valid collection size check on the destination parent resource
+ result, message = (yield self.validCollectionSize())
+ if not result:
+ log.err(message)
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ customxml.MaxResources(),
+ message,
+ ))
+
if not self.sourceadbk:
# Valid content type check on the source resource if its not in a vcard collection
if self.source is not None:
result, message = self.validContentType()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "supported-address-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "supported-address-data"),
+ "Invalid content-type",
+ ))
# At this point we need the calendar data to do more tests
self.vcard = (yield self.source.vCard())
@@ -179,13 +191,21 @@
self.vcard = Component.fromString(self.vcard)
except ValueError, e:
log.err(str(e))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-address-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-address-data"),
+ "Could not parse vCard",
+ ))
# Valid vcard data for CalDAV check
result, message = self.validAddressDataCheck()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-addressbook-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-addressbook-object-resource"),
+ "Invalid vCard data",
+ ))
# Must have a valid UID at this point
self.uid = self.vcard.resourceUID()
@@ -195,7 +215,11 @@
self.uid = yield self.source_index.resourceUIDForName(self.source.name())
if self.uid is None:
log.err("Source vcard does not have a UID: %s" % self.source.name())
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-addressbook-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-addressbook-object-resource"),
+ "Missing UID in vCard",
+ ))
# FIXME: We need this here because we have to re-index the destination. Ideally it
# would be better to copy the index entries from the source and add to the destination.
@@ -205,7 +229,11 @@
result, message = self.validSizeCheck()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "max-resource-size")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "max-resource-size"),
+ "Address data too large",
+ ))
# Check access
returnValue(None)
@@ -237,6 +265,21 @@
return result, message
+ @inlineCallbacks
+ def validCollectionSize(self):
+ """
+ Make sure that any limits on the number of resources in a collection are enforced.
+ """
+ result = True
+ message = ""
+ if not self.destination.exists() and \
+ config.MaxResourcesPerCollection and \
+ len((yield self.destinationparent.listChildren())) >= config.MaxResourcesPerCollection:
+ result = False
+ message = "Too many resources in collection %s" % (self.destinationparent,)
+
+ returnValue((result, message,))
+
def validAddressDataCheck(self):
"""
Check that the vcard data is valid vCard.
@@ -264,11 +307,11 @@
"""
result = True
message = ""
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
vcardsize = len(str(self.vcard))
- if vcardsize > config.MaximumAttachmentSize:
+ if vcardsize > config.MaxResourceSize:
result = False
- message = "Data size %d bytes is larger than allowed limit %d bytes" % (vcardsize, config.MaximumAttachmentSize)
+ message = "Data size %d bytes is larger than allowed limit %d bytes" % (vcardsize, config.MaxResourceSize)
return result, message
@@ -358,16 +401,6 @@
returnValue(None)
@inlineCallbacks
- def doDestinationQuotaCheck(self):
- """
- Look at current quota after changes and see if we have gone over the top.
- """
- quota = (yield self.destination.quota(self.request))
- if quota[0] < 0:
- log.err("Over quota by %d" % (-quota[0],))
- raise HTTPError(ErrorResponse(responsecode.INSUFFICIENT_STORAGE_SPACE, (dav_namespace, "quota-not-exceeded")))
-
- @inlineCallbacks
def run(self):
"""
Function that does common PUT/COPY/MOVE behavior.
@@ -396,46 +429,30 @@
result, message, rname = yield self.noUIDConflict(self.uid)
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN,
- NoUIDConflict(davxml.HRef.fromString(joinURL(parentForURL(self.destination_uri), rname.encode("utf-8"))))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ NoUIDConflict(
+ davxml.HRef.fromString(
+ joinURL(
+ parentForURL(self.destination_uri),
+ rname.encode("utf-8")
+ )
+ )
+ ),
+ "UID already used in another resource",
))
# Do the actual put or copy
response = (yield self.doStore())
- # Remember the resource's content-type.
- if self.destinationadbk:
- content_type = self.request.headers.getHeader("content-type")
- if content_type is None:
- content_type = MimeType("text", "vcard",
- params={"charset":"utf-8"})
- self.destination.writeDeadProperty(
- davxml.GETContentType.fromString(generateContentType(content_type))
- )
-
- # Do quota check on destination
- yield self.doDestinationQuotaCheck()
-
if reservation:
yield reservation.unreserve()
returnValue(response)
except Exception, err:
- # Preserve the real traceback to display later, since the error-
- # handling here yields out of the generator and thereby shreds the
- # stack.
- f = Failure()
if reservation:
yield reservation.unreserve()
-
- # FIXME: transaction needs to be rolled back.
- # Display the traceback. Unfortunately this will usually be
- # duplicated by the higher-level exception handler that captures
- # the thing that raises here, but it's better than losing the
- # information.
- f.printTraceback()
-
raise err
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/put_common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twistedcaldav.test.test_validation -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All 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,22 +23,20 @@
import types
import uuid
+from urlparse import urlparse, urlunparse
from twisted.internet import reactor
from twisted.internet.defer import Deferred, inlineCallbacks, succeed
from twisted.internet.defer import returnValue
-from twisted.python.failure import Failure
from twisted.python import hashlib
from twext.web2.dav.util import joinURL, parentForURL
from twext.web2 import responsecode
from twext.web2.dav import davxml
-from twext.web2.dav.element.base import dav_namespace
from twext.web2.dav.element.base import PCDATAElement
from twext.web2.http import HTTPError
from twext.web2.http import StatusResponse
-from twext.web2.http_headers import generateContentType, MimeType
from twext.web2.iweb import IResponse
from twext.web2.stream import MemoryStream
@@ -51,6 +49,7 @@
from twistedcaldav.caldavxml import NoUIDConflict
from twistedcaldav.caldavxml import NumberOfRecurrencesWithinLimits
from twistedcaldav.caldavxml import caldav_namespace, MaxAttendeesPerInstance
+from twistedcaldav import customxml
from twistedcaldav.customxml import calendarserver_namespace
from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
@@ -209,19 +208,37 @@
log.err(message)
raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Resource name not allowed"))
+ # Valid collection size check on the destination parent resource
+ result, message = (yield self.validCollectionSize())
+ if not result:
+ log.err(message)
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ customxml.MaxResources(),
+ "Too many resources in collection",
+ ))
+
# Valid data sizes - do before parsing the data
if self.source is not None:
# Valid content length check on the source resource
result, message = self.validContentLength()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "max-resource-size")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "max-resource-size"),
+ "Calendar data too large",
+ ))
else:
# Valid calendar data size check
result, message = self.validSizeCheck()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "max-resource-size")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "max-resource-size"),
+ "Calendar data too large",
+ ))
if not self.sourcecal:
# Valid content type check on the source resource if its not in a calendar collection
@@ -229,14 +246,22 @@
result, message = self.validContentType()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "supported-calendar-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid content-type for data",
+ ))
# At this point we need the calendar data to do more tests
try:
self.calendar = (yield self.source.iCalendarForUser(self.request))
except ValueError, e:
log.err(str(e))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Can't parse calendar data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Can't parse calendar data"
+ ))
else:
try:
if type(self.calendar) in (types.StringType, types.UnicodeType,):
@@ -244,19 +269,31 @@
self.calendar = Component.fromString(self.calendar)
except ValueError, e:
log.err(str(e))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Can't parse calendar data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Can't parse calendar data"
+ ))
# Valid calendar data check
result, message = self.validCalendarDataCheck()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=message))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description=message
+ ))
# Valid calendar data for CalDAV check
result, message = self.validCalDAVDataCheck()
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-object-resource"),
+ "Invalid calendar data",
+ ))
# Valid attendee list size check
result, message = self.validAttendeeListSizeCheck()
@@ -265,7 +302,8 @@
raise HTTPError(
ErrorResponse(
responsecode.FORBIDDEN,
- MaxAttendeesPerInstance.fromString(str(config.MaxAttendeesPerInstance))
+ MaxAttendeesPerInstance.fromString(str(config.MaxAttendeesPerInstance)),
+ "Too many attendees in calenbdar data",
)
)
@@ -281,7 +319,11 @@
self.uid = yield self.source_index.resourceUIDForName(self.source.name())
if self.uid is None:
log.err("Source calendar does not have a UID: %s" % self.source)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-object-resource"),
+ "Missing UID in calendar data",
+ ))
# FIXME: We need this here because we have to re-index the destination. Ideally it
# would be better to copy the index entries from the source and add to the destination.
@@ -384,13 +426,28 @@
"""
result = True
message = ""
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
calsize = self.source.contentLength()
- if calsize is not None and calsize > config.MaximumAttachmentSize:
+ if calsize is not None and calsize > config.MaxResourceSize:
result = False
- message = "File size %d bytes is larger than allowed limit %d bytes" % (calsize, config.MaximumAttachmentSize)
+ message = "File size %d bytes is larger than allowed limit %d bytes" % (calsize, config.MaxResourceSize)
return result, message
+
+ @inlineCallbacks
+ def validCollectionSize(self):
+ """
+ Make sure that any limits on the number of resources in a collection are enforced.
+ """
+ result = True
+ message = ""
+ if not self.destination.exists() and \
+ config.MaxResourcesPerCollection and \
+ len((yield self.destinationparent.listChildren())) >= config.MaxResourcesPerCollection:
+ result = False
+ message = "Too many resources in collection %s" % (self.destinationparent,)
+
+ returnValue((result, message,))
def validCalendarDataCheck(self):
"""
@@ -438,11 +495,11 @@
"""
result = True
message = ""
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
calsize = len(str(self.calendar))
- if calsize > config.MaximumAttachmentSize:
+ if calsize > config.MaxResourceSize:
result = False
- message = "Data size %d bytes is larger than allowed limit %d bytes" % (calsize, config.MaximumAttachmentSize)
+ message = "Data size %d bytes is larger than allowed limit %d bytes" % (calsize, config.MaxResourceSize)
return result, message
@@ -473,7 +530,11 @@
# Must be a value we know about
self.access = self.calendar.accessLevel(default=None)
if self.access is None:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (calendarserver_namespace, "valid-access-restriction")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (calendarserver_namespace, "valid-access-restriction"),
+ "Private event access level not allowed",
+ ))
# Only DAV:owner is able to set the property to other than PUBLIC
if not self.internal_request:
@@ -481,7 +542,11 @@
authz = self.destinationparent.currentPrincipal(self.request)
if davxml.Principal(parent_owner) != authz and self.access != Component.ACCESS_PUBLIC:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (calendarserver_namespace, "valid-access-restriction-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (calendarserver_namespace, "valid-access-restriction-change"),
+ "Private event access level change not allowed",
+ ))
return None
@@ -504,9 +569,12 @@
try:
result = self.calendar.truncateRecurrence(config.MaxInstancesForRRULE)
except (ValueError, TypeError), ex:
- msg = "Cannot truncate calendar resource: %s" % (ex,)
- log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ log.err("Cannot truncate calendar resource: %s" % (ex,))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "Cannot truncate recurrences",
+ ))
if result:
self.calendardata = str(self.calendar)
return result
@@ -540,6 +608,69 @@
@inlineCallbacks
+ def dropboxPathNormalization(self):
+ """
+ Make sure sharees only use dropbox paths of the sharer.
+ """
+
+ # Only relevant if calendar is virtual share
+ changed = False
+ if self.destinationparent.isVirtualShare():
+
+ # Get all X-APPLE-DROPBOX's and ATTACH's that are http URIs
+ xdropboxes = self.calendar.getAllPropertiesInAnyComponent(
+ "X-APPLE-DROPBOX",
+ depth=1,
+ )
+ attachments = self.calendar.getAllPropertiesInAnyComponent(
+ "ATTACH",
+ depth=1,
+ )
+ attachments = [
+ attachment for attachment in attachments
+ if attachment.params().get("VALUE", ("TEXT",))[0] == "URI" and attachment.value().startswith("http")
+ ]
+
+ if len(xdropboxes) or len(attachments):
+
+ # Determine owner GUID
+ ownerPrincipal = (yield self.destinationparent.ownerPrincipal(self.request))
+ owner = ownerPrincipal.principalURL().split("/")[-2]
+
+ def uriNormalize(uri):
+ urichanged = False
+ scheme, netloc, path, params, query, fragment = urlparse(uri)
+ pathbits = path.split("/")
+ if pathbits[1] != "calendars":
+ pathbits[1] = "calendars"
+ urichanged = True
+ if pathbits[2] != "__uids__":
+ pathbits[2] = "__uids__"
+ urichanged = True
+ if pathbits[3] != owner:
+ pathbits[3] = owner
+ urichanged = True
+ if urichanged:
+ return urlunparse((scheme, netloc, "/".join(pathbits), params, query, fragment,))
+ return None
+
+ for xdropbox in xdropboxes:
+ uri = uriNormalize(xdropbox.value())
+ if uri:
+ xdropbox.setValue(uri)
+ changed = True
+ for attachment in attachments:
+ uri = uriNormalize(attachment.value())
+ if uri:
+ attachment.setValue(uri)
+ changed = True
+
+ if changed:
+ self.calendardata = None
+
+ returnValue(changed)
+
+ @inlineCallbacks
def noUIDConflict(self, uid):
"""
Check that the UID of the new calendar object conforms to the requirements of
@@ -672,9 +803,12 @@
try:
self.calendar = PerUserDataFilter(accessUID).merge(self.calendar.duplicate(), oldCal)
except ValueError:
- msg = "Invalid per-user data merge"
- log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ log.err("Invalid per-user data merge")
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "Cannot merge per-user data",
+ ))
self.calendardata = None
@@ -768,6 +902,8 @@
# Schedule-Tag did not change => add current ETag to list of those that can
# be used in a weak pre-condition test
etags = self.destination.scheduleEtags
+ if etags is None:
+ etags = ()
etags += (hashlib.md5(data).hexdigest(),)
self.destination.scheduleEtags = etags
else:
@@ -795,17 +931,6 @@
returnValue(None)
@inlineCallbacks
- def doDestinationQuotaCheck(self):
- """
- Look at current quota after changes and see if we have gone over the top.
- """
- quota = (yield self.destination.quota(self.request))
- if quota[0] < 0:
- log.err("Over quota by %d" % (-quota[0],))
- raise HTTPError(ErrorResponse(responsecode.INSUFFICIENT_STORAGE_SPACE, (dav_namespace, "quota-not-exceeded")))
-
-
- @inlineCallbacks
def run(self):
"""
Function that does common PUT/COPY/MOVE behavior.
@@ -834,10 +959,18 @@
result, message, rname = yield self.noUIDConflict(self.uid)
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN,
- NoUIDConflict(davxml.HRef.fromString(
- joinURL(parentForURL(self.destination_uri),
- rname.encode("utf-8"))))))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ NoUIDConflict(
+ davxml.HRef.fromString(
+ joinURL(
+ parentForURL(self.destination_uri),
+ rname.encode("utf-8")
+ )
+ )
+ ),
+ "UID already exists",
+ ))
# Handle RRULE truncation
@@ -846,6 +979,9 @@
# Preserve private comments
yield self.preservePrivateComments()
+ # Handle sharing dropbox normalization
+ dropboxChanged = (yield self.dropboxPathNormalization())
+
# Do scheduling
implicit_result = (yield self.doImplicitScheduling())
if isinstance(implicit_result, int):
@@ -865,14 +1001,22 @@
else:
msg = "Attendee cannot create event for Organizer: %s" % (implicit_result,)
log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed"), description=msg))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ description=msg
+ ))
returnValue(StatusResponse(responsecode.OK, "Resource modified but immediately deleted by the server."))
else:
msg = "Invalid return status code from ImplicitScheduler: %s" % (implicit_result,)
log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description=msg
+ ))
else:
self.isScheduleResource, data_changed, did_implicit_action = implicit_result
@@ -880,7 +1024,7 @@
response = (yield self.doStore(data_changed))
# Must not set ETag in response if data changed
- if did_implicit_action or rruleChanged:
+ if did_implicit_action or rruleChanged or dropboxChanged:
def _removeEtag(request, response):
response.headers.removeHeader('etag')
return response
@@ -888,35 +1032,27 @@
self.request.addResponseFilter(_removeEtag, atEnd=True)
- # Do quota check on destination
- yield self.doDestinationQuotaCheck()
-
if reservation:
yield reservation.unreserve()
returnValue(response)
except Exception, err:
- # Preserve the real traceback to display later, since the error-
- # handling here yields out of the generator and thereby shreds the
- # stack.
- f = Failure()
+
if reservation:
yield reservation.unreserve()
- # FIXME: transaction needs to be rolled back.
-
if isinstance(err, InvalidOverriddenInstanceError):
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Invalid overridden instance"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Invalid overridden instance"
+ ))
elif isinstance(err, TooManyInstancesError):
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- NumberOfRecurrencesWithinLimits(PCDATAElement(str(err.max_allowed)))
- ))
+ NumberOfRecurrencesWithinLimits(PCDATAElement(str(err.max_allowed))),
+ "Too many recurrence instances",
+ ))
else:
- # Display the traceback. Unfortunately this will usually be
- # duplicated by the higher-level exception handler that captures
- # the thing that raises here, but it's better than losing the
- # information.
- f.printTraceback()
raise err
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -119,7 +119,8 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- davxml.SupportedReport()
+ davxml.SupportedReport(),
+ "Report not supported on this resource",
))
#
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_addressbook_query.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_addressbook_query.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_addressbook_query.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -81,7 +81,11 @@
result, message, generate_address_data = report_common.validPropertyListAddressDataTypeVersion(query)
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "supported-address-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "supported-address-data"),
+ "Invalid address-data",
+ ))
else:
raise AssertionError("We shouldn't be here")
@@ -89,7 +93,11 @@
# Verify that the filter element is valid
if (filter is None) or not filter.valid():
log.err("Invalid filter element: %r" % (filter,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (carddav_namespace, "valid-filter")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddav_namespace, "valid-filter"),
+ "Invalid filter element",
+ ))
matchcount = [0,]
max_number_of_results = [config.MaxQueryWithDataResults if generate_address_data else None,]
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_calendar_query.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_calendar_query.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_calendar_query.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -74,7 +74,11 @@
if query_tz is not None and not query_tz.valid():
msg = "CalDAV:timezone must contain one VTIMEZONE component only: %s" % (query_tz,)
log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "Invalid calendar-data",
+ ))
if query_tz:
filter.settimezone(query_tz)
query_timezone = tuple(calendar_query.timezone.calendar().subcomponents())[0]
@@ -94,7 +98,11 @@
result, message, generate_calendar_data = report_common.validPropertyListCalendarDataTypeVersion(props)
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "supported-calendar-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid calendar-data",
+ ))
else:
raise AssertionError("We shouldn't be here")
@@ -102,7 +110,11 @@
# Verify that the filter element is valid
if (filter is None) or not filter.valid():
log.err("Invalid filter element: %r" % (xmlfilter,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-filter")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-filter"),
+ "Invalid filter element",
+ ))
matchcount = [0]
max_number_of_results = [config.MaxQueryWithDataResults if generate_calendar_data else None,]
@@ -232,11 +244,16 @@
log.err("Too many instances need to be computed in calendar-query report")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- NumberOfRecurrencesWithinLimits(PCDATAElement(str(ex.max_allowed)))
- ))
+ NumberOfRecurrencesWithinLimits(PCDATAElement(str(ex.max_allowed))),
+ "Too many instrances",
+ ))
except NumberOfMatchesWithinLimits:
log.err("Too many matching components in calendar-query report")
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.NumberOfMatchesWithinLimits()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many components",
+ ))
if not hasattr(request, "extendedLogItems"):
request.extendedLogItems = {}
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@
except ImportError:
from md5 import new as md5
-from vobject.icalendar import utc
+from vobject.icalendar import utc, dateTimeToString
from twisted.internet.defer import inlineCallbacks, returnValue, maybeDeferred
from twisted.python.failure import Failure
@@ -55,14 +55,17 @@
from twistedcaldav import caldavxml
from twistedcaldav import carddavxml
-from twistedcaldav.caldavxml import caldav_namespace, CalendarData
+from twistedcaldav.caldavxml import caldav_namespace, CalendarData, TimeRange
from twistedcaldav.carddavxml import AddressData
+from twistedcaldav.config import config
from twistedcaldav.datafilters.calendardata import CalendarDataFilter
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
from twistedcaldav.ical import Component, Property, iCalendarProductID
from twistedcaldav.instance import InstanceList
+from twistedcaldav.memcacher import Memcacher
from twistedcaldav.query import calendarqueryfilter
@@ -377,8 +380,50 @@
fbtype_mapper = {"BUSY": 0, "BUSY-TENTATIVE": 1, "BUSY-UNAVAILABLE": 2}
fbtype_index_mapper = {'B': 0, 'T': 1, 'U': 2}
+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.getSyncToken())
+ entry = (yield fbcacher.get(key))
+
+ if entry:
+
+ # Offset one day at either end to account for floating
+ cached_start = entry.timerange.start + datetime.timedelta(days=FBCacheEntry.CACHE_DAYS_FLOATING_ADJUST)
+ cached_end = entry.timerange.end - datetime.timedelta(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)
+
+ @classmethod
+ @inlineCallbacks
+ def makeCacheEntry(cls, calresource, useruid, timerange, fbresults):
+
+ key = calresource.resourceID() + "/" + useruid
+ token = (yield calresource.getSyncToken())
+ entry = cls(key, token, timerange, fbresults)
+ yield fbcacher.set(key, entry)
+
@inlineCallbacks
def generateFreeBusyInfo(request, calresource, fbinfo, timerange, matchtotal,
excludeuid=None, organizer=None,
@@ -416,50 +461,76 @@
organizer_principal = calresource.principalForCalendarUserAddress(organizer) if organizer else None
organizer_uid = organizer_principal.principalUID() if organizer_principal else ""
- #
- # 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(
- caldavxml.ComponentFilter(
- caldavxml.ComponentFilter(
- timerange,
- name=("VEVENT", "VFREEBUSY", "VAVAILABILITY"),
- ),
- name="VCALENDAR",
- )
- )
- filter = calendarqueryfilter.Filter(filter)
-
- # Get the timezone property from the collection, and store in the query filter
- # for use during the query itself.
- has_prop = (yield calresource.hasProperty((caldav_namespace, "calendar-timezone"), request))
- if has_prop:
- tz = (yield calresource.readProperty((caldav_namespace, "calendar-timezone"), request))
- else:
- tz = None
- tzinfo = filter.settimezone(tz)
-
- # Do some optimization of access control calculation by determining any
- # inherited ACLs outside of the child resource loop and supply those to the
- # checkPrivileges on each child.
- filteredaces = (yield calresource.inheritedACEsforChildren(request))
-
+ # Free busy is per-user
userPrincipal = (yield calresource.resourceOwnerPrincipal(request))
if userPrincipal:
useruid = userPrincipal.principalUID()
else:
useruid = ""
- try:
- resources = yield maybeDeferred(calresource.index().indexedSearch,
- filter, useruid=useruid, fbtype=True
- )
- except IndexedSearchException:
- resources = yield maybeDeferred(calresource.index().bruteForceSearch)
+
+ # 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
+ if not hasattr(request, "extendedLogItems"):
+ request.extendedLogItems = {}
+ 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(datetime.date.today() - datetime.timedelta(days=config.FreeBusyCacheDaysBack))
+ cache_end = normalizeToUTC(datetime.date.today() + datetime.timedelta(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=dateTimeToString(cache_start), end=dateTimeToString(cache_end))
+ 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(
+ caldavxml.ComponentFilter(
+ caldavxml.ComponentFilter(
+ cache_timerange if caching else timerange,
+ name=("VEVENT", "VFREEBUSY", "VAVAILABILITY"),
+ ),
+ name="VCALENDAR",
+ )
+ )
+ filter = calendarqueryfilter.Filter(filter)
+
+ # Get the timezone property from the collection, and store in the query filter
+ # for use during the query itself.
+ has_prop = (yield calresource.hasProperty((caldav_namespace, "calendar-timezone"), request))
+ if has_prop:
+ tz = (yield calresource.readProperty((caldav_namespace, "calendar-timezone"), request))
+ else:
+ tz = None
+ tzinfo = filter.settimezone(tz)
+
+ try:
+ resources = yield maybeDeferred(calresource.index().indexedSearch,
+ filter, useruid=useruid, fbtype=True
+ )
+ if caching:
+ 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"):
+ request.extendedLogItems = {}
+ request.extendedLogItems["fb-cached"] = request.extendedLogItems.get("fb-cached", 0) + 1
+
# We care about separate instances for VEVENTs only
aggregated_resources = {}
for name, uid, type, test_organizer, float, start, end, fbtype, transp in resources:
@@ -471,16 +542,6 @@
name, uid, type, test_organizer = key
- # Check privileges - must have at least CalDAV:read-free-busy
- child = (yield request.locateChildResource(calresource, name))
-
- # TODO: for server-to-server we bypass this right now as we have no way to authorize external users.
- if not servertoserver:
- try:
- yield child.checkPrivileges(request, (caldavxml.ReadFreeBusy(),), inherited_aces=filteredaces, principal=organizerPrincipal)
- except AccessDeniedError:
- continue
-
# Short-cut - if an fbtype exists we can use that
if type == "VEVENT" and aggregated_resources[key][0][3] != '?':
@@ -533,6 +594,7 @@
raise NumberOfMatchesWithinLimits(max_number_of_matches)
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
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_freebusy.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_freebusy.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_freebusy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -80,7 +80,11 @@
yield report_common.applyToCalendarCollections(self, request, request.uri, depth, generateFreeBusyInfo, (caldavxml.ReadFreeBusy(),))
except NumberOfMatchesWithinLimits:
log.err("Too many matching components in free-busy report")
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.NumberOfMatchesWithinLimits()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many components"
+ ))
# Now build a new calendar object with the free busy info we have
fbcalendar = report_common.buildFreeBusyResult(fbinfo, timerange)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_multiget_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_multiget_common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_multiget_common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -94,14 +94,22 @@
result = True
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, precondition))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ precondition,
+ "Invalid object data element",
+ ))
else:
raise AssertionError("We shouldn't be here")
# Check size of results is within limit when data property requested
if hasData and len(resources) > config.MaxMultigetWithDataHrefs:
log.err("Too many results in multiget report returning data: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.NumberOfMatchesWithinLimits()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many resources",
+ ))
"""
Three possibilities exist:
@@ -259,14 +267,22 @@
directoryAddressBookLock, limited = (yield self.directory.cacheVCardsForAddressBookQuery(addressBookFilter, propertyreq, limit) )
if limited:
log.err("Too many results in multiget report: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "number-of-matches-within-limits")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "number-of-matches-within-limits"),
+ "Too many results",
+ ))
else:
#get vCards and filter
limit = config.DirectoryAddressBook.MaxQueryResults
vCardRecords, limited = (yield self.directory.vCardRecordsForAddressBookQuery( addressBookFilter, propertyreq, limit ))
if limited:
log.err("Too many results in multiget report: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "number-of-matches-within-limits")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "number-of-matches-within-limits"),
+ "Too many results",
+ ))
for href in valid_hrefs:
matchingRecord = None
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_sync_collection.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_sync_collection.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/method/report_sync_collection.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -51,7 +51,11 @@
# These resource support the report
if not config.EnableSyncReport or davxml.Report(SyncCollection(),) not in self.supportedReports():
log.err("sync-collection report is only allowed on calendar/inbox/addressbook/notification collection resources %s" % (self,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.SupportedReport()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.SupportedReport(),
+ "Report not supported on this resource",
+ ))
responses = []
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/notify.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/notify.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/notify.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -39,7 +39,7 @@
from twisted.internet.protocol import ReconnectingClientFactory, ServerFactory
from twisted.internet.ssl import ClientContextFactory
-from twisted.internet.defer import inlineCallbacks, Deferred
+from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
from twisted.protocols.basic import LineReceiver
from twisted.plugin import IPlugin
from twisted.application import internet, service
@@ -142,6 +142,21 @@
else:
return "%s|%s" % (self._prefix, id)
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ id = self.getID(label=label)
+ pubSubConfig = self._notifierFactory.pubSubConfig
+ name = getPubSubPath(id, pubSubConfig)
+ try:
+ if self._notifierFactory.nodeCacher:
+ nodeCacher = self._notifierFactory.nodeCacher
+ else:
+ nodeCacher = getNodeCacher()
+ (yield nodeCacher.waitForNode(self, name))
+ except NodeCreationException, e:
+ self.log_warn(e)
+ returnValue(None)
+ returnValue(name)
class NotificationClientLineProtocol(LineReceiver, LoggingMixIn):
"""
@@ -205,10 +220,16 @@
gateway.
"""
- def __init__(self, host, port, reactor=None):
+ def __init__(self, gatewayHost, gatewayPort, pubSubConfig=None,
+ nodeCacher=None, reactor=None):
+
self.factory = None
- self.host = host
- self.port = port
+
+ self.gatewayHost = gatewayHost
+ self.gatewayPort = gatewayPort
+ self.pubSubConfig = pubSubConfig
+ self.nodeCacher = nodeCacher
+
self.observers = set()
self.queued = set()
@@ -219,7 +240,8 @@
def send(self, op, id):
if self.factory is None:
self.factory = NotificationClientFactory(self)
- self.reactor.connectTCP(self.host, self.port, self.factory)
+ self.reactor.connectTCP(self.gatewayHost, self.gatewayPort,
+ self.factory)
self.log_debug("Creating factory")
msg = "%s %s" % (op, str(id))
@@ -700,7 +722,13 @@
self.sendDebug("Node publish failed (%s)" % (nodeName,), iq)
# Don't know how to proceed
self.unlockNode(None, nodeName)
+ except AttributeError:
+ # We did not get an XML response; most likely it was a disconnection
+ self.unlockNode(None, nodeName)
+ # Don't re-raise, just unlock and ignore
except:
+ # Note: this block is not a "finally" because in the case of a 404
+ # we don't want to unlock yet
self.unlockNode(None, nodeName)
raise
@@ -886,6 +914,9 @@
self.log_error("PubSub node configuration error: %s" %
(iq.toXml().encode('ascii', 'replace')),)
self.sendError("Failed to configure node (%s)" % (nodeName,), iq)
+ except AttributeError:
+ # We did not get an XML response; most likely it was a disconnection
+ pass
finally:
self.unlockNode(None, nodeName)
@@ -922,6 +953,9 @@
self.log_error("PubSub node delete error: %s" %
(iq.toXml().encode('ascii', 'replace')),)
self.sendDebug("Node delete failed (%s)" % (nodeName,), iq)
+ except AttributeError:
+ # We did not get an XML response; most likely it was a disconnection
+ pass
finally:
self.unlockNode(None, nodeName)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/calendarquery.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/calendarquery.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/calendarquery.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -197,10 +197,10 @@
endfloat = floatoffset(end, tzinfo) if end else None
return (
- str(start) if start else None,
- str(end) if end else None,
- str(startfloat) if startfloat else None,
- str(endfloat) if endfloat else None,
+ (start) if start else None,
+ (end) if end else None,
+ (startfloat) if startfloat else None,
+ (endfloat) if endfloat else None,
)
def sqlcalendarquery(filter, calendarid=None, userid=None, generator=sqlgenerator.sqlgenerator):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/sqlgenerator.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/sqlgenerator.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/query/sqlgenerator.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -266,13 +266,13 @@
e3 = expression.notcontainsExpression("SUMMARY", "help", True)
e5 = expression.andExpression([e1, e2, e3])
print e5
- sql = sqlgenerator(e5)
- print sql.generate()
+ #sql = sqlgenerator(e5, 'dummy-cal', 'dummy-user')
+ #print sql.generate()
e6 = expression.inExpression("TYPE", ("VEVENT", "VTODO",), False)
print e6
- sql = sqlgenerator(e6)
+ sql = sqlgenerator(e6, 'dummy-cal', 'dummy-user')
print sql.generate()
e7 = expression.notinExpression("TYPE", ("VEVENT", "VTODO",), False)
print e7
- sql = sqlgenerator(e7)
+ sql = sqlgenerator(e7, 'dummy-cal', 'dummy-user')
print sql.generate()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/resource.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/resource.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twistedcaldav.test.test_resource,twistedcaldav.test.test_wrapping -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All 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,6 +59,8 @@
from twistedcaldav import caldavxml, customxml
from twistedcaldav import carddavxml
+from twistedcaldav.cache import PropfindCacheMixin, DisabledCacheNotifier,\
+ CacheStoreNotifier
from twistedcaldav.caldavxml import caldav_namespace
from twistedcaldav.carddavxml import carddav_namespace
from twistedcaldav.config import config
@@ -73,9 +75,10 @@
from twistedcaldav.ical import allowedComponents
from twistedcaldav.icaldav import ICalDAVResource, ICalendarPrincipalResource
from twistedcaldav.linkresource import LinkResource
-from twistedcaldav.notify import (getPubSubConfiguration, getPubSubPath,
- getPubSubXMPPURI, getPubSubHeartbeatURI, getPubSubAPSConfiguration,
- getNodeCacher, NodeCreationException)
+from twistedcaldav.notify import (
+ getPubSubConfiguration, getPubSubXMPPURI, getPubSubHeartbeatURI,
+ getPubSubAPSConfiguration,
+)
from twistedcaldav.sharing import SharedCollectionMixin, SharedHomeMixin
from twistedcaldav.vcard import Component as vComponent
@@ -127,7 +130,8 @@
def http_MKCALENDAR(self, request):
return ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "calendar-collection-location-ok")
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Resource is read-only",
)
class ReadOnlyNoCopyResourceMixIn (ReadOnlyResourceMixIn):
@@ -176,6 +180,22 @@
calendarPrivilegeSet = _calendarPrivilegeSet()
+def updateCacheTokenOnCallback(f):
+ def fun(self, *args, **kwargs):
+ def _updateToken(response):
+ return self.cacheNotifier.changed().addCallback(
+ lambda _: response)
+
+ d = maybeDeferred(f, self, *args, **kwargs)
+
+ if hasattr(self, 'cacheNotifier'):
+ d.addCallback(_updateToken)
+
+ return d
+
+ return fun
+
+
class CalDAVResource (
CalDAVComplianceMixIn, SharedCollectionMixin,
DAVResourceWithChildrenMixin, DAVResource, LoggingMixIn
@@ -343,6 +363,18 @@
# End transitional new-store interface
+ @updateCacheTokenOnCallback
+ def http_PROPPATCH(self, request):
+ return super(CalDAVResource, self).http_PROPPATCH(request)
+
+ @updateCacheTokenOnCallback
+ def http_DELETE(self, request):
+ return super(CalDAVResource, self).http_DELETE(request)
+
+ @updateCacheTokenOnCallback
+ def http_ACL(self, request):
+ return super(CalDAVResource, self).http_ACL(request)
+
##
# WebDAV
##
@@ -358,7 +390,7 @@
caldavxml.SupportedCalendarData.qname(),
customxml.GETCTag.qname(),
)
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
baseProperties += (
caldavxml.MaxResourceSize.qname(),
)
@@ -380,7 +412,7 @@
customxml.GETCTag.qname(),
customxml.PubSubXMPPPushKeyProperty.qname(),
)
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
baseProperties += (
carddavxml.MaxResourceSize.qname(),
)
@@ -506,10 +538,8 @@
dataObject = getattr(self, "_newStoreObject")
if dataObject:
label = "collection" if isvirt else "default"
- notifierID = dataObject.notifierID(label=label)
- if notifierID is not None and config.Notifications.Services.XMPPNotifier.Enabled:
- pubSubConfiguration = getPubSubConfiguration(config)
- nodeName = getPubSubPath(notifierID, pubSubConfiguration)
+ nodeName = (yield dataObject.nodeName(label=label))
+ if nodeName:
propVal = customxml.PubSubXMPPPushKeyProperty(nodeName)
returnValue(propVal)
@@ -579,9 +609,9 @@
elif qname == caldavxml.MaxResourceSize.qname():
# CalDAV-access-15, section 5.2.5
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
returnValue(caldavxml.MaxResourceSize.fromString(
- str(config.MaximumAttachmentSize)
+ str(config.MaxResourceSize)
))
elif qname == caldavxml.MaxAttendeesPerInstance.qname():
@@ -620,9 +650,9 @@
elif qname == carddavxml.MaxResourceSize.qname():
# CardDAV, section 6.2.3
- if config.MaximumAttachmentSize:
+ if config.MaxResourceSize:
returnValue(carddavxml.MaxResourceSize.fromString(
- str(config.MaximumAttachmentSize)
+ str(config.MaxResourceSize)
))
elif qname == customxml.Invite.qname():
@@ -1315,14 +1345,22 @@
if revision > current_revision:
raise ValueError
except ValueError:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "valid-sync-token")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "valid-sync-token"),
+ "Sync token is invalid",
+ ))
else:
revision = 0
try:
changed, removed, notallowed = yield self._indexWhatChanged(revision, depth)
except SyncTokenValidException:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "valid-sync-token")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "valid-sync-token"),
+ "Sync token not recognized",
+ ))
returnValue((changed, removed, notallowed, current_token))
@@ -1385,6 +1423,7 @@
return super(CalDAVResource, self).checkPreconditions(request)
+ @inlineCallbacks
def createCalendar(self, request):
"""
External API for creating a calendar. Verify that the parent is a
@@ -1412,21 +1451,30 @@
# Verify that no parent collection is a calendar also
#
- def _defer(parent):
- if parent is not None:
- self.log_error("Cannot create a calendar collection within a calendar collection %s" % (parent,))
+ parent = (yield self._checkParents(request, isPseudoCalendarCollectionResource))
+
+ if parent is not None:
+ self.log_error("Cannot create a calendar collection within a calendar collection %s" % (parent,))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldavxml.caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot create a calendar collection inside another calendar collection",
+ ))
+
+ # Check for any quota limits
+ if config.MaxCollectionsPerHome:
+ parent = (yield self.locateParent(request, request.urlForResource(self)))
+ if (yield parent.countOwnedChildren()) >= config.MaxCollectionsPerHome: # NB this ignores shares
+ self.log_error("Cannot create a calendar collection because there are too many already present in %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldavxml.caldav_namespace, "calendar-collection-location-ok")
+ customxml.MaxCollections(),
+ "Too many calendar collections",
))
+
+ returnValue((yield self.createCalendarCollection()))
- return self.createCalendarCollection()
- parent = self._checkParents(request, isPseudoCalendarCollectionResource)
- parent.addCallback(_defer)
- return parent
-
-
def createCalendarCollection(self):
"""
Internal API for creating a calendar collection.
@@ -1466,6 +1514,7 @@
raise NotImplementedError()
+ @inlineCallbacks
def createAddressBook(self, request):
"""
External API for creating an addressbook. Verify that the parent is a
@@ -1498,20 +1547,28 @@
# Verify that no parent collection is a calendar also
#
- def _defer(parent):
- if parent is not None:
- self.log_error("Cannot create an address book collection within an address book collection %s" % (parent,))
+ parent = (yield self._checkParents(request, isAddressBookCollectionResource))
+ if parent is not None:
+ self.log_error("Cannot create an address book collection within an address book collection %s" % (parent,))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (carddavxml.carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot create an address book collection inside of an address book collection",
+ ))
+
+ # Check for any quota limits
+ if config.MaxCollectionsPerHome:
+ parent = (yield self.locateParent(request, request.urlForResource(self)))
+ if (yield parent.countOwnedChildren()) >= config.MaxCollectionsPerHome: # NB this ignores shares
+ self.log_error("Cannot create a calendar collection because there are too many already present in %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddavxml.carddav_namespace, "addressbook-collection-location-ok")
+ customxml.MaxCollections(),
+ "Too many address book collections",
))
+
+ returnValue((yield self.createAddressBookCollection()))
- return self.createAddressBookCollection()
-
- parent = self._checkParents(request, isAddressBookCollectionResource)
- parent.addCallback(_defer)
- return parent
-
def createAddressBookCollection(self):
"""
Internal API for creating an addressbook collection.
@@ -1724,7 +1781,7 @@
baseProperties = ()
- if config.EnableCalDAV:
+ if self.calendarsEnabled():
baseProperties += (
(caldav_namespace, "calendar-home-set" ),
(caldav_namespace, "calendar-user-address-set"),
@@ -1736,7 +1793,7 @@
(calendarserver_namespace, "auto-schedule" ),
)
- if config.EnableCardDAV:
+ if self.addressBooksEnabled():
baseProperties += (carddavxml.AddressBookHomeSet.qname(),)
if config.DirectoryAddressBook.Enabled:
baseProperties += (carddavxml.DirectoryGateway.qname(),)
@@ -1752,6 +1809,12 @@
def isCollection(self):
return True
+ def calendarsEnabled(self):
+ return config.EnableCalDAV
+
+ def addressBooksEnabled(self):
+ return config.EnableCardDAV
+
@inlineCallbacks
def readProperty(self, property, request):
if type(property) is tuple:
@@ -1761,7 +1824,7 @@
namespace, name = qname
- if namespace == caldav_namespace:
+ if namespace == caldav_namespace and self.calendarsEnabled():
if name == "calendar-home-set":
returnValue(caldavxml.CalendarHomeSet(
*[davxml.HRef(url) for url in self.calendarHomeURLs()]
@@ -1804,23 +1867,23 @@
else:
returnValue(customxml.NotificationURL(davxml.HRef(url)))
- elif name == "calendar-proxy-read-for":
+ elif name == "calendar-proxy-read-for" and self.calendarsEnabled():
results = (yield self.proxyFor(False))
returnValue(customxml.CalendarProxyReadFor(
*[davxml.HRef(principal.principalURL()) for principal in results]
))
- elif name == "calendar-proxy-write-for":
+ elif name == "calendar-proxy-write-for" and self.calendarsEnabled():
results = (yield self.proxyFor(True))
returnValue(customxml.CalendarProxyWriteFor(
*[davxml.HRef(principal.principalURL()) for principal in results]
))
- elif name == "auto-schedule":
+ elif name == "auto-schedule" and self.calendarsEnabled():
autoSchedule = self.getAutoSchedule()
returnValue(customxml.AutoSchedule("true" if autoSchedule else "false"))
- elif config.EnableCardDAV and namespace == carddav_namespace:
+ elif namespace == carddav_namespace and self.addressBooksEnabled():
if name == "addressbook-home-set":
returnValue(carddavxml.AddressBookHomeSet(
*[davxml.HRef(url) for url in self.addressBookHomeURLs()]
@@ -1833,21 +1896,6 @@
result = (yield super(CalendarPrincipalResource, self).readProperty(property, request))
returnValue(result)
- def calendarHomeURLs(self):
- if self.hasDeadProperty((caldav_namespace, "calendar-home-set")):
- home_set = self.readDeadProperty((caldav_namespace, "calendar-home-set"))
- return [str(h) for h in home_set.children]
- else:
- return ()
-
- def calendarUserAddresses(self):
- if self.hasDeadProperty((caldav_namespace, "calendar-user-address-set")):
- addresses = self.readDeadProperty((caldav_namespace, "calendar-user-address-set"))
- return [str(h) for h in addresses.children]
- else:
- # Must have a valid address of some kind so use the principal uri
- return (self.principalURL(),)
-
def calendarFreeBusyURIs(self, request):
def gotInbox(inbox):
if inbox is None:
@@ -1878,47 +1926,6 @@
"""
return request.locateResource(self.scheduleInboxURL())
- def scheduleInboxURL(self):
- if self.hasDeadProperty((caldav_namespace, "schedule-inbox-URL")):
- inbox = self.readDeadProperty((caldav_namespace, "schedule-inbox-URL"))
- return str(inbox.children[0])
- else:
- return None
-
- def scheduleOutboxURL(self):
- """
- @return: the schedule outbox URL for this principal.
- """
- if self.hasDeadProperty((caldav_namespace, "schedule-outbox-URL")):
- outbox = self.readDeadProperty((caldav_namespace, "schedule-outbox-URL"))
- return str(outbox.children[0])
- else:
- return None
-
- def dropboxURL(self):
- """
- @return: the drop box home collection URL for this principal.
- """
- if self.hasDeadProperty((calendarserver_namespace, "dropbox-home-URL")):
- inbox = self.readDeadProperty((caldav_namespace, "dropbox-home-URL"))
- return str(inbox.children[0])
- else:
- return None
-
- def notificationURL(self, request=None):
- if self.hasDeadProperty((calendarserver_namespace, "notification-URL")):
- notification = self.readDeadProperty((calendarserver_namespace, "notification-URL"))
- return succeed(str(notification.children[0]))
- else:
- return succeed(None)
-
- def addressBookHomeURLs(self):
- if self.hasDeadProperty((carddav_namespace, "addressbook-home-set")):
- home_set = self.readDeadProperty((carddav_namespace, "addressbook-home-set"))
- return [str(h) for h in home_set.children]
- else:
- return ()
-
##
# Quota
##
@@ -1935,10 +1942,12 @@
"""
return None
-class CommonHomeResource(SharedHomeMixin, CalDAVResource):
+class CommonHomeResource(PropfindCacheMixin, SharedHomeMixin, CalDAVResource):
"""
Logic common to Calendar and Addressbook home resources.
"""
+ cacheNotifierFactory = DisabledCacheNotifier
+
def __init__(self, parent, name, transaction, home):
self.parent = parent
self.name = name
@@ -1947,6 +1956,8 @@
self._provisionedLinks = {}
self._setupProvisions()
self._newStoreHome = home
+ self.cacheNotifier = self.cacheNotifierFactory(self)
+ self._newStoreHome.addNotifier(CacheStoreNotifier(self))
CalDAVResource.__init__(self)
from twistedcaldav.storebridge import _NewStorePropertiesWrapper
@@ -1987,11 +1998,16 @@
def liveProperties(self):
- return super(CommonHomeResource, self).liveProperties() + (
+ props = super(CommonHomeResource, self).liveProperties() + (
(customxml.calendarserver_namespace, "push-transports"),
(customxml.calendarserver_namespace, "pushkey"),
)
+
+ if config.MaxCollectionsPerHome:
+ props += (customxml.MaxCollections.qname(),)
+ return props
+
def sharesDB(self):
"""
Retrieve the new-style shares DB wrapper.
@@ -2100,16 +2116,18 @@
self.putChild(name, child)
returnValue(child)
- # Try shares next
- if self.canShare():
- child = yield self.provisionShare(name)
- if child:
- returnValue(child)
+ # Try normal child type
+ child = (yield self.makeRegularChild(name))
- # Do normal child types
- returnValue((yield self.makeRegularChild(name)))
+ # Try shares next if child does not exist
+ if not child.exists() and self.canShare():
+ sharedchild = yield self.provisionShare(name)
+ if sharedchild:
+ returnValue(sharedchild)
+ returnValue(child)
+
@inlineCallbacks
def createNotificationsCollection(self):
txn = self._associatedTransaction
@@ -2142,94 +2160,89 @@
@inlineCallbacks
+ def countOwnedChildren(self):
+ """
+ @return: the number of children (not shared ones).
+ """
+ returnValue(len(list((yield self._newStoreHome.listChildren()))))
+
+
+ @inlineCallbacks
def readProperty(self, property, request):
if type(property) is tuple:
qname = property
else:
qname = property.qname()
- if qname == (customxml.calendarserver_namespace, "push-transports"):
- notifierID = self._newStoreHome.notifierID()
- if notifierID is not None and config.Notifications.Services.XMPPNotifier.Enabled:
- children = []
+ if qname == customxml.MaxCollections.qname() and config.MaxCollectionsPerHome:
+ returnValue(customxml.MaxCollections.fromString(config.MaxCollectionsPerHome))
+
+ elif qname == (customxml.calendarserver_namespace, "push-transports"):
+ if config.Notifications.Services.XMPPNotifier.Enabled:
+ nodeName = (yield self._newStoreHome.nodeName())
+ if nodeName:
+ notifierID = self._newStoreHome.notifierID()
+ if notifierID:
+ children = []
- apsConfiguration = getPubSubAPSConfiguration(notifierID, config)
- if apsConfiguration:
- children.append(
- customxml.PubSubTransportProperty(
- customxml.PubSubSubscriptionProperty(
- davxml.HRef(
- apsConfiguration["SubscriptionURL"]
- ),
- ),
- customxml.PubSubAPSBundleIDProperty(
- apsConfiguration["APSBundleID"]
- ),
- type="APSD",
- )
- )
+ apsConfiguration = getPubSubAPSConfiguration(notifierID, config)
+ if apsConfiguration:
+ children.append(
+ customxml.PubSubTransportProperty(
+ customxml.PubSubSubscriptionProperty(
+ davxml.HRef(
+ apsConfiguration["SubscriptionURL"]
+ ),
+ ),
+ customxml.PubSubAPSBundleIDProperty(
+ apsConfiguration["APSBundleID"]
+ ),
+ type="APSD",
+ )
+ )
- pubSubConfiguration = getPubSubConfiguration(config)
- if pubSubConfiguration['xmpp-server']:
- children.append(
- customxml.PubSubTransportProperty(
- customxml.PubSubXMPPServerProperty(
- pubSubConfiguration['xmpp-server']
- ),
- customxml.PubSubXMPPURIProperty(
- getPubSubXMPPURI(notifierID, pubSubConfiguration)
- ),
- type="XMPP",
- )
- )
+ pubSubConfiguration = getPubSubConfiguration(config)
+ if pubSubConfiguration['xmpp-server']:
+ children.append(
+ customxml.PubSubTransportProperty(
+ customxml.PubSubXMPPServerProperty(
+ pubSubConfiguration['xmpp-server']
+ ),
+ customxml.PubSubXMPPURIProperty(
+ getPubSubXMPPURI(notifierID, pubSubConfiguration)
+ ),
+ type="XMPP",
+ )
+ )
- returnValue(customxml.PubSubPushTransportsProperty(*children))
+ returnValue(customxml.PubSubPushTransportsProperty(*children))
- else:
- returnValue(customxml.PubSubPushTransportsProperty())
+ returnValue(customxml.PubSubPushTransportsProperty())
- if qname == (customxml.calendarserver_namespace, "pushkey"):
- notifierID = self._newStoreHome.notifierID()
- if notifierID is not None and config.Notifications.Services.XMPPNotifier.Enabled:
- pubSubConfiguration = getPubSubConfiguration(config)
- nodeName = getPubSubPath(notifierID, pubSubConfiguration)
+ elif qname == (customxml.calendarserver_namespace, "pushkey"):
+ if config.Notifications.Services.XMPPNotifier.Enabled:
+ nodeName = (yield self._newStoreHome.nodeName())
+ if nodeName:
+ returnValue(customxml.PubSubXMPPPushKeyProperty(nodeName))
+ returnValue(customxml.PubSubXMPPPushKeyProperty())
- # Create the pubsub node so client has something to subscribe
- # to
- try:
- (yield getNodeCacher().waitForNode(
- self._newStoreHome._notifier, nodeName))
- except NodeCreationException, e:
- self.log_warn(e)
- returnValue(customxml.PubSubXMPPPushKeyProperty(nodeName))
- else:
- returnValue(customxml.PubSubXMPPPushKeyProperty())
+ elif qname == (customxml.calendarserver_namespace, "xmpp-uri"):
+ if config.Notifications.Services.XMPPNotifier.Enabled:
+ nodeName = (yield self._newStoreHome.nodeName())
+ if nodeName:
+ notifierID = self._newStoreHome.notifierID()
+ if notifierID:
+ pubSubConfiguration = getPubSubConfiguration(config)
+ returnValue(customxml.PubSubXMPPURIProperty(
+ getPubSubXMPPURI(notifierID, pubSubConfiguration)))
+ returnValue(customxml.PubSubXMPPURIProperty())
- if qname == (customxml.calendarserver_namespace, "xmpp-uri"):
- notifierID = self._newStoreHome.notifierID()
- if notifierID is not None and config.Notifications.Services.XMPPNotifier.Enabled:
+ elif qname == (customxml.calendarserver_namespace, "xmpp-heartbeat-uri"):
+ if config.Notifications.Services.XMPPNotifier.Enabled:
pubSubConfiguration = getPubSubConfiguration(config)
-
- # Create the pubsub node so client has something to subscribe
- # to
- nodeName = getPubSubPath(notifierID, pubSubConfiguration)
- try:
- (yield getNodeCacher().waitForNode(
- self._newStoreHome._notifier, nodeName))
- except NodeCreationException, e:
- self.log_warn(e)
-
- returnValue(customxml.PubSubXMPPURIProperty(
- getPubSubXMPPURI(notifierID, pubSubConfiguration)))
- else:
- returnValue(customxml.PubSubXMPPURIProperty())
-
- elif qname == (customxml.calendarserver_namespace, "xmpp-heartbeat-uri"):
- pubSubConfiguration = getPubSubConfiguration(config)
- if pubSubConfiguration['enabled']:
returnValue(
customxml.PubSubHeartbeatProperty(
customxml.PubSubHeartbeatURIProperty(
@@ -2240,16 +2253,14 @@
)
)
)
- else:
- returnValue(customxml.PubSubHeartbeatURIProperty())
+ returnValue(customxml.PubSubHeartbeatURIProperty())
elif qname == (customxml.calendarserver_namespace, "xmpp-server"):
- pubSubConfiguration = getPubSubConfiguration(config)
- if pubSubConfiguration['enabled']:
+ if config.Notifications.Services.XMPPNotifier.Enabled:
+ pubSubConfiguration = getPubSubConfiguration(config)
returnValue(customxml.PubSubXMPPServerProperty(
pubSubConfiguration['xmpp-server']))
- else:
- returnValue(customxml.PubSubXMPPServerProperty())
+ returnValue(customxml.PubSubXMPPServerProperty())
returnValue((yield super(CommonHomeResource, self).readProperty(property, request)))
@@ -2297,6 +2308,9 @@
def principalForRecord(self):
raise NotImplementedError("Subclass must implement principalForRecord()")
+ def notifierID(self, label="default"):
+ self._newStoreHome.notifierID(label)
+
def notifyChanged(self):
self._newStoreHome.notifyChanged()
@@ -2364,13 +2378,29 @@
newCalendar = yield self._newStoreHome.calendarWithName(name)
from twistedcaldav.storebridge import CalendarCollectionResource
similar = CalendarCollectionResource(
- newCalendar, self._newStoreHome, name=name,
+ newCalendar, self, name=name,
principalCollections=self.principalCollections()
)
self.propagateTransaction(similar)
returnValue(similar)
+ def hasCalendarResourceUIDSomewhereElse(self, uid, ok_object, type):
+ """
+ Test if there are other child object resources with the specified UID.
+
+ Pass through direct to store.
+ """
+ return self._newStoreHome.hasCalendarResourceUIDSomewhereElse(uid, ok_object._newStoreObject, type)
+
+ def getCalendarResourcesForUID(self, uid, allow_shared=False):
+ """
+ Return all child object resources with the specified UID.
+
+ Pass through direct to store.
+ """
+ return self._newStoreHome.getCalendarResourcesForUID(uid, allow_shared)
+
def defaultAccessControlList(self):
myPrincipal = self.principalForRecord()
@@ -2527,7 +2557,7 @@
newAddressBook = yield self._newStoreHome.addressbookWithName(name)
similar = mainCls(
- newAddressBook, self._newStoreHome, name,
+ newAddressBook, self, name,
principalCollections=self.principalCollections()
)
self.propagateTransaction(similar)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/schedule.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/schedule.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -210,7 +210,8 @@
# Validate that href's point to a valid calendar.
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldav_namespace, "valid-calendar-url")
+ (caldav_namespace, "valid-calendar-url"),
+ "Invalid URI",
))
elif property.qname() == (caldav_namespace, "schedule-default-calendar-URL"):
@@ -226,7 +227,8 @@
# Validate that href's point to a valid calendar.
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldav_namespace, "valid-schedule-default-calendar-URL")
+ (caldav_namespace, "valid-schedule-default-calendar-URL"),
+ "Invalid URI",
))
else:
# Canonicalize the URL to __uids__ form
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/caldav.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/caldav.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/caldav.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -112,8 +112,16 @@
yield recipient.inbox.checkPrivileges(self.scheduler.request, (caldavxml.ScheduleDeliver(),), principal=organizerPrincipal)
except AccessDeniedError:
log.err("Could not access Inbox for recipient: %s" % (recipient.cuaddr,))
- err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-permissions")))
- self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_AUTHORITY)
+ err = HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (caldav_namespace, "recipient-permissions"),
+ "Access to inbox denied",
+ ))
+ self.responses.add(
+ recipient.cuaddr,
+ Failure(exc_value=err),
+ reqstatus=iTIPRequestStatus.NO_AUTHORITY
+ )
# Process next recipient
continue
@@ -150,7 +158,11 @@
))
except ImplicitProcessorException, e:
log.err("Could not store data in Inbox : %s" % (recipient.inbox,))
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-permissions")))
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-permissions"),
+ "Could not store data in inbox",
+ ))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=e.msg)
returnValue(False)
@@ -178,7 +190,11 @@
except:
# FIXME: Bare except
log.err("Could not store data in Inbox : %s" % (recipient.inbox,))
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-permissions")))
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-permissions"),
+ "Could not store data in inbox",
+ ))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_AUTHORITY)
returnValue(False)
else:
@@ -216,11 +232,24 @@
))
except:
log.err("Could not determine free busy information: %s" % (recipient.cuaddr,))
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-permissions")))
- responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_AUTHORITY)
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-permissions"),
+ "Could not determine free busy information",
+ ))
+ responses.add(
+ recipient.cuaddr,
+ Failure(exc_value=err),
+ reqstatus=iTIPRequestStatus.NO_AUTHORITY
+ )
returnValue(False)
else:
- responses.add(recipient.cuaddr, responsecode.OK, reqstatus=iTIPRequestStatus.SUCCESS, calendar=fbresult)
+ responses.add(
+ recipient.cuaddr,
+ responsecode.OK,
+ reqstatus=iTIPRequestStatus.SUCCESS,
+ calendar=fbresult
+ )
returnValue(True)
@inlineCallbacks
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/delivery.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/delivery.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/delivery.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -50,7 +50,8 @@
@classmethod
def matchCalendarUserAddress(cls, cuaddr):
-
+
+ cuaddr = cuaddr.lower()
# Do the pattern match
for pattern in config.Scheduling[cls.serviceType()]["AddressPatterns"]:
try:
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/imip.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/imip.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/imip.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -66,15 +66,23 @@
):
log.info("Could not do server-to-imip method: %s" % (method,))
for recipient in self.recipients:
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-failed")))
- self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_USER_SUPPORT)
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-failed"),
+ "iMIP method not allowed: %s" % (method,),
+ ))
+ self.responses.add(
+ recipient.cuaddr,
+ Failure(exc_value=err),
+ reqstatus=iTIPRequestStatus.NO_USER_SUPPORT
+ )
returnValue(None)
caldata = str(self.scheduler.calendar)
for recipient in self.recipients:
try:
- toAddr = str(recipient.cuaddr)
+ toAddr = str(recipient.cuaddr).lower()
if not toAddr.startswith("mailto:"):
raise ValueError("ATTENDEE address '%s' must be mailto: for iMIP operation." % (toAddr,))
@@ -86,18 +94,38 @@
except Exception, e:
# Generated failed response for this recipient
log.err("Could not do server-to-imip request : %s %s" % (self, e))
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-failed")))
- self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-failed"),
+ "iMIP request failed",
+ ))
+ self.responses.add(
+ recipient.cuaddr,
+ Failure(exc_value=err),
+ reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE
+ )
else:
- self.responses.add(recipient.cuaddr, responsecode.OK, reqstatus=iTIPRequestStatus.MESSAGE_SENT)
+ self.responses.add(
+ recipient.cuaddr,
+ responsecode.OK,
+ reqstatus=iTIPRequestStatus.MESSAGE_SENT
+ )
except Exception, e:
# Generated failed responses for each recipient
log.err("Could not do server-to-imip request : %s %s" % (self, e))
for recipient in self.recipients:
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-failed")))
- self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-failed"),
+ "iMIP request failed",
+ ))
+ self.responses.add(
+ recipient.cuaddr,
+ Failure(exc_value=err),
+ reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE
+ )
def postToGateway(self, fromAddr, toAddr, caldata, reactor=None):
if reactor is None:
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/implicit.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/implicit.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,15 +19,12 @@
from twisted.internet.defer import inlineCallbacks, returnValue
from twext.web2 import responsecode
-from twext.web2.dav.util import joinURL
-from twext.web2.dav.util import parentForURL
from twext.web2.http import HTTPError
from twistedcaldav import caldavxml
from twistedcaldav.caldavxml import caldav_namespace
from twistedcaldav.directory.principal import DirectoryCalendarPrincipalResource
from twistedcaldav.ical import Property
-from twistedcaldav.method import report_common
from twistedcaldav.scheduling import addressmapping
from twistedcaldav.scheduling.cuaddress import InvalidCalendarUser,\
LocalCalendarUser, PartitionedCalendarUser
@@ -91,8 +88,17 @@
yield self.checkImplicitState()
# Attendees are not allowed to overwrite one type with another
- if not self.internal_request and self.state == "attendee" and (existing_type != new_type) and existing_resource:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
+ if (
+ not self.internal_request and
+ self.state == "attendee" and
+ (existing_type != new_type) and
+ existing_resource
+ ):
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot change scheduling object mode",
+ ))
returnValue((self.action != "none", new_type == "schedule",))
@@ -113,7 +119,11 @@
if srccal and destcal:
if src_is_implicit and dest_exists or dest_is_implicit:
log.debug("Implicit - cannot MOVE with a scheduling object resource")
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "unique-scheduling-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot MOVE a scheduling object resource",
+ ))
else:
self.action = "none"
elif srccal and not destcal:
@@ -143,7 +153,11 @@
if srccal and destcal:
if src_is_implicit or dest_is_implicit:
log.debug("Implicit - cannot COPY with a scheduling object resource")
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "unique-scheduling-object-resource")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot COPY with a scheduling object resource",
+ ))
else:
self.action = "none"
elif srccal and not destcal:
@@ -188,6 +202,10 @@
self.state = "organizer"
elif self.isAttendeeScheduling():
self.state = "attendee"
+ elif self.organizer:
+ # There is an ORGANIZER that is not this user but no ATTENDEE property for
+ # the user.
+ self.state = "attendee-missing"
else:
self.state = None
@@ -213,6 +231,8 @@
yield self.doImplicitOrganizer()
elif self.state == "attendee":
yield self.doImplicitAttendee()
+ elif self.state == "attendee-missing":
+ yield self.doImplicitMissingAttendee()
else:
returnValue(None)
@@ -311,7 +331,11 @@
self.originatorPrincipal = (yield self.resource.ownerPrincipal(self.request))
if not isinstance(self.originatorPrincipal, DirectoryCalendarPrincipalResource):
log.error("Originator '%s' is not enabled for calendaring" % (self.originatorPrincipal,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "invalid-originator")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "invalid-originator"),
+ "Originator not enabled",
+ ))
# Pick the first mailto cu address or the first other type
for item in self.originatorPrincipal.calendarUserAddresses():
@@ -327,7 +351,11 @@
except ValueError:
# We have different ORGANIZERs in the same iCalendar object - this is an error
log.error("Only one ORGANIZER is allowed in an iCalendar object:\n%s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "single-organizer")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "single-organizer"),
+ "Only one organizer allowed in scheduling object resource",
+ ))
# Get the ATTENDEEs
self.attendeesByInstance = self.calendar.getAttendeesByInstance(True, onlyScheduleAgentServer=True)
@@ -353,39 +381,16 @@
calendar_owner_principal = (yield self.resource.resourceOwnerPrincipal(self.request))
calendar_home = yield calendar_owner_principal.calendarHome(self.request)
- check_parent_uri = parentForURL(check_uri)[:-1] if check_uri else None
+ # Check for matching resource somewhere else in the home
+ foundElsewhere = (yield calendar_home.hasCalendarResourceUIDSomewhereElse(self.uid, check_resource, type))
+ if foundElsewhere:
+ log.debug("Implicit - found component with same UID in a different collection: %s" % (check_uri,))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot duplicate scheduling object resource",
+ ))
- # FIXME: because of the URL->resource request mapping thing, we have to force the request
- # to recognize this resource
- self.request._rememberResource(calendar_home, calendar_home.url())
-
- # Run a UID query against the UID
-
- @inlineCallbacks
- def queryCalendarCollection(collection, collection_uri):
- rname = yield collection.index().resourceNameForUID(self.uid)
- if rname:
- child = (yield self.request.locateResource(joinURL(collection_uri, rname)))
- if child == check_resource:
- returnValue(True)
- is_scheduling_object = self.checkSchedulingObjectResource(child)
- matched_type = "schedule" if is_scheduling_object else "calendar"
- if (
- collection_uri != check_parent_uri and
- (type == "schedule" or matched_type == "schedule")
- ):
- log.debug("Implicit - found component with same UID in a different collection: %s" % (check_uri,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "unique-scheduling-object-resource")))
-
- # Here we can always return true as the unique UID in a calendar collection
- # requirement will already have been tested.
-
- returnValue(True)
-
- # NB We are by-passing privilege checking here. That should be OK as the data found is not
- # exposed to the user.
- yield report_common.applyToCalendarCollections(calendar_home, self.request, calendar_home.url(), "infinity", queryCalendarCollection, None)
-
@inlineCallbacks
def isOrganizerScheduling(self):
"""
@@ -556,7 +561,11 @@
newOrganizer = self.calendar.getOrganizer()
if oldOrganizer != newOrganizer:
log.error("Cannot change ORGANIZER: UID:%s" % (self.uid,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-organizer-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-organizer-change"),
+ "Organizer cannot be changed",
+ ))
else:
# Special case of SCHEDULE-FORCE-SEND added to attendees and no other change
reinvites = set()
@@ -785,7 +794,11 @@
newOrganizer = self.calendar.getOrganizer()
if oldOrganizer != newOrganizer:
log.error("Cannot change ORGANIZER: UID:%s" % (self.uid,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot change organizer",
+ ))
else:
self.oldcalendar = None
@@ -796,7 +809,11 @@
# If Organizer copy exists we cannot allow SCHEDULE-AGENT=CLIENT or NONE
if not doScheduling:
log.error("Attendee '%s' is not allowed to change SCHEDULE-AGENT on organizer: UID:%s" % (self.attendeePrincipal, self.uid,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot alter organizer",
+ ))
# Determine whether the current change is allowed
changeAllowed, doITipReply, changedRids, newCalendar = self.isAttendeeChangeInsignificant()
@@ -810,7 +827,11 @@
returnValue(None)
else:
log.error("Attendee '%s' is not allowed to make an unauthorized change to an organized event: UID:%s" % (self.attendeePrincipal, self.uid,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-attendee-change"),
+ "Attendee changes are not allowed",
+ ))
if not doITipReply:
log.debug("Implicit - attendee '%s' is updating UID: '%s' but change is not significant" % (self.attendee, self.uid))
@@ -831,7 +852,11 @@
oldScheduling = self.oldcalendar.getOrganizerScheduleAgent()
if not oldScheduling:
log.error("Attendee '%s' is not allowed to set SCHEDULE-AGENT=SERVER on organizer: UID:%s" % (self.attendeePrincipal, self.uid,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-attendee-change"),
+ "Attendee cannot change organizer state",
+ ))
log.debug("Attendee '%s' is not allowed to update UID: '%s' - missing organizer copy - removing entire event" % (self.attendee, self.uid,))
self.return_status = ImplicitScheduler.STATUS_ORPHANED_EVENT
@@ -868,12 +893,28 @@
log.debug("Implicit - attendee '%s' is updating UID without server scheduling: '%s'" % (self.attendee, self.uid))
# Nothing else to do
+ @inlineCallbacks
+ def doImplicitMissingAttendee(self):
+
+ if self.action == "remove":
+ # Nothing else to do
+ log.debug("Implicit - missing attendee is removing UID without server scheduling: '%s'" % (self.uid,))
+ returnValue(None)
+
+ else:
+ # We will allow the attendee to do anything in this case, but we will mark the organizer
+ # with an schedule-status error and schedule-agent none
+ log.debug("Missing attendee is allowed to update UID: '%s' with invalid organizer '%s'" % (self.uid, self.organizer))
+ self.calendar.setParameterToValueForPropertyWithValue("SCHEDULE-AGENT", "NONE", "ORGANIZER", None)
+ self.calendar.setParameterToValueForPropertyWithValue("SCHEDULE-STATUS", iTIPRequestStatus.NO_USER_SUPPORT_CODE, "ORGANIZER", None)
+ returnValue(None)
+
def checkOrganizerScheduleAgent(self):
is_server = self.calendar.getOrganizerScheduleAgent()
local_organizer = isinstance(self.organizerAddress, LocalCalendarUser)
- if config.Scheduling.iMIP.Enabled and self.organizerAddress.cuaddr.startswith("mailto:"):
+ if config.Scheduling.iMIP.Enabled and self.organizerAddress.cuaddr.lower().startswith("mailto:"):
return True
if not local_organizer and is_server:
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/ischedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/ischedule.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/ischedule.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -90,7 +90,11 @@
assert False, "Incorrect calendar user address class"
if not server:
# Cannot do server-to-server for this recipient.
- err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-allowed")))
+ err = HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (caldav_namespace, "recipient-allowed"),
+ "No server for recipient",
+ ))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_USER_SUPPORT)
# Process next recipient
@@ -98,7 +102,11 @@
if not server.allow_to:
# Cannot do server-to-server outgoing requests for this server.
- err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-allowed")))
+ err = HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (caldav_namespace, "recipient-allowed"),
+ "Cannot send to recipient's server",
+ ))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
# Process next recipient
@@ -169,7 +177,11 @@
# Generated failed responses for each recipient
log.err("Could not do server-to-server request : %s %s" % (self, e))
for recipient in self.recipients:
- err = HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-failed")))
+ err = HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-failed"),
+ "Server-to-server request failed",
+ ))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
def logRequest(self, level, message, request, **kwargs):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/scheduler.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/scheduler.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -181,7 +181,11 @@
if not originator:
log.err("%s request must have Originator" % (self.method,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-specified")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-specified"),
+ "Missing originator",
+ ))
else:
self.originator = originator
@@ -197,7 +201,11 @@
if not attendees:
log.err("%s request must have at least one Recipient" % (self.method,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-specified")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-specified"),
+ "Must have recipients",
+ ))
else:
self.recipients = list(attendees)
@@ -213,7 +221,11 @@
originator = self.request.headers.getRawHeaders("originator")
if originator is None or (len(originator) != 1):
log.err("%s request must have Originator header" % (self.method,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-specified")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-specified"),
+ "Missing originator",
+ ))
else:
self.originator = originator[0]
@@ -222,7 +234,11 @@
rawRecipients = self.request.headers.getRawHeaders("recipient")
if rawRecipients is None or (len(rawRecipients) == 0):
log.err("%s request must have at least one Recipient header" % (self.method,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-specified")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "recipient-specified"),
+ "No recipients",
+ ))
# Recipient header may be comma separated list
self.recipients = []
@@ -238,7 +254,11 @@
contentType = self.request.headers.getHeader("content-type")
if contentType is not None and (contentType.mediaType, contentType.mediaSubtype) != ("text", "calendar"):
log.err("MIME type %s not allowed in calendar collection" % (contentType,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "supported-calendar-data")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "supported-calendar-data"),
+ "Data is not calendar data",
+ ))
# Parse the calendar object from the HTTP request stream
try:
@@ -247,7 +267,11 @@
except:
# FIXME: Bare except
log.err("Error while handling %s: %s" % (self.method, Failure(),))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Can't parse calendar data"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Can't parse calendar data"
+ ))
def checkAuthorization(self):
raise NotImplementedError
@@ -273,22 +297,38 @@
self.calendar.validCalendarForCalDAV()
except ValueError, e:
log.err("%s request calendar component is not valid:%s %s" % (self.method, e, self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Calendar component is not valid"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Calendar component is not valid"
+ ))
# Must have a METHOD
if not self.calendar.isValidMethod():
log.err("%s request must have valid METHOD property in calendar component: %s" % (self.method, self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Must have valid METHOD property"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Must have valid METHOD property"
+ ))
# Verify iTIP behavior
if not self.calendar.isValidITIP():
log.err("%s request must have a calendar component that satisfies iTIP requirements: %s" % (self.method, self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Must have a calendar component that satisfies iTIP requirements"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description="Must have a calendar component that satisfies iTIP requirements"
+ ))
# X-CALENDARSERVER-ACCESS is not allowed in Outbox POSTs
if self.calendar.hasProperty(Component.ACCESS_PROPERTY):
log.err("X-CALENDARSERVER-ACCESS not allowed in a calendar component %s request: %s" % (self.method, self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (calendarserver_namespace, "no-access-restrictions")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (calendarserver_namespace, "no-access-restrictions"),
+ "Private events cannot be scheduled",
+ ))
# Determine iTIP method mode
if self.calendar.propertyValue("METHOD") in ("PUBLISH", "REQUEST", "ADD", "CANCEL", "DECLINECOUNTER"):
@@ -303,13 +343,21 @@
# Must have only one
if len(attendees) != 1:
log.err("Wrong number of ATTENDEEs in calendar data: %s" % (self.calendardata,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ "Wrong number of attendees",
+ ))
self.attendee = attendees[0]
else:
msg = "Unknown iTIP METHOD: %s" % (self.calendar.propertyValue("METHOD"),)
log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ description=msg
+ ))
def checkForFreeBusy(self):
if not hasattr(self, "isfreebusy"):
@@ -318,17 +366,29 @@
vfreebusies = [v for v in self.calendar.subcomponents() if v.name() == "VFREEBUSY"]
if len(vfreebusies) != 1:
log.err("iTIP data is not valid for a VFREEBUSY request: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="iTIP data is not valid for a VFREEBUSY request"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "iTIP data is not valid for a VFREEBUSY request",
+ ))
dtstart = vfreebusies[0].getStartDateUTC()
dtend = vfreebusies[0].getEndDateUTC()
if dtstart is None or dtend is None:
log.err("VFREEBUSY start/end not valid: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="VFREEBUSY start/end not valid"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "VFREEBUSY start/end not valid",
+ ))
# Some clients send floating instead of UTC - coerce to UTC
if dtstart.tzinfo is None or dtend.tzinfo is None:
log.err("VFREEBUSY start or end not UTC: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="VFREEBUSY start or end not UTC"))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "VFREEBUSY start or end not UTC",
+ ))
self.timeRange = caldavxml.TimeRange(start=iCalendarString(dtstart), end=iCalendarString(dtend))
self.timeRange.start = dtstart
@@ -398,7 +458,11 @@
# Check for freebusy limit
if freebusy and config.Scheduling.Options.LimitFreeBusyAttendees and ctr >= config.Scheduling.Options.LimitFreeBusyAttendees:
- err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-limit")))
+ err = HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (caldav_namespace, "recipient-limit"),
+ "Too many attendees",
+ ))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
continue
@@ -418,7 +482,11 @@
imip_recipients.append(recipient)
else:
- err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-exists")))
+ err = HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (caldav_namespace, "recipient-exists"),
+ "Unknown recipient",
+ ))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.INVALID_CALENDAR_USER)
# Now process local recipients
@@ -487,7 +555,11 @@
# Must have an authenticated user
if not self.internal_request and self.resource.currentPrincipal(self.request) == davxml.Principal(davxml.Unauthenticated()):
log.err("Unauthenticated originators not allowed: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Invalid originator",
+ ))
def checkOriginator(self):
"""
@@ -499,13 +571,21 @@
if originatorPrincipal is None:
# Local requests MUST have a principal.
log.err("Could not find principal for originator: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "No principal for originator",
+ ))
else:
# Must have a valid Inbox.
inboxURL = originatorPrincipal.scheduleInboxURL()
if inboxURL is None:
log.err("Could not find inbox for originator: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be scheduled",
+ ))
self.originator = LocalCalendarUser(self.originator, originatorPrincipal)
@@ -559,34 +639,58 @@
if outboxURL:
if not organizerPrincipal.enabledAsOrganizer():
log.err("ORGANIZER not allowed to be an Organizer: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer cannot schedule",
+ ))
self.organizer = LocalCalendarUser(organizer, organizerPrincipal)
else:
log.err("No outbox for ORGANIZER in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer cannot schedule",
+ ))
else:
localUser = (yield addressmapping.mapper.isCalendarUserInMyDomain(organizer))
if localUser:
log.err("No principal for ORGANIZER in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "No principal for organizer",
+ ))
else:
self.organizer = RemoteCalendarUser(organizer)
else:
log.err("ORGANIZER missing in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Missing organizer",
+ ))
def checkOrganizerAsOriginator(self):
# Make sure that the ORGANIZER is local
if not isinstance(self.organizer, LocalCalendarUser):
log.err("ORGANIZER is not local to server in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer is not local to server",
+ ))
# Make sure that the ORGANIZER's Outbox is the request URI
if self.doingPOST and self.organizer.principal.scheduleOutboxURL() != self.request.uri:
log.err("Wrong outbox for ORGANIZER in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Outbox does not belong to organizer",
+ ))
def checkAttendeeAsOriginator(self):
"""
@@ -599,10 +703,18 @@
if attendeePrincipal:
if self.doingPOST and attendeePrincipal.scheduleOutboxURL() != self.request.uri:
log.err("ATTENDEE in calendar data does not match owner of Outbox: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ "Outbox does not belong to attendee",
+ ))
else:
log.err("Unknown ATTENDEE in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ "No principal for attendee",
+ ))
def securityChecks(self):
"""
@@ -700,7 +812,11 @@
# Must have an unauthenticated user
if self.resource.currentPrincipal(self.request) != davxml.Principal(davxml.Unauthenticated()):
log.err("Authenticated originators not allowed: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Authentication not allowed",
+ ))
@inlineCallbacks
def checkOriginator(self):
@@ -714,7 +830,11 @@
if originatorPrincipal or localUser:
if originatorPrincipal.locallyHosted():
log.err("Cannot use originator that is on this server: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be local to server",
+ ))
else:
self.originator = PartitionedCalendarUser(self.originator, originatorPrincipal)
#self._validPartitionServer()
@@ -732,7 +852,11 @@
server = servermgr.mapDomain(self.originator.domain)
if not server or not server.allow_from:
log.err("Originator not on recognized server: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator not recognized by server",
+ ))
else:
# Get the request IP and map to hostname.
clientip = self.request.remoteAddr.host
@@ -768,7 +892,11 @@
if not matched:
log.err("Originator not on allowed server: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator not allowed to send to this server",
+ ))
def _validPartitionServer(self, principal):
"""
@@ -800,7 +928,11 @@
if not matched:
log.err("Originator not on allowed server: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator not allowed to send to this server",
+ ))
@inlineCallbacks
def checkOrganizerAsOriginator(self):
@@ -815,7 +947,11 @@
if organizerPrincipal:
if organizerPrincipal.locallyHosted():
log.err("Invalid ORGANIZER in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer is not local to server",
+ ))
else:
# Check that the origin server is the correct partition
self.organizer = PartitionedCalendarUser(organizer, organizerPrincipal)
@@ -824,12 +960,20 @@
localUser = (yield addressmapping.mapper.isCalendarUserInMyDomain(organizer))
if localUser:
log.err("Unsupported ORGANIZER in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer not allowed to be originator",
+ ))
else:
self.organizer = RemoteCalendarUser(organizer)
else:
log.err("ORGANIZER missing in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "organizer-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "organizer-allowed"),
+ "No organizer in calendar data",
+ ))
@inlineCallbacks
def checkAttendeeAsOriginator(self):
@@ -843,14 +987,22 @@
if attendeePrincipal:
if attendeePrincipal.locallyHosted():
log.err("Invalid ATTENDEE in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ "Local attendee cannot send to this server",
+ ))
else:
self._validPartitionServer(attendeePrincipal)
else:
localUser = (yield addressmapping.mapper.isCalendarUserInMyDomain(self.attendee))
if localUser:
log.err("Unknown ATTENDEE in calendar data: %s" % (self.calendar,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "attendee-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "attendee-allowed"),
+ "Attendee not allowed to schedule",
+ ))
# TODO: in this case we should check that the ORGANIZER is the sole recipient.
@@ -869,9 +1021,12 @@
yield self.checkAttendeeAsOriginator()
else:
- msg = "Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),)
- log.err(msg)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
+ log.err("Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "valid-calendar-data"),
+ "Unknown iTIP method",
+ ))
class DirectScheduler(Scheduler):
@@ -916,7 +1071,11 @@
localUser = (yield addressmapping.mapper.isCalendarUserInMyDomain(self.originator))
if originatorPrincipal or localUser:
log.err("Cannot use originator that is on this server: %s" % (self.originator,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be local to server",
+ ))
else:
self.originator = RemoteCalendarUser(self.originator)
@@ -940,7 +1099,11 @@
else:
log.err("Only %s is allowed to submit internal scheduling requests, not %s" % (allowed, host))
# TODO: verify this is the right response:
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-allowed")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (caldav_namespace, "originator-allowed"),
+ "Originator server not allowed to send to this server",
+ ))
class ScheduleResponseResponse (Response):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/test/test_imip.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/test/test_imip.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/test/test_imip.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -22,6 +22,7 @@
from twistedcaldav.scheduling.itip import iTIPRequestStatus
from twistedcaldav.scheduling.scheduler import ScheduleResponseQueue
import twistedcaldav.test.util
+from twistedcaldav.config import config
class iMIPProcessing (twistedcaldav.test.util.TestCase):
"""
@@ -60,3 +61,10 @@
self.assertEqual(len(responses.responses), 1)
self.assertEqual(str(responses.responses[0].children[1]), iTIPRequestStatus.SERVICE_UNAVAILABLE)
+
+
+ def test_matchCalendarUserAddress(self):
+ # iMIP not sensitive to case:
+ self.patch(config.Scheduling[ScheduleViaIMip.serviceType()], "AddressPatterns", ["mailto:.*"])
+ self.assertTrue(ScheduleViaIMip.matchCalendarUserAddress("mailto:user at xyzexample.com"))
+ self.assertTrue(ScheduleViaIMip.matchCalendarUserAddress("MAILTO:user at xyzexample.com"))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/utils.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/utils.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/scheduling/utils.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -15,9 +15,11 @@
##
from twisted.internet.defer import inlineCallbacks, returnValue
-from twistedcaldav.method import report_common
from twext.web2.dav.util import joinURL
+from twext.python.log import Logger
+log = Logger()
+
@inlineCallbacks
def getCalendarObjectForPrincipals(request, principal, uid, allow_shared=False):
"""
@@ -39,32 +41,17 @@
# force the request to recognize this resource.
request._rememberResource(calendar_home, calendar_home.url())
- # Run a UID query against the UID.
- @inlineCallbacks
- def queryCalendarCollection(collection, uri):
- if not allow_shared:
- if collection.isVirtualShare():
- returnValue(True)
+ # Get matching newstore objects
+ objectResources = (yield calendar_home.getCalendarResourcesForUID(uid, allow_shared))
+
+ # We really want only one or zero of these
+ if len(objectResources) == 1:
+ result["calendar_collection_uri"] = joinURL(calendar_home.url(), objectResources[0]._parentCollection.name())
+ result["calendar_collection"] = (yield request.locateResource(result["calendar_collection_uri"]))
+ result["resource_name"] = objectResources[0].name()
+ result["resource"] = (yield request.locateResource(joinURL(result["calendar_collection_uri"], result["resource_name"])))
+ elif len(objectResources):
+ log.debug("Should only have zero or one scheduling object resource with UID '%s' in calendar home: %s" % (uid, calendar_home,))
- rname = yield collection.index().resourceNameForUID(uid)
- if rname:
- resource = yield collection.getChild(rname)
- request._rememberResource(resource, joinURL(uri, rname))
-
- result["resource"] = resource
- result["resource_name"] = rname
- result["calendar_collection"] = collection
- result["calendar_collection_uri"] = uri
- returnValue(False)
- else:
- returnValue(True)
-
- # NB We are by-passing privilege checking here. That should be OK as
- # the data found is not exposed to the user.
- yield report_common.applyToCalendarCollections(
- calendar_home, request, calendar_home.url(),
- "infinity", queryCalendarCollection, None
- )
-
returnValue((result["resource"], result["resource_name"], result["calendar_collection"], result["calendar_collection_uri"],))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/sharing.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/sharing.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -115,7 +115,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "invalid share",
+ "Invalid share",
))
record = yield self.invitesDB().recordForInviteUID(inviteUID)
@@ -123,7 +123,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "invalid invitation uid: %s" % (inviteUID,),
+ "Invalid invitation uid: %s" % (inviteUID,),
))
# Only certain states are sharer controlled
@@ -652,7 +652,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "missing href: %s" % (inviteremove,),
+ "Missing href: %s" % (inviteremove,),
))
if len(access) == 0:
access = None
@@ -745,7 +745,11 @@
doc = davxml.WebDAVDocument.fromString(xmldata)
except ValueError, e:
self.log_error("Error parsing doc (%s) Doc:\n %s" % (str(e), xmldata,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (customxml.calendarserver_namespace, "valid-request")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Invalid XML",
+ ))
root = doc.root_element
if type(root) in self.xmlDocHanders:
@@ -753,7 +757,11 @@
returnValue(result)
else:
self.log_error("Unsupported XML (%s)" % (root,))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (customxml.calendarserver_namespace, "valid-request")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Unsupported XML",
+ ))
xmlDocHanders = {
customxml.InviteShare: _xmlHandleInvite,
@@ -1096,7 +1104,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "invalid shared collection",
+ "Invalid shared collection",
))
# Change the record
@@ -1157,7 +1165,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "missing required XML elements",
+ "Missing required XML elements",
))
if accepted:
return self.acceptInviteShare(request, hostUrl, replytoUID, displayname=summary)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/stdconfig.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/stdconfig.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twistedcaldav.test.test_stdconfig -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -43,14 +43,76 @@
"twistedcaldav.directory.xmlfile.XMLDirectoryService": {
"xmlFile": "accounts.xml",
"recordTypes": ("users", "groups"),
+ "statSeconds" : 15,
},
"twistedcaldav.directory.appleopendirectory.OpenDirectoryService": {
"node": "/Search",
- "cacheTimeout": 30,
+ "cacheTimeout": 1,
+ "negativeCaching": False,
"restrictEnabledRecords": False,
"restrictToGroup": "",
"recordTypes": ("users", "groups"),
},
+ "twistedcaldav.directory.ldapdirectory.LdapDirectoryService": {
+ "cacheTimeout": 1,
+ "negativeCaching": False,
+ "restrictEnabledRecords": False,
+ "restrictToGroup": "",
+ "recordTypes": ("users", "groups"),
+ "uri": "ldap://localhost/",
+ "tls": False,
+ "tlsCACertFile": None,
+ "tlsCACertDir": None,
+ "tlsRequireCert": None, # never, allow, try, demand, hard
+ "credentials": {
+ "dn": None,
+ "password": None,
+ },
+ "authMethod": "LDAP",
+ "rdnSchema": {
+ "base": "dc=example,dc=com",
+ "guidAttr": None,
+ "users": {
+ "rdn": "ou=People",
+ "attr": "uid", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "userid", # uniquely identifies user records
+ },
+ "groups": {
+ "rdn": "ou=Group",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies group records
+ },
+ "locations": {
+ "rdn": "ou=Locations",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies location records
+ },
+ "resources": {
+ "rdn": "ou=Resources",
+ "attr": "cn", # used only to synthesize email address
+ "emailSuffix": None, # used only to synthesize email address
+ "filter": None, # additional filter for this type
+ "recordName": "cn", # uniquely identifies resource records
+ },
+ },
+ "groupSchema": {
+ "membersAttr": "member", # how members are specified
+ "nestedGroupsAttr": None, # how nested groups are specified
+ "memberIdAttr": None, # which attribute the above refer to
+ },
+ "attributeMapping": { # maps internal record names to LDAP
+ "fullName" : "cn",
+ "emailAddresses" : "mail",
+ "firstName" : "givenName",
+ "lastName" : "sn",
+ },
+ },
}
DEFAULT_RESOURCE_PARAMS = {
@@ -63,6 +125,7 @@
DEFAULT_AUGMENT_PARAMS = {
"twistedcaldav.directory.augment.AugmentXMLDB": {
"xmlFiles": ["augments.xml",],
+ "statSeconds" : 15,
},
"twistedcaldav.directory.augment.AugmentSqliteDB": {
"dbpath": "augments.sqlite",
@@ -168,8 +231,12 @@
"DBAMPFD" : 0, # Internally used by database to tell slave
# processes to inherit a file descriptor and use it
# as an AMP connection over a UNIX socket; see
- # txdav.base.datastore.asyncsqlpool.
+ # twext.enterprise.adbapi2.ConnectionPoolConnection
+ "SharedConnectionPool" : False, # Use a shared database connection pool in
+ # the master process, rather than having
+ # each client make its connections directly.
+
#
# Types of service provided
#
@@ -187,12 +254,27 @@
"ConfigRoot" : "/etc/caldavd",
"LogRoot" : "/var/log/caldavd",
"RunRoot" : "/var/run/caldavd",
- "UserQuota" : 104857600, # User quota (in bytes)
- "MaximumAttachmentSize" : 1048576, # Attachment size limit (in bytes)
- "MaxAttendeesPerInstance" : 100, # Maximum number of unique attendees
- "MaxInstancesForRRULE" : 400, # Maximum number of instances for an RRULE
"WebCalendarRoot" : "/usr/share/collabd",
+
+ #
+ # Quotas
+ #
+
+ # Attachments
+ "UserQuota" : 104857600, # User attachment quota (in bytes)
+
+ # Resource data
+ "MaxCollectionsPerHome" : 50, # Maximum number of calendars/address books allowed in a home
+ "MaxResourcesPerCollection" : 10000, # Maximum number of resources in a calendar/address book
+ "MaxResourceSize" : 1048576, # Maximum resource size (in bytes)
+ "MaxAttendeesPerInstance" : 100, # Maximum number of unique attendees
+ "MaxInstancesForRRULE" : 400, # Maximum number of instances for an RRULE
+ # Set to URL path of wiki authentication service, e.g. "/auth", in order
+ # to use javascript authentication dialog. Empty string indicates standard
+ # browser authentication dialog should be used.
+ "WebCalendarAuthPath" : "",
+
"Aliases": {},
#
@@ -274,7 +356,7 @@
},
"Wiki": {
"Enabled": False,
- "Cookie": "_authserver_session",
+ "Cookie": "apple_webauth_token",
"URL": "http://127.0.0.1:8089/RPC2",
"UserMethod": "userForSession",
"WikiMethod": "accessLevelForUserWikiCalendar",
@@ -585,13 +667,19 @@
"Default",
]
},
-# "ProxyDB": {
+# "Shared": {
# "ClientEnabled": True,
# "ServerEnabled": True,
# "BindAddress": "127.0.0.1",
# "Port": 11211,
# "HandleCacheTypes": [
-# "ProxyDB", "PrincipalToken",
+# "ProxyDB",
+# "PrincipalToken",
+# "FBCache",
+# "ScheduleAddressMapper",
+# "SQL.props",
+# "SQL.calhome",
+# "SQL.adbkhome",
# ]
# },
},
@@ -613,12 +701,23 @@
"EnableKeepAlive": True,
+ "EnableResponseCache": True,
+ "ResponseCacheTimeout": 30, # Minutes
+
+ "EnableFreeBusyCache": True,
+ "FreeBusyCacheDaysBack": 7,
+ "FreeBusyCacheDaysForward": 12 * 7,
+
+ "FreeBusyIndexExpandAheadDays": 365,
+ "FreeBusyIndexExpandMaxDays": 5 * 365,
+ "FreeBusyIndexDelayedExpand": True,
+
# Specify which opendirectory module to use:
# "opendirectory" is PyOpenDirectory (the old one which uses
# DirectoryService.framework)
- # "calendarserver.platform.darwin.od.opendirectory" is the new PyObjC version which uses
- # OpenDirectory.framework
- "OpenDirectoryModule": "calendarserver.platform.darwin.od.opendirectory",
+ # "calendarserver.platform.darwin.od.opendirectory" is the new PyObjC
+ # version which uses OpenDirectory.framework
+ "OpenDirectoryModule": "opendirectory",
# Used in the command line utilities to specify which service class to
# use to carry out work.
@@ -701,6 +800,13 @@
Post-update configuration hook for making all configured paths relative to
their respective root directories rather than the current working directory.
"""
+
+ # Remove possible trailing slash from ServerRoot
+ try:
+ configDict["ServerRoot"] = configDict["ServerRoot"].rstrip("/")
+ except KeyError:
+ pass
+
for root, relativePath in RELATIVE_PATHS:
if root in configDict:
if isinstance(relativePath, str):
@@ -1018,9 +1124,6 @@
def _updateCompliance(configDict):
- if not (configDict.EnableCalDAV or configDict.EnableCardDAV):
- log.warn("Neither 'EnableCalDAV' nor 'EnableCardDAV' are set to True")
-
if configDict.EnableCalDAV:
if configDict.Scheduling.CalDAV.OldDraftCompatibility:
compliance = caldavxml.caldav_full_compliance
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/storebridge.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/storebridge.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twistedcaldav.test.test_wrapping -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -33,10 +33,11 @@
from twisted.python.log import err as logDefaultException
from twisted.python.util import FancyEqMixin
from twistedcaldav import customxml, carddavxml, caldavxml
+from twistedcaldav.cache import CacheStoreNotifier, ResponseCacheMixin,\
+ DisabledCacheNotifier
from twistedcaldav.caldavxml import caldav_namespace
from twistedcaldav.config import config
-from twistedcaldav.ical import Component as VCalendar, Property as VProperty,\
- iCalendarProductID
+from twistedcaldav.ical import Component as VCalendar, Property as VProperty
from twistedcaldav.memcachelock import MemcacheLock, MemcacheLockTimeoutError
from twistedcaldav.method.put_addressbook_common import StoreAddressObjectResource
from twistedcaldav.method.put_common import StoreCalendarObjectResource
@@ -45,11 +46,11 @@
from twistedcaldav.schedule import ScheduleInboxResource
from twistedcaldav.scheduling.implicit import ImplicitScheduler
from twistedcaldav.vcard import Component as VCard
-from twistedcaldav.vcard import Property as VCardProperty
from txdav.base.propertystore.base import PropertyName
from txdav.common.icommondatastore import NoSuchObjectResourceError
from urlparse import urlsplit
import time
+from txdav.idav import PropertyChangeNotAllowedError
"""
Wrappers to translate between the APIs in L{txdav.caldav.icalendarstore} and
@@ -82,42 +83,40 @@
# FIXME 'uid' here should be verifying something.
def get(self, qname, uid=None):
- """
-
- """
try:
return self._newPropertyStore[self._convertKey(qname)]
except KeyError:
raise HTTPError(StatusResponse(
- NOT_FOUND,
- "No such property: {%s}%s" % qname))
+ NOT_FOUND,
+ "No such property: {%s}%s" % qname
+ ))
def set(self, property, uid=None):
- """
-
- """
- self._newPropertyStore[self._convertKey(property.qname())] = property
+ try:
+ self._newPropertyStore[self._convertKey(property.qname())] = property
+ except PropertyChangeNotAllowedError:
+ raise HTTPError(StatusResponse(
+ FORBIDDEN,
+ "Property cannot be changed: {%s}%s" % property.qname(),
+ ))
+
def delete(self, qname, uid=None):
- """
-
- """
- del self._newPropertyStore[self._convertKey(qname)]
+ try:
+ del self._newPropertyStore[self._convertKey(qname)]
+ except KeyError:
+ # RFC 2518 Section 12.13.1 says that removal of
+ # non-existing property is not an error.
+ pass
def contains(self, qname, uid=None, cache=True):
- """
-
- """
return (self._convertKey(qname) in self._newPropertyStore)
def list(self, uid=None, filterByUID=True, cache=True):
- """
-
- """
return [(pname.namespace, pname.name) for pname in
self._newPropertyStore.keys()]
@@ -186,12 +185,13 @@
-class _CommonHomeChildCollectionMixin(object):
+class _CommonHomeChildCollectionMixin(ResponseCacheMixin):
"""
Methods for things which are like calendars.
"""
_childClass = None
+ cacheNotifierFactory = DisabledCacheNotifier
def _initializeWithHomeChild(self, child, home):
"""
@@ -204,12 +204,40 @@
@type home: L{txdav.common._.CommonHome}
"""
self._newStoreObject = child
- self._newStoreParentHome = home
+ self._newStoreParentHome = home._newStoreHome
+ self._parentResource = home
self._dead_properties = _NewStorePropertiesWrapper(
self._newStoreObject.properties()
) if self._newStoreObject else NonePropertyStore(self)
+ if self._newStoreObject:
+ self.cacheNotifier = self.cacheNotifierFactory(self)
+ self._newStoreObject.addNotifier(CacheStoreNotifier(self))
+ def liveProperties(self):
+
+ props = super(_CommonHomeChildCollectionMixin, self).liveProperties()
+
+ if config.MaxResourcesPerCollection:
+ props += (customxml.MaxResources.qname(),)
+
+ return props
+
+ @inlineCallbacks
+ def readProperty(self, property, request):
+ if type(property) is tuple:
+ qname = property
+ else:
+ qname = property.qname()
+
+ if qname == customxml.MaxResources.qname() and config.MaxResourcesPerCollection:
+ returnValue(customxml.MaxResources.fromString(config.MaxResourcesPerCollection))
+
+ returnValue((yield super(_CommonHomeChildCollectionMixin, self).readProperty(property, request)))
+
+ def url(self):
+ return joinURL(self._parentResource.url(), self._name, "/")
+
def index(self):
"""
Retrieve the new-style index wrapper.
@@ -315,7 +343,7 @@
self._newStoreObject = (yield self._newStoreParentHome.createChildWithName(self._name))
# Re-initialize to get stuff setup again now we have a "real" object
- self._initializeWithHomeChild(self._newStoreObject, self._newStoreParentHome)
+ self._initializeWithHomeChild(self._newStoreObject, self._parentResource)
returnValue(CREATED)
@@ -409,7 +437,7 @@
yield self._newStoreObject.remove()
# Re-initialize to get stuff setup again now we have no object
- self._initializeWithHomeChild(None, self._newStoreParentHome)
+ self._initializeWithHomeChild(None, self._parentResource)
# FIXME: handle exceptions, possibly like this:
@@ -837,6 +865,12 @@
)
+ def notifierID(self, label="default"):
+ self._newStoreObject.notifierID(label)
+
+ def notifyChanged(self):
+ self._newStoreObject.notifyChanged()
+
class CalendarCollectionResource(_CommonHomeChildCollectionMixin, CalDAVResource):
"""
Wrapper around a L{txdav.caldav.icalendar.ICalendar}.
@@ -1034,11 +1068,17 @@
default = (yield self.isDefaultCalendar(request))
if default:
log.err("Cannot DELETE default calendar: %s" % (self,))
- raise HTTPError(ErrorResponse(FORBIDDEN,
- (caldav_namespace,
- "default-calendar-delete-allowed",)))
+ raise HTTPError(ErrorResponse(
+ FORBIDDEN,
+ (caldav_namespace, "default-calendar-delete-allowed",),
+ "Cannot delete default calendar",
+ ))
- response = (yield super(CalendarCollectionResource, self).storeRemove(request, implicitly, where))
+ response = (
+ yield super(CalendarCollectionResource, self).storeRemove(
+ request, implicitly, where
+ )
+ )
if response == NO_CONTENT:
# Do some clean up
@@ -1089,7 +1129,7 @@
storage = yield home.calendarWithName("inbox")
self._initializeWithHomeChild(
storage,
- self.parent._newStoreHome
+ self.parent
)
self._name = storage.name()
returnValue(self)
@@ -1182,13 +1222,8 @@
return davxml.ResourceType.dropboxhome #@UndefinedVariable
- @inlineCallbacks
def listChildren(self):
- l = []
- for everyCalendar in (yield self._newStoreHome.calendars()):
- for everyObject in (yield everyCalendar.calendarObjects()):
- l.append((yield everyObject.dropboxID()))
- returnValue(l)
+ return self._newStoreHome.getAllDropboxIDs()
@@ -1328,9 +1363,7 @@
),
)
- othersCanWrite = (
- yield self._newStoreCalendarObject.attendeesCanManageAttachments()
- )
+ othersCanWrite = self._newStoreCalendarObject.attendeesCanManageAttachments()
cuas = (yield self._newStoreCalendarObject.component()).getAttendees()
newACEs = []
for calendarUserAddress in cuas:
@@ -1373,16 +1406,75 @@
TwistedACLInheritable(),
))
+ # Now also need invitees
+ newACEs.extend((yield self.sharedDropboxACEs()))
+
returnValue(davxml.ACL(*tuple(originalACEs + newACEs)))
+ @inlineCallbacks
+ def sharedDropboxACEs(self):
+ aces = ()
+ records = yield self._newStoreCalendarObject._parentCollection.retrieveOldInvites().allRecords()
+ for record in records:
+ # Invite shares use access mode from the invite
+ if record.state != "ACCEPTED":
+ continue
+
+ userprivs = [
+ ]
+ if record.access in ("read-only", "read-write", "read-write-schedule",):
+ userprivs.append(davxml.Privilege(davxml.Read()))
+ userprivs.append(davxml.Privilege(davxml.ReadACL()))
+ userprivs.append(davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()))
+ if record.access in ("read-only",):
+ userprivs.append(davxml.Privilege(davxml.WriteProperties()))
+ if record.access in ("read-write", "read-write-schedule",):
+ userprivs.append(davxml.Privilege(davxml.Write()))
+ proxyprivs = list(userprivs)
+ proxyprivs.remove(davxml.Privilege(davxml.ReadACL()))
+ aces += (
+ # Inheritable specific access for the resource's associated principal.
+ davxml.ACE(
+ davxml.Principal(davxml.HRef(record.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(record.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(record.principalURL, "calendar-proxy-write/"))),
+ davxml.Grant(*proxyprivs),
+ davxml.Protected(),
+ TwistedACLInheritable(),
+ ),
+ )
+
+ returnValue(aces)
+
+
class CalendarAttachment(_NewStoreFileMetaDataHelper, _GetChildHelper):
def __init__(self, calendarObject, attachment, attachmentName, **kw):
super(CalendarAttachment, self).__init__(**kw)
self._newStoreCalendarObject = calendarObject
self._newStoreAttachment = self._newStoreObject = attachment
+ self._dead_properties = NonePropertyStore(self)
self.attachmentName = attachmentName
@@ -1400,22 +1492,15 @@
if content_type is None:
content_type = MimeType("application", "octet-stream")
- if self._newStoreAttachment:
- t = self._newStoreAttachment.store(content_type)
- yield readStream(request.stream, t.write)
- yield t.loseConnection()
- returnValue(NO_CONTENT)
- else:
- t = yield self._newStoreCalendarObject.createAttachmentWithName(
+ creating = (self._newStoreAttachment is None)
+ if creating:
+ self._newStoreAttachment = self._newStoreObject = (yield self._newStoreCalendarObject.createAttachmentWithName(
self.attachmentName,
- content_type,
- )
- yield readStream(request.stream, t.write)
- self._newStoreAttachment = self._newStoreObject = yield self._newStoreCalendarObject.attachmentWithName(
- self.attachmentName
- )
- yield t.loseConnection()
- returnValue(CREATED)
+ ))
+ t = self._newStoreAttachment.store(content_type)
+ yield readStream(request.stream, t.write)
+ yield t.loseConnection()
+ returnValue(CREATED if creating else NO_CONTENT)
@requiresPermissions(davxml.Read())
@@ -1431,7 +1516,12 @@
stream.write(data)
def connectionLost(self, reason):
stream.finish()
- self._newStoreAttachment.retrieve(StreamProtocol())
+ try:
+ self._newStoreAttachment.retrieve(StreamProtocol())
+ except IOError, e:
+ log.error("Unable to read attachment: %s, due to: %s" % (self, e,))
+ raise HTTPError(responsecode.NOT_FOUND)
+
return Response(OK, {"content-type":self.contentType()}, stream)
@@ -1452,19 +1542,20 @@
http_MKCOL = None
http_MKCALENDAR = None
+ def http_PROPPATCH(self, request):
+ """
+ No dead properties allowed on attachments.
+ """
+ return FORBIDDEN
+
def isCollection(self):
return False
-
-
-
-
class NoParent(CalDAVResource):
def http_MKCALENDAR(self, request):
return CONFLICT
-
def http_PUT(self, request):
return CONFLICT
@@ -1493,7 +1584,7 @@
self._newStoreObject = storeObject
self._dead_properties = _NewStorePropertiesWrapper(
self._newStoreObject.properties()
- ) if self._newStoreObject else NonePropertyStore(self)
+ ) if self._newStoreObject and self._newStoreParent.objectResourcesHaveProperties() else NonePropertyStore(self)
def isCollection(self):
@@ -1534,6 +1625,14 @@
return self.storeRemove(request, True, request.uri)
+ def http_PROPPATCH(self, request):
+ """
+ No dead properties allowed on object resources.
+ """
+ if self._newStoreParent.objectResourcesHaveProperties():
+ return super(_CommonObjectResource, self).http_PROPPATCH(request)
+ else:
+ return FORBIDDEN
@inlineCallbacks
def storeStream(self, stream):
@@ -1652,7 +1751,9 @@
A resource wrapping a calendar object.
"""
- compareAttributes = '_newStoreObject'.split()
+ compareAttributes = (
+ "_newStoreObject",
+ )
_componentFromStream = VCalendar.fromString
@@ -1860,7 +1961,9 @@
A resource wrapping a addressbook object.
"""
- compareAttributes = '_newStoreObject'.split()
+ compareAttributes = (
+ "_newStoreObject",
+ )
_componentFromStream = VCard.fromString
@@ -2012,11 +2115,27 @@
def _initializeWithObject(self, notificationObject):
self._newStoreObject = notificationObject
- self._dead_properties = _NewStorePropertiesWrapper(
- self._newStoreObject.properties()
- ) if self._newStoreObject else NonePropertyStore(self)
+ self._dead_properties = NonePropertyStore(self)
+ def liveProperties(self):
+
+ props = super(StoreNotificationObjectFile, self).liveProperties()
+ props += (customxml.NotificationType.qname(),)
+ return props
+
+ @inlineCallbacks
+ def readProperty(self, property, request):
+ if type(property) is tuple:
+ qname = property
+ else:
+ qname = property.qname()
+
+ if qname == customxml.NotificationType.qname():
+ returnValue(self._newStoreObject.xmlType())
+
+ returnValue((yield super(StoreNotificationObjectFile, self).readProperty(property, request)))
+
def isCollection(self):
return False
@@ -2054,6 +2173,11 @@
return self.storeRemove(request, request.uri)
+ def http_PROPPATCH(self, request):
+ """
+ No dead properties allowed on notification objects.
+ """
+ return FORBIDDEN
@inlineCallbacks
def storeRemove(self, request, where):
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_cache.py (from rev 7192, CalendarServer/trunk/twistedcaldav/test/test_cache.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_cache.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_cache.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,517 @@
+##
+# Copyright (c) 2008-2010 Apple Inc. All 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 new import instancemethod
+import hashlib
+import cPickle
+
+from twisted.internet.defer import succeed, maybeDeferred
+
+from twext.web2.dav import davxml
+from twext.web2.dav.util import allDataFromStream
+from twext.web2.stream import MemoryStream
+from twext.web2.http_headers import Headers
+
+from twistedcaldav.cache import MemcacheResponseCache
+from twistedcaldav.cache import MemcacheChangeNotifier
+from twistedcaldav.cache import PropfindCacheMixin
+
+from twistedcaldav.test.util import InMemoryMemcacheProtocol
+from twistedcaldav.test.util import TestCase
+
+
+def _newCacheToken(self):
+ called = getattr(self, '_called', 0)
+
+ token = 'token%d' % (called,)
+ setattr(self, '_called', called + 1)
+ return token
+
+class StubDirectoryRecord(object):
+
+ def __init__(self, uid):
+ self.uid = uid
+
+class StubDirectory(object):
+
+ def recordWithShortName(self, recordType, recordName):
+ return StubDirectoryRecord(recordName)
+
+class StubSiteResource(object):
+
+ def __init__(self):
+ self.directory = StubDirectory()
+
+ def getDirectory(self):
+ return self.directory
+
+class StubSite(object):
+
+ def __init__(self):
+ self.resource = StubSiteResource()
+
+class StubRequest(object):
+ resources = {}
+
+ def __init__(self, method, uri, authnUser, depth='1', body=None):
+ self.method = method
+ self.uri = uri
+ self.authnUser = davxml.Principal(davxml.HRef.fromString(authnUser))
+ self.headers = Headers({'depth': depth})
+
+ if body is None:
+ body = "foobar"
+
+ self.body = body
+ self.stream = MemoryStream(body)
+
+ self.site = StubSite()
+
+
+ def locateResource(self, uri):
+ assert uri[0] == '/', "URI path didn't begin with '/': %s" % (uri,)
+ return succeed(self.resources.get(uri))
+
+
+
+class StubResponse(object):
+ def __init__(self, code, headers, body):
+ self.code = code
+ self.headers = Headers(headers)
+ self.body = body
+ self.stream = MemoryStream(body)
+
+
+
+class StubURLResource(object):
+ def __init__(self, url, record=None):
+ self._url = url
+
+ if record is not None:
+ self.record = record
+
+ def url(self):
+ return self._url
+
+
+
+class MemCacheChangeNotifierTests(TestCase):
+ def setUp(self):
+ TestCase.setUp(self)
+ self.memcache = InMemoryMemcacheProtocol()
+ self.ccn = MemcacheChangeNotifier(
+ StubURLResource(':memory:'),
+ cachePool=self.memcache)
+
+ self.ccn._newCacheToken = instancemethod(_newCacheToken,
+ self.ccn,
+ MemcacheChangeNotifier)
+
+ def assertToken(self, expectedToken):
+ token = self.memcache._cache['cacheToken::memory:'][1]
+ self.assertEquals(token, expectedToken)
+
+
+ def test_cacheTokenPropertyIsProvisioned(self):
+ d = self.ccn.changed()
+ d.addCallback(lambda _: self.assertToken('token0'))
+ return d
+
+
+ def test_changedChangesToken(self):
+ d = self.ccn.changed()
+ d.addCallback(lambda _: self.ccn.changed())
+ d.addCallback(lambda _: self.assertToken('token1'))
+ return d
+
+
+ def tearDown(self):
+ for call in self.memcache._timeouts.itervalues():
+ call.cancel()
+ MemcacheChangeNotifier._memcacheProtocol = None
+
+
+
+class BaseCacheTestMixin(object):
+ def setUp(self):
+ StubRequest.resources = {
+ '/calendars/__uids__/cdaboo/': StubURLResource(
+ '/calendars/__uids__/cdaboo/'),
+ '/calendars/users/cdaboo/': StubURLResource(
+ '/calendars/__uids__/cdaboo/'),
+ '/principals/__uids__/cdaboo/': StubURLResource(
+ '/principals/__uids__/cdaboo/', record='directoryToken0'),
+ '/calendars/__uids__/dreid/': StubURLResource(
+ '/calendars/__uids__/dreid/'),
+ '/principals/__uids__/dreid/': StubURLResource(
+ '/principals/__uids__/dreid/', record='directoryToken0')}
+
+
+ def tearDown(self):
+ StubRequest.resources = {}
+
+
+ def assertResponse(self, response, expected):
+ self.assertNotEquals(response, None, "Got None instead of a response.")
+ self.assertEquals(response.code, expected[0])
+ self.assertEquals(set(response.headers.getAllRawHeaders()),
+ set(expected[1].getAllRawHeaders()))
+
+ d = allDataFromStream(response.stream)
+ d.addCallback(self.assertEquals, expected[2])
+ return d
+
+
+ def test_getResponseForRequestMultiHomedRequestURI(self):
+ request = StubRequest(
+ 'PROPFIND',
+ '/calendars/users/cdaboo/',
+ '/principals/__uids__/cdaboo/')
+
+ d = self.rc.getResponseForRequest(request)
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestURINotFound(self):
+ request = StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/wsanchez/',
+ '/calendars/__uids__/dreid/')
+
+ d = self.rc.getResponseForRequest(request)
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestMultiHomedPrincipalURI(self):
+ request = StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/users/cdaboo/')
+
+ d = self.rc.getResponseForRequest(request)
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestNotInCache(self):
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/dreid/',
+ '/principals/__uids__/dreid/'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestInCache(self):
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertResponse, self.expected_response)
+ return d
+
+
+ def test_getResponseForRequestPrincipalTokenChanged(self):
+ self.tokens['/principals/__uids__/cdaboo/'] = 'principalToken1'
+
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestUriTokenChanged(self):
+ self.tokens['/calendars/__uids__/cdaboo/'] = 'uriToken1'
+
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForRequestChildTokenChanged(self):
+ self.tokens['/calendars/__uids__/cdaboo/calendars/'] = 'childToken1'
+
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForDepthZero(self):
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/',
+ depth='0'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForBody(self):
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/',
+ body='bazbax'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_getResponseForUnauthenticatedRequest(self):
+ d = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '{DAV:}unauthenticated',
+ body='bazbax'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+ def test_cacheUnauthenticatedResponse(self):
+ expected_response = StubResponse(401, {}, "foobar")
+
+ d = self.rc.cacheResponseForRequest(
+ StubRequest('PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '{DAV:}unauthenticated'),
+ expected_response)
+
+ d.addCallback(self.assertResponse,
+ (expected_response.code,
+ expected_response.headers,
+ expected_response.body))
+
+ return d
+
+
+ def test_cacheResponseForRequest(self):
+ expected_response = StubResponse(200, {}, "Foobar")
+
+ def _assertResponse(ign):
+ d1 = self.rc.getResponseForRequest(StubRequest(
+ 'PROPFIND',
+ '/principals/__uids__/dreid/',
+ '/principals/__uids__/dreid/'))
+
+
+ d1.addCallback(self.assertResponse,
+ (expected_response.code,
+ expected_response.headers,
+ expected_response.body))
+ return d1
+
+
+ d = self.rc.cacheResponseForRequest(
+ StubRequest('PROPFIND',
+ '/principals/__uids__/dreid/',
+ '/principals/__uids__/dreid/'),
+ expected_response)
+
+ d.addCallback(_assertResponse)
+ return d
+
+
+ def test_recordHashChangeInvalidatesCache(self):
+ StubRequest.resources[
+ '/principals/__uids__/cdaboo/'].record = 'directoryToken1'
+
+ d = self.rc.getResponseForRequest(
+ StubRequest(
+ 'PROPFIND',
+ '/calendars/__uids__/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertEquals, None)
+ return d
+
+
+
+class MemcacheResponseCacheTests(BaseCacheTestMixin, TestCase):
+ def setUp(self):
+ super(MemcacheResponseCacheTests, self).setUp()
+
+ memcacheStub = InMemoryMemcacheProtocol()
+ self.rc = MemcacheResponseCache(None, cachePool=memcacheStub)
+ self.rc.logger.setLevel('debug')
+ self.tokens = {}
+
+ self.tokens['/calendars/__uids__/cdaboo/'] = 'uriToken0'
+ self.tokens['/calendars/__uids__/cdaboo/calendars/'] = 'childToken0'
+ self.tokens['/principals/__uids__/cdaboo/'] = 'principalToken0'
+ self.tokens['/principals/__uids__/dreid/'] = 'principalTokenX'
+
+ def _getToken(uri, cachePoolHandle=None):
+ return succeed(self.tokens.get(uri))
+
+ self.rc._tokenForURI = _getToken
+
+ self.expected_response = (200, Headers({}), "Foo")
+
+ expected_key = hashlib.md5(':'.join([str(t) for t in (
+ 'PROPFIND',
+ '/principals/__uids__/cdaboo/',
+ '/calendars/__uids__/cdaboo/',
+ '1',
+ hash('foobar'),
+ )])).hexdigest()
+
+ memcacheStub._cache[expected_key] = (
+ 0, #flags
+ cPickle.dumps((
+ 'principalToken0',
+ hash('directoryToken0'),
+ 'uriToken0',
+ {'/calendars/__uids__/cdaboo/calendars/':'childToken0'},
+ (self.expected_response[0],
+ dict(list(self.expected_response[1].getAllRawHeaders())),
+ self.expected_response[2]))))
+
+ self.memcacheStub = memcacheStub
+
+ def tearDown(self):
+ for call in self.memcacheStub._timeouts.itervalues():
+ call.cancel()
+
+ def test_givenURIsForKeys(self):
+ expected_response = (200, Headers({}), "Foobarbaz")
+
+ _key = (
+ 'PROPFIND',
+ '/principals/__uids__/cdaboo/',
+ '/calendars/users/cdaboo/',
+ '1',
+ hash('foobar'),
+ )
+
+ expected_key = hashlib.md5(':'.join([str(t) for t in _key])).hexdigest()
+
+ self.memcacheStub._cache[expected_key] = (
+ 0, #flags
+ cPickle.dumps((
+ 'principalToken0',
+ hash('directoryToken0'),
+ 'uriToken0',
+ {'/calendars/__uids__/cdaboo/calendars/':'childToken0'},
+ (expected_response[0],
+ dict(list(expected_response[1].getAllRawHeaders())),
+ expected_response[2]))))
+
+ d = self.rc.getResponseForRequest(
+ StubRequest('PROPFIND',
+ '/calendars/users/cdaboo/',
+ '/principals/__uids__/cdaboo/'))
+
+ d.addCallback(self.assertResponse, expected_response)
+ return d
+
+
+
+class StubResponseCacheResource(object):
+ def __init__(self):
+ self.cache = {}
+ self.responseCache = self
+
+
+ def getResponseForRequest(self, request):
+ if request in self.cache:
+ return self.cache[request]
+
+
+ def cacheResponseForRequest(self, request, response):
+ self.cache[request] = response
+ return response
+
+
+
+class TestRenderMixin(object):
+ davHeaders = ('foo',)
+
+ def renderHTTP(self, request):
+ self.response.headers.setHeader('dav', self.davHeaders)
+
+ return self.response
+
+
+
+class TestCachingResource(PropfindCacheMixin, TestRenderMixin):
+ def __init__(self, response):
+ self.response = response
+
+
+
+class PropfindCacheMixinTests(TestCase):
+ """
+ Test the PropfindCacheMixin
+ """
+ def setUp(self):
+ TestCase.setUp(self)
+ self.resource = TestCachingResource(StubResponse(200, {}, "foobar"))
+ self.responseCache = StubResponseCacheResource()
+
+ def test_DAVHeaderCached(self):
+ """
+ Test that the DAV header set in renderHTTP is cached.
+ """
+ def _checkCache(response):
+ self.assertEquals(response.headers.getHeader('dav'),
+ ('foo',))
+ self.assertEquals(
+ self.responseCache.cache[request].headers.getHeader('dav'),
+ ('foo',))
+
+ request = StubRequest('PROPFIND', '/', '/')
+ request.resources['/'] = self.responseCache
+
+ d = maybeDeferred(self.resource.renderHTTP, request)
+ d.addCallback(_checkCache)
+
+ return d
+
+
+ def test_onlyCachePropfind(self):
+ """
+ Test that we only cache the result of a propfind request.
+ """
+ def _checkCache(response):
+ self.assertEquals(self.responseCache.getResponseForRequest(request),
+ None)
+
+ request = StubRequest('GET', '/', '/')
+ request.resources['/'] = self.responseCache
+
+ d = maybeDeferred(self.resource.renderHTTP, request)
+ d.addCallback(_checkCache)
+
+ return d
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_calendarquery.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_calendarquery.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_calendarquery.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -34,6 +34,7 @@
from twistedcaldav.config import config
from twistedcaldav.test.util import HomeTestCase
from twisted.internet.defer import inlineCallbacks, returnValue
+from twistedcaldav.memcacher import Memcacher
from txdav.common.datastore.test.util import buildStore, StubNotifierFactory
@@ -354,6 +355,9 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(Memcacher, "allowTestCache", True)
self.calendarStore = yield buildStore(self, StubNotifierFactory())
yield super(DatabaseQueryTests, self).setUp()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_icalendar.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_icalendar.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -81,6 +81,100 @@
try: calendar.validateForCalDAV()
except ValueError: self.fail("Resource iCalendar %s didn't validate for CalDAV" % (filename,))
+ def test_component_validate_and_fix(self):
+ """
+ CalDAV resource validation and fixing.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+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:20110105T191945Z
+UID:5D70FD7E-3DFA-4981-8B91-E9E6CD5FCE28
+DTEND;TZID=America/Los_Angeles:20110107T141500
+RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20110121
+TRANSP:OPAQUE
+SUMMARY:test
+DTSTART;TZID=America/Los_Angeles:20110107T123000
+DTSTAMP:20110105T192229Z
+END:VEVENT
+END:VCALENDAR
+"""
+ # Ensure it starts off invalid
+ calendar = Component.fromString(data)
+ try: calendar.validateComponentsForCalDAV(False)
+ except InvalidICalendarDataError: pass
+ else: self.fail("Shouldn't validate for CalDAV")
+
+ # Fix it
+ calendar.validateComponentsForCalDAV(False, fix=True)
+ self.assertTrue("RRULE:FREQ=DAILY;UNTIL=20110121T203000Z\r\n"
+ in str(calendar))
+
+ # Now it should pass without fixing
+ calendar.validateComponentsForCalDAV(False, fix=False)
+
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+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
+DTSTART;VALUE=DATE:20110107
+DTEND;VALUE=DATE:20110108
+DTSTAMP:20110106T231917Z
+RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20110131T123456
+SUMMARY:test
+CREATED:20110105T191945Z
+UID:5D70FD7E-3DFA-4981-8B91-E9E6CD5FCE28
+TRANSP:OPAQUE
+END:VEVENT
+END:VCALENDAR
+"""
+ # Ensure it starts off invalid
+ calendar = Component.fromString(data)
+ try: calendar.validateComponentsForCalDAV(False)
+ except InvalidICalendarDataError: pass
+ else: self.fail("Shouldn't validate for CalDAV")
+
+ # Fix it
+ calendar.validateComponentsForCalDAV(False, fix=True)
+ self.assertTrue("RRULE:FREQ=DAILY;UNTIL=20110131\r\n" in str(calendar))
+
+ # Now it should pass without fixing
+ calendar.validateComponentsForCalDAV(False, fix=False)
+
+
def test_component_timeranges(self):
"""
Component time range query.
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_link.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_link.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_link.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -36,6 +36,9 @@
def calendarWithName(self, name):
return succeed(None)
+
+ def addNotifier(self, notifier):
+ pass
class StubCalendarHomeResource(CalendarHomeResource):
def principalForRecord(self):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_resource.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_resource.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -27,6 +27,9 @@
class StubHome(object):
def properties(self):
return []
+
+ def addNotifier(self, notifier):
+ pass
class CalDAVResourceTests(TestCase):
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_sharing.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_sharing.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_sharing.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -24,6 +24,7 @@
from twistedcaldav import customxml
from twistedcaldav.config import config
from twistedcaldav.test.util import HomeTestCase, norequest
+from twistedcaldav.memcacher import Memcacher
from twistedcaldav.resource import CalDAVResource
from txdav.common.datastore.test.util import buildStore, StubNotifierFactory
@@ -546,6 +547,9 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(Memcacher, "allowTestCache", True)
self.calendarStore = yield buildStore(self, StubNotifierFactory())
yield super(DatabaseSharingTests, self).setUp()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_stdconfig.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_stdconfig.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_stdconfig.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -142,3 +142,10 @@
cfg.load(tempfile1.path)
self.assertEquals(cfg.DocumentRoot, "/root/defaultdoc")
self.assertEquals(cfg.DataRoot, "/root/overridedata")
+
+ def test_updateDataStore(self):
+ configDict = {
+ "ServerRoot" : "/a/b/c/",
+ }
+ _updateDataStore(configDict)
+ self.assertEquals(configDict["ServerRoot"], "/a/b/c")
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_upgrade.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_upgrade.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_upgrade.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -22,17 +22,27 @@
from twistedcaldav.directory.xmlfile import XMLDirectoryService
from twistedcaldav.directory.resourceinfo import ResourceInfoDatabase
from twistedcaldav.mail import MailGatewayTokensDatabase
-from twistedcaldav.upgrade import UpgradeError, upgradeData, updateFreeBusySet
+from twistedcaldav.upgrade import (
+ xattrname, UpgradeError, upgradeData, updateFreeBusySet
+)
from twistedcaldav.test.util import TestCase
from calendarserver.tools.util import getDirectory
import hashlib
import os, zlib, cPickle
-freeBusyAttr = "WebDAV:{urn:ietf:params:xml:ns:caldav}calendar-free-busy-set"
-cTagAttr = "WebDAV:{http:%2F%2Fcalendarserver.org%2Fns%2F}getctag"
-md5Attr = "WebDAV:{http:%2F%2Ftwistedmatrix.com%2Fxml_namespace%2Fdav%2F}getcontentmd5"
+
+freeBusyAttr = xattrname(
+ "{urn:ietf:params:xml:ns:caldav}calendar-free-busy-set"
+)
+cTagAttr = xattrname(
+ "{http:%2F%2Fcalendarserver.org%2Fns%2F}getctag"
+)
+md5Attr = xattrname(
+ "{http:%2F%2Ftwistedmatrix.com%2Fxml_namespace%2Fdav%2F}getcontentmd5"
+)
+
OLDPROXYFILE = ".db.calendaruserproxy"
NEWPROXYFILE = "proxies.sqlite"
@@ -852,7 +862,7 @@
},
"@xattrs" :
{
- "ignore" : "extra",
+ xattrname("ignore") : "extra",
cTagAttr : "12345",
},
},
@@ -908,7 +918,7 @@
},
"@xattrs" :
{
- "ignore" : "extra",
+ xattrname("ignore") : "extra",
cTagAttr : isValidCTag, # method below
},
},
@@ -972,7 +982,7 @@
},
"@xattrs" :
{
- "ignore" : "extra",
+ xattrname("ignore") : "extra",
cTagAttr : zlib.compress("<?xml version='1.0' encoding='UTF-8'?>\r\n<getctag xmlns='http://calendarserver.org/ns/'>2009-02-25 14:34:34.703093</getctag>\r\n"),
},
},
@@ -1028,7 +1038,7 @@
},
"@xattrs" :
{
- "ignore" : "extra",
+ xattrname("ignore") : "extra",
cTagAttr : zlib.compress("<?xml version='1.0' encoding='UTF-8'?>\r\n<getctag xmlns='http://calendarserver.org/ns/'>2009-02-25 14:34:34.703093</getctag>\r\n"),
},
},
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_wrapping.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_wrapping.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/test/test_wrapping.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -22,7 +22,7 @@
from twext.web2.server import Request
from twext.web2.responsecode import UNAUTHORIZED
from twext.web2.http_headers import Headers
-from txdav.idav import AlreadyFinishedError, IDataStore
+from twext.enterprise.ienterprise import AlreadyFinishedError
from twext.web2.dav import davxml
from twistedcaldav.config import config
@@ -37,6 +37,7 @@
from twistedcaldav.test.util import TestCase
+from txdav.idav import IDataStore
from txdav.caldav.datastore.test.test_file import event4_text
from txdav.carddav.datastore.test.test_file import vcard4_text
@@ -45,6 +46,7 @@
StubNotifierFactory
+from twistedcaldav.memcacher import Memcacher
from txdav.caldav.icalendarstore import ICalendarHome
from txdav.carddav.iaddressbookstore import IAddressBookHome
@@ -467,6 +469,9 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(Memcacher, "allowTestCache", True)
self.calendarStore = yield buildStore(self, StubNotifierFactory())
super(DatabaseWrappingTests, self).setUp()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/timezoneservice.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/timezoneservice.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/timezoneservice.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -144,7 +144,11 @@
method = request.args.get("method", ("",))
if len(method) != 1:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-method")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-method"),
+ "Invalid method query parameter",
+ ))
method = method[0]
action = {
@@ -154,7 +158,11 @@
}.get(method, None)
if action is None:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "supported-method")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "supported-method"),
+ "Unknown method query parameter",
+ ))
return action(request)
@@ -179,13 +187,21 @@
tzid = request.args.get("tzid", ())
if len(tzid) != 1:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-timezone")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-timezone"),
+ "Invalid tzid query parameter",
+ ))
tzid = tzid[0]
try:
tzdata = readTZ(tzid)
except TimezoneException:
- raise HTTPError(ErrorResponse(responsecode.NOT_FOUND, (calendarserver_namespace, "timezone-available")))
+ raise HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (calendarserver_namespace, "timezone-available"),
+ "Timezone not found",
+ ))
response = Response()
response.stream = MemoryStream(tzdata)
@@ -199,12 +215,20 @@
tzid = request.args.get("tzid", ())
if len(tzid) != 1:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-timezone")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-timezone"),
+ "Invalid tzid query parameter",
+ ))
tzid = tzid[0]
try:
tzdata = readTZ(tzid)
except TimezoneException:
- raise HTTPError(ErrorResponse(responsecode.NOT_FOUND, (calendarserver_namespace, "timezone-available")))
+ raise HTTPError(ErrorResponse(
+ responsecode.NOT_FOUND,
+ (calendarserver_namespace, "timezone-available"),
+ "Timezone not found",
+ ))
try:
start = request.args.get("start", ())
@@ -212,7 +236,11 @@
raise ValueError()
start = parse_date_or_datetime(start[0])
except ValueError:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-start-date")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-start-date"),
+ "Invalid start query parameter",
+ ))
try:
end = request.args.get("end", ())
@@ -222,7 +250,11 @@
if end <= start:
raise ValueError()
except ValueError:
- raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-end-date")))
+ raise HTTPError(ErrorResponse(
+ responsecode.BAD_REQUEST,
+ (calendarserver_namespace, "valid-end-date"),
+ "Invalid end query parameter",
+ ))
# Now do the expansion (but use a cache to avoid re-calculating TZs)
observances = self.cache.get((tzid, start, end), None)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/upgrade.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/upgrade.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -39,9 +39,17 @@
from calendarserver.tools.util import getDirectory
from calendarserver.tools.resources import migrateResources
+from twisted.python.reflect import namedAny
+deadPropertyXattrPrefix = namedAny(
+ "txdav.base.propertystore.xattr.PropertyStore.deadPropertyXattrPrefix"
+)
+
log = Logger()
+def xattrname(n):
+ return deadPropertyXattrPrefix + n
+
def getCalendarServerIDs(config):
# Determine uid/gid for ownership of directories we create here
@@ -164,7 +172,7 @@
md5value = "<?xml version='1.0' encoding='UTF-8'?>\r\n<getcontentmd5 xmlns='http://twistedmatrix.com/xml_namespace/dav/'>%s</getcontentmd5>\r\n" % (hashlib.md5(data).hexdigest(),)
md5value = zlib.compress(md5value)
- xattr.setxattr(resPath, "WebDAV:{http:%2F%2Ftwistedmatrix.com%2Fxml_namespace%2Fdav%2F}getcontentmd5", md5value)
+ xattr.setxattr(resPath, xattrname("{http:%2F%2Ftwistedmatrix.com%2Fxml_namespace%2Fdav%2F}getcontentmd5"), md5value)
collectionUpdated = True
@@ -172,7 +180,7 @@
if collectionUpdated:
ctagValue = "<?xml version='1.0' encoding='UTF-8'?>\r\n<getctag xmlns='http://calendarserver.org/ns/'>%s</getctag>\r\n" % (str(datetime.datetime.now()),)
ctagValue = zlib.compress(ctagValue)
- xattr.setxattr(calPath, "WebDAV:{http:%2F%2Fcalendarserver.org%2Fns%2F}getctag", ctagValue)
+ xattr.setxattr(calPath, xattrname("{http:%2F%2Fcalendarserver.org%2Fns%2F}getctag"), ctagValue)
return errorOccurred
@@ -202,7 +210,7 @@
# __uids__/<guid> form
if cal == "inbox":
for attr, value in xattr.xattr(calPath).iteritems():
- if attr == "WebDAV:{urn:ietf:params:xml:ns:caldav}calendar-free-busy-set":
+ if attr == xattrname("{urn:ietf:params:xml:ns:caldav}calendar-free-busy-set"):
value = updateFreeBusySet(value, directory)
if value is not None:
# Need to write the xattr back to disk
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -314,11 +314,11 @@
self.transport.loseConnection()
if not hasattr(self.factory, "username"):
- self.factory.deferred.errback(failure.Failure(Unauthorized("Mail gateway not able to process reply; authentication required for calendar server")))
+ self.factory.deferred.errback(failure.Failure(Unauthorized("Authentication required")))
return self.factory.deferred
if hasattr(self.factory, "retried"):
- self.factory.deferred.errback(failure.Failure(Unauthorized("Mail gateway not able to process reply; could not authenticate user %s with calendar server" % (self.factory.username,))))
+ self.factory.deferred.errback(failure.Failure(Unauthorized("Could not authenticate user %s with calendar server" % (self.factory.username,))))
return self.factory.deferred
self.factory.retried = True
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Abidjan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Abidjan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Abidjan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Abidjan
X-LIC-LOCATION:Africa/Abidjan
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-001608
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Accra.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Accra.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Accra.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Accra
X-LIC-LOCATION:Africa/Accra
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:S
+TZOFFSETFROM:-000052
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19360901T000000
+RRULE:FREQ=YEARLY;UNTIL=19420901T000000Z;BYMONTH=9
+TZNAME:GHST
TZOFFSETFROM:+0000
TZOFFSETTO:+0020
-TZNAME:GHST
-DTSTART:19360901T000000
-RRULE:FREQ=YEARLY;UNTIL=19420901T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19361231T000000
+RRULE:FREQ=YEARLY;UNTIL=19421230T234000Z;BYMONTH=12
+TZNAME:GMT
TZOFFSETFROM:+0020
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19361231T000000
-RRULE:FREQ=YEARLY;UNTIL=19421230T234000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-000052
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19180101T000000
-RDATE:19180101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Addis_Ababa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Addis_Ababa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Addis_Ababa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Addis_Ababa
X-LIC-LOCATION:Africa/Addis_Ababa
BEGIN:STANDARD
+DTSTART:18700101T000000
+RDATE:18700101T000000
+TZNAME:ADMT
TZOFFSETFROM:+023448
TZOFFSETTO:+023520
-TZNAME:ADMT
-DTSTART:18700101T000000
-RDATE:18700101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19360505T000000
+RDATE:19360505T000000
+TZNAME:EAT
TZOFFSETFROM:+023520
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19360505T000000
-RDATE:19360505T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Algiers.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Algiers.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Algiers.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,41 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Algiers
X-LIC-LOCATION:Africa/Algiers
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19161002T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19191005T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19440403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1MO;UNTIL=19450402T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:18910315T000100
+RDATE:18910315T000100
+TZNAME:PMT
TZOFFSETFROM:+001212
TZOFFSETTO:+000921
-TZNAME:PMT
-DTSTART:18910315T000100
-RDATE:18910315T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000000
+RDATE:19110311T000000
+TZNAME:WEST
TZOFFSETFROM:+000921
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19110311T000000
-RDATE:19110311T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19160614T230000
RDATE:19160614T230000
RDATE:19170324T230000
@@ -47,52 +31,82 @@
RDATE:19710425T230000
RDATE:19770506T000000
RDATE:19800425T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19161002T000000
+RRULE:FREQ=YEARLY;UNTIL=19191005T230000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19201024T000000
RDATE:19201024T000000
RDATE:19210622T000000
RDATE:19391119T010000
RDATE:19461007T000000
-RDATE:19630414T000000
RDATE:19710927T000000
-RDATE:19791026T000000
RDATE:19801031T020000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400225T020000
+RDATE:19400225T020000
+TZNAME:CEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19400225T020000
-RDATE:19400225T020000
-RDATE:19560129T000000
-RDATE:19810501T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19441008T020000
RDATE:19441008T020000
RDATE:19450916T010000
RDATE:19780922T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19560129T000000
+RDATE:19560129T000000
+RDATE:19810501T000000
+TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19630414T000000
+RDATE:19630414T000000
+RDATE:19791026T000000
+TZNAME:WEST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19771021T000000
RDATE:19771021T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19780324T010000
+RDATE:19780324T010000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19780324T010000
-RDATE:19780324T010000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmara.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmara.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmara.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Asmara
X-LIC-LOCATION:Africa/Asmara
BEGIN:STANDARD
+DTSTART:18700101T000000
+RDATE:18700101T000000
+TZNAME:AMT
TZOFFSETFROM:+023532
TZOFFSETTO:+023532
-TZNAME:AMT
-DTSTART:18700101T000000
-RDATE:18700101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:ADMT
TZOFFSETFROM:+023532
TZOFFSETTO:+023520
-TZNAME:ADMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19360505T000000
+RDATE:19360505T000000
+TZNAME:EAT
TZOFFSETFROM:+023520
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19360505T000000
-RDATE:19360505T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmera.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmera.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Asmera.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Asmera
X-LIC-LOCATION:Africa/Asmera
BEGIN:STANDARD
+DTSTART:18700101T000000
+RDATE:18700101T000000
+TZNAME:AMT
TZOFFSETFROM:+023532
TZOFFSETTO:+023532
-TZNAME:AMT
-DTSTART:18700101T000000
-RDATE:18700101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:ADMT
TZOFFSETFROM:+023532
TZOFFSETTO:+023520
-TZNAME:ADMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19360505T000000
+RDATE:19360505T000000
+TZNAME:EAT
TZOFFSETFROM:+023520
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19360505T000000
-RDATE:19360505T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bamako.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bamako.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bamako.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bamako
X-LIC-LOCATION:Africa/Bamako
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-0032
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600620T000000
+RDATE:19600620T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19600620T000000
-RDATE:19600620T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bangui.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bangui.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bangui.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bangui
X-LIC-LOCATION:Africa/Bangui
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+011420
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Banjul.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Banjul.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Banjul.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Banjul
X-LIC-LOCATION:Africa/Banjul
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:BMT
TZOFFSETFROM:-010636
TZOFFSETTO:-010636
-TZNAME:BMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19350101T000000
+RDATE:19350101T000000
+TZNAME:WAT
TZOFFSETFROM:-010636
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19350101T000000
-RDATE:19350101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19640101T000000
-RDATE:19640101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bissau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bissau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bissau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bissau
X-LIC-LOCATION:Africa/Bissau
BEGIN:STANDARD
+DTSTART:19110526T000000
+RDATE:19110526T000000
+TZNAME:WAT
TZOFFSETFROM:-010220
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19110526T000000
-RDATE:19110526T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19750101T000000
+RDATE:19750101T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19750101T000000
-RDATE:19750101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Blantyre.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Blantyre.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Blantyre.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Blantyre
X-LIC-LOCATION:Africa/Blantyre
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:CAT
TZOFFSETFROM:+0220
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19030301T000000
-RDATE:19030301T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Brazzaville.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Brazzaville.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Brazzaville.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Brazzaville
X-LIC-LOCATION:Africa/Brazzaville
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+010108
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bujumbura.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bujumbura.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Bujumbura.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Bujumbura
X-LIC-LOCATION:Africa/Bujumbura
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CAT
TZOFFSETFROM:+015728
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Cairo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Cairo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Cairo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,131 +1,123 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Cairo
X-LIC-LOCATION:Africa/Cairo
+BEGIN:STANDARD
+DTSTART:19001001T000000
+RDATE:19001001T000000
+TZNAME:EEST
+TZOFFSETFROM:+0205
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19890506T010000
+RDATE:20100910T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19420401T000000
-RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19431101T000000
-RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420401T000000
+RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431101T000000
+RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z;BYMONTH=11
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19571001T000000
-RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z
+RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19590501T010000
+RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19590501T010000
-RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19590930T030000
+RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19590930T030000
-RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19661001T030000
+RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19661001T030000
-RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840501T010000
+RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19840501T010000
-RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19900501T010000
+RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19900501T010000
-RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19950428T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19950428T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19950929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=25,26,27,28,29,30;BYDAY=FR;UNTIL=20020926T210000Z
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=1;BYDAY=FR;UNTIL=20020926T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;UNTIL=20050929T210000Z;BYDAY=FR;BYYEARDAY=-92,-93,-94,-9
+ 5,-96,-97,-98
TZNAME:EET
-DTSTART:20030925T230000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH;UNTIL=20050929T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20080828T230000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=-1TH
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0205
-TZOFFSETTO:+0200
+DTSTART:20101001T000000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYYEARDAY=-92,-93,-94,-95,-96,-97,-98
TZNAME:EET
-DTSTART:19001001T000000
-RDATE:19001001T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19400715T000000
-RDATE:19400715T000000
-RDATE:19410415T000000
-RDATE:19450416T000000
-RDATE:19570510T000000
-RDATE:19580501T000000
-RDATE:19820725T010000
-RDATE:19830712T010000
-RDATE:19890506T010000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19401001T000000
-RDATE:19401001T000000
-RDATE:19410916T000000
-RDATE:19421027T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20060921T230000
-RDATE:20060921T230000
-RDATE:20070906T230000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Casablanca.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Casablanca.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Casablanca.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,27 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Casablanca
X-LIC-LOCATION:Africa/Casablanca
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
+BEGIN:STANDARD
+DTSTART:19131026T000000
+RDATE:19131026T000000
TZNAME:WEST
-DTSTART:19760501T000000
-RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-003020
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19131026T000000
-RDATE:19131026T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19390912T000000
RDATE:19390912T000000
RDATE:19400225T000000
@@ -30,11 +21,13 @@
RDATE:19740624T000000
RDATE:19780601T000000
RDATE:20080601T000000
+RDATE:20090601T000000
+RDATE:20100502T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
DTSTART:19391119T000000
RDATE:19391119T000000
RDATE:19451118T000000
@@ -44,15 +37,33 @@
RDATE:19760801T000000
RDATE:19770928T000000
RDATE:19780804T000000
-RDATE:19860101T000000
RDATE:20080901T000000
+RDATE:20090821T000000
+RDATE:20100808T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z;BYMONTH=5
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:CET
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19840316T000000
RDATE:19840316T000000
+TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ceuta.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ceuta.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ceuta.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,47 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ceuta
X-LIC-LOCATION:Africa/Ceuta
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:WET
+TZOFFSETFROM:-002116
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19281006T230000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19180506T230000
+RDATE:19180506T230000
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19760501T000000
-RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19860330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19860928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+DTSTART:19181007T230000
+RDATE:19181007T230000
+RDATE:19241005T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-002116
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19290101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19180506T230000
-RDATE:19180506T230000
+DTSTART:19240416T230000
RDATE:19240416T230000
RDATE:19260417T230000
RDATE:19270409T230000
@@ -59,41 +49,59 @@
RDATE:19670603T120000
RDATE:19740624T000000
RDATE:19780601T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19281006T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19181007T230000
-RDATE:19181007T230000
-RDATE:19241005T000000
-RDATE:19671001T000000
-RDATE:19740901T000000
-RDATE:19760801T000000
-RDATE:19770928T000000
-RDATE:19780804T000000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z;BYMONTH=5
+TZNAME:WEST
TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19240101T000000
-RDATE:19240101T000000
-RDATE:19290101T000000
-END:STANDARD
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840316T000000
+RDATE:19840316T000000
+TZNAME:CET
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19840316T000000
-RDATE:19840316T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:19860101T000000
-RDATE:19860101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Conakry.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Conakry.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Conakry.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Conakry
X-LIC-LOCATION:Africa/Conakry
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-005452
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19600101T000000
-RDATE:19600101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dakar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dakar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dakar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dakar
X-LIC-LOCATION:Africa/Dakar
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:-010944
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19410601T000000
+RDATE:19410601T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19410601T000000
-RDATE:19410601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dar_es_Salaam.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dar_es_Salaam.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Dar_es_Salaam.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Dar_es_Salaam
X-LIC-LOCATION:Africa/Dar_es_Salaam
BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:EAT
TZOFFSETFROM:+023708
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19480101T000000
+RDATE:19480101T000000
+TZNAME:BEAUT
TZOFFSETFROM:+0300
TZOFFSETTO:+024445
-TZNAME:BEAUT
-DTSTART:19480101T000000
-RDATE:19480101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19610101T000000
+RDATE:19610101T000000
+TZNAME:EAT
TZOFFSETFROM:+024445
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19610101T000000
-RDATE:19610101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Djibouti.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Djibouti.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Djibouti.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Djibouti
X-LIC-LOCATION:Africa/Djibouti
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:EAT
TZOFFSETFROM:+025236
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Douala.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Douala.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Douala.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Douala
X-LIC-LOCATION:Africa/Douala
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+003848
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/El_Aaiun.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/El_Aaiun.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/El_Aaiun.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/El_Aaiun
X-LIC-LOCATION:Africa/El_Aaiun
BEGIN:STANDARD
+DTSTART:19340101T000000
+RDATE:19340101T000000
+TZNAME:WAT
TZOFFSETFROM:-005248
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19340101T000000
-RDATE:19340101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19760414T000000
+RDATE:19760414T000000
+TZNAME:WET
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19760414T000000
-RDATE:19760414T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Freetown.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Freetown.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Freetown.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Freetown
X-LIC-LOCATION:Africa/Freetown
+BEGIN:STANDARD
+DTSTART:18820101T000000
+RDATE:18820101T000000
+TZNAME:FMT
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0053
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19130601T000000
+RDATE:19130601T000000
+TZNAME:S
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19350601T000000
+RRULE:FREQ=YEARLY;UNTIL=19420601T010000Z;BYMONTH=6
+TZNAME:SLST
TZOFFSETFROM:-0100
TZOFFSETTO:-0020
-TZNAME:SLST
-DTSTART:19350601T000000
-RRULE:FREQ=YEARLY;UNTIL=19420601T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19351001T000000
+RRULE:FREQ=YEARLY;UNTIL=19421001T002000Z;BYMONTH=10
+TZNAME:WAT
TZOFFSETFROM:-0020
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19351001T000000
-RRULE:FREQ=YEARLY;UNTIL=19421001T002000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:S
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19570601T000000
+RRULE:FREQ=YEARLY;UNTIL=19620601T000000Z;BYMONTH=6
+TZNAME:SLST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:SLST
-DTSTART:19570601T000000
-RRULE:FREQ=YEARLY;UNTIL=19620601T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19570901T000000
+RRULE:FREQ=YEARLY;UNTIL=19620831T230000Z;BYMONTH=9
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19570901T000000
-RRULE:FREQ=YEARLY;UNTIL=19620831T230000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0053
-TZOFFSETTO:-0053
-TZNAME:FMT
-DTSTART:18820101T000000
-RDATE:18820101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0053
-TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19130601T000000
-RDATE:19130601T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19570101T000000
-RDATE:19570101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Gaborone.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Gaborone.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Gaborone.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Gaborone
X-LIC-LOCATION:Africa/Gaborone
BEGIN:STANDARD
+DTSTART:18850101T000000
+RDATE:18850101T000000
+TZNAME:CAT
TZOFFSETFROM:+014340
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:18850101T000000
-RDATE:18850101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430919T020000
+RDATE:19430919T020000
+TZNAME:CAST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:CAST
-DTSTART:19430919T020000
-RDATE:19430919T020000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19440319T020000
+RDATE:19440319T020000
+TZNAME:CAT
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19440319T020000
-RDATE:19440319T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Harare.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Harare.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Harare.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Harare
X-LIC-LOCATION:Africa/Harare
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:CAT
TZOFFSETFROM:+020412
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19030301T000000
-RDATE:19030301T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Johannesburg.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Johannesburg.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Johannesburg.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Johannesburg
X-LIC-LOCATION:Africa/Johannesburg
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:SAST
-DTSTART:19420920T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19430919T000000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
+DTSTART:18920208T000000
+RDATE:18920208T000000
TZNAME:SAST
-DTSTART:19430321T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19440318T230000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0152
TZOFFSETTO:+0130
-TZNAME:SAST
-DTSTART:18920208T000000
-RDATE:18920208T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
TZOFFSETFROM:+0130
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420920T020000
+RRULE:FREQ=YEARLY;UNTIL=19430919T000000Z;BYDAY=3SU;BYMONTH=9
TZNAME:SAST
-DTSTART:19030301T000000
-RDATE:19030301T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RRULE:FREQ=YEARLY;UNTIL=19440318T230000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:SAST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kampala.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kampala.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kampala.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kampala
X-LIC-LOCATION:Africa/Kampala
BEGIN:STANDARD
+DTSTART:19280701T000000
+RDATE:19280701T000000
+TZNAME:EAT
TZOFFSETFROM:+020940
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19280701T000000
-RDATE:19280701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19300101T000000
+RDATE:19300101T000000
+TZNAME:BEAT
TZOFFSETFROM:+0300
TZOFFSETTO:+0230
-TZNAME:BEAT
-DTSTART:19300101T000000
-RDATE:19300101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19480101T000000
+RDATE:19480101T000000
+TZNAME:BEAUT
TZOFFSETFROM:+0230
TZOFFSETTO:+024445
-TZNAME:BEAUT
-DTSTART:19480101T000000
-RDATE:19480101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:EAT
TZOFFSETFROM:+024445
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19570101T000000
-RDATE:19570101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Khartoum.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Khartoum.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Khartoum.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,44 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Khartoum
X-LIC-LOCATION:Africa/Khartoum
BEGIN:STANDARD
-TZOFFSETFROM:+0300
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:CAST
+TZOFFSETFROM:+021008
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19701015T000000
-RRULE:FREQ=YEARLY;UNTIL=19851014T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19700501T000000
+RDATE:19700501T000000
+RDATE:19710430T000000
+TZNAME:CAST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:CAST
-DTSTART:19720430T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19850427T220000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+021008
+DTSTART:19701015T000000
+RRULE:FREQ=YEARLY;UNTIL=19851014T210000Z;BYMONTH=10
+TZNAME:CAT
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720430T000000
+RRULE:FREQ=YEARLY;UNTIL=19850427T220000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CAST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:CAST
-DTSTART:19700501T000000
-RDATE:19700501T000000
-RDATE:19710430T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20000115T120000
+RDATE:20000115T120000
+TZNAME:EAT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:20000115T120000
-RDATE:20000115T120000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kigali.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kigali.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kigali.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kigali
X-LIC-LOCATION:Africa/Kigali
BEGIN:STANDARD
+DTSTART:19350601T000000
+RDATE:19350601T000000
+TZNAME:CAT
TZOFFSETFROM:+020016
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19350601T000000
-RDATE:19350601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kinshasa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kinshasa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Kinshasa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Kinshasa
X-LIC-LOCATION:Africa/Kinshasa
BEGIN:STANDARD
+DTSTART:18971109T000000
+RDATE:18971109T000000
+TZNAME:WAT
TZOFFSETFROM:+010112
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:18971109T000000
-RDATE:18971109T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lagos.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lagos.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lagos.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lagos
X-LIC-LOCATION:Africa/Lagos
BEGIN:STANDARD
+DTSTART:19190901T000000
+RDATE:19190901T000000
+TZNAME:WAT
TZOFFSETFROM:+001336
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19190901T000000
-RDATE:19190901T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Libreville.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Libreville.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Libreville.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Libreville
X-LIC-LOCATION:Africa/Libreville
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+003748
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lome.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lome.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lome.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lome
X-LIC-LOCATION:Africa/Lome
BEGIN:STANDARD
+DTSTART:18930101T000000
+RDATE:18930101T000000
+TZNAME:GMT
TZOFFSETFROM:+000452
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18930101T000000
-RDATE:18930101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Luanda.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Luanda.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Luanda.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Luanda
X-LIC-LOCATION:Africa/Luanda
BEGIN:STANDARD
+DTSTART:18920101T000000
+RDATE:18920101T000000
+TZNAME:AOT
TZOFFSETFROM:+005256
TZOFFSETTO:+005204
-TZNAME:AOT
-DTSTART:18920101T000000
-RDATE:18920101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110526T000000
+RDATE:19110526T000000
+TZNAME:WAT
TZOFFSETFROM:+005204
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19110526T000000
-RDATE:19110526T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lubumbashi.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lubumbashi.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lubumbashi.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lubumbashi
X-LIC-LOCATION:Africa/Lubumbashi
BEGIN:STANDARD
+DTSTART:18971109T000000
+RDATE:18971109T000000
+TZNAME:CAT
TZOFFSETFROM:+014952
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:18971109T000000
-RDATE:18971109T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lusaka.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lusaka.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Lusaka.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Lusaka
X-LIC-LOCATION:Africa/Lusaka
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:CAT
TZOFFSETFROM:+015308
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19030301T000000
-RDATE:19030301T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Malabo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Malabo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Malabo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Malabo
X-LIC-LOCATION:Africa/Malabo
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:+003508
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19631215T000000
+RDATE:19631215T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19631215T000000
-RDATE:19631215T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maputo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maputo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maputo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maputo
X-LIC-LOCATION:Africa/Maputo
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:CAT
TZOFFSETFROM:+021020
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19030301T000000
-RDATE:19030301T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maseru.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maseru.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Maseru.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Maseru
X-LIC-LOCATION:Africa/Maseru
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
TZOFFSETFROM:+0150
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430919T020000
+RDATE:19430919T020000
TZNAME:SAST
-DTSTART:19030301T000000
-RDATE:19030301T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440319T020000
+RDATE:19440319T020000
TZNAME:SAST
-DTSTART:19430919T020000
-RDATE:19430919T020000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19440319T020000
-RDATE:19440319T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mbabane.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mbabane.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mbabane.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mbabane
X-LIC-LOCATION:Africa/Mbabane
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
TZOFFSETFROM:+020424
TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19030301T000000
-RDATE:19030301T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mogadishu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mogadishu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Mogadishu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Mogadishu
X-LIC-LOCATION:Africa/Mogadishu
BEGIN:STANDARD
+DTSTART:18931101T000000
+RDATE:18931101T000000
+TZNAME:EAT
TZOFFSETFROM:+030128
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:18931101T000000
-RDATE:18931101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:BEAT
TZOFFSETFROM:+0300
TZOFFSETTO:+0230
-TZNAME:BEAT
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:EAT
TZOFFSETFROM:+0230
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19570101T000000
-RDATE:19570101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Monrovia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Monrovia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Monrovia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Monrovia
X-LIC-LOCATION:Africa/Monrovia
BEGIN:STANDARD
+DTSTART:18820101T000000
+RDATE:18820101T000000
+TZNAME:MMT
TZOFFSETFROM:-004308
TZOFFSETTO:-004308
-TZNAME:MMT
-DTSTART:18820101T000000
-RDATE:18820101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19190301T000000
+RDATE:19190301T000000
+TZNAME:LRT
TZOFFSETFROM:-004308
TZOFFSETTO:-004430
-TZNAME:LRT
-DTSTART:19190301T000000
-RDATE:19190301T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19720501T000000
+RDATE:19720501T000000
+TZNAME:GMT
TZOFFSETFROM:-004430
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19720501T000000
-RDATE:19720501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nairobi.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nairobi.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nairobi.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nairobi
X-LIC-LOCATION:Africa/Nairobi
BEGIN:STANDARD
+DTSTART:19280701T000000
+RDATE:19280701T000000
+TZNAME:EAT
TZOFFSETFROM:+022716
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19280701T000000
-RDATE:19280701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19300101T000000
+RDATE:19300101T000000
+TZNAME:BEAT
TZOFFSETFROM:+0300
TZOFFSETTO:+0230
-TZNAME:BEAT
-DTSTART:19300101T000000
-RDATE:19300101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:BEAUT
TZOFFSETFROM:+0230
TZOFFSETTO:+024445
-TZNAME:BEAUT
-DTSTART:19400101T000000
-RDATE:19400101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:EAT
TZOFFSETFROM:+024445
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19600101T000000
-RDATE:19600101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ndjamena.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ndjamena.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ndjamena.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ndjamena
X-LIC-LOCATION:Africa/Ndjamena
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+010012
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19791014T000000
+RDATE:19791014T000000
+TZNAME:WAST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WAST
-DTSTART:19791014T000000
-RDATE:19791014T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19800308T000000
+RDATE:19800308T000000
+TZNAME:WAT
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19800308T000000
-RDATE:19800308T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Niamey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Niamey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Niamey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Niamey
X-LIC-LOCATION:Africa/Niamey
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WAT
TZOFFSETFROM:+000828
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19600101T000000
-RDATE:19600101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nouakchott.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nouakchott.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Nouakchott.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Nouakchott
X-LIC-LOCATION:Africa/Nouakchott
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-010348
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19601128T000000
+RDATE:19601128T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19601128T000000
-RDATE:19601128T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ouagadougou.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ouagadougou.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Ouagadougou.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Ouagadougou
X-LIC-LOCATION:Africa/Ouagadougou
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-000604
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Porto-Novo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Porto-Novo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Porto-Novo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Porto-Novo
X-LIC-LOCATION:Africa/Porto-Novo
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:+001028
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Sao_Tome.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Sao_Tome.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Sao_Tome.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Sao_Tome
X-LIC-LOCATION:Africa/Sao_Tome
BEGIN:STANDARD
-TZOFFSETFROM:+002656
-TZOFFSETTO:-003632
-TZNAME:LMT
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-003632
-TZOFFSETTO:+0000
-TZNAME:GMT
DTSTART:19120101T000000
RDATE:19120101T000000
+TZNAME:GMT
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Timbuktu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Timbuktu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Timbuktu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Timbuktu
X-LIC-LOCATION:Africa/Timbuktu
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:GMT
TZOFFSETFROM:-0032
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340226T000000
+RDATE:19340226T000000
+TZNAME:WAT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:WAT
-DTSTART:19340226T000000
-RDATE:19340226T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600620T000000
+RDATE:19600620T000000
+TZNAME:GMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19600620T000000
-RDATE:19600620T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tripoli.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tripoli.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tripoli.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,82 +1,95 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tripoli
X-LIC-LOCATION:Africa/Tripoli
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:CEST
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19820401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19861003T000000
+RDATE:19960930T000000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+TZNAME:EET
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
TZNAME:CEST
-DTSTART:19870401T000000
-RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19871001T000000
-RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+005244
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870401T000000
+RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19511014T020000
-RDATE:19511014T020000
-RDATE:19531009T020000
-RDATE:19550930T000000
-RDATE:19850406T000000
-RDATE:19860404T000000
-RDATE:19970404T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871001T000000
+RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19520101T000000
-RDATE:19520101T000000
-RDATE:19540101T000000
-RDATE:19560101T000000
-RDATE:19820101T000000
-RDATE:19861003T000000
-RDATE:19960930T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19970404T000000
+RDATE:19970404T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19590101T000000
-RDATE:19590101T000000
-RDATE:19900504T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19971004T000000
+RDATE:19971004T000000
+TZNAME:EET
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971004T000000
-RDATE:19971004T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tunis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tunis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Tunis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,55 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Tunis
X-LIC-LOCATION:Africa/Tunis
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19440403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1MO;UNTIL=19450402T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19880925T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:20060326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:20061029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18810512T000000
+RDATE:18810512T000000
+TZNAME:PMT
TZOFFSETFROM:+004044
TZOFFSETTO:+000921
-TZNAME:PMT
-DTSTART:18810512T000000
-RDATE:18810512T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000000
+RDATE:19110311T000000
+TZNAME:CEST
TZOFFSETFROM:+000921
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19110311T000000
-RDATE:19110311T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19390415T230000
RDATE:19390415T230000
RDATE:19400225T230000
@@ -62,11 +32,11 @@
RDATE:19890326T000000
RDATE:19900501T000000
RDATE:20050501T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19391119T000000
RDATE:19391119T000000
RDATE:19411006T000000
@@ -78,6 +48,37 @@
RDATE:19770924T010000
RDATE:19781001T010000
RDATE:20050930T020000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880925T010000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060326T020000
+RRULE:FREQ=YEARLY;UNTIL=20080330T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20061029T030000
+RRULE:FREQ=YEARLY;UNTIL=20081026T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Windhoek.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Windhoek.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Africa/Windhoek.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Africa/Windhoek
X-LIC-LOCATION:Africa/Windhoek
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:WAST
-DTSTART:19940904T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:WAT
-DTSTART:19950402T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18920208T000000
+RDATE:18920208T000000
+TZNAME:SWAT
TZOFFSETFROM:+010824
TZOFFSETTO:+0130
-TZNAME:SWAT
-DTSTART:18920208T000000
-RDATE:18920208T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
TZOFFSETFROM:+0130
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420920T020000
+RDATE:19420920T020000
TZNAME:SAST
-DTSTART:19030301T000000
-RDATE:19030301T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RDATE:19430321T020000
TZNAME:SAST
-DTSTART:19420920T020000
-RDATE:19420920T020000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:SAST
-DTSTART:19430321T020000
-RDATE:19430321T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19900321T000000
+RDATE:19900321T000000
+TZNAME:CAT
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:CAT
-DTSTART:19900321T000000
-RDATE:19900321T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19940403T000000
+RDATE:19940403T000000
+TZNAME:WAST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940904T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=9
+TZNAME:WAST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950402T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZNAME:WAT
-DTSTART:19940403T000000
-RDATE:19940403T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Adak.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Adak.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Adak.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,131 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Adak
X-LIC-LOCATION:America/Adak
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T130000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:BST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T120000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T130000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T120000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T110000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T120000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+121321
-TZOFFSETTO:-114638
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-114638
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19000820T120000
RDATE:19000820T120000
+TZNAME:NST
+TZOFFSETFROM:-114638
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:NWT
DTSTART:19420209T020000
RDATE:19420209T020000
+TZNAME:NWT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:NPT
DTSTART:19450814T130000
RDATE:19450814T130000
+TZNAME:NPT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19450930T020000
RDATE:19450930T020000
+TZNAME:NST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:BST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:BDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T120000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:BST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:BDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
+TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:AHST
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831030T020000
RDATE:19831030T020000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:HAST
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T110000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:HAST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T120000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:HAST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anchorage.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anchorage.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anchorage.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,137 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anchorage
X-LIC-LOCATION:America/Anchorage
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:AHDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T120000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:AHST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T110000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:AHDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T120000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T110000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T100000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T110000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+140024
-TZOFFSETTO:-095936
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19000820T120000
+RDATE:19000820T120000
+TZNAME:CAT
TZOFFSETFROM:-095936
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19000820T120000
-RDATE:19000820T120000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:CAT/CAWT
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19420101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CAT/CAWT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
-TZNAME:CAWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+TZNAME:CAT/CAPT
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
-TZNAME:CAPT
-DTSTART:19450814T140000
-RDATE:19450814T140000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CAT/CAPT
TZOFFSETFROM:-0900
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CAT
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
-TZNAME:AHST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
-TZNAME:AHDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T110000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AHST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831030T020000
+RDATE:19831030T020000
+TZNAME:YST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19831030T020000
-RDATE:19831030T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AKST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anguilla.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anguilla.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Anguilla.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Anguilla
X-LIC-LOCATION:America/Anguilla
BEGIN:STANDARD
+DTSTART:19120302T000000
+RDATE:19120302T000000
+TZNAME:AST
TZOFFSETFROM:-041216
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19120302T000000
-RDATE:19120302T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Antigua.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Antigua.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Antigua.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Antigua
X-LIC-LOCATION:America/Antigua
BEGIN:STANDARD
+DTSTART:19120302T000000
+RDATE:19120302T000000
+TZNAME:EST
TZOFFSETFROM:-040712
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19120302T000000
-RDATE:19120302T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510101T000000
+RDATE:19510101T000000
+TZNAME:AST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19510101T000000
-RDATE:19510101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Araguaina.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Araguaina.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Araguaina.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,83 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Araguaina
X-LIC-LOCATION:America/Araguaina
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20030216T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-031248
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -85,17 +20,35 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
RDATE:19981011T000000
RDATE:19991003T000000
RDATE:20021103T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -111,15 +64,59 @@
RDATE:19980301T000000
RDATE:19990221T000000
RDATE:20000227T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
-RDATE:19950914T000000
RDATE:20030924T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950914T000000
+RDATE:19950914T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Buenos_Aires.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Buenos_Aires.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Buenos_Aires.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,154 +1,143 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Buenos_Aires
X-LIC-LOCATION:America/Argentina/Buenos_Aires
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-035348
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19740501T000000
+RDATE:19740501T000000
+TZNAME:ART
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
TZNAME:ART
-DTSTART:19740501T000000
-RDATE:19740501T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19991003T000000
-RDATE:19991003T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Catamarca.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Catamarca.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Catamarca.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,172 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Catamarca
X-LIC-LOCATION:America/Argentina/Catamarca
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042308
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042308
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910303T000000
RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911020T000000
+RDATE:19911020T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:19911020T000000
-RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:ARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040601T000000
+RDATE:20040601T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040601T000000
-RDATE:20040601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/ComodRivadavia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/ComodRivadavia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/ComodRivadavia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,172 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/ComodRivadavia
X-LIC-LOCATION:America/Argentina/ComodRivadavia
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042308
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042308
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910303T000000
RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911020T000000
+RDATE:19911020T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:19911020T000000
-RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:ARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040601T000000
+RDATE:20040601T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040601T000000
-RDATE:20040601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Cordoba.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Cordoba.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Cordoba.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,176 +1,165 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Cordoba
X-LIC-LOCATION:America/Argentina/Cordoba
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-041648
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910303T000000
-RDATE:19910303T000000
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910303T000000
+RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19911020T000000
RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+RDATE:20000303T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Jujuy.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Jujuy.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Jujuy.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,173 +1,174 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Jujuy
X-LIC-LOCATION:America/Argentina/Jujuy
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042112
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
+BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042112
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19691005T000000
-RDATE:19691005T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19891015T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:19890305T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19900304T000000
+RDATE:19900304T000000
+TZNAME:WART
TZOFFSETFROM:-0200
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19900304T000000
-RDATE:19900304T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19901028T000000
+RDATE:19901028T000000
+TZNAME:WARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
-DTSTART:19901028T000000
-RDATE:19901028T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910317T000000
+RDATE:19910317T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910317T000000
-RDATE:19910317T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911006T000000
+RDATE:19911006T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
TZNAME:ARST
-DTSTART:19911006T000000
-RDATE:19911006T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0200
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
TZNAME:ARST
-DTSTART:19920101T000000
-RDATE:19920101T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19991003T000000
-RDATE:19991003T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:20081018T000000
+RDATE:20081018T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
-RDATE:20081018T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/La_Rioja.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/La_Rioja.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/La_Rioja.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/La_Rioja
X-LIC-LOCATION:America/Argentina/La_Rioja
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042724
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042724
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:19910507T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910301T000000
RDATE:19910301T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19911020T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:ARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040601T000000
+RDATE:20040601T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040601T000000
-RDATE:20040601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Mendoza.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Mendoza.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Mendoza.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,167 +1,164 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Mendoza
X-LIC-LOCATION:America/Argentina/Mendoza
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-043516
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
-DTSTART:19901015T000000
-RRULE:FREQ=YEARLY;UNTIL=19911015T040000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910301T000000
-RRULE:FREQ=YEARLY;UNTIL=19920301T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-043516
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040926T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19891015T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:19890305T000000
RDATE:19930307T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
DTSTART:19900304T000000
RDATE:19900304T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:19911015T000000
+TZNAME:WARST
TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
-TZNAME:ARST
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:19920301T000000
+RDATE:20040523T000000
+TZNAME:WART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19921018T000000
RDATE:19921018T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
-END:STANDARD
-BEGIN:STANDARD
+TZNAME:ART
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040523T000000
-RDATE:20040523T000000
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Rio_Gallegos.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Rio_Gallegos.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Rio_Gallegos.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,150 +1,151 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Rio_Gallegos
X-LIC-LOCATION:America/Argentina/Rio_Gallegos
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-043652
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-043652
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ARST
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040601T000000
+RDATE:20040601T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040601T000000
-RDATE:20040601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Salta.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Salta.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Salta.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,164 +1,165 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Salta
X-LIC-LOCATION:America/Argentina/Salta
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042140
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042140
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19691005T000000
-RDATE:19691005T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910303T000000
RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911020T000000
+RDATE:19911020T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
TZNAME:ARST
-DTSTART:19911020T000000
-RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19991003T000000
-RDATE:19991003T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:20081018T000000
+RDATE:20081018T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
-RDATE:20081018T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Juan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Juan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Juan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Juan
X-LIC-LOCATION:America/Argentina/San_Juan
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-043404
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-043404
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:19910507T000000
RDATE:20040725T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910301T000000
RDATE:19910301T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19911020T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:ARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040531T000000
+RDATE:20040531T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040531T000000
-RDATE:20040531T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Luis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Luis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/San_Luis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,187 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/San_Luis
X-LIC-LOCATION:America/Argentina/San_Luis
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042524
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042524
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040725T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19691005T000000
-RDATE:19691005T000000
-RDATE:19910601T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19891015T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:19890305T000000
-RDATE:20080121T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900101T000000
+RDATE:19900101T000000
+TZNAME:ARST
TZOFFSETFROM:-0200
TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:19900101T000000
-RDATE:19900101T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19900314T000000
+RDATE:19900314T000000
+TZNAME:WART
TZOFFSETFROM:-0200
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19900314T000000
-RDATE:19900314T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19901015T000000
+RDATE:19901015T000000
+TZNAME:WARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
-DTSTART:19901015T000000
-RDATE:19901015T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
DTSTART:19910301T000000
RDATE:19910301T000000
RDATE:20040531T000000
+TZNAME:WART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+BEGIN:STANDARD
+DTSTART:19910601T000000
+RDATE:19910601T000000
+TZNAME:ART
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:WARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20080121T000000
+RDATE:20080121T000000
+TZNAME:WARST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080309T000000
+RRULE:FREQ=YEARLY;UNTIL=20090308T030000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:WART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081012T000000
+RRULE:FREQ=YEARLY;UNTIL=20091011T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:WARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-DTSTART:20040725T000000
-RDATE:20040725T000000
-END:STANDARD
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Tucuman.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Tucuman.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Tucuman.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,184 +1,179 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Tucuman
X-LIC-LOCATION:America/Argentina/Tucuman
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042052
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-042052
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040613T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910303T000000
-RDATE:19910303T000000
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910303T000000
+RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19911020T000000
RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
DTSTART:20040601T000000
RDATE:20040601T000000
+TZNAME:WART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Ushuaia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Ushuaia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Argentina/Ushuaia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,150 +1,151 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Argentina/Ushuaia
X-LIC-LOCATION:America/Argentina/Ushuaia
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-043312
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-043312
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:ARST
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040530T000000
+RDATE:20040530T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040530T000000
-RDATE:20040530T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Aruba.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Aruba.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Aruba.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Aruba
X-LIC-LOCATION:America/Aruba
BEGIN:STANDARD
+DTSTART:19120212T000000
+RDATE:19120212T000000
+TZNAME:ANT
TZOFFSETFROM:-044024
TZOFFSETTO:-0430
-TZNAME:ANT
-DTSTART:19120212T000000
-RDATE:19120212T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:AST
TZOFFSETFROM:-0430
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19650101T000000
-RDATE:19650101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Asuncion.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Asuncion.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Asuncion.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,134 +1,155 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Asuncion
X-LIC-LOCATION:America/Asuncion
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AMT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-035040
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311010T000000
+RDATE:19311010T000000
+TZNAME:PYT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19721001T000000
+RDATE:19721001T000000
+TZNAME:PYT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740401T000000
+RDATE:19740401T000000
TZNAME:PYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750301T000000
+RDATE:19750301T000000
+TZNAME:PYT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19751001T000000
-RRULE:FREQ=YEARLY;UNTIL=19881001T040000Z
+RRULE:FREQ=YEARLY;UNTIL=19881001T040000Z;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760301T000000
+RRULE:FREQ=YEARLY;UNTIL=19780301T030000Z;BYMONTH=3
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790401T000000
+RRULE:FREQ=YEARLY;UNTIL=19910401T030000Z;BYMONTH=4
TZNAME:PYT
-DTSTART:19760301T000000
-RRULE:FREQ=YEARLY;UNTIL=19780301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891022T000000
+RDATE:19891022T000000
+RDATE:19901001T000000
+RDATE:19911006T000000
+RDATE:19921005T000000
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920301T000000
+RDATE:19920301T000000
+RDATE:19930331T000000
+RDATE:19960301T000000
+RDATE:19970223T000000
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19790401T000000
-RRULE:FREQ=YEARLY;UNTIL=19910401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19931001T000000
+RRULE:FREQ=YEARLY;UNTIL=19951001T040000Z;BYMONTH=10
+TZNAME:PYST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:19931001T000000
-RRULE:FREQ=YEARLY;UNTIL=19951001T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19940227T000000
+RRULE:FREQ=YEARLY;UNTIL=19950226T030000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19940227T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU;UNTIL=19950226T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19961006T000000
+RRULE:FREQ=YEARLY;UNTIL=20011007T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20011007T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19980301T000000
+RRULE:FREQ=YEARLY;UNTIL=20010304T030000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19980301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=20010304T030000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:20020407T000000
+RRULE:FREQ=YEARLY;UNTIL=20040404T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:20020407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20040404T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020901T000000
+RRULE:FREQ=YEARLY;UNTIL=20030907T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:PYST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:20020901T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=20030907T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20041017T000000
+RRULE:FREQ=YEARLY;UNTIL=20091018T040000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:PYST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:20041017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20050313T000000
+RRULE:FREQ=YEARLY;UNTIL=20090308T030000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:PYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:20050313T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-035040
-TZOFFSETTO:-035040
-TZNAME:AMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-035040
-TZOFFSETTO:-0400
+DTSTART:20100411T000000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=4
TZNAME:PYT
-DTSTART:19311010T000000
-RDATE:19311010T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:PYT
-DTSTART:19721001T000000
-RDATE:19721001T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19740401T000000
-RDATE:19740401T000000
-RDATE:19920301T000000
-RDATE:19930331T000000
-RDATE:19960301T000000
-RDATE:19970223T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:PYT
-DTSTART:19750301T000000
-RDATE:19750301T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20101003T000000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:PYST
-DTSTART:19891022T000000
-RDATE:19891022T000000
-RDATE:19901001T000000
-RDATE:19911006T000000
-RDATE:19921005T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atikokan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atikokan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atikokan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Atikokan
X-LIC-LOCATION:America/Atikokan
BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CST
TZOFFSETFROM:-060628
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19400929T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181031T020000
-RDATE:19181031T020000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400929T000000
+RDATE:19400929T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:CWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atka.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atka.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Atka.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,131 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Atka
X-LIC-LOCATION:America/Atka
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T130000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:BST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T120000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T130000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T120000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T110000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T120000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+121321
-TZOFFSETTO:-114638
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-114638
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19000820T120000
RDATE:19000820T120000
+TZNAME:NST
+TZOFFSETFROM:-114638
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:NWT
DTSTART:19420209T020000
RDATE:19420209T020000
+TZNAME:NWT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:NPT
DTSTART:19450814T130000
RDATE:19450814T130000
+TZNAME:NPT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19450930T020000
RDATE:19450930T020000
+TZNAME:NST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:BST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:BDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T120000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:BST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:BDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
+TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:AHST
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831030T020000
RDATE:19831030T020000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:HAST
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T110000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:HAST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T120000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:HAST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,97 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bahia
X-LIC-LOCATION:America/Bahia
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19931017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19951015T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19940220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=19950219T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20030216T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-023404
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -99,19 +20,37 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19901021T000000
RDATE:19911020T000000
RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
RDATE:19981011T000000
RDATE:19991003T000000
RDATE:20021103T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -130,13 +69,65 @@
RDATE:19980301T000000
RDATE:19990221T000000
RDATE:20000227T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20030924T000000
RDATE:20030924T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia_Banderas.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/America/Bahia_Banderas.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia_Banderas.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bahia_Banderas.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,105 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bahia_Banderas
+X-LIC-LOCATION:America/Bahia_Banderas
+BEGIN:STANDARD
+DTSTART:19211231T235900
+RDATE:19211231T235900
+TZNAME:MST
+TZOFFSETFROM:-0701
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19490114T000000
+RDATE:19490114T000000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19700101T000000
+RDATE:19700101T000000
+TZNAME:MST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100404T020000
+RDATE:20100404T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20101031T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20110403T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Barbados.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Barbados.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Barbados.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Barbados
X-LIC-LOCATION:America/Barbados
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19240101T000000
+RDATE:19240101T000000
+TZNAME:BMT
+TZOFFSETFROM:-035828
+TZOFFSETTO:-035828
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320101T000000
+RDATE:19320101T000000
+TZNAME:AST
+TZOFFSETFROM:-035828
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19771002T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19781001T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770612T020000
+RDATE:19770612T020000
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19780416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19800420T060000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-035828
-TZOFFSETTO:-035828
-TZNAME:BMT
-DTSTART:19240101T000000
-RDATE:19240101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-035828
+DTSTART:19771002T020000
+RRULE:FREQ=YEARLY;UNTIL=19781001T050000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19320101T000000
-RDATE:19320101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19780416T020000
+RRULE:FREQ=YEARLY;UNTIL=19800420T060000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19770612T020000
-RDATE:19770612T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
DTSTART:19790930T020000
RDATE:19790930T020000
RDATE:19800925T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belem.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belem.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belem.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belem
X-LIC-LOCATION:America/Belem
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-031356
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-031356
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,13 +49,37 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belize.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belize.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Belize.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,45 +1,48 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Belize
X-LIC-LOCATION:America/Belize
+BEGIN:STANDARD
+DTSTART:19120401T000000
+RDATE:19120401T000000
+TZNAME:CST
+TZOFFSETFROM:-055248
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19181006T000000
+RRULE:FREQ=YEARLY;UNTIL=19421004T060000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:CHDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0530
-TZNAME:CHDT
-DTSTART:19181006T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19421004T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19190209T000000
+RRULE:FREQ=YEARLY;UNTIL=19430214T053000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=2
+TZNAME:CST
TZOFFSETFROM:-0530
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19190209T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430214T053000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055248
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19120401T000000
-RDATE:19120401T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19731205T000000
RDATE:19731205T000000
RDATE:19821218T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19740209T000000
RDATE:19740209T000000
RDATE:19830212T000000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Blanc-Sablon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Blanc-Sablon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Blanc-Sablon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Blanc-Sablon
X-LIC-LOCATION:America/Blanc-Sablon
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:AST
TZOFFSETFROM:-034828
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19180414T020000
-RDATE:19180414T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
DTSTART:19181031T020000
RDATE:19181031T020000
RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19700101T000000
+RDATE:19700101T000000
+TZNAME:AST
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19700101T000000
-RDATE:19700101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boa_Vista.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boa_Vista.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boa_Vista.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,62 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boa_Vista
X-LIC-LOCATION:America/Boa_Vista
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-040240
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -64,13 +20,29 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19991003T000000
RDATE:20001008T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
+TZNAME:AMT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -81,14 +53,44 @@
RDATE:19880207T000000
RDATE:20000227T000000
RDATE:20001015T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990930T000000
RDATE:19990930T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bogota.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bogota.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Bogota.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Bogota
X-LIC-LOCATION:America/Bogota
BEGIN:STANDARD
+DTSTART:18840313T000000
+RDATE:18840313T000000
+TZNAME:BMT
TZOFFSETFROM:-045620
TZOFFSETTO:-045620
-TZNAME:BMT
-DTSTART:18840313T000000
-RDATE:18840313T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19141123T000000
+RDATE:19141123T000000
+TZNAME:COST
TZOFFSETFROM:-045620
TZOFFSETTO:-0500
-TZNAME:COT
-DTSTART:19141123T000000
-RDATE:19141123T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920503T000000
+RDATE:19920503T000000
+TZNAME:COST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:COST
-DTSTART:19920503T000000
-RDATE:19920503T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930404T000000
+RDATE:19930404T000000
+TZNAME:COT
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:COT
-DTSTART:19930404T000000
-RDATE:19930404T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boise.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boise.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Boise.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,114 +1,128 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Boise
X-LIC-LOCATION:America/Boise
+BEGIN:STANDARD
+DTSTART:18831118T121511
+RDATE:18831118T121511
+TZNAME:PST
+TZOFFSETFROM:-074449
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T090000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19230513T020000
+RDATE:19230513T020000
+TZNAME:MST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740101T000000
+RDATE:19740101T000000
TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-074449
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18831118T121511
-RDATE:18831118T121511
+DTSTART:19740203T020000
+RDATE:19740203T020000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0800
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19230513T020000
-RDATE:19230513T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750223T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19740101T000000
-RDATE:19740101T000000
-END:STANDARD
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19740203T020000
-RDATE:19740203T020000
-RDATE:19750223T020000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Buenos_Aires.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Buenos_Aires.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Buenos_Aires.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,154 +1,143 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Buenos_Aires
X-LIC-LOCATION:America/Buenos_Aires
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19921018T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-035348
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19740501T000000
+RDATE:19740501T000000
+TZNAME:ART
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
TZNAME:ART
-DTSTART:19740501T000000
-RDATE:19740501T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19991003T000000
-RDATE:19991003T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cambridge_Bay.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cambridge_Bay.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cambridge_Bay.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,134 +1,135 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cambridge_Bay
X-LIC-LOCATION:America/Cambridge_Bay
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:MST
+TZOFFSETFROM:+0000
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19981025T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19990404T090000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:MDDT
TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
+TZOFFSETTO:-0500
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19651031T020000
+RDATE:19651031T020000
TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
+TZOFFSETFROM:-0500
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=19981025T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19990404T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
-TZOFFSETTO:-0500
-TZNAME:MDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19651031T020000
-RDATE:19651031T020000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19991031T020000
+RDATE:19991031T020000
+TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19991031T020000
-RDATE:19991031T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20000402T020000
-RDATE:20000402T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20001029T020000
+RDATE:20001029T020000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20001105T000000
+RDATE:20001105T000000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20001105T000000
-RDATE:20001105T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010401T030000
+RDATE:20010401T030000
+TZNAME:MDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
TZNAME:MDT
-DTSTART:20010401T020000
-RDATE:20010401T020000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Campo_Grande.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Campo_Grande.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Campo_Grande.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,202 +1,162 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Campo_Grande
X-LIC-LOCATION:America/Campo_Grande
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-033828
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19931017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19951015T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+TZNAME:AMT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19940220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=19950219T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T040000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20060219T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20080217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20110220T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20130217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20140216T040000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20220220T040000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20240218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20250216T040000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20270221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20330220T040000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20350218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20360217T040000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-033828
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19881016T000000
-RDATE:19891015T000000
-RDATE:19901021T000000
-RDATE:19911020T000000
-RDATE:19921025T000000
-RDATE:19981011T000000
-RDATE:19991003T000000
-RDATE:20021103T000000
-RDATE:20031019T000000
-RDATE:20041102T000000
-RDATE:20051016T000000
-RDATE:20061105T000000
-RDATE:20071014T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19500416T010000
-RDATE:19500416T010000
-RDATE:19530301T000000
-RDATE:19640301T000000
-RDATE:19650331T000000
-RDATE:19860315T000000
-RDATE:19870214T000000
-RDATE:19880207T000000
-RDATE:19890129T000000
-RDATE:19900211T000000
-RDATE:19910217T000000
-RDATE:19920209T000000
-RDATE:19930131T000000
-RDATE:19960211T000000
-RDATE:19970216T000000
-RDATE:19980301T000000
-RDATE:19990221T000000
-RDATE:20000227T000000
-RDATE:20070225T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20170219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20120226T000000
-RDATE:20120226T000000
-RDATE:20150222T000000
-RDATE:20230226T000000
-RDATE:20260222T000000
-RDATE:20340226T000000
-RDATE:20370222T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cancun.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cancun.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cancun.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,85 +1,86 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cancun
X-LIC-LOCATION:America/Cancun
+BEGIN:STANDARD
+DTSTART:19220101T001256
+RDATE:19220101T001256
+TZNAME:CST
+TZOFFSETFROM:-054704
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19811223T000000
+RDATE:19811223T000000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19980405T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19980405T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19971026T060000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19980802T020000
+RDATE:19980802T020000
+TZNAME:CST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19981025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19990404T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010930T020000
+RDATE:20010930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054704
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19220101T001256
-RDATE:19220101T001256
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19811223T000000
-RDATE:19811223T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19980802T020000
-RDATE:19980802T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20010506T020000
-RDATE:20010506T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20010930T020000
-RDATE:20010930T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Caracas.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Caracas.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Caracas.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Caracas
X-LIC-LOCATION:America/Caracas
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
TZOFFSETFROM:-042744
TZOFFSETTO:-042740
-TZNAME:CMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120212T000000
+RDATE:19120212T000000
+TZNAME:VET
TZOFFSETFROM:-042740
TZOFFSETTO:-0430
-TZNAME:VET
-DTSTART:19120212T000000
-RDATE:19120212T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:VET
TZOFFSETFROM:-0430
TZOFFSETTO:-0400
-TZNAME:VET
-DTSTART:19650101T000000
-RDATE:19650101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20071209T030000
+RDATE:20071209T030000
+TZNAME:VET
TZOFFSETFROM:-0400
TZOFFSETTO:-0430
-TZNAME:VET
-DTSTART:20071209T030000
-RDATE:20071209T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Catamarca.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Catamarca.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Catamarca.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,172 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Catamarca
X-LIC-LOCATION:America/Catamarca
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042308
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042308
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040620T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910303T000000
RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911020T000000
+RDATE:19911020T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:19911020T000000
-RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:ARST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:20040601T000000
+RDATE:20040601T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040601T000000
-RDATE:20040601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayenne.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayenne.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayenne.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cayenne
X-LIC-LOCATION:America/Cayenne
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:GFT
TZOFFSETFROM:-032920
TZOFFSETTO:-0400
-TZNAME:GFT
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19671001T000000
+RDATE:19671001T000000
+TZNAME:GFT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:GFT
-DTSTART:19671001T000000
-RDATE:19671001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayman.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayman.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cayman.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cayman
X-LIC-LOCATION:America/Cayman
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KMT
TZOFFSETFROM:-052532
TZOFFSETTO:-050712
-TZNAME:KMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120201T000000
+RDATE:19120201T000000
+TZNAME:EST
TZOFFSETFROM:-050712
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19120201T000000
-RDATE:19120201T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chicago.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chicago.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chicago.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,155 +1,177 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chicago
X-LIC-LOCATION:America/Chicago
+BEGIN:STANDARD
+DTSTART:18831118T120924
+RDATE:18831118T120924
+TZNAME:CST
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19211030T070000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200613T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19220430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19350428T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19220924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19350929T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220430T020000
+RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19370425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19410427T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19220924T020000
+RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360301T020000
+RDATE:19360301T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19361115T020000
+RDATE:19361115T020000
+RDATE:19450930T020000
TZNAME:CST
-DTSTART:19370926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19410928T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370425T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19370926T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-055036
-TZOFFSETTO:-0600
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:18831118T120924
-RDATE:18831118T120924
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19200613T020000
-RDATE:19200613T020000
-RDATE:19210327T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19360301T020000
-RDATE:19360301T020000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19361115T020000
-RDATE:19361115T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chihuahua.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chihuahua.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Chihuahua.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,97 +1,98 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Chihuahua
X-LIC-LOCATION:America/Chihuahua
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19970406T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19971026T070000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19211231T235540
+RDATE:19211231T235540
TZNAME:MST
-DTSTART:19981025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T080000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19990404T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T090000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-070420
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19211231T235540
-RDATE:19211231T235540
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19960101T000000
RDATE:19960101T000000
RDATE:19980101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19970406T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980405T030000
+RDATE:19980405T030000
TZNAME:MDT
-DTSTART:19980405T020000
-RDATE:19980405T020000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
+END:DAYLIGHT
+BEGIN:DAYLIGHT
DTSTART:20010506T020000
RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Coral_Harbour.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Coral_Harbour.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Coral_Harbour.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Coral_Harbour
X-LIC-LOCATION:America/Coral_Harbour
BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CST
TZOFFSETFROM:-060628
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19400929T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181031T020000
-RDATE:19181031T020000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400929T000000
+RDATE:19400929T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:CWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cordoba.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cordoba.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cordoba.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,176 +1,165 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cordoba
X-LIC-LOCATION:America/Cordoba
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-041648
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910303T000000
-RDATE:19910303T000000
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910303T000000
+RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19911020T000000
RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+RDATE:20000303T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Costa_Rica.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Costa_Rica.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Costa_Rica.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Costa_Rica
X-LIC-LOCATION:America/Costa_Rica
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SJMT
+TZOFFSETFROM:-053620
+TZOFFSETTO:-053620
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210115T000000
+RDATE:19210115T000000
+TZNAME:CST
+TZOFFSETFROM:-053620
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790225T000000
+RRULE:FREQ=YEARLY;UNTIL=19800224T060000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19790225T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU;UNTIL=19800224T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790603T000000
+RRULE:FREQ=YEARLY;UNTIL=19800601T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19790603T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19800601T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19910119T000000
+RRULE:FREQ=YEARLY;UNTIL=19920118T060000Z;BYDAY=3SA;BYMONTH=1
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19910119T000000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=3SA;UNTIL=19920118T060000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-053620
-TZOFFSETTO:-053620
-TZNAME:SJMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-053620
-TZOFFSETTO:-0600
+DTSTART:19910701T000000
+RDATE:19910701T000000
+RDATE:19920315T000000
TZNAME:CST
-DTSTART:19210115T000000
-RDATE:19210115T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19910701T000000
-RDATE:19910701T000000
-RDATE:19920315T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cuiaba.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cuiaba.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Cuiaba.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,210 +1,182 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Cuiaba
X-LIC-LOCATION:America/Cuiaba
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-034420
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19931017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19951015T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+TZNAME:AMT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19940220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=19950219T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T040000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20030216T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20050220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20060219T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20080217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20110220T030000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20130217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20140216T040000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20220220T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:20030924T000000
+RDATE:20030924T000000
+TZNAME:AMT
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20240218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20250216T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:20041001T000000
+RDATE:20041001T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:20270221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20330220T040000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20050220T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20350218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20360217T040000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-034420
-TZOFFSETTO:-0400
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19881016T000000
-RDATE:19891015T000000
-RDATE:19901021T000000
-RDATE:19911020T000000
-RDATE:19921025T000000
-RDATE:19981011T000000
-RDATE:19991003T000000
-RDATE:20021103T000000
-RDATE:20041102T000000
-RDATE:20051016T000000
-RDATE:20061105T000000
-RDATE:20071014T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19500416T010000
-RDATE:19500416T010000
-RDATE:19530301T000000
-RDATE:19640301T000000
-RDATE:19650331T000000
-RDATE:19860315T000000
-RDATE:19870214T000000
-RDATE:19880207T000000
-RDATE:19890129T000000
-RDATE:19900211T000000
-RDATE:19910217T000000
-RDATE:19920209T000000
-RDATE:19930131T000000
-RDATE:19960211T000000
-RDATE:19970216T000000
-RDATE:19980301T000000
-RDATE:19990221T000000
-RDATE:20000227T000000
-RDATE:20070225T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20170219T030000Z;BYDAY=3SU;BYMONTH=2
TZNAME:AMT
-DTSTART:20030924T000000
-RDATE:20030924T000000
-RDATE:20041001T000000
-RDATE:20120226T000000
-RDATE:20150222T000000
-RDATE:20230226T000000
-RDATE:20260222T000000
-RDATE:20340226T000000
-RDATE:20370222T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Curacao.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Curacao.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Curacao.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Curacao
X-LIC-LOCATION:America/Curacao
BEGIN:STANDARD
+DTSTART:19120212T000000
+RDATE:19120212T000000
+TZNAME:ANT
TZOFFSETFROM:-043544
TZOFFSETTO:-0430
-TZNAME:ANT
-DTSTART:19120212T000000
-RDATE:19120212T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:AST
TZOFFSETFROM:-0430
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19650101T000000
-RDATE:19650101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Danmarkshavn.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Danmarkshavn.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Danmarkshavn.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Danmarkshavn
X-LIC-LOCATION:America/Danmarkshavn
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:WGT
+TZOFFSETFROM:-011440
TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19800927T230000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SA;UNTIL=19950924T010000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:WGST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:WGST
-DTSTART:19810328T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA;UNTIL=19950326T010000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-011440
+DTSTART:19800927T230000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=SA;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=9
+TZNAME:WGT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19160728T000000
-RDATE:19160728T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=SA;BYMONTHDAY=24,25,26,27,2
+ 8,29,30;BYMONTH=3
+TZNAME:WGST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:WGST
-DTSTART:19800406T020000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT
TZOFFSETFROM:-0300
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,110 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson
X-LIC-LOCATION:America/Dawson
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19000820T000000
+RDATE:19000820T000000
+TZNAME:YST
TZOFFSETFROM:-091740
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19000820T000000
-RDATE:19000820T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:YDT
DTSTART:19180414T020000
RDATE:19180414T020000
RDATE:19190525T020000
+TZNAME:YDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:YST
DTSTART:19181027T020000
RDATE:19181027T020000
RDATE:19191101T000000
RDATE:19450930T020000
+TZNAME:YST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:YWT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+TZNAME:YPT
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:YPT
-DTSTART:19450814T150000
-RDATE:19450814T150000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:YDDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0700
-TZNAME:YDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:YST
TZOFFSETFROM:-0700
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19651031T020000
-RDATE:19651031T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19731028T000000
+RDATE:19731028T000000
+TZNAME:PST
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-DTSTART:19731028T000000
-RDATE:19731028T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
-DTSTART:19800101T000000
-RDATE:19800101T000000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson_Creek.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson_Creek.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dawson_Creek.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,79 +1,80 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dawson_Creek
X-LIC-LOCATION:America/Dawson_Creek
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19720430T100000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
+DTSTART:18840101T000000
+RDATE:18840101T000000
TZNAME:PST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T090000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19711031T090000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-080056
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
DTSTART:19181031T020000
RDATE:19181031T020000
RDATE:19450930T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
TZOFFSETFROM:-0700
TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470101T000000
+RDATE:19470101T000000
+TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19720430T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:PST
-DTSTART:19470101T000000
-RDATE:19470101T000000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19711031T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19720830T020000
RDATE:19720830T020000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Denver.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Denver.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Denver.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +1,134 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Denver
X-LIC-LOCATION:America/Denver
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19210327T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T080000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19650425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19651031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-065956
-TZOFFSETTO:-0700
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:MST
-DTSTART:18831118T120004
-RDATE:18831118T120004
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210522T020000
-RDATE:19210522T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Detroit.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Detroit.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Detroit.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,101 +1,115 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Detroit
X-LIC-LOCATION:America/Detroit
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19731028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19050101T000000
+RDATE:19050101T000000
+TZNAME:CST
TZOFFSETFROM:-053211
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19050101T000000
-RDATE:19050101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19150515T020000
+RDATE:19150515T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19150515T020000
-RDATE:19150515T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19730101T000000
RDATE:19750101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19450930T020000
RDATE:19450930T020000
RDATE:19480926T020000
RDATE:19671029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
DTSTART:19480425T020000
RDATE:19480425T020000
RDATE:19670614T020000
RDATE:19730429T020000
RDATE:19740106T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19731028T020000
+RRULE:FREQ=YEARLY;UNTIL=19741027T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750427T020000
RDATE:19750427T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dominica.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dominica.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Dominica.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Dominica
X-LIC-LOCATION:America/Dominica
BEGIN:STANDARD
+DTSTART:19110701T000100
+RDATE:19110701T000100
+TZNAME:AST
TZOFFSETFROM:-040536
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000100
-RDATE:19110701T000100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Edmonton.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Edmonton.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Edmonton.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,114 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Edmonton
X-LIC-LOCATION:America/Edmonton
+BEGIN:STANDARD
+DTSTART:19060901T000000
+RDATE:19060901T000000
+TZNAME:MST
+TZOFFSETFROM:-073352
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
+DTSTART:19180414T020000
+RRULE:FREQ=YEARLY;UNTIL=19190413T090000Z;BYDAY=2SU;BYMONTH=4
TZNAME:MDT
-DTSTART:19180414T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;UNTIL=19190413T090000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19200425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19230429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19190527T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19671029T020000
+RDATE:19691026T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19230930T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200425T020000
+RRULE:FREQ=YEARLY;UNTIL=19230429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19720430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19230930T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19721029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RDATE:19470427T020000
+RDATE:19670430T020000
+RDATE:19690427T020000
TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19720430T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-073352
-TZOFFSETTO:-0700
+DTSTART:19870101T000000
+RDATE:19870101T000000
TZNAME:MST
-DTSTART:19060901T000000
-RDATE:19060901T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
+TZOFFSETFROM:-0700
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19190527T020000
-RDATE:19201031T020000
-RDATE:19450930T020000
-RDATE:19470928T020000
-RDATE:19671029T020000
-RDATE:19691026T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
-END:DAYLIGHT
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19470427T020000
-RDATE:19470427T020000
-RDATE:19670430T020000
-RDATE:19690427T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19870101T000000
-RDATE:19870101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Eirunepe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Eirunepe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Eirunepe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,75 +1,47 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Eirunepe
X-LIC-LOCATION:America/Eirunepe
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:ACST
+TZOFFSETFROM:-043928
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+TZNAME:ACST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z;BYMONTH=4
TZNAME:ACT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z;BYMONTH=12
TZNAME:ACST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-043928
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19931017T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:ACT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -79,22 +51,52 @@
RDATE:19870214T000000
RDATE:19880207T000000
RDATE:19940220T000000
+TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z;BYMONTH=4
+TZNAME:ACT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z;BYMONTH=3
TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z;BYMONTH=11
+TZNAME:ACST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
-RDATE:19930928T000000
RDATE:19940922T000000
+TZNAME:ACT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
+DTSTART:19930928T000000
+RDATE:19930928T000000
+TZNAME:ACST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AMT
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20080624T000000
RDATE:20080624T000000
+TZNAME:AMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/El_Salvador.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/El_Salvador.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/El_Salvador.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/El_Salvador
X-LIC-LOCATION:America/El_Salvador
+BEGIN:STANDARD
+DTSTART:19210101T000000
+RDATE:19210101T000000
+TZNAME:CST
+TZOFFSETFROM:-055648
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870503T000000
+RRULE:FREQ=YEARLY;UNTIL=19880501T060000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870503T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19880501T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19870927T000000
+RRULE:FREQ=YEARLY;UNTIL=19880925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19870927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880925T050000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055648
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210101T000000
-RDATE:19210101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ensenada.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ensenada.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ensenada.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,154 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Ensenada
X-LIC-LOCATION:America/Ensenada
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220101T001156
+RDATE:19220101T001156
+TZNAME:MST
+TZOFFSETFROM:-074804
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+RDATE:20100101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19540425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T100000Z
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19761031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-074804
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19220101T001156
-RDATE:19220101T001156
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19240101T000000
-RDATE:19240101T000000
-RDATE:19301115T000000
-RDATE:19310930T000000
-RDATE:19451112T000000
-RDATE:19490114T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19270610T230000
-RDATE:19270610T230000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19480405T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420424T000000
-RDATE:19420424T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540101T000000
-RDATE:19540101T000000
-RDATE:19610101T000000
-RDATE:19760101T000000
-RDATE:19960101T000000
-RDATE:20010101T000000
-RDATE:20020220T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fort_Wayne.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fort_Wayne.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fort_Wayne.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,141 +1,142 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fort_Wayne
X-LIC-LOCATION:America/Fort_Wayne
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121522
-RDATE:18831118T121522
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19410622T020000
-RDATE:19410622T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19410928T020000
RDATE:19410928T020000
RDATE:19450930T020000
RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19550424T020000
RDATE:19550424T020000
RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:20061029T020000
-RDATE:20061029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fortaleza.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fortaleza.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Fortaleza.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Fortaleza
X-LIC-LOCATION:America/Fortaleza
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-0234
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -71,14 +20,32 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -92,16 +59,46 @@
RDATE:20000227T000000
RDATE:20001022T000000
RDATE:20020217T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
+RDATE:20021001T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990930T000000
RDATE:19990930T000000
RDATE:20010913T000000
-RDATE:20021001T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Glace_Bay.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Glace_Bay.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Glace_Bay.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,96 +1,106 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Glace_Bay
X-LIC-LOCATION:America/Glace_Bay
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-035948
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19530101T000000
-RRULE:FREQ=YEARLY;UNTIL=19540101T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19530426T020000
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19720430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19530927T020000
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19721029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T060000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19530101T000000
+RDATE:19530101T000000
+RDATE:19540101T000000
+RDATE:19720101T000000
+RDATE:19740101T000000
+TZNAME:AST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19720430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-035948
+DTSTART:19721029T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19020615T000000
-RDATE:19020615T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19530426T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
-RDATE:19530927T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19720101T000000
-RDATE:19720101T000000
-RDATE:19740101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Godthab.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Godthab.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Godthab.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Godthab
X-LIC-LOCATION:America/Godthab
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:WGT
+TZOFFSETFROM:-032656
TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19800927T230000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SA;UNTIL=19950924T010000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:WGST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:WGST
-DTSTART:19810328T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19800927T230000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=SA;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=9
+TZNAME:WGT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19961026T230000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-032656
-TZOFFSETTO:-0300
-TZNAME:WGT
-DTSTART:19160728T000000
-RDATE:19160728T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=3
+TZNAME:WGST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:WGST
-DTSTART:19800406T020000
-RDATE:19800406T020000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961026T230000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=10
+TZNAME:WGT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Goose_Bay.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Goose_Bay.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Goose_Bay.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,198 +1,203 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Goose_Bay
X-LIC-LOCATION:America/Goose_Bay
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:NST
+TZOFFSETFROM:-040140
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+TZNAME:NST
TZOFFSETFROM:-033052
TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:NDT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
TZNAME:NST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T033052Z
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350330T000000
+RDATE:19350330T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19360511T000000
+RRULE:FREQ=YEARLY;UNTIL=19410512T033000Z;BYDAY=MO;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19360511T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=MO;UNTIL=19410512T033000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19361005T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T023000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420511T000000
+RDATE:19420511T000000
TZNAME:NST
-DTSTART:19361005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19411006T023000Z
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+TZNAME:NPT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460512T020000
+RRULE:FREQ=YEARLY;UNTIL=19500514T053000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19460512T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19500514T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19461006T020000
+RRULE:FREQ=YEARLY;UNTIL=19501008T043000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19461006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501008T043000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19650425T053000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19650425T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T043000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T043000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19601030T020000
+RRULE:FREQ=YEARLY;UNTIL=19651031T043000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19601030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19651031T043000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19660424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19660315T020000
+RDATE:19660315T020000
+TZNAME:AST
+TZOFFSETFROM:-0330
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19661030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19861026T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19660424T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19890402T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T040100Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19661030T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19891029T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T030100Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T000100
+RDATE:19870405T000100
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T000100
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871025T000100
+RDATE:19871025T000100
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T000100
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-040140
-TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-033052
-TZOFFSETTO:-023052
-TZNAME:NDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
+DTSTART:19880403T000100
+RDATE:19880403T000100
+TZNAME:ADDT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-023052
-TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-033052
-TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19350330T000000
-RDATE:19350330T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19360101T000000
-RDATE:19360101T000000
-RDATE:19460101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
-TZNAME:NWT
-DTSTART:19420511T000000
-RDATE:19420511T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0230
-TZNAME:NPT
-DTSTART:19450814T203000
-RDATE:19450814T203000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0330
+DTSTART:19881030T000100
+RDATE:19881030T000100
+TZNAME:AST
+TZOFFSETFROM:-0200
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19660315T020000
-RDATE:19660315T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19890402T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T040100Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19870405T000100
-RDATE:19870405T000100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19891029T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T030100Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19871025T000100
-RDATE:19871025T000100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T000100
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
-TZNAME:ADDT
-DTSTART:19880403T000100
-RDATE:19880403T000100
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:20071104T000100
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19881030T000100
-RDATE:19881030T000100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grand_Turk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grand_Turk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grand_Turk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Grand_Turk
X-LIC-LOCATION:America/Grand_Turk
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KMT
+TZOFFSETFROM:-044432
+TZOFFSETTO:-050712
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19120201T000000
+RDATE:19120201T000000
+TZNAME:EST
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19790429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19791028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19791028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-044432
-TZOFFSETTO:-050712
-TZNAME:KMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-050712
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19120201T000000
-RDATE:19120201T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grenada.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grenada.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Grenada.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Grenada
X-LIC-LOCATION:America/Grenada
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:AST
TZOFFSETFROM:-0407
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guadeloupe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guadeloupe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guadeloupe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guadeloupe
X-LIC-LOCATION:America/Guadeloupe
BEGIN:STANDARD
+DTSTART:19110608T000000
+RDATE:19110608T000000
+TZNAME:AST
TZOFFSETFROM:-040608
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110608T000000
-RDATE:19110608T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guatemala.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guatemala.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guatemala.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,35 +1,36 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guatemala
X-LIC-LOCATION:America/Guatemala
BEGIN:STANDARD
+DTSTART:19181005T000000
+RDATE:19181005T000000
+TZNAME:CST
TZOFFSETFROM:-060204
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181005T000000
-RDATE:19181005T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19731125T000000
RDATE:19731125T000000
RDATE:19830521T000000
RDATE:19910323T000000
RDATE:20060430T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19740224T000000
RDATE:19740224T000000
RDATE:19830922T000000
RDATE:19910907T000000
RDATE:20061001T000000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guayaquil.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guayaquil.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guayaquil.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guayaquil
X-LIC-LOCATION:America/Guayaquil
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:QMT
TZOFFSETFROM:-051920
TZOFFSETTO:-0514
-TZNAME:QMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:ECT
TZOFFSETFROM:-0514
TZOFFSETTO:-0500
-TZNAME:ECT
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guyana.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guyana.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Guyana.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Guyana
X-LIC-LOCATION:America/Guyana
BEGIN:STANDARD
+DTSTART:19150301T000000
+RDATE:19150301T000000
+TZNAME:GBGT
TZOFFSETFROM:-035240
TZOFFSETTO:-0345
-TZNAME:GBGT
-DTSTART:19150301T000000
-RDATE:19150301T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19660526T000000
+RDATE:19660526T000000
+TZNAME:GYT
TZOFFSETFROM:-0345
TZOFFSETTO:-0345
-TZNAME:GYT
-DTSTART:19660526T000000
-RDATE:19660526T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19750731T000000
+RDATE:19750731T000000
+TZNAME:GYT
TZOFFSETFROM:-0345
TZOFFSETTO:-0300
-TZNAME:GYT
-DTSTART:19750731T000000
-RDATE:19750731T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+TZNAME:GYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:GYT
-DTSTART:19910101T000000
-RDATE:19910101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Halifax.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Halifax.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Halifax.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,211 +1,221 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Halifax
X-LIC-LOCATION:America/Halifax
BEGIN:STANDARD
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19390528T000000
+TZNAME:ADT
TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181031T020000
+RDATE:19200829T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
TZNAME:AST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T040000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
+DTSTART:19210905T000000
+RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19210905T000000
-RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19230506T000000
+RRULE:FREQ=YEARLY;UNTIL=19250503T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19230506T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19250503T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19280513T000000
+RRULE:FREQ=YEARLY;UNTIL=19310510T040000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19280513T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19310510T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310928T000000
+RRULE:FREQ=YEARLY;UNTIL=19320926T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19310928T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19320926T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370502T000000
+RRULE:FREQ=YEARLY;UNTIL=19380501T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19370502T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19380501T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19370927T000000
+RRULE:FREQ=YEARLY;UNTIL=19410929T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19370927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19410929T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400505T000000
+RRULE:FREQ=YEARLY;UNTIL=19410504T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19400505T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19410504T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T060000Z
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19490925T050000Z
-END:STANDARD
+TZOFFSETTO:-0300
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19560429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19590426T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19560930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19590426T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19620429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19560930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T050000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19620429T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T060000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T060000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041424
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19020615T000000
-RDATE:19020615T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19160401T000000
-RDATE:19160401T000000
-RDATE:19180414T020000
-RDATE:19200509T000000
-RDATE:19210506T000000
-RDATE:19220430T000000
-RDATE:19260516T000000
-RDATE:19270501T000000
-RDATE:19320501T000000
-RDATE:19330430T000000
-RDATE:19340520T000000
-RDATE:19350602T000000
-RDATE:19360601T000000
-RDATE:19390528T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19161001T000000
-RDATE:19161001T000000
-RDATE:19181031T020000
-RDATE:19200829T000000
-RDATE:19230904T000000
-RDATE:19240915T000000
-RDATE:19250928T000000
-RDATE:19260913T000000
-RDATE:19270926T000000
-RDATE:19280909T000000
-RDATE:19290903T000000
-RDATE:19300915T000000
-RDATE:19331002T000000
-RDATE:19340916T000000
-RDATE:19350930T000000
-RDATE:19360914T000000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19740101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Havana.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Havana.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Havana.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,193 +1,190 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Havana
X-LIC-LOCATION:America/Havana
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
+TZOFFSETFROM:-052928
+TZOFFSETTO:-052936
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19250719T120000
+RDATE:19250719T120000
+TZNAME:CST
+TZOFFSETFROM:-052936
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280610T000000
+RDATE:19280610T000000
+RDATE:19650601T000000
+RDATE:19660529T000000
+RDATE:19670408T000000
+RDATE:19680414T000000
+RDATE:19780507T000000
+RDATE:20070311T000000
+RDATE:20080316T000000
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19400602T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19420607T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19281010T000000
+RDATE:19281010T000000
+RDATE:19650930T000000
+RDATE:19661002T000000
+RDATE:19961006T010000
+RDATE:19971012T010000
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19400901T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=19420906T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400602T000000
+RRULE:FREQ=YEARLY;UNTIL=19420607T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19450603T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19460602T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19400901T000000
+RRULE:FREQ=YEARLY;UNTIL=19420906T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19450902T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=19460901T040000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450603T000000
+RRULE:FREQ=YEARLY;UNTIL=19460602T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:CDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450902T000000
+RRULE:FREQ=YEARLY;UNTIL=19460901T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670910T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2SU;UNTIL=19680908T040000Z
+RRULE:FREQ=YEARLY;UNTIL=19680908T040000Z;BYDAY=2SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T000000
+RRULE:FREQ=YEARLY;UNTIL=19770424T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19690427T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19770424T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19691026T000000
+RRULE:FREQ=YEARLY;UNTIL=19711031T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19691026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19711031T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19721008T000000
+RRULE:FREQ=YEARLY;UNTIL=19741008T040000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19721008T000000
-RRULE:FREQ=YEARLY;UNTIL=19741008T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19771030T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19751026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19771030T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19781008T000000
+RRULE:FREQ=YEARLY;UNTIL=19901014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19781008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19901014T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790318T000000
+RRULE:FREQ=YEARLY;UNTIL=19800316T050000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19790318T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19810510T000000
+RRULE:FREQ=YEARLY;UNTIL=19850505T050000Z;BYDAY=SU;BYMONTHDAY=5,6,7,8,9,10,
+ 11;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19810510T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=5,6,7,8,9,10,11;BYDAY=SU;UNTIL=19850505T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19860316T000000
+RRULE:FREQ=YEARLY;UNTIL=19890319T050000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19860316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19890319T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19900401T000000
+RRULE:FREQ=YEARLY;UNTIL=19970406T050000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19900401T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19970406T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911013T010000
+RRULE:FREQ=YEARLY;UNTIL=19951008T050000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19911013T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19951008T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19980329T000000
+RRULE:FREQ=YEARLY;UNTIL=19990328T050000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19980329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19990328T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19981025T010000
+RRULE:FREQ=YEARLY;UNTIL=20031026T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19981025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20031026T050000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:CDT
DTSTART:20000402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20040404T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;UNTIL=20040404T050000Z;BYDAY=1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:20050403T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T050000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:20061029T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-052928
-TZOFFSETTO:-052936
-TZNAME:HMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-052936
-TZOFFSETTO:-0500
+DTSTART:20061029T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19250719T120000
-RDATE:19250719T120000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20090308T000000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19280610T000000
-RDATE:19280610T000000
-RDATE:19650601T000000
-RDATE:19660529T000000
-RDATE:19670408T000000
-RDATE:19680414T000000
-RDATE:19780507T000000
-RDATE:20070311T000000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19281010T000000
-RDATE:19281010T000000
-RDATE:19650930T000000
-RDATE:19661002T000000
-RDATE:19961006T010000
-RDATE:19971012T010000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Hermosillo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Hermosillo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Hermosillo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,68 +1,69 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Hermosillo
X-LIC-LOCATION:America/Hermosillo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19980405T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19211231T233608
+RDATE:19211231T233608
TZNAME:MST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19981025T080000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-072352
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19211231T233608
-RDATE:19211231T233608
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
RDATE:19420424T000000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19490114T000000
+RDATE:19490114T000000
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19490114T000000
-RDATE:19490114T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19700101T000000
+RDATE:19700101T000000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19980405T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19981025T080000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:MST
-DTSTART:19700101T000000
-RDATE:19700101T000000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19990101T000000
+RDATE:19990101T000000
+TZNAME:MST
TZOFFSETFROM:-0700
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19990101T000000
-RDATE:19990101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Indianapolis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Indianapolis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Indianapolis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,141 +1,142 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Indianapolis
X-LIC-LOCATION:America/Indiana/Indianapolis
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121522
-RDATE:18831118T121522
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19410622T020000
-RDATE:19410622T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19410928T020000
RDATE:19410928T020000
RDATE:19450930T020000
RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19550424T020000
RDATE:19550424T020000
RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:20061029T020000
-RDATE:20061029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Knox.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Knox.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Knox.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,166 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Knox
X-LIC-LOCATION:America/Indiana/Knox
+BEGIN:STANDARD
+DTSTART:18831118T121330
+RDATE:18831118T121330
+TZNAME:CST
+TZOFFSETFROM:-054630
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470101T000000
+RDATE:19470101T000000
TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19561028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19561028T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19591025T020000
+RRULE:FREQ=YEARLY;UNTIL=19611029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19591025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19611029T070000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19620429T020000
+RDATE:19620429T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19901028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901028T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19910407T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19910407T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911027T020000
+RDATE:19911027T020000
+TZNAME:EST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-054630
-TZOFFSETTO:-0600
+DTSTART:20060402T020000
+RDATE:20060402T020000
TZNAME:CST
-DTSTART:18831118T121330
-RDATE:18831118T121330
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19631027T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470101T000000
-RDATE:19470101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19620429T020000
-RDATE:19620429T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19911027T020000
-RDATE:19911027T020000
+TZOFFSETTO:-0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060402T020000
-RDATE:20060402T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Marengo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Marengo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Marengo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,147 +1,148 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Marengo
X-LIC-LOCATION:America/Indiana/Marengo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121437
+RDATE:18831118T121437
+TZNAME:CST
+TZOFFSETFROM:-054523
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19540425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19540926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19731028T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054523
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121437
-RDATE:18831118T121437
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19450930T020000
RDATE:19450930T020000
RDATE:19510930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510101T000000
+RDATE:19510101T000000
+TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19510101T000000
-RDATE:19510101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RDATE:19510429T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540425T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19510429T020000
-RDATE:19510429T020000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19610430T020000
+RDATE:19610430T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19610430T020000
-RDATE:19610430T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19741027T020000
RDATE:19760101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CDT
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19740106T020000
RDATE:19740106T020000
-END:DAYLIGHT
+TZNAME:CDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
DTSTART:19750223T020000
RDATE:19750223T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19751026T020000
RDATE:19751026T020000
RDATE:20061029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Petersburg.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Petersburg.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Petersburg.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,147 +1,148 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Petersburg
X-LIC-LOCATION:America/Indiana/Petersburg
+BEGIN:STANDARD
+DTSTART:18831118T121053
+RDATE:18831118T121053
+TZNAME:CST
+TZOFFSETFROM:-054907
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19550925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19560429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19640426T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19661030T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19550101T000000
+RDATE:19550101T000000
TZNAME:CST
-DTSTART:19611029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T070000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550501T000000
+RDATE:19550501T000000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:20070311T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19550925T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19761031T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19640426T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19770424T080000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19611029T020000
+RRULE:FREQ=YEARLY;UNTIL=19641025T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20080309T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19650425T020000
+RDATE:19650425T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20081102T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054907
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121053
-RDATE:18831118T121053
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19761031T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19661030T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19550101T000000
-RDATE:19550101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19770424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19550501T000000
-RDATE:19550501T000000
-RDATE:19740106T020000
-RDATE:19750223T020000
-RDATE:20070311T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19771030T020000
+RDATE:19771030T020000
+RDATE:20071104T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19650425T020000
-RDATE:19650425T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20060402T020000
+RDATE:20060402T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19771030T020000
-RDATE:19771030T020000
-RDATE:20071104T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060402T020000
-RDATE:20060402T020000
-END:DAYLIGHT
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Tell_City.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Tell_City.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Tell_City.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,147 +1,148 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Tell_City
X-LIC-LOCATION:America/Indiana/Tell_City
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121257
+RDATE:18831118T121257
+TZNAME:CST
+TZOFFSETFROM:-054703
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19530426T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19530927T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19560429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19630428T080000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19631027T070000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19601030T020000
+RDATE:19610924T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-054703
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121257
-RDATE:18831118T121257
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RDATE:19460428T020000
+RDATE:19550501T000000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19530426T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19530927T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19460929T020000
-RDATE:19601030T020000
-RDATE:19610924T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19630428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RDATE:19460428T020000
-RDATE:19550501T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19631027T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19640426T020000
+RDATE:19640426T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19640426T020000
-RDATE:19640426T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CDT
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vevay.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vevay.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vevay.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,109 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vevay
X-LIC-LOCATION:America/Indiana/Vevay
+BEGIN:STANDARD
+DTSTART:18831118T121944
+RDATE:18831118T121944
+TZNAME:CST
+TZOFFSETFROM:-054016
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19720430T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19721029T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054016
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121944
-RDATE:18831118T121944
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19540425T020000
+RDATE:19540425T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19540425T020000
-RDATE:19540425T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19730101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19720430T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19721029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:20061029T020000
-RDATE:20061029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vincennes.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vincennes.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Vincennes.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,149 +1,150 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Vincennes
X-LIC-LOCATION:America/Indiana/Vincennes
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T120953
+RDATE:18831118T120953
+TZNAME:CST
+TZOFFSETFROM:-055007
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CDT
-DTSTART:19530426T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19530927T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19560429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19630428T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19631027T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20080309T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20081102T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055007
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T120953
-RDATE:18831118T120953
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19450930T020000
RDATE:19450930T020000
RDATE:19460929T020000
RDATE:19601030T020000
RDATE:19610924T020000
RDATE:20061029T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19460428T020000
RDATE:19460428T020000
RDATE:19550501T000000
RDATE:20070311T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19530426T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19530927T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19630428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19631027T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19640426T020000
RDATE:19640426T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
RDATE:20071104T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CDT
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Winamac.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Winamac.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indiana/Winamac.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,143 +1,144 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indiana/Winamac
X-LIC-LOCATION:America/Indiana/Winamac
+BEGIN:STANDARD
+DTSTART:18831118T121335
+RDATE:18831118T121335
+TZNAME:CST
+TZOFFSETFROM:-054625
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19561028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19561028T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T070000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19610430T020000
+RDATE:19610430T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20080309T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-054625
-TZOFFSETTO:-0600
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20060402T020000
+RDATE:20060402T020000
TZNAME:CST
-DTSTART:18831118T121335
-RDATE:18831118T121335
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:20061029T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20070311T020000
+RDATE:20070311T020000
+TZNAME:EST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19460101T000000
-RDATE:19460101T000000
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:19610430T020000
-RDATE:19610430T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19690101T000000
-RDATE:19690101T000000
-RDATE:19710101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060402T020000
-RDATE:20060402T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RDATE:20070311T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indianapolis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indianapolis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Indianapolis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,141 +1,142 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Indianapolis
X-LIC-LOCATION:America/Indianapolis
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121522
-RDATE:18831118T121522
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19410622T020000
-RDATE:19410622T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19410928T020000
RDATE:19410928T020000
RDATE:19450930T020000
RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19550424T020000
RDATE:19550424T020000
RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:20061029T020000
-RDATE:20061029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Inuvik.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Inuvik.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Inuvik.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,77 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Inuvik
X-LIC-LOCATION:America/Inuvik
+BEGIN:STANDARD
+DTSTART:19530101T000000
+RDATE:19530101T000000
+TZNAME:PST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:PDDT
+TZOFFSETFROM:-0800
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:PST
TZOFFSETFROM:-0600
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790429T020000
+RDATE:19790429T020000
+TZNAME:MST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800101T000000
+RDATE:19800101T000000
TZNAME:MST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19530101T000000
-RDATE:19530101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:PDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19651031T020000
-RDATE:19651031T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-DTSTART:19790429T020000
-RDATE:19790429T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19800101T000000
-RDATE:19800101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Iqaluit.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Iqaluit.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Iqaluit.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,113 +1,114 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Iqaluit
X-LIC-LOCATION:America/Iqaluit
+BEGIN:STANDARD
+DTSTART:19420801T000000
+RDATE:19420801T000000
+TZNAME:EST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19981025T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:EDDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19990404T070000Z
+TZOFFSETTO:-0300
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:EST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20010401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=19981025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19990404T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19991031T020000
+RDATE:19991031T020000
+TZNAME:CST
TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20001029T020000
+RDATE:20001029T020000
TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
+DTSTART:20010401T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420801T000000
-RDATE:19420801T000000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0300
-TZNAME:EDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0500
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:19651031T020000
-RDATE:19651031T020000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19991031T020000
-RDATE:19991031T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20000402T020000
-RDATE:20000402T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jamaica.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jamaica.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jamaica.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Jamaica
X-LIC-LOCATION:America/Jamaica
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19831030T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KMT
TZOFFSETFROM:-050712
TZOFFSETTO:-050712
-TZNAME:KMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120201T000000
+RDATE:19120201T000000
+TZNAME:EST
TZOFFSETFROM:-050712
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740428T020000
+RDATE:19740428T020000
TZNAME:EST
-DTSTART:19120201T000000
-RDATE:19120201T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=19831030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750223T020000
+RDATE:19750223T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19740428T020000
-RDATE:19740428T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840101T000000
+RDATE:19840101T000000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19840101T000000
-RDATE:19840101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jujuy.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jujuy.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Jujuy.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,173 +1,174 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Jujuy
X-LIC-LOCATION:America/Jujuy
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-042112
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
+BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-042112
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19691005T000000
-RDATE:19691005T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19891015T000000
RDATE:19921018T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:19890305T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19900304T000000
+RDATE:19900304T000000
+TZNAME:WART
TZOFFSETFROM:-0200
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19900304T000000
-RDATE:19900304T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19901028T000000
+RDATE:19901028T000000
+TZNAME:WARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
-DTSTART:19901028T000000
-RDATE:19901028T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910317T000000
+RDATE:19910317T000000
+TZNAME:WART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910317T000000
-RDATE:19910317T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911006T000000
+RDATE:19911006T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
TZNAME:ARST
-DTSTART:19911006T000000
-RDATE:19911006T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0200
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
TZNAME:ARST
-DTSTART:19920101T000000
-RDATE:19920101T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19991003T000000
-RDATE:19991003T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:20081018T000000
+RDATE:20081018T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
-RDATE:20081018T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Juneau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Juneau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Juneau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,130 +1,124 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Juneau
X-LIC-LOCATION:America/Juneau
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T100000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
+DTSTART:19000820T120000
+RDATE:19000820T120000
TZNAME:PST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T090000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T110000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T100000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T110000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+150219
-TZOFFSETTO:-085741
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-085741
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19000820T120000
-RDATE:19000820T120000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-TZNAME:PST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19690101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PWT
DTSTART:19420209T020000
RDATE:19420209T020000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:PPT
DTSTART:19450814T160000
RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
DTSTART:19450930T020000
RDATE:19450930T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0900
-TZNAME:YST
DTSTART:19831030T020000
RDATE:19831030T020000
+TZNAME:YST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AKST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Louisville.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Louisville.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Louisville.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,172 +1,185 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Kentucky/Louisville
X-LIC-LOCATION:America/Kentucky/Louisville
+BEGIN:STANDARD
+DTSTART:18831118T121658
+RDATE:18831118T121658
+TZNAME:CST
+TZOFFSETFROM:-054302
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210101T000000
+RDATE:19210101T000000
+RDATE:19420101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210501T020000
+RDATE:19210501T020000
+RDATE:19410427T020000
+RDATE:19470427T020000
TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19210901T020000
+RDATE:19210901T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460602T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RDATE:19460428T020000
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19480425T020000
+RRULE:FREQ=YEARLY;UNTIL=19500430T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19480425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19500430T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19550925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19500924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19550925T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19561028T020000
+RRULE:FREQ=YEARLY;UNTIL=19601030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19561028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19601030T070000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19610723T020000
+RDATE:19610723T020000
+RDATE:19680101T000000
+RDATE:19741027T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19680428T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19680428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19681027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19731028T060000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19740106T020000
+RDATE:19740106T020000
+TZNAME:CDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19750223T020000
+RDATE:19750223T020000
TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054302
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121658
-RDATE:18831118T121658
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210101T000000
-RDATE:19210101T000000
-RDATE:19420101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19210501T020000
-RDATE:19210501T020000
-RDATE:19410427T020000
-RDATE:19460101T000000
-RDATE:19470427T020000
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210901T020000
-RDATE:19210901T020000
-RDATE:19410928T020000
-RDATE:19450930T020000
-RDATE:19460602T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RDATE:19460428T020000
-RDATE:19740106T020000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19610723T020000
-RDATE:19610723T020000
-RDATE:19680101T000000
-RDATE:19741027T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19750223T020000
-RDATE:19750223T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Monticello.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Monticello.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Kentucky/Monticello.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,129 +1,130 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Kentucky/Monticello
X-LIC-LOCATION:America/Kentucky/Monticello
+BEGIN:STANDARD
+DTSTART:18831118T122036
+RDATE:18831118T122036
+TZNAME:CST
+TZOFFSETFROM:-053924
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19680428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19680101T000000
TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19680428T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19681027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991031T070000Z
+RRULE:FREQ=YEARLY;UNTIL=19991031T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20010401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:20001029T020000
+RDATE:20001029T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-053924
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T122036
-RDATE:18831118T122036
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19680101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Knox_IN.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Knox_IN.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Knox_IN.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,166 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Knox_IN
X-LIC-LOCATION:America/Knox_IN
+BEGIN:STANDARD
+DTSTART:18831118T121330
+RDATE:18831118T121330
+TZNAME:CST
+TZOFFSETFROM:-054630
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470101T000000
+RDATE:19470101T000000
TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19561028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19561028T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19591025T020000
+RRULE:FREQ=YEARLY;UNTIL=19611029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19591025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19611029T070000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19620429T020000
+RDATE:19620429T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19901028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901028T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19910407T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19910407T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911027T020000
+RDATE:19911027T020000
+TZNAME:EST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-054630
-TZOFFSETTO:-0600
+DTSTART:20060402T020000
+RDATE:20060402T020000
TZNAME:CST
-DTSTART:18831118T121330
-RDATE:18831118T121330
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19631027T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470101T000000
-RDATE:19470101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19620429T020000
-RDATE:19620429T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19911027T020000
-RDATE:19911027T020000
+TZOFFSETTO:-0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060402T020000
-RDATE:20060402T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/La_Paz.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/La_Paz.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/La_Paz.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/La_Paz
X-LIC-LOCATION:America/La_Paz
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
TZOFFSETFROM:-043236
TZOFFSETTO:-043236
-TZNAME:CMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19311015T000000
+RDATE:19311015T000000
+TZNAME:BOST
TZOFFSETFROM:-043236
TZOFFSETTO:-033236
-TZNAME:BOST
-DTSTART:19311015T000000
-RDATE:19311015T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19320321T000000
+RDATE:19320321T000000
+TZNAME:BOT
TZOFFSETFROM:-033236
TZOFFSETTO:-0400
-TZNAME:BOT
-DTSTART:19320321T000000
-RDATE:19320321T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Lima.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Lima.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Lima.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,68 +1,63 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Lima
X-LIC-LOCATION:America/Lima
+BEGIN:STANDARD
+DTSTART:19080728T000000
+RDATE:19080728T000000
+TZNAME:PEST
+TZOFFSETFROM:-050836
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19380101T000000
+RDATE:19380101T000000
+RDATE:19900101T000000
+RDATE:19940101T000000
+TZNAME:PEST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:PEST
-DTSTART:19380925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19390924T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19380401T000000
+RDATE:19380401T000000
+RDATE:19900401T000000
+RDATE:19940401T000000
+TZNAME:PET
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:PET
-DTSTART:19390326T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SU;UNTIL=19400324T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19380925T000000
+RRULE:FREQ=YEARLY;UNTIL=19390924T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PEST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:PEST
-DTSTART:19860101T000000
-RRULE:FREQ=YEARLY;UNTIL=19870101T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19390326T000000
+RRULE:FREQ=YEARLY;UNTIL=19400324T040000Z;BYDAY=SU;BYMONTHDAY=24,25,26,27,2
+ 8,29,30;BYMONTH=3
+TZNAME:PET
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:PET
-DTSTART:19860401T000000
-RRULE:FREQ=YEARLY;UNTIL=19870401T040000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-050812
-TZOFFSETTO:-050836
-TZNAME:LMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-050836
-TZOFFSETTO:-0500
-TZNAME:PET
-DTSTART:19080728T000000
-RDATE:19080728T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860101T000000
+RRULE:FREQ=YEARLY;UNTIL=19870101T050000Z;BYMONTH=1
+TZNAME:PEST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:PEST
-DTSTART:19380101T000000
-RDATE:19380101T000000
-RDATE:19900101T000000
-RDATE:19940101T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860401T000000
+RRULE:FREQ=YEARLY;UNTIL=19870401T040000Z;BYMONTH=4
+TZNAME:PET
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:PET
-DTSTART:19380401T000000
-RDATE:19380401T000000
-RDATE:19900401T000000
-RDATE:19940401T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Los_Angeles.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Los_Angeles.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Los_Angeles.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,117 +1,132 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
+BEGIN:STANDARD
+DTSTART:18831118T120702
+RDATE:18831118T120702
+TZNAME:PST
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19500430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T100000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19500924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T090000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19480314T020000
+RDATE:19480314T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-075258
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18831118T120702
-RDATE:18831118T120702
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19490101T020000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
+TZOFFSETTO:-0700
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:PDT
-DTSTART:19480314T020000
-RDATE:19480314T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Louisville.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Louisville.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Louisville.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,172 +1,185 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Louisville
X-LIC-LOCATION:America/Louisville
+BEGIN:STANDARD
+DTSTART:18831118T121658
+RDATE:18831118T121658
+TZNAME:CST
+TZOFFSETFROM:-054302
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210101T000000
+RDATE:19210101T000000
+RDATE:19420101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210501T020000
+RDATE:19210501T020000
+RDATE:19410427T020000
+RDATE:19470427T020000
TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19210901T020000
+RDATE:19210901T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460602T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RDATE:19460428T020000
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19480425T020000
+RRULE:FREQ=YEARLY;UNTIL=19500430T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19480425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19500430T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19550925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19500924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19550925T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19561028T020000
+RRULE:FREQ=YEARLY;UNTIL=19601030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19561028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19601030T070000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19610723T020000
+RDATE:19610723T020000
+RDATE:19680101T000000
+RDATE:19741027T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19680428T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19680428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19681027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19731028T060000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19740106T020000
+RDATE:19740106T020000
+TZNAME:CDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19750223T020000
+RDATE:19750223T020000
TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054302
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121658
-RDATE:18831118T121658
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210101T000000
-RDATE:19210101T000000
-RDATE:19420101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19210501T020000
-RDATE:19210501T020000
-RDATE:19410427T020000
-RDATE:19460101T000000
-RDATE:19470427T020000
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210901T020000
-RDATE:19210901T020000
-RDATE:19410928T020000
-RDATE:19450930T020000
-RDATE:19460602T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RDATE:19460428T020000
-RDATE:19740106T020000
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19610723T020000
-RDATE:19610723T020000
-RDATE:19680101T000000
-RDATE:19741027T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19750223T020000
-RDATE:19750223T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Maceio.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Maceio.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Maceio.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Maceio
X-LIC-LOCATION:America/Maceio
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-022252
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -71,15 +20,33 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19951015T000000
RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -94,18 +61,48 @@
RDATE:20000227T000000
RDATE:20001022T000000
RDATE:20020217T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
-RDATE:19951013T000000
RDATE:19960904T000000
+RDATE:20021001T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19951013T000000
+RDATE:19951013T000000
RDATE:19990930T000000
RDATE:20010913T000000
-RDATE:20021001T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Managua.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Managua.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Managua.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,67 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Managua
X-LIC-LOCATION:America/Managua
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19790318T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T060000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19790625T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=MO;UNTIL=19800623T050000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:MMT
TZOFFSETFROM:-054508
TZOFFSETTO:-054512
-TZNAME:MMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340623T000000
+RDATE:19340623T000000
+TZNAME:CST
TZOFFSETFROM:-054512
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19340623T000000
-RDATE:19340623T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19730501T000000
RDATE:19730501T000000
RDATE:19920101T040000
RDATE:19930101T000000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19750216T000000
RDATE:19750216T000000
RDATE:19920924T000000
RDATE:19970101T000000
RDATE:20051002T000000
RDATE:20061001T010000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790318T000000
+RRULE:FREQ=YEARLY;UNTIL=19800316T060000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790625T000000
+RRULE:FREQ=YEARLY;UNTIL=19800623T050000Z;BYDAY=MO;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=6
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20050410T000000
RDATE:20050410T000000
RDATE:20060430T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Manaus.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Manaus.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Manaus.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,75 +1,47 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Manaus
X-LIC-LOCATION:America/Manaus
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-040004
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-040004
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19931017T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -79,15 +51,45 @@
RDATE:19870214T000000
RDATE:19880207T000000
RDATE:19940220T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
-RDATE:19930928T000000
RDATE:19940922T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930928T000000
+RDATE:19930928T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Marigot.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Marigot.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Marigot.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Marigot
X-LIC-LOCATION:America/Marigot
BEGIN:STANDARD
+DTSTART:19110608T000000
+RDATE:19110608T000000
+TZNAME:AST
TZOFFSETFROM:-040608
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110608T000000
-RDATE:19110608T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Martinique.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Martinique.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Martinique.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Martinique
X-LIC-LOCATION:America/Martinique
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:FFMT
TZOFFSETFROM:-040420
TZOFFSETTO:-040420
-TZNAME:FFMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110501T000000
+RDATE:19110501T000000
+TZNAME:AST
TZOFFSETFROM:-040420
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110501T000000
-RDATE:19110501T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19800406T000000
+RDATE:19800406T000000
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19800406T000000
-RDATE:19800406T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19800928T000000
+RDATE:19800928T000000
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19800928T000000
-RDATE:19800928T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Matamoros.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/America/Matamoros.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Matamoros.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Matamoros.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,83 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Matamoros
+X-LIC-LOCATION:America/Matamoros
+BEGIN:STANDARD
+DTSTART:19211231T232000
+RDATE:19211231T232000
+TZNAME:CST
+TZOFFSETFROM:-0640
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+RDATE:20100101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:20010506T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:20010930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mazatlan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mazatlan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mazatlan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,83 +1,84 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Mazatlan
X-LIC-LOCATION:America/Mazatlan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19211231T235420
+RDATE:19211231T235420
TZNAME:MST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T080000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-070540
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19211231T235420
-RDATE:19211231T235420
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
RDATE:19420424T000000
RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19490114T000000
+RDATE:19490114T000000
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19490114T000000
-RDATE:19490114T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19700101T000000
+RDATE:19700101T000000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19700101T000000
-RDATE:19700101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20010506T020000
RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mendoza.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mendoza.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mendoza.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,167 +1,164 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Mendoza
X-LIC-LOCATION:America/Mendoza
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-043516
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:WARST
-DTSTART:19901015T000000
-RRULE:FREQ=YEARLY;UNTIL=19911015T040000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910301T000000
-RRULE:FREQ=YEARLY;UNTIL=19920301T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-043516
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
RDATE:20040926T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19891015T000000
RDATE:20071230T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
RDATE:19890305T000000
RDATE:19930307T000000
RDATE:20080316T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
DTSTART:19900304T000000
RDATE:19900304T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:19911015T000000
+TZNAME:WARST
TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
-TZNAME:ARST
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:19920301T000000
+RDATE:20040523T000000
+TZNAME:WART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19921018T000000
RDATE:19921018T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:ART
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20000303T000000
RDATE:20000303T000000
RDATE:20081018T000000
-END:STANDARD
-BEGIN:STANDARD
+TZNAME:ART
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:20040523T000000
-RDATE:20040523T000000
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Menominee.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Menominee.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Menominee.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,118 +1,119 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Menominee
X-LIC-LOCATION:America/Menominee
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:18850918T120000
+RDATE:18850918T120000
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
+TZOFFSETFROM:-055027
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19731028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055027
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18850918T120000
-RDATE:18850918T120000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19450930T020000
RDATE:19450930T020000
RDATE:19460929T020000
RDATE:19661030T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19460428T020000
RDATE:19460428T020000
RDATE:19660424T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19690427T020000
+RDATE:19690427T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19690427T020000
-RDATE:19690427T020000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730429T020000
+RDATE:19730429T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19731028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19730429T020000
-RDATE:19730429T020000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Merida.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Merida.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Merida.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,65 +1,66 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Merida
X-LIC-LOCATION:America/Merida
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220101T000132
+RDATE:19220101T000132
+TZNAME:CST
+TZOFFSETFROM:-055828
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19811223T000000
+RDATE:19811223T000000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19821202T000000
+RDATE:19821202T000000
+RDATE:20010930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055828
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19220101T000132
-RDATE:19220101T000132
-END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19811223T000000
-RDATE:19811223T000000
-END:STANDARD
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19821202T000000
-RDATE:19821202T000000
-RDATE:20010930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20010506T020000
-RDATE:20010506T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mexico_City.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mexico_City.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Mexico_City.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,95 +1,96 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Mexico_City
X-LIC-LOCATION:America/Mexico_City
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19220101T002324
+RDATE:19220101T002324
+TZNAME:MST
TZOFFSETFROM:-063636
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19220101T002324
-RDATE:19220101T002324
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19390205T000000
RDATE:19390205T000000
RDATE:19401209T000000
RDATE:19500212T000000
RDATE:20010506T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19390625T000000
RDATE:19390625T000000
RDATE:19410401T000000
RDATE:19440501T000000
RDATE:19500730T000000
RDATE:20010930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19431216T000000
-RDATE:19431216T000000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20020220T000000
RDATE:20020220T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Miquelon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Miquelon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Miquelon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Miquelon
X-LIC-LOCATION:America/Miquelon
+BEGIN:STANDARD
+DTSTART:19110515T000000
+RDATE:19110515T000000
+TZNAME:AST
+TZOFFSETFROM:-034440
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800501T000000
+RDATE:19800501T000000
+TZNAME:PMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870101T000000
+RDATE:19870101T000000
+TZNAME:PMST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T050000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PMDT
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:PMDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PMST
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:PMST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PMDT
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:PMDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:PMST
DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-034440
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110515T000000
-RDATE:19110515T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:PMST
-DTSTART:19800501T000000
-RDATE:19800501T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:PMST
-DTSTART:19870101T000000
-RDATE:19870101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Moncton.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Moncton.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Moncton.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,171 +1,173 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Moncton
X-LIC-LOCATION:America/Moncton
+BEGIN:STANDARD
+DTSTART:18831209T000000
+RDATE:18831209T000000
+TZNAME:EST
+TZOFFSETFROM:-041908
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19390527T010000
+RDATE:19400519T010000
+RDATE:19410504T010000
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19330611T010000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=2SU;UNTIL=19350609T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19730101T000000
+RDATE:19930101T000000
+RDATE:20070101T000000
TZNAME:AST
-DTSTART:19330910T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2SU;UNTIL=19350908T040000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19330611T010000
+RRULE:FREQ=YEARLY;UNTIL=19350609T050000Z;BYDAY=2SU;BYMONTH=6
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19360607T010000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19380605T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19330910T010000
+RRULE:FREQ=YEARLY;UNTIL=19350908T040000Z;BYDAY=2SU;BYMONTH=9
TZNAME:AST
-DTSTART:19360906T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=19380904T040000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19390923T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SA;UNTIL=19410927T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19360607T010000
+RRULE:FREQ=YEARLY;UNTIL=19380605T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19720430T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19360906T010000
+RRULE:FREQ=YEARLY;UNTIL=19380904T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19560930T050000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19390923T010000
+RRULE:FREQ=YEARLY;UNTIL=19410927T040000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19571027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19721029T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19740428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T050000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19920405T060000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19720430T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19930404T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T040100Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19560930T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19571027T020000
+RRULE:FREQ=YEARLY;UNTIL=19721029T050000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AST
-DTSTART:19931031T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T030100Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=19921025T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041908
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18831209T000000
-RDATE:18831209T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19020615T000000
-RDATE:19020615T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19920405T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930404T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T040100Z;BYDAY=1SU;BYMONTH=4
TZNAME:ADT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19390527T010000
-RDATE:19400519T010000
-RDATE:19410504T010000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19931031T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T030100Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19330101T000000
-RDATE:19330101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19730101T000000
-RDATE:19930101T000000
-RDATE:20070101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
-END:DAYLIGHT
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Monterrey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Monterrey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Monterrey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,66 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Monterrey
X-LIC-LOCATION:America/Monterrey
BEGIN:STANDARD
+DTSTART:19211231T231844
+RDATE:19211231T231844
+TZNAME:CST
+TZOFFSETFROM:-064116
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+TZNAME:CST
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19880101T000000
-RRULE:FREQ=YEARLY;UNTIL=19890101T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:20010506T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:20010930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-064116
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19211231T231844
-RDATE:19211231T231844
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19880403T020000
-RDATE:19880403T020000
-RDATE:20010506T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19881030T020000
-RDATE:19881030T020000
-RDATE:20010930T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montevideo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montevideo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montevideo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,149 +1,91 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Montevideo
X-LIC-LOCATION:America/Montevideo
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:18980628T000000
+RDATE:18980628T000000
+TZNAME:MMT
+TZOFFSETFROM:-034444
+TZOFFSETTO:-034444
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:UYST
+TZOFFSETFROM:-034444
TZOFFSETTO:-0330
-TZNAME:UYT
-DTSTART:19240401T000000
-RRULE:FREQ=YEARLY;UNTIL=19260401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0300
+DTSTART:19231002T000000
+RDATE:19231002T000000
+RDATE:19361101T000000
+RDATE:19410801T000000
TZNAME:UYHST
-DTSTART:19241001T000000
-RRULE:FREQ=YEARLY;UNTIL=19251001T033000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0330
TZOFFSETTO:-0300
-TZNAME:UYHST
-DTSTART:19331029T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19351027T033000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0330
+DTSTART:19240401T000000
+RRULE:FREQ=YEARLY;UNTIL=19260401T030000Z;BYMONTH=4
TZNAME:UYT
-DTSTART:19340401T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=SU;UNTIL=19360329T030000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=SU;UNTIL=19360329T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0330
-TZNAME:UYT
-DTSTART:19370328T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19410330T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19251001T033000Z;BYMONTH=10
+TZNAME:UYHST
TZOFFSETFROM:-0330
TZOFFSETTO:-0300
-TZNAME:UYHST
-DTSTART:19371031T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19401027T033000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:UYST
-DTSTART:19650404T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19670402T030000Z
+DTSTART:19331029T000000
+RRULE:FREQ=YEARLY;UNTIL=19351027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19340401T000000
+RRULE:FREQ=YEARLY;UNTIL=19360329T030000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
TZNAME:UYT
-DTSTART:19661031T000000
-RRULE:FREQ=YEARLY;UNTIL=19671031T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0230
-TZNAME:UYHST
-DTSTART:19680527T000000
-RRULE:FREQ=YEARLY;UNTIL=19700527T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0300
-TZNAME:UYT
-DTSTART:19681202T000000
-RRULE:FREQ=YEARLY;UNTIL=19701202T023000Z
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19370328T000000
+RRULE:FREQ=YEARLY;UNTIL=19410330T030000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:UYT
-DTSTART:19900304T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19920301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:UYST
-DTSTART:19901021T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19911027T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:UYST
-DTSTART:20061001T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:UYT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-034444
-TZOFFSETTO:-034444
-TZNAME:MMT
-DTSTART:18980628T000000
-RDATE:18980628T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-034444
TZOFFSETTO:-0330
-TZNAME:UYT
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19371031T000000
+RRULE:FREQ=YEARLY;UNTIL=19401027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
TZOFFSETFROM:-0330
TZOFFSETTO:-0300
-TZNAME:UYHST
-DTSTART:19231002T000000
-RDATE:19231002T000000
-RDATE:19361101T000000
-RDATE:19410801T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:UYT
TZOFFSETFROM:-0300
TZOFFSETTO:-0330
-TZNAME:UYT
-DTSTART:19420101T000000
-RDATE:19420101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19421214T000000
+RDATE:19421214T000000
+TZNAME:UYST
TZOFFSETFROM:-0330
TZOFFSETTO:-0200
-TZNAME:UYST
-DTSTART:19421214T000000
-RDATE:19421214T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:UYT
DTSTART:19430314T000000
RDATE:19430314T000000
RDATE:19591115T000000
@@ -158,11 +100,11 @@
RDATE:19930228T000000
RDATE:20050327T020000
RDATE:20060312T020000
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:UYST
DTSTART:19590524T000000
RDATE:19590524T000000
RDATE:19600117T000000
@@ -175,20 +117,80 @@
RDATE:19921018T000000
RDATE:20040919T000000
RDATE:20051009T020000
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650404T000000
+RRULE:FREQ=YEARLY;UNTIL=19670402T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:UYST
TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19661031T000000
+RRULE:FREQ=YEARLY;UNTIL=19671031T020000Z;BYMONTH=10
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19680527T000000
+RRULE:FREQ=YEARLY;UNTIL=19700527T030000Z;BYMONTH=5
+TZNAME:UYHST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0230
-TZNAME:UYHST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681202T000000
+RRULE:FREQ=YEARLY;UNTIL=19701202T023000Z;BYMONTH=12
+TZNAME:UYT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740310T000000
RDATE:19740310T000000
+TZNAME:UYHST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19741222T000000
+RDATE:19741222T000000
+TZNAME:UYST
TZOFFSETFROM:-0230
TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T000000
+RRULE:FREQ=YEARLY;UNTIL=19920301T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19901021T000000
+RRULE:FREQ=YEARLY;UNTIL=19911027T030000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
TZNAME:UYST
-DTSTART:19741222T000000
-RDATE:19741222T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20061001T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montreal.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montreal.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montreal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,175 +1,185 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Montreal
X-LIC-LOCATION:America/Montreal
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:EST
+TZOFFSETFROM:-045416
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19180414T020000
+RDATE:19190331T023000
+RDATE:19200502T023000
+RDATE:19210501T020000
+RDATE:19220430T020000
+RDATE:19240517T020000
+RDATE:19270501T000000
+RDATE:19320501T000000
+TZNAME:EDT
TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170424T000000
+RDATE:19170424T000000
+RDATE:19181031T020000
+RDATE:19191025T023000
+RDATE:19331001T000000
+RDATE:19450930T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
TZNAME:EST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T050000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
+DTSTART:19201003T023000
+RRULE:FREQ=YEARLY;UNTIL=19221001T063000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19201003T023000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19221001T063000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19240928T023000
+RRULE:FREQ=YEARLY;UNTIL=19260926T063000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19240928T023000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19260926T063000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250503T020000
+RRULE:FREQ=YEARLY;UNTIL=19260502T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19250503T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19260502T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19270925T000000
+RRULE:FREQ=YEARLY;UNTIL=19320925T040000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19270925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19320925T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280429T000000
+RRULE:FREQ=YEARLY;UNTIL=19310426T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19280429T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19310426T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19330430T000000
+RRULE:FREQ=YEARLY;UNTIL=19400428T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19330430T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19400428T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19340930T000000
+RRULE:FREQ=YEARLY;UNTIL=19390924T040000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19340930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19390924T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:EWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19480926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19480926T060000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19491030T020000
+RRULE:FREQ=YEARLY;UNTIL=19501029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19491030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19501029T060000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19560930T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19560930T060000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19571027T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19571027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-045416
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:EDT
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19180414T020000
-RDATE:19190331T023000
-RDATE:19200502T023000
-RDATE:19210501T020000
-RDATE:19220430T020000
-RDATE:19240517T020000
-RDATE:19270501T000000
-RDATE:19320501T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:19170424T000000
-RDATE:19170424T000000
-RDATE:19181031T020000
-RDATE:19191025T023000
-RDATE:19331001T000000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19740101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montserrat.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montserrat.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Montserrat.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Montserrat
X-LIC-LOCATION:America/Montserrat
BEGIN:STANDARD
+DTSTART:19110701T000100
+RDATE:19110701T000100
+TZNAME:AST
TZOFFSETFROM:-040852
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000100
-RDATE:19110701T000100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nassau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nassau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nassau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Nassau
X-LIC-LOCATION:America/Nassau
+BEGIN:STANDARD
+DTSTART:19120302T000000
+RDATE:19120302T000000
+TZNAME:EST
+TZOFFSETFROM:-050924
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640426T020000
+RRULE:FREQ=YEARLY;UNTIL=19750427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19640426T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19641025T020000
+RRULE:FREQ=YEARLY;UNTIL=19751026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19760101T000000
+RDATE:19760101T000000
TZNAME:EST
-DTSTART:19641025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-050924
-TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:19120302T000000
-RDATE:19120302T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19760101T000000
-RDATE:19760101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/New_York.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/New_York.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/New_York.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,131 +1,148 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:EST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19210424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19410427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19410928T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T060000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-045602
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18831118T120358
-RDATE:18831118T120358
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nipigon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nipigon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nipigon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,80 +1,87 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Nipigon
X-LIC-LOCATION:America/Nipigon
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:-055304
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19740428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400929T000000
+RDATE:19400929T000000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:EWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-055304
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:EDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19400929T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nome.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nome.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Nome.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,131 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Nome
X-LIC-LOCATION:America/Nome
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T130000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:BST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T120000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T130000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T110000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T100000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T110000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+125821
-TZOFFSETTO:-110138
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-110138
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19000820T120000
RDATE:19000820T120000
+TZNAME:NST
+TZOFFSETFROM:-110138
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:NWT
DTSTART:19420209T020000
RDATE:19420209T020000
+TZNAME:NWT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:NPT
DTSTART:19450814T130000
RDATE:19450814T130000
+TZNAME:NPT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19450930T020000
RDATE:19450930T020000
+TZNAME:NST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:BST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:BDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T120000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:BST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:BDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:YST
DTSTART:19831030T020000
RDATE:19831030T020000
+TZNAME:YST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AKST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Noronha.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Noronha.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Noronha.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Noronha
X-LIC-LOCATION:America/Noronha
BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:FNST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-020940
TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -71,14 +20,32 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T010000Z;BYMONTH=4
+TZNAME:FNT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:FNT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T020000Z;BYMONTH=12
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -92,16 +59,46 @@
RDATE:20000227T000000
RDATE:20001015T000000
RDATE:20020217T000000
+TZNAME:FNT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T010000Z;BYMONTH=4
+TZNAME:FNT
+TZOFFSETFROM:-0100
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T010000Z;BYMONTH=3
TZNAME:FNT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T020000Z;BYMONTH=11
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
+RDATE:20021001T000000
+TZNAME:FNT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990930T000000
RDATE:19990930T000000
RDATE:20010913T000000
-RDATE:20021001T000000
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Beulah.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/America/North_Dakota/Beulah.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Beulah.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Beulah.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/Beulah
+X-LIC-LOCATION:America/North_Dakota/Beulah
+BEGIN:STANDARD
+DTSTART:18831118T121253
+RDATE:18831118T121253
+TZNAME:MST
+TZOFFSETFROM:-064707
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;UNTIL=20100314T090000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;UNTIL=20091101T080000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20101107T020000
+RDATE:20101107T020000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20110313T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Center.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Center.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/Center.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/North_Dakota/Center
X-LIC-LOCATION:America/North_Dakota/Center
+BEGIN:STANDARD
+DTSTART:18831118T121448
+RDATE:18831118T121448
+TZNAME:MST
+TZOFFSETFROM:-064512
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911027T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19911027T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19920405T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19930404T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19920405T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19921025T020000
+RDATE:19921025T020000
+TZNAME:CST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19931031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930404T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19931031T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-064512
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:18831118T121448
-RDATE:18831118T121448
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19921025T020000
-RDATE:19921025T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/New_Salem.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/New_Salem.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/North_Dakota/New_Salem.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/North_Dakota/New_Salem
X-LIC-LOCATION:America/North_Dakota/New_Salem
+BEGIN:STANDARD
+DTSTART:18831118T121421
+RDATE:18831118T121421
+TZNAME:MST
+TZOFFSETFROM:-064539
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20021027T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20021027T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20030406T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20040404T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20030406T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:20031026T020000
+RDATE:20031026T020000
+TZNAME:CST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20041031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20040404T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20041031T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-064539
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:18831118T121421
-RDATE:18831118T121421
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20031026T020000
-RDATE:20031026T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ojinaga.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/America/Ojinaga.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ojinaga.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Ojinaga.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,119 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Ojinaga
+X-LIC-LOCATION:America/Ojinaga
+BEGIN:STANDARD
+DTSTART:19220101T000220
+RDATE:19220101T000220
+TZNAME:MST
+TZOFFSETFROM:-065740
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19970406T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980405T030000
+RDATE:19980405T030000
+TZNAME:MDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100101T000000
+RDATE:20100101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Panama.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Panama.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Panama.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Panama
X-LIC-LOCATION:America/Panama
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
TZOFFSETFROM:-051808
TZOFFSETTO:-051936
-TZNAME:CMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19080422T000000
+RDATE:19080422T000000
+TZNAME:EST
TZOFFSETFROM:-051936
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19080422T000000
-RDATE:19080422T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Pangnirtung.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Pangnirtung.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Pangnirtung.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,141 +1,142 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Pangnirtung
X-LIC-LOCATION:America/Pangnirtung
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19210101T000000
+RDATE:19210101T000000
+TZNAME:AST
+TZOFFSETFROM:+0000
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19941030T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19940403T060000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19951029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19981025T060000Z
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19990404T070000Z
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20010401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:ADDT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:AST
+TZOFFSETFROM:-0200
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19210101T000000
-RDATE:19210101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=19941030T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19940403T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
-TZNAME:ADDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19950402T020000
+RDATE:19950402T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19651031T020000
-RDATE:19651031T020000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19951029T020000
+RRULE:FREQ=YEARLY;UNTIL=19981025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19990404T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19950402T020000
-RDATE:19950402T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19991031T020000
+RDATE:19991031T020000
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19991031T020000
-RDATE:19991031T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20000402T020000
-RDATE:20000402T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20001029T020000
+RDATE:20001029T020000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Paramaribo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Paramaribo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Paramaribo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Paramaribo
X-LIC-LOCATION:America/Paramaribo
BEGIN:STANDARD
+DTSTART:19110101T000000
+RDATE:19110101T000000
+TZNAME:PMT
TZOFFSETFROM:-034040
TZOFFSETTO:-034052
-TZNAME:PMT
-DTSTART:19110101T000000
-RDATE:19110101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19350101T000000
+RDATE:19350101T000000
+TZNAME:PMT
TZOFFSETFROM:-034052
TZOFFSETTO:-034036
-TZNAME:PMT
-DTSTART:19350101T000000
-RDATE:19350101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19451001T000000
+RDATE:19451001T000000
+TZNAME:NEGT
TZOFFSETFROM:-034036
TZOFFSETTO:-0330
-TZNAME:NEGT
-DTSTART:19451001T000000
-RDATE:19451001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19751120T000000
+RDATE:19751120T000000
+TZNAME:SRT
TZOFFSETFROM:-0330
TZOFFSETTO:-0330
-TZNAME:SRT
-DTSTART:19751120T000000
-RDATE:19751120T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19841001T000000
+RDATE:19841001T000000
+TZNAME:SRT
TZOFFSETFROM:-0330
TZOFFSETTO:-0300
-TZNAME:SRT
-DTSTART:19841001T000000
-RDATE:19841001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Phoenix.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Phoenix.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Phoenix.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,61 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Phoenix
X-LIC-LOCATION:America/Phoenix
+BEGIN:STANDARD
+DTSTART:18831118T113142
+RDATE:18831118T113142
+TZNAME:MST
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T080000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-072818
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:18831118T113142
-RDATE:18831118T113142
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-RDATE:19440401T000100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19440101T000100
RDATE:19440101T000100
RDATE:19441001T000100
RDATE:19671029T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19440401T000100
+RDATE:19440401T000100
+TZNAME:MST
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670101T000000
RDATE:19670101T000000
RDATE:19680321T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19670430T020000
-RDATE:19670430T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port-au-Prince.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port-au-Prince.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port-au-Prince.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Port-au-Prince
X-LIC-LOCATION:America/Port-au-Prince
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:PPMT
+TZOFFSETFROM:-044920
+TZOFFSETTO:-0449
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170124T120000
+RDATE:19170124T120000
+TZNAME:EST
+TZOFFSETFROM:-0449
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19831030T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T040000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19830508T000000
+RDATE:19830508T000000
TZNAME:EDT
-DTSTART:19840429T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19870426T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19880403T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19970406T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831030T000000
+RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19971026T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840429T000000
+RRULE:FREQ=YEARLY;UNTIL=19870426T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19880403T010000
+RRULE:FREQ=YEARLY;UNTIL=19970406T060000Z;BYDAY=1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:20050403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T050000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20051030T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T040000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-044920
-TZOFFSETTO:-0449
-TZNAME:PPMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0449
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19170124T120000
-RDATE:19170124T120000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20050403T000000
+RRULE:FREQ=YEARLY;UNTIL=20060402T050000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19830508T000000
-RDATE:19830508T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20051030T000000
+RRULE:FREQ=YEARLY;UNTIL=20061029T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port_of_Spain.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port_of_Spain.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Port_of_Spain.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Port_of_Spain
X-LIC-LOCATION:America/Port_of_Spain
BEGIN:STANDARD
+DTSTART:19120302T000000
+RDATE:19120302T000000
+TZNAME:AST
TZOFFSETFROM:-040604
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19120302T000000
-RDATE:19120302T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Acre.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Acre.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Acre.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Porto_Acre
X-LIC-LOCATION:America/Porto_Acre
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:ACST
+TZOFFSETFROM:-043112
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:ACST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z;BYMONTH=4
TZNAME:ACT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z;BYMONTH=12
TZNAME:ACST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-043112
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:ACT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,20 +49,44 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z;BYMONTH=4
+TZNAME:ACT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z;BYMONTH=3
TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z;BYMONTH=11
+TZNAME:ACST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:ACT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:20080624T000000
RDATE:20080624T000000
+TZNAME:AMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Velho.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Velho.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Porto_Velho.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Porto_Velho
X-LIC-LOCATION:America/Porto_Velho
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-041536
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-041536
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,13 +49,37 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Puerto_Rico.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Puerto_Rico.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Puerto_Rico.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Puerto_Rico
X-LIC-LOCATION:America/Puerto_Rico
BEGIN:STANDARD
+DTSTART:18990328T120000
+RDATE:18990328T120000
+TZNAME:AST
TZOFFSETFROM:-042425
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420503T000000
+RDATE:19420503T000000
TZNAME:AST
-DTSTART:18990328T120000
-RDATE:18990328T120000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420503T000000
-RDATE:19420503T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:AST
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rainy_River.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rainy_River.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rainy_River.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,80 +1,87 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Rainy_River
X-LIC-LOCATION:America/Rainy_River
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CST
+TZOFFSETFROM:-061816
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19740428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400929T000000
+RDATE:19400929T000000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:CWT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-061816
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18950101T000000
-RDATE:18950101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:CDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19400929T000000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rankin_Inlet.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rankin_Inlet.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rankin_Inlet.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,92 +1,93 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Rankin_Inlet
X-LIC-LOCATION:America/Rankin_Inlet
+BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:CST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:CDDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:CST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991031T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=19991031T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20001029T020000
+RDATE:20001029T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:20010401T030000
+RDATE:20010401T030000
+TZNAME:CDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19570101T000000
-RDATE:19570101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0400
-TZNAME:CDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0500
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0600
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:CST
-DTSTART:19651031T020000
-RDATE:19651031T020000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
+TZOFFSETTO:-0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20010401T020000
-RDATE:20010401T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Recife.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Recife.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Recife.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Recife
X-LIC-LOCATION:America/Recife
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-021936
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:BRST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -71,14 +20,32 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -92,16 +59,46 @@
RDATE:20000227T000000
RDATE:20001015T000000
RDATE:20020217T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
+RDATE:20021001T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990930T000000
RDATE:19990930T000000
RDATE:20010913T000000
-RDATE:20021001T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Regina.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Regina.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Regina.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,99 +1,100 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Regina
X-LIC-LOCATION:America/Regina
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19300504T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19340506T070000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19050901T000000
+RDATE:19050901T000000
+TZNAME:MST
+TZOFFSETFROM:-065836
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19301005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19341007T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460414T020000
+RDATE:19590426T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19370411T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;UNTIL=19410413T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19591025T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19391008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19411012T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19300504T000000
+RRULE:FREQ=YEARLY;UNTIL=19340506T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19570428T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19301005T000000
+RRULE:FREQ=YEARLY;UNTIL=19341007T060000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19570929T080000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-065836
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19050901T000000
-RDATE:19050901T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370411T000000
+RRULE:FREQ=YEARLY;UNTIL=19410413T070000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19460414T020000
-RDATE:19590426T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19391008T000000
+RRULE:FREQ=YEARLY;UNTIL=19411012T060000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19371010T000000
-RDATE:19381002T000000
-RDATE:19450930T020000
-RDATE:19461013T020000
-RDATE:19591025T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19570428T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:CST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19570929T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19600424T020000
RDATE:19600424T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Resolute.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Resolute.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Resolute.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,79 +1,100 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Resolute
X-LIC-LOCATION:America/Resolute
+BEGIN:STANDARD
+DTSTART:19470831T000000
+RDATE:19470831T000000
+TZNAME:CST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:CDDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:CST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991031T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=19991031T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20051030T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20001029T020000
+RDATE:20001029T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010401T030000
+RDATE:20010401T030000
TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20051030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470831T000000
-RDATE:19470831T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
-TZOFFSETTO:-0400
-TZNAME:CDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19651031T020000
-RDATE:19651031T020000
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:ST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
+DTSTART:20061105T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20001029T020000
-RDATE:20001029T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20010401T020000
-RDATE:20010401T020000
-END:DAYLIGHT
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rio_Branco.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rio_Branco.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rio_Branco.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Rio_Branco
X-LIC-LOCATION:America/Rio_Branco
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:ACST
+TZOFFSETFROM:-043112
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:ACST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z;BYMONTH=4
TZNAME:ACT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z;BYMONTH=12
TZNAME:ACST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-043112
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:ACT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,20 +49,44 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z;BYMONTH=4
+TZNAME:ACT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z;BYMONTH=3
TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z;BYMONTH=11
+TZNAME:ACST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:ACT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:20080624T000000
RDATE:20080624T000000
+TZNAME:AMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rosario.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rosario.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Rosario.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,176 +1,165 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Rosario
X-LIC-LOCATION:America/Rosario
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19320301T000000
-RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-041648
+TZOFFSETTO:-041648
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19321101T000000
-RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19200501T000000
+RDATE:19200501T000000
TZNAME:ART
-DTSTART:19640301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
TZNAME:ARST
-DTSTART:19641015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19890305T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19900304T020000Z
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
TZNAME:ARST
-DTSTART:19891015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19901021T030000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
TZNAME:ART
-DTSTART:19920301T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19930307T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
-TZOFFSETTO:-041648
-TZNAME:CMT
-DTSTART:18941031T000000
-RDATE:18941031T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041648
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19200501T000000
-RDATE:19200501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
TZNAME:ARST
-DTSTART:19301201T000000
-RDATE:19301201T000000
-RDATE:19311015T000000
-RDATE:19400701T000000
-RDATE:19411015T000000
-RDATE:19431015T000000
-RDATE:19461001T000000
-RDATE:19631215T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19410615T000000
-RDATE:19430801T000000
-RDATE:19460301T000000
-RDATE:19631001T000000
-RDATE:19670402T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19691005T000000
RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
DTSTART:19740123T000000
RDATE:19740123T000000
RDATE:19881201T000000
RDATE:19921018T000000
RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
DTSTART:19740501T000000
RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19900304T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0200
-TZOFFSETTO:-0400
-TZNAME:WART
-DTSTART:19910303T000000
-RDATE:19910303T000000
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0200
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19901021T030000Z;BYDAY=3SU;BYMONTH=10
TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910303T000000
+RDATE:19910303T000000
+TZNAME:WART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19911020T000000
RDATE:19911020T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19991003T000000
RDATE:19991003T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+RDATE:20000303T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
TZNAME:ART
-DTSTART:20000303T000000
-RDATE:20000303T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santa_Isabel.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/America/Santa_Isabel.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santa_Isabel.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santa_Isabel.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,139 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santa_Isabel
+X-LIC-LOCATION:America/Santa_Isabel
+BEGIN:STANDARD
+DTSTART:19220101T002032
+RDATE:19220101T002032
+TZNAME:MST
+TZOFFSETFROM:-073928
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19540425T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santarem.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santarem.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santarem.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Santarem
X-LIC-LOCATION:America/Santarem
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-033848
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-033848
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,20 +49,44 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:BRT
DTSTART:20080624T000000
RDATE:20080624T000000
+TZNAME:BRT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santiago.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santiago.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santiago.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,168 +1,103 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Santiago
X-LIC-LOCATION:America/Santiago
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19280401T000000
-RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19280901T000000
-RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19721015T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19720312T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19860309T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19741013T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19871011T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19880313T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19890312T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19910310T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19960310T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19911013T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19971012T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19991010T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:20000312T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=20070311T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:20090315T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SMT
TZOFFSETFROM:-044246
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19100101T000000
+RDATE:19100101T000000
+TZNAME:CLT
TZOFFSETFROM:-044246
TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19100101T000000
-RDATE:19100101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19160701T000000
+RDATE:19160701T000000
+TZNAME:SMT
TZOFFSETFROM:-0500
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:19160701T000000
-RDATE:19160701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19180901T000000
+RDATE:19180901T000000
+TZNAME:CLT
TZOFFSETFROM:-044246
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19180901T000000
-RDATE:19180901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19190701T000000
+RDATE:19190701T000000
+TZNAME:SMT
TZOFFSETFROM:-0400
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:19190701T000000
-RDATE:19190701T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19270901T000000
+RDATE:19270901T000000
+TZNAME:CLST
TZOFFSETFROM:-044246
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19270901T000000
-RDATE:19270901T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19280401T000000
+RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z;BYMONTH=4
+TZNAME:CLT
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CLT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280901T000000
+RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19420601T000000
RDATE:19420601T000000
RDATE:19460831T230000
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+TZNAME:CLST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19420801T000000
-RDATE:19420801T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460715T000000
+RDATE:19460715T000000
+TZNAME:CLST
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19460715T000000
-RDATE:19460715T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470331T230000
+RDATE:19470331T230000
+TZNAME:CLT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19470331T230000
-RDATE:19470331T230000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19470522T000000
+RDATE:19470522T000000
+TZNAME:CLST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19470522T000000
-RDATE:19470522T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
DTSTART:19681103T000000
RDATE:19681103T000000
RDATE:19691123T000000
@@ -171,11 +106,11 @@
RDATE:19891015T000000
RDATE:19900916T000000
RDATE:19980927T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
DTSTART:19690330T000000
RDATE:19690330T000000
RDATE:19700329T000000
@@ -186,6 +121,81 @@
RDATE:19980315T000000
RDATE:19990404T000000
RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701011T000000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19720312T000000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741013T000000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880313T000000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910310T000000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911013T000000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110313T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santo_Domingo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santo_Domingo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Santo_Domingo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,67 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Santo_Domingo
X-LIC-LOCATION:America/Santo_Domingo
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0430
-TZNAME:EHDT
-DTSTART:19691026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19731028T050000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0430
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19720121T000000
-RRULE:FREQ=YEARLY;UNTIL=19740121T043000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SDMT
TZOFFSETFROM:-043936
TZOFFSETTO:-0440
-TZNAME:SDMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19330401T120000
+RDATE:19330401T120000
+TZNAME:EST
TZOFFSETFROM:-0440
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19330401T120000
-RDATE:19330401T120000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19661030T000000
+RDATE:19661030T000000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19661030T000000
-RDATE:19661030T000000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19670228T000000
RDATE:19670228T000000
RDATE:20001029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19691026T000000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EHDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0430
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0430
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19700221T000000
RDATE:19700221T000000
RDATE:19710120T000000
+TZNAME:EST
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AST
+DTSTART:19720121T000000
+RRULE:FREQ=YEARLY;UNTIL=19740121T043000Z;BYMONTH=1
+TZNAME:EST
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19741027T000000
RDATE:19741027T000000
RDATE:20001203T010000
+TZNAME:AST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Sao_Paulo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Sao_Paulo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Sao_Paulo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,209 +1,175 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Sao_Paulo
X-LIC-LOCATION:America/Sao_Paulo
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-030628
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+BEGIN:STANDARD
+DTSTART:19631023T000000
+RDATE:19631023T000000
TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19931017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19951015T030000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19940220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=19950219T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T030000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20060219T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20080217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20110220T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20130217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20140216T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20220220T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20240218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20250216T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20270221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20330220T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20350218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20360217T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-030628
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631023T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19881016T000000
-RDATE:19891015T000000
-RDATE:19901021T000000
-RDATE:19911020T000000
-RDATE:19921025T000000
-RDATE:19981011T000000
-RDATE:19991003T000000
-RDATE:20021103T000000
-RDATE:20031019T000000
-RDATE:20041102T000000
-RDATE:20051016T000000
-RDATE:20061105T000000
-RDATE:20071014T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19500416T010000
-RDATE:19500416T010000
-RDATE:19530301T000000
-RDATE:19640301T000000
-RDATE:19650331T000000
-RDATE:19860315T000000
-RDATE:19870214T000000
-RDATE:19880207T000000
-RDATE:19890129T000000
-RDATE:19900211T000000
-RDATE:19910217T000000
-RDATE:19920209T000000
-RDATE:19930131T000000
-RDATE:19960211T000000
-RDATE:19970216T000000
-RDATE:19980301T000000
-RDATE:19990221T000000
-RDATE:20000227T000000
-RDATE:20070225T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19640101T000000
-RDATE:19640101T000000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20170219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20120226T000000
-RDATE:20120226T000000
-RDATE:20150222T000000
-RDATE:20230226T000000
-RDATE:20260222T000000
-RDATE:20340226T000000
-RDATE:20370222T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Scoresbysund.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Scoresbysund.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Scoresbysund.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Scoresbysund
X-LIC-LOCATION:America/Scoresbysund
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:EGT
-DTSTART:19810927T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:EGST
-DTSTART:19820328T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:EGT
-DTSTART:19961027T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:CGT
TZOFFSETFROM:-012752
TZOFFSETTO:-0200
-TZNAME:CGT
-DTSTART:19160728T000000
-RDATE:19160728T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:CGST
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
-TZNAME:CGST
-DTSTART:19800406T020000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19800928T030000
+RDATE:19800928T030000
+TZNAME:CGT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:CGT
-DTSTART:19800928T030000
-RDATE:19800928T030000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810329T000000
+RDATE:19810329T000000
+TZNAME:EGST
TZOFFSETFROM:-0200
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810927T010000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EGT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820328T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:EGST
-DTSTART:19810329T000000
-RDATE:19810329T000000
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EGT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Shiprock.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Shiprock.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Shiprock.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +1,134 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Shiprock
X-LIC-LOCATION:America/Shiprock
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19210327T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T080000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19650425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19651031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-065956
-TZOFFSETTO:-0700
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:MST
-DTSTART:18831118T120004
-RDATE:18831118T120004
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210522T020000
-RDATE:19210522T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Barthelemy.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Barthelemy.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Barthelemy.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Barthelemy
X-LIC-LOCATION:America/St_Barthelemy
BEGIN:STANDARD
+DTSTART:19110608T000000
+RDATE:19110608T000000
+TZNAME:AST
TZOFFSETFROM:-040608
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110608T000000
-RDATE:19110608T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Johns.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Johns.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Johns.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,190 +1,189 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Johns
X-LIC-LOCATION:America/St_Johns
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+TZNAME:NST
TZOFFSETFROM:-033052
TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T033052Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+TZNAME:NDT
TZOFFSETFROM:-033052
TZOFFSETTO:-023052
-TZNAME:NDT
-DTSTART:19200502T230000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19340507T023052Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181031T020000
+RDATE:19190812T230000
+TZNAME:NST
TZOFFSETFROM:-023052
TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:19201031T230000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19341029T013052Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
+DTSTART:19200502T230000
+RRULE:FREQ=YEARLY;UNTIL=19340507T023052Z;BYDAY=1SU;BYMONTH=5
TZNAME:NDT
-DTSTART:19360511T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=MO;UNTIL=19410512T033000Z
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19201031T230000
+RRULE:FREQ=YEARLY;UNTIL=19341029T013052Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19361005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19411006T023000Z
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350330T000000
+RDATE:19350330T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19870405T000100
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19460512T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19500514T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19450930T020000
+RDATE:19871025T000100
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19461006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501008T043000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19360511T000000
+RRULE:FREQ=YEARLY;UNTIL=19410512T033000Z;BYDAY=MO;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19361005T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T023000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T043000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19420511T000000
+RDATE:19420511T000000
TZNAME:NST
-DTSTART:19601030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19861026T043000Z
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
+DTSTART:19450814T203000
+RDATE:19450814T203000
+TZNAME:NPT
+TZOFFSETFROM:-0230
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19890402T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T033100Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:NST
-DTSTART:19891029T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T023100Z
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19460512T020000
+RRULE:FREQ=YEARLY;UNTIL=19500514T053000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:20070311T000100
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19461006T020000
+RRULE:FREQ=YEARLY;UNTIL=19501008T043000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:20071104T000100
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-033052
-TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-033052
-TZOFFSETTO:-023052
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T053000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:NDT
-DTSTART:19170408T020000
-RDATE:19170408T020000
-RDATE:19180414T020000
-RDATE:19190505T230000
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-023052
-TZOFFSETTO:-033052
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T043000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:NST
-DTSTART:19170917T020000
-RDATE:19170917T020000
-RDATE:19181031T020000
-RDATE:19190812T230000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-033052
-TZOFFSETTO:-0330
+DTSTART:19601030T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T043000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19350330T000000
-RDATE:19350330T000000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+TZNAME:NDDT
TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19350505T230000
-RDATE:19350505T230000
-RDATE:19870405T000100
+TZOFFSETTO:-0130
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19881030T000100
+RDATE:19881030T000100
TZNAME:NST
-DTSTART:19351027T230000
-RDATE:19351027T230000
-RDATE:19450930T020000
-RDATE:19871025T000100
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19890402T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T033100Z;BYDAY=1SU;BYMONTH=4
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NWT
-DTSTART:19420511T000000
-RDATE:19420511T000000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0230
-TZNAME:NPT
-DTSTART:19450814T203000
-RDATE:19450814T203000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0330
+DTSTART:19891029T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T023100Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19460101T000000
-RDATE:19460101T000000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T000100
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
TZOFFSETFROM:-0330
-TZOFFSETTO:-0130
-TZNAME:NDDT
-DTSTART:19880403T000100
-RDATE:19880403T000100
+TZOFFSETTO:-0230
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0130
-TZOFFSETTO:-0330
+DTSTART:20071104T000100
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:NST
-DTSTART:19881030T000100
-RDATE:19881030T000100
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Kitts.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Kitts.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Kitts.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Kitts
X-LIC-LOCATION:America/St_Kitts
BEGIN:STANDARD
+DTSTART:19120302T000000
+RDATE:19120302T000000
+TZNAME:AST
TZOFFSETFROM:-041052
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19120302T000000
-RDATE:19120302T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Lucia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Lucia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Lucia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Lucia
X-LIC-LOCATION:America/St_Lucia
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
TZOFFSETFROM:-0404
TZOFFSETTO:-0404
-TZNAME:CMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:AST
TZOFFSETFROM:-0404
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Thomas.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Thomas.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Thomas.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Thomas
X-LIC-LOCATION:America/St_Thomas
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:AST
TZOFFSETFROM:-041944
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Vincent.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Vincent.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/St_Vincent.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/St_Vincent
X-LIC-LOCATION:America/St_Vincent
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KMT
TZOFFSETFROM:-040456
TZOFFSETTO:-040456
-TZNAME:KMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:AST
TZOFFSETFROM:-040456
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Swift_Current.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Swift_Current.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Swift_Current.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,90 +1,98 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Swift_Current
X-LIC-LOCATION:America/Swift_Current
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19050901T000000
+RDATE:19050901T000000
TZNAME:MST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19490925T080000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19590426T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T090000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19600925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T080000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-071120
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19050901T000000
-RDATE:19050901T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
DTSTART:19180414T020000
RDATE:19180414T020000
RDATE:19570428T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19181031T020000
RDATE:19181031T020000
RDATE:19450930T020000
RDATE:19461013T020000
RDATE:19571027T020000
RDATE:19591025T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460428T020000
+RDATE:19460428T020000
+TZNAME:MST
TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19500101T000000
RDATE:19500101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590426T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:CST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19600925T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19720430T020000
RDATE:19720430T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tegucigalpa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tegucigalpa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tegucigalpa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Tegucigalpa
X-LIC-LOCATION:America/Tegucigalpa
+BEGIN:STANDARD
+DTSTART:19210401T000000
+RDATE:19210401T000000
+TZNAME:CST
+TZOFFSETFROM:-054852
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870503T000000
+RRULE:FREQ=YEARLY;UNTIL=19880501T060000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870503T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19880501T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19870927T000000
+RRULE:FREQ=YEARLY;UNTIL=19880925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19870927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880925T050000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054852
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19210401T000000
-RDATE:19210401T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20060507T000000
+RDATE:20060507T000000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060507T000000
-RDATE:20060507T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20060807T000000
+RDATE:20060807T000000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20060807T000000
-RDATE:20060807T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thule.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thule.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thule.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Thule
X-LIC-LOCATION:America/Thule
+BEGIN:STANDARD
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:AST
+TZOFFSETFROM:-043508
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19910331T020000
+RRULE:FREQ=YEARLY;UNTIL=19920329T060000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19910331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19920329T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19920927T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19910929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19920927T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930404T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19930404T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19931031T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19931031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-043508
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19160728T000000
-RDATE:19160728T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thunder_Bay.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thunder_Bay.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Thunder_Bay.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,107 +1,103 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Thunder_Bay
X-LIC-LOCATION:America/Thunder_Bay
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19700426T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19720430T070000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CST
+TZOFFSETFROM:-0557
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19100101T000000
+RDATE:19100101T000000
TZNAME:EST
-DTSTART:19701025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19721029T060000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19700101T000000
+RDATE:19730101T000000
+RDATE:19740101T000000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19730101T000000
-RRULE:FREQ=YEARLY;UNTIL=19740101T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19740428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19700426T020000
+RRULE:FREQ=YEARLY;UNTIL=19720430T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19701025T020000
+RRULE:FREQ=YEARLY;UNTIL=19721029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0557
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18950101T000000
-RDATE:18950101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19100101T000000
-RDATE:19100101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19420101T000000
-RDATE:19420101T000000
-RDATE:19700101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tijuana.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tijuana.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tijuana.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,154 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Tijuana
X-LIC-LOCATION:America/Tijuana
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220101T001156
+RDATE:19220101T001156
+TZNAME:MST
+TZOFFSETFROM:-074804
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+RDATE:20100101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19540425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T100000Z
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19761031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-074804
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19220101T001156
-RDATE:19220101T001156
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19240101T000000
-RDATE:19240101T000000
-RDATE:19301115T000000
-RDATE:19310930T000000
-RDATE:19451112T000000
-RDATE:19490114T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19270610T230000
-RDATE:19270610T230000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19480405T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420424T000000
-RDATE:19420424T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540101T000000
-RDATE:19540101T000000
-RDATE:19610101T000000
-RDATE:19760101T000000
-RDATE:19960101T000000
-RDATE:20010101T000000
-RDATE:20020220T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Toronto.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Toronto.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Toronto.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,170 +1,185 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Toronto
X-LIC-LOCATION:America/Toronto
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:-051732
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190330T233000
+RDATE:19200502T020000
+RDATE:19210515T020000
+RDATE:19320501T020000
+RDATE:19460428T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19220514T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19230513T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19191026T000000
+RDATE:19200926T000000
+RDATE:19210915T020000
+RDATE:19331001T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19491127T000000
+RDATE:19501126T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
TZNAME:EST
-DTSTART:19220917T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19260919T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220514T020000
+RRULE:FREQ=YEARLY;UNTIL=19230513T070000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19240504T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19270501T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19220917T020000
+RRULE:FREQ=YEARLY;UNTIL=19260919T060000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19270925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19320925T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19240504T020000
+RRULE:FREQ=YEARLY;UNTIL=19270501T070000Z;BYDAY=1SU;BYMONTH=5
TZNAME:EDT
-DTSTART:19280429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19310426T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19330430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19400428T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19270925T020000
+RRULE:FREQ=YEARLY;UNTIL=19320925T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19340930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19390924T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280429T020000
+RRULE:FREQ=YEARLY;UNTIL=19310426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19330430T020000
+RRULE:FREQ=YEARLY;UNTIL=19400428T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19470427T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T050000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19390924T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19470928T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19480926T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:EWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T000000
+RRULE:FREQ=YEARLY;UNTIL=19490424T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19500430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19470928T000000
+RRULE:FREQ=YEARLY;UNTIL=19480926T040000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19560930T060000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19571027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19560930T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-051732
+DTSTART:19571027T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19190330T233000
-RDATE:19200502T020000
-RDATE:19210515T020000
-RDATE:19320501T020000
-RDATE:19460428T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19191026T000000
-RDATE:19200926T000000
-RDATE:19210915T020000
-RDATE:19331001T020000
-RDATE:19450930T020000
-RDATE:19460929T020000
-RDATE:19491127T000000
-RDATE:19501126T020000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19190101T000000
-RDATE:19190101T000000
-RDATE:19460101T000000
-RDATE:19740101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tortola.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tortola.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Tortola.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Tortola
X-LIC-LOCATION:America/Tortola
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:AST
TZOFFSETFROM:-041828
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Vancouver.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Vancouver.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Vancouver.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,94 +1,102 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Vancouver
X-LIC-LOCATION:America/Vancouver
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:PST
+TZOFFSETFROM:-081228
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
TZNAME:PST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T090000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-081228
+DTSTART:19870101T000000
+RDATE:19870101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
-RDATE:19461013T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19870101T000000
-RDATE:19870101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Virgin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Virgin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Virgin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Virgin
X-LIC-LOCATION:America/Virgin
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:AST
TZOFFSETFROM:-041944
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Whitehorse.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Whitehorse.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Whitehorse.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,110 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Whitehorse
X-LIC-LOCATION:America/Whitehorse
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19000820T000000
+RDATE:19000820T000000
+TZNAME:YST
TZOFFSETFROM:-090012
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19000820T000000
-RDATE:19000820T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:YDT
DTSTART:19180414T020000
RDATE:19180414T020000
RDATE:19190525T020000
+TZNAME:YDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:YST
DTSTART:19181027T020000
RDATE:19181027T020000
RDATE:19191101T000000
RDATE:19450930T020000
+TZNAME:YST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:YWT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+TZNAME:YPT
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:YPT
-DTSTART:19450814T150000
-RDATE:19450814T150000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:YDDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0700
-TZNAME:YDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:YST
TZOFFSETFROM:-0700
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19651031T020000
-RDATE:19651031T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19660701T020000
+RDATE:19660701T020000
+TZNAME:PST
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-DTSTART:19660701T020000
-RDATE:19660701T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
-DTSTART:19800101T000000
-RDATE:19800101T000000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Winnipeg.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Winnipeg.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Winnipeg.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,128 +1,129 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Winnipeg
X-LIC-LOCATION:America/Winnipeg
+BEGIN:STANDARD
+DTSTART:18870716T000000
+RDATE:18870716T000000
+TZNAME:CST
+TZOFFSETFROM:-062836
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160423T000000
+RDATE:19160423T000000
+RDATE:19180414T020000
+RDATE:19370516T020000
+RDATE:19460512T020000
+RDATE:19500501T020000
+RDATE:19630428T020000
+RDATE:20060402T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19160917T000000
+RDATE:19160917T000000
+RDATE:19181031T020000
+RDATE:19370926T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19500930T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19630922T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19490925T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19660424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19661030T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20051030T080000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19660424T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20050403T080000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19661030T030000
+RRULE:FREQ=YEARLY;UNTIL=20051030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-062836
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18870716T000000
-RDATE:18870716T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20050403T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19160423T000000
-RDATE:19160423T000000
-RDATE:19180414T020000
-RDATE:19370516T020000
-RDATE:19460512T020000
-RDATE:19500501T020000
-RDATE:19630428T020000
-RDATE:20060402T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:20060101T000000
+RDATE:20060101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19160917T000000
-RDATE:19160917T000000
-RDATE:19181031T020000
-RDATE:19370926T020000
-RDATE:19450930T020000
-RDATE:19461013T020000
-RDATE:19500930T020000
-RDATE:19591025T020000
-RDATE:19600925T020000
-RDATE:19630922T020000
-RDATE:20061029T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20060101T000000
-RDATE:20060101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yakutat.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yakutat.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yakutat.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,123 +1,117 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Yakutat
X-LIC-LOCATION:America/Yakutat
+BEGIN:STANDARD
+DTSTART:19000820T120000
+RDATE:19000820T120000
+TZNAME:YST
+TZOFFSETFROM:-091855
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+TZNAME:YST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:YWT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T110000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+TZNAME:YPT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:YST
TZOFFSETFROM:-0800
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19831030T100000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T110000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:YDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T110000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T110000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19831030T100000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:YST
TZOFFSETFROM:-0800
TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T100000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:YDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T110000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:YDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
+DTSTART:19831130T000000
+RDATE:19831130T000000
TZNAME:AKST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+144105
-TZOFFSETTO:-091855
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-091855
-TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19000820T120000
-RDATE:19000820T120000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19420101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19690101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-TZNAME:YPT
-DTSTART:19450814T150000
-RDATE:19450814T150000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AKST
TZOFFSETFROM:-0800
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
TZOFFSETFROM:-0900
-TZOFFSETTO:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:AKST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yellowknife.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yellowknife.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/America/Yellowknife.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,92 +1,93 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Yellowknife
X-LIC-LOCATION:America/Yellowknife
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19350101T000000
+RDATE:19350101T000000
+TZNAME:MST
+TZOFFSETFROM:+0000
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:MDDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19350101T000000
-RDATE:19350101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
-TZOFFSETTO:-0500
-TZNAME:MDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0700
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:MST
-DTSTART:19651031T020000
-RDATE:19651031T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
+TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19800101T000000
-RDATE:19800101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Casey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Casey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Casey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Casey
X-LIC-LOCATION:Antarctica/Casey
BEGIN:STANDARD
+DTSTART:19690101T000000
+RDATE:19690101T000000
+TZNAME:WST
TZOFFSETFROM:+0000
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20091018T020000
+RDATE:20091018T020000
+TZNAME:CAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100305T020000
+RDATE:20100305T020000
TZNAME:WST
-DTSTART:19690101T000000
-RDATE:19690101T000000
+TZOFFSETFROM:+1100
+TZOFFSETTO:+0800
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Davis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Davis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Davis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,23 +1,38 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Davis
X-LIC-LOCATION:Antarctica/Davis
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0700
-TZNAME:DAVT
DTSTART:19570113T000000
RDATE:19570113T000000
RDATE:19690201T000000
+TZNAME:DAVT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19641101T000000
+RDATE:19641101T000000
+TZNAME:zzz
TZOFFSETFROM:+0700
TZOFFSETTO:+0000
-TZNAME:zzz
-DTSTART:19641101T000000
-RDATE:19641101T000000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:20091018T020000
+RDATE:20091018T020000
+TZNAME:DAVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100311T010000
+RDATE:20100311T010000
+TZNAME:DAVT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/DumontDUrville.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/DumontDUrville.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/DumontDUrville.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/DumontDUrville
X-LIC-LOCATION:Antarctica/DumontDUrville
BEGIN:STANDARD
+DTSTART:19470101T000000
+RDATE:19470101T000000
+TZNAME:PMT
TZOFFSETFROM:+0000
TZOFFSETTO:+1000
-TZNAME:PMT
-DTSTART:19470101T000000
-RDATE:19470101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19520114T000000
+RDATE:19520114T000000
+TZNAME:zzz
TZOFFSETFROM:+1000
TZOFFSETTO:+0000
-TZNAME:zzz
-DTSTART:19520114T000000
-RDATE:19520114T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19561101T000000
+RDATE:19561101T000000
+TZNAME:DDUT
TZOFFSETFROM:+0000
TZOFFSETTO:+1000
-TZNAME:DDUT
-DTSTART:19561101T000000
-RDATE:19561101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Macquarie.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Antarctica/Macquarie.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Macquarie.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Macquarie.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,153 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Macquarie
+X-LIC-LOCATION:Antarctica/Macquarie
+BEGIN:STANDARD
+DTSTART:19110101T000000
+RDATE:19110101T000000
+TZNAME:EST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170201T000000
+RDATE:19170201T000000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19680331T030000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19690309T030000
+RRULE:FREQ=YEARLY;UNTIL=19710313T160000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870315T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;UNTIL=20091003T160000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;UNTIL=20090404T160000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100404T030000
+RDATE:20100404T030000
+TZNAME:MIST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Mawson.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Mawson.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Mawson.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Mawson
X-LIC-LOCATION:Antarctica/Mawson
BEGIN:STANDARD
+DTSTART:19540213T000000
+RDATE:19540213T000000
+TZNAME:MAWT
TZOFFSETFROM:+0000
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20091018T020000
+RDATE:20091018T020000
TZNAME:MAWT
-DTSTART:19540213T000000
-RDATE:19540213T000000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/McMurdo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/McMurdo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/McMurdo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,72 +1,73 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/McMurdo
X-LIC-LOCATION:Antarctica/McMurdo
+BEGIN:STANDARD
+DTSTART:19560101T000000
+RDATE:19560101T000000
+TZNAME:NZST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
+DTSTART:19750223T030000
+RDATE:19750223T030000
TZNAME:NZST
-DTSTART:19760307T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19900318T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NZDT
-DTSTART:19901007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:20070930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19560101T000000
-RDATE:19560101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:NZDT
-DTSTART:19741103T020000
-RDATE:19741103T020000
-RDATE:19891008T020000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19750223T030000
-RDATE:19750223T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Palmer.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Palmer.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Palmer.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,142 +1,154 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Palmer
X-LIC-LOCATION:Antarctica/Palmer
BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:ARST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19650301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19650301T000000
-RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19651015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
TZNAME:ARST
-DTSTART:19651015T000000
-RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19671001T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19681006T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19670402T000000
+RDATE:19670402T000000
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19680407T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19690406T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19821010T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19871011T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19830313T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19860309T030000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740123T000000
+RDATE:19740123T000000
+TZNAME:ARST
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19880313T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19890312T030000Z
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19740501T000000
+RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820501T000000
+RDATE:19820501T000000
+TZNAME:CLST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19910310T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19960310T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19821010T000000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
TZNAME:CLST
-DTSTART:19911013T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19971012T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19991010T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830313T000000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870412T000000
+RDATE:19870412T000000
+RDATE:19900318T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
TZNAME:CLT
-DTSTART:20000312T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0300
-TZNAME:ARST
-DTSTART:19650101T000000
-RDATE:19650101T000000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19880313T000000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:ART
-DTSTART:19670402T000000
-RDATE:19670402T000000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19881002T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19980927T000000
+TZNAME:CLST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19691005T000000
-RDATE:19691005T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
-TZNAME:ARST
-DTSTART:19740123T000000
-RDATE:19740123T000000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
-TZNAME:ART
-DTSTART:19740501T000000
-RDATE:19740501T000000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19910310T000000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19820501T000000
-RDATE:19820501T000000
-RDATE:19870412T000000
-RDATE:19900318T000000
-RDATE:19970330T000000
-RDATE:19980315T000000
-RDATE:19990404T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19911013T000000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=10
TZNAME:CLST
-DTSTART:19881002T000000
-RDATE:19881002T000000
-RDATE:19891015T000000
-RDATE:19900916T000000
-RDATE:19980927T000000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Rothera.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Rothera.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Rothera.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Rothera
X-LIC-LOCATION:Antarctica/Rothera
BEGIN:STANDARD
+DTSTART:19761201T000000
+RDATE:19761201T000000
+TZNAME:ROTT
TZOFFSETFROM:+0000
TZOFFSETTO:-0300
-TZNAME:ROTT
-DTSTART:19761201T000000
-RDATE:19761201T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/South_Pole.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/South_Pole.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/South_Pole.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,72 +1,73 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/South_Pole
X-LIC-LOCATION:Antarctica/South_Pole
+BEGIN:STANDARD
+DTSTART:19560101T000000
+RDATE:19560101T000000
+TZNAME:NZST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
+DTSTART:19750223T030000
+RDATE:19750223T030000
TZNAME:NZST
-DTSTART:19760307T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19900318T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NZDT
-DTSTART:19901007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:20070930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19560101T000000
-RDATE:19560101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:NZDT
-DTSTART:19741103T020000
-RDATE:19741103T020000
-RDATE:19891008T020000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19750223T030000
-RDATE:19750223T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Syowa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Syowa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Syowa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Syowa
X-LIC-LOCATION:Antarctica/Syowa
BEGIN:STANDARD
+DTSTART:19570129T000000
+RDATE:19570129T000000
+TZNAME:SYOT
TZOFFSETFROM:+0000
TZOFFSETTO:+0300
-TZNAME:SYOT
-DTSTART:19570129T000000
-RDATE:19570129T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Vostok.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Vostok.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Antarctica/Vostok.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Antarctica/Vostok
X-LIC-LOCATION:Antarctica/Vostok
BEGIN:STANDARD
+DTSTART:19571216T000000
+RDATE:19571216T000000
+TZNAME:VOST
TZOFFSETFROM:+0000
TZOFFSETTO:+0600
-TZNAME:VOST
-DTSTART:19571216T000000
-RDATE:19571216T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Arctic/Longyearbyen.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Arctic/Longyearbyen.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Arctic/Longyearbyen.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,81 +1,88 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Arctic/Longyearbyen
X-LIC-LOCATION:Arctic/Longyearbyen
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19590315T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19640315T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19590920T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19650919T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
+DTSTART:19400810T230000
+RDATE:19400810T230000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19590315T020000
+RRULE:FREQ=YEARLY;UNTIL=19640315T010000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19590920T030000
+RRULE:FREQ=YEARLY;UNTIL=19650919T010000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0043
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:18950101T000000
-RDATE:18950101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160522T010000
-RDATE:19160522T010000
-RDATE:19400810T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450402T020000
-RDATE:19650425T020000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19160930T000000
-RDATE:19160930T000000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19451001T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800101T000000
-RDATE:19800101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aden.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aden.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aden.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Aden
X-LIC-LOCATION:Asia/Aden
BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:AST
TZOFFSETFROM:+030048
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19500101T000000
-RDATE:19500101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Almaty.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Almaty.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Almaty.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,99 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Almaty
X-LIC-LOCATION:Asia/Almaty
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:ALMT
+TZOFFSETFROM:+050748
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:ALMST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:ALMST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:ALMT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:ALMST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T200000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:20050315T000000
+TZNAME:ALMT
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19910101T000000
-RRULE:FREQ=YEARLY;UNTIL=19911231T180000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:ALMST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:ALMST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T200000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:ALMT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T200000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T200000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+050748
-TZOFFSETTO:+0500
-TZNAME:ALMT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:ALMST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:19920926T230000
-RDATE:19920926T230000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T200000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:ALMT
+TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:ALMT
-DTSTART:20050315T000000
-RDATE:20050315T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Amman.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Amman.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Amman.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,114 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Amman
X-LIC-LOCATION:Asia/Amman
BEGIN:STANDARD
-TZOFFSETFROM:+0300
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022344
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19731001T000000
-RRULE:FREQ=YEARLY;UNTIL=19750930T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19730606T000000
+RDATE:19730606T000000
+RDATE:19780430T000000
+RDATE:19850401T000000
+RDATE:19890508T000000
+RDATE:19900427T000000
+RDATE:19910417T000000
+RDATE:19920410T000000
+RDATE:19990701T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19740501T000000
-RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19731001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19860404T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR;UNTIL=19880331T220000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
+DTSTART:19761101T000000
+RDATE:19761101T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19851001T000000
+RDATE:19910927T000000
+RDATE:19940916T000000
+RDATE:20031024T010000
+RDATE:20041015T010000
+RDATE:20050930T010000
TZNAME:EET
-DTSTART:19861003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1FR;UNTIL=19901004T210000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19921002T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1FR;UNTIL=19930930T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860404T000000
+RRULE:FREQ=YEARLY;UNTIL=19880331T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19930402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR;UNTIL=19980402T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19861003T000000
+RRULE:FREQ=YEARLY;UNTIL=19901004T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19950915T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR;UNTIL=19980917T220000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19921002T000000
+RRULE:FREQ=YEARLY;UNTIL=19930930T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19990930T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH;UNTIL=20020925T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930402T000000
+RRULE:FREQ=YEARLY;UNTIL=19980402T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20000330T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19950915T010000
+RRULE:FREQ=YEARLY;UNTIL=19980917T220000Z;BYDAY=3FR;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20061027T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+022344
+DTSTART:19990924T010000
+RRULE:FREQ=YEARLY;UNTIL=20020926T220000Z;BYDAY=-1FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20000330T000000
+RRULE:FREQ=YEARLY;UNTIL=20010328T220000Z;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020328T235959
+RRULE:FREQ=YEARLY;BYDAY=-1TH;BYMONTH=3
TZNAME:EEST
-DTSTART:19730606T000000
-RDATE:19730606T000000
-RDATE:19780430T000000
-RDATE:19850401T000000
-RDATE:19890508T000000
-RDATE:19900427T000000
-RDATE:19910417T000000
-RDATE:19920410T000000
-RDATE:19990701T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19761101T000000
-RDATE:19761101T000000
-RDATE:19771001T000000
-RDATE:19780930T000000
-RDATE:19851001T000000
-RDATE:19910927T000000
-RDATE:19940916T000000
-RDATE:20031024T010000
-RDATE:20041015T010000
-RDATE:20050930T010000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Anadyr.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Anadyr.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Anadyr.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,127 +1,143 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Anadyr
X-LIC-LOCATION:Asia/Anadyr
BEGIN:STANDARD
-TZOFFSETFROM:+1300
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:ANAT
+TZOFFSETFROM:+114956
TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T110000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ANAST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RDATE:19810401T000000
TZNAME:ANAST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T120000Z
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RDATE:19811001T000000
+TZNAME:ANAT
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820401T000000
+RDATE:19820401T000000
+TZNAME:ANAST
TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T110000Z;BYMONTH=10
+TZNAME:ANAT
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T140000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T120000Z;BYMONTH=4
+TZNAME:ANAST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:ANAST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T140000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T140000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ANAT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T140000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ANAST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:ANAST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1300
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
+TZNAME:ANAST
+TZOFFSETFROM:+1200
TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T140000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:ANAT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+114956
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:ANAST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:ANAST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:ANAT
-DTSTART:19300621T000000
-RDATE:19300621T000000
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1400
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20090328T140000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:ANAST
-DTSTART:19810401T000000
-RDATE:19810401T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1400
-TZOFFSETTO:+1300
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T140000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:ANAT
-DTSTART:19811001T000000
-RDATE:19811001T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1300
-TZOFFSETTO:+1300
-TZNAME:ANAST
-DTSTART:19820401T000000
-RDATE:19820401T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
TZOFFSETTO:+1200
-TZNAME:ANAST
-DTSTART:19910331T020000
-RDATE:19910331T020000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20091024T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:ANAT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
+DTSTART:20101031T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:ANAT
-DTSTART:19920119T020000
-RDATE:19920119T020000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:20110327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:ANAST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:ANAT
-DTSTART:19920926T230000
-RDATE:19920926T230000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,142 +1,137 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Aqtau
X-LIC-LOCATION:Asia/Aqtau
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:FORT
+TZOFFSETFROM:+032104
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:FORT
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19630101T000000
+RDATE:19630101T000000
+RDATE:19910101T000000
TZNAME:SHET
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RDATE:19811001T000000
+TZNAME:SHET
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820401T000000
+RDATE:19820401T000000
TZNAME:SHEST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
+TZNAME:SHET
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:SHET
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
TZNAME:SHEST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AQTST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T210000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SHET
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:AQTT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19940924T210000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AQTST
-DTSTART:19960331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T220000Z
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SHEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911216T000000
+RDATE:19911216T000000
+RDATE:19950326T020000
+TZNAME:AQTST
TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:AQTT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032104
-TZOFFSETTO:+0400
-TZNAME:FORT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:FORT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AQTST
TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:SHET
-DTSTART:19630101T000000
-RDATE:19630101T000000
-RDATE:19910101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:SHET
-DTSTART:19811001T000000
-RDATE:19811001T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:SHEST
-DTSTART:19820401T000000
-RDATE:19820401T000000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:AQTT
-DTSTART:19911216T000000
-RDATE:19911216T000000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19940326T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AQTST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AQTST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AQTT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950924T030000
+RDATE:19950924T030000
TZNAME:AQTT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
+DTSTART:19960331T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T220000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:AQTST
-DTSTART:19950326T020000
-RDATE:19950326T020000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T220000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AQTT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:AQTT
-DTSTART:19950924T030000
-RDATE:19950924T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AQTT
DTSTART:20050315T000000
RDATE:20050315T000000
+TZNAME:AQTT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtobe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtobe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Aqtobe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,128 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Aqtobe
X-LIC-LOCATION:Asia/Aqtobe
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:AKTT
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+034840
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:AKTST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:AKTT
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:AKTT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
+BEGIN:STANDARD
+DTSTART:19810401T000000
+RDATE:19810401T000000
TZNAME:AKTST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AQTST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T210000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19811001T000000
+RDATE:19811001T000000
+TZNAME:AKTT
TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:AQTT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820401T000000
+RDATE:19820401T000000
+TZNAME:AKTST
TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:AQTT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T210000Z
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+034840
-TZOFFSETTO:+0400
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
TZNAME:AKTT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:AKTT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:AKTST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AKTST
-DTSTART:19810401T000000
-RDATE:19810401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AKTT
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:AKTT
-DTSTART:19811001T000000
-RDATE:19811001T000000
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AKTST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AKTST
-DTSTART:19820401T000000
-RDATE:19820401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+TZNAME:AKTT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:AKTT
-DTSTART:19910101T000000
-RDATE:19910101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911216T000000
+RDATE:19911216T000000
+TZNAME:AQTST
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AQTST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:AQTT
-DTSTART:19911216T000000
-RDATE:19911216T000000
-RDATE:20050315T000000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AQTST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:AQTST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AQTT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T210000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AQTT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
+BEGIN:STANDARD
+DTSTART:20050315T000000
+RDATE:20050315T000000
+TZNAME:AQTT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashgabat.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashgabat.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashgabat.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ashgabat
X-LIC-LOCATION:Asia/Ashgabat
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:ASHST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:ASHT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+035332
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ASHST
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:ASHT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:ASHST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:ASHST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+035332
-TZOFFSETTO:+0400
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
TZNAME:ASHT
-DTSTART:19240502T000000
-RDATE:19240502T000000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ASHT
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:ASHT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ASHST
TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:ASHST
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:ASHST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:ASHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:ASHT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911027T000000
+RDATE:19911027T000000
+TZNAME:TMST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:TMT
-DTSTART:19911027T000000
-RDATE:19911027T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:TMT
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:TMT
-DTSTART:19920119T020000
-RDATE:19920119T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashkhabad.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashkhabad.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ashkhabad.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ashkhabad
X-LIC-LOCATION:Asia/Ashkhabad
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:ASHST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:ASHT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+035332
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ASHST
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:ASHT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:ASHST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:ASHST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+035332
-TZOFFSETTO:+0400
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
TZNAME:ASHT
-DTSTART:19240502T000000
-RDATE:19240502T000000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ASHT
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:ASHT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ASHST
TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:ASHST
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:ASHST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:ASHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:ASHT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911027T000000
+RDATE:19911027T000000
+TZNAME:TMST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:TMT
-DTSTART:19911027T000000
-RDATE:19911027T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:TMT
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:TMT
-DTSTART:19920119T020000
-RDATE:19920119T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baghdad.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baghdad.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baghdad.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,72 +1,73 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Baghdad
X-LIC-LOCATION:Asia/Baghdad
BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:BMT
+TZOFFSETFROM:+025740
+TZOFFSETTO:+025736
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:AST
+TZOFFSETFROM:+025736
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19840930T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830331T000000
+TZNAME:ADT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:ADT
-DTSTART:19840401T000000
-RRULE:FREQ=YEARLY;UNTIL=19850331T210000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19840930T200000Z;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19850929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T220000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
+DTSTART:19840401T000000
+RRULE:FREQ=YEARLY;UNTIL=19850331T210000Z;BYMONTH=4
TZNAME:ADT
-DTSTART:19860330T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:ADT
-DTSTART:19910401T030000
-RRULE:FREQ=YEARLY;UNTIL=20070401T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19850929T020000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19911001T040000
-RRULE:FREQ=YEARLY;UNTIL=20071001T000000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+025740
-TZOFFSETTO:+025736
-TZNAME:BMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+025736
-TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19180101T000000
-RDATE:19180101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860330T010000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19910401T030000
+RRULE:FREQ=YEARLY;UNTIL=20070401T000000Z;BYMONTH=4
TZNAME:ADT
-DTSTART:19820501T000000
-RDATE:19820501T000000
-RDATE:19830331T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911001T040000
+RRULE:FREQ=YEARLY;UNTIL=20071001T000000Z;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bahrain.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bahrain.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bahrain.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Bahrain
X-LIC-LOCATION:Asia/Bahrain
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
TZOFFSETFROM:+032220
TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19720601T000000
+RDATE:19720601T000000
+TZNAME:AST
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19720601T000000
-RDATE:19720601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baku.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baku.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Baku.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,120 +1,116 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Baku
X-LIC-LOCATION:Asia/Baku
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:BAKST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:BAKT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z
+TZOFFSETFROM:+031924
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:BAKST
+TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:BAKT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T220000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
TZNAME:BAKST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:AZT
-DTSTART:19960101T000000
-RRULE:FREQ=YEARLY;UNTIL=19961231T200000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:AZST
-DTSTART:19970330T040000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:BAKT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:AZT
-DTSTART:19971026T050000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+031924
-TZOFFSETTO:+0300
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:BAKT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:BAKT
-DTSTART:19570301T000000
-RDATE:19570301T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+TZNAME:BAKST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:AZST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910830T000000
RDATE:19910830T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+RDATE:19960101T000000
+RDATE:19970101T000000
+TZNAME:AZST
TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:AZT
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910929T030000
RDATE:19910929T030000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:AZST
DTSTART:19920328T230000
RDATE:19920328T230000
+TZNAME:AZST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:AZT
DTSTART:19920926T230000
RDATE:19920926T230000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:AZST
DTSTART:19960331T050000
RDATE:19960331T050000
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T060000
+RDATE:19961027T060000
+TZNAME:AZT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T050000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:AZT
-DTSTART:19961027T060000
-RDATE:19961027T060000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bangkok.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bangkok.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bangkok.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Bangkok
X-LIC-LOCATION:Asia/Bangkok
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:BMT
TZOFFSETFROM:+064204
TZOFFSETTO:+064204
-TZNAME:BMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19200401T000000
+RDATE:19200401T000000
+TZNAME:ICT
TZOFFSETFROM:+064204
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19200401T000000
-RDATE:19200401T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Beirut.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Beirut.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Beirut.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +1,112 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Beirut
X-LIC-LOCATION:Asia/Beirut
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0222
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19230422T000000
+RDATE:19720622T000000
+RDATE:19780430T000000
+RDATE:19880601T000000
+RDATE:19890510T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201025T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19230916T000000
+RDATE:19780930T000000
+RDATE:19921004T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19570501T000000
+RRULE:FREQ=YEARLY;UNTIL=19610430T220000Z;BYMONTH=5
TZNAME:EEST
-DTSTART:19570501T000000
-RRULE:FREQ=YEARLY;UNTIL=19610430T220000Z
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19571001T000000
-RRULE:FREQ=YEARLY;UNTIL=19610930T210000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19721001T000000
+RRULE:FREQ=YEARLY;UNTIL=19770930T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19721001T000000
-RRULE:FREQ=YEARLY;UNTIL=19770930T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19730501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19730501T000000
-RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19840501T000000
+RRULE:FREQ=YEARLY;UNTIL=19870430T220000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19840501T000000
-RRULE:FREQ=YEARLY;UNTIL=19870430T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19841016T000000
+RRULE:FREQ=YEARLY;UNTIL=19911015T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19841016T000000
-RRULE:FREQ=YEARLY;UNTIL=19911015T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19900501T000000
+RRULE:FREQ=YEARLY;UNTIL=19920430T220000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19900501T000000
-RRULE:FREQ=YEARLY;UNTIL=19920430T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19930328T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19930328T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19930926T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19980926T210000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19991031T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0222
-TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:EET
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19200328T000000
-RDATE:19200328T000000
-RDATE:19210403T000000
-RDATE:19220326T000000
-RDATE:19230422T000000
-RDATE:19720622T000000
-RDATE:19780430T000000
-RDATE:19880601T000000
-RDATE:19890510T000000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19201025T000000
-RDATE:19201025T000000
-RDATE:19211003T000000
-RDATE:19221008T000000
-RDATE:19230916T000000
-RDATE:19780930T000000
-RDATE:19921004T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bishkek.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bishkek.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Bishkek.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,99 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Bishkek
X-LIC-LOCATION:Asia/Bishkek
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:FRUT
+TZOFFSETFROM:+045824
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:FRUST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:FRUST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:FRUST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:FRUT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:FRUT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:FRUT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:FRUT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:FRUST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
TZNAME:FRUST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T200000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
+TZOFFSETFROM:+0600
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910831T020000
+RDATE:19910831T020000
TZNAME:KGST
-DTSTART:19920412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=7,8,9,10,11,12,13;BYDAY=SU;UNTIL=19960406T190000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:KGT
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19960928T180000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920412T000000
+RRULE:FREQ=YEARLY;UNTIL=19960406T190000Z;BYDAY=SU;BYMONTHDAY=7,8,9,10,11,1
+ 2,13;BYMONTH=4
+TZNAME:KGST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:KGST
-DTSTART:19970330T023000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T213000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19960928T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KGT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:KGT
-DTSTART:19971026T023000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T203000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+045824
-TZOFFSETTO:+0500
-TZNAME:FRUT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T023000
+RRULE:FREQ=YEARLY;UNTIL=20050326T213000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KGST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:FRUT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:FRUST
-DTSTART:19910331T020000
-RDATE:19910331T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19971026T023000
+RRULE:FREQ=YEARLY;UNTIL=20041030T203000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:KGT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:KGT
-DTSTART:19910831T020000
-RDATE:19910831T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20050812T000000
+RDATE:20050812T000000
+TZNAME:KGT
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:KGT
-DTSTART:20050812T000000
-RDATE:20050812T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Brunei.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Brunei.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Brunei.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Brunei
X-LIC-LOCATION:Asia/Brunei
BEGIN:STANDARD
+DTSTART:19260301T000000
+RDATE:19260301T000000
+TZNAME:BNT
TZOFFSETFROM:+073940
TZOFFSETTO:+0730
-TZNAME:BNT
-DTSTART:19260301T000000
-RDATE:19260301T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:BNT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:BNT
-DTSTART:19330101T000000
-RDATE:19330101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Calcutta.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Calcutta.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Calcutta.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,37 +1,38 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Calcutta
X-LIC-LOCATION:Asia/Calcutta
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:HMT
TZOFFSETFROM:+055328
TZOFFSETTO:+055320
-TZNAME:HMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
TZOFFSETFROM:+055320
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19411001T000000
-RDATE:19411001T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0630
-TZOFFSETTO:+0530
-TZNAME:IST
DTSTART:19420515T000000
RDATE:19420515T000000
RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
-TZNAME:IST
-DTSTART:19420901T000000
-RDATE:19420901T000000
-END:DAYLIGHT
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Choibalsan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Choibalsan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Choibalsan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,86 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Choibalsan
X-LIC-LOCATION:Asia/Choibalsan
BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:ULAT
+TZOFFSETFROM:+0738
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:ULAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RDATE:19830401T000000
+TZNAME:CHOST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:CHOT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-TZNAME:CHOT
-DTSTART:19840930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19980926T140000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T150000Z;BYMONTH=4
+TZNAME:CHOST
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:CHOST
-DTSTART:19850331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T150000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T140000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CHOT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-TZNAME:CHOT
-DTSTART:20010929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SA;UNTIL=20060929T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CHOST
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:CHOST
-DTSTART:20020330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA;UNTIL=20060324T170000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0738
-TZOFFSETTO:+0700
-TZNAME:ULAT
-DTSTART:19050801T000000
-RDATE:19050801T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19780101T000000
-RDATE:19780101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:CHOST
+TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:CHOST
-DTSTART:19830401T000000
-RDATE:19830401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T160000Z;BYDAY=-1SA;BYMONTH=9
+TZNAME:CHOT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-TZNAME:CHOT
-DTSTART:19831001T000000
-RDATE:19831001T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T170000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:CHOST
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:CHOST
-DTSTART:19840401T000000
-RDATE:19840401T000000
-RDATE:20010428T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080331T000000
+RDATE:20080331T000000
+TZNAME:CHOST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-DTSTART:20080331T000000
-RDATE:20080331T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chongqing.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chongqing.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chongqing.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Chongqing
X-LIC-LOCATION:Asia/Chongqing
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:LONT
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800501T000000
+RDATE:19800501T000000
+TZNAME:CST
+TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+070620
-TZOFFSETTO:+0700
-TZNAME:LONT
-DTSTART:19280101T000000
-RDATE:19280101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800501T000000
-RDATE:19800501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chungking.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chungking.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Chungking.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Chungking
X-LIC-LOCATION:Asia/Chungking
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:LONT
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800501T000000
+RDATE:19800501T000000
+TZNAME:CST
+TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+070620
-TZOFFSETTO:+0700
-TZNAME:LONT
-DTSTART:19280101T000000
-RDATE:19280101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800501T000000
-RDATE:19800501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Colombo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Colombo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Colombo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Colombo
X-LIC-LOCATION:Asia/Colombo
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
TZOFFSETFROM:+051924
TZOFFSETTO:+051932
-TZNAME:MMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19060101T000000
+RDATE:19060101T000000
+TZNAME:IST
TZOFFSETFROM:+051932
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19060101T000000
-RDATE:19060101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420105T000000
+RDATE:19420105T000000
+TZNAME:IHST
TZOFFSETFROM:+0530
TZOFFSETTO:+0600
-TZNAME:IHST
-DTSTART:19420105T000000
-RDATE:19420105T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
TZOFFSETFROM:+0600
TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451016T020000
+RDATE:19451016T020000
TZNAME:IST
-DTSTART:19420901T000000
-RDATE:19420901T000000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0630
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19451016T020000
-RDATE:19451016T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19960525T000000
+RDATE:19960525T000000
+TZNAME:LKT
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
-TZNAME:LKT
-DTSTART:19960525T000000
-RDATE:19960525T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19961026T003000
+RDATE:19961026T003000
+TZNAME:LKT
TZOFFSETFROM:+0630
TZOFFSETTO:+0600
-TZNAME:LKT
-DTSTART:19961026T003000
-RDATE:19961026T003000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20060415T003000
+RDATE:20060415T003000
+TZNAME:IST
TZOFFSETFROM:+0600
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:20060415T003000
-RDATE:20060415T003000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dacca.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dacca.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dacca.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,50 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Dacca
X-LIC-LOCATION:Asia/Dacca
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
TZOFFSETFROM:+060140
TZOFFSETTO:+055320
-TZNAME:HMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
TZOFFSETFROM:+055320
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19411001T000000
-RDATE:19411001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+TZNAME:IST
TZOFFSETFROM:+0630
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19420515T000000
-RDATE:19420515T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:BURT
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19420901T000000
-RDATE:19420901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:DACT
TZOFFSETFROM:+0630
TZOFFSETTO:+0600
-TZNAME:DACT
-DTSTART:19510930T000000
-RDATE:19510930T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:BDT
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20090101T000000
+RDATE:20090101T000000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090619T230000
+RDATE:20090619T230000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091231T235900
+RDATE:20091231T235900
TZNAME:BDT
-DTSTART:19710326T000000
-RDATE:19710326T000000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Damascus.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Damascus.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Damascus.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,160 +1,164 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Damascus
X-LIC-LOCATION:Asia/Damascus
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022512
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200418T020000
+RRULE:FREQ=YEARLY;UNTIL=19230415T000000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201003T020000
+RRULE:FREQ=YEARLY;UNTIL=19231006T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19620429T020000
+RDATE:19620429T020000
+RDATE:19660424T020000
+RDATE:19860216T020000
+RDATE:19870301T020000
+RDATE:19880315T020000
+RDATE:19890331T020000
+RDATE:19900401T020000
+RDATE:19910401T000000
+RDATE:19920408T000000
+RDATE:19930326T000000
+RDATE:20070330T000000
+RDATE:20080404T000000
+RDATE:20090327T000000
TZNAME:EEST
-DTSTART:19200418T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19230415T000000Z
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19621001T020000
+RDATE:19621001T020000
+RDATE:19630930T020000
+RDATE:19641001T020000
+RDATE:19650930T020000
+RDATE:19861009T020000
+RDATE:19891001T020000
+RDATE:19900930T020000
+RDATE:19930925T000000
+RDATE:20060922T000000
+RDATE:20071102T000000
+RDATE:20081101T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19201003T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19231006T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19630501T020000
+RRULE:FREQ=YEARLY;UNTIL=19650501T000000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19630501T020000
-RRULE:FREQ=YEARLY;UNTIL=19650501T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19661001T020000
+RRULE:FREQ=YEARLY;UNTIL=19760930T230000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19661001T020000
-RRULE:FREQ=YEARLY;UNTIL=19760930T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670501T020000
+RRULE:FREQ=YEARLY;UNTIL=19780501T000000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19670501T020000
-RRULE:FREQ=YEARLY;UNTIL=19780501T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19770901T020000
+RRULE:FREQ=YEARLY;UNTIL=19780831T230000Z;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19770901T020000
-RRULE:FREQ=YEARLY;UNTIL=19780831T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830409T020000
+RRULE:FREQ=YEARLY;UNTIL=19840409T000000Z;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19830409T020000
-RRULE:FREQ=YEARLY;UNTIL=19840409T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831001T020000
+RRULE:FREQ=YEARLY;UNTIL=19840930T230000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19831001T020000
-RRULE:FREQ=YEARLY;UNTIL=19840930T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19871031T020000
+RRULE:FREQ=YEARLY;UNTIL=19881030T230000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19871031T020000
-RRULE:FREQ=YEARLY;UNTIL=19881030T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911001T000000
+RRULE:FREQ=YEARLY;UNTIL=19920930T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19911001T000000
-RRULE:FREQ=YEARLY;UNTIL=19920930T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19940401T000000
+RRULE:FREQ=YEARLY;UNTIL=19960331T220000Z;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19940401T000000
-RRULE:FREQ=YEARLY;UNTIL=19960331T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19941001T000000
+RRULE:FREQ=YEARLY;UNTIL=20050930T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19941001T000000
-RRULE:FREQ=YEARLY;UNTIL=20050930T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19970331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980329T220000Z;BYDAY=-1MO;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1MO;UNTIL=19980329T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
+DTSTART:19990401T000000
+RRULE:FREQ=YEARLY;UNTIL=20060331T220000Z;BYMONTH=4
TZNAME:EEST
-DTSTART:19990401T000000
-RRULE:FREQ=YEARLY;UNTIL=20060331T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20080404T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20091030T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20081101T000000
-RRULE:FREQ=YEARLY
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+022512
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19200101T000000
-RDATE:19200101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20100402T000000
+RRULE:FREQ=YEARLY;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19620429T020000
-RDATE:19620429T020000
-RDATE:19660424T020000
-RDATE:19860216T020000
-RDATE:19870301T020000
-RDATE:19880315T020000
-RDATE:19890331T020000
-RDATE:19900401T020000
-RDATE:19910401T000000
-RDATE:19920408T000000
-RDATE:19930326T000000
-RDATE:20070330T000000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19621001T020000
-RDATE:19621001T020000
-RDATE:19630930T020000
-RDATE:19641001T020000
-RDATE:19650930T020000
-RDATE:19861009T020000
-RDATE:19891001T020000
-RDATE:19900930T020000
-RDATE:19930925T000000
-RDATE:20060922T000000
-RDATE:20071102T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dhaka.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dhaka.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dhaka.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,50 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Dhaka
X-LIC-LOCATION:Asia/Dhaka
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
TZOFFSETFROM:+060140
TZOFFSETTO:+055320
-TZNAME:HMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
TZOFFSETFROM:+055320
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19411001T000000
-RDATE:19411001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+TZNAME:IST
TZOFFSETFROM:+0630
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19420515T000000
-RDATE:19420515T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:BURT
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19420901T000000
-RDATE:19420901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:DACT
TZOFFSETFROM:+0630
TZOFFSETTO:+0600
-TZNAME:DACT
-DTSTART:19510930T000000
-RDATE:19510930T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:BDT
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20090101T000000
+RDATE:20090101T000000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090619T230000
+RDATE:20090619T230000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091231T235900
+RDATE:20091231T235900
TZNAME:BDT
-DTSTART:19710326T000000
-RDATE:19710326T000000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dili.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dili.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dili.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Dili
X-LIC-LOCATION:Asia/Dili
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:TLT
TZOFFSETFROM:+082220
TZOFFSETTO:+0800
-TZNAME:TLT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420221T230000
+RDATE:19420221T230000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420221T230000
-RDATE:19420221T230000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450923T000000
+RDATE:19450923T000000
+TZNAME:TLT
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:TLT
-DTSTART:19450923T000000
-RDATE:19450923T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19760503T000000
+RDATE:19760503T000000
+TZNAME:CIT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19760503T000000
-RDATE:19760503T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20000917T000000
+RDATE:20000917T000000
+TZNAME:TLT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:TLT
-DTSTART:20000917T000000
-RDATE:20000917T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dubai.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dubai.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dubai.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Dubai
X-LIC-LOCATION:Asia/Dubai
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
TZOFFSETFROM:+034112
TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dushanbe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dushanbe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Dushanbe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Dushanbe
X-LIC-LOCATION:Asia/Dushanbe
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:DUSST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:DUST
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z
+TZOFFSETFROM:+043512
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:DUSST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:DUST
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:DUSST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:DUSST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T200000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+043512
-TZOFFSETTO:+0500
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
TZNAME:DUST
-DTSTART:19240502T000000
-RDATE:19240502T000000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:DUST
+TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:DUST
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:DUSST
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:DUSST
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:DUSST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910909T030000
+RDATE:19910909T030000
+TZNAME:TJT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:TJT
-DTSTART:19910909T030000
-RDATE:19910909T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Gaza.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Gaza.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Gaza.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,36 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Gaza
X-LIC-LOCATION:Asia/Gaza
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
+DTSTART:19001001T000000
+RDATE:19001001T000000
TZNAME:EET
-DTSTART:19421101T000000
-RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19571001T000000
-RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19590501T010000
-RRULE:FREQ=YEARLY;UNTIL=19670430T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19590930T030000
-RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19880903T000000
-RRULE:FREQ=YEARLY;UNTIL=19890902T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19960405T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR;UNTIL=19980402T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19960920T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR;UNTIL=19980917T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19990416T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3FR;UNTIL=20050414T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19991015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3FR;UNTIL=20031016T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20060401T000000
-RRULE:FREQ=YEARLY
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20080828T020000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=-1TH
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+021752
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19001001T000000
-RDATE:19001001T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EET
DTSTART:19400601T000000
RDATE:19400601T000000
RDATE:19430401T020000
RDATE:19440401T000000
RDATE:19450416T000000
RDATE:19460416T020000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19451101T020000
RDATE:19451101T020000
RDATE:19461101T000000
@@ -111,28 +39,53 @@
RDATE:20051004T020000
RDATE:20060922T000000
RDATE:20070913T020000
+RDATE:20080829T020000
+RDATE:20090904T020000
+RDATE:20100811T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19480515T000000
RDATE:19480515T000000
RDATE:19960101T000000
RDATE:19990101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
DTSTART:19570510T000000
RDATE:19570510T000000
RDATE:19580501T000000
+RDATE:20090327T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:IST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590501T010000
+RRULE:FREQ=YEARLY;UNTIL=19670430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19590930T030000
+RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670605T000000
RDATE:19670605T000000
RDATE:19741013T000000
@@ -140,17 +93,19 @@
RDATE:19850915T000000
RDATE:19860907T000000
RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
RDATE:19900826T000000
RDATE:19910901T000000
RDATE:19920906T000000
RDATE:19930905T000000
RDATE:19940828T000000
RDATE:19950903T000000
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
DTSTART:19740707T000000
RDATE:19740707T000000
RDATE:19750420T000000
@@ -165,6 +120,65 @@
RDATE:19930402T000000
RDATE:19940401T000000
RDATE:19950331T000000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960405T000000
+RRULE:FREQ=YEARLY;UNTIL=19980402T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19960920T010000
+RRULE:FREQ=YEARLY;UNTIL=19980917T220000Z;BYDAY=3FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990416T000000
+RRULE:FREQ=YEARLY;UNTIL=20050414T220000Z;BYDAY=3FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19991015T000000
+RRULE:FREQ=YEARLY;UNTIL=20031016T210000Z;BYDAY=3FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060401T000000
+RRULE:FREQ=YEARLY;UNTIL=20080331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20100327T000100
+RRULE:FREQ=YEARLY;BYDAY=-1SA;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20100903T020000
+RDATE:20100903T020000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110902T020000
+RRULE:FREQ=YEARLY;BYDAY=1FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Harbin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Harbin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Harbin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,58 +1,60 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Harbin
X-LIC-LOCATION:Asia/Harbin
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:CHAT
TZOFFSETFROM:+082644
TZOFFSETTO:+0830
-TZNAME:CHAT
-DTSTART:19280101T000000
-RDATE:19280101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0830
-TZOFFSETTO:+0800
-TZNAME:CST
DTSTART:19320301T000000
RDATE:19320301T000000
RDATE:19800501T000000
+TZNAME:CST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:CHAT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CHAT
-DTSTART:19400101T000000
-RDATE:19400101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19660501T000000
+RDATE:19660501T000000
+TZNAME:CHAT
TZOFFSETFROM:+0900
TZOFFSETTO:+0830
-TZNAME:CHAT
-DTSTART:19660501T000000
-RDATE:19660501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ho_Chi_Minh.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ho_Chi_Minh.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ho_Chi_Minh.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ho_Chi_Minh
X-LIC-LOCATION:Asia/Ho_Chi_Minh
BEGIN:STANDARD
+DTSTART:19060609T000000
+RDATE:19060609T000000
+TZNAME:SMT
TZOFFSETFROM:+070640
TZOFFSETTO:+070620
-TZNAME:SMT
-DTSTART:19060609T000000
-RDATE:19060609T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:ICT
TZOFFSETFROM:+070620
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19110311T000100
-RDATE:19110311T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120501T000000
+RDATE:19120501T000000
+TZNAME:ICT
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:ICT
-DTSTART:19120501T000000
-RDATE:19120501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310501T000000
+RDATE:19310501T000000
+TZNAME:ICT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19310501T000000
-RDATE:19310501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hong_Kong.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hong_Kong.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hong_Kong.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,90 +1,114 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Hong_Kong
X-LIC-LOCATION:Asia/Hong_Kong
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19041030T000000
+RDATE:19041030T000000
+TZNAME:HKST
+TZOFFSETFROM:+073636
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19481031T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19521025T183000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
+DTSTART:19410401T033000
+RDATE:19410401T033000
+RDATE:19460420T033000
+RDATE:19470413T033000
+RDATE:19480502T033000
+RDATE:19731230T033000
+RDATE:19790513T033000
TZNAME:HKST
-DTSTART:19490403T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19530404T193000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:HKST
-DTSTART:19540321T033000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=18,19,20,21,22,23,24;BYDAY=SU;UNTIL=19640321T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19410930T033000
+RDATE:19410930T033000
+RDATE:19461201T033000
+RDATE:19471230T033000
+RDATE:19521025T033000
+RDATE:19531101T033000
+RDATE:19541031T033000
+RDATE:19791021T033000
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19551106T033000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=19641031T183000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19411225T000000
+RDATE:19411225T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450915T000000
+RDATE:19450915T000000
TZNAME:HKST
-DTSTART:19650418T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19770416T193000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19481031T033000
+RRULE:FREQ=YEARLY;UNTIL=19511027T183000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19651017T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19771015T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19490403T033000
+RRULE:FREQ=YEARLY;UNTIL=19530404T193000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:HKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540321T033000
+RRULE:FREQ=YEARLY;UNTIL=19640321T193000Z;BYDAY=-2SU;BYMONTH=3
TZNAME:HKST
-DTSTART:19790513T033000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19800510T193000Z
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19551106T033000
+RRULE:FREQ=YEARLY;UNTIL=19641031T183000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19791021T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19801018T183000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+073636
-TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19041030T000000
-RDATE:19041030T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650418T033000
+RRULE:FREQ=YEARLY;UNTIL=19730421T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:HKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:HKST
-DTSTART:19460420T033000
-RDATE:19460420T033000
-RDATE:19470413T033000
-RDATE:19480502T033000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651017T033000
+RRULE:FREQ=YEARLY;UNTIL=19761016T183000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=10
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19461201T033000
-RDATE:19461201T033000
-RDATE:19471230T033000
-RDATE:19531101T033000
-RDATE:19541031T033000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740421T033000
+RDATE:19740421T033000
+TZNAME:HKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19750420T033000
+RRULE:FREQ=YEARLY;UNTIL=19760417T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:HKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hovd.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hovd.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Hovd.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Hovd
X-LIC-LOCATION:Asia/Hovd
+BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:HOVT
+TZOFFSETFROM:+060636
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:HOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:HOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:HOVST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:HOVT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T160000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:HOVT
-DTSTART:19840930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19980926T160000Z
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T170000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:HOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:HOVST
-DTSTART:19850331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T170000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
-TZNAME:HOVT
-DTSTART:20010929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SA;UNTIL=20060929T180000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:HOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:HOVST
-DTSTART:20020330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA;UNTIL=20060324T190000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+060636
-TZOFFSETTO:+0600
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T180000Z;BYDAY=-1SA;BYMONTH=9
TZNAME:HOVT
-DTSTART:19050801T000000
-RDATE:19050801T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:HOVT
-DTSTART:19780101T000000
-RDATE:19780101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:HOVT
-DTSTART:19831001T000000
-RDATE:19831001T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T190000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:HOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:HOVST
-DTSTART:20010428T020000
-RDATE:20010428T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Irkutsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Irkutsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Irkutsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,107 +1,108 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Irkutsk
X-LIC-LOCATION:Asia/Irkutsk
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+065720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200125T000000
+RDATE:19200125T000000
+TZNAME:IRKT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:IRKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:IRKST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T150000Z;BYMONTH=10
+TZNAME:IRKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:IRKT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T150000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:IRKT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T180000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T180000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:IRKST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T180000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:IRKST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0800
TZOFFSETTO:+0800
-TZNAME:IRKT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T180000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:IRKT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+065720
-TZOFFSETTO:+065720
-TZNAME:IMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+065720
+TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:IRKT
-DTSTART:19200125T000000
-RDATE:19200125T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:IRKT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:IRKST
TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:IRKST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:IRKT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:IRKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:IRKST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:IRKT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Istanbul.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Istanbul.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Istanbul.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,139 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Istanbul
X-LIC-LOCATION:Asia/Istanbul
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19241001T000000
-RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19470420T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19480417T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19471005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501007T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700503T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19720506T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19721007T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19751026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19761030T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19770403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19780401T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:TRT
-DTSTART:19791015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=MO;UNTIL=19821010T200000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19860330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900325T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19860928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900930T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19910331T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20060325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061028T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20071028T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
TZOFFSETFROM:+015552
TZOFFSETTO:+015656
-TZNAME:IMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19101001T000000
+RDATE:19101001T000000
+TZNAME:EEST
TZOFFSETFROM:+015656
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19101001T000000
-RDATE:19101001T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
DTSTART:19160501T000000
RDATE:19160501T000000
RDATE:19200328T000000
@@ -155,11 +41,11 @@
RDATE:19740331T020000
RDATE:19750330T000000
RDATE:19760601T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19161001T000000
RDATE:19161001T000000
RDATE:19201025T000000
@@ -177,43 +63,174 @@
RDATE:19741103T050000
RDATE:19771016T000000
RDATE:19850928T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19470420T000000
+RRULE:FREQ=YEARLY;UNTIL=19480417T220000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T000000
+RRULE:FREQ=YEARLY;UNTIL=19501007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700503T000000
+RRULE:FREQ=YEARLY;UNTIL=19720506T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19701004T000000
+RRULE:FREQ=YEARLY;UNTIL=19721007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19761030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19780401T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19781015T000000
RDATE:19781015T000000
-RDATE:19800406T030000
-RDATE:19830731T000000
-END:DAYLIGHT
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T030000
+RDATE:19790401T030000
+TZNAME:TRST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19790401T030000
-RDATE:19790401T030000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19791015T000000
+RRULE:FREQ=YEARLY;UNTIL=19821010T200000Z;BYDAY=-3MO;BYMONTH=10
+TZNAME:TRT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:TRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800406T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19830731T000000
+RDATE:19830731T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831002T000000
RDATE:19831002T000000
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19850420T000000
+RDATE:19850420T000000
+TZNAME:EEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19850420T000000
-RDATE:19850420T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T010000
+RRULE:FREQ=YEARLY;UNTIL=20060325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061028T230000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20070101T000000
RDATE:20070101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jakarta.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jakarta.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jakarta.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Jakarta
X-LIC-LOCATION:Asia/Jakarta
BEGIN:STANDARD
+DTSTART:18670810T000000
+RDATE:18670810T000000
+TZNAME:JMT
TZOFFSETFROM:+070712
TZOFFSETTO:+070712
-TZNAME:JMT
-DTSTART:18670810T000000
-RDATE:18670810T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19231231T234712
+RDATE:19231231T234712
+TZNAME:JAVT
TZOFFSETFROM:+070712
TZOFFSETTO:+0720
-TZNAME:JAVT
-DTSTART:19231231T234712
-RDATE:19231231T234712
END:STANDARD
BEGIN:STANDARD
+DTSTART:19321101T000000
+RDATE:19321101T000000
+TZNAME:WIT
TZOFFSETFROM:+0720
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19321101T000000
-RDATE:19321101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420323T000000
+RDATE:19420323T000000
+TZNAME:JST
TZOFFSETFROM:+0730
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420323T000000
-RDATE:19420323T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450923T000000
+RDATE:19450923T000000
+TZNAME:WIT
TZOFFSETFROM:+0900
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19450923T000000
-RDATE:19450923T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19480501T000000
+RDATE:19480501T000000
+TZNAME:WIT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:WIT
-DTSTART:19480501T000000
-RDATE:19480501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19500501T000000
+RDATE:19500501T000000
+TZNAME:WIT
TZOFFSETFROM:+0800
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19500501T000000
-RDATE:19500501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:WIT
TZOFFSETFROM:+0730
TZOFFSETTO:+0700
-TZNAME:WIT
-DTSTART:19640101T000000
-RDATE:19640101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jayapura.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jayapura.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jayapura.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Jayapura
X-LIC-LOCATION:Asia/Jayapura
BEGIN:STANDARD
+DTSTART:19321101T000000
+RDATE:19321101T000000
+TZNAME:EIT
TZOFFSETFROM:+092248
TZOFFSETTO:+0900
-TZNAME:EIT
-DTSTART:19321101T000000
-RDATE:19321101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19440901T000000
+RDATE:19440901T000000
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19440901T000000
-RDATE:19440901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:EIT
TZOFFSETFROM:+0930
TZOFFSETTO:+0900
-TZNAME:EIT
-DTSTART:19640101T000000
-RDATE:19640101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jerusalem.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jerusalem.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Jerusalem.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,88 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Jerusalem
X-LIC-LOCATION:Asia/Jerusalem
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19421101T000000
-RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19481101T020000
-RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19880903T000000
-RRULE:FREQ=YEARLY;UNTIL=19890902T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20060331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20100326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20100326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20150327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20150327T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20170331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20210326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20210326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20230331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20320326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20320326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20340331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20370327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20370327T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+022056
-TZOFFSETTO:+022040
-TZNAME:JMT
DTSTART:18800101T000000
RDATE:18800101T000000
+TZNAME:JMT
+TZOFFSETFROM:+022056
+TZOFFSETTO:+022040
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+022040
-TZOFFSETTO:+0200
-TZNAME:IST
DTSTART:19180101T000000
RDATE:19180101T000000
+TZNAME:IST
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
DTSTART:19400601T000000
RDATE:19400601T000000
RDATE:19430401T020000
@@ -123,13 +60,19 @@
RDATE:20050401T020000
RDATE:20110401T020000
RDATE:20160401T020000
-RDATE:20220401T020000
-RDATE:20330401T020000
+RDATE:20170331T020000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:IST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:IST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19451101T020000
RDATE:19451101T020000
RDATE:19461101T000000
@@ -146,6 +89,8 @@
RDATE:19850915T000000
RDATE:19860907T000000
RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
RDATE:19900826T000000
RDATE:19910901T000000
RDATE:19920906T000000
@@ -174,40 +119,46 @@
RDATE:20150920T020000
RDATE:20161009T020000
RDATE:20170924T020000
-RDATE:20180916T020000
-RDATE:20191006T020000
-RDATE:20200927T020000
-RDATE:20210912T020000
-RDATE:20221002T020000
-RDATE:20230924T020000
-RDATE:20241006T020000
-RDATE:20250928T020000
-RDATE:20260920T020000
-RDATE:20271010T020000
-RDATE:20280924T020000
-RDATE:20290916T020000
-RDATE:20301006T020000
-RDATE:20310921T020000
-RDATE:20320912T020000
-RDATE:20331002T020000
-RDATE:20340917T020000
-RDATE:20351007T020000
-RDATE:20360928T020000
-RDATE:20370913T020000
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0400
-TZNAME:IDDT
DTSTART:19480523T000000
RDATE:19480523T000000
+TZNAME:IDDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+TZNAME:IDT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19481101T020000
+RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060331T020000
+RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
TZNAME:IDT
-DTSTART:19480901T000000
-RDATE:19480901T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20120330T020000
+RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kabul.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kabul.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kabul.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kabul
X-LIC-LOCATION:Asia/Kabul
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AFT
TZOFFSETFROM:+043648
TZOFFSETTO:+0400
-TZNAME:AFT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:AFT
TZOFFSETFROM:+0400
TZOFFSETTO:+0430
-TZNAME:AFT
-DTSTART:19450101T000000
-RDATE:19450101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kamchatka.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kamchatka.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kamchatka.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,116 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kamchatka
X-LIC-LOCATION:Asia/Kamchatka
+BEGIN:STANDARD
+DTSTART:19221110T000000
+RDATE:19221110T000000
+TZNAME:PETT
+TZOFFSETFROM:+103436
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:PETST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T120000Z;BYMONTH=4
+TZNAME:PETST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:PETST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T120000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T110000Z;BYMONTH=10
+TZNAME:PETT
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T110000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T140000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PETT
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T140000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T140000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PETST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
TZNAME:PETST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T140000Z
-END:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:PETT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:PETST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:PETST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:PETT
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T140000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20090328T140000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PETST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T140000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PETT
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+103436
-TZOFFSETTO:+1100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20091024T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PETT
-DTSTART:19221110T000000
-RDATE:19221110T000000
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
+DTSTART:20101031T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:PETT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-TZNAME:PETST
-DTSTART:19910331T020000
-RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:PETT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:20110327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:PETST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
-TZNAME:PETT
-DTSTART:19920926T230000
-RDATE:19920926T230000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Karachi.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Karachi.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Karachi.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,59 +1,62 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Karachi
X-LIC-LOCATION:Asia/Karachi
BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:IST
TZOFFSETFROM:+042812
TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
TZNAME:IST
-DTSTART:19070101T000000
-RDATE:19070101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
TZNAME:IST
-DTSTART:19420901T000000
-RDATE:19420901T000000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0630
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19451015T000000
-RDATE:19451015T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:KART
TZOFFSETFROM:+0530
TZOFFSETTO:+0500
-TZNAME:KART
-DTSTART:19510930T000000
-RDATE:19510930T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:PKST
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:PKT
-DTSTART:19710326T000000
-RDATE:19710326T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:PKST
DTSTART:20020407T000100
RDATE:20020407T000100
RDATE:20080601T000000
+RDATE:20090415T000000
+TZNAME:PKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:PKT
DTSTART:20021006T000100
RDATE:20021006T000100
RDATE:20081101T000000
+RDATE:20091101T000000
+TZNAME:PKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kashgar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kashgar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kashgar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,50 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kashgar
X-LIC-LOCATION:Asia/Kashgar
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KAST
TZOFFSETFROM:+050356
TZOFFSETTO:+0530
-TZNAME:KAST
-DTSTART:19280101T000000
-RDATE:19280101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:KAST
TZOFFSETFROM:+0530
TZOFFSETTO:+0500
-TZNAME:KAST
-DTSTART:19400101T000000
-RDATE:19400101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19800501T000000
+RDATE:19800501T000000
+TZNAME:CST
TZOFFSETFROM:+0500
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
TZNAME:CST
-DTSTART:19800501T000000
-RDATE:19800501T000000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kathmandu.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Asia/Kathmandu.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kathmandu.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kathmandu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kathmandu
+X-LIC-LOCATION:Asia/Kathmandu
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:IST
+TZOFFSETFROM:+054116
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:NPT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0545
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Katmandu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Katmandu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Katmandu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Katmandu
X-LIC-LOCATION:Asia/Katmandu
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:IST
TZOFFSETFROM:+054116
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:NPT
TZOFFSETFROM:+0530
TZOFFSETTO:+0545
-TZNAME:NPT
-DTSTART:19860101T000000
-RDATE:19860101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kolkata.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kolkata.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kolkata.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,37 +1,38 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kolkata
X-LIC-LOCATION:Asia/Kolkata
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:HMT
TZOFFSETFROM:+055328
TZOFFSETTO:+055320
-TZNAME:HMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
TZOFFSETFROM:+055320
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19411001T000000
-RDATE:19411001T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0630
-TZOFFSETTO:+0530
-TZNAME:IST
DTSTART:19420515T000000
RDATE:19420515T000000
RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
-TZNAME:IST
-DTSTART:19420901T000000
-RDATE:19420901T000000
-END:DAYLIGHT
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Krasnoyarsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Krasnoyarsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Krasnoyarsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Krasnoyarsk
X-LIC-LOCATION:Asia/Krasnoyarsk
+BEGIN:STANDARD
+DTSTART:19200106T000000
+RDATE:19200106T000000
+TZNAME:KRAT
+TZOFFSETFROM:+061120
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:KRAST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:KRAST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:KRAT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:KRAT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:KRAT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T190000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:KRAST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T190000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:KRAST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0800
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
TZOFFSETTO:+0700
-TZNAME:KRAT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T190000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:KRAT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+061120
+TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:KRAT
-DTSTART:19200106T000000
-RDATE:19200106T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:KRAT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:KRAST
TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:KRAST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+0800
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:KRAT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:KRAST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:KRAT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuala_Lumpur.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuala_Lumpur.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuala_Lumpur.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kuala_Lumpur
X-LIC-LOCATION:Asia/Kuala_Lumpur
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:SMT
TZOFFSETFROM:+064646
TZOFFSETTO:+065525
-TZNAME:SMT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19050601T000000
+RDATE:19050601T000000
+TZNAME:MALT
TZOFFSETFROM:+065525
TZOFFSETTO:+0700
-TZNAME:MALT
-DTSTART:19050601T000000
-RDATE:19050601T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:MALST
TZOFFSETFROM:+0700
TZOFFSETTO:+0720
-TZNAME:MALST
-DTSTART:19330101T000000
-RDATE:19330101T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0720
-TZNAME:MALT
-DTSTART:19360101T000000
-RDATE:19360101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19410901T000000
+RDATE:19410901T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19410901T000000
-RDATE:19410901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
TZOFFSETFROM:+0730
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420216T000000
-RDATE:19420216T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:MALT
TZOFFSETFROM:+0900
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19450912T000000
-RDATE:19450912T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:MYT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:MYT
-DTSTART:19820101T000000
-RDATE:19820101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuching.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuching.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuching.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kuching
X-LIC-LOCATION:Asia/Kuching
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0820
-TZNAME:BORTST
-DTSTART:19350914T000000
-RRULE:FREQ=YEARLY;UNTIL=19410913T160000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0820
-TZOFFSETTO:+0800
+DTSTART:19260301T000000
+RDATE:19260301T000000
TZNAME:BORT
-DTSTART:19351214T000000
-RRULE:FREQ=YEARLY;UNTIL=19411213T154000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+072120
TZOFFSETTO:+0730
-TZNAME:BORT
-DTSTART:19260301T000000
-RDATE:19260301T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:BORST
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19350914T000000
+RRULE:FREQ=YEARLY;UNTIL=19410913T160000Z;BYMONTH=9
+TZNAME:BORTST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0820
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19351214T000000
+RRULE:FREQ=YEARLY;UNTIL=19411213T154000Z;BYMONTH=12
TZNAME:BORT
-DTSTART:19330101T000000
-RDATE:19330101T000000
+TZOFFSETFROM:+0820
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420216T000000
-RDATE:19420216T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:BORT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:BORT
-DTSTART:19450912T000000
-RDATE:19450912T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:MYT
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
-TZNAME:MYT
-DTSTART:19820101T000000
-RDATE:19820101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuwait.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuwait.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Kuwait.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Kuwait
X-LIC-LOCATION:Asia/Kuwait
BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:AST
TZOFFSETFROM:+031156
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19500101T000000
-RDATE:19500101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macao.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macao.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macao.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,112 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Macao
X-LIC-LOCATION:Asia/Macao
+BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:MOST
+TZOFFSETFROM:+073420
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19610319T033000
+RRULE:FREQ=YEARLY;UNTIL=19620317T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19610319T033000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19620317T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611105T033000
+RRULE:FREQ=YEARLY;UNTIL=19641031T183000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19611105T033000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=19641031T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19630317T000000
+RDATE:19630317T000000
+RDATE:19640322T033000
+RDATE:19650321T000000
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19660417T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19710417T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T000000
+RDATE:19651031T000000
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19661016T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19711016T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19660417T033000
+RRULE:FREQ=YEARLY;UNTIL=19710417T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19720416T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19740420T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19661016T033000
+RRULE:FREQ=YEARLY;UNTIL=19711016T183000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=10
TZNAME:MOT
-DTSTART:19721015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19731020T150000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19741020T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19771015T183000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
+DTSTART:19720416T000000
+RRULE:FREQ=YEARLY;UNTIL=19740420T160000Z;BYDAY=3SU;BYMONTH=4
TZNAME:MOST
-DTSTART:19750420T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19770416T193000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19780416T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19800419T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721015T000000
+RRULE:FREQ=YEARLY;UNTIL=19731020T150000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19781015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19801018T150000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+073420
+DTSTART:19741020T033000
+RRULE:FREQ=YEARLY;UNTIL=19771015T183000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750420T033000
+RRULE:FREQ=YEARLY;UNTIL=19770416T193000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19780416T000000
+RRULE:FREQ=YEARLY;UNTIL=19800419T160000Z;BYDAY=3SU;BYMONTH=4
TZNAME:MOST
-DTSTART:19630317T000000
-RDATE:19630317T000000
-RDATE:19640322T033000
-RDATE:19650321T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19781015T000000
+RRULE:FREQ=YEARLY;UNTIL=19801018T150000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19651031T000000
-RDATE:19651031T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19991220T000000
+RDATE:19991220T000000
+TZNAME:CST
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19991220T000000
-RDATE:19991220T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Macau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,112 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Macau
X-LIC-LOCATION:Asia/Macau
+BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:MOST
+TZOFFSETFROM:+073420
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19610319T033000
+RRULE:FREQ=YEARLY;UNTIL=19620317T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19610319T033000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19620317T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611105T033000
+RRULE:FREQ=YEARLY;UNTIL=19641031T183000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19611105T033000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=19641031T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19630317T000000
+RDATE:19630317T000000
+RDATE:19640322T033000
+RDATE:19650321T000000
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19660417T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19710417T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T000000
+RDATE:19651031T000000
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19661016T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19711016T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19660417T033000
+RRULE:FREQ=YEARLY;UNTIL=19710417T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19720416T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19740420T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19661016T033000
+RRULE:FREQ=YEARLY;UNTIL=19711016T183000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=10
TZNAME:MOT
-DTSTART:19721015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19731020T150000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19741020T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19771015T183000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
+DTSTART:19720416T000000
+RRULE:FREQ=YEARLY;UNTIL=19740420T160000Z;BYDAY=3SU;BYMONTH=4
TZNAME:MOST
-DTSTART:19750420T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19770416T193000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:MOST
-DTSTART:19780416T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19800419T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721015T000000
+RRULE:FREQ=YEARLY;UNTIL=19731020T150000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19781015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19801018T150000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+073420
+DTSTART:19741020T033000
+RRULE:FREQ=YEARLY;UNTIL=19771015T183000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750420T033000
+RRULE:FREQ=YEARLY;UNTIL=19770416T193000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:MOST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19780416T000000
+RRULE:FREQ=YEARLY;UNTIL=19800419T160000Z;BYDAY=3SU;BYMONTH=4
TZNAME:MOST
-DTSTART:19630317T000000
-RDATE:19630317T000000
-RDATE:19640322T033000
-RDATE:19650321T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19781015T000000
+RRULE:FREQ=YEARLY;UNTIL=19801018T150000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:MOT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:MOT
-DTSTART:19651031T000000
-RDATE:19651031T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19991220T000000
+RDATE:19991220T000000
+TZNAME:CST
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19991220T000000
-RDATE:19991220T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Magadan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Magadan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Magadan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Magadan
X-LIC-LOCATION:Asia/Magadan
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:MAGT
+TZOFFSETFROM:+100312
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z;BYMONTH=4
+TZNAME:MAGST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:MAGST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z;BYMONTH=10
+TZNAME:MAGT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:MAGT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:MAGT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T150000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T150000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:MAGST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T150000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:MAGST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1200
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1100
-TZNAME:MAGT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T150000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1100
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:MAGT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+100312
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:MAGT
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:MAGT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:MAGST
TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:MAGST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+1200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:MAGT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:MAGST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:MAGST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:MAGT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Makassar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Makassar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Makassar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Makassar
X-LIC-LOCATION:Asia/Makassar
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:MMT
TZOFFSETFROM:+075736
TZOFFSETTO:+075736
-TZNAME:MMT
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19321101T000000
+RDATE:19321101T000000
+TZNAME:CIT
TZOFFSETFROM:+075736
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19321101T000000
-RDATE:19321101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420209T000000
+RDATE:19420209T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420209T000000
-RDATE:19420209T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450923T000000
+RDATE:19450923T000000
+TZNAME:CIT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19450923T000000
-RDATE:19450923T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Manila.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Manila.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Manila.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,48 +1,48 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Manila
X-LIC-LOCATION:Asia/Manila
BEGIN:STANDARD
-TZOFFSETFROM:-1556
-TZOFFSETTO:+0804
-TZNAME:LMT
-DTSTART:18441231T000000
-RDATE:18441231T000000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18990511T000000
+RDATE:18990511T000000
+TZNAME:PHST
TZOFFSETFROM:+0804
TZOFFSETTO:+0800
-TZNAME:PHT
-DTSTART:18990511T000000
-RDATE:18990511T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:PHST
DTSTART:19361101T000000
RDATE:19361101T000000
RDATE:19540412T000000
RDATE:19780322T000000
+TZNAME:PHST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:PHT
DTSTART:19370201T000000
RDATE:19370201T000000
-RDATE:19441101T000000
RDATE:19540701T000000
RDATE:19780921T000000
+TZNAME:PHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420501T000000
+RDATE:19420501T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420501T000000
-RDATE:19420501T000000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19441101T000000
+RDATE:19441101T000000
+TZNAME:PHST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Muscat.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Muscat.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Muscat.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Muscat
X-LIC-LOCATION:Asia/Muscat
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
TZOFFSETFROM:+035420
TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Nicosia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Nicosia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Nicosia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,75 +1,76 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Nicosia
X-LIC-LOCATION:Asia/Nicosia
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
+BEGIN:STANDARD
+DTSTART:19211114T000000
+RDATE:19211114T000000
TZNAME:EEST
-DTSTART:19770403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800405T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+021328
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19790930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19970927T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19981025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19800405T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19990328T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+021328
+DTSTART:19790930T000000
+RRULE:FREQ=YEARLY;UNTIL=19970927T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19211114T000000
-RDATE:19211114T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19750413T000000
-RDATE:19750413T000000
-RDATE:19760515T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19980901T000000
+RDATE:19980901T000000
+TZNAME:EEST
TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19751012T000000
-RDATE:19751012T000000
-RDATE:19761011T000000
-RDATE:19770925T000000
-RDATE:19781002T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19980901T000000
-RDATE:19980901T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novokuznetsk.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Asia/Novokuznetsk.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novokuznetsk.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novokuznetsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Novokuznetsk
+X-LIC-LOCATION:Asia/Novokuznetsk
+BEGIN:STANDARD
+DTSTART:19200106T000000
+RDATE:19200106T000000
+TZNAME:KRAT
+TZOFFSETFROM:+054848
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:KRAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20090328T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20091024T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100328T020000
+RDATE:20100328T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20101031T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20110327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novosibirsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novosibirsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Novosibirsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,109 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Novosibirsk
X-LIC-LOCATION:Asia/Novosibirsk
+BEGIN:STANDARD
+DTSTART:19191214T060000
+RDATE:19191214T060000
+TZNAME:NOVT
+TZOFFSETFROM:+053140
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:NOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:NOVST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:NOVT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:NOVT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NOVT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:NOVT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T190000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:NOVST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T190000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:NOVST
TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:NOVT
+TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:NOVT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T200000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
TZNAME:NOVST
-DTSTART:19940327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:NOVT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+053140
-TZOFFSETTO:+0600
-TZNAME:NOVT
-DTSTART:19191214T060000
-RDATE:19191214T060000
+DTSTART:19930523T000000
+RDATE:19930523T000000
+TZNAME:NOVST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:NOVT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-TZNAME:NOVST
-DTSTART:19910331T020000
-RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:NOVT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
+DTSTART:19940327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:NOVST
-DTSTART:19920328T230000
-RDATE:19920328T230000
-RDATE:19930328T020000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:NOVT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0700
-TZNAME:NOVST
-DTSTART:19930523T000000
-RDATE:19930523T000000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Omsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Omsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Omsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Omsk
X-LIC-LOCATION:Asia/Omsk
+BEGIN:STANDARD
+DTSTART:19191114T000000
+RDATE:19191114T000000
+TZNAME:OMST
+TZOFFSETFROM:+045336
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:OMSST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:OMSST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:OMSST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:OMST
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:OMST
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:OMST
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:OMST
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T200000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:OMSST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T200000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:OMSST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:OMSST
+TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:OMST
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T200000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:OMST
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+045336
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:OMST
-DTSTART:19191114T000000
-RDATE:19191114T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:OMST
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:OMSST
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:OMSST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:OMST
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:OMSST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:OMSST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:OMST
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:OMST
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Oral.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Oral.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Oral.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,148 +1,149 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Oral
X-LIC-LOCATION:Asia/Oral
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:URAT
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+032524
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:URAST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:URAT
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:URAT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880924T210000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+TZNAME:URAST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:URAST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19880326T210000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
+DTSTART:19811001T000000
+RDATE:19811001T000000
TZNAME:URAT
-DTSTART:19890924T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T220000Z
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:ORAST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T220000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:ORAT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T220000Z
+DTSTART:19820401T000000
+RDATE:19820401T000000
+TZNAME:URAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:ORAT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032524
-TZOFFSETTO:+0400
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
TZNAME:URAT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:URAT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:URAST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:URAST
-DTSTART:19810401T000000
-RDATE:19810401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19880924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:URAT
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:URAT
-DTSTART:19811001T000000
-RDATE:19811001T000000
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19880326T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:URAST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19890326T020000
+RDATE:19890326T020000
TZNAME:URAST
-DTSTART:19820401T000000
-RDATE:19820401T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890924T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:URAT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19900325T020000
+RDATE:19900325T020000
TZNAME:URAST
-DTSTART:19890326T020000
-RDATE:19890326T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:URAST
-DTSTART:19900325T020000
-RDATE:19900325T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+TZNAME:URAT
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:URAT
-DTSTART:19910101T000000
-RDATE:19910101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911216T000000
+RDATE:19911216T000000
+TZNAME:ORAST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:ORAST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:ORAT
-DTSTART:19911216T000000
-RDATE:19911216T000000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ORAST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:ORAST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ORAT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T220000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:ORAT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:STANDARD
+DTSTART:20050315T000000
+RDATE:20050315T000000
+TZNAME:ORAT
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:ORAT
-DTSTART:20050315T000000
-RDATE:20050315T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Phnom_Penh.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Phnom_Penh.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Phnom_Penh.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Phnom_Penh
X-LIC-LOCATION:Asia/Phnom_Penh
BEGIN:STANDARD
+DTSTART:19060609T000000
+RDATE:19060609T000000
+TZNAME:SMT
TZOFFSETFROM:+065940
TZOFFSETTO:+070620
-TZNAME:SMT
-DTSTART:19060609T000000
-RDATE:19060609T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:ICT
TZOFFSETFROM:+070620
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19110311T000100
-RDATE:19110311T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120501T000000
+RDATE:19120501T000000
+TZNAME:ICT
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:ICT
-DTSTART:19120501T000000
-RDATE:19120501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310501T000000
+RDATE:19310501T000000
+TZNAME:ICT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19310501T000000
-RDATE:19310501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pontianak.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pontianak.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pontianak.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Pontianak
X-LIC-LOCATION:Asia/Pontianak
BEGIN:STANDARD
+DTSTART:19080501T000000
+RDATE:19080501T000000
+TZNAME:PMT
TZOFFSETFROM:+071720
TZOFFSETTO:+071720
-TZNAME:PMT
-DTSTART:19080501T000000
-RDATE:19080501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19321101T000000
+RDATE:19321101T000000
+TZNAME:WIT
TZOFFSETFROM:+071720
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19321101T000000
-RDATE:19321101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420129T000000
+RDATE:19420129T000000
+TZNAME:JST
TZOFFSETFROM:+0730
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420129T000000
-RDATE:19420129T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450923T000000
+RDATE:19450923T000000
+TZNAME:WIT
TZOFFSETFROM:+0900
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19450923T000000
-RDATE:19450923T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19480501T000000
+RDATE:19480501T000000
+TZNAME:WIT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:WIT
-DTSTART:19480501T000000
-RDATE:19480501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19500501T000000
+RDATE:19500501T000000
+TZNAME:WIT
TZOFFSETFROM:+0800
TZOFFSETTO:+0730
-TZNAME:WIT
-DTSTART:19500501T000000
-RDATE:19500501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:CIT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19640101T000000
-RDATE:19640101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19880101T000000
+RDATE:19880101T000000
+TZNAME:WIT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:WIT
-DTSTART:19880101T000000
-RDATE:19880101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pyongyang.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pyongyang.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Pyongyang.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,44 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Pyongyang
X-LIC-LOCATION:Asia/Pyongyang
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KST
TZOFFSETFROM:+0823
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0830
-TZOFFSETTO:+0900
-TZNAME:KST
DTSTART:19041201T000000
RDATE:19041201T000000
RDATE:19320101T000000
+TZNAME:KST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KST
TZOFFSETFROM:+0900
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:19280101T000000
-RDATE:19280101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19540321T000000
+RDATE:19540321T000000
+TZNAME:KST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:KST
-DTSTART:19540321T000000
-RDATE:19540321T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19610810T000000
+RDATE:19610810T000000
+TZNAME:KST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:KST
-DTSTART:19610810T000000
-RDATE:19610810T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qatar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qatar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qatar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Qatar
X-LIC-LOCATION:Asia/Qatar
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
TZOFFSETFROM:+032608
TZOFFSETTO:+0400
-TZNAME:GST
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19720601T000000
+RDATE:19720601T000000
+TZNAME:AST
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19720601T000000
-RDATE:19720601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qyzylorda.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qyzylorda.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Qyzylorda.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,134 +1,135 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Qyzylorda
X-LIC-LOCATION:Asia/Qyzylorda
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:KIZT
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+042152
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-TZNAME:KIZST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:KIZT
+TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:KIZT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+TZNAME:KIZST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:KIZST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RDATE:19811001T000000
+TZNAME:KIZT
TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:QYZST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T200000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:QYZT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T200000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19820401T000000
+RDATE:19820401T000000
+TZNAME:KIZST
+TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:QYZT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20041030T200000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+042152
-TZOFFSETTO:+0400
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
TZNAME:KIZT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:KIZT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:KIZST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:KIZST
-DTSTART:19810401T000000
-RDATE:19810401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KIZT
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:KIZT
-DTSTART:19811001T000000
-RDATE:19811001T000000
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KIZST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:KIZST
-DTSTART:19820401T000000
-RDATE:19820401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+TZNAME:KIZT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:KIZT
-DTSTART:19910101T000000
-RDATE:19910101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19911216T000000
+RDATE:19911216T000000
+TZNAME:QYZT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:QYZT
-DTSTART:19911216T000000
-RDATE:19911216T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:QYZST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:QYZST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:QYZT
-DTSTART:19920119T020000
-RDATE:19920119T020000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:QYZST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:QYZST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:QYZT
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T200000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:QYZT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:20050315T000000
+RDATE:20050315T000000
+TZNAME:QYZT
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:QYZT
-DTSTART:20050315T000000
-RDATE:20050315T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Rangoon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Rangoon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Rangoon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Rangoon
X-LIC-LOCATION:Asia/Rangoon
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:RMT
TZOFFSETFROM:+062440
TZOFFSETTO:+062436
-TZNAME:RMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:BURT
TZOFFSETFROM:+062436
TZOFFSETTO:+0630
-TZNAME:BURT
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420501T000000
+RDATE:19420501T000000
+TZNAME:JST
TZOFFSETFROM:+0630
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420501T000000
-RDATE:19420501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450503T000000
+RDATE:19450503T000000
+TZNAME:MMT
TZOFFSETFROM:+0900
TZOFFSETTO:+0630
-TZNAME:MMT
-DTSTART:19450503T000000
-RDATE:19450503T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Riyadh.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Riyadh.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Riyadh.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Riyadh
X-LIC-LOCATION:Asia/Riyadh
BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:AST
TZOFFSETFROM:+030652
TZOFFSETTO:+0300
-TZNAME:AST
-DTSTART:19500101T000000
-RDATE:19500101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Saigon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Saigon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Saigon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Saigon
X-LIC-LOCATION:Asia/Saigon
BEGIN:STANDARD
+DTSTART:19060609T000000
+RDATE:19060609T000000
+TZNAME:SMT
TZOFFSETFROM:+070640
TZOFFSETTO:+070620
-TZNAME:SMT
-DTSTART:19060609T000000
-RDATE:19060609T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:ICT
TZOFFSETFROM:+070620
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19110311T000100
-RDATE:19110311T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120501T000000
+RDATE:19120501T000000
+TZNAME:ICT
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:ICT
-DTSTART:19120501T000000
-RDATE:19120501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310501T000000
+RDATE:19310501T000000
+TZNAME:ICT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19310501T000000
-RDATE:19310501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Sakhalin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Sakhalin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Sakhalin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,122 +1,123 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Sakhalin
X-LIC-LOCATION:Asia/Sakhalin
+BEGIN:STANDARD
+DTSTART:19050823T000000
+RDATE:19050823T000000
+TZNAME:CJT
+TZOFFSETFROM:+093048
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19380101T000000
+RDATE:19380101T000000
+TZNAME:JST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450825T000000
+RDATE:19450825T000000
+TZNAME:SAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z;BYMONTH=4
+TZNAME:SAKST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:SAKST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z;BYMONTH=10
+TZNAME:SAKT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:SAKT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SAKT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:SAKT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T150000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T150000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:SAKST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T150000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:SAKST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T150000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1200
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:19970330T020000
+TZNAME:SAKST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1100
-TZNAME:SAKT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T150000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:SAKT
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:SAKT
-DTSTART:19971026T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:SAKST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
TZNAME:SAKST
-DTSTART:19980329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+093048
-TZOFFSETTO:+0900
-TZNAME:CJT
-DTSTART:19050823T000000
-RDATE:19050823T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19380101T000000
-RDATE:19380101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19961027T030000
+TZNAME:SAKT
+TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:SAKT
-DTSTART:19450825T000000
-RDATE:19450825T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19960330T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SAKST
TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-TZNAME:SAKST
-DTSTART:19910331T020000
-RDATE:19910331T020000
-RDATE:19970330T020000
+TZOFFSETTO:+1200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T150000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:SAKT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:SAKT
-DTSTART:19920119T020000
-RDATE:19920119T020000
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1200
+DTSTART:19980329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:SAKST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1100
-TZNAME:SAKT
-DTSTART:19920926T230000
-RDATE:19920926T230000
-RDATE:19961027T030000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Samarkand.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Samarkand.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Samarkand.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,92 +1,93 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Samarkand
X-LIC-LOCATION:Asia/Samarkand
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:SAMT
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
+TZOFFSETFROM:+042712
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:SAMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+TZNAME:SAMST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RDATE:19811001T000000
+TZNAME:TAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820401T000000
+RDATE:19820401T000000
TZNAME:SAMST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
+TZNAME:SAMT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:SAMT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:SAMST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:SAMST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19910330T210000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+042712
-TZOFFSETTO:+0400
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:SAMT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:SAMT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19910330T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SAMST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:SAMST
-DTSTART:19810401T000000
-RDATE:19810401T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910901T000000
+RDATE:19910901T000000
+TZNAME:UZST
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:TAST
-DTSTART:19811001T000000
-RDATE:19811001T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:SAMST
-DTSTART:19820401T000000
-RDATE:19820401T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:UZST
-DTSTART:19910901T000000
-RDATE:19910901T000000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:UZT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:UZT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19920101T000000
-RDATE:19920101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Seoul.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Seoul.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Seoul.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,67 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Seoul
X-LIC-LOCATION:Asia/Seoul
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:KDT
-DTSTART:19870510T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19880507T150000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:18900101T000000
+RDATE:18900101T000000
TZNAME:KST
-DTSTART:19871011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19881008T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+082752
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0830
-TZOFFSETTO:+0900
-TZNAME:KST
DTSTART:19041201T000000
RDATE:19041201T000000
RDATE:19320101T000000
RDATE:19681001T000000
+TZNAME:KST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KST
TZOFFSETFROM:+0900
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:19280101T000000
-RDATE:19280101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:KST
DTSTART:19540321T000000
RDATE:19540321T000000
RDATE:19600913T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+TZNAME:KDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:KDT
-DTSTART:19600515T000000
-RDATE:19600515T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19610810T000000
+RDATE:19610810T000000
+TZNAME:KST
TZOFFSETFROM:+0800
TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870510T000000
+RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:KDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871011T000000
+RRULE:FREQ=YEARLY;UNTIL=19881008T140000Z;BYDAY=2SU;BYMONTH=10
TZNAME:KST
-DTSTART:19610810T000000
-RDATE:19610810T000000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Shanghai.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Shanghai.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Shanghai.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,52 +1,54 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Shanghai
X-LIC-LOCATION:Asia/Shanghai
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19280101T000000
+RDATE:19280101T000000
TZNAME:CST
-DTSTART:19401001T000000
-RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
+TZOFFSETFROM:+080552
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+080552
+DTSTART:19401001T000000
+RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19490101T000000
+RDATE:19490101T000000
TZNAME:CST
-DTSTART:19280101T000000
-RDATE:19280101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19400603T000000
-RDATE:19400603T000000
-RDATE:19410316T000000
-RDATE:19860504T000000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19490101T000000
-RDATE:19490101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Singapore.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Singapore.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Singapore.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Singapore
X-LIC-LOCATION:Asia/Singapore
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:SMT
TZOFFSETFROM:+065525
TZOFFSETTO:+065525
-TZNAME:SMT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19050601T000000
+RDATE:19050601T000000
+TZNAME:MALT
TZOFFSETFROM:+065525
TZOFFSETTO:+0700
-TZNAME:MALT
-DTSTART:19050601T000000
-RDATE:19050601T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:MALST
TZOFFSETFROM:+0700
TZOFFSETTO:+0720
-TZNAME:MALST
-DTSTART:19330101T000000
-RDATE:19330101T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0720
-TZNAME:MALT
-DTSTART:19360101T000000
-RDATE:19360101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19410901T000000
+RDATE:19410901T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19410901T000000
-RDATE:19410901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
TZOFFSETFROM:+0730
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420216T000000
-RDATE:19420216T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:MALT
TZOFFSETFROM:+0900
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19450912T000000
-RDATE:19450912T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19650809T000000
+RDATE:19650809T000000
+TZNAME:SGT
TZOFFSETFROM:+0730
TZOFFSETTO:+0730
-TZNAME:SGT
-DTSTART:19650809T000000
-RDATE:19650809T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:SGT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:SGT
-DTSTART:19820101T000000
-RDATE:19820101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Taipei.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Taipei.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Taipei.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,86 +1,87 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Taipei
X-LIC-LOCATION:Asia/Taipei
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CST
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450501T000000
+RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19450501T000000
-RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451001T000000
+RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19451001T000000
-RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19520301T000000
+RDATE:19520301T000000
+RDATE:19790630T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19521101T000000
+RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19521101T000000
-RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19530401T000000
+RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19530401T000000
-RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19551001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19551001T000000
-RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19600601T000000
+RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z;BYMONTH=6
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19600601T000000
-RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19740401T000000
+RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19740401T000000
-RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19741001T000000
-RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0806
-TZOFFSETTO:+0800
+DTSTART:19790930T000000
+RDATE:19790930T000000
TZNAME:CST
-DTSTART:18960101T000000
-RDATE:18960101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19520301T000000
-RDATE:19520301T000000
-RDATE:19800630T000000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800930T000000
-RDATE:19800930T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tashkent.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tashkent.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tashkent.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Tashkent
X-LIC-LOCATION:Asia/Tashkent
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-TZNAME:TASST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0600
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:TAST
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z
+TZOFFSETFROM:+043712
+TZOFFSETTO:+0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0700
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:TASST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:TAST
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:TASST
TZOFFSETFROM:+0600
TZOFFSETTO:+0700
-TZNAME:TASST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T200000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+043712
-TZOFFSETTO:+0500
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
TZNAME:TAST
-DTSTART:19240502T000000
-RDATE:19240502T000000
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:TAST
+TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-TZNAME:TAST
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TASST
TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-TZNAME:TASST
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+TZNAME:TASST
TZOFFSETFROM:+0600
TZOFFSETTO:+0600
-TZNAME:UZST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910901T000000
RDATE:19910901T000000
-END:DAYLIGHT
+TZNAME:UZST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:UZT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:UZT
TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:UZT
-DTSTART:19920101T000000
-RDATE:19920101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tbilisi.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tbilisi.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tbilisi.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,157 +1,152 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Tbilisi
X-LIC-LOCATION:Asia/Tbilisi
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:TBIST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:TBIT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:TBMT
+TZOFFSETFROM:+025916
+TZOFFSETTO:+025916
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:TBIT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T220000Z
+TZOFFSETFROM:+025916
+TZOFFSETTO:+0300
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
TZNAME:TBIST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:GEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T210000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:GET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19930925T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:TBIST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:GEST
-DTSTART:19950326T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T200000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:TBIT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:GET
-DTSTART:19971026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20031025T190000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:GEST
-DTSTART:19980329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20040327T200000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+025916
-TZOFFSETTO:+025916
-TZNAME:TBMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+025916
-TZOFFSETTO:+0300
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:TBIT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:TBIT
-DTSTART:19570301T000000
-RDATE:19570301T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+TZNAME:TBIST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:GEST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910409T000000
RDATE:19910409T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+RDATE:19940925T000000
+TZNAME:GEST
TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:GET
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910929T030000
RDATE:19910929T030000
RDATE:20041031T030000
+TZNAME:GET
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:GET
DTSTART:19920101T000000
RDATE:19920101T000000
+TZNAME:GEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0300
TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19930925T200000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:GET
-DTSTART:19940925T000000
-RDATE:19940925T000000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:GET
DTSTART:19950924T000000
RDATE:19950924T000000
-END:STANDARD
-BEGIN:DAYLIGHT
+TZNAME:GET
TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:GEST
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19961027T000000
RDATE:19961027T000000
RDATE:19970330T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+TZNAME:GEST
TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19971026T000000
+RRULE:FREQ=YEARLY;UNTIL=20031025T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:GET
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980329T000000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:GEST
-DTSTART:20040627T000000
-RDATE:20040627T000000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
+DTSTART:20040627T000000
+RDATE:20040627T000000
+TZNAME:GEST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:GET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20050327T020000
RDATE:20050327T020000
+TZNAME:GET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tehran.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tehran.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tehran.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,272 +1,159 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Tehran
X-LIC-LOCATION:Asia/Tehran
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19790321T000000
-RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19910922T000000
-RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z
+DTSTART:19160101T000000
+RDATE:19160101T000000
+TZNAME:TMT
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19920322T000000
-RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19970322T000000
-RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:IRST
-DTSTART:19970922T000000
-RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20010322T000000
-RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0430
+TZOFFSETFROM:+032544
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20010922T000000
-RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20090322T000000
-RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19771101T000000
+RDATE:19771101T000000
TZNAME:IRST
-DTSTART:20090922T000000
-RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
+DTSTART:19780321T000000
+RDATE:19780321T000000
TZNAME:IRDT
-DTSTART:20130322T000000
-RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19781021T000000
+RDATE:19781021T000000
TZNAME:IRST
-DTSTART:20130922T000000
-RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20170322T000000
-RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19790101T000000
+RDATE:19790101T000000
TZNAME:IRST
-DTSTART:20170922T000000
-RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790321T000000
+RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20210322T000000
-RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19960921T000000
+RDATE:20000921T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20120921T000000
+RDATE:20160921T000000
+RDATE:20170922T000000
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20210922T000000
-RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19910503T000000
+RDATE:19910503T000000
+RDATE:19960321T000000
+RDATE:20000321T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20120321T000000
+RDATE:20160321T000000
+RDATE:20170322T000000
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20250322T000000
-RRULE:FREQ=YEARLY;UNTIL=20270321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910922T000000
+RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20250922T000000
-RRULE:FREQ=YEARLY;UNTIL=20270921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920322T000000
+RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20280321T000000
-RRULE:FREQ=YEARLY;UNTIL=20290320T203000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20280921T000000
-RRULE:FREQ=YEARLY;UNTIL=20290920T193000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19970322T000000
+RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20300322T000000
-RRULE:FREQ=YEARLY;UNTIL=20310321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19970922T000000
+RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20300922T000000
-RRULE:FREQ=YEARLY;UNTIL=20310921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010322T000000
+RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20320321T000000
-RRULE:FREQ=YEARLY;UNTIL=20330320T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010922T000000
+RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20320921T000000
-RRULE:FREQ=YEARLY;UNTIL=20330920T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20090322T000000
+RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20340322T000000
-RRULE:FREQ=YEARLY;UNTIL=20350321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20090922T000000
+RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20340922T000000
-RRULE:FREQ=YEARLY;UNTIL=20350921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20130322T000000
+RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20360321T000000
-RRULE:FREQ=YEARLY;UNTIL=20370320T203000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:20130922T000000
+RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z;BYMONTH=9
TZNAME:IRST
-DTSTART:20360921T000000
-RRULE:FREQ=YEARLY;UNTIL=20370920T193000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032544
-TZOFFSETTO:+032544
-TZNAME:TMT
-DTSTART:19160101T000000
-RDATE:19160101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032544
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0400
-TZNAME:IRST
-DTSTART:19771101T000000
-RDATE:19771101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:IRDT
-DTSTART:19780321T000000
-RDATE:19780321T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:IRST
-DTSTART:19781021T000000
-RDATE:19781021T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19790101T000000
-RDATE:19790101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19790919T000000
-RDATE:19790919T000000
-RDATE:19800923T000000
-RDATE:19960921T000000
-RDATE:20000921T000000
-RDATE:20040921T000000
-RDATE:20050922T000000
-RDATE:20080921T000000
-RDATE:20120921T000000
-RDATE:20160921T000000
-RDATE:20200921T000000
-RDATE:20240921T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19910503T000000
-RDATE:19910503T000000
-RDATE:19960321T000000
-RDATE:20000321T000000
-RDATE:20040321T000000
-RDATE:20050322T000000
-RDATE:20080321T000000
-RDATE:20120321T000000
-RDATE:20160321T000000
-RDATE:20200321T000000
-RDATE:20240321T000000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tel_Aviv.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,88 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Tel_Aviv
X-LIC-LOCATION:Asia/Tel_Aviv
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19421101T000000
-RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19481101T020000
-RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19880903T000000
-RRULE:FREQ=YEARLY;UNTIL=19890902T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20060331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20100326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20100326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20150327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20150327T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20170331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20210326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20210326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20230331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20320326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20320326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20340331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20370327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20370327T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+022056
-TZOFFSETTO:+022040
-TZNAME:JMT
DTSTART:18800101T000000
RDATE:18800101T000000
+TZNAME:JMT
+TZOFFSETFROM:+022056
+TZOFFSETTO:+022040
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+022040
-TZOFFSETTO:+0200
-TZNAME:IST
DTSTART:19180101T000000
RDATE:19180101T000000
+TZNAME:IST
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
DTSTART:19400601T000000
RDATE:19400601T000000
RDATE:19430401T020000
@@ -123,13 +60,19 @@
RDATE:20050401T020000
RDATE:20110401T020000
RDATE:20160401T020000
-RDATE:20220401T020000
-RDATE:20330401T020000
+RDATE:20170331T020000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:IST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:IST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19451101T020000
RDATE:19451101T020000
RDATE:19461101T000000
@@ -146,6 +89,8 @@
RDATE:19850915T000000
RDATE:19860907T000000
RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
RDATE:19900826T000000
RDATE:19910901T000000
RDATE:19920906T000000
@@ -174,40 +119,46 @@
RDATE:20150920T020000
RDATE:20161009T020000
RDATE:20170924T020000
-RDATE:20180916T020000
-RDATE:20191006T020000
-RDATE:20200927T020000
-RDATE:20210912T020000
-RDATE:20221002T020000
-RDATE:20230924T020000
-RDATE:20241006T020000
-RDATE:20250928T020000
-RDATE:20260920T020000
-RDATE:20271010T020000
-RDATE:20280924T020000
-RDATE:20290916T020000
-RDATE:20301006T020000
-RDATE:20310921T020000
-RDATE:20320912T020000
-RDATE:20331002T020000
-RDATE:20340917T020000
-RDATE:20351007T020000
-RDATE:20360928T020000
-RDATE:20370913T020000
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0400
-TZNAME:IDDT
DTSTART:19480523T000000
RDATE:19480523T000000
+TZNAME:IDDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+TZNAME:IDT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19481101T020000
+RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060331T020000
+RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
TZNAME:IDT
-DTSTART:19480901T000000
-RDATE:19480901T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20120330T020000
+RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimbu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimbu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimbu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Thimbu
X-LIC-LOCATION:Asia/Thimbu
BEGIN:STANDARD
+DTSTART:19470815T000000
+RDATE:19470815T000000
+TZNAME:IST
TZOFFSETFROM:+055836
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19470815T000000
-RDATE:19470815T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19871001T000000
+RDATE:19871001T000000
+TZNAME:BTT
TZOFFSETFROM:+0530
TZOFFSETTO:+0600
-TZNAME:BTT
-DTSTART:19871001T000000
-RDATE:19871001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimphu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimphu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Thimphu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Thimphu
X-LIC-LOCATION:Asia/Thimphu
BEGIN:STANDARD
+DTSTART:19470815T000000
+RDATE:19470815T000000
+TZNAME:IST
TZOFFSETFROM:+055836
TZOFFSETTO:+0530
-TZNAME:IST
-DTSTART:19470815T000000
-RDATE:19470815T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19871001T000000
+RDATE:19871001T000000
+TZNAME:BTT
TZOFFSETFROM:+0530
TZOFFSETTO:+0600
-TZNAME:BTT
-DTSTART:19871001T000000
-RDATE:19871001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tokyo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tokyo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Tokyo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Tokyo
X-LIC-LOCATION:Asia/Tokyo
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:18880101T001859
+RDATE:18880101T001859
TZNAME:JST
-DTSTART:19480911T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2SA;UNTIL=19510907T160000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:JDT
-DTSTART:19500507T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19510505T170000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+091859
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:18880101T001859
-RDATE:18880101T001859
END:STANDARD
BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CJT
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:CJT
-DTSTART:18960101T000000
-RDATE:18960101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19380101T000000
+RDATE:19380101T000000
+TZNAME:JST
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19380101T000000
-RDATE:19380101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:JDT
DTSTART:19480502T020000
RDATE:19480502T020000
RDATE:19490403T020000
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19480911T020000
+RRULE:FREQ=YEARLY;UNTIL=19510907T160000Z;BYDAY=2SA;BYMONTH=9
+TZNAME:JST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500507T020000
+RRULE:FREQ=YEARLY;UNTIL=19510505T170000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ujung_Pandang.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ujung_Pandang.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ujung_Pandang.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ujung_Pandang
X-LIC-LOCATION:Asia/Ujung_Pandang
BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:MMT
TZOFFSETFROM:+075736
TZOFFSETTO:+075736
-TZNAME:MMT
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19321101T000000
+RDATE:19321101T000000
+TZNAME:CIT
TZOFFSETFROM:+075736
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19321101T000000
-RDATE:19321101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420209T000000
+RDATE:19420209T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420209T000000
-RDATE:19420209T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450923T000000
+RDATE:19450923T000000
+TZNAME:CIT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CIT
-DTSTART:19450923T000000
-RDATE:19450923T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulaanbaatar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulaanbaatar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulaanbaatar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ulaanbaatar
X-LIC-LOCATION:Asia/Ulaanbaatar
+BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:ULAT
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:ULAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:ULAT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T150000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:ULAT
-DTSTART:19840930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19980926T150000Z
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:19850331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T160000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:20010929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SA;UNTIL=20060929T170000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:20020330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA;UNTIL=20060324T180000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+070732
-TZOFFSETTO:+0700
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T170000Z;BYDAY=-1SA;BYMONTH=9
TZNAME:ULAT
-DTSTART:19050801T000000
-RDATE:19050801T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19780101T000000
-RDATE:19780101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19831001T000000
-RDATE:19831001T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T180000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:20010428T020000
-RDATE:20010428T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulan_Bator.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulan_Bator.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Ulan_Bator.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Ulan_Bator
X-LIC-LOCATION:Asia/Ulan_Bator
+BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:ULAT
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:ULAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:19830401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:ULAT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T150000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:ULAT
-DTSTART:19840930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19980926T150000Z
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:19850331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T160000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:20010929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SA;UNTIL=20060929T170000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:20020330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA;UNTIL=20060324T180000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+070732
-TZOFFSETTO:+0700
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T170000Z;BYDAY=-1SA;BYMONTH=9
TZNAME:ULAT
-DTSTART:19050801T000000
-RDATE:19050801T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19780101T000000
-RDATE:19780101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:ULAT
-DTSTART:19831001T000000
-RDATE:19831001T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T180000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:ULAST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:ULAST
-DTSTART:20010428T020000
-RDATE:20010428T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Urumqi.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Urumqi.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Urumqi.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,45 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Urumqi
X-LIC-LOCATION:Asia/Urumqi
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:URUT
+TZOFFSETFROM:+055020
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800501T000000
+RDATE:19800501T000000
+TZNAME:CST
+TZOFFSETFROM:+0600
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+055020
-TZOFFSETTO:+0600
-TZNAME:URUT
-DTSTART:19280101T000000
-RDATE:19280101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800501T000000
-RDATE:19800501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19860504T000000
-RDATE:19860504T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vientiane.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vientiane.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vientiane.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Vientiane
X-LIC-LOCATION:Asia/Vientiane
BEGIN:STANDARD
+DTSTART:19060609T000000
+RDATE:19060609T000000
+TZNAME:SMT
TZOFFSETFROM:+065024
TZOFFSETTO:+070620
-TZNAME:SMT
-DTSTART:19060609T000000
-RDATE:19060609T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:ICT
TZOFFSETFROM:+070620
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19110311T000100
-RDATE:19110311T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120501T000000
+RDATE:19120501T000000
+TZNAME:ICT
TZOFFSETFROM:+0700
TZOFFSETTO:+0800
-TZNAME:ICT
-DTSTART:19120501T000000
-RDATE:19120501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19310501T000000
+RDATE:19310501T000000
+TZNAME:ICT
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-TZNAME:ICT
-DTSTART:19310501T000000
-RDATE:19310501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vladivostok.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vladivostok.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Vladivostok.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Vladivostok
X-LIC-LOCATION:Asia/Vladivostok
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:VLAST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T140000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19221115T000000
+RDATE:19221115T000000
TZNAME:VLAT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T130000Z
+TZOFFSETFROM:+084744
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:VLAST
+TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:VLAT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T160000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T140000Z;BYMONTH=4
TZNAME:VLAST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:VLAST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T130000Z;BYMONTH=10
TZNAME:VLAT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T160000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:VLAT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+084744
-TZOFFSETTO:+0900
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T160000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:VLAT
-DTSTART:19221115T000000
-RDATE:19221115T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:VLAT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:VLASST
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:VLASST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:VLAST
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
TZNAME:VLAST
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:VLAST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T160000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VLAT
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:VLAT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yakutsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yakutsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yakutsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,101 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Yakutsk
X-LIC-LOCATION:Asia/Yakutsk
+BEGIN:STANDARD
+DTSTART:19191215T000000
+RDATE:19191215T000000
+TZNAME:YAKT
+TZOFFSETFROM:+083840
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T150000Z;BYMONTH=4
+TZNAME:YAKST
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:YAKST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T150000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T140000Z;BYMONTH=10
+TZNAME:YAKT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-TZNAME:YAKT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T140000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-TZNAME:YAKT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T170000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T170000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:YAKST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T170000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:YAKST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:YAKT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T170000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:YAKT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+083840
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:YAKT
-DTSTART:19191215T000000
-RDATE:19191215T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:YAKT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19920119T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YAKST
TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:YAKST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+1000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:YAKT
-DTSTART:19910929T030000
-RDATE:19910929T030000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:YAKST
TZOFFSETFROM:+0900
TZOFFSETTO:+1000
-TZNAME:YAKST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:YAKT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yekaterinburg.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yekaterinburg.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yekaterinburg.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,106 +1,107 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Yekaterinburg
X-LIC-LOCATION:Asia/Yekaterinburg
+BEGIN:STANDARD
+DTSTART:19190715T040000
+RDATE:19190715T040000
+TZNAME:SVET
+TZOFFSETFROM:+040224
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:SVEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:SVEST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:SVEST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
+TZNAME:SVET
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:SVET
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SVET
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:SVET
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T210000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:SVEST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T210000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:YEKST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0600
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:SVEST
+TZOFFSETFROM:+0500
TZOFFSETTO:+0500
-TZNAME:YEKT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0500
-TZNAME:YEKT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+040224
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:SVET
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:SVET
-DTSTART:19190715T040000
-RDATE:19190715T040000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:YEKST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:SVET
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YEKST
TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-TZNAME:SVEST
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETTO:+0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:SVET
-DTSTART:19910929T030000
-RDATE:19910929T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:YEKT
+TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-TZNAME:YEKT
-DTSTART:19920119T020000
-RDATE:19920119T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:YEKST
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:YEKST
-DTSTART:19920328T230000
-RDATE:19920328T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YEKT
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:YEKT
-DTSTART:19920926T230000
-RDATE:19920926T230000
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yerevan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yerevan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Asia/Yerevan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,115 +1,116 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Yerevan
X-LIC-LOCATION:Asia/Yerevan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:YERST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
+DTSTART:19240502T000000
+RDATE:19240502T000000
TZNAME:YERT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z
+TZOFFSETFROM:+0258
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:YERT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
+DTSTART:19570301T000000
+RDATE:19570301T000000
TZNAME:YERST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:AMST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19950325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:AMT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19940924T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:YERST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:AMST
-DTSTART:19970330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:YERT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:AMT
-DTSTART:19971026T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0258
-TZOFFSETTO:+0300
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:YERT
-DTSTART:19240502T000000
-RDATE:19240502T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:YERT
-DTSTART:19570301T000000
-RDATE:19570301T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YERST
TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:YERST
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+TZNAME:YERST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:AMST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910923T000000
RDATE:19910923T000000
-END:DAYLIGHT
+RDATE:19970101T000000
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:AMT
DTSTART:19910929T030000
RDATE:19910929T030000
RDATE:19920926T230000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AMST
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19950325T230000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:AMST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19940924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AMT
TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:AMT
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19950924T030000
RDATE:19950924T030000
-RDATE:19970101T000000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AMT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Azores.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Azores.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Azores.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,254 +1,266 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Azores
X-LIC-LOCATION:Atlantic/Azores
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:HMT
+TZOFFSETFROM:-014240
+TZOFFSETTO:-015432
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110524T000000
+RDATE:19110524T000000
+TZNAME:AZOST
+TZOFFSETFROM:-015432
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19460406T230000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211015T010000Z;BYMONTH=10
TZNAME:AZOT
-DTSTART:19171015T000000
-RRULE:FREQ=YEARLY;UNTIL=19211015T010000Z
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
END:STANDARD
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291006T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19291006T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19311004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19321002T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19341007T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T010000Z;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19401006T000000
-RRULE:FREQ=YEARLY;UNTIL=19411006T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450311T010000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:AZOST
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:AZOMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
TZNAME:AZOST
-DTSTART:19420314T230000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19450311T010000Z
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451028T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19421025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19451028T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450826T000000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=8
+TZNAME:AZOST
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOST
-DTSTART:19430829T000000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=26,27,28,29,30,31;BYDAY=SU;UNTIL=19450826T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=1;BYDAY=SU;UNTIL=19450826T000000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450422T000000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:AZOMT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:AZOMT
-DTSTART:19440422T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SA;UNTIL=19450422T000000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
-TZNAME:AZOST
-DTSTART:19470406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19490403T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
-TZNAME:AZOST
-DTSTART:19510401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19650404T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19511007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19651003T040000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:AZOST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19780402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19790401T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:AZOT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19910929T020000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T010000Z;BYDAY=1SU;BYMONTH=4
TZNAME:AZOST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19840325T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19920329T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19930926T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19940327T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19910929T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19961027T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-014240
-TZOFFSETTO:-015432
-TZNAME:HMT
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-015432
-TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19110524T000000
-RDATE:19110524T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;UNTIL=19920329T020000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:AZOST
-DTSTART:19160617T230000
-RDATE:19160617T230000
-RDATE:19170228T230000
-RDATE:19180301T230000
-RDATE:19190228T230000
-RDATE:19200229T230000
-RDATE:19210228T230000
-RDATE:19240416T230000
-RDATE:19260417T230000
-RDATE:19270409T230000
-RDATE:19280414T230000
-RDATE:19290420T230000
-RDATE:19310418T230000
-RDATE:19320402T230000
-RDATE:19340407T230000
-RDATE:19350330T230000
-RDATE:19360418T230000
-RDATE:19370403T230000
-RDATE:19380326T230000
-RDATE:19390415T230000
-RDATE:19400224T230000
-RDATE:19410405T230000
-RDATE:19460406T230000
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:AZOT
-DTSTART:19161101T010000
-RDATE:19161101T010000
-RDATE:19241015T000000
-RDATE:19391119T000000
-RDATE:19461006T000000
+DTSTART:19920927T020000
+RDATE:19920927T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
+DTSTART:19930328T010000
+RDATE:19930328T010000
+TZNAME:AZOST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:AZOMT
-DTSTART:19420425T230000
-RDATE:19420425T230000
-RDATE:19430417T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T010000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOST
-DTSTART:19420816T000000
-RDATE:19420816T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19660403T020000
-RDATE:19660403T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19770327T000000
-RDATE:19770327T000000
-RDATE:19800330T000000
-RDATE:19830327T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:AZOT
-DTSTART:19770925T010000
-RDATE:19770925T010000
-RDATE:19781001T010000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19920927T020000
-RDATE:19920927T020000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:AZOST
-DTSTART:19930328T010000
-RDATE:19930328T010000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Bermuda.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Bermuda.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Bermuda.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Bermuda
X-LIC-LOCATION:Atlantic/Bermuda
+BEGIN:STANDARD
+DTSTART:19300101T020000
+RDATE:19300101T020000
+TZNAME:AST
+TZOFFSETFROM:-041904
+TZOFFSETTO:-0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19750427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19740428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=19751026T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19760101T000000
+RDATE:19760101T000000
TZNAME:AST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T050000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T060000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041904
-TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:AST
-DTSTART:19300101T020000
-RDATE:19300101T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19760101T000000
-RDATE:19760101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Canary.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Canary.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Canary.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Canary
X-LIC-LOCATION:Atlantic/Canary
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19220301T000000
+RDATE:19220301T000000
+TZNAME:CANT
+TZOFFSETFROM:-010136
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460930T010000
+RDATE:19460930T010000
+TZNAME:WET
+TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19800928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19800406T000000
+RDATE:19800406T000000
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T010000
+RDATE:19800928T010000
TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-010136
-TZOFFSETTO:-0100
-TZNAME:CANT
-DTSTART:19220301T000000
-RDATE:19220301T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
+DTSTART:19800928T020000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19460930T010000
-RDATE:19460930T010000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19800406T000000
-RDATE:19800406T000000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19800928T010000
-RDATE:19800928T010000
-END:DAYLIGHT
+TZOFFSETTO:+0000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Cape_Verde.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Cape_Verde.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Cape_Verde.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Cape_Verde
X-LIC-LOCATION:Atlantic/Cape_Verde
BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:CVT
TZOFFSETFROM:-013404
TZOFFSETTO:-0200
-TZNAME:CVT
-DTSTART:19070101T000000
-RDATE:19070101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:CVST
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
-TZNAME:CVST
-DTSTART:19420901T000000
-RDATE:19420901T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
+TZNAME:CVT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:CVT
-DTSTART:19451015T000000
-RDATE:19451015T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19751125T020000
+RDATE:19751125T020000
+TZNAME:CVT
TZOFFSETFROM:-0200
TZOFFSETTO:-0100
-TZNAME:CVT
-DTSTART:19751125T020000
-RDATE:19751125T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faeroe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faeroe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faeroe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Faeroe
X-LIC-LOCATION:Atlantic/Faeroe
+BEGIN:STANDARD
+DTSTART:19080111T000000
+RDATE:19080111T000000
+TZNAME:WET
+TZOFFSETFROM:-002704
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810101T000000
+RDATE:19810101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T020000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19810927T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-002704
-TZOFFSETTO:+0000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:WET
-DTSTART:19080111T000000
-RDATE:19080111T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19810101T000000
-RDATE:19810101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faroe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faroe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Faroe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Faroe
X-LIC-LOCATION:Atlantic/Faroe
+BEGIN:STANDARD
+DTSTART:19080111T000000
+RDATE:19080111T000000
+TZNAME:WET
+TZOFFSETFROM:-002704
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810101T000000
+RDATE:19810101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T020000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19810927T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-002704
-TZOFFSETTO:+0000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:WET
-DTSTART:19080111T000000
-RDATE:19080111T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19810101T000000
-RDATE:19810101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Jan_Mayen.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Jan_Mayen.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Jan_Mayen.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,81 +1,88 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Jan_Mayen
X-LIC-LOCATION:Atlantic/Jan_Mayen
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19590315T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19640315T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19590920T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19650919T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
+DTSTART:19400810T230000
+RDATE:19400810T230000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19590315T020000
+RRULE:FREQ=YEARLY;UNTIL=19640315T010000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19590920T030000
+RRULE:FREQ=YEARLY;UNTIL=19650919T010000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0043
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:18950101T000000
-RDATE:18950101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160522T010000
-RDATE:19160522T010000
-RDATE:19400810T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450402T020000
-RDATE:19650425T020000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19160930T000000
-RDATE:19160930T000000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19451001T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800101T000000
-RDATE:19800101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Madeira.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Madeira.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Madeira.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,233 +1,238 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Madeira
X-LIC-LOCATION:Atlantic/Madeira
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:FMT
+TZOFFSETFROM:-010736
+TZOFFSETTO:-010736
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110524T000000
+RDATE:19110524T000000
+TZNAME:MADST
+TZOFFSETFROM:-010736
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19460406T230000
+TZNAME:MADST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211015T000000Z;BYMONTH=10
TZNAME:MADT
-DTSTART:19171015T000000
-RRULE:FREQ=YEARLY;UNTIL=19211015T000000Z
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291006T000000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19291006T000000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321002T000000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19311004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19321002T000000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381002T000000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19341007T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T000000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T000000Z;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19401006T000000
-RRULE:FREQ=YEARLY;UNTIL=19411006T000000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450311T000000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:MADST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:MADMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
TZNAME:MADST
-DTSTART:19420314T230000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19450311T000000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451028T000000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19421025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19451028T000000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450825T230000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=8
+TZNAME:MADST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:MADST
-DTSTART:19430829T000000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=26,27,28,29,30,31;BYDAY=SU;UNTIL=19450825T230000Z
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=1;BYDAY=SU;UNTIL=19450825T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450421T230000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:MADMT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:MADMT
-DTSTART:19440422T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SA;UNTIL=19450421T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MADST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:MADST
-DTSTART:19470406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19490403T030000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T030000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MADST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:MADST
-DTSTART:19510401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19650404T030000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T030000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MADT
TZOFFSETFROM:+0000
TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19511007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19651003T030000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
TZNAME:WEST
-DTSTART:19780402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19790401T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
+TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19820926T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19830925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19840325T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-010736
-TZOFFSETTO:-010736
-TZNAME:FMT
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-010736
-TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19110524T000000
-RDATE:19110524T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:MADST
-DTSTART:19160617T230000
-RDATE:19160617T230000
-RDATE:19170228T230000
-RDATE:19180301T230000
-RDATE:19190228T230000
-RDATE:19200229T230000
-RDATE:19210228T230000
-RDATE:19240416T230000
-RDATE:19260417T230000
-RDATE:19270409T230000
-RDATE:19280414T230000
-RDATE:19290420T230000
-RDATE:19310418T230000
-RDATE:19320402T230000
-RDATE:19340407T230000
-RDATE:19350330T230000
-RDATE:19360418T230000
-RDATE:19370403T230000
-RDATE:19380326T230000
-RDATE:19390415T230000
-RDATE:19400224T230000
-RDATE:19410405T230000
-RDATE:19460406T230000
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:MADT
-DTSTART:19161101T010000
-RDATE:19161101T010000
-RDATE:19241015T000000
-RDATE:19391119T000000
-RDATE:19461006T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:MADMT
-DTSTART:19420425T230000
-RDATE:19420425T230000
-RDATE:19430417T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:MADST
-DTSTART:19420816T000000
-RDATE:19420816T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19660403T020000
-RDATE:19660403T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19770327T000000
-RDATE:19770327T000000
-RDATE:19800330T000000
-RDATE:19830327T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19770925T010000
-RDATE:19770925T010000
-RDATE:19781001T010000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Reykjavik.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Reykjavik.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Reykjavik.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,62 +1,32 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Reykjavik
X-LIC-LOCATION:Atlantic/Reykjavik
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19170219T230000
-RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19430307T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19460303T020000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19431024T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19481024T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19470406T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19670402T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19501022T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T020000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18370101T000000
+RDATE:18370101T000000
+TZNAME:RMT
TZOFFSETFROM:-012724
TZOFFSETTO:-012748
-TZNAME:RMT
-DTSTART:18370101T000000
-RDATE:18370101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19080101T000000
+RDATE:19080101T000000
+TZNAME:ISST
TZOFFSETFROM:-012748
TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19080101T000000
-RDATE:19080101T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170219T230000
+RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z;BYMONTH=2
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
DTSTART:19171021T010000
RDATE:19171021T010000
RDATE:19181116T010000
@@ -66,23 +36,54 @@
RDATE:19421025T020000
RDATE:19491030T020000
RDATE:19671029T020000
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
DTSTART:19390429T230000
RDATE:19390429T230000
RDATE:19400225T020000
RDATE:19410302T010000
RDATE:19420308T010000
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19430307T010000
+RRULE:FREQ=YEARLY;UNTIL=19460303T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431024T020000
+RRULE:FREQ=YEARLY;UNTIL=19481024T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T010000
+RRULE:FREQ=YEARLY;UNTIL=19670402T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ISST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T020000
+RRULE:FREQ=YEARLY;UNTIL=19661023T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19680407T010000
RDATE:19680407T010000
+TZNAME:GMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/South_Georgia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/South_Georgia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/South_Georgia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/South_Georgia
X-LIC-LOCATION:Atlantic/South_Georgia
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:GST
TZOFFSETFROM:-022608
TZOFFSETTO:-0200
-TZNAME:GST
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/St_Helena.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/St_Helena.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/St_Helena.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/St_Helena
X-LIC-LOCATION:Atlantic/St_Helena
BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:JMT
TZOFFSETFROM:-002248
TZOFFSETTO:-002248
-TZNAME:JMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510101T000000
+RDATE:19510101T000000
+TZNAME:GMT
TZOFFSETFROM:-002248
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19510101T000000
-RDATE:19510101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Stanley.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Stanley.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Atlantic/Stanley.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,114 +1,118 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Atlantic/Stanley
X-LIC-LOCATION:Atlantic/Stanley
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SMT
+TZOFFSETFROM:-035124
+TZOFFSETTO:-035124
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19120312T000000
+RDATE:19120312T000000
TZNAME:FKST
-DTSTART:19370926T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19380925T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-035124
TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:19380320T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19420322T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370926T000000
+RRULE:FREQ=YEARLY;UNTIL=19380925T040000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:FKST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:FKST
-DTSTART:19400929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19420927T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19380320T000000
+RRULE:FREQ=YEARLY;UNTIL=19420322T030000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
TZNAME:FKT
-DTSTART:19840429T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19850428T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:19860420T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=20000416T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19391001T000000
+RDATE:19391001T000000
+TZNAME:FKST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19400929T000000
+RRULE:FREQ=YEARLY;UNTIL=19420927T040000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:FKST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=20000910T040000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19430101T000000
+RDATE:19430101T000000
+TZNAME:FKT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:20010415T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830501T000000
+RDATE:19830501T000000
+TZNAME:FKST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19840916T000000
TZNAME:FKST
-DTSTART:20010902T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-035124
-TZOFFSETTO:-035124
-TZNAME:SMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
+DTSTART:19840429T000000
+RRULE:FREQ=YEARLY;UNTIL=19850428T020000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:FKT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-035124
+DTSTART:19850915T000000
+RDATE:19850915T000000
+TZNAME:FKST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860420T000000
+RRULE:FREQ=YEARLY;UNTIL=20000416T030000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:FKT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:19120312T000000
-RDATE:19120312T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=20000910T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=9
+TZNAME:FKST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:FKST
-DTSTART:19391001T000000
-RDATE:19391001T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010415T020000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=4
+TZNAME:FKT
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:FKT
-DTSTART:19430101T000000
-RDATE:19430101T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:FKT
-DTSTART:19830501T000000
-RDATE:19830501T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+DTSTART:20010902T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=9
TZNAME:FKST
-DTSTART:19830925T000000
-RDATE:19830925T000000
-RDATE:19840916T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:FKST
-DTSTART:19850915T000000
-RDATE:19850915T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/ACT.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/ACT.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/ACT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,123 +1,124 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/ACT
X-LIC-LOCATION:Australia/ACT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+100452
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Adelaide.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Adelaide.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Adelaide.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,112 +1,112 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Adelaide
X-LIC-LOCATION:Australia/Adelaide
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
TZNAME:CST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T163000Z
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+091420
-TZOFFSETTO:+0900
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CST
-DTSTART:18950201T000000
-RDATE:18950201T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
+TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19900318T030000
-RDATE:19910303T030000
-RDATE:19920322T030000
-RDATE:19930307T030000
-RDATE:19940320T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0930
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Brisbane.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Brisbane.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Brisbane.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,63 +1,64 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Brisbane
X-LIC-LOCATION:Australia/Brisbane
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:18950101T000000
+RDATE:18950101T000000
TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19891029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19911026T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19920229T160000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+101208
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
RDATE:19420927T020000
RDATE:19431003T020000
RDATE:19711031T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
RDATE:19720227T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19710101T000000
RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19920229T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Broken_Hill.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Broken_Hill.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Broken_Hill.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,136 +1,151 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Broken_Hill
X-LIC-LOCATION:Australia/Broken_Hill
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+092548
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18960823T000000
+RDATE:18960823T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T163000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1030
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:CST
+TZOFFSETFROM:+0930
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T163000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+092548
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=19990327T163000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CST
-DTSTART:18960823T000000
-RDATE:18960823T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0930
+DTSTART:20000101T000000
+RDATE:20000101T000000
TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1030
END:STANDARD
+BEGIN:STANDARD
+DTSTART:20000326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001029T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0930
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1030
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20000101T000000
-RDATE:20000101T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Canberra.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Canberra.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Canberra.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,123 +1,124 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Canberra
X-LIC-LOCATION:Australia/Canberra
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+100452
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Currie.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Currie.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Currie.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,137 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Currie
X-LIC-LOCATION:Australia/Currie
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950901T000000
+RDATE:18950901T000000
+TZNAME:EST
+TZOFFSETFROM:+093528
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19170201T000000
+RDATE:19170201T000000
TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19820328T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19830326T160000Z
+TZOFFSETTO:+1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
TZNAME:EST
-DTSTART:19840304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19860301T160000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19870315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19900317T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901027T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710701T000000
+RDATE:19710701T000000
TZNAME:EST
-DTSTART:19910331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20030329T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19911006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19991002T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20040328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870315T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+093528
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950901T000000
-RDATE:18950901T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19161001T020000
-RDATE:19161001T020000
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
-RDATE:19871025T020000
-RDATE:20000827T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170201T000000
-RDATE:19170201T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710701T000000
-RDATE:19710701T000000
-RDATE:20060402T020000
-RDATE:20070325T020000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Darwin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Darwin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Darwin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,47 +1,48 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Darwin
X-LIC-LOCATION:Australia/Darwin
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+084320
TZOFFSETTO:+0900
-TZNAME:CST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0930
-TZOFFSETTO:+1030
-TZNAME:CST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
RDATE:19420927T020000
RDATE:19431003T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Eucla.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Eucla.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Eucla.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,34 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Eucla
X-LIC-LOCATION:Australia/Eucla
BEGIN:STANDARD
-TZOFFSETFROM:+0945
-TZOFFSETTO:+0845
+DTSTART:18951201T000000
+RDATE:18951201T000000
TZNAME:CWST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20090328T171500Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0845
-TZOFFSETTO:+0945
-TZNAME:CWST
-DTSTART:20071028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20081025T171500Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+083528
TZOFFSETTO:+0845
-TZNAME:CWST
-DTSTART:18951201T000000
-RDATE:18951201T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0845
-TZOFFSETTO:+0945
-TZNAME:CWST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
@@ -37,11 +21,11 @@
RDATE:19831030T020000
RDATE:19911117T020000
RDATE:20061203T020000
+TZNAME:CWST
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0945
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0945
-TZOFFSETTO:+0845
-TZNAME:CWST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
@@ -49,13 +33,30 @@
RDATE:19750302T030000
RDATE:19840304T030000
RDATE:19920301T030000
+TZNAME:CWST
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430701T000000
+RDATE:19430701T000000
+TZNAME:CWST
TZOFFSETFROM:+0845
TZOFFSETTO:+0845
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20090328T171500Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CWST
-DTSTART:19430701T000000
-RDATE:19430701T000000
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20071028T020000
+RRULE:FREQ=YEARLY;UNTIL=20081025T171500Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CWST
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0945
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Hobart.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Hobart.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Hobart.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,146 +1,146 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Hobart
X-LIC-LOCATION:Australia/Hobart
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950901T000000
+RDATE:18950901T000000
+TZNAME:EST
+TZOFFSETFROM:+094916
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170201T000000
+RDATE:19170201T000000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19680331T030000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19681027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
TZNAME:EST
-DTSTART:19690309T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU;UNTIL=19710313T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19690309T030000
+RRULE:FREQ=YEARLY;UNTIL=19710313T160000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19820328T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19830326T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19840304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19860301T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19870315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19900317T160000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901027T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19910331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20030329T160000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19911006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19991002T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20040328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:20080406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+094916
-TZOFFSETTO:+1000
+BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
TZNAME:EST
-DTSTART:18950901T000000
-RDATE:18950901T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19161001T020000
-RDATE:19161001T020000
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19671001T020000
-RDATE:19861019T020000
-RDATE:19871025T020000
-RDATE:20000827T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170201T000000
-RDATE:19170201T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19680331T030000
-RDATE:19720227T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19670101T000000
-RDATE:19670101T000000
-RDATE:20060402T020000
-RDATE:20070325T020000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/LHI.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/LHI.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/LHI.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,103 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/LHI
X-LIC-LOCATION:Australia/LHI
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+103620
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810301T000000
+RDATE:19810301T000000
+TZNAME:LHST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1030
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19841027T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1130
-TZNAME:LHST
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19841027T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19820307T020000
+RRULE:FREQ=YEARLY;UNTIL=19850302T143000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1130
TZOFFSETTO:+1030
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19851027T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
TZNAME:LHST
-DTSTART:19820307T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T143000Z
-END:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860316T020000
+RRULE:FREQ=YEARLY;UNTIL=19890318T150000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19860316T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T020000
+RRULE:FREQ=YEARLY;UNTIL=19950304T150000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19900304T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T150000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19960331T020000
+RRULE:FREQ=YEARLY;UNTIL=20050326T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19960331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20060402T020000
+RDATE:20060402T020000
+RDATE:20070325T020000
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080406T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZNAME:LHST
-DTSTART:20080406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1030
-TZOFFSETTO:+1100
-TZNAME:LHST
DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+103620
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1030
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:LHST
-DTSTART:19810301T000000
-RDATE:19810301T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:19851027T020000
-RDATE:19851027T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:20060402T020000
-RDATE:20060402T020000
-RDATE:20070325T020000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lindeman.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lindeman.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lindeman.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Lindeman
X-LIC-LOCATION:Australia/Lindeman
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:+095556
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19891029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19931030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19940305T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+095556
+DTSTART:19710101T000000
+RDATE:19710101T000000
+RDATE:19920701T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19891029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19711031T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19920229T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19921025T020000
+RRULE:FREQ=YEARLY;UNTIL=19931030T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-END:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19930307T030000
+RRULE:FREQ=YEARLY;UNTIL=19940305T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-RDATE:19920701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lord_Howe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lord_Howe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Lord_Howe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,103 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Lord_Howe
X-LIC-LOCATION:Australia/Lord_Howe
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+103620
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810301T000000
+RDATE:19810301T000000
+TZNAME:LHST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1030
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19841027T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1130
-TZNAME:LHST
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19841027T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19820307T020000
+RRULE:FREQ=YEARLY;UNTIL=19850302T143000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1130
TZOFFSETTO:+1030
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19851027T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
TZNAME:LHST
-DTSTART:19820307T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T143000Z
-END:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860316T020000
+RRULE:FREQ=YEARLY;UNTIL=19890318T150000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19860316T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T020000
+RRULE:FREQ=YEARLY;UNTIL=19950304T150000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19900304T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T150000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19960331T020000
+RRULE:FREQ=YEARLY;UNTIL=20050326T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:19960331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T153000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:LHST
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T153000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20060402T020000
+RDATE:20060402T020000
+RDATE:20070325T020000
+TZNAME:LHST
TZOFFSETFROM:+1100
TZOFFSETTO:+1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080406T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
TZNAME:LHST
-DTSTART:20080406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1030
-TZOFFSETTO:+1100
-TZNAME:LHST
DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+103620
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1030
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:LHST
-DTSTART:19810301T000000
-RDATE:19810301T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-TZNAME:LHST
-DTSTART:19851027T020000
-RDATE:19851027T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1030
-TZNAME:LHST
-DTSTART:20060402T020000
-RDATE:20060402T020000
-RDATE:20070325T020000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Melbourne.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Melbourne.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Melbourne.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Melbourne
X-LIC-LOCATION:Australia/Melbourne
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+093952
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19900317T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19861019T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19871017T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19910303T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19940305T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19861019T020000
+RRULE:FREQ=YEARLY;UNTIL=19871017T160000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910303T030000
+RRULE:FREQ=YEARLY;UNTIL=19940305T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+093952
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/NSW.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/NSW.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/NSW.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,123 +1,124 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/NSW
X-LIC-LOCATION:Australia/NSW
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+100452
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/North.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/North.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/North.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,47 +1,48 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/North
X-LIC-LOCATION:Australia/North
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+084320
TZOFFSETTO:+0900
-TZNAME:CST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0930
-TZOFFSETTO:+1030
-TZNAME:CST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
RDATE:19420927T020000
RDATE:19431003T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Perth.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Perth.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Perth.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,34 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Perth
X-LIC-LOCATION:Australia/Perth
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:18951201T000000
+RDATE:18951201T000000
TZNAME:WST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20090328T180000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:WST
-DTSTART:20071028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20081025T180000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+074324
TZOFFSETTO:+0800
-TZNAME:WST
-DTSTART:18951201T000000
-RDATE:18951201T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:WST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
@@ -37,11 +21,11 @@
RDATE:19831030T020000
RDATE:19911117T020000
RDATE:20061203T020000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:WST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
@@ -49,13 +33,30 @@
RDATE:19750302T030000
RDATE:19840304T030000
RDATE:19920301T030000
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430701T000000
+RDATE:19430701T000000
+TZNAME:WST
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20090328T180000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:WST
-DTSTART:19430701T000000
-RDATE:19430701T000000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20071028T020000
+RRULE:FREQ=YEARLY;UNTIL=20081025T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Queensland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Queensland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Queensland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,63 +1,64 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Queensland
X-LIC-LOCATION:Australia/Queensland
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
+DTSTART:18950101T000000
+RDATE:18950101T000000
TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19891029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19911026T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19920229T160000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+101208
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
-TZNAME:EST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
RDATE:19420927T020000
RDATE:19431003T020000
RDATE:19711031T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
RDATE:19720227T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19710101T000000
RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19920229T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/South.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/South.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/South.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,112 +1,112 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/South
X-LIC-LOCATION:Australia/South
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
TZNAME:CST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T163000Z
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+091420
-TZOFFSETTO:+0900
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CST
-DTSTART:18950201T000000
-RDATE:18950201T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
+TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19900318T030000
-RDATE:19910303T030000
-RDATE:19920322T030000
-RDATE:19930307T030000
-RDATE:19940320T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0930
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Sydney.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Sydney.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Sydney.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,123 +1,124 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Sydney
X-LIC-LOCATION:Australia/Sydney
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
TZNAME:EST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T160000Z
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+100452
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Tasmania.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Tasmania.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Tasmania.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,146 +1,146 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Tasmania
X-LIC-LOCATION:Australia/Tasmania
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950901T000000
+RDATE:18950901T000000
+TZNAME:EST
+TZOFFSETFROM:+094916
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170201T000000
+RDATE:19170201T000000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19680331T030000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19681027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
TZNAME:EST
-DTSTART:19690309T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU;UNTIL=19710313T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19690309T030000
+RRULE:FREQ=YEARLY;UNTIL=19710313T160000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19820328T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19830326T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19840304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19860301T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19870315T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19900317T160000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901027T160000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19910331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20030329T160000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19911006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19991002T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20011007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20040328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:20080406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+094916
-TZOFFSETTO:+1000
+BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
TZNAME:EST
-DTSTART:18950901T000000
-RDATE:18950901T000000
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19161001T020000
-RDATE:19161001T020000
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19671001T020000
-RDATE:19861019T020000
-RDATE:19871025T020000
-RDATE:20000827T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1100
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170201T000000
-RDATE:19170201T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19680331T030000
-RDATE:19720227T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19670101T000000
-RDATE:19670101T000000
-RDATE:20060402T020000
-RDATE:20070325T020000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Victoria.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Victoria.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Victoria.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Victoria
X-LIC-LOCATION:Australia/Victoria
BEGIN:STANDARD
-TZOFFSETFROM:+1100
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+093952
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:20000827T020000
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
TZNAME:EST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19900317T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1100
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:19861019T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU;UNTIL=19871017T160000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19881030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991030T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19910303T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19940305T160000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T160000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19861019T020000
+RRULE:FREQ=YEARLY;UNTIL=19871017T160000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
-DTSTART:20011028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T160000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910303T030000
+RRULE:FREQ=YEARLY;UNTIL=19940305T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
TZOFFSETFROM:+1100
TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+093952
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:+1000
TZOFFSETTO:+1100
-TZNAME:EST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:20000827T020000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/West.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/West.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/West.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,34 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/West
X-LIC-LOCATION:Australia/West
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:18951201T000000
+RDATE:18951201T000000
TZNAME:WST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20090328T180000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:WST
-DTSTART:20071028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20081025T180000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+074324
TZOFFSETTO:+0800
-TZNAME:WST
-DTSTART:18951201T000000
-RDATE:18951201T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:WST
DTSTART:19170101T000100
RDATE:19170101T000100
RDATE:19420101T020000
@@ -37,11 +21,11 @@
RDATE:19831030T020000
RDATE:19911117T020000
RDATE:20061203T020000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:WST
DTSTART:19170325T020000
RDATE:19170325T020000
RDATE:19420329T020000
@@ -49,13 +33,30 @@
RDATE:19750302T030000
RDATE:19840304T030000
RDATE:19920301T030000
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430701T000000
+RDATE:19430701T000000
+TZNAME:WST
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20090328T180000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:WST
-DTSTART:19430701T000000
-RDATE:19430701T000000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20071028T020000
+RRULE:FREQ=YEARLY;UNTIL=20081025T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Yancowinna.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Yancowinna.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Australia/Yancowinna.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,136 +1,151 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Australia/Yancowinna
X-LIC-LOCATION:Australia/Yancowinna
BEGIN:STANDARD
-TZOFFSETFROM:+1030
-TZOFFSETTO:+0930
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+092548
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18960823T000000
+RDATE:18960823T000000
TZNAME:CST
-DTSTART:19430328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19440325T153000Z
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19711031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19851026T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19730304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19810228T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19830306T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19850302T163000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1030
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:CST
+TZOFFSETFROM:+0930
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19860316T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19890318T163000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19871025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20071027T163000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19900304T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19950304T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19960331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20050326T163000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20081005T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+092548
-TZOFFSETTO:+1000
-TZNAME:EST
-DTSTART:18950201T000000
-RDATE:18950201T000000
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=19990327T163000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CST
-DTSTART:18960823T000000
-RDATE:18960823T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0930
+DTSTART:20000101T000000
+RDATE:20000101T000000
TZNAME:CST
-DTSTART:18990501T000000
-RDATE:18990501T000000
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1030
END:STANDARD
+BEGIN:STANDARD
+DTSTART:20000326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001029T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0930
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:19170101T000100
-RDATE:19170101T000100
-RDATE:19420101T020000
-RDATE:19420927T020000
-RDATE:19431003T020000
-RDATE:19861019T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
TZOFFSETFROM:+1030
TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19170325T020000
-RDATE:19170325T020000
-RDATE:19420329T020000
-RDATE:19720227T030000
-RDATE:19820404T030000
-RDATE:20060402T030000
-RDATE:20070325T030000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0930
-TZOFFSETTO:+0930
-TZNAME:CST
-DTSTART:19710101T000000
-RDATE:19710101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1030
TZOFFSETTO:+1030
-TZNAME:CST
-DTSTART:20000101T000000
-RDATE:20000101T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/Acre.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/Acre.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/Acre.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,74 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Brazil/Acre
X-LIC-LOCATION:Brazil/Acre
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:ACST
+TZOFFSETFROM:-043112
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+TZNAME:ACST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T040000Z;BYMONTH=4
TZNAME:ACT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T050000Z;BYMONTH=12
TZNAME:ACST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T050000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-043112
-TZOFFSETTO:-0500
-TZNAME:ACT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:ACST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:ACT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -77,20 +49,44 @@
RDATE:19860315T000000
RDATE:19870214T000000
RDATE:19880207T000000
+TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T040000Z;BYMONTH=4
+TZNAME:ACT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T040000Z;BYMONTH=3
TZNAME:ACT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T050000Z;BYMONTH=11
+TZNAME:ACST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
+TZNAME:ACT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:20080624T000000
RDATE:20080624T000000
+TZNAME:AMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/DeNoronha.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/DeNoronha.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/DeNoronha.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Brazil/DeNoronha
X-LIC-LOCATION:Brazil/DeNoronha
BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:FNST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:-020940
TZOFFSETTO:-0200
-TZNAME:FNT
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0100
-TZNAME:FNST
DTSTART:19311003T110000
RDATE:19311003T110000
RDATE:19321003T000000
@@ -71,14 +20,32 @@
RDATE:19650131T000000
RDATE:19651201T000000
RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
RDATE:19881016T000000
RDATE:19891015T000000
RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T010000Z;BYMONTH=4
+TZNAME:FNT
TZOFFSETFROM:-0100
TZOFFSETTO:-0200
-TZNAME:FNT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T020000Z;BYMONTH=12
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -92,16 +59,46 @@
RDATE:20000227T000000
RDATE:20001015T000000
RDATE:20020217T000000
+TZNAME:FNT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T010000Z;BYMONTH=4
+TZNAME:FNT
+TZOFFSETFROM:-0100
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T010000Z;BYMONTH=3
TZNAME:FNT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T020000Z;BYMONTH=11
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900917T000000
RDATE:19900917T000000
+RDATE:20021001T000000
+TZNAME:FNT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990930T000000
RDATE:19990930T000000
RDATE:20010913T000000
-RDATE:20021001T000000
+TZNAME:FNST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/East.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/East.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/East.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,209 +1,175 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Brazil/East
X-LIC-LOCATION:Brazil/East
BEGIN:STANDARD
-TZOFFSETFROM:-0200
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-030628
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
TZNAME:BRT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0200
+BEGIN:STANDARD
+DTSTART:19631023T000000
+RDATE:19631023T000000
TZNAME:BRST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
TZNAME:BRST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T030000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19931017T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19951015T030000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19940220T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=19950219T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19961006T000000
-RRULE:FREQ=YEARLY;UNTIL=19971006T030000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20001008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=20011014T030000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0300
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20010218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20060219T020000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20080217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20110220T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:20081019T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20130217T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20140216T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20160221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20220220T030000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20240218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20250216T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
+TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20270221T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20330220T030000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:20350218T000000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU;UNTIL=20360217T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-030628
-TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:BRST
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631023T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19881016T000000
-RDATE:19891015T000000
-RDATE:19901021T000000
-RDATE:19911020T000000
-RDATE:19921025T000000
-RDATE:19981011T000000
-RDATE:19991003T000000
-RDATE:20021103T000000
-RDATE:20031019T000000
-RDATE:20041102T000000
-RDATE:20051016T000000
-RDATE:20061105T000000
-RDATE:20071014T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:BRT
-DTSTART:19500416T010000
-RDATE:19500416T010000
-RDATE:19530301T000000
-RDATE:19640301T000000
-RDATE:19650331T000000
-RDATE:19860315T000000
-RDATE:19870214T000000
-RDATE:19880207T000000
-RDATE:19890129T000000
-RDATE:19900211T000000
-RDATE:19910217T000000
-RDATE:19920209T000000
-RDATE:19930131T000000
-RDATE:19960211T000000
-RDATE:19970216T000000
-RDATE:19980301T000000
-RDATE:19990221T000000
-RDATE:20000227T000000
-RDATE:20070225T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0200
-TZNAME:BRST
-DTSTART:19640101T000000
-RDATE:19640101T000000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20170219T020000Z;BYDAY=3SU;BYMONTH=2
TZNAME:BRT
-DTSTART:20120226T000000
-RDATE:20120226T000000
-RDATE:20150222T000000
-RDATE:20230226T000000
-RDATE:20260222T000000
-RDATE:20340226T000000
-RDATE:20370222T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/West.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/West.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Brazil/West.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,75 +1,47 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Brazil/West
X-LIC-LOCATION:Brazil/West
BEGIN:STANDARD
-TZOFFSETFROM:-0300
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-040004
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19320401T000000
-RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+TZNAME:AMST
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19491201T000000
-RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
TZNAME:AMT
-DTSTART:19510401T000000
-RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19660301T000000
-RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
TZNAME:AMST
-DTSTART:19661101T000000
-RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19861025T000000
-RRULE:FREQ=YEARLY;UNTIL=19871025T040000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-040004
-TZOFFSETTO:-0400
-TZNAME:AMT
-DTSTART:19140101T000000
-RDATE:19140101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:AMST
-DTSTART:19311003T110000
-RDATE:19311003T110000
-RDATE:19321003T000000
-RDATE:19631209T000000
-RDATE:19650131T000000
-RDATE:19651201T000000
-RDATE:19851102T000000
-RDATE:19931017T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AMT
DTSTART:19500416T010000
RDATE:19500416T010000
RDATE:19530301T000000
@@ -79,15 +51,45 @@
RDATE:19870214T000000
RDATE:19880207T000000
RDATE:19940220T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19880912T000000
RDATE:19880912T000000
-RDATE:19930928T000000
RDATE:19940922T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930928T000000
+RDATE:19930928T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CET.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/CET.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CET.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CET.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,87 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:CET
+X-LIC-LOCATION:CET
+BEGIN:STANDARD
+DTSTART:18000101T010000
+RDATE:18000101T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CST6CDT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/CST6CDT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CST6CDT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/CST6CDT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,101 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:CST6CDT
+X-LIC-LOCATION:CST6CDT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Atlantic.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Atlantic.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Atlantic.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,211 +1,221 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Atlantic
X-LIC-LOCATION:Canada/Atlantic
BEGIN:STANDARD
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19390528T000000
+TZNAME:ADT
TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181031T020000
+RDATE:19200829T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
TZNAME:AST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T040000Z
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
END:STANDARD
BEGIN:STANDARD
+DTSTART:19210905T000000
+RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19210905T000000
-RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19230506T000000
+RRULE:FREQ=YEARLY;UNTIL=19250503T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19230506T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19250503T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19280513T000000
+RRULE:FREQ=YEARLY;UNTIL=19310510T040000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19280513T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19310510T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19310928T000000
+RRULE:FREQ=YEARLY;UNTIL=19320926T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19310928T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19320926T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370502T000000
+RRULE:FREQ=YEARLY;UNTIL=19380501T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19370502T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19380501T040000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19370927T000000
+RRULE:FREQ=YEARLY;UNTIL=19410929T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19370927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19410929T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400505T000000
+RRULE:FREQ=YEARLY;UNTIL=19410504T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19400505T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19410504T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T060000Z
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19490925T050000Z
-END:STANDARD
+TZOFFSETTO:-0300
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19560429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19590426T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19560930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19590426T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19620429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T060000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19560930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T050000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
+DTSTART:19620429T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T060000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:ADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T060000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-041424
-TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19020615T000000
-RDATE:19020615T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:ADT
-DTSTART:19160401T000000
-RDATE:19160401T000000
-RDATE:19180414T020000
-RDATE:19200509T000000
-RDATE:19210506T000000
-RDATE:19220430T000000
-RDATE:19260516T000000
-RDATE:19270501T000000
-RDATE:19320501T000000
-RDATE:19330430T000000
-RDATE:19340520T000000
-RDATE:19350602T000000
-RDATE:19360601T000000
-RDATE:19390528T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19161001T000000
-RDATE:19161001T000000
-RDATE:19181031T020000
-RDATE:19200829T000000
-RDATE:19230904T000000
-RDATE:19240915T000000
-RDATE:19250928T000000
-RDATE:19260913T000000
-RDATE:19270926T000000
-RDATE:19280909T000000
-RDATE:19290903T000000
-RDATE:19300915T000000
-RDATE:19331002T000000
-RDATE:19340916T000000
-RDATE:19350930T000000
-RDATE:19360914T000000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:AWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0300
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-TZNAME:APT
-DTSTART:19450814T200000
-RDATE:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-TZNAME:AST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19740101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Central.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Central.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Central.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,128 +1,129 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Central
X-LIC-LOCATION:Canada/Central
+BEGIN:STANDARD
+DTSTART:18870716T000000
+RDATE:18870716T000000
+TZNAME:CST
+TZOFFSETFROM:-062836
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160423T000000
+RDATE:19160423T000000
+RDATE:19180414T020000
+RDATE:19370516T020000
+RDATE:19460512T020000
+RDATE:19500501T020000
+RDATE:19630428T020000
+RDATE:20060402T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19160917T000000
+RDATE:19160917T000000
+RDATE:19181031T020000
+RDATE:19370926T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19500930T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19630922T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19490925T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T080000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19660424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19661030T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20051030T080000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19660424T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20050403T080000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19661030T030000
+RRULE:FREQ=YEARLY;UNTIL=20051030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-062836
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18870716T000000
-RDATE:18870716T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20050403T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19160423T000000
-RDATE:19160423T000000
-RDATE:19180414T020000
-RDATE:19370516T020000
-RDATE:19460512T020000
-RDATE:19500501T020000
-RDATE:19630428T020000
-RDATE:20060402T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:20060101T000000
+RDATE:20060101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19160917T000000
-RDATE:19160917T000000
-RDATE:19181031T020000
-RDATE:19370926T020000
-RDATE:19450930T020000
-RDATE:19461013T020000
-RDATE:19500930T020000
-RDATE:19591025T020000
-RDATE:19600925T020000
-RDATE:19630922T020000
-RDATE:20061029T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20060101T000000
-RDATE:20060101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/East-Saskatchewan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/East-Saskatchewan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/East-Saskatchewan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,99 +1,100 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/East-Saskatchewan
X-LIC-LOCATION:Canada/East-Saskatchewan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19300504T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19340506T070000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19050901T000000
+RDATE:19050901T000000
+TZNAME:MST
+TZOFFSETFROM:-065836
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19301005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19341007T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460414T020000
+RDATE:19590426T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19370411T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;UNTIL=19410413T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19591025T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19391008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19411012T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19300504T000000
+RRULE:FREQ=YEARLY;UNTIL=19340506T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19570428T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19301005T000000
+RRULE:FREQ=YEARLY;UNTIL=19341007T060000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19570929T080000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-065836
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19050901T000000
-RDATE:19050901T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370411T000000
+RRULE:FREQ=YEARLY;UNTIL=19410413T070000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19460414T020000
-RDATE:19590426T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19391008T000000
+RRULE:FREQ=YEARLY;UNTIL=19411012T060000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19371010T000000
-RDATE:19381002T000000
-RDATE:19450930T020000
-RDATE:19461013T020000
-RDATE:19591025T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19570428T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:CST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19570929T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19600424T020000
RDATE:19600424T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Eastern.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Eastern.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Eastern.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,170 +1,185 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Eastern
X-LIC-LOCATION:Canada/Eastern
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:-051732
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190330T233000
+RDATE:19200502T020000
+RDATE:19210515T020000
+RDATE:19320501T020000
+RDATE:19460428T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19220514T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19230513T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19191026T000000
+RDATE:19200926T000000
+RDATE:19210915T020000
+RDATE:19331001T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19491127T000000
+RDATE:19501126T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
TZNAME:EST
-DTSTART:19220917T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19260919T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220514T020000
+RRULE:FREQ=YEARLY;UNTIL=19230513T070000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19240504T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19270501T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19220917T020000
+RRULE:FREQ=YEARLY;UNTIL=19260919T060000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19270925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19320925T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19240504T020000
+RRULE:FREQ=YEARLY;UNTIL=19270501T070000Z;BYDAY=1SU;BYMONTH=5
TZNAME:EDT
-DTSTART:19280429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19310426T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19330430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19400428T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19270925T020000
+RRULE:FREQ=YEARLY;UNTIL=19320925T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19340930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19390924T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280429T020000
+RRULE:FREQ=YEARLY;UNTIL=19310426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19330430T020000
+RRULE:FREQ=YEARLY;UNTIL=19400428T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19470427T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19490424T050000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19390924T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19470928T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19480926T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T030000
+RDATE:19420209T030000
+TZNAME:EWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T000000
+RRULE:FREQ=YEARLY;UNTIL=19490424T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19500430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19470928T000000
+RRULE:FREQ=YEARLY;UNTIL=19480926T040000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19560930T060000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19571027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19560930T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-051732
+DTSTART:19571027T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19190330T233000
-RDATE:19200502T020000
-RDATE:19210515T020000
-RDATE:19320501T020000
-RDATE:19460428T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19191026T000000
-RDATE:19200926T000000
-RDATE:19210915T020000
-RDATE:19331001T020000
-RDATE:19450930T020000
-RDATE:19460929T020000
-RDATE:19491127T000000
-RDATE:19501126T020000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19190101T000000
-RDATE:19190101T000000
-RDATE:19460101T000000
-RDATE:19740101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Mountain.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Mountain.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Mountain.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,114 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Mountain
X-LIC-LOCATION:Canada/Mountain
+BEGIN:STANDARD
+DTSTART:19060901T000000
+RDATE:19060901T000000
+TZNAME:MST
+TZOFFSETFROM:-073352
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
+DTSTART:19180414T020000
+RRULE:FREQ=YEARLY;UNTIL=19190413T090000Z;BYDAY=2SU;BYMONTH=4
TZNAME:MDT
-DTSTART:19180414T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;UNTIL=19190413T090000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19200425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19230429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19190527T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19671029T020000
+RDATE:19691026T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19230930T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200425T020000
+RRULE:FREQ=YEARLY;UNTIL=19230429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19720430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19230930T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19721029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RDATE:19470427T020000
+RDATE:19670430T020000
+RDATE:19690427T020000
TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19720430T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-073352
-TZOFFSETTO:-0700
+DTSTART:19870101T000000
+RDATE:19870101T000000
TZNAME:MST
-DTSTART:19060901T000000
-RDATE:19060901T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
+TZOFFSETFROM:-0700
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19190527T020000
-RDATE:19201031T020000
-RDATE:19450930T020000
-RDATE:19470928T020000
-RDATE:19671029T020000
-RDATE:19691026T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
-END:DAYLIGHT
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19470427T020000
-RDATE:19470427T020000
-RDATE:19670430T020000
-RDATE:19690427T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19870101T000000
-RDATE:19870101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Newfoundland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Newfoundland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Newfoundland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,190 +1,189 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Newfoundland
X-LIC-LOCATION:Canada/Newfoundland
BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+TZNAME:NST
TZOFFSETFROM:-033052
TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:19180101T000000
-RRULE:FREQ=YEARLY;UNTIL=19190101T033052Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+TZNAME:NDT
TZOFFSETFROM:-033052
TZOFFSETTO:-023052
-TZNAME:NDT
-DTSTART:19200502T230000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19340507T023052Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181031T020000
+RDATE:19190812T230000
+TZNAME:NST
TZOFFSETFROM:-023052
TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:19201031T230000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19341029T013052Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
+DTSTART:19200502T230000
+RRULE:FREQ=YEARLY;UNTIL=19340507T023052Z;BYDAY=1SU;BYMONTH=5
TZNAME:NDT
-DTSTART:19360511T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=MO;UNTIL=19410512T033000Z
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19201031T230000
+RRULE:FREQ=YEARLY;UNTIL=19341029T013052Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19361005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19411006T023000Z
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350330T000000
+RDATE:19350330T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19870405T000100
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19460512T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19500514T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19450930T020000
+RDATE:19871025T000100
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19461006T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501008T043000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19360511T000000
+RRULE:FREQ=YEARLY;UNTIL=19410512T033000Z;BYDAY=MO;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19510429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T053000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19361005T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T023000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:19510930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19590927T043000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19420511T000000
+RDATE:19420511T000000
TZNAME:NST
-DTSTART:19601030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19861026T043000Z
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0330
+DTSTART:19450814T203000
+RDATE:19450814T203000
+TZNAME:NPT
+TZOFFSETFROM:-0230
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19890402T000100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T033100Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:NST
-DTSTART:19891029T000100
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T023100Z
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19460512T020000
+RRULE:FREQ=YEARLY;UNTIL=19500514T053000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:20070311T000100
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19461006T020000
+RRULE:FREQ=YEARLY;UNTIL=19501008T043000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
TZOFFSETFROM:-0230
TZOFFSETTO:-0330
-TZNAME:NST
-DTSTART:20071104T000100
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-033052
-TZOFFSETTO:-033052
-TZNAME:NST
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-033052
-TZOFFSETTO:-023052
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T053000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:NDT
-DTSTART:19170408T020000
-RDATE:19170408T020000
-RDATE:19180414T020000
-RDATE:19190505T230000
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-023052
-TZOFFSETTO:-033052
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T043000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:NST
-DTSTART:19170917T020000
-RDATE:19170917T020000
-RDATE:19181031T020000
-RDATE:19190812T230000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-033052
-TZOFFSETTO:-0330
+DTSTART:19601030T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T043000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19350330T000000
-RDATE:19350330T000000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+TZNAME:NDDT
TZOFFSETFROM:-0330
-TZOFFSETTO:-0230
-TZNAME:NDT
-DTSTART:19350505T230000
-RDATE:19350505T230000
-RDATE:19870405T000100
+TZOFFSETTO:-0130
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0330
+DTSTART:19881030T000100
+RDATE:19881030T000100
TZNAME:NST
-DTSTART:19351027T230000
-RDATE:19351027T230000
-RDATE:19450930T020000
-RDATE:19871025T000100
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19890402T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T033100Z;BYDAY=1SU;BYMONTH=4
+TZNAME:NDT
TZOFFSETFROM:-0330
TZOFFSETTO:-0230
-TZNAME:NWT
-DTSTART:19420511T000000
-RDATE:19420511T000000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0230
-TZOFFSETTO:-0230
-TZNAME:NPT
-DTSTART:19450814T203000
-RDATE:19450814T203000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0330
+DTSTART:19891029T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T023100Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NST
-DTSTART:19460101T000000
-RDATE:19460101T000000
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T000100
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
TZOFFSETFROM:-0330
-TZOFFSETTO:-0130
-TZNAME:NDDT
-DTSTART:19880403T000100
-RDATE:19880403T000100
+TZOFFSETTO:-0230
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0130
-TZOFFSETTO:-0330
+DTSTART:20071104T000100
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:NST
-DTSTART:19881030T000100
-RDATE:19881030T000100
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Pacific.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Pacific.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Pacific.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,94 +1,102 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Pacific
X-LIC-LOCATION:Canada/Pacific
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:PST
+TZOFFSETFROM:-081228
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
TZNAME:PST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T090000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-081228
+DTSTART:19870101T000000
+RDATE:19870101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19450930T020000
-RDATE:19461013T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19870101T000000
-RDATE:19870101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Saskatchewan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Saskatchewan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Saskatchewan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,99 +1,100 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Saskatchewan
X-LIC-LOCATION:Canada/Saskatchewan
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19300504T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19340506T070000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19050901T000000
+RDATE:19050901T000000
+TZNAME:MST
+TZOFFSETFROM:-065836
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19301005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19341007T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460414T020000
+RDATE:19590426T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19370411T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;UNTIL=19410413T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19591025T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19391008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19411012T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19300504T000000
+RRULE:FREQ=YEARLY;UNTIL=19340506T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19570428T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19301005T000000
+RRULE:FREQ=YEARLY;UNTIL=19341007T060000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19570929T080000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-065836
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19050901T000000
-RDATE:19050901T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370411T000000
+RRULE:FREQ=YEARLY;UNTIL=19410413T070000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180414T020000
-RDATE:19180414T020000
-RDATE:19460414T020000
-RDATE:19590426T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19391008T000000
+RRULE:FREQ=YEARLY;UNTIL=19411012T060000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181031T020000
-RDATE:19181031T020000
-RDATE:19371010T000000
-RDATE:19381002T000000
-RDATE:19450930T020000
-RDATE:19461013T020000
-RDATE:19591025T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19570428T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:CST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19570929T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19600424T020000
RDATE:19600424T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Yukon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Yukon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Canada/Yukon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,108 +1,110 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Canada/Yukon
X-LIC-LOCATION:Canada/Yukon
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19800427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19801026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19000820T000000
+RDATE:19000820T000000
+TZNAME:YST
TZOFFSETFROM:-090012
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19000820T000000
-RDATE:19000820T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:YDT
DTSTART:19180414T020000
RDATE:19180414T020000
RDATE:19190525T020000
+TZNAME:YDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:YST
DTSTART:19181027T020000
RDATE:19181027T020000
RDATE:19191101T000000
RDATE:19450930T020000
+TZNAME:YST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:YWT
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-TZNAME:YWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+TZNAME:YPT
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:YPT
-DTSTART:19450814T150000
-RDATE:19450814T150000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+TZNAME:YDDT
TZOFFSETFROM:-0900
TZOFFSETTO:-0700
-TZNAME:YDDT
-DTSTART:19650425T000000
-RDATE:19650425T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RDATE:19651031T020000
+TZNAME:YST
TZOFFSETFROM:-0700
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19651031T020000
-RDATE:19651031T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19660701T020000
+RDATE:19660701T020000
+TZNAME:PST
TZOFFSETFROM:-0900
TZOFFSETTO:-0800
-DTSTART:19660701T020000
-RDATE:19660701T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:PST
TZOFFSETFROM:-0800
TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800427T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19801026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:PST
-DTSTART:19800101T000000
-RDATE:19800101T000000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/Continental.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/Continental.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/Continental.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,168 +1,103 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Chile/Continental
X-LIC-LOCATION:Chile/Continental
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19280401T000000
-RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19280901T000000
-RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19701011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19721015T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19720312T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19860309T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19741013T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19871011T040000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19880313T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19890312T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19910310T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19960310T030000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19911013T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19971012T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
-DTSTART:19991010T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:20000312T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=20070311T030000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:20090315T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SMT
TZOFFSETFROM:-044246
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19100101T000000
+RDATE:19100101T000000
+TZNAME:CLT
TZOFFSETFROM:-044246
TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19100101T000000
-RDATE:19100101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19160701T000000
+RDATE:19160701T000000
+TZNAME:SMT
TZOFFSETFROM:-0500
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:19160701T000000
-RDATE:19160701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19180901T000000
+RDATE:19180901T000000
+TZNAME:CLT
TZOFFSETFROM:-044246
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19180901T000000
-RDATE:19180901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19190701T000000
+RDATE:19190701T000000
+TZNAME:SMT
TZOFFSETFROM:-0400
TZOFFSETTO:-044246
-TZNAME:SMT
-DTSTART:19190701T000000
-RDATE:19190701T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19270901T000000
+RDATE:19270901T000000
+TZNAME:CLST
TZOFFSETFROM:-044246
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19270901T000000
-RDATE:19270901T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19280401T000000
+RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z;BYMONTH=4
+TZNAME:CLT
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CLT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280901T000000
+RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19420601T000000
RDATE:19420601T000000
RDATE:19460831T230000
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+TZNAME:CLST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19420801T000000
-RDATE:19420801T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460715T000000
+RDATE:19460715T000000
+TZNAME:CLST
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:CLST
-DTSTART:19460715T000000
-RDATE:19460715T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19470331T230000
+RDATE:19470331T230000
+TZNAME:CLT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CLT
-DTSTART:19470331T230000
-RDATE:19470331T230000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19470522T000000
+RDATE:19470522T000000
+TZNAME:CLST
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CLT
-DTSTART:19470522T000000
-RDATE:19470522T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0300
-TZNAME:CLST
DTSTART:19681103T000000
RDATE:19681103T000000
RDATE:19691123T000000
@@ -171,11 +106,11 @@
RDATE:19891015T000000
RDATE:19900916T000000
RDATE:19980927T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0400
-TZNAME:CLT
DTSTART:19690330T000000
RDATE:19690330T000000
RDATE:19700329T000000
@@ -186,6 +121,81 @@
RDATE:19980315T000000
RDATE:19990404T000000
RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701011T000000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19720312T000000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741013T000000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880313T000000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910310T000000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911013T000000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110313T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=9,10,11,12,13,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/EasterIsland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/EasterIsland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Chile/EasterIsland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,163 +1,166 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Chile/EasterIsland
X-LIC-LOCATION:Chile/EasterIsland
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:EMT
+TZOFFSETFROM:-071744
+TZOFFSETTO:-071728
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320901T000000
+RDATE:19320901T000000
+TZNAME:EASST
+TZOFFSETFROM:-071728
TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19701010T210000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19721015T040000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19420531T220000
+RDATE:19420531T220000
+RDATE:19460831T210000
+RDATE:19690329T210000
+RDATE:19700328T210000
+RDATE:19710313T210000
+TZNAME:EAST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:EAST
-DTSTART:19720311T210000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19810315T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420731T220000
+RDATE:19420731T220000
+RDATE:19681102T210000
+RDATE:19691122T210000
+RDATE:19730929T210000
+TZNAME:EASST
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19741012T210000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19811011T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460714T220000
+RDATE:19460714T220000
+TZNAME:EASST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19821009T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19871011T040000Z
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19470331T210000
+RDATE:19470331T210000
TZNAME:EAST
-DTSTART:19830312T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19860309T030000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701010T210000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19720311T210000
+RRULE:FREQ=YEARLY;UNTIL=19810315T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19880312T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19890312T030000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741012T210000
+RRULE:FREQ=YEARLY;UNTIL=19811011T040000Z;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19820313T210000
+RDATE:19820313T210000
+TZNAME:EAST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:19910309T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19960310T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19821009T220000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=2SA;BYMONTH=10
TZNAME:EASST
-DTSTART:19911012T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19971012T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19991009T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830312T220000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:EAST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:20000311T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=20070311T030000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19870411T220000
+RDATE:19870411T220000
+RDATE:19900317T220000
+RDATE:19970329T220000
+RDATE:19980314T220000
+RDATE:19990403T220000
+RDATE:20080329T220000
+RDATE:20090314T220000
+RDATE:20100403T220000
+TZNAME:EAST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:20090314T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-071744
-TZOFFSETTO:-071728
-TZNAME:EMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
+DTSTART:19880312T220000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:EAST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-071728
-TZOFFSETTO:-0600
+DTSTART:19881001T220000
+RDATE:19881001T220000
+RDATE:19891014T220000
+RDATE:19900915T220000
+RDATE:19980926T220000
TZNAME:EASST
-DTSTART:19320901T000000
-RDATE:19320901T000000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19910309T220000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19420531T220000
-RDATE:19420531T220000
-RDATE:19460831T210000
-RDATE:19690329T210000
-RDATE:19700328T210000
-RDATE:19710313T210000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
+DTSTART:19911012T220000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=2SA;BYMONTH=10
TZNAME:EASST
-DTSTART:19420731T220000
-RDATE:19420731T220000
-RDATE:19681102T210000
-RDATE:19691122T210000
-RDATE:19730929T210000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19991009T220000
+RRULE:FREQ=YEARLY;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19460714T220000
-RDATE:19460714T220000
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
+DTSTART:20000311T220000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19470331T210000
-RDATE:19470331T210000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
+DTSTART:20110312T220000
+RRULE:FREQ=YEARLY;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19820313T210000
-RDATE:19820313T210000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:19870411T220000
-RDATE:19870411T220000
-RDATE:19900317T220000
-RDATE:19970329T220000
-RDATE:19980314T220000
-RDATE:19990403T220000
-RDATE:20080329T220000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19881001T220000
-RDATE:19881001T220000
-RDATE:19891014T220000
-RDATE:19900915T220000
-RDATE:19980926T220000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Cuba.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Cuba.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Cuba.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,193 +1,190 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Cuba
X-LIC-LOCATION:Cuba
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
+TZOFFSETFROM:-052928
+TZOFFSETTO:-052936
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19250719T120000
+RDATE:19250719T120000
+TZNAME:CST
+TZOFFSETFROM:-052936
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280610T000000
+RDATE:19280610T000000
+RDATE:19650601T000000
+RDATE:19660529T000000
+RDATE:19670408T000000
+RDATE:19680414T000000
+RDATE:19780507T000000
+RDATE:20070311T000000
+RDATE:20080316T000000
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19400602T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19420607T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19281010T000000
+RDATE:19281010T000000
+RDATE:19650930T000000
+RDATE:19661002T000000
+RDATE:19961006T010000
+RDATE:19971012T010000
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19400901T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=19420906T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400602T000000
+RRULE:FREQ=YEARLY;UNTIL=19420607T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19450603T000000
-RRULE:FREQ=YEARLY;BYMONTH=6;BYDAY=1SU;UNTIL=19460602T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19400901T000000
+RRULE:FREQ=YEARLY;UNTIL=19420906T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19450902T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU;UNTIL=19460901T040000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450603T000000
+RRULE:FREQ=YEARLY;UNTIL=19460602T050000Z;BYDAY=1SU;BYMONTH=6
+TZNAME:CDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450902T000000
+RRULE:FREQ=YEARLY;UNTIL=19460901T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670910T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2SU;UNTIL=19680908T040000Z
+RRULE:FREQ=YEARLY;UNTIL=19680908T040000Z;BYDAY=2SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T000000
+RRULE:FREQ=YEARLY;UNTIL=19770424T050000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19690427T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19770424T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19691026T000000
+RRULE:FREQ=YEARLY;UNTIL=19711031T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19691026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19711031T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19721008T000000
+RRULE:FREQ=YEARLY;UNTIL=19741008T040000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19721008T000000
-RRULE:FREQ=YEARLY;UNTIL=19741008T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19771030T040000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19751026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19771030T040000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19781008T000000
+RRULE:FREQ=YEARLY;UNTIL=19901014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19781008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19901014T040000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790318T000000
+RRULE:FREQ=YEARLY;UNTIL=19800316T050000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19790318T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19810510T000000
+RRULE:FREQ=YEARLY;UNTIL=19850505T050000Z;BYDAY=SU;BYMONTHDAY=5,6,7,8,9,10,
+ 11;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19810510T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=5,6,7,8,9,10,11;BYDAY=SU;UNTIL=19850505T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19860316T000000
+RRULE:FREQ=YEARLY;UNTIL=19890319T050000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19860316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19890319T050000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19900401T000000
+RRULE:FREQ=YEARLY;UNTIL=19970406T050000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19900401T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19970406T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911013T010000
+RRULE:FREQ=YEARLY;UNTIL=19951008T050000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19911013T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19951008T050000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19980329T000000
+RRULE:FREQ=YEARLY;UNTIL=19990328T050000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19980329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19990328T050000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19981025T010000
+RRULE:FREQ=YEARLY;UNTIL=20031026T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19981025T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20031026T050000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:CDT
DTSTART:20000402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20040404T050000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;UNTIL=20040404T050000Z;BYDAY=1SU;BYMONTH=4
TZNAME:CDT
-DTSTART:20050403T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T050000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:20061029T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:20080316T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-052928
-TZOFFSETTO:-052936
-TZNAME:HMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-052936
-TZOFFSETTO:-0500
+DTSTART:20061029T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19250719T120000
-RDATE:19250719T120000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20090308T000000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:CDT
-DTSTART:19280610T000000
-RDATE:19280610T000000
-RDATE:19650601T000000
-RDATE:19660529T000000
-RDATE:19670408T000000
-RDATE:19680414T000000
-RDATE:19780507T000000
-RDATE:20070311T000000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:CST
-DTSTART:19281010T000000
-RDATE:19281010T000000
-RDATE:19650930T000000
-RDATE:19661002T000000
-RDATE:19961006T010000
-RDATE:19971012T010000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EET.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/EET.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EET.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EET.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:EET
+X-LIC-LOCATION:EET
+BEGIN:STANDARD
+DTSTART:18000101T020000
+RDATE:18000101T020000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770925T040000
+RDATE:19770925T040000
+RDATE:19781001T040000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790930T040000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/EST.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:EST
+X-LIC-LOCATION:EST
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST5EDT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/EST5EDT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST5EDT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/EST5EDT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,101 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:EST5EDT
+X-LIC-LOCATION:EST5EDT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Egypt.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Egypt.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Egypt.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,131 +1,123 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Egypt
X-LIC-LOCATION:Egypt
+BEGIN:STANDARD
+DTSTART:19001001T000000
+RDATE:19001001T000000
+TZNAME:EEST
+TZOFFSETFROM:+0205
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19890506T010000
+RDATE:20100910T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19420401T000000
-RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19431101T000000
-RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420401T000000
+RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431101T000000
+RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z;BYMONTH=11
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19571001T000000
-RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z
+RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19590501T010000
+RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19590501T010000
-RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19590930T030000
+RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19590930T030000
-RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19661001T030000
+RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19661001T030000
-RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840501T010000
+RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19840501T010000
-RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19900501T010000
+RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z;BYMONTH=5
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19900501T010000
-RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19950428T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19950428T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19950929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=25,26,27,28,29,30;BYDAY=FR;UNTIL=20020926T210000Z
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=1;BYDAY=FR;UNTIL=20020926T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;UNTIL=20050929T210000Z;BYDAY=FR;BYYEARDAY=-92,-93,-94,-9
+ 5,-96,-97,-98
TZNAME:EET
-DTSTART:20030925T230000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH;UNTIL=20050929T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20080828T230000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=-1TH
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0205
-TZOFFSETTO:+0200
+DTSTART:20101001T000000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYYEARDAY=-92,-93,-94,-95,-96,-97,-98
TZNAME:EET
-DTSTART:19001001T000000
-RDATE:19001001T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19400715T000000
-RDATE:19400715T000000
-RDATE:19410415T000000
-RDATE:19450416T000000
-RDATE:19570510T000000
-RDATE:19580501T000000
-RDATE:19820725T010000
-RDATE:19830712T010000
-RDATE:19890506T010000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19401001T000000
-RDATE:19401001T000000
-RDATE:19410916T000000
-RDATE:19421027T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20060921T230000
-RDATE:20060921T230000
-RDATE:20070906T230000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Eire.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Eire.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Eire.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,238 +1,280 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eire
X-LIC-LOCATION:Eire
BEGIN:STANDARD
+DTSTART:18800802T000000
+RDATE:18800802T000000
+TZNAME:DMT
+TZOFFSETFROM:-0025
+TZOFFSETTO:-002521
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160521T020000
+RDATE:19160521T020000
+TZNAME:IST
+TZOFFSETFROM:-002521
+TZOFFSETTO:+003439
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+TZNAME:S
+TZOFFSETFROM:+003439
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19461006T020000
+RDATE:19471102T020000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19211206T000000
+RDATE:19211206T000000
+RDATE:19960101T000000
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220326T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19221008T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19711031T030000
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400225T020000
+RDATE:19400225T020000
+RDATE:19470316T020000
TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19480418T020000
+RDATE:19480418T020000
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:IST
DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:IST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0025
-TZOFFSETTO:-002521
-TZNAME:DMT
-DTSTART:18800802T000000
-RDATE:18800802T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-002521
-TZOFFSETTO:+003439
-TZNAME:IST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+003439
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-END:STANDARD
-BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19170408T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19170917T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19461006T020000
-RDATE:19471102T020000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19211206T000000
-RDATE:19211206T000000
-RDATE:19960101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19220326T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19470316T020000
-RDATE:19480418T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19681027T000000
-RDATE:19681027T000000
+TZOFFSETTO:+0000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+0.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+0
-X-LIC-LOCATION:Etc/GMT+0
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+0
+X-LIC-LOCATION:Etc/GMT+0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+1.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+1
-X-LIC-LOCATION:Etc/GMT+1
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+1
-TZOFFSETFROM:-0100
-TZOFFSETTO:-0100
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+1.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+1.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+1
+X-LIC-LOCATION:Etc/GMT+1
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+1
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+10.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+10
-X-LIC-LOCATION:Etc/GMT+10
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+10
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+10.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+10.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+10
+X-LIC-LOCATION:Etc/GMT+10
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+10
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+11.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+11
-X-LIC-LOCATION:Etc/GMT+11
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+11
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+11.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+11.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+11
+X-LIC-LOCATION:Etc/GMT+11
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+11
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+12.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+12
-X-LIC-LOCATION:Etc/GMT+12
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+12
-TZOFFSETFROM:-1200
-TZOFFSETTO:-1200
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+12.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+12.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+12
+X-LIC-LOCATION:Etc/GMT+12
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+12
+TZOFFSETFROM:-1200
+TZOFFSETTO:-1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+2.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+2
-X-LIC-LOCATION:Etc/GMT+2
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+2
-TZOFFSETFROM:-0200
-TZOFFSETTO:-0200
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+2.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+2.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+2
+X-LIC-LOCATION:Etc/GMT+2
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+2
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+3.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+3
-X-LIC-LOCATION:Etc/GMT+3
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+3
-TZOFFSETFROM:-0300
-TZOFFSETTO:-0300
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+3.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+3.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+3
+X-LIC-LOCATION:Etc/GMT+3
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+3
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+4.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+4
-X-LIC-LOCATION:Etc/GMT+4
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+4
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0400
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+4.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+4.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+4
+X-LIC-LOCATION:Etc/GMT+4
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+4
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+5.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+5
-X-LIC-LOCATION:Etc/GMT+5
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+5
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+5.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+5.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+5
+X-LIC-LOCATION:Etc/GMT+5
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+5
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+6.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+6
-X-LIC-LOCATION:Etc/GMT+6
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+6
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+6.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+6.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+6
+X-LIC-LOCATION:Etc/GMT+6
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+6
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+7.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+7
-X-LIC-LOCATION:Etc/GMT+7
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+7
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+7.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+7.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+7
+X-LIC-LOCATION:Etc/GMT+7
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+7
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+8.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+8
-X-LIC-LOCATION:Etc/GMT+8
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+8
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+8.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+8.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+8
+X-LIC-LOCATION:Etc/GMT+8
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+8
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+9.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT+9
-X-LIC-LOCATION:Etc/GMT+9
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT+9
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0900
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT+9.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT+9.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT+9
+X-LIC-LOCATION:Etc/GMT+9
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+9
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-0.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-0
-X-LIC-LOCATION:Etc/GMT-0
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-0
+X-LIC-LOCATION:Etc/GMT-0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-1.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-1
-X-LIC-LOCATION:Etc/GMT-1
-BEGIN:STANDARD
-DTSTART:18000101T010000
-RDATE:18000101T010000
-TZNAME:GMT-1
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-1.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-1.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-1
+X-LIC-LOCATION:Etc/GMT-1
+BEGIN:STANDARD
+DTSTART:18000101T010000
+RDATE:18000101T010000
+TZNAME:GMT-1
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-10.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-10
-X-LIC-LOCATION:Etc/GMT-10
-BEGIN:STANDARD
-DTSTART:18000101T100000
-RDATE:18000101T100000
-TZNAME:GMT-10
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-10.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-10.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-10
+X-LIC-LOCATION:Etc/GMT-10
+BEGIN:STANDARD
+DTSTART:18000101T100000
+RDATE:18000101T100000
+TZNAME:GMT-10
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-11.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-11
-X-LIC-LOCATION:Etc/GMT-11
-BEGIN:STANDARD
-DTSTART:18000101T110000
-RDATE:18000101T110000
-TZNAME:GMT-11
-TZOFFSETFROM:+1100
-TZOFFSETTO:+1100
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-11.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-11.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-11
+X-LIC-LOCATION:Etc/GMT-11
+BEGIN:STANDARD
+DTSTART:18000101T110000
+RDATE:18000101T110000
+TZNAME:GMT-11
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-12.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-12
-X-LIC-LOCATION:Etc/GMT-12
-BEGIN:STANDARD
-DTSTART:18000101T120000
-RDATE:18000101T120000
-TZNAME:GMT-12
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1200
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-12.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-12.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-12
+X-LIC-LOCATION:Etc/GMT-12
+BEGIN:STANDARD
+DTSTART:18000101T120000
+RDATE:18000101T120000
+TZNAME:GMT-12
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-13.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-13
-X-LIC-LOCATION:Etc/GMT-13
-BEGIN:STANDARD
-DTSTART:18000101T130000
-RDATE:18000101T130000
-TZNAME:GMT-13
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1300
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-13.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-13.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-13
+X-LIC-LOCATION:Etc/GMT-13
+BEGIN:STANDARD
+DTSTART:18000101T130000
+RDATE:18000101T130000
+TZNAME:GMT-13
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-14.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-14
-X-LIC-LOCATION:Etc/GMT-14
-BEGIN:STANDARD
-DTSTART:18000101T140000
-RDATE:18000101T140000
-TZNAME:GMT-14
-TZOFFSETFROM:+1400
-TZOFFSETTO:+1400
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-14.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-14.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-14
+X-LIC-LOCATION:Etc/GMT-14
+BEGIN:STANDARD
+DTSTART:18000101T140000
+RDATE:18000101T140000
+TZNAME:GMT-14
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-2.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-2
-X-LIC-LOCATION:Etc/GMT-2
-BEGIN:STANDARD
-DTSTART:18000101T020000
-RDATE:18000101T020000
-TZNAME:GMT-2
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-2.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-2.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-2
+X-LIC-LOCATION:Etc/GMT-2
+BEGIN:STANDARD
+DTSTART:18000101T020000
+RDATE:18000101T020000
+TZNAME:GMT-2
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-3.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-3
-X-LIC-LOCATION:Etc/GMT-3
-BEGIN:STANDARD
-DTSTART:18000101T030000
-RDATE:18000101T030000
-TZNAME:GMT-3
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-3.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-3.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-3
+X-LIC-LOCATION:Etc/GMT-3
+BEGIN:STANDARD
+DTSTART:18000101T030000
+RDATE:18000101T030000
+TZNAME:GMT-3
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-4.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-4
-X-LIC-LOCATION:Etc/GMT-4
-BEGIN:STANDARD
-DTSTART:18000101T040000
-RDATE:18000101T040000
-TZNAME:GMT-4
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-4.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-4.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-4
+X-LIC-LOCATION:Etc/GMT-4
+BEGIN:STANDARD
+DTSTART:18000101T040000
+RDATE:18000101T040000
+TZNAME:GMT-4
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-5.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-5
-X-LIC-LOCATION:Etc/GMT-5
-BEGIN:STANDARD
-DTSTART:18000101T050000
-RDATE:18000101T050000
-TZNAME:GMT-5
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0500
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-5.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-5.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-5
+X-LIC-LOCATION:Etc/GMT-5
+BEGIN:STANDARD
+DTSTART:18000101T050000
+RDATE:18000101T050000
+TZNAME:GMT-5
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-6.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-6
-X-LIC-LOCATION:Etc/GMT-6
-BEGIN:STANDARD
-DTSTART:18000101T060000
-RDATE:18000101T060000
-TZNAME:GMT-6
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0600
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-6.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-6.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-6
+X-LIC-LOCATION:Etc/GMT-6
+BEGIN:STANDARD
+DTSTART:18000101T060000
+RDATE:18000101T060000
+TZNAME:GMT-6
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-7.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-7
-X-LIC-LOCATION:Etc/GMT-7
-BEGIN:STANDARD
-DTSTART:18000101T070000
-RDATE:18000101T070000
-TZNAME:GMT-7
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0700
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-7.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-7.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-7
+X-LIC-LOCATION:Etc/GMT-7
+BEGIN:STANDARD
+DTSTART:18000101T070000
+RDATE:18000101T070000
+TZNAME:GMT-7
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-8.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-8
-X-LIC-LOCATION:Etc/GMT-8
-BEGIN:STANDARD
-DTSTART:18000101T080000
-RDATE:18000101T080000
-TZNAME:GMT-8
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-8.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-8.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-8
+X-LIC-LOCATION:Etc/GMT-8
+BEGIN:STANDARD
+DTSTART:18000101T080000
+RDATE:18000101T080000
+TZNAME:GMT-8
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-9.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT-9
-X-LIC-LOCATION:Etc/GMT-9
-BEGIN:STANDARD
-DTSTART:18000101T090000
-RDATE:18000101T090000
-TZNAME:GMT-9
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT-9.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT-9.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT-9
+X-LIC-LOCATION:Etc/GMT-9
+BEGIN:STANDARD
+DTSTART:18000101T090000
+RDATE:18000101T090000
+TZNAME:GMT-9
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT
-X-LIC-LOCATION:Etc/GMT
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT
+X-LIC-LOCATION:Etc/GMT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT0.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/GMT0
-X-LIC-LOCATION:Etc/GMT0
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/GMT0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/GMT0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/GMT0
+X-LIC-LOCATION:Etc/GMT0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Greenwich.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/Greenwich
-X-LIC-LOCATION:Etc/Greenwich
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:GMT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Greenwich.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Greenwich.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/Greenwich
+X-LIC-LOCATION:Etc/Greenwich
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/UCT.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/UCT
-X-LIC-LOCATION:Etc/UCT
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:UCT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/UCT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UCT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/UCT
+X-LIC-LOCATION:Etc/UCT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UCT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/UTC.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/UTC
-X-LIC-LOCATION:Etc/UTC
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:UTC
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/UTC.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/UTC.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/UTC
+X-LIC-LOCATION:Etc/UTC
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Universal.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/Universal
-X-LIC-LOCATION:Etc/Universal
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:UTC
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Universal.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Universal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/Universal
+X-LIC-LOCATION:Etc/Universal
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics
===================================================================
--- CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Zulu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,16 +0,0 @@
-BEGIN:VCALENDAR
-CALSCALE:GREGORIAN
-PRODID:-//calendarserver.org//Zonal//EN
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Etc/Zulu
-X-LIC-LOCATION:Etc/Zulu
-BEGIN:STANDARD
-DTSTART:18000101T000000
-RDATE:18000101T000000
-TZNAME:UTC
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-END:STANDARD
-END:VTIMEZONE
-END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Etc/Zulu.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Etc/Zulu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Etc/Zulu
+X-LIC-LOCATION:Etc/Zulu
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Amsterdam.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Amsterdam.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Amsterdam.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,156 +1,159 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Amsterdam
X-LIC-LOCATION:Europe/Amsterdam
+BEGIN:STANDARD
+DTSTART:18350101T000000
+RDATE:18350101T000000
+TZNAME:S
+TZOFFSETFROM:+001932
+TZOFFSETTO:+001932
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19170416T020000
+RDATE:19220326T020000
+RDATE:19230601T020000
+RDATE:19240330T020000
+RDATE:19250605T020000
+RDATE:19320522T020000
+RDATE:19370522T020000
+TZNAME:NST
TZOFFSETFROM:+001932
TZOFFSETTO:+011932
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19170917T030000
+TZNAME:AMT
+TZOFFSETFROM:+011932
+TZOFFSETTO:+001932
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180401T020000
+RRULE:FREQ=YEARLY;UNTIL=19210404T014028Z;BYDAY=1MO;BYMONTH=4
TZNAME:NST
-DTSTART:19180401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1MO;UNTIL=19210404T014028Z
+TZOFFSETFROM:+001932
+TZOFFSETTO:+011932
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19180930T030000
+RRULE:FREQ=YEARLY;UNTIL=19210926T014028Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AMT
TZOFFSETFROM:+011932
TZOFFSETTO:+001932
-TZNAME:AMT
-DTSTART:19180930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19210926T014028Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19221008T030000
+RRULE:FREQ=YEARLY;UNTIL=19361004T014028Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AMT
TZOFFSETFROM:+011932
TZOFFSETTO:+001932
-TZNAME:AMT
-DTSTART:19221008T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19361004T014028Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19260515T020000
+RRULE:FREQ=YEARLY;UNTIL=19310515T014028Z;BYMONTH=5
+TZNAME:NST
TZOFFSETFROM:+001932
TZOFFSETTO:+011932
-TZNAME:NST
-DTSTART:19260515T020000
-RRULE:FREQ=YEARLY;UNTIL=19310515T014028Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19330515T020000
+RRULE:FREQ=YEARLY;UNTIL=19360515T014028Z;BYMONTH=5
+TZNAME:NST
TZOFFSETFROM:+001932
TZOFFSETTO:+011932
-TZNAME:NST
-DTSTART:19330515T020000
-RRULE:FREQ=YEARLY;UNTIL=19360515T014028Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19370701T000000
+RDATE:19370701T000000
+TZNAME:NEST
+TZOFFSETFROM:+011932
+TZOFFSETTO:+0120
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19371003T030000
+RRULE:FREQ=YEARLY;UNTIL=19391008T014000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NET
TZOFFSETFROM:+0120
TZOFFSETTO:+0020
-TZNAME:NET
-DTSTART:19371003T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19391008T014000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19380515T020000
+RRULE:FREQ=YEARLY;UNTIL=19390515T014000Z;BYMONTH=5
+TZNAME:NEST
TZOFFSETFROM:+0020
TZOFFSETTO:+0120
-TZNAME:NEST
-DTSTART:19380515T020000
-RRULE:FREQ=YEARLY;UNTIL=19390515T014000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+BEGIN:STANDARD
+DTSTART:19400516T000000
+RDATE:19400516T000000
+TZNAME:CEST
+TZOFFSETFROM:+0020
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+001932
-TZOFFSETTO:+001932
-TZNAME:AMT
-DTSTART:18350101T000000
-RDATE:18350101T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+001932
-TZOFFSETTO:+011932
-TZNAME:NST
-DTSTART:19160501T000000
-RDATE:19160501T000000
-RDATE:19170416T020000
-RDATE:19220326T020000
-RDATE:19230601T020000
-RDATE:19240330T020000
-RDATE:19250605T020000
-RDATE:19320522T020000
-RDATE:19370522T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+011932
-TZOFFSETTO:+001932
-TZNAME:AMT
-DTSTART:19161001T000000
-RDATE:19161001T000000
-RDATE:19170917T030000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+011932
-TZOFFSETTO:+0120
-TZNAME:NEST
-DTSTART:19370701T000000
-RDATE:19370701T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0020
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19400516T000000
-RDATE:19400516T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
-RDATE:19770925T030000
-RDATE:19781001T030000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19430329T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Andorra.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Andorra.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Andorra.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Andorra
X-LIC-LOCATION:Europe/Andorra
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:WET
+TZOFFSETFROM:+000604
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460930T000000
+RDATE:19460930T000000
+TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19850929T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19850929T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+000604
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19010101T000000
-RDATE:19010101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19460930T000000
-RDATE:19460930T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Athens.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Athens.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Athens.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,55 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Athens
X-LIC-LOCATION:Europe/Athens
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19780402T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810927T040000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18950914T000000
+RDATE:18950914T000000
+TZNAME:AMT
TZOFFSETFROM:+013452
TZOFFSETTO:+013452
-TZNAME:AMT
-DTSTART:18950914T000000
-RDATE:18950914T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19160728T000100
+RDATE:19160728T000100
+TZNAME:EEST
TZOFFSETFROM:+013452
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19160728T000100
-RDATE:19160728T000100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
DTSTART:19320707T000000
RDATE:19320707T000000
RDATE:19410407T000000
@@ -58,11 +28,11 @@
RDATE:19760411T020000
RDATE:19790401T090000
RDATE:19800401T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19320901T000000
RDATE:19320901T000000
RDATE:19521102T000000
@@ -72,42 +42,73 @@
RDATE:19780924T040000
RDATE:19790929T020000
RDATE:19800928T000000
-END:STANDARD
-BEGIN:DAYLIGHT
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19410430T000000
RDATE:19410430T000000
-END:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430330T000000
+RDATE:19430330T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19430330T000000
-RDATE:19430330T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440404T000000
+RDATE:19440404T000000
+TZNAME:EEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19440404T000000
-RDATE:19440404T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19780402T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810101T000000
+RDATE:19810101T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810927T040000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EET
-DTSTART:19810101T000000
-RDATE:19810101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belfast.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belfast.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belfast.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Belfast
X-LIC-LOCATION:Europe/Belfast
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belgrade.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belgrade.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Belgrade.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Belgrade
X-LIC-LOCATION:Europe/Belgrade
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Berlin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Berlin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Berlin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:18930401T000000
+RDATE:18930401T000000
TZNAME:CEST
-DTSTART:19440403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1MO;UNTIL=19450402T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+005328
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18930401T000000
-RDATE:18930401T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160430T230000
RDATE:19160430T230000
RDATE:19400401T020000
@@ -73,11 +22,11 @@
RDATE:19480418T020000
RDATE:19490410T020000
RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19421102T030000
@@ -85,30 +34,82 @@
RDATE:19441002T030000
RDATE:19451118T030000
RDATE:19461007T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:CEMT
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
DTSTART:19450524T020000
RDATE:19450524T020000
RDATE:19470511T030000
+TZNAME:CEMT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19450924T030000
RDATE:19450924T030000
RDATE:19470629T030000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19460101T000000
RDATE:19460101T000000
RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bratislava.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bratislava.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bratislava.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,104 +1,111 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Bratislava
X-LIC-LOCATION:Europe/Bratislava
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
+DTSTART:18500101T000000
+RDATE:18500101T000000
+TZNAME:PMT
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:18911001T000000
+RDATE:18911001T000000
+TZNAME:CEST
+TZOFFSETFROM:+005744
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19461006T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19790401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19451118T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+005744
-TZOFFSETTO:+005744
-TZNAME:PMT
-DTSTART:18500101T000000
-RDATE:18500101T000000
+DTSTART:19440917T030000
+RDATE:19440917T030000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+005744
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18911001T000000
-RDATE:18911001T000000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790101T000000
+RDATE:19790101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160430T230000
-RDATE:19160430T230000
-RDATE:19400401T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450408T020000
-RDATE:19460506T020000
-RDATE:19470420T020000
-RDATE:19480418T020000
-RDATE:19490409T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19161001T010000
-RDATE:19161001T010000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19440917T030000
-RDATE:19451118T030000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790101T000000
-RDATE:19790101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Brussels.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Brussels.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Brussels.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,40 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Brussels
X-LIC-LOCATION:Europe/Brussels
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19221008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19271001T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19281007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:BMT
TZOFFSETFROM:+001730
TZOFFSETTO:+001730
-TZNAME:BMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18920501T120000
+RDATE:18920501T120000
+TZNAME:WET
TZOFFSETFROM:+001730
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:18920501T120000
-RDATE:18920501T120000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19141108T000000
+RDATE:19141108T000000
+TZNAME:CET
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19141108T000000
-RDATE:19141108T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
+BEGIN:STANDARD
DTSTART:19160501T000000
RDATE:19160501T000000
RDATE:19400520T030000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450402T020000
-RDATE:19460519T020000
-END:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19421102T030000
@@ -106,22 +44,32 @@
RDATE:19461007T030000
RDATE:19770925T030000
RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19181111T120000
+RDATE:19181111T120000
+TZNAME:WEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19181111T120000
-RDATE:19181111T120000
-RDATE:19191005T000000
-RDATE:19201024T000000
-RDATE:19211026T000000
-RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19190301T230000
RDATE:19190301T230000
RDATE:19200214T230000
@@ -145,20 +93,87 @@
RDATE:19380327T020000
RDATE:19390416T020000
RDATE:19400225T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19191005T000000
+RDATE:19191005T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19391119T030000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19221008T000000
+RRULE:FREQ=YEARLY;UNTIL=19271001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19281007T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460519T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19440903T000000
RDATE:19440903T000000
-END:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bucharest.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bucharest.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Bucharest.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,119 +1,121 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Bucharest
X-LIC-LOCATION:Europe/Bucharest
BEGIN:STANDARD
-TZOFFSETFROM:+0300
+DTSTART:18911001T000000
+RDATE:18911001T000000
+TZNAME:BMT
+TZOFFSETFROM:+014424
+TZOFFSETTO:+014424
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310724T000000
+RDATE:19310724T000000
+TZNAME:EEST
+TZOFFSETFROM:+014424
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19321002T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19390930T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19790527T000000
+RDATE:19800405T230000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19330402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19390401T220000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19321002T010000
+RRULE:FREQ=YEARLY;UNTIL=19390930T220000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19330402T000000
+RRULE:FREQ=YEARLY;UNTIL=19390401T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900325T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T000000
+RDATE:19790930T000000
+RDATE:19800928T010000
+RDATE:19961027T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810927T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900930T000000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19910331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19930327T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19930925T220000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19940101T000000
+RDATE:19970101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19910331T000000
+RRULE:FREQ=YEARLY;UNTIL=19930327T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19940327T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910929T010000
+RRULE:FREQ=YEARLY;UNTIL=19930925T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19940925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19940925T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+014424
-TZOFFSETTO:+014424
-TZNAME:BMT
-DTSTART:18911001T000000
-RDATE:18911001T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+014424
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19310724T000000
-RDATE:19310724T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19320521T000000
-RDATE:19320521T000000
-RDATE:19790527T000000
-RDATE:19800405T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19790930T000000
-RDATE:19790930T000000
-RDATE:19800928T010000
-RDATE:19961027T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910101T000000
-RDATE:19910101T000000
-RDATE:19940101T000000
-RDATE:19970101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Budapest.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Budapest.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Budapest.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,76 +1,24 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Budapest
X-LIC-LOCATION:Europe/Budapest
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19461006T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:18901001T000000
+RDATE:18901001T000000
TZNAME:CEST
-DTSTART:19470406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=4,5,6,7,8,9,10;BYDAY=SU;UNTIL=19490410T010000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19540523T000000
-RRULE:FREQ=YEARLY;UNTIL=19550522T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19541003T000000
-RRULE:FREQ=YEARLY;UNTIL=19551002T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+011620
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18901001T000000
-RDATE:18901001T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160430T230000
RDATE:19160430T230000
RDATE:19170416T020000
RDATE:19180401T030000
RDATE:19190415T030000
RDATE:19200405T030000
-RDATE:19410406T020000
RDATE:19430329T020000
RDATE:19440403T020000
RDATE:19450501T230000
@@ -79,11 +27,11 @@
RDATE:19560603T000000
RDATE:19570602T010000
RDATE:19800406T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170917T030000
@@ -97,14 +45,74 @@
RDATE:19501023T030000
RDATE:19560930T000000
RDATE:19570929T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19180101T000000
RDATE:19180101T000000
RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410406T020000
+RDATE:19410406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490410T010000Z;BYDAY=SU;BYMONTHDAY=4,5,6,7,8,9,1
+ 0;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540523T000000
+RRULE:FREQ=YEARLY;UNTIL=19550522T230000Z;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19541003T000000
+RRULE:FREQ=YEARLY;UNTIL=19551002T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Chisinau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Chisinau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Chisinau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,168 +1,171 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Chisinau
X-LIC-LOCATION:Europe/Chisinau
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19321002T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19390930T220000Z
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:CMT
+TZOFFSETFROM:+015520
+TZOFFSETTO:+0155
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19330402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19390401T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
+DTSTART:19180215T000000
+RDATE:19180215T000000
+TZNAME:BMT
+TZOFFSETFROM:+0155
+TZOFFSETTO:+014424
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19310724T000000
+RDATE:19310724T000000
+TZNAME:EEST
+TZOFFSETFROM:+014424
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910101T000000
-RRULE:FREQ=YEARLY;UNTIL=19911231T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19910331T020000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19321002T010000
+RRULE:FREQ=YEARLY;UNTIL=19390930T220000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19330402T000000
+RRULE:FREQ=YEARLY;UNTIL=19390401T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+DTSTART:19400815T000000
+RDATE:19400815T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+015520
-TZOFFSETTO:+0155
-TZNAME:CMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0155
-TZOFFSETTO:+014424
-TZNAME:BMT
-DTSTART:19180215T000000
-RDATE:19180215T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+014424
+DTSTART:19410717T000000
+RDATE:19410717T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19310724T000000
-RDATE:19310724T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19320521T000000
-RDATE:19320521T000000
-RDATE:19400815T000000
-RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410717T000000
-RDATE:19410717T000000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440824T000000
+RDATE:19440824T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19440824T000000
-RDATE:19440824T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:MSK
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900101T000000
RDATE:19900101T000000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19900506T000000
RDATE:19900506T000000
RDATE:19910929T030000
RDATE:19961027T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:19970101T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EET
-DTSTART:19970101T000000
-RDATE:19970101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Copenhagen.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Copenhagen.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Copenhagen.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,48 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Copenhagen
X-LIC-LOCATION:Europe/Copenhagen
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
TZOFFSETFROM:+005020
TZOFFSETTO:+005020
-TZNAME:CMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18940101T000000
+RDATE:18940101T000000
+TZNAME:CEST
TZOFFSETFROM:+005020
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18940101T000000
-RDATE:18940101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160514T230000
RDATE:19160514T230000
RDATE:19400515T000000
@@ -53,11 +30,11 @@
RDATE:19470504T020000
RDATE:19480509T020000
RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19160930T230000
RDATE:19160930T230000
RDATE:19421102T030000
@@ -67,13 +44,37 @@
RDATE:19460901T030000
RDATE:19470810T030000
RDATE:19480808T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:19800101T000000
-RDATE:19800101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Dublin.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Dublin.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Dublin.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,238 +1,280 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Dublin
X-LIC-LOCATION:Europe/Dublin
BEGIN:STANDARD
+DTSTART:18800802T000000
+RDATE:18800802T000000
+TZNAME:DMT
+TZOFFSETFROM:-0025
+TZOFFSETTO:-002521
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160521T020000
+RDATE:19160521T020000
+TZNAME:IST
+TZOFFSETFROM:-002521
+TZOFFSETTO:+003439
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+TZNAME:S
+TZOFFSETFROM:+003439
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19461006T020000
+RDATE:19471102T020000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19211206T000000
+RDATE:19211206T000000
+RDATE:19960101T000000
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220326T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19221008T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19711031T030000
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400225T020000
+RDATE:19400225T020000
+RDATE:19470316T020000
TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19480418T020000
+RDATE:19480418T020000
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:GMT/IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:IST
DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:IST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0025
-TZOFFSETTO:-002521
-TZNAME:DMT
-DTSTART:18800802T000000
-RDATE:18800802T000000
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-002521
-TZOFFSETTO:+003439
-TZNAME:IST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+003439
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-END:STANDARD
-BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19170408T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19170917T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19461006T020000
-RDATE:19471102T020000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT/IST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19211206T000000
-RDATE:19211206T000000
-RDATE:19960101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/IST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19220326T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19470316T020000
-RDATE:19480418T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/IST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:IST
-DTSTART:19681027T000000
-RDATE:19681027T000000
+TZOFFSETTO:+0000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Gibraltar.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Gibraltar.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Gibraltar.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,132 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Gibraltar
X-LIC-LOCATION:Europe/Gibraltar
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19561007T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19820328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19820926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800802T000000
+RDATE:18800802T000000
+TZNAME:S
TZOFFSETFROM:-002124
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18800802T000000
-RDATE:18800802T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:BST
DTSTART:19160521T020000
RDATE:19160521T020000
RDATE:19170408T020000
@@ -151,11 +37,11 @@
RDATE:19490403T020000
RDATE:19530419T020000
RDATE:19540411T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:GMT
DTSTART:19161001T030000
RDATE:19161001T030000
RDATE:19170917T030000
@@ -168,38 +54,166 @@
RDATE:19471102T030000
RDATE:19481031T030000
RDATE:19491030T030000
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
DTSTART:19410504T020000
RDATE:19410504T020000
RDATE:19450402T020000
RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
DTSTART:19440917T030000
RDATE:19440917T030000
RDATE:19450715T030000
RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19570414T020000
-RDATE:19570414T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19561007T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19570414T020000
+RDATE:19570414T020000
TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19820101T000000
RDATE:19820101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19820926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Guernsey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Guernsey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Guernsey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Guernsey
X-LIC-LOCATION:Europe/Guernsey
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Helsinki.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Helsinki.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Helsinki.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Helsinki
X-LIC-LOCATION:Europe/Helsinki
+BEGIN:STANDARD
+DTSTART:18780531T000000
+RDATE:18780531T000000
+TZNAME:HMT
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210501T000000
+RDATE:19210501T000000
+TZNAME:EEST
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420403T000000
+RDATE:19420403T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421003T000000
+RDATE:19421003T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810927T040000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19820926T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+013952
-TZOFFSETTO:+013952
-TZNAME:HMT
-DTSTART:18780531T000000
-RDATE:18780531T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+013952
+DTSTART:19830101T000000
+RDATE:19830101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19210501T000000
-RDATE:19210501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19420403T000000
-RDATE:19420403T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T040000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19421003T000000
-RDATE:19421003T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810329T020000
-RDATE:19810329T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Isle_of_Man.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Isle_of_Man.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Isle_of_Man.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Isle_of_Man
X-LIC-LOCATION:Europe/Isle_of_Man
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Istanbul.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Istanbul.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Istanbul.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,139 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Istanbul
X-LIC-LOCATION:Europe/Istanbul
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19241001T000000
-RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19470420T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19480417T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19471005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501007T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700503T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19720506T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19721007T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19751026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19761030T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19770403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19780401T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:TRT
-DTSTART:19791015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=MO;UNTIL=19821010T200000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19860330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900325T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19860928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900930T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19910331T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20060325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061028T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20071028T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
TZOFFSETFROM:+015552
TZOFFSETTO:+015656
-TZNAME:IMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19101001T000000
+RDATE:19101001T000000
+TZNAME:EEST
TZOFFSETFROM:+015656
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19101001T000000
-RDATE:19101001T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
DTSTART:19160501T000000
RDATE:19160501T000000
RDATE:19200328T000000
@@ -155,11 +41,11 @@
RDATE:19740331T020000
RDATE:19750330T000000
RDATE:19760601T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19161001T000000
RDATE:19161001T000000
RDATE:19201025T000000
@@ -177,43 +63,174 @@
RDATE:19741103T050000
RDATE:19771016T000000
RDATE:19850928T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19470420T000000
+RRULE:FREQ=YEARLY;UNTIL=19480417T220000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T000000
+RRULE:FREQ=YEARLY;UNTIL=19501007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700503T000000
+RRULE:FREQ=YEARLY;UNTIL=19720506T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19701004T000000
+RRULE:FREQ=YEARLY;UNTIL=19721007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19761030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19780401T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19781015T000000
RDATE:19781015T000000
-RDATE:19800406T030000
-RDATE:19830731T000000
-END:DAYLIGHT
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T030000
+RDATE:19790401T030000
+TZNAME:TRST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19790401T030000
-RDATE:19790401T030000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19791015T000000
+RRULE:FREQ=YEARLY;UNTIL=19821010T200000Z;BYDAY=-3MO;BYMONTH=10
+TZNAME:TRT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:TRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800406T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19830731T000000
+RDATE:19830731T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831002T000000
RDATE:19831002T000000
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19850420T000000
+RDATE:19850420T000000
+TZNAME:EEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19850420T000000
-RDATE:19850420T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T010000
+RRULE:FREQ=YEARLY;UNTIL=20060325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061028T230000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20070101T000000
RDATE:20070101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Jersey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Jersey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Jersey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Jersey
X-LIC-LOCATION:Europe/Jersey
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kaliningrad.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kaliningrad.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kaliningrad.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,148 +1,149 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Kaliningrad
X-LIC-LOCATION:Europe/Kaliningrad
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+BEGIN:STANDARD
+DTSTART:18930401T000000
+RDATE:18930401T000000
TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T000000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0122
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18930401T000000
-RDATE:18930401T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160430T230000
RDATE:19160430T230000
RDATE:19400401T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19421102T030000
RDATE:19431004T030000
RDATE:19441002T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19450101T000000
RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450429T000000
+RDATE:19450429T000000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:CEST
-DTSTART:19450429T000000
-RDATE:19450429T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451101T000000
+RDATE:19451101T000000
+TZNAME:CET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CET
-DTSTART:19451101T000000
-RDATE:19451101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19910929T030000
RDATE:19910929T030000
RDATE:19920926T230000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kiev.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kiev.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Kiev.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,138 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Kiev
X-LIC-LOCATION:Europe/Kiev
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19940924T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:KMT
TZOFFSETFROM:+020204
TZOFFSETTO:+020204
-TZNAME:KMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
TZOFFSETFROM:+020204
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410920T000000
+RDATE:19410920T000000
+TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410920T000000
-RDATE:19410920T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19430329T020000
-RDATE:19430329T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431106T000000
+RDATE:19431106T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0100
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19431106T000000
-RDATE:19431106T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:MSK
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900101T000000
RDATE:19900101T000000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19900701T020000
RDATE:19900701T020000
RDATE:19950924T040000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19920101T000000
RDATE:19920101T000000
RDATE:19950101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Lisbon.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Lisbon.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Lisbon.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,250 +1,261 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Lisbon
X-LIC-LOCATION:Europe/Lisbon
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WEST
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19460406T230000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211014T230000Z;BYMONTH=10
TZNAME:WET
-DTSTART:19171015T000000
-RRULE:FREQ=YEARLY;UNTIL=19211014T230000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291005T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19291005T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19311004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19321001T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19341007T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381001T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411005T230000Z;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19401006T000000
-RRULE:FREQ=YEARLY;UNTIL=19411005T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450310T230000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:WEMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
TZNAME:WEST
-DTSTART:19420314T230000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19450310T230000Z
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451027T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19421025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19451027T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450825T220000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=8
+TZNAME:WEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19430829T000000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=26,27,28,29,30,31;BYDAY=SU;UNTIL=19450825T220000Z
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=1;BYDAY=SU;UNTIL=19450825T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450421T220000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:WEMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19440422T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SA;UNTIL=19450421T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19470406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19490403T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T020000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19510401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19650404T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T020000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19511007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19651003T020000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
+TZNAME:CET
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19760926T010000
+RDATE:19760926T010000
TZNAME:WEST
-DTSTART:19780402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19790401T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19910929T010000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T000000Z;BYDAY=1SU;BYMONTH=4
TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T010000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19840325T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19920329T010000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19950326T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19970330T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-003632
-TZOFFSETTO:-003632
-TZNAME:LMT
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-003632
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19910929T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;UNTIL=19920329T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19160617T230000
-RDATE:19160617T230000
-RDATE:19170228T230000
-RDATE:19180301T230000
-RDATE:19190228T230000
-RDATE:19200229T230000
-RDATE:19210228T230000
-RDATE:19240416T230000
-RDATE:19260417T230000
-RDATE:19270409T230000
-RDATE:19280414T230000
-RDATE:19290420T230000
-RDATE:19310418T230000
-RDATE:19320402T230000
-RDATE:19340407T230000
-RDATE:19350330T230000
-RDATE:19360418T230000
-RDATE:19370403T230000
-RDATE:19380326T230000
-RDATE:19390415T230000
-RDATE:19400224T230000
-RDATE:19410405T230000
-RDATE:19460406T230000
-RDATE:19770327T000000
-RDATE:19800330T000000
-RDATE:19830327T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920927T020000
+RDATE:19920927T020000
+TZNAME:CET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19161101T010000
-RDATE:19161101T010000
-RDATE:19241015T000000
-RDATE:19391119T000000
-RDATE:19461006T000000
-RDATE:19760926T010000
-RDATE:19770925T010000
-RDATE:19781001T010000
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19420425T230000
-RDATE:19420425T230000
-RDATE:19430417T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T020000
+RDATE:19960331T020000
TZNAME:WEST
-DTSTART:19420816T000000
-RDATE:19420816T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660403T020000
-RDATE:19660403T020000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19920927T020000
-RDATE:19920927T020000
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+DTSTART:19970330T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19960331T020000
-RDATE:19960331T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Ljubljana.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Ljubljana.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Ljubljana.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Ljubljana
X-LIC-LOCATION:Europe/Ljubljana
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/London.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/London.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/London.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Luxembourg.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Luxembourg.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Luxembourg.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,100 +1,49 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Luxembourg
X-LIC-LOCATION:Europe/Luxembourg
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19241005T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19281007T000000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19291006T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:19040601T000000
+RDATE:19040601T000000
TZNAME:CEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+002436
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19040601T000000
-RDATE:19040601T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160514T230000
RDATE:19160514T230000
RDATE:19170428T230000
RDATE:19180415T020000
RDATE:19450402T020000
RDATE:19460519T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170917T010000
RDATE:19180916T030000
-RDATE:19440918T030000
RDATE:19450916T030000
RDATE:19461007T030000
RDATE:19770925T030000
RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19181125T000000
+RDATE:19181125T000000
+TZNAME:WEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19181125T000000
-RDATE:19181125T000000
-RDATE:19191005T030000
-RDATE:19201024T020000
-RDATE:19211026T020000
-RDATE:19221008T010000
-RDATE:19231007T020000
-RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19190301T230000
RDATE:19190301T230000
RDATE:19200214T230000
@@ -118,30 +67,102 @@
RDATE:19380327T020000
RDATE:19390416T020000
RDATE:19400225T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19191005T030000
+RDATE:19191005T030000
+RDATE:19201024T020000
+RDATE:19211026T020000
+RDATE:19221008T010000
+RDATE:19231007T020000
+RDATE:19391119T030000
+TZNAME:WET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:WEST
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241005T010000
+RRULE:FREQ=YEARLY;UNTIL=19281007T000000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19291006T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19400514T030000
RDATE:19400514T030000
+TZNAME:WEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+TZNAME:WET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:WEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440918T030000
+RDATE:19440918T030000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:WET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Madrid.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Madrid.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Madrid.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,176 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Madrid
X-LIC-LOCATION:Europe/Madrid
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:WEST
+TZOFFSETFROM:-001444
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170505T230000
+RDATE:19170505T230000
+RDATE:19180415T230000
+RDATE:19190405T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19370522T230000
+RDATE:19380322T230000
+RDATE:19390415T230000
+RDATE:19400316T230000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19171007T000000
+RRULE:FREQ=YEARLY;UNTIL=19191006T230000Z;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241005T000000
+RDATE:19241005T000000
TZNAME:WET
-DTSTART:19171007T000000
-RRULE:FREQ=YEARLY;UNTIL=19191006T230000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291005T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19291005T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19371003T000000
+RRULE:FREQ=YEARLY;UNTIL=19391007T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19371003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19391007T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420502T230000
+RDATE:19420502T230000
+TZNAME:WEMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19430417T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=13,14,15,16,17,18,19;BYDAY=SA;UNTIL=19460413T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420902T000000
+RDATE:19420902T000000
+RDATE:19431004T000000
+RDATE:19441011T000000
+RDATE:19450930T010000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19430417T230000
+RRULE:FREQ=YEARLY;UNTIL=19460413T220000Z;BYDAY=SA;BYMONTHDAY=13,14,15,16,1
+ 7,18,19;BYMONTH=4
+TZNAME:WEMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19740413T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=13,14,15,16,17,18,19;BYDAY=SA;UNTIL=19750419T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460930T000000
+RDATE:19460930T000000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19741006T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19751004T230000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19760926T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19770924T230000Z
-END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:19490430T230000
+RDATE:19490430T230000
+RDATE:19760327T230000
TZNAME:CEST
-DTSTART:19770402T230000
-RRULE:FREQ=YEARLY;UNTIL=19780402T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19790401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19490930T010000
+RDATE:19490930T010000
+RDATE:19781001T010000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740413T230000
+RRULE:FREQ=YEARLY;UNTIL=19750419T220000Z;BYDAY=SA;BYMONTHDAY=13,14,15,16,1
+ 7,18,19;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741006T010000
+RRULE:FREQ=YEARLY;UNTIL=19751004T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-001444
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19010101T000000
-RDATE:19010101T000000
+DTSTART:19760926T010000
+RRULE:FREQ=YEARLY;UNTIL=19770924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19170505T230000
-RDATE:19170505T230000
-RDATE:19180415T230000
-RDATE:19190405T230000
-RDATE:19240416T230000
-RDATE:19260417T230000
-RDATE:19270409T230000
-RDATE:19280414T230000
-RDATE:19290420T230000
-RDATE:19370522T230000
-RDATE:19380322T230000
-RDATE:19390415T230000
-RDATE:19400316T230000
+DTSTART:19770402T230000
+RRULE:FREQ=YEARLY;UNTIL=19780402T220000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790101T000000
+RDATE:19790101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19241005T000000
-RDATE:19241005T000000
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19420502T230000
-RDATE:19420502T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19420902T000000
-RDATE:19420902T000000
-RDATE:19431004T000000
-RDATE:19441011T000000
-RDATE:19450930T010000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19460930T000000
-RDATE:19460930T000000
-RDATE:19490930T010000
-RDATE:19781001T010000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19490430T230000
-RDATE:19490430T230000
-RDATE:19760327T230000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790101T000000
-RDATE:19790101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Malta.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Malta.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Malta.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,83 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Malta
X-LIC-LOCATION:Europe/Malta
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19181006T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19191004T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:18931102T000000
+RDATE:18931102T000000
TZNAME:CEST
-DTSTART:19660522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19680525T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4SU;UNTIL=19690927T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19710523T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19720527T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19750420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19790415T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19750921T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19800921T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19810927T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+005804
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18931102T000000
-RDATE:18931102T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160603T000000
RDATE:19160603T000000
RDATE:19170401T000000
@@ -96,11 +31,11 @@
RDATE:19730331T000000
RDATE:19740421T000000
RDATE:19800331T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170930T010000
@@ -117,13 +52,79 @@
RDATE:19721001T000000
RDATE:19730929T010000
RDATE:19740916T010000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19181006T010000
+RRULE:FREQ=YEARLY;UNTIL=19191004T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19660522T000000
+RRULE:FREQ=YEARLY;UNTIL=19680525T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19660925T000000
+RRULE:FREQ=YEARLY;UNTIL=19690927T220000Z;BYDAY=4SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19710523T000000
+RRULE:FREQ=YEARLY;UNTIL=19720527T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19750420T020000
+RRULE:FREQ=YEARLY;UNTIL=19790415T010000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19750921T020000
+RRULE:FREQ=YEARLY;UNTIL=19800921T000000Z;BYDAY=3SU;BYMONTH=9
TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19810101T000000
RDATE:19810101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Mariehamn.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Mariehamn.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Mariehamn.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,79 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Mariehamn
X-LIC-LOCATION:Europe/Mariehamn
+BEGIN:STANDARD
+DTSTART:18780531T000000
+RDATE:18780531T000000
+TZNAME:HMT
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210501T000000
+RDATE:19210501T000000
+TZNAME:EEST
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420403T000000
+RDATE:19420403T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421003T000000
+RDATE:19421003T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810927T040000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19820926T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+013952
-TZOFFSETTO:+013952
-TZNAME:HMT
-DTSTART:18780531T000000
-RDATE:18780531T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+013952
+DTSTART:19830101T000000
+RDATE:19830101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19210501T000000
-RDATE:19210501T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19420403T000000
-RDATE:19420403T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T040000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19421003T000000
-RDATE:19421003T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19810329T020000
-RDATE:19810329T020000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Minsk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Minsk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Minsk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,131 +1,144 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Minsk
X-LIC-LOCATION:Europe/Minsk
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T000000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
TZOFFSETFROM:+015016
TZOFFSETTO:+0150
-TZNAME:MMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
TZOFFSETFROM:+0150
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19440703T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410628T000000
+RDATE:19410628T000000
+TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410628T000000
-RDATE:19410628T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440703T000000
+RDATE:19440703T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19900101T000000
-RDATE:19900101T000000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900101T000000
+RDATE:19900101T000000
+TZNAME:MSK
+TZOFFSETFROM:+0300
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
-END:DAYLIGHT
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T030000
-RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920329T000000
+RDATE:19920329T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920927T010000
RDATE:19920927T010000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RDATE:19920329T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Monaco.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Monaco.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Monaco.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Monaco
X-LIC-LOCATION:Europe/Monaco
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19161002T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19191005T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19221008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381001T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18910315T000000
+RDATE:18910315T000000
+TZNAME:PMT
TZOFFSETFROM:+002932
TZOFFSETTO:+000921
-TZNAME:PMT
-DTSTART:18910315T000000
-RDATE:18910315T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000000
+RDATE:19110311T000000
+TZNAME:WEST
TZOFFSETFROM:+000921
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19110311T000000
-RDATE:19110311T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19160614T230000
RDATE:19160614T230000
RDATE:19170324T230000
@@ -90,60 +46,113 @@
RDATE:19380326T230000
RDATE:19390415T230000
RDATE:19400225T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19161002T000000
+RRULE:FREQ=YEARLY;UNTIL=19191005T230000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19201024T000000
RDATE:19201024T000000
RDATE:19211026T000000
RDATE:19391119T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19221008T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:WEMT
DTSTART:19410505T000000
RDATE:19410505T000000
RDATE:19420309T000000
RDATE:19430329T020000
RDATE:19440403T020000
RDATE:19450402T020000
+TZNAME:WEMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19411006T000000
RDATE:19411006T000000
RDATE:19421102T030000
RDATE:19431004T030000
RDATE:19441008T010000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450916T030000
+RDATE:19450916T030000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450916T030000
-RDATE:19450916T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760328T010000
+RDATE:19760328T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19760926T010000
RDATE:19760926T010000
RDATE:19770925T030000
RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
-DTSTART:19760328T010000
-RDATE:19760328T010000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Moscow.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Moscow.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Moscow.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,167 +1,168 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Moscow
X-LIC-LOCATION:Europe/Moscow
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
TZOFFSETFROM:+023020
TZOFFSETTO:+0230
-TZNAME:MMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19160703T000000
+RDATE:19160703T000000
+TZNAME:S
TZOFFSETFROM:+0230
TZOFFSETTO:+023048
-TZNAME:MMT
-DTSTART:19160703T000000
-RDATE:19160703T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170701T230000
+RDATE:19170701T230000
+TZNAME:MST
TZOFFSETFROM:+023048
TZOFFSETTO:+033048
-TZNAME:MST
-DTSTART:19170701T230000
-RDATE:19170701T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19171228T000000
+RDATE:19171228T000000
+TZNAME:MMT
TZOFFSETFROM:+033048
TZOFFSETTO:+023048
-TZNAME:MMT
-DTSTART:19171228T000000
-RDATE:19171228T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180531T220000
+RDATE:19180531T220000
+TZNAME:MDST
TZOFFSETFROM:+023048
TZOFFSETTO:+043048
-TZNAME:MDST
-DTSTART:19180531T220000
-RDATE:19180531T220000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19180916T010000
+RDATE:19180916T010000
+TZNAME:MST
TZOFFSETFROM:+043048
TZOFFSETTO:+033048
-TZNAME:MST
-DTSTART:19180916T010000
-RDATE:19180916T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19190531T230000
+RDATE:19190531T230000
+TZNAME:MDST
TZOFFSETFROM:+033048
TZOFFSETTO:+043048
-TZNAME:MDST
-DTSTART:19190531T230000
-RDATE:19190531T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+TZNAME:MSK/MSD
TZOFFSETFROM:+043048
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19190701T020000
-RDATE:19190701T020000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
DTSTART:19190816T000000
RDATE:19190816T000000
RDATE:19211001T000000
RDATE:19920926T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
DTSTART:19210214T230000
RDATE:19210214T230000
RDATE:19920328T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19210320T230000
+RDATE:19210320T230000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:MSD
-DTSTART:19210320T230000
-RDATE:19210320T230000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19210901T000000
+RDATE:19210901T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19210901T000000
-RDATE:19210901T000000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19221001T000000
RDATE:19221001T000000
RDATE:19910929T030000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:MSK
DTSTART:19300621T000000
RDATE:19300621T000000
RDATE:19920119T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Nicosia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Nicosia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Nicosia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,75 +1,76 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Nicosia
X-LIC-LOCATION:Europe/Nicosia
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
+BEGIN:STANDARD
+DTSTART:19211114T000000
+RDATE:19211114T000000
TZNAME:EEST
-DTSTART:19770403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800405T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+021328
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19790930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19970927T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19810329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980328T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19981025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19800405T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19990328T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+021328
+DTSTART:19790930T000000
+RRULE:FREQ=YEARLY;UNTIL=19970927T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19211114T000000
-RDATE:19211114T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19750413T000000
-RDATE:19750413T000000
-RDATE:19760515T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19980901T000000
+RDATE:19980901T000000
+TZNAME:EEST
TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19751012T000000
-RDATE:19751012T000000
-RDATE:19761011T000000
-RDATE:19770925T000000
-RDATE:19781002T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19980901T000000
-RDATE:19980901T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Oslo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Oslo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Oslo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,81 +1,88 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Oslo
X-LIC-LOCATION:Europe/Oslo
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19590315T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19640315T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19590920T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19650919T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
+DTSTART:19400810T230000
+RDATE:19400810T230000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19590315T020000
+RRULE:FREQ=YEARLY;UNTIL=19640315T010000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19590920T030000
+RRULE:FREQ=YEARLY;UNTIL=19650919T010000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0043
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
-DTSTART:18950101T000000
-RDATE:18950101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160522T010000
-RDATE:19160522T010000
-RDATE:19400810T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450402T020000
-RDATE:19650425T020000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19160930T000000
-RDATE:19160930T000000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19451001T030000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800101T000000
-RDATE:19800101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Paris.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Paris.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Paris.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,69 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Paris
X-LIC-LOCATION:Europe/Paris
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19161002T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=MO;UNTIL=19191005T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19221008T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381001T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770403T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18910315T000100
+RDATE:18910315T000100
+TZNAME:PMT
TZOFFSETFROM:+000921
TZOFFSETTO:+000921
-TZNAME:PMT
-DTSTART:18910315T000100
-RDATE:18910315T000100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:WEST
TZOFFSETFROM:+000921
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19110311T000100
-RDATE:19110311T000100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:WEST
DTSTART:19160614T230000
RDATE:19160614T230000
RDATE:19170324T230000
@@ -90,65 +46,124 @@
RDATE:19380326T230000
RDATE:19390415T230000
RDATE:19400225T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19161002T000000
+RRULE:FREQ=YEARLY;UNTIL=19191005T230000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19201024T000000
RDATE:19201024T000000
RDATE:19211026T000000
RDATE:19391119T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19221008T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19400614T230000
RDATE:19400614T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19760328T010000
-END:DAYLIGHT
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
-RDATE:19450916T030000
RDATE:19760926T010000
RDATE:19770925T030000
RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19760328T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19440825T000000
RDATE:19440825T000000
-END:DAYLIGHT
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19441008T010000
+RDATE:19441008T010000
+TZNAME:WEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19441008T010000
-RDATE:19441008T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450402T020000
+RDATE:19450402T020000
+TZNAME:WEMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19450402T020000
-RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19450916T030000
+RDATE:19450916T030000
+TZNAME:CEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19770101T000000
RDATE:19770101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Podgorica.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Podgorica.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Podgorica.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Podgorica
X-LIC-LOCATION:Europe/Podgorica
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Prague.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Prague.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Prague.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,104 +1,111 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Prague
X-LIC-LOCATION:Europe/Prague
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
+DTSTART:18500101T000000
+RDATE:18500101T000000
+TZNAME:PMT
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:18911001T000000
+RDATE:18911001T000000
+TZNAME:CEST
+TZOFFSETFROM:+005744
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19461006T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19790401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T010000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19451118T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+005744
-TZOFFSETTO:+005744
-TZNAME:PMT
-DTSTART:18500101T000000
-RDATE:18500101T000000
+DTSTART:19440917T030000
+RDATE:19440917T030000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+005744
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18911001T000000
-RDATE:18911001T000000
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790101T000000
+RDATE:19790101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160430T230000
-RDATE:19160430T230000
-RDATE:19400401T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450408T020000
-RDATE:19460506T020000
-RDATE:19470420T020000
-RDATE:19480418T020000
-RDATE:19490409T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19161001T010000
-RDATE:19161001T010000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19440917T030000
-RDATE:19451118T030000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790101T000000
-RDATE:19790101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Riga.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Riga.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Riga.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,162 +1,169 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Riga
X-LIC-LOCATION:Europe/Riga
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880924T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19880326T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19890924T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19960929T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19900325T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19990328T010000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991031T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20010325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20011028T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:RMT
TZOFFSETFROM:+013624
TZOFFSETTO:+013624
-TZNAME:RMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+013624
-TZOFFSETTO:+023624
-TZNAME:LST
+BEGIN:STANDARD
DTSTART:19180415T020000
RDATE:19180415T020000
RDATE:19190401T020000
-END:DAYLIGHT
+TZNAME:LST
+TZOFFSETFROM:+013624
+TZOFFSETTO:+023624
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+023624
-TZOFFSETTO:+013624
-TZNAME:RMT
DTSTART:19180916T030000
RDATE:19180916T030000
RDATE:19190522T030000
+TZNAME:RMT
+TZOFFSETFROM:+023624
+TZOFFSETTO:+013624
END:STANDARD
BEGIN:STANDARD
+DTSTART:19260511T000000
+RDATE:19260511T000000
+TZNAME:EET
TZOFFSETFROM:+013624
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19260511T000000
-RDATE:19260511T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400805T000000
+RDATE:19400805T000000
+TZNAME:MSK
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19400805T000000
-RDATE:19400805T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410701T000000
+RDATE:19410701T000000
+TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410701T000000
-RDATE:19410701T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
RDATE:19441002T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19441013T000000
+RDATE:19441013T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0100
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19441013T000000
-RDATE:19441013T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19880924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19880326T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19890326T020000
RDATE:19890326T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890924T030000
+RRULE:FREQ=YEARLY;UNTIL=19960929T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19900325T020000
+RRULE:FREQ=YEARLY;UNTIL=19960331T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19970121T000000
+RDATE:19970121T000000
+RDATE:20010102T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;UNTIL=19990328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;UNTIL=19991031T010000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EET
-DTSTART:19970121T000000
-RDATE:19970121T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20000229T000000
RDATE:20000229T000000
-RDATE:20010102T000000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010325T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20011028T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Rome.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Rome.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Rome.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,97 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Rome
X-LIC-LOCATION:Europe/Rome
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19181006T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19191004T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19660522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19680525T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4SU;UNTIL=19690927T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19710523T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19720527T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19730930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19740928T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19750928T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19770924T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19790526T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18660922T000000
+RDATE:18660922T000000
+TZNAME:RMT
TZOFFSETFROM:+004956
TZOFFSETTO:+004956
-TZNAME:RMT
-DTSTART:18660922T000000
-RDATE:18660922T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18931101T000000
+RDATE:18931101T000000
+TZNAME:CEST
TZOFFSETFROM:+004956
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18931101T000000
-RDATE:18931101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160603T000000
RDATE:19160603T000000
RDATE:19170401T000000
@@ -112,11 +40,11 @@
RDATE:19750601T000000
RDATE:19760530T000000
RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170930T010000
@@ -133,20 +61,93 @@
RDATE:19721001T000000
RDATE:19781001T010000
RDATE:19790930T010000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181006T010000
+RRULE:FREQ=YEARLY;UNTIL=19191004T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440701T000000
+RDATE:19440701T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19660522T000000
+RRULE:FREQ=YEARLY;UNTIL=19680525T230000Z;BYDAY=4SU;BYMONTH=5
TZNAME:CEST
-DTSTART:19440701T000000
-RDATE:19440701T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19660925T000000
+RRULE:FREQ=YEARLY;UNTIL=19690927T220000Z;BYDAY=4SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19710523T000000
+RRULE:FREQ=YEARLY;UNTIL=19720527T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730930T000000
+RRULE:FREQ=YEARLY;UNTIL=19740928T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750928T010000
+RRULE:FREQ=YEARLY;UNTIL=19770924T230000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770522T000000
+RRULE:FREQ=YEARLY;UNTIL=19790526T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19800101T000000
RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Samara.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Samara.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Samara.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,128 +1,150 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Samara
X-LIC-LOCATION:Europe/Samara
+BEGIN:STANDARD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+TZNAME:SAMT
+TZOFFSETFROM:+032036
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:SAMT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350127T000000
+RDATE:19350127T000000
+RDATE:19890326T020000
+TZNAME:KUYST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:KUYST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:KUYST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:KUYT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:KUYT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19880924T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KUYT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:KUYT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880924T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19880326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KUYST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:KUYST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19880326T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19890924T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KUYT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19900325T020000
+RDATE:19900325T020000
+TZNAME:KUYST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:KUYST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
TZNAME:KUYT
-DTSTART:19890924T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19911020T030000
+RDATE:19911020T030000
+TZNAME:SAMST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:SAMST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:SAMST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:SAMT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:SAMT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T220000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20090328T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SAMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SAMT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:SAMT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+032036
-TZOFFSETTO:+0300
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20091024T220000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:SAMT
-DTSTART:19190701T020000
-RDATE:19190701T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
+TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:SAMT
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19911020T030000
END:STANDARD
BEGIN:STANDARD
+DTSTART:20100328T020000
+RDATE:20100328T020000
+TZNAME:SAMST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:KUYT
-DTSTART:19350127T000000
-RDATE:19350127T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20101031T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:SAMT
TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
-TZNAME:KUYST
-DTSTART:19890326T020000
-RDATE:19890326T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:KUYST
-DTSTART:19900325T020000
-RDATE:19900325T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
TZOFFSETTO:+0300
-TZNAME:KUYST
-DTSTART:19910331T020000
-RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:KUYT
-DTSTART:19910929T030000
-RDATE:19910929T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
+DTSTART:20110327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:SAMST
-DTSTART:19920328T230000
-RDATE:19920328T230000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:SAMT
-DTSTART:19920926T230000
-RDATE:19920926T230000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/San_Marino.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/San_Marino.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/San_Marino.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,97 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/San_Marino
X-LIC-LOCATION:Europe/San_Marino
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19181006T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19191004T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19660522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19680525T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4SU;UNTIL=19690927T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19710523T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19720527T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19730930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19740928T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19750928T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19770924T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19790526T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18660922T000000
+RDATE:18660922T000000
+TZNAME:RMT
TZOFFSETFROM:+004956
TZOFFSETTO:+004956
-TZNAME:RMT
-DTSTART:18660922T000000
-RDATE:18660922T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18931101T000000
+RDATE:18931101T000000
+TZNAME:CEST
TZOFFSETFROM:+004956
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18931101T000000
-RDATE:18931101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160603T000000
RDATE:19160603T000000
RDATE:19170401T000000
@@ -112,11 +40,11 @@
RDATE:19750601T000000
RDATE:19760530T000000
RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170930T010000
@@ -133,20 +61,93 @@
RDATE:19721001T000000
RDATE:19781001T010000
RDATE:19790930T010000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181006T010000
+RRULE:FREQ=YEARLY;UNTIL=19191004T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440701T000000
+RDATE:19440701T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19660522T000000
+RRULE:FREQ=YEARLY;UNTIL=19680525T230000Z;BYDAY=4SU;BYMONTH=5
TZNAME:CEST
-DTSTART:19440701T000000
-RDATE:19440701T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19660925T000000
+RRULE:FREQ=YEARLY;UNTIL=19690927T220000Z;BYDAY=4SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19710523T000000
+RRULE:FREQ=YEARLY;UNTIL=19720527T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730930T000000
+RRULE:FREQ=YEARLY;UNTIL=19740928T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750928T010000
+RRULE:FREQ=YEARLY;UNTIL=19770924T230000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770522T000000
+RRULE:FREQ=YEARLY;UNTIL=19790526T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19800101T000000
RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sarajevo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sarajevo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sarajevo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Sarajevo
X-LIC-LOCATION:Europe/Sarajevo
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Simferopol.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Simferopol.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Simferopol.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,173 +1,180 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Simferopol
X-LIC-LOCATION:Europe/Simferopol
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:SMT
+TZOFFSETFROM:+021624
+TZOFFSETTO:+0216
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
+TZOFFSETFROM:+0216
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
+TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
+DTSTART:19411101T000000
+RDATE:19411101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19440413T000000
+RDATE:19440413T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19930925T210000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19940925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T200000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19950326T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T210000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19900101T000000
+RDATE:19900101T000000
+RDATE:19970101T000000
+TZNAME:MSK
TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19980329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+021624
-TZOFFSETTO:+0216
-TZNAME:SMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0216
+DTSTART:19900701T020000
+RDATE:19900701T020000
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19300621T000000
-RDATE:19300621T000000
-RDATE:19440413T000000
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19411101T000000
-RDATE:19411101T000000
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19430329T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19930925T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19900101T000000
-RDATE:19900101T000000
-RDATE:19970101T000000
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
+DTSTART:19940501T000000
+RDATE:19940501T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19900701T020000
-RDATE:19900701T020000
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920101T000000
-RDATE:19920101T000000
+DTSTART:19940925T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19950326T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19960331T040000
+RDATE:19960331T040000
TZNAME:MSD
-DTSTART:19940501T000000
-RDATE:19940501T000000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19960331T040000
-RDATE:19960331T040000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19961027T040000
+RDATE:19961027T040000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19961027T040000
-RDATE:19961027T040000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19970330T040000
+RDATE:19970330T040000
+TZNAME:EEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980329T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19970330T040000
-RDATE:19970330T040000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Skopje.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Skopje.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Skopje.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Skopje
X-LIC-LOCATION:Europe/Skopje
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sofia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sofia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Sofia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,134 +1,135 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Sofia
X-LIC-LOCATION:Europe/Sofia
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19800405T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA;UNTIL=19820403T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19820926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900930T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900325T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19910331T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
TZOFFSETFROM:+013316
TZOFFSETTO:+015656
-TZNAME:IMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18941130T000000
+RDATE:18941130T000000
+TZNAME:EET
TZOFFSETFROM:+015656
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:18941130T000000
-RDATE:18941130T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T020000
-RDATE:19421102T020000
-RDATE:19431004T030000
-RDATE:19441002T030000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450402T030000
+RDATE:19450402T030000
+TZNAME:EET
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19450402T030000
-RDATE:19450402T030000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790331T230000
+RDATE:19790331T230000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19790331T230000
-RDATE:19790331T230000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19791001T010000
RDATE:19791001T010000
RDATE:19800929T010000
RDATE:19810927T020000
RDATE:19961027T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800405T230000
+RRULE:FREQ=YEARLY;UNTIL=19820403T210000Z;BYDAY=1SA;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19820926T020000
+RDATE:19820926T020000
+TZNAME:EEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820926T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19820926T020000
-RDATE:19820926T020000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19910101T000000
RDATE:19910101T000000
RDATE:19970101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Stockholm.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Stockholm.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Stockholm.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,65 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Stockholm
X-LIC-LOCATION:Europe/Stockholm
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:18790101T000000
+RDATE:18790101T000000
+TZNAME:SET
+TZOFFSETFROM:+011212
+TZOFFSETTO:+010014
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19000101T000000
+RDATE:19000101T000000
+TZNAME:CET
+TZOFFSETFROM:+010014
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19160514T230000
+RDATE:19160514T230000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+011212
-TZOFFSETTO:+010014
-TZNAME:SET
-DTSTART:18790101T000000
-RDATE:18790101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+010014
+DTSTART:19800101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19000101T000000
-RDATE:19000101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160514T230000
-RDATE:19160514T230000
-RDATE:19800406T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19161001T010000
-RDATE:19161001T010000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800101T000000
-RDATE:19800101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tallinn.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tallinn.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tallinn.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,162 +1,175 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Tallinn
X-LIC-LOCATION:Europe/Tallinn
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880924T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19880326T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19890924T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19900325T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19980329T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19971026T000000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19981025T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19991031T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20020331T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20021027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:TMT
TZOFFSETFROM:+0139
TZOFFSETTO:+0139
-TZNAME:TMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19180201T000000
+RDATE:19180201T000000
+TZNAME:CEST
TZOFFSETFROM:+0139
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19180201T000000
-RDATE:19180201T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19180415T020000
RDATE:19180415T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19180916T030000
RDATE:19180916T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19190701T000000
+RDATE:19190701T000000
+TZNAME:TMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0139
-TZNAME:TMT
-DTSTART:19190701T000000
-RDATE:19190701T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19210501T000000
+RDATE:19210501T000000
+TZNAME:EET
TZOFFSETFROM:+0139
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19210501T000000
-RDATE:19210501T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400806T000000
+RDATE:19400806T000000
+TZNAME:MSK
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19400806T000000
-RDATE:19400806T000000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410915T000000
+RDATE:19410915T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440922T000000
RDATE:19440922T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410915T000000
-RDATE:19410915T000000
+TZOFFSETTO:+0400
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19880924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19880326T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:EEST
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19890326T020000
RDATE:19890326T020000
RDATE:19980922T000000
-END:DAYLIGHT
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890924T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19900325T020000
+RRULE:FREQ=YEARLY;UNTIL=19980329T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=19971026T000000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;UNTIL=19991031T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19990328T030000
RDATE:19990328T030000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19991101T000000
+RDATE:19991101T000000
+TZNAME:EET
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19991101T000000
-RDATE:19991101T000000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20020221T000000
RDATE:20020221T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020331T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tirane.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tirane.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tirane.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,48 +1,18 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Tirane
X-LIC-LOCATION:Europe/Tirane
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
+DTSTART:19140101T000000
+RDATE:19140101T000000
TZNAME:CET
-DTSTART:19741002T000000
-RRULE:FREQ=YEARLY;UNTIL=19751001T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+011920
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19140101T000000
-RDATE:19140101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19400616T000000
RDATE:19400616T000000
RDATE:19430329T020000
@@ -57,14 +27,16 @@
RDATE:19820502T000000
RDATE:19830418T000000
RDATE:19840401T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19430410T030000
+RDATE:19741002T000000
+RDATE:19751002T000000
RDATE:19761003T000000
RDATE:19771002T000000
RDATE:19781001T000000
@@ -73,13 +45,37 @@
RDATE:19810927T000000
RDATE:19821003T000000
RDATE:19831001T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19840701T000000
+RDATE:19840701T000000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
-DTSTART:19840701T000000
-RDATE:19840701T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tiraspol.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tiraspol.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Tiraspol.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,168 +1,171 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Tiraspol
X-LIC-LOCATION:Europe/Tiraspol
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19321002T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19390930T220000Z
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:CMT
+TZOFFSETFROM:+015520
+TZOFFSETTO:+0155
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19330402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19390401T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
+DTSTART:19180215T000000
+RDATE:19180215T000000
+TZNAME:BMT
+TZOFFSETFROM:+0155
+TZOFFSETTO:+014424
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19310724T000000
+RDATE:19310724T000000
+TZNAME:EEST
+TZOFFSETFROM:+014424
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910101T000000
-RRULE:FREQ=YEARLY;UNTIL=19911231T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19910331T020000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960330T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19321002T010000
+RRULE:FREQ=YEARLY;UNTIL=19390930T220000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T210000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19330402T000000
+RRULE:FREQ=YEARLY;UNTIL=19390401T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19970330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+DTSTART:19400815T000000
+RDATE:19400815T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+015520
-TZOFFSETTO:+0155
-TZNAME:CMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0155
-TZOFFSETTO:+014424
-TZNAME:BMT
-DTSTART:19180215T000000
-RDATE:19180215T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+014424
+DTSTART:19410717T000000
+RDATE:19410717T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19310724T000000
-RDATE:19310724T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19320521T000000
-RDATE:19320521T000000
-RDATE:19400815T000000
-RDATE:19910331T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410717T000000
-RDATE:19410717T000000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440824T000000
+RDATE:19440824T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19440824T000000
-RDATE:19440824T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:MSK
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900101T000000
RDATE:19900101T000000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19900506T000000
RDATE:19900506T000000
RDATE:19910929T030000
RDATE:19961027T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:19970101T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EET
-DTSTART:19970101T000000
-RDATE:19970101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Uzhgorod.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Uzhgorod.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Uzhgorod.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,146 +1,147 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Uzhgorod
X-LIC-LOCATION:Europe/Uzhgorod
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19890923T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19890325T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19920927T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19940924T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18901001T000000
+RDATE:18901001T000000
+TZNAME:CET
TZOFFSETFROM:+012912
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18901001T000000
-RDATE:18901001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19400101T000000
-RDATE:19400101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19400401T020000
RDATE:19400401T020000
RDATE:19430329T020000
RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
RDATE:19441026T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19441001T000000
+RDATE:19441001T000000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19441001T000000
-RDATE:19441001T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19450629T000000
+RDATE:19450629T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0100
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19450629T000000
-RDATE:19450629T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19890325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:MSK
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19900101T000000
RDATE:19900101T000000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19900701T020000
+RDATE:19900701T020000
+TZNAME:CET
TZOFFSETFROM:+0300
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19900701T020000
-RDATE:19900701T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19910331T030000
+RDATE:19910331T030000
+TZNAME:EET
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910331T030000
-RDATE:19910331T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19920101T000000
RDATE:19920101T000000
RDATE:19950101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19950924T040000
RDATE:19950924T040000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vaduz.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vaduz.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vaduz.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Vaduz
X-LIC-LOCATION:Europe/Vaduz
+BEGIN:STANDARD
+DTSTART:18940601T000000
+RDATE:18940601T000000
+TZNAME:CET
+TZOFFSETFROM:+003804
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19810101T000000
+RDATE:19810101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19810927T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+003804
-TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
-DTSTART:18940601T000000
-RDATE:18940601T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19810101T000000
-RDATE:19810101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vatican.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vatican.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vatican.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,97 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Vatican
X-LIC-LOCATION:Europe/Vatican
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19181006T010000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19191004T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19660522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19680525T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660925T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=4SU;UNTIL=19690927T220000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19710523T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19720527T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19730930T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19740928T220000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19750928T010000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19770924T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19770522T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=4SU;UNTIL=19790526T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19800928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18660922T000000
+RDATE:18660922T000000
+TZNAME:RMT
TZOFFSETFROM:+004956
TZOFFSETTO:+004956
-TZNAME:RMT
-DTSTART:18660922T000000
-RDATE:18660922T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18931101T000000
+RDATE:18931101T000000
+TZNAME:CEST
TZOFFSETFROM:+004956
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18931101T000000
-RDATE:18931101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160603T000000
RDATE:19160603T000000
RDATE:19170401T000000
@@ -112,11 +40,11 @@
RDATE:19750601T000000
RDATE:19760530T000000
RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19170930T010000
@@ -133,20 +61,93 @@
RDATE:19721001T000000
RDATE:19781001T010000
RDATE:19790930T010000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181006T010000
+RRULE:FREQ=YEARLY;UNTIL=19191004T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440701T000000
+RDATE:19440701T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19660522T000000
+RRULE:FREQ=YEARLY;UNTIL=19680525T230000Z;BYDAY=4SU;BYMONTH=5
TZNAME:CEST
-DTSTART:19440701T000000
-RDATE:19440701T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19660925T000000
+RRULE:FREQ=YEARLY;UNTIL=19690927T220000Z;BYDAY=4SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19710523T000000
+RRULE:FREQ=YEARLY;UNTIL=19720527T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730930T000000
+RRULE:FREQ=YEARLY;UNTIL=19740928T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750928T010000
+RRULE:FREQ=YEARLY;UNTIL=19770924T230000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770522T000000
+RRULE:FREQ=YEARLY;UNTIL=19790526T230000Z;BYDAY=4SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19800101T000000
RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vienna.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vienna.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vienna.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,33 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Vienna
X-LIC-LOCATION:Europe/Vienna
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19170917T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO;UNTIL=19180916T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19461006T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19481003T010000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
+DTSTART:18930401T000000
+RDATE:18930401T000000
TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19810927T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+010520
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18930401T000000
-RDATE:18930401T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19160430T230000
RDATE:19160430T230000
RDATE:19200405T020000
RDATE:19400401T020000
RDATE:19430329T020000
RDATE:19440403T020000
-RDATE:19450402T020000
RDATE:19460414T020000
RDATE:19470406T020000
RDATE:19480418T020000
RDATE:19800406T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19161001T010000
RDATE:19161001T010000
RDATE:19200913T030000
@@ -81,15 +36,67 @@
RDATE:19441002T030000
RDATE:19450412T030000
RDATE:19800928T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19460101T000000
RDATE:19810101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450402T020000
+RDATE:19450402T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19481003T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vilnius.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vilnius.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Vilnius.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,162 +1,175 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Vilnius
X-LIC-LOCATION:Europe/Vilnius
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19970330T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19971026T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20030330T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20031026T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:WMT
TZOFFSETFROM:+014116
TZOFFSETTO:+0124
-TZNAME:WMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19170101T000000
+RDATE:19170101T000000
+TZNAME:KMT
TZOFFSETFROM:+0124
TZOFFSETTO:+013536
-TZNAME:KMT
-DTSTART:19170101T000000
-RDATE:19170101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19191010T000000
+RDATE:19191010T000000
+TZNAME:CET
TZOFFSETFROM:+013536
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19191010T000000
-RDATE:19191010T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19200712T000000
+RDATE:19200712T000000
+TZNAME:EET
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19200712T000000
-RDATE:19200712T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19201009T000000
RDATE:19201009T000000
RDATE:19421102T030000
RDATE:19431004T030000
RDATE:19981025T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:STANDARD
+DTSTART:19400803T000000
+RDATE:19400803T000000
+TZNAME:MSK
TZOFFSETFROM:+0100
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19400803T000000
-RDATE:19400803T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410624T000000
+RDATE:19410624T000000
+TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410624T000000
-RDATE:19410624T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
DTSTART:19430329T020000
RDATE:19430329T020000
RDATE:19440403T020000
-RDATE:19990328T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19440801T000000
+RDATE:19440801T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19440801T000000
-RDATE:19440801T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T020000
+RRULE:FREQ=YEARLY;UNTIL=19970330T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=19971026T000000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19980101T000000
RDATE:19980101T000000
RDATE:19991031T030000
-RDATE:20030101T000000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19980329T030000
+RDATE:19980329T030000
+TZNAME:CEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19990328T020000
+RRULE:FREQ=YEARLY;UNTIL=19990328T010000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
-DTSTART:19980329T030000
-RDATE:19980329T030000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20030101T000000
+RDATE:20030101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20030330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20031026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Volgograd.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Volgograd.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Volgograd.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,116 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Volgograd
X-LIC-LOCATION:Europe/Volgograd
+BEGIN:STANDARD
+DTSTART:19200103T000000
+RDATE:19200103T000000
+TZNAME:TSAT
+TZOFFSETFROM:+025740
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19250406T000000
+RDATE:19250406T000000
+TZNAME:STAT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:STAT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19611111T000000
+RDATE:19611111T000000
+RDATE:19890326T020000
+RDATE:19920329T020000
+TZNAME:VOLST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:VOLST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:VOLST
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:VOLT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:VOLT
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19880924T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VOLT
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:VOLT
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19880924T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19880326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VOLST
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:VOLST
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19880326T220000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19890924T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VOLT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:VOLT
-DTSTART:19890924T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19900325T020000
+RDATE:19900325T020000
+TZNAME:VOLST
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:VOLST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
+DTSTART:19910331T020000
+RDATE:19910331T020000
TZNAME:VOLT
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:VOLT
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+025740
-TZOFFSETTO:+0300
-TZNAME:TSAT
-DTSTART:19200103T000000
-RDATE:19200103T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0300
-TZOFFSETTO:+0300
-TZNAME:STAT
-DTSTART:19250406T000000
-RDATE:19250406T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:STAT
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
+DTSTART:19920926T230000
+RDATE:19920926T230000
TZNAME:VOLT
-DTSTART:19611111T000000
-RDATE:19611111T000000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0400
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:VOLST
-DTSTART:19890326T020000
-RDATE:19890326T020000
-RDATE:19920329T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:VOLST
-DTSTART:19900325T020000
-RDATE:19900325T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:VOLT
-DTSTART:19910331T020000
-RDATE:19910331T020000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:VOLT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:VOLT
-DTSTART:19920926T230000
-RDATE:19920926T230000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Warsaw.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Warsaw.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Warsaw.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,177 +1,190 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Warsaw
X-LIC-LOCATION:Europe/Warsaw
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:WMT
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19150805T000000
+RDATE:19150805T000000
+TZNAME:CEST
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19770925T020000
+RDATE:19781001T020000
TZNAME:CET
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T000000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19591004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19611001T000000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19610528T010000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=-1SU;UNTIL=19640531T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19180916T030000
+RDATE:19180916T030000
+TZNAME:EET
TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19620930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19640927T000000Z
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+DTSTART:19190415T020000
+RDATE:19190415T020000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190916T030000
+RRULE:FREQ=YEARLY;UNTIL=19190916T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19220601T000000
+RDATE:19220601T000000
TZNAME:CEST
-DTSTART:19770403T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19870927T000000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400623T020000
+RDATE:19400623T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19441001T000000
+RDATE:19441001T000000
TZNAME:CEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19870329T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19880327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19880925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0124
-TZOFFSETTO:+0124
-TZNAME:WMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0124
+DTSTART:19591004T020000
+RRULE:FREQ=YEARLY;UNTIL=19611001T000000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19150805T000000
-RDATE:19150805T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19610528T010000
+RRULE:FREQ=YEARLY;UNTIL=19640531T000000Z;BYDAY=-1SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160430T230000
-RDATE:19160430T230000
-RDATE:19400623T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450429T000000
-RDATE:19460414T000000
-RDATE:19470504T020000
-RDATE:19480418T020000
-RDATE:19490410T020000
-RDATE:19570602T010000
-RDATE:19580330T010000
-RDATE:19590531T010000
-RDATE:19600403T010000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19620930T020000
+RRULE:FREQ=YEARLY;UNTIL=19640927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19161001T010000
-RDATE:19161001T010000
-RDATE:19170917T030000
-RDATE:19220601T000000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441004T020000
-RDATE:19451101T000000
-RDATE:19461007T030000
-RDATE:19770925T020000
-RDATE:19781001T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19180916T030000
-RDATE:19180916T030000
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19190415T020000
-RDATE:19190415T020000
+DTSTART:19770403T010000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19190916T030000
-RDATE:19190916T030000
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19870927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19870329T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
-DTSTART:19441001T000000
-RDATE:19441001T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19880925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
-RDATE:19880101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zagreb.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zagreb.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zagreb.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,64 +1,77 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Zagreb
X-LIC-LOCATION:Europe/Zagreb
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:CET
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19450508T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19830327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19830925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0122
+DTSTART:19821127T000000
+RDATE:19821127T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18840101T000000
-RDATE:18840101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410418T230000
-RDATE:19410418T230000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450508T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19421102T030000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441002T030000
-RDATE:19450916T030000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19450101T000000
-RDATE:19450101T000000
-RDATE:19821127T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zaporozhye.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zaporozhye.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zaporozhye.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,135 +1,136 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Zaporozhye
X-LIC-LOCATION:Europe/Zaporozhye
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19940924T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19920329T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19940326T220000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19950326T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:CUT
TZOFFSETFROM:+022040
TZOFFSETTO:+0220
-TZNAME:CUT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
TZOFFSETFROM:+0220
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19240502T000000
-RDATE:19240502T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19300621T000000
-RDATE:19300621T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410825T000000
+RDATE:19410825T000000
+TZNAME:CEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410825T000000
-RDATE:19410825T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
DTSTART:19421102T030000
RDATE:19421102T030000
RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19430329T020000
-RDATE:19430329T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431025T000000
+RDATE:19431025T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0100
TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19431025T000000
-RDATE:19431025T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T000000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19950101T000000
+RDATE:19950101T000000
+TZNAME:EEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950924T040000
+RDATE:19950924T040000
TZNAME:EET
-DTSTART:19950101T000000
-RDATE:19950101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19950924T040000
-RDATE:19950924T040000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zurich.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zurich.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Europe/Zurich.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,78 +1,65 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Zurich
X-LIC-LOCATION:Europe/Zurich
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19410504T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19420503T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
+DTSTART:18480912T000000
+RDATE:18480912T000000
+TZNAME:BMT
+TZOFFSETFROM:+003408
+TZOFFSETTO:+002944
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18940601T000000
+RDATE:18940601T000000
+TZNAME:CEST
+TZOFFSETFROM:+002944
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19411005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19421003T220000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19410505T010000
+RRULE:FREQ=YEARLY;UNTIL=19420504T000000Z;BYDAY=1MO;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19810329T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
+DTSTART:19411006T020000
+RRULE:FREQ=YEARLY;UNTIL=19421005T000000Z;BYDAY=1MO;BYMONTH=10
TZNAME:CET
-DTSTART:19810927T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+003408
-TZOFFSETTO:+002944
-TZNAME:BMT
-DTSTART:18480912T000000
-RDATE:18480912T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+002944
+DTSTART:19810101T000000
+RDATE:19810101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:18940601T000000
-RDATE:18940601T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19401102T000000
-RDATE:19401102T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19401231T000000
-RDATE:19401231T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
-DTSTART:19810101T000000
-RDATE:19810101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB-Eire.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB-Eire.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB-Eire.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:GB-Eire
X-LIC-LOCATION:GB-Eire
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GB.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,258 +1,291 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:GB
X-LIC-LOCATION:GB
BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
TZNAME:GMT
-DTSTART:19230916T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19240921T020000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19250419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19260418T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19251004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19280422T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19290421T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19310419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19320417T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19360419T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19370418T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19410810T030000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU;UNTIL=19430815T010000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19420405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19440402T010000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19451007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19461006T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19500416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=14,15,16,17,18,19,20;BYDAY=SU;UNTIL=19520420T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19501022T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU;UNTIL=19521026T020000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19531004T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19601002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19550417T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19560422T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19580420T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19590419T020000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19610326T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19611029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19671029T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
TZNAME:BST
-DTSTART:19640322T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=19,20,21,22,23,24,25;BYDAY=SU;UNTIL=19670319T020000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19720319T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19800316T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19721029T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19801026T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19811025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19891029T010000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
TZNAME:GMT
-DTSTART:19901028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-000115
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:18471201T000000
-RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19160521T020000
-RDATE:19160521T020000
-RDATE:19170408T020000
-RDATE:19180324T020000
-RDATE:19190330T020000
-RDATE:19200328T020000
-RDATE:19210403T020000
-RDATE:19220326T020000
-RDATE:19230422T020000
-RDATE:19240413T020000
-RDATE:19270410T020000
-RDATE:19300413T020000
-RDATE:19330409T020000
-RDATE:19340422T020000
-RDATE:19350414T020000
-RDATE:19380410T020000
-RDATE:19390416T020000
-RDATE:19400225T020000
-RDATE:19460414T020000
-RDATE:19470316T020000
-RDATE:19480314T020000
-RDATE:19490403T020000
-RDATE:19530419T020000
-RDATE:19540411T020000
-RDATE:19570414T020000
-RDATE:19600410T020000
-RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19161001T030000
-RDATE:19161001T030000
-RDATE:19170917T030000
-RDATE:19180930T030000
-RDATE:19190929T030000
-RDATE:19201025T030000
-RDATE:19211003T030000
-RDATE:19221008T030000
-RDATE:19391119T030000
-RDATE:19471102T030000
-RDATE:19481031T030000
-RDATE:19491030T030000
-RDATE:19711031T030000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:BDST
-DTSTART:19410504T020000
-RDATE:19410504T020000
-RDATE:19450402T020000
-RDATE:19470413T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19440917T030000
-RDATE:19440917T030000
-RDATE:19450715T030000
-RDATE:19470810T030000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:BST
-DTSTART:19681027T000000
-RDATE:19681027T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:GMT
-DTSTART:19960101T000000
-RDATE:19960101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT+0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT+0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT+0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT+0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:GMT+0
+X-LIC-LOCATION:GMT+0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT-0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT-0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT-0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT-0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:GMT-0
+X-LIC-LOCATION:GMT-0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:GMT
+X-LIC-LOCATION:GMT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT0.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT0.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT0.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/GMT0.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:GMT0
+X-LIC-LOCATION:GMT0
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Greenwich.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenwich.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Greenwich.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Greenwich.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Greenwich
+X-LIC-LOCATION:Greenwich
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/HST.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/HST.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/HST.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/HST.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:HST
+X-LIC-LOCATION:HST
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:HST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Hongkong.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Hongkong.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Hongkong.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,90 +1,114 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Hongkong
X-LIC-LOCATION:Hongkong
BEGIN:STANDARD
-TZOFFSETFROM:+0900
+DTSTART:19041030T000000
+RDATE:19041030T000000
+TZNAME:HKST
+TZOFFSETFROM:+073636
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19481031T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19521025T183000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
+DTSTART:19410401T033000
+RDATE:19410401T033000
+RDATE:19460420T033000
+RDATE:19470413T033000
+RDATE:19480502T033000
+RDATE:19731230T033000
+RDATE:19790513T033000
TZNAME:HKST
-DTSTART:19490403T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19530404T193000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:HKST
-DTSTART:19540321T033000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=18,19,20,21,22,23,24;BYDAY=SU;UNTIL=19640321T193000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19410930T033000
+RDATE:19410930T033000
+RDATE:19461201T033000
+RDATE:19471230T033000
+RDATE:19521025T033000
+RDATE:19531101T033000
+RDATE:19541031T033000
+RDATE:19791021T033000
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19551106T033000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=19641031T183000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19411225T000000
+RDATE:19411225T000000
+TZNAME:JST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450915T000000
+RDATE:19450915T000000
TZNAME:HKST
-DTSTART:19650418T033000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19770416T193000Z
-END:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19481031T033000
+RRULE:FREQ=YEARLY;UNTIL=19511027T183000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19651017T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19771015T183000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19490403T033000
+RRULE:FREQ=YEARLY;UNTIL=19530404T193000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:HKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540321T033000
+RRULE:FREQ=YEARLY;UNTIL=19640321T193000Z;BYDAY=-2SU;BYMONTH=3
TZNAME:HKST
-DTSTART:19790513T033000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19800510T193000Z
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19551106T033000
+RRULE:FREQ=YEARLY;UNTIL=19641031T183000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19791021T033000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19801018T183000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+073636
-TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19041030T000000
-RDATE:19041030T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19650418T033000
+RRULE:FREQ=YEARLY;UNTIL=19730421T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:HKST
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:HKST
-DTSTART:19460420T033000
-RDATE:19460420T033000
-RDATE:19470413T033000
-RDATE:19480502T033000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651017T033000
+RRULE:FREQ=YEARLY;UNTIL=19761016T183000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=10
+TZNAME:HKT
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:HKT
-DTSTART:19461201T033000
-RDATE:19461201T033000
-RDATE:19471230T033000
-RDATE:19531101T033000
-RDATE:19541031T033000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740421T033000
+RDATE:19740421T033000
+TZNAME:HKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19750420T033000
+RRULE:FREQ=YEARLY;UNTIL=19760417T193000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:HKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iceland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iceland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iceland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,62 +1,32 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Iceland
X-LIC-LOCATION:Iceland
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19170219T230000
-RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19430307T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19460303T020000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19431024T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19481024T020000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
-DTSTART:19470406T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19670402T020000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19501022T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T020000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18370101T000000
+RDATE:18370101T000000
+TZNAME:RMT
TZOFFSETFROM:-012724
TZOFFSETTO:-012748
-TZNAME:RMT
-DTSTART:18370101T000000
-RDATE:18370101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19080101T000000
+RDATE:19080101T000000
+TZNAME:ISST
TZOFFSETFROM:-012748
TZOFFSETTO:-0100
-TZNAME:IST
-DTSTART:19080101T000000
-RDATE:19080101T000000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170219T230000
+RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z;BYMONTH=2
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:-0100
-TZNAME:IST
DTSTART:19171021T010000
RDATE:19171021T010000
RDATE:19181116T010000
@@ -66,23 +36,54 @@
RDATE:19421025T020000
RDATE:19491030T020000
RDATE:19671029T020000
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0100
-TZOFFSETTO:+0000
-TZNAME:ISST
DTSTART:19390429T230000
RDATE:19390429T230000
RDATE:19400225T020000
RDATE:19410302T010000
RDATE:19420308T010000
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19430307T010000
+RRULE:FREQ=YEARLY;UNTIL=19460303T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19431024T020000
+RRULE:FREQ=YEARLY;UNTIL=19481024T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T010000
+RRULE:FREQ=YEARLY;UNTIL=19670402T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ISST
TZOFFSETFROM:-0100
TZOFFSETTO:+0000
-TZNAME:GMT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T020000
+RRULE:FREQ=YEARLY;UNTIL=19661023T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19680407T010000
RDATE:19680407T010000
+TZNAME:GMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Antananarivo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Antananarivo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Antananarivo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Antananarivo
X-LIC-LOCATION:Indian/Antananarivo
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:EAT
TZOFFSETFROM:+031004
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19540227T230000
+RDATE:19540227T230000
+TZNAME:EAST
TZOFFSETFROM:+0300
TZOFFSETTO:+0400
-TZNAME:EAST
-DTSTART:19540227T230000
-RDATE:19540227T230000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19540530T000000
+RDATE:19540530T000000
+TZNAME:EAT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19540530T000000
-RDATE:19540530T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Chagos.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Chagos.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Chagos.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Chagos
X-LIC-LOCATION:Indian/Chagos
BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:IOT
TZOFFSETFROM:+044940
TZOFFSETTO:+0500
-TZNAME:IOT
-DTSTART:19070101T000000
-RDATE:19070101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:IOT
TZOFFSETFROM:+0500
TZOFFSETTO:+0600
-TZNAME:IOT
-DTSTART:19960101T000000
-RDATE:19960101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Christmas.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Christmas.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Christmas.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Christmas
X-LIC-LOCATION:Indian/Christmas
BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:CXT
TZOFFSETFROM:+070252
TZOFFSETTO:+0700
-TZNAME:CXT
-DTSTART:18950201T000000
-RDATE:18950201T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Cocos.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Cocos.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Cocos.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Cocos
X-LIC-LOCATION:Indian/Cocos
BEGIN:STANDARD
+DTSTART:19000101T000000
+RDATE:19000101T000000
+TZNAME:CCT
TZOFFSETFROM:+062740
TZOFFSETTO:+0630
-TZNAME:CCT
-DTSTART:19000101T000000
-RDATE:19000101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Comoro.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Comoro.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Comoro.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Comoro
X-LIC-LOCATION:Indian/Comoro
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:EAT
TZOFFSETFROM:+025304
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Kerguelen.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Kerguelen.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Kerguelen.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Kerguelen
X-LIC-LOCATION:Indian/Kerguelen
BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:TFT
TZOFFSETFROM:+0000
TZOFFSETTO:+0500
-TZNAME:TFT
-DTSTART:19500101T000000
-RDATE:19500101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mahe.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mahe.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mahe.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Mahe
X-LIC-LOCATION:Indian/Mahe
BEGIN:STANDARD
+DTSTART:19060601T000000
+RDATE:19060601T000000
+TZNAME:SCT
TZOFFSETFROM:+034148
TZOFFSETTO:+0400
-TZNAME:SCT
-DTSTART:19060601T000000
-RDATE:19060601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Maldives.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Maldives.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Maldives.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Maldives
X-LIC-LOCATION:Indian/Maldives
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
TZOFFSETFROM:+0454
TZOFFSETTO:+0454
-TZNAME:MMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:MVT
TZOFFSETFROM:+0454
TZOFFSETTO:+0500
-TZNAME:MVT
-DTSTART:19600101T000000
-RDATE:19600101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mauritius.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mauritius.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mauritius.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,32 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Mauritius
X-LIC-LOCATION:Indian/Mauritius
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:MUST
-DTSTART:20081026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:MUT
-DTSTART:20090329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0350
-TZOFFSETTO:+0400
-TZNAME:MUT
DTSTART:19070101T000000
RDATE:19070101T000000
+TZNAME:MUST
+TZOFFSETFROM:+0350
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:MUST
DTSTART:19821010T000000
RDATE:19821010T000000
+RDATE:20081026T020000
+TZNAME:MUST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:MUT
DTSTART:19830321T000000
RDATE:19830321T000000
+RDATE:20090329T020000
+TZNAME:MUT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mayotte.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mayotte.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Mayotte.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Mayotte
X-LIC-LOCATION:Indian/Mayotte
BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:EAT
TZOFFSETFROM:+030056
TZOFFSETTO:+0300
-TZNAME:EAT
-DTSTART:19110701T000000
-RDATE:19110701T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Reunion.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Reunion.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Indian/Reunion.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Indian/Reunion
X-LIC-LOCATION:Indian/Reunion
BEGIN:STANDARD
+DTSTART:19110601T000000
+RDATE:19110601T000000
+TZNAME:RET
TZOFFSETFROM:+034152
TZOFFSETTO:+0400
-TZNAME:RET
-DTSTART:19110601T000000
-RDATE:19110601T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iran.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iran.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Iran.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,272 +1,159 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Iran
X-LIC-LOCATION:Iran
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19790321T000000
-RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19910922T000000
-RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z
+DTSTART:19160101T000000
+RDATE:19160101T000000
+TZNAME:TMT
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19920322T000000
-RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19970322T000000
-RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:IRST
-DTSTART:19970922T000000
-RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20010322T000000
-RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0430
+TZOFFSETFROM:+032544
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20010922T000000
-RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20090322T000000
-RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19771101T000000
+RDATE:19771101T000000
TZNAME:IRST
-DTSTART:20090922T000000
-RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
+DTSTART:19780321T000000
+RDATE:19780321T000000
TZNAME:IRDT
-DTSTART:20130322T000000
-RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19781021T000000
+RDATE:19781021T000000
TZNAME:IRST
-DTSTART:20130922T000000
-RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20170322T000000
-RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:19790101T000000
+RDATE:19790101T000000
TZNAME:IRST
-DTSTART:20170922T000000
-RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790321T000000
+RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20210322T000000
-RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19960921T000000
+RDATE:20000921T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20120921T000000
+RDATE:20160921T000000
+RDATE:20170922T000000
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20210922T000000
-RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19910503T000000
+RDATE:19910503T000000
+RDATE:19960321T000000
+RDATE:20000321T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20120321T000000
+RDATE:20160321T000000
+RDATE:20170322T000000
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20250322T000000
-RRULE:FREQ=YEARLY;UNTIL=20270321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19910922T000000
+RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20250922T000000
-RRULE:FREQ=YEARLY;UNTIL=20270921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19920322T000000
+RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20280321T000000
-RRULE:FREQ=YEARLY;UNTIL=20290320T203000Z
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20280921T000000
-RRULE:FREQ=YEARLY;UNTIL=20290920T193000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19970322T000000
+RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20300322T000000
-RRULE:FREQ=YEARLY;UNTIL=20310321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19970922T000000
+RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20300922T000000
-RRULE:FREQ=YEARLY;UNTIL=20310921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010322T000000
+RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20320321T000000
-RRULE:FREQ=YEARLY;UNTIL=20330320T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010922T000000
+RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20320921T000000
-RRULE:FREQ=YEARLY;UNTIL=20330920T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20090322T000000
+RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20340322T000000
-RRULE:FREQ=YEARLY;UNTIL=20350321T203000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20090922T000000
+RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z;BYMONTH=9
+TZNAME:IRST
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:20340922T000000
-RRULE:FREQ=YEARLY;UNTIL=20350921T193000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20130322T000000
+RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z;BYMONTH=3
+TZNAME:IRDT
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:20360321T000000
-RRULE:FREQ=YEARLY;UNTIL=20370320T203000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0430
-TZOFFSETTO:+0330
+DTSTART:20130922T000000
+RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z;BYMONTH=9
TZNAME:IRST
-DTSTART:20360921T000000
-RRULE:FREQ=YEARLY;UNTIL=20370920T193000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032544
-TZOFFSETTO:+032544
-TZNAME:TMT
-DTSTART:19160101T000000
-RDATE:19160101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+032544
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0400
-TZNAME:IRST
-DTSTART:19771101T000000
-RDATE:19771101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-TZNAME:IRDT
-DTSTART:19780321T000000
-RDATE:19780321T000000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0400
-TZNAME:IRST
-DTSTART:19781021T000000
-RDATE:19781021T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19790101T000000
-RDATE:19790101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19790919T000000
-RDATE:19790919T000000
-RDATE:19800923T000000
-RDATE:19960921T000000
-RDATE:20000921T000000
-RDATE:20040921T000000
-RDATE:20050922T000000
-RDATE:20080921T000000
-RDATE:20120921T000000
-RDATE:20160921T000000
-RDATE:20200921T000000
-RDATE:20240921T000000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0430
-TZNAME:IRDT
-DTSTART:19910503T000000
-RDATE:19910503T000000
-RDATE:19960321T000000
-RDATE:20000321T000000
-RDATE:20040321T000000
-RDATE:20050322T000000
-RDATE:20080321T000000
-RDATE:20120321T000000
-RDATE:20160321T000000
-RDATE:20200321T000000
-RDATE:20240321T000000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Israel.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Israel.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Israel.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,88 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Israel
X-LIC-LOCATION:Israel
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19421101T000000
-RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19481101T020000
-RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:IST
-DTSTART:19880903T000000
-RRULE:FREQ=YEARLY;UNTIL=19890902T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20060331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20100326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20100326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20120330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20150327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20150327T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20170331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20210326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20210326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20230331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20320326T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20320326T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
-DTSTART:20340331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=26,27,28,29,30,31;BYDAY=FR;UNTIL=20370327T000000Z
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=1;BYDAY=FR;UNTIL=20370327T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+022056
-TZOFFSETTO:+022040
-TZNAME:JMT
DTSTART:18800101T000000
RDATE:18800101T000000
+TZNAME:JMT
+TZOFFSETFROM:+022056
+TZOFFSETTO:+022040
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+022040
-TZOFFSETTO:+0200
-TZNAME:IST
DTSTART:19180101T000000
RDATE:19180101T000000
+TZNAME:IST
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:IDT
DTSTART:19400601T000000
RDATE:19400601T000000
RDATE:19430401T020000
@@ -123,13 +60,19 @@
RDATE:20050401T020000
RDATE:20110401T020000
RDATE:20160401T020000
-RDATE:20220401T020000
-RDATE:20330401T020000
+RDATE:20170331T020000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:IST
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-TZNAME:IST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19451101T020000
RDATE:19451101T020000
RDATE:19461101T000000
@@ -146,6 +89,8 @@
RDATE:19850915T000000
RDATE:19860907T000000
RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
RDATE:19900826T000000
RDATE:19910901T000000
RDATE:19920906T000000
@@ -174,40 +119,46 @@
RDATE:20150920T020000
RDATE:20161009T020000
RDATE:20170924T020000
-RDATE:20180916T020000
-RDATE:20191006T020000
-RDATE:20200927T020000
-RDATE:20210912T020000
-RDATE:20221002T020000
-RDATE:20230924T020000
-RDATE:20241006T020000
-RDATE:20250928T020000
-RDATE:20260920T020000
-RDATE:20271010T020000
-RDATE:20280924T020000
-RDATE:20290916T020000
-RDATE:20301006T020000
-RDATE:20310921T020000
-RDATE:20320912T020000
-RDATE:20331002T020000
-RDATE:20340917T020000
-RDATE:20351007T020000
-RDATE:20360928T020000
-RDATE:20370913T020000
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0400
-TZNAME:IDDT
DTSTART:19480523T000000
RDATE:19480523T000000
+TZNAME:IDDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+TZNAME:IDT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19481101T020000
+RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060331T020000
+RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
TZNAME:IDT
-DTSTART:19480901T000000
-RDATE:19480901T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20120330T020000
+RRULE:FREQ=YEARLY;UNTIL=20150327T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Jamaica.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Jamaica.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Jamaica.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Jamaica
X-LIC-LOCATION:Jamaica
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19741027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19831030T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KMT
TZOFFSETFROM:-050712
TZOFFSETTO:-050712
-TZNAME:KMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19120201T000000
+RDATE:19120201T000000
+TZNAME:EST
TZOFFSETFROM:-050712
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740428T020000
+RDATE:19740428T020000
TZNAME:EST
-DTSTART:19120201T000000
-RDATE:19120201T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=19831030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19750223T020000
+RDATE:19750223T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
-DTSTART:19740428T020000
-RDATE:19740428T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840101T000000
+RDATE:19840101T000000
+TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19840101T000000
-RDATE:19840101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Japan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Japan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Japan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,52 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Japan
X-LIC-LOCATION:Japan
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:18880101T001859
+RDATE:18880101T001859
TZNAME:JST
-DTSTART:19480911T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=2SA;UNTIL=19510907T160000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:JDT
-DTSTART:19500507T020000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1SU;UNTIL=19510505T170000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+091859
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:18880101T001859
-RDATE:18880101T001859
END:STANDARD
BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CJT
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:CJT
-DTSTART:18960101T000000
-RDATE:18960101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19380101T000000
+RDATE:19380101T000000
+TZNAME:JST
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19380101T000000
-RDATE:19380101T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:JDT
DTSTART:19480502T020000
RDATE:19480502T020000
RDATE:19490403T020000
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19480911T020000
+RRULE:FREQ=YEARLY;UNTIL=19510907T160000Z;BYDAY=2SA;BYMONTH=9
+TZNAME:JST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500507T020000
+RRULE:FREQ=YEARLY;UNTIL=19510505T170000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Kwajalein.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Kwajalein.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Kwajalein.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Kwajalein
X-LIC-LOCATION:Kwajalein
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:MHT
TZOFFSETFROM:+110920
TZOFFSETTO:+1100
-TZNAME:MHT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691001T000000
+RDATE:19691001T000000
+TZNAME:KWAT
TZOFFSETFROM:+1100
TZOFFSETTO:-1200
-TZNAME:KWAT
-DTSTART:19691001T000000
-RDATE:19691001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19930820T000000
+RDATE:19930820T000000
+TZNAME:MHT
TZOFFSETFROM:-1200
TZOFFSETTO:+1200
-TZNAME:MHT
-DTSTART:19930820T000000
-RDATE:19930820T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Libya.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Libya.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Libya.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,82 +1,95 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Libya
X-LIC-LOCATION:Libya
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:CEST
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19820401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19861003T000000
+RDATE:19960930T000000
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19821001T000000
-RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+TZNAME:EET
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
TZNAME:CEST
-DTSTART:19870401T000000
-RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19871001T000000
-RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+005244
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19200101T000000
-RDATE:19200101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870401T000000
+RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19511014T020000
-RDATE:19511014T020000
-RDATE:19531009T020000
-RDATE:19550930T000000
-RDATE:19850406T000000
-RDATE:19860404T000000
-RDATE:19970404T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19871001T000000
+RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19520101T000000
-RDATE:19520101T000000
-RDATE:19540101T000000
-RDATE:19560101T000000
-RDATE:19820101T000000
-RDATE:19861003T000000
-RDATE:19960930T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19970404T000000
+RDATE:19970404T000000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19590101T000000
-RDATE:19590101T000000
-RDATE:19900504T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19971004T000000
+RDATE:19971004T000000
+TZNAME:EET
TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19971004T000000
-RDATE:19971004T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MET.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/MET.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MET.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MET.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,87 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:MET
+X-LIC-LOCATION:MET
+BEGIN:STANDARD
+DTSTART:18000101T010000
+RDATE:18000101T010000
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+TZNAME:MET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:MET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:MEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/MST.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:MST
+X-LIC-LOCATION:MST
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST7MDT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/MST7MDT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST7MDT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/MST7MDT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,101 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:MST7MDT
+X-LIC-LOCATION:MST7MDT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaNorte.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaNorte.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaNorte.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,102 +1,154 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Mexico/BajaNorte
X-LIC-LOCATION:Mexico/BajaNorte
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220101T001156
+RDATE:19220101T001156
+TZNAME:MST
+TZOFFSETFROM:-074804
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+RDATE:20100101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19540425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19600424T100000Z
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19600925T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19761031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-074804
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19220101T001156
-RDATE:19220101T001156
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19240101T000000
-RDATE:19240101T000000
-RDATE:19301115T000000
-RDATE:19310930T000000
-RDATE:19451112T000000
-RDATE:19490114T000000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19270610T230000
-RDATE:19270610T230000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19310401T000000
-RDATE:19310401T000000
-RDATE:19480405T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;UNTIL=20090405T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420424T000000
-RDATE:19420424T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;UNTIL=20091025T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0800
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19540101T000000
-RDATE:19540101T000000
-RDATE:19610101T000000
-RDATE:19760101T000000
-RDATE:19960101T000000
-RDATE:20010101T000000
-RDATE:20020220T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaSur.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaSur.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/BajaSur.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,83 +1,84 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Mexico/BajaSur
X-LIC-LOCATION:Mexico/BajaSur
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T090000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19211231T235420
+RDATE:19211231T235420
TZNAME:MST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T080000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-070540
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19211231T235420
-RDATE:19211231T235420
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
RDATE:19420424T000000
RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19490114T000000
+RDATE:19490114T000000
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19490114T000000
-RDATE:19490114T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19700101T000000
+RDATE:19700101T000000
+TZNAME:MST
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19700101T000000
-RDATE:19700101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20010506T020000
RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/General.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/General.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Mexico/General.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,95 +1,96 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Mexico/General
X-LIC-LOCATION:Mexico/General
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19960407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20000402T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20001029T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20020407T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20021027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19220101T002324
+RDATE:19220101T002324
+TZNAME:MST
TZOFFSETFROM:-063636
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19220101T002324
-RDATE:19220101T002324
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19270610T230000
RDATE:19270610T230000
RDATE:19310501T230000
RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19301115T000000
RDATE:19301115T000000
RDATE:19311001T000000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
DTSTART:19390205T000000
RDATE:19390205T000000
RDATE:19401209T000000
RDATE:19500212T000000
RDATE:20010506T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19390625T000000
RDATE:19390625T000000
RDATE:19410401T000000
RDATE:19440501T000000
RDATE:19500730T000000
RDATE:20010930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19431216T000000
-RDATE:19431216T000000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20020220T000000
RDATE:20020220T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ-CHAT.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ-CHAT.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ-CHAT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,72 +1,73 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:NZ-CHAT
X-LIC-LOCATION:NZ-CHAT
+BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:CHAST
+TZOFFSETFROM:+121348
+TZOFFSETTO:+1245
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T024500
+RDATE:19741103T024500
+RDATE:19891008T024500
+TZNAME:CHADT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
-TZNAME:CHADT
-DTSTART:19751026T024500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1345
-TZOFFSETTO:+1245
+DTSTART:19750223T034500
+RDATE:19750223T034500
TZNAME:CHAST
-DTSTART:19760307T034500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19900318T034500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1245
-TZOFFSETTO:+1345
+DTSTART:19751026T024500
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CHADT
-DTSTART:19901007T024500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
-TZNAME:CHADT
-DTSTART:20070930T024500
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T034500
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CHAST
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:20080406T034500
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+121348
+DTSTART:19900318T034500
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CHAST
+TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19570101T000000
-RDATE:19570101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T024500
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CHADT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T024500
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:CHADT
-DTSTART:19741103T024500
-RDATE:19741103T024500
-RDATE:19891008T024500
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T034500
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CHAST
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19750223T034500
-RDATE:19750223T034500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/NZ.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:NZ
X-LIC-LOCATION:NZ
+BEGIN:STANDARD
+DTSTART:18681102T000000
+RDATE:18681102T000000
+TZNAME:NZST
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19271106T020000
+RDATE:19271106T020000
+TZNAME:NZST
TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280304T020000
+RDATE:19280304T020000
+TZNAME:NZMT
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19281014T020000
+RRULE:FREQ=YEARLY;UNTIL=19331007T143000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:NZST
+TZOFFSETFROM:+1130
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19281014T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19331007T143000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19290317T020000
+RRULE:FREQ=YEARLY;UNTIL=19330318T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZMT
TZOFFSETFROM:+1200
TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19290317T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19330318T140000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340429T020000
+RRULE:FREQ=YEARLY;UNTIL=19400427T140000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NZMT
TZOFFSETFROM:+1200
TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19340429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19400427T140000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19400928T143000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZST
TZOFFSETFROM:+1130
TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:NZST
-DTSTART:19340930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19400928T143000Z
-END:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
+DTSTART:19750223T030000
+RDATE:19750223T030000
TZNAME:NZST
-DTSTART:19760307T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19900318T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NZDT
-DTSTART:19901007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:20070930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+113904
-TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:18681102T000000
-RDATE:18681102T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1130
-TZOFFSETTO:+1230
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
TZNAME:NZST
-DTSTART:19271106T020000
-RDATE:19271106T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1230
-TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19280304T020000
-RDATE:19280304T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:NZDT
-DTSTART:19741103T020000
-RDATE:19741103T020000
-RDATE:19891008T020000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19750223T030000
-RDATE:19750223T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Navajo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Navajo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Navajo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +1,134 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Navajo
X-LIC-LOCATION:Navajo
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19210327T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T080000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19650425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19651031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-065956
-TZOFFSETTO:-0700
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:MST
-DTSTART:18831118T120004
-RDATE:18831118T120004
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210522T020000
-RDATE:19210522T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PRC.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PRC.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PRC.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,52 +1,54 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:PRC
X-LIC-LOCATION:PRC
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
+DTSTART:19280101T000000
+RDATE:19280101T000000
TZNAME:CST
-DTSTART:19401001T000000
-RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0900
+TZOFFSETFROM:+080552
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19860914T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=SU;UNTIL=19910914T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19870412T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=10,11,12,13,14,15,16;BYDAY=SU;UNTIL=19910413T160000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+080552
+DTSTART:19401001T000000
+RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19490101T000000
+RDATE:19490101T000000
TZNAME:CST
-DTSTART:19280101T000000
-RDATE:19280101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19400603T000000
-RDATE:19400603T000000
-RDATE:19410316T000000
-RDATE:19860504T000000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19490101T000000
-RDATE:19490101T000000
-END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PST8PDT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/PST8PDT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PST8PDT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/PST8PDT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,101 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:PST8PDT
+X-LIC-LOCATION:PST8PDT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Apia.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Apia.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Apia.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Apia
X-LIC-LOCATION:Pacific/Apia
BEGIN:STANDARD
-TZOFFSETFROM:+123304
-TZOFFSETTO:-112656
-TZNAME:LMT
-DTSTART:18790705T000000
-RDATE:18790705T000000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19110101T000000
+RDATE:19110101T000000
+TZNAME:SAMT
TZOFFSETFROM:-112656
TZOFFSETTO:-1130
-TZNAME:SAMT
-DTSTART:19110101T000000
-RDATE:19110101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:WST
TZOFFSETFROM:-1130
TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100926T000000
+RDATE:20100926T000000
+TZNAME:WSDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110403T010000
+RDATE:20110403T010000
TZNAME:WST
-DTSTART:19500101T000000
-RDATE:19500101T000000
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Auckland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Auckland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Auckland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,121 +1,122 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Auckland
X-LIC-LOCATION:Pacific/Auckland
+BEGIN:STANDARD
+DTSTART:18681102T000000
+RDATE:18681102T000000
+TZNAME:NZST
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19271106T020000
+RDATE:19271106T020000
+TZNAME:NZST
TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280304T020000
+RDATE:19280304T020000
+TZNAME:NZMT
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19281014T020000
+RRULE:FREQ=YEARLY;UNTIL=19331007T143000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:NZST
+TZOFFSETFROM:+1130
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19281014T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19331007T143000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19290317T020000
+RRULE:FREQ=YEARLY;UNTIL=19330318T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZMT
TZOFFSETFROM:+1200
TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19290317T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19330318T140000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19340429T020000
+RRULE:FREQ=YEARLY;UNTIL=19400427T140000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NZMT
TZOFFSETFROM:+1200
TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19340429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19400427T140000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19400928T143000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZST
TZOFFSETFROM:+1130
TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
TZNAME:NZST
-DTSTART:19340930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19400928T143000Z
-END:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:19751026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1200
+DTSTART:19750223T030000
+RDATE:19750223T030000
TZNAME:NZST
-DTSTART:19760307T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19900318T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1200
-TZOFFSETTO:+1300
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:NZDT
-DTSTART:19901007T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:NZDT
-DTSTART:20070930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:20080406T030000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+113904
-TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:18681102T000000
-RDATE:18681102T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1130
-TZOFFSETTO:+1230
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
TZNAME:NZST
-DTSTART:19271106T020000
-RDATE:19271106T020000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+1230
-TZOFFSETTO:+1130
-TZNAME:NZMT
-DTSTART:19280304T020000
-RDATE:19280304T020000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+1200
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19460101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:NZDT
-DTSTART:19741103T020000
-RDATE:19741103T020000
-RDATE:19891008T020000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:NZST
-DTSTART:19750223T030000
-RDATE:19750223T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chatham.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chatham.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chatham.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,72 +1,73 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Chatham
X-LIC-LOCATION:Pacific/Chatham
+BEGIN:STANDARD
+DTSTART:19570101T000000
+RDATE:19570101T000000
+TZNAME:CHAST
+TZOFFSETFROM:+121348
+TZOFFSETTO:+1245
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19741103T024500
+RDATE:19741103T024500
+RDATE:19891008T024500
+TZNAME:CHADT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
-TZNAME:CHADT
-DTSTART:19751026T024500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19881029T140000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1345
-TZOFFSETTO:+1245
+DTSTART:19750223T034500
+RDATE:19750223T034500
TZNAME:CHAST
-DTSTART:19760307T034500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19890304T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19900318T034500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=20070317T140000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+1245
-TZOFFSETTO:+1345
+DTSTART:19751026T024500
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CHADT
-DTSTART:19901007T024500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=20060930T140000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
-TZNAME:CHADT
-DTSTART:20070930T024500
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19760307T034500
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CHAST
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:20080406T034500
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+121348
+DTSTART:19900318T034500
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CHAST
+TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19570101T000000
-RDATE:19570101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19901007T024500
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CHADT
TZOFFSETFROM:+1245
TZOFFSETTO:+1345
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T024500
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
TZNAME:CHADT
-DTSTART:19741103T024500
-RDATE:19741103T024500
-RDATE:19891008T024500
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20080406T034500
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CHAST
TZOFFSETFROM:+1345
TZOFFSETTO:+1245
-TZNAME:CHAST
-DTSTART:19750223T034500
-RDATE:19750223T034500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chuuk.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific/Chuuk.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chuuk.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Chuuk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Chuuk
+X-LIC-LOCATION:Pacific/Chuuk
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:CHUT
+TZOFFSETFROM:+100708
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Easter.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Easter.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Easter.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,163 +1,166 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Easter
X-LIC-LOCATION:Pacific/Easter
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:EMT
+TZOFFSETFROM:-071744
+TZOFFSETTO:-071728
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320901T000000
+RDATE:19320901T000000
+TZNAME:EASST
+TZOFFSETFROM:-071728
TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19701010T210000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19721015T040000Z
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19420531T220000
+RDATE:19420531T220000
+RDATE:19460831T210000
+RDATE:19690329T210000
+RDATE:19700328T210000
+RDATE:19710313T210000
+TZNAME:EAST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:EAST
-DTSTART:19720311T210000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19810315T030000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420731T220000
+RDATE:19420731T220000
+RDATE:19681102T210000
+RDATE:19691122T210000
+RDATE:19730929T210000
+TZNAME:EASST
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19741012T210000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19811011T040000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460714T220000
+RDATE:19460714T220000
+TZNAME:EASST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19821009T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19871011T040000Z
+TZOFFSETTO:-0600
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19470331T210000
+RDATE:19470331T210000
TZNAME:EAST
-DTSTART:19830312T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19860309T030000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701010T210000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19720311T210000
+RRULE:FREQ=YEARLY;UNTIL=19810315T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19880312T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19890312T030000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741012T210000
+RRULE:FREQ=YEARLY;UNTIL=19811011T040000Z;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19820313T210000
+RDATE:19820313T210000
+TZNAME:EAST
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:19910309T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19960310T030000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
+DTSTART:19821009T220000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=2SA;BYMONTH=10
TZNAME:EASST
-DTSTART:19911012T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA;UNTIL=19971012T040000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19991009T220000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19830312T220000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:EAST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:20000311T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=20070311T030000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19870411T220000
+RDATE:19870411T220000
+RDATE:19900317T220000
+RDATE:19970329T220000
+RDATE:19980314T220000
+RDATE:19990403T220000
+RDATE:20080329T220000
+RDATE:20090314T220000
+RDATE:20100403T220000
+TZNAME:EAST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:20090314T220000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-071744
-TZOFFSETTO:-071728
-TZNAME:EMT
-DTSTART:18900101T000000
-RDATE:18900101T000000
+DTSTART:19880312T220000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:EAST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-071728
-TZOFFSETTO:-0600
+DTSTART:19881001T220000
+RDATE:19881001T220000
+RDATE:19891014T220000
+RDATE:19900915T220000
+RDATE:19980926T220000
TZNAME:EASST
-DTSTART:19320901T000000
-RDATE:19320901T000000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
+DTSTART:19910309T220000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19420531T220000
-RDATE:19420531T220000
-RDATE:19460831T210000
-RDATE:19690329T210000
-RDATE:19700328T210000
-RDATE:19710313T210000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
+DTSTART:19911012T220000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=2SA;BYMONTH=10
TZNAME:EASST
-DTSTART:19420731T220000
-RDATE:19420731T220000
-RDATE:19681102T210000
-RDATE:19691122T210000
-RDATE:19730929T210000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19991009T220000
+RRULE:FREQ=YEARLY;BYDAY=2SA;BYMONTH=10
+TZNAME:EASST
TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:EASST
-DTSTART:19460714T220000
-RDATE:19460714T220000
+TZOFFSETTO:-0500
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
+DTSTART:20000311T220000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19470331T210000
-RDATE:19470331T210000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
+DTSTART:20110312T220000
+RRULE:FREQ=YEARLY;BYDAY=2SA;BYMONTH=3
TZNAME:EAST
-DTSTART:19820313T210000
-RDATE:19820313T210000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:EAST
-DTSTART:19870411T220000
-RDATE:19870411T220000
-RDATE:19900317T220000
-RDATE:19970329T220000
-RDATE:19980314T220000
-RDATE:19990403T220000
-RDATE:20080329T220000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EASST
-DTSTART:19881001T220000
-RDATE:19881001T220000
-RDATE:19891014T220000
-RDATE:19900915T220000
-RDATE:19980926T220000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Efate.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Efate.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Efate.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,45 +1,49 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Efate
X-LIC-LOCATION:Pacific/Efate
BEGIN:STANDARD
-TZOFFSETFROM:+1200
+DTSTART:19120113T000000
+RDATE:19120113T000000
+TZNAME:VUST
+TZOFFSETFROM:+111316
TZOFFSETTO:+1100
-TZNAME:VUT
-DTSTART:19840325T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19910323T120000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19841023T000000
+RDATE:19921025T000000
+TZNAME:VUST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:VUST
-DTSTART:19850929T000000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19910928T130000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19840325T000000
+RRULE:FREQ=YEARLY;UNTIL=19910323T120000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=3
+TZNAME:VUT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:VUT
-DTSTART:19920126T000000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=SU;UNTIL=19930123T120000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+111316
-TZOFFSETTO:+1100
-TZNAME:VUT
-DTSTART:19120113T000000
-RDATE:19120113T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19850929T000000
+RRULE:FREQ=YEARLY;UNTIL=19910928T130000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=9
+TZNAME:VUST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:VUST
-DTSTART:19830925T000000
-RDATE:19830925T000000
-RDATE:19841023T000000
-RDATE:19921025T000000
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920126T000000
+RRULE:FREQ=YEARLY;UNTIL=19930123T120000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=1
+TZNAME:VUT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Enderbury.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Enderbury.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Enderbury.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Enderbury
X-LIC-LOCATION:Pacific/Enderbury
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:PHOT
TZOFFSETFROM:-112420
TZOFFSETTO:-1200
-TZNAME:PHOT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19791001T000000
+RDATE:19791001T000000
+TZNAME:PHOT
TZOFFSETFROM:-1200
TZOFFSETTO:-1100
-TZNAME:PHOT
-DTSTART:19791001T000000
-RDATE:19791001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19950101T000000
+RDATE:19950101T000000
+TZNAME:PHOT
TZOFFSETFROM:-1100
TZOFFSETTO:+1300
-TZNAME:PHOT
-DTSTART:19950101T000000
-RDATE:19950101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fakaofo.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fakaofo.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fakaofo.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Fakaofo
X-LIC-LOCATION:Pacific/Fakaofo
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:TKT
TZOFFSETFROM:-112456
TZOFFSETTO:-1000
-TZNAME:TKT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fiji.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fiji.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Fiji.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,46 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Fiji
X-LIC-LOCATION:Pacific/Fiji
+BEGIN:STANDARD
+DTSTART:19151026T000000
+RDATE:19151026T000000
+TZNAME:FJST
+TZOFFSETFROM:+115340
+TZOFFSETTO:+1200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19981101T020000
+RRULE:FREQ=YEARLY;UNTIL=19991106T140000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:FJST
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
-TZNAME:FJST
-DTSTART:19981101T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=19991106T140000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19990228T030000
+RRULE:FREQ=YEARLY;UNTIL=20000226T140000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:FJT
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:FJT
-DTSTART:19990228T030000
-RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU;UNTIL=20000226T140000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20091129T020000
+RDATE:20091129T020000
+RDATE:20101024T020000
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+115340
+DTSTART:20100328T030000
+RDATE:20100328T030000
+RDATE:20110306T030000
+TZNAME:FJT
+TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-TZNAME:FJT
-DTSTART:19151026T000000
-RDATE:19151026T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Funafuti.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Funafuti.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Funafuti.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Funafuti
X-LIC-LOCATION:Pacific/Funafuti
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:TVT
TZOFFSETFROM:+115652
TZOFFSETTO:+1200
-TZNAME:TVT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Galapagos.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Galapagos.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Galapagos.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Galapagos
X-LIC-LOCATION:Pacific/Galapagos
BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:ECT
TZOFFSETFROM:-055824
TZOFFSETTO:-0500
-TZNAME:ECT
-DTSTART:19310101T000000
-RDATE:19310101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:GALT
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:GALT
-DTSTART:19860101T000000
-RDATE:19860101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Gambier.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Gambier.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Gambier.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Gambier
X-LIC-LOCATION:Pacific/Gambier
BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:GAMT
TZOFFSETFROM:-085948
TZOFFSETTO:-0900
-TZNAME:GAMT
-DTSTART:19121001T000000
-RDATE:19121001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guadalcanal.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guadalcanal.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guadalcanal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Guadalcanal
X-LIC-LOCATION:Pacific/Guadalcanal
BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:SBT
TZOFFSETFROM:+103948
TZOFFSETTO:+1100
-TZNAME:SBT
-DTSTART:19121001T000000
-RDATE:19121001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guam.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guam.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Guam.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Guam
X-LIC-LOCATION:Pacific/Guam
BEGIN:STANDARD
-TZOFFSETFROM:-1421
-TZOFFSETTO:+0939
-TZNAME:LMT
-DTSTART:18441231T000000
-RDATE:18441231T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0939
-TZOFFSETTO:+1000
-TZNAME:GST
DTSTART:19010101T000000
RDATE:19010101T000000
+TZNAME:GST
+TZOFFSETFROM:+0939
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:ChST
DTSTART:20001223T000000
RDATE:20001223T000000
+TZNAME:ChST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Honolulu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Honolulu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Honolulu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,39 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Honolulu
X-LIC-LOCATION:Pacific/Honolulu
BEGIN:STANDARD
+DTSTART:18960113T120000
+RDATE:18960113T120000
+TZNAME:HST
TZOFFSETFROM:-103126
TZOFFSETTO:-1030
-TZNAME:HST
-DTSTART:19000101T120000
-RDATE:19000101T120000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1030
-TZOFFSETTO:-0930
-TZNAME:HDT
+BEGIN:STANDARD
DTSTART:19330430T020000
RDATE:19330430T020000
-END:DAYLIGHT
+RDATE:19420209T020000
+TZNAME:HDT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+TZNAME:HST
TZOFFSETFROM:-0930
TZOFFSETTO:-1030
-TZNAME:HST
-DTSTART:19330521T020000
-RDATE:19330521T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1030
-TZOFFSETTO:-0930
-TZNAME:HWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0930
-TZOFFSETTO:-0930
-TZNAME:HPT
-DTSTART:19450814T133000
-RDATE:19450814T133000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1030
-TZOFFSETTO:-1000
-TZNAME:HST
DTSTART:19470608T020000
RDATE:19470608T020000
+TZNAME:HST
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Johnston.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Johnston.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Johnston.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Johnston
X-LIC-LOCATION:Pacific/Johnston
BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:HST
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
-TZNAME:HST
-DTSTART:16010101T000000
-RDATE:16010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kiritimati.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kiritimati.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kiritimati.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Kiritimati
X-LIC-LOCATION:Pacific/Kiritimati
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:LINT
TZOFFSETFROM:-102920
TZOFFSETTO:-1040
-TZNAME:LINT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19791001T000000
+RDATE:19791001T000000
+TZNAME:LINT
TZOFFSETFROM:-1040
TZOFFSETTO:-1000
-TZNAME:LINT
-DTSTART:19791001T000000
-RDATE:19791001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19950101T000000
+RDATE:19950101T000000
+TZNAME:LINT
TZOFFSETFROM:-1000
TZOFFSETTO:+1400
-TZNAME:LINT
-DTSTART:19950101T000000
-RDATE:19950101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kosrae.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kosrae.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kosrae.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Kosrae
X-LIC-LOCATION:Pacific/Kosrae
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:KOST
TZOFFSETFROM:+105156
TZOFFSETTO:+1100
-TZNAME:KOST
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691001T000000
+RDATE:19691001T000000
+TZNAME:KOST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:KOST
-DTSTART:19691001T000000
-RDATE:19691001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19990101T000000
+RDATE:19990101T000000
+TZNAME:KOST
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:KOST
-DTSTART:19990101T000000
-RDATE:19990101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kwajalein.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kwajalein.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Kwajalein.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Kwajalein
X-LIC-LOCATION:Pacific/Kwajalein
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:MHT
TZOFFSETFROM:+110920
TZOFFSETTO:+1100
-TZNAME:MHT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691001T000000
+RDATE:19691001T000000
+TZNAME:KWAT
TZOFFSETFROM:+1100
TZOFFSETTO:-1200
-TZNAME:KWAT
-DTSTART:19691001T000000
-RDATE:19691001T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19930820T000000
+RDATE:19930820T000000
+TZNAME:MHT
TZOFFSETFROM:-1200
TZOFFSETTO:+1200
-TZNAME:MHT
-DTSTART:19930820T000000
-RDATE:19930820T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Majuro.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Majuro.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Majuro.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Majuro
X-LIC-LOCATION:Pacific/Majuro
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:MHT
TZOFFSETFROM:+112448
TZOFFSETTO:+1100
-TZNAME:MHT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19691001T000000
+RDATE:19691001T000000
+TZNAME:MHT
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:MHT
-DTSTART:19691001T000000
-RDATE:19691001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Marquesas.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Marquesas.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Marquesas.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Marquesas
X-LIC-LOCATION:Pacific/Marquesas
BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:MART
TZOFFSETFROM:-0918
TZOFFSETTO:-0930
-TZNAME:MART
-DTSTART:19121001T000000
-RDATE:19121001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Midway.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Midway.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Midway.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Midway
X-LIC-LOCATION:Pacific/Midway
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:NST
TZOFFSETFROM:-114928
TZOFFSETTO:-1100
-TZNAME:NST
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19560603T000000
+RDATE:19560603T000000
+TZNAME:NDT
TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:NDT
-DTSTART:19560603T000000
-RDATE:19560603T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19560902T000000
+RDATE:19560902T000000
+TZNAME:NST
TZOFFSETFROM:-1000
TZOFFSETTO:-1100
-TZNAME:NST
-DTSTART:19560902T000000
-RDATE:19560902T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19670401T000000
+RDATE:19670401T000000
+TZNAME:BST
TZOFFSETFROM:-1100
TZOFFSETTO:-1100
-TZNAME:BST
-DTSTART:19670401T000000
-RDATE:19670401T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:SST
TZOFFSETFROM:-1100
TZOFFSETTO:-1100
-TZNAME:SST
-DTSTART:19831130T000000
-RDATE:19831130T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Nauru.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Nauru.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Nauru.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Nauru
X-LIC-LOCATION:Pacific/Nauru
BEGIN:STANDARD
+DTSTART:19210115T000000
+RDATE:19210115T000000
+TZNAME:NRT
TZOFFSETFROM:+110740
TZOFFSETTO:+1130
-TZNAME:NRT
-DTSTART:19210115T000000
-RDATE:19210115T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420315T000000
+RDATE:19420315T000000
+TZNAME:JST
TZOFFSETFROM:+1130
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420315T000000
-RDATE:19420315T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19440815T000000
+RDATE:19440815T000000
+TZNAME:NRT
TZOFFSETFROM:+0900
TZOFFSETTO:+1130
-TZNAME:NRT
-DTSTART:19440815T000000
-RDATE:19440815T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19790501T000000
+RDATE:19790501T000000
+TZNAME:NRT
TZOFFSETFROM:+1130
TZOFFSETTO:+1200
-TZNAME:NRT
-DTSTART:19790501T000000
-RDATE:19790501T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Niue.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Niue.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Niue.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,29 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Niue
X-LIC-LOCATION:Pacific/Niue
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:NUT
TZOFFSETFROM:-111940
TZOFFSETTO:-1120
-TZNAME:NUT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510101T000000
+RDATE:19510101T000000
+TZNAME:NUT
TZOFFSETFROM:-1120
TZOFFSETTO:-1130
-TZNAME:NUT
-DTSTART:19510101T000000
-RDATE:19510101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19781001T000000
+RDATE:19781001T000000
+TZNAME:NUT
TZOFFSETFROM:-1130
TZOFFSETTO:-1100
-TZNAME:NUT
-DTSTART:19781001T000000
-RDATE:19781001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Norfolk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Norfolk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Norfolk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Norfolk
X-LIC-LOCATION:Pacific/Norfolk
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:NMT
TZOFFSETFROM:+111152
TZOFFSETTO:+1112
-TZNAME:NMT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19510101T000000
+RDATE:19510101T000000
+TZNAME:NFT
TZOFFSETFROM:+1112
TZOFFSETTO:+1130
-TZNAME:NFT
-DTSTART:19510101T000000
-RDATE:19510101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Noumea.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Noumea.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Noumea.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,44 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Noumea
X-LIC-LOCATION:Pacific/Noumea
+BEGIN:STANDARD
+DTSTART:19120113T000000
+RDATE:19120113T000000
+TZNAME:NCST
+TZOFFSETFROM:+110548
+TZOFFSETTO:+1100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19771204T000000
+RRULE:FREQ=YEARLY;UNTIL=19781202T130000Z;BYDAY=1SU;BYMONTH=12
+TZNAME:NCST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:NCST
-DTSTART:19771204T000000
-RRULE:FREQ=YEARLY;BYMONTH=12;BYDAY=1SU;UNTIL=19781202T130000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19780227T000000
+RRULE:FREQ=YEARLY;UNTIL=19790226T120000Z;BYMONTH=2
+TZNAME:NCT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:NCT
-DTSTART:19780227T000000
-RRULE:FREQ=YEARLY;UNTIL=19790226T120000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+110548
-TZOFFSETTO:+1100
-TZNAME:NCT
-DTSTART:19120113T000000
-RDATE:19120113T000000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19961201T020000
+RDATE:19961201T020000
+TZNAME:NCST
TZOFFSETFROM:+1100
TZOFFSETTO:+1200
-TZNAME:NCST
-DTSTART:19961201T020000
-RDATE:19961201T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19970302T030000
+RDATE:19970302T030000
+TZNAME:NCT
TZOFFSETFROM:+1200
TZOFFSETTO:+1100
-TZNAME:NCT
-DTSTART:19970302T030000
-RDATE:19970302T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pago_Pago.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pago_Pago.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pago_Pago.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Pago_Pago
X-LIC-LOCATION:Pacific/Pago_Pago
BEGIN:STANDARD
-TZOFFSETFROM:+123712
-TZOFFSETTO:-112248
-TZNAME:LMT
-DTSTART:18790705T000000
-RDATE:18790705T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-112248
-TZOFFSETTO:-1130
-TZNAME:SAMT
DTSTART:19110101T000000
RDATE:19110101T000000
+TZNAME:SAMT
+TZOFFSETFROM:-112248
+TZOFFSETTO:-1130
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1130
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19500101T000000
RDATE:19500101T000000
+TZNAME:NST
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
-END:STANDARD
-BEGIN:STANDARD
+TZNAME:BST
TZOFFSETFROM:-1100
TZOFFSETTO:-1100
-TZNAME:SST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19831130T000000
RDATE:19831130T000000
+TZNAME:SST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Palau.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Palau.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Palau.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Palau
X-LIC-LOCATION:Pacific/Palau
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:PWT
TZOFFSETFROM:+085756
TZOFFSETTO:+0900
-TZNAME:PWT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pitcairn.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pitcairn.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pitcairn.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Pitcairn
X-LIC-LOCATION:Pacific/Pitcairn
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:PNT
TZOFFSETFROM:-084020
TZOFFSETTO:-0830
-TZNAME:PNT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19980427T000000
+RDATE:19980427T000000
+TZNAME:PST
TZOFFSETFROM:-0830
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19980427T000000
-RDATE:19980427T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pohnpei.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific/Pohnpei.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pohnpei.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Pohnpei.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pohnpei
+X-LIC-LOCATION:Pacific/Pohnpei
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:PONT
+TZOFFSETFROM:+103252
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Ponape.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Ponape.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Ponape.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Ponape
X-LIC-LOCATION:Pacific/Ponape
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:PONT
TZOFFSETFROM:+103252
TZOFFSETTO:+1100
-TZNAME:PONT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Port_Moresby.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Port_Moresby.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Port_Moresby.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,22 +1,23 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Port_Moresby
X-LIC-LOCATION:Pacific/Port_Moresby
BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:PMMT
TZOFFSETFROM:+094840
TZOFFSETTO:+094832
-TZNAME:PMMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:PGT
TZOFFSETFROM:+094832
TZOFFSETTO:+1000
-TZNAME:PGT
-DTSTART:18950101T000000
-RDATE:18950101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Rarotonga.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Rarotonga.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Rarotonga.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Rarotonga
X-LIC-LOCATION:Pacific/Rarotonga
BEGIN:STANDARD
-TZOFFSETFROM:-0930
-TZOFFSETTO:-1000
+DTSTART:19010101T000000
+RDATE:19010101T000000
TZNAME:CKT
-DTSTART:19790304T000000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=1SU;UNTIL=19910303T093000Z
+TZOFFSETFROM:-103904
+TZOFFSETTO:-1030
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
+DTSTART:19781112T000000
+RDATE:19781112T000000
+TZNAME:CKHST
+TZOFFSETFROM:-1030
TZOFFSETTO:-0930
-TZNAME:CKHST
-DTSTART:19791028T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901028T100000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-103904
-TZOFFSETTO:-1030
+DTSTART:19790304T000000
+RRULE:FREQ=YEARLY;UNTIL=19910303T093000Z;BYDAY=1SU;BYMONTH=3
TZNAME:CKT
-DTSTART:19010101T000000
-RDATE:19010101T000000
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1030
+DTSTART:19791028T000000
+RRULE:FREQ=YEARLY;UNTIL=19901028T100000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CKHST
+TZOFFSETFROM:-1000
TZOFFSETTO:-0930
-TZNAME:CKHST
-DTSTART:19781112T000000
-RDATE:19781112T000000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Saipan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Saipan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Saipan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,36 +1,30 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Saipan
X-LIC-LOCATION:Pacific/Saipan
BEGIN:STANDARD
-TZOFFSETFROM:-1417
-TZOFFSETTO:+0943
-TZNAME:LMT
-DTSTART:18441231T000000
-RDATE:18441231T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0943
-TZOFFSETTO:+0900
-TZNAME:MPT
DTSTART:19010101T000000
RDATE:19010101T000000
+TZNAME:MPT
+TZOFFSETFROM:+0943
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:MPT
DTSTART:19691001T000000
RDATE:19691001T000000
+TZNAME:MPT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1000
-TZNAME:ChST
DTSTART:20001223T000000
RDATE:20001223T000000
+TZNAME:ChST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Samoa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Samoa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Samoa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Samoa
X-LIC-LOCATION:Pacific/Samoa
BEGIN:STANDARD
-TZOFFSETFROM:+123712
-TZOFFSETTO:-112248
-TZNAME:LMT
-DTSTART:18790705T000000
-RDATE:18790705T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-112248
-TZOFFSETTO:-1130
-TZNAME:SAMT
DTSTART:19110101T000000
RDATE:19110101T000000
+TZNAME:SAMT
+TZOFFSETFROM:-112248
+TZOFFSETTO:-1130
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1130
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19500101T000000
RDATE:19500101T000000
+TZNAME:NST
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
-END:STANDARD
-BEGIN:STANDARD
+TZNAME:BST
TZOFFSETFROM:-1100
TZOFFSETTO:-1100
-TZNAME:SST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19831130T000000
RDATE:19831130T000000
+TZNAME:SST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tahiti.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tahiti.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tahiti.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Tahiti
X-LIC-LOCATION:Pacific/Tahiti
BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:TAHT
TZOFFSETFROM:-095816
TZOFFSETTO:-1000
-TZNAME:TAHT
-DTSTART:19121001T000000
-RDATE:19121001T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tarawa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tarawa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tarawa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Tarawa
X-LIC-LOCATION:Pacific/Tarawa
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:GILT
TZOFFSETFROM:+113204
TZOFFSETTO:+1200
-TZNAME:GILT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tongatapu.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tongatapu.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Tongatapu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,57 +1,58 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Tongatapu
X-LIC-LOCATION:Pacific/Tongatapu
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+1300
-TZOFFSETTO:+1400
-TZNAME:TOST
-DTSTART:20001105T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU;UNTIL=20011103T130000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1400
-TZOFFSETTO:+1300
+DTSTART:19010101T000000
+RDATE:19010101T000000
TZNAME:TOT
-DTSTART:20010128T020000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=-1SU;UNTIL=20020126T120000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+121920
TZOFFSETTO:+1220
-TZNAME:TOT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19410101T000000
+RDATE:19410101T000000
+TZNAME:TOT
TZOFFSETFROM:+1220
TZOFFSETTO:+1300
-TZNAME:TOT
-DTSTART:19410101T000000
-RDATE:19410101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19990101T000000
+RDATE:19990101T000000
+TZNAME:TOST
TZOFFSETFROM:+1300
TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19991007T020000
+RDATE:19991007T020000
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000319T030000
+RDATE:20000319T030000
TZNAME:TOT
-DTSTART:19990101T000000
-RDATE:19990101T000000
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20001105T020000
+RRULE:FREQ=YEARLY;UNTIL=20011103T130000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:TOST
TZOFFSETFROM:+1300
TZOFFSETTO:+1400
-TZNAME:TOST
-DTSTART:19991007T020000
-RDATE:19991007T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20010128T020000
+RRULE:FREQ=YEARLY;UNTIL=20020126T120000Z;BYDAY=-1SU;BYMONTH=1
+TZNAME:TOT
TZOFFSETFROM:+1400
TZOFFSETTO:+1300
-TZNAME:TOT
-DTSTART:20000319T030000
-RDATE:20000319T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Truk.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Truk.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Truk.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Truk
X-LIC-LOCATION:Pacific/Truk
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:CHUT
TZOFFSETFROM:+100708
TZOFFSETTO:+1000
-TZNAME:TRUT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wake.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wake.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wake.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Wake
X-LIC-LOCATION:Pacific/Wake
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:WAKT
TZOFFSETFROM:+110628
TZOFFSETTO:+1200
-TZNAME:WAKT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wallis.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wallis.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Wallis.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Wallis
X-LIC-LOCATION:Pacific/Wallis
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:WFT
TZOFFSETFROM:+121520
TZOFFSETTO:+1200
-TZNAME:WFT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Yap.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Yap.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Pacific/Yap.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,15 +1,16 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Pacific/Yap
X-LIC-LOCATION:Pacific/Yap
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:CHUT
TZOFFSETFROM:+100708
TZOFFSETTO:+1000
-TZNAME:TRUT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Poland.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Poland.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Poland.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,177 +1,190 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Poland
X-LIC-LOCATION:Poland
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:WMT
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19150805T000000
+RDATE:19150805T000000
+TZNAME:CEST
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19170416T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3MO;UNTIL=19180415T010000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19770925T020000
+RDATE:19781001T020000
TZNAME:CET
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T010000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T000000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19591004T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19611001T000000Z
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19610528T010000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=-1SU;UNTIL=19640531T000000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19180916T030000
+RDATE:19180916T030000
+TZNAME:EET
TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19620930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19640927T000000Z
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+DTSTART:19190415T020000
+RDATE:19190415T020000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190916T030000
+RRULE:FREQ=YEARLY;UNTIL=19190916T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19220601T000000
+RDATE:19220601T000000
TZNAME:CEST
-DTSTART:19770403T010000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19800406T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19870927T000000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19400623T020000
+RDATE:19400623T020000
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19441001T000000
+RDATE:19441001T000000
TZNAME:CEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19870329T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+TZOFFSETFROM:+0200
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19880327T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19880925T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0124
-TZOFFSETTO:+0124
-TZNAME:WMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0124
+DTSTART:19591004T020000
+RRULE:FREQ=YEARLY;UNTIL=19611001T000000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19150805T000000
-RDATE:19150805T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19610528T010000
+RRULE:FREQ=YEARLY;UNTIL=19640531T000000Z;BYDAY=-1SU;BYMONTH=5
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19160430T230000
-RDATE:19160430T230000
-RDATE:19400623T020000
-RDATE:19430329T020000
-RDATE:19440403T020000
-RDATE:19450429T000000
-RDATE:19460414T000000
-RDATE:19470504T020000
-RDATE:19480418T020000
-RDATE:19490410T020000
-RDATE:19570602T010000
-RDATE:19580330T010000
-RDATE:19590531T010000
-RDATE:19600403T010000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19620930T020000
+RRULE:FREQ=YEARLY;UNTIL=19640927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19161001T010000
-RDATE:19161001T010000
-RDATE:19170917T030000
-RDATE:19220601T000000
-RDATE:19421102T030000
-RDATE:19431004T030000
-RDATE:19441004T020000
-RDATE:19451101T000000
-RDATE:19461007T030000
-RDATE:19770925T020000
-RDATE:19781001T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19180916T030000
-RDATE:19180916T030000
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19190415T020000
-RDATE:19190415T020000
+DTSTART:19770403T010000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19190916T030000
-RDATE:19190916T030000
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19870927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19870329T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
-DTSTART:19441001T000000
-RDATE:19441001T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0100
+DTSTART:19880925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
-DTSTART:19770101T000000
-RDATE:19770101T000000
-RDATE:19880101T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Portugal.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Portugal.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Portugal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,250 +1,261 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Portugal
X-LIC-LOCATION:Portugal
BEGIN:STANDARD
+DTSTART:19120101T000000
+RDATE:19120101T000000
+TZNAME:WEST
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19460406T230000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211014T230000Z;BYMONTH=10
TZNAME:WET
-DTSTART:19171015T000000
-RRULE:FREQ=YEARLY;UNTIL=19211014T230000Z
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291005T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19261003T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19291005T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19311004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19321001T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19341007T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19381001T230000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411005T230000Z;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19401006T000000
-RRULE:FREQ=YEARLY;UNTIL=19411005T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450310T230000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:WEMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
TZNAME:WEST
-DTSTART:19420314T230000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA;UNTIL=19450310T230000Z
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451027T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19421025T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19451027T230000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450825T220000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31,32;BYMONTH=8
+TZNAME:WEST
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19430829T000000
-RRULE:FREQ=YEARLY;BYMONTH=8;BYMONTHDAY=26,27,28,29,30,31;BYDAY=SU;UNTIL=19450825T220000Z
-RRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=1;BYDAY=SU;UNTIL=19450825T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450421T220000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:WEMT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19440422T230000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SA;UNTIL=19450421T220000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19470406T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19490403T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T020000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19471005T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19491002T020000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19510401T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19650404T020000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T020000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19511007T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19651003T020000Z
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
+TZNAME:CET
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19760926T010000
+RDATE:19760926T010000
TZNAME:WEST
-DTSTART:19780402T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19790401T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19790930T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19910929T010000Z
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T000000Z;BYDAY=1SU;BYMONTH=4
TZNAME:WEST
-DTSTART:19810329T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T010000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19840325T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19920329T010000Z
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19950326T010000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950924T010000Z
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19970330T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-003632
-TZOFFSETTO:-003632
-TZNAME:LMT
-DTSTART:18840101T000000
-RDATE:18840101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-003632
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19910929T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
+TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19120101T000000
-RDATE:19120101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;UNTIL=19920329T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19160617T230000
-RDATE:19160617T230000
-RDATE:19170228T230000
-RDATE:19180301T230000
-RDATE:19190228T230000
-RDATE:19200229T230000
-RDATE:19210228T230000
-RDATE:19240416T230000
-RDATE:19260417T230000
-RDATE:19270409T230000
-RDATE:19280414T230000
-RDATE:19290420T230000
-RDATE:19310418T230000
-RDATE:19320402T230000
-RDATE:19340407T230000
-RDATE:19350330T230000
-RDATE:19360418T230000
-RDATE:19370403T230000
-RDATE:19380326T230000
-RDATE:19390415T230000
-RDATE:19400224T230000
-RDATE:19410405T230000
-RDATE:19460406T230000
-RDATE:19770327T000000
-RDATE:19800330T000000
-RDATE:19830327T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19920927T020000
+RDATE:19920927T020000
+TZNAME:CET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0000
-TZNAME:WET
-DTSTART:19161101T010000
-RDATE:19161101T010000
-RDATE:19241015T000000
-RDATE:19391119T000000
-RDATE:19461006T000000
-RDATE:19760926T010000
-RDATE:19770925T010000
-RDATE:19781001T010000
+TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
-TZNAME:WEMT
-DTSTART:19420425T230000
-RDATE:19420425T230000
-RDATE:19430417T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T020000
+RDATE:19960331T020000
TZNAME:WEST
-DTSTART:19420816T000000
-RDATE:19420816T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19660403T020000
-RDATE:19660403T020000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
TZOFFSETFROM:+0100
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19920927T020000
-RDATE:19920927T020000
+TZOFFSETTO:+0000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
+DTSTART:19970330T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
+TZOFFSETFROM:+0000
TZOFFSETTO:+0100
-TZNAME:WEST
-DTSTART:19960331T020000
-RDATE:19960331T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROC.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROC.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROC.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,86 +1,87 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:ROC
X-LIC-LOCATION:ROC
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CST
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19450501T000000
+RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z;BYMONTH=5
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19450501T000000
-RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19451001T000000
+RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19451001T000000
-RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19520301T000000
+RDATE:19520301T000000
+RDATE:19790630T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19521101T000000
+RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19521101T000000
-RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19530401T000000
+RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19530401T000000
-RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19551001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19551001T000000
-RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19600601T000000
+RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z;BYMONTH=6
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19600601T000000
-RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19740401T000000
+RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19740401T000000
-RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19741001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19741001T000000
-RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0806
-TZOFFSETTO:+0800
+DTSTART:19790930T000000
+RDATE:19790930T000000
TZNAME:CST
-DTSTART:18960101T000000
-RDATE:18960101T000000
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-TZNAME:CDT
-DTSTART:19520301T000000
-RDATE:19520301T000000
-RDATE:19800630T000000
-END:DAYLIGHT
-BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-TZNAME:CST
-DTSTART:19800930T000000
-RDATE:19800930T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROK.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROK.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/ROK.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,67 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:ROK
X-LIC-LOCATION:ROK
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-TZNAME:KDT
-DTSTART:19870510T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SU;UNTIL=19880507T150000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+1000
-TZOFFSETTO:+0900
+DTSTART:18900101T000000
+RDATE:18900101T000000
TZNAME:KST
-DTSTART:19871011T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU;UNTIL=19881008T140000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:+082752
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:18900101T000000
-RDATE:18900101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0830
-TZOFFSETTO:+0900
-TZNAME:KST
DTSTART:19041201T000000
RDATE:19041201T000000
RDATE:19320101T000000
RDATE:19681001T000000
+TZNAME:KST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
END:STANDARD
BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KST
TZOFFSETFROM:+0900
TZOFFSETTO:+0830
-TZNAME:KST
-DTSTART:19280101T000000
-RDATE:19280101T000000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0800
-TZNAME:KST
DTSTART:19540321T000000
RDATE:19540321T000000
RDATE:19600913T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+TZNAME:KDT
TZOFFSETFROM:+0800
TZOFFSETTO:+0900
-TZNAME:KDT
-DTSTART:19600515T000000
-RDATE:19600515T000000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19610810T000000
+RDATE:19610810T000000
+TZNAME:KST
TZOFFSETFROM:+0800
TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870510T000000
+RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:KDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871011T000000
+RRULE:FREQ=YEARLY;UNTIL=19881008T140000Z;BYDAY=2SU;BYMONTH=10
TZNAME:KST
-DTSTART:19610810T000000
-RDATE:19610810T000000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Singapore.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Singapore.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Singapore.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,71 +1,72 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Singapore
X-LIC-LOCATION:Singapore
BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:SMT
TZOFFSETFROM:+065525
TZOFFSETTO:+065525
-TZNAME:SMT
-DTSTART:19010101T000000
-RDATE:19010101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19050601T000000
+RDATE:19050601T000000
+TZNAME:MALT
TZOFFSETFROM:+065525
TZOFFSETTO:+0700
-TZNAME:MALT
-DTSTART:19050601T000000
-RDATE:19050601T000000
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:MALST
TZOFFSETFROM:+0700
TZOFFSETTO:+0720
-TZNAME:MALST
-DTSTART:19330101T000000
-RDATE:19330101T000000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0720
-TZNAME:MALT
-DTSTART:19360101T000000
-RDATE:19360101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19410901T000000
+RDATE:19410901T000000
+TZNAME:MALT
TZOFFSETFROM:+0720
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19410901T000000
-RDATE:19410901T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
TZOFFSETFROM:+0730
TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19420216T000000
-RDATE:19420216T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:MALT
TZOFFSETFROM:+0900
TZOFFSETTO:+0730
-TZNAME:MALT
-DTSTART:19450912T000000
-RDATE:19450912T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19650809T000000
+RDATE:19650809T000000
+TZNAME:SGT
TZOFFSETFROM:+0730
TZOFFSETTO:+0730
-TZNAME:SGT
-DTSTART:19650809T000000
-RDATE:19650809T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:SGT
TZOFFSETFROM:+0730
TZOFFSETTO:+0800
-TZNAME:SGT
-DTSTART:19820101T000000
-RDATE:19820101T000000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Turkey.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Turkey.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Turkey.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,139 +1,25 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Turkey
X-LIC-LOCATION:Turkey
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19241001T000000
-RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19470420T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=16,17,18,19,20,21,22;BYDAY=SU;UNTIL=19480417T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19471005T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19501007T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19700503T000000
-RRULE:FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19720506T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19701004T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU;UNTIL=19721007T210000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19751026T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19761030T210000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19770403T000000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19780401T220000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:TRT
-DTSTART:19791015T000000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=11,12,13,14,15,16,17;BYDAY=MO;UNTIL=19821010T200000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19810329T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19820328T000000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19860330T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900325T000000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19860928T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900930T000000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:19910331T010000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=20060325T230000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19910929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19961027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061028T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
-DTSTART:20070325T030000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:20071028T040000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
TZOFFSETFROM:+015552
TZOFFSETTO:+015656
-TZNAME:IMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19101001T000000
+RDATE:19101001T000000
+TZNAME:EEST
TZOFFSETFROM:+015656
TZOFFSETTO:+0200
-TZNAME:EET
-DTSTART:19101001T000000
-RDATE:19101001T000000
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:EEST
DTSTART:19160501T000000
RDATE:19160501T000000
RDATE:19200328T000000
@@ -155,11 +41,11 @@
RDATE:19740331T020000
RDATE:19750330T000000
RDATE:19760601T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19161001T000000
RDATE:19161001T000000
RDATE:19201025T000000
@@ -177,43 +63,174 @@
RDATE:19741103T050000
RDATE:19771016T000000
RDATE:19850928T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19470420T000000
+RRULE:FREQ=YEARLY;UNTIL=19480417T220000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T000000
+RRULE:FREQ=YEARLY;UNTIL=19501007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:TRST
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700503T000000
+RRULE:FREQ=YEARLY;UNTIL=19720506T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19701004T000000
+RRULE:FREQ=YEARLY;UNTIL=19721007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19761030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19780401T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19781015T000000
RDATE:19781015T000000
-RDATE:19800406T030000
-RDATE:19830731T000000
-END:DAYLIGHT
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19790401T030000
+RDATE:19790401T030000
+TZNAME:TRST
TZOFFSETFROM:+0400
TZOFFSETTO:+0400
-TZNAME:TRST
-DTSTART:19790401T030000
-RDATE:19790401T030000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19791015T000000
+RRULE:FREQ=YEARLY;UNTIL=19821010T200000Z;BYDAY=-3MO;BYMONTH=10
+TZNAME:TRT
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:TRT
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800406T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19830731T000000
+RDATE:19830731T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831002T000000
RDATE:19831002T000000
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19850420T000000
+RDATE:19850420T000000
+TZNAME:EEST
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EEST
-DTSTART:19850420T000000
-RDATE:19850420T000000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T010000
+RRULE:FREQ=YEARLY;UNTIL=20060325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061028T230000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
DTSTART:20070101T000000
RDATE:20070101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UCT.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/UCT.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UCT.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UCT.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:UCT
+X-LIC-LOCATION:UCT
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UCT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Alaska.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Alaska.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Alaska.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,137 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Alaska
X-LIC-LOCATION:US/Alaska
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:AHDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T120000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:AHST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T110000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:AHDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T120000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T110000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T100000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T110000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0900
-TZOFFSETTO:-0800
-TZNAME:AKDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0900
-TZNAME:AKST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+140024
-TZOFFSETTO:-095936
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19000820T120000
+RDATE:19000820T120000
+TZNAME:CAT
TZOFFSETFROM:-095936
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19000820T120000
-RDATE:19000820T120000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:CAT/CAWT
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19420101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CAT/CAWT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
-TZNAME:CAWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+TZNAME:CAT/CAPT
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
-TZNAME:CAPT
-DTSTART:19450814T140000
-RDATE:19450814T140000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CAT/CAPT
TZOFFSETFROM:-0900
TZOFFSETTO:-1000
-TZNAME:CAT
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CAT
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
-TZNAME:AHST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
TZOFFSETFROM:-1000
TZOFFSETTO:-0900
-TZNAME:AHDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T110000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AHST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19831030T020000
+RDATE:19831030T020000
+TZNAME:YST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
-TZNAME:YST
-DTSTART:19831030T020000
-RDATE:19831030T020000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
TZOFFSETFROM:-0900
TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:AKST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Aleutian.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Aleutian.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Aleutian.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,137 +1,131 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Aleutian
X-LIC-LOCATION:US/Aleutian
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T130000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:BST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19821031T120000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:BDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19830424T130000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19840429T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T120000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:19841028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T110000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T120000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-0900
-TZNAME:HADT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0900
-TZOFFSETTO:-1000
-TZNAME:HAST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+121321
-TZOFFSETTO:-114638
-TZNAME:LMT
-DTSTART:18671018T000000
-RDATE:18671018T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-114638
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19000820T120000
RDATE:19000820T120000
+TZNAME:NST
+TZOFFSETFROM:-114638
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1000
-TZNAME:NWT
DTSTART:19420209T020000
RDATE:19420209T020000
+TZNAME:NWT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1000
-TZNAME:NPT
DTSTART:19450814T130000
RDATE:19450814T130000
+TZNAME:NPT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1000
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19450930T020000
RDATE:19450930T020000
+TZNAME:NST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
RDATE:19690101T000000
+TZNAME:BST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:BDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T120000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:BST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19740106T020000
RDATE:19750223T020000
+TZNAME:BDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-1000
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T130000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:BDT
+TZOFFSETFROM:-1100
TZOFFSETTO:-1000
-TZNAME:AHST
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19831030T020000
RDATE:19831030T020000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:HAST
TZOFFSETFROM:-1000
TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T110000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:HAST
-DTSTART:19831130T000000
-RDATE:19831130T000000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T120000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:HADT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:HAST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Arizona.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Arizona.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Arizona.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,61 +1,68 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Arizona
X-LIC-LOCATION:US/Arizona
+BEGIN:STANDARD
+DTSTART:18831118T113142
+RDATE:18831118T113142
+TZNAME:MST
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T080000Z
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-072818
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:18831118T113142
-RDATE:18831118T113142
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-RDATE:19440401T000100
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-TZNAME:MST
DTSTART:19440101T000100
RDATE:19440101T000100
RDATE:19441001T000100
RDATE:19671029T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:STANDARD
+DTSTART:19440401T000100
+RDATE:19440401T000100
+TZNAME:MST
TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19670101T000000
RDATE:19670101T000000
RDATE:19680321T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19670430T020000
-RDATE:19670430T020000
END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Central.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Central.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Central.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,155 +1,177 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Central
X-LIC-LOCATION:US/Central
+BEGIN:STANDARD
+DTSTART:18831118T120924
+RDATE:18831118T120924
+TZNAME:CST
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19211030T070000Z
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200613T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19220430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19350428T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19220924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19350929T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19220430T020000
+RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19370425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19410427T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19220924T020000
+RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360301T020000
+RDATE:19360301T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19361115T020000
+RDATE:19361115T020000
+RDATE:19450930T020000
TZNAME:CST
-DTSTART:19370926T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19410928T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19370425T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19370926T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-055036
-TZOFFSETTO:-0600
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:18831118T120924
-RDATE:18831118T120924
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
+TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19200613T020000
-RDATE:19200613T020000
-RDATE:19210327T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19360301T020000
-RDATE:19360301T020000
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19361115T020000
-RDATE:19361115T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/East-Indiana.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/East-Indiana.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/East-Indiana.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,141 +1,142 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/East-Indiana
X-LIC-LOCATION:US/East-Indiana
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19540425T080000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:CST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
-END:STANDARD
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19690427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19700426T070000Z
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19691026T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19701025T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-054438
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:18831118T121522
-RDATE:18831118T121522
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19410622T020000
-RDATE:19410622T020000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
DTSTART:19410928T020000
RDATE:19410928T020000
RDATE:19450930T020000
RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
END:DAYLIGHT
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19550424T020000
RDATE:19550424T020000
RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19690101T000000
RDATE:19690101T000000
RDATE:19710101T000000
RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
DTSTART:20060402T020000
RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZNAME:EST
-DTSTART:20061029T020000
-RDATE:20061029T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Eastern.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Eastern.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Eastern.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,131 +1,148 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Eastern
X-LIC-LOCATION:US/Eastern
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:EST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19210424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19410427T070000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19410928T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T060000Z
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-045602
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18831118T120358
-RDATE:18831118T120358
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Hawaii.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Hawaii.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Hawaii.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,51 +1,39 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Hawaii
X-LIC-LOCATION:US/Hawaii
BEGIN:STANDARD
+DTSTART:18960113T120000
+RDATE:18960113T120000
+TZNAME:HST
TZOFFSETFROM:-103126
TZOFFSETTO:-1030
-TZNAME:HST
-DTSTART:19000101T120000
-RDATE:19000101T120000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1030
-TZOFFSETTO:-0930
-TZNAME:HDT
+BEGIN:STANDARD
DTSTART:19330430T020000
RDATE:19330430T020000
-END:DAYLIGHT
+RDATE:19420209T020000
+TZNAME:HDT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+END:STANDARD
BEGIN:STANDARD
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+TZNAME:HST
TZOFFSETFROM:-0930
TZOFFSETTO:-1030
-TZNAME:HST
-DTSTART:19330521T020000
-RDATE:19330521T020000
-RDATE:19450930T020000
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-1030
-TZOFFSETTO:-0930
-TZNAME:HWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0930
-TZOFFSETTO:-0930
-TZNAME:HPT
-DTSTART:19450814T133000
-RDATE:19450814T133000
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-1030
-TZOFFSETTO:-1000
-TZNAME:HST
DTSTART:19470608T020000
RDATE:19470608T020000
+TZNAME:HST
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Indiana-Starke.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Indiana-Starke.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Indiana-Starke.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,165 +1,166 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Indiana-Starke
X-LIC-LOCATION:US/Indiana-Starke
+BEGIN:STANDARD
+DTSTART:18831118T121330
+RDATE:18831118T121330
+TZNAME:CST
+TZOFFSETFROM:-054630
+TZOFFSETTO:-0600
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19470427T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19610430T080000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470101T000000
+RDATE:19470101T000000
TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19610430T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19470928T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T070000Z
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
END:STANDARD
BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19561028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19561028T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19570929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19580928T070000Z
END:STANDARD
BEGIN:STANDARD
+DTSTART:19591025T020000
+RRULE:FREQ=YEARLY;UNTIL=19611029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19591025T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19611029T070000Z
END:STANDARD
+BEGIN:STANDARD
+DTSTART:19620429T020000
+RDATE:19620429T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19670430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T080000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=19901028T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19671029T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19901028T070000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=19910407T080000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19910407T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19911027T020000
+RDATE:19911027T020000
+TZNAME:EST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-054630
-TZOFFSETTO:-0600
+DTSTART:20060402T020000
+RDATE:20060402T020000
TZNAME:CST
-DTSTART:18831118T121330
-RDATE:18831118T121330
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:CWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
-TZNAME:CPT
-DTSTART:19450814T180000
-RDATE:19450814T180000
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19631027T020000
-RDATE:20061029T020000
END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19470101T000000
-RDATE:19470101T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19620429T020000
-RDATE:19620429T020000
-END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19911027T020000
-RDATE:19911027T020000
+TZOFFSETTO:-0600
END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:CDT
-DTSTART:20060402T020000
-RDATE:20060402T020000
-END:DAYLIGHT
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Michigan.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Michigan.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Michigan.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,101 +1,115 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Michigan
X-LIC-LOCATION:US/Michigan
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19731028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:19050101T000000
+RDATE:19050101T000000
+TZNAME:CST
TZOFFSETFROM:-053211
TZOFFSETTO:-0600
-TZNAME:CST
-DTSTART:19050101T000000
-RDATE:19050101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19150515T020000
+RDATE:19150515T020000
+TZNAME:EST
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19150515T020000
-RDATE:19150515T020000
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19420101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19730101T000000
RDATE:19750101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
TZOFFSETFROM:-0400
TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
-TZNAME:EST
DTSTART:19450930T020000
RDATE:19450930T020000
RDATE:19480926T020000
RDATE:19671029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
DTSTART:19480425T020000
RDATE:19480425T020000
RDATE:19670614T020000
RDATE:19730429T020000
RDATE:19740106T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19731028T020000
+RRULE:FREQ=YEARLY;UNTIL=19741027T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750427T020000
RDATE:19750427T020000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Mountain.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Mountain.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Mountain.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +1,134 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Mountain
X-LIC-LOCATION:US/Mountain
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19210327T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
TZNAME:MST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T080000Z
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19650425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T090000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19651031T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T080000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T090000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:-065956
-TZOFFSETTO:-0700
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:MST
-DTSTART:18831118T120004
-RDATE:18831118T120004
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
-BEGIN:STANDARD
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
-TZNAME:MST
-DTSTART:19210522T020000
-RDATE:19210522T020000
-RDATE:19450930T020000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0600
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
TZOFFSETTO:-0600
-TZNAME:MPT
-DTSTART:19450814T170000
-RDATE:19450814T170000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:MDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Pacific.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Pacific.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Pacific.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,117 +1,132 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Pacific
X-LIC-LOCATION:US/Pacific
+BEGIN:STANDARD
+DTSTART:18831118T120702
+RDATE:18831118T120702
+TZNAME:PST
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19190330T100000Z
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19191026T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19500430T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T100000Z
END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19500924T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19610924T090000Z
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-0700
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19621028T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T090000Z
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19480314T020000
+RDATE:19480314T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T100000Z
END:DAYLIGHT
BEGIN:DAYLIGHT
-TZOFFSETFROM:-0800
-TZOFFSETTO:-0700
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T100000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:PDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T100000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-075258
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:18831118T120702
-RDATE:18831118T120702
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-TZNAME:PWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0700
-TZNAME:PPT
-DTSTART:19450814T160000
-RDATE:19450814T160000
-END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19450930T020000
-RDATE:19450930T020000
-RDATE:19490101T020000
END:STANDARD
-BEGIN:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
-TZOFFSETTO:-0800
-TZNAME:PST
-DTSTART:19460101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
-END:STANDARD
+TZOFFSETTO:-0700
+END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZNAME:PDT
-DTSTART:19480314T020000
-RDATE:19480314T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Samoa.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Samoa.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/US/Samoa.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,43 +1,37 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US/Samoa
X-LIC-LOCATION:US/Samoa
BEGIN:STANDARD
-TZOFFSETFROM:+123712
-TZOFFSETTO:-112248
-TZNAME:LMT
-DTSTART:18790705T000000
-RDATE:18790705T000000
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:-112248
-TZOFFSETTO:-1130
-TZNAME:SAMT
DTSTART:19110101T000000
RDATE:19110101T000000
+TZNAME:SAMT
+TZOFFSETFROM:-112248
+TZOFFSETTO:-1130
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1130
-TZOFFSETTO:-1100
-TZNAME:NST
DTSTART:19500101T000000
RDATE:19500101T000000
+TZNAME:NST
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:-1100
-TZOFFSETTO:-1100
-TZNAME:BST
DTSTART:19670401T000000
RDATE:19670401T000000
-END:STANDARD
-BEGIN:STANDARD
+TZNAME:BST
TZOFFSETFROM:-1100
TZOFFSETTO:-1100
-TZNAME:SST
+END:STANDARD
+BEGIN:STANDARD
DTSTART:19831130T000000
RDATE:19831130T000000
+TZNAME:SST
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UTC.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UTC.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/UTC.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:UTC
+X-LIC-LOCATION:UTC
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Universal.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Universal.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Universal.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Universal.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Universal
+X-LIC-LOCATION:Universal
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/W-SU.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/W-SU.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/W-SU.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,167 +1,168 @@
BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:W-SU
X-LIC-LOCATION:W-SU
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19810401T000000
-RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z
-END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19811001T000000
-RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19840930T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19900929T230000Z
-END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19850331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19900324T230000Z
-END:DAYLIGHT
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19930328T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19930926T030000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19950923T230000Z
-END:STANDARD
-BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
-DTSTART:19961027T030000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
TZOFFSETFROM:+023020
TZOFFSETTO:+0230
-TZNAME:MMT
-DTSTART:18800101T000000
-RDATE:18800101T000000
END:STANDARD
BEGIN:STANDARD
+DTSTART:19160703T000000
+RDATE:19160703T000000
+TZNAME:S
TZOFFSETFROM:+0230
TZOFFSETTO:+023048
-TZNAME:MMT
-DTSTART:19160703T000000
-RDATE:19160703T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19170701T230000
+RDATE:19170701T230000
+TZNAME:MST
TZOFFSETFROM:+023048
TZOFFSETTO:+033048
-TZNAME:MST
-DTSTART:19170701T230000
-RDATE:19170701T230000
END:DAYLIGHT
BEGIN:STANDARD
+DTSTART:19171228T000000
+RDATE:19171228T000000
+TZNAME:MMT
TZOFFSETFROM:+033048
TZOFFSETTO:+023048
-TZNAME:MMT
-DTSTART:19171228T000000
-RDATE:19171228T000000
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19180531T220000
+RDATE:19180531T220000
+TZNAME:MDST
TZOFFSETFROM:+023048
TZOFFSETTO:+043048
-TZNAME:MDST
-DTSTART:19180531T220000
-RDATE:19180531T220000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19180916T010000
+RDATE:19180916T010000
+TZNAME:MST
TZOFFSETFROM:+043048
TZOFFSETTO:+033048
-TZNAME:MST
-DTSTART:19180916T010000
-RDATE:19180916T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19190531T230000
+RDATE:19190531T230000
+TZNAME:MDST
TZOFFSETFROM:+033048
TZOFFSETTO:+043048
-TZNAME:MDST
-DTSTART:19190531T230000
-RDATE:19190531T230000
END:DAYLIGHT
-BEGIN:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+TZNAME:MSK/MSD
TZOFFSETFROM:+043048
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19190701T020000
-RDATE:19190701T020000
-END:DAYLIGHT
+END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0300
-TZNAME:MSK
DTSTART:19190816T000000
RDATE:19190816T000000
RDATE:19211001T000000
RDATE:19920926T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-TZNAME:MSD
DTSTART:19210214T230000
RDATE:19210214T230000
RDATE:19920328T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19210320T230000
+RDATE:19210320T230000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0400
TZOFFSETTO:+0500
-TZNAME:MSD
-DTSTART:19210320T230000
-RDATE:19210320T230000
END:DAYLIGHT
BEGIN:DAYLIGHT
+DTSTART:19210901T000000
+RDATE:19210901T000000
+TZNAME:MSK/MSD
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-TZNAME:MSD
-DTSTART:19210901T000000
-RDATE:19210901T000000
END:DAYLIGHT
BEGIN:STANDARD
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-TZNAME:EET
DTSTART:19221001T000000
RDATE:19221001T000000
RDATE:19910929T030000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
END:STANDARD
BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-TZNAME:MSK
DTSTART:19300621T000000
RDATE:19300621T000000
RDATE:19920119T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
END:STANDARD
BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-TZNAME:EEST
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
DTSTART:19910331T020000
RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
END:VTIMEZONE
END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/WET.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/WET.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/WET.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/WET.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:WET
+X-LIC-LOCATION:WET
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T010000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770925T020000
+RDATE:19770925T020000
+RDATE:19781001T020000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Zulu.ics (from rev 7192, CalendarServer/trunk/twistedcaldav/zoneinfo/Zulu.ics)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Zulu.ics (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/Zulu.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Zulu
+X-LIC-LOCATION:Zulu
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:UTC
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/version.txt
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/version.txt 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/twistedcaldav/zoneinfo/version.txt 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1 +1 @@
-Olson data source: tzdata2008i
+Olson data source: tzdata2011b
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/asyncsqlpool.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/asyncsqlpool.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/asyncsqlpool.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,650 +0,0 @@
-# -*- test-case-name: txdav.caldav.datastore -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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.
-##
-
-"""
-Asynchronous multi-process connection pool.
-"""
-
-import sys
-
-from cStringIO import StringIO
-from cPickle import dumps, loads
-from itertools import count
-
-from zope.interface import implements
-
-from twisted.internet.defer import inlineCallbacks
-from twisted.internet.defer import returnValue
-from txdav.idav import IAsyncTransaction
-from twisted.internet.defer import Deferred
-from twisted.protocols.amp import Boolean
-from twisted.python.failure import Failure
-from twisted.protocols.amp import Argument, String, Command, AMP, Integer
-from twisted.internet import reactor as _reactor
-from twisted.application.service import Service
-from txdav.base.datastore.threadutils import ThreadHolder
-from txdav.idav import AlreadyFinishedError
-from twisted.python import log
-from twisted.internet.defer import maybeDeferred
-from twisted.python.components import proxyForInterface
-
-
-class BaseSqlTxn(object):
- """
- L{IAsyncTransaction} implementation based on a L{ThreadHolder} in the
- current process.
- """
- implements(IAsyncTransaction)
-
- def __init__(self, connectionFactory, reactor=_reactor):
- """
- @param connectionFactory: A 0-argument callable which returns a DB-API
- 2.0 connection.
- """
- self._completed = False
- self._holder = ThreadHolder(reactor)
- self._holder.start()
- def initCursor():
- # support threadlevel=1; we can't necessarily cursor() in a
- # different thread than we do transactions in.
-
- # TODO: Re-try connect when it fails. Specify a timeout. That
- # should happen in this layer because we need to be able to stop
- # the reconnect attempt if it's hanging.
- self._connection = connectionFactory()
- self._cursor = self._connection.cursor()
-
- # Note: no locking necessary here; since this gets submitted first, all
- # subsequent submitted work-units will be in line behind it and the
- # cursor will already have been initialized.
- self._holder.submit(initCursor)
-
-
- def _reallyExecSQL(self, sql, args=None, raiseOnZeroRowCount=None):
- if args is None:
- args = []
- self._cursor.execute(sql, args)
- if raiseOnZeroRowCount is not None and self._cursor.rowcount == 0:
- raise raiseOnZeroRowCount()
- if self._cursor.description:
- return self._cursor.fetchall()
- else:
- return None
-
-
- noisy = False
-
- def execSQL(self, *args, **kw):
- result = self._holder.submit(
- lambda : self._reallyExecSQL(*args, **kw)
- )
- if self.noisy:
- def reportResult(results):
- sys.stdout.write("\n".join([
- "",
- "SQL: %r %r" % (args, kw),
- "Results: %r" % (results,),
- "",
- ]))
- return results
- result.addBoth(reportResult)
- return result
-
-
- def commit(self):
- if not self._completed:
- self._completed = True
- def reallyCommit():
- self._connection.commit()
- result = self._holder.submit(reallyCommit)
- return result
- else:
- raise AlreadyFinishedError()
-
-
- def abort(self):
- if not self._completed:
- self._completed = True
- def reallyAbort():
- self._connection.rollback()
- result = self._holder.submit(reallyAbort)
- return result
- else:
- raise AlreadyFinishedError()
-
-
- def __del__(self):
- if not self._completed:
- print 'BaseSqlTxn.__del__: OK'
- self.abort()
-
-
- def reset(self):
- """
- Call this when placing this transaction back into the pool.
-
- @raise RuntimeError: if the transaction has not been committed or
- aborted.
- """
- if not self._completed:
- raise RuntimeError("Attempt to re-set active transaction.")
- self._completed = False
-
-
- def stop(self):
- """
- Release the thread and database connection associated with this
- transaction.
- """
- self._completed = True
- self._stopped = True
- holder = self._holder
- self._holder = None
- holder.submit(self._connection.close)
- return holder.stop()
-
-
-
-class SpooledTxn(object):
- """
- A L{SpooledTxn} is an implementation of L{IAsyncTransaction} which cannot
- yet actually execute anything, so it spools SQL reqeusts for later
- execution. When a L{BaseSqlTxn} becomes available later, it can be
- unspooled onto that.
- """
-
- implements(IAsyncTransaction)
-
- def __init__(self):
- self._spool = []
-
-
- def _enspool(self, cmd, a=(), kw={}):
- d = Deferred()
- self._spool.append((d, cmd, a, kw))
- return d
-
-
- def _iterDestruct(self):
- """
- Iterate the spool list destructively, while popping items from the
- beginning. This allows code which executes more SQL in the callback of
- a Deferred to not interfere with the originally submitted order of
- commands.
- """
- while self._spool:
- yield self._spool.pop(0)
-
-
- def _unspool(self, other):
- """
- Unspool this transaction onto another transaction.
-
- @param other: another provider of L{IAsyncTransaction} which will
- actually execute the SQL statements we have been buffering.
- """
- for (d, cmd, a, kw) in self._iterDestruct():
- self._relayCommand(other, d, cmd, a, kw)
-
-
- def _relayCommand(self, other, d, cmd, a, kw):
- """
- Relay a single command to another transaction.
- """
- maybeDeferred(getattr(other, cmd), *a, **kw).chainDeferred(d)
-
-
- def execSQL(self, *a, **kw):
- return self._enspool('execSQL', a, kw)
-
-
- def commit(self):
- return self._enspool('commit')
-
-
- def abort(self):
- return self._enspool('abort')
-
-
-
-class PooledSqlTxn(proxyForInterface(iface=IAsyncTransaction,
- originalAttribute='_baseTxn')):
- """
- This is a temporary throw-away wrapper for the longer-lived BaseSqlTxn, so
- that if a badly-behaved API client accidentally hangs on to one of these
- and, for example C{.abort()}s it multiple times once another client is
- using that connection, it will get some harmless tracebacks.
- """
-
- def __init__(self, pool, baseTxn):
- self._pool = pool
- self._baseTxn = baseTxn
- self._complete = False
-
-
- def execSQL(self, *a, **kw):
- self._checkComplete()
- return super(PooledSqlTxn, self).execSQL(*a, **kw)
-
-
- def commit(self):
- self._markComplete()
- return self._repoolAfter(super(PooledSqlTxn, self).commit())
-
-
- def abort(self):
- self._markComplete()
- return self._repoolAfter(super(PooledSqlTxn, self).abort())
-
-
- def _checkComplete(self):
- """
- If the transaction is complete, raise L{AlreadyFinishedError}
- """
- if self._complete:
- raise AlreadyFinishedError()
-
-
- def _markComplete(self):
- """
- Mark the transaction as complete, raising AlreadyFinishedError.
- """
- self._checkComplete()
- self._complete = True
-
-
- def _repoolAfter(self, d):
- def repool(result):
- self._pool.reclaim(self)
- return result
- return d.addCallback(repool)
-
-
-
-class ConnectionPool(Service, object):
- """
- This is a central service that has a threadpool and executes SQL statements
- asynchronously, in a pool.
-
- @ivar connectionFactory: a 0-or-1-argument callable that returns a DB-API
- connection. The optional argument can be used as a label for
- diagnostic purposes.
-
- @ivar maxConnections: The connection pool will not attempt to make more
- than this many concurrent connections to the database.
-
- @type maxConnections: C{int}
- """
-
- reactor = _reactor
-
- def __init__(self, connectionFactory, maxConnections=10):
- super(ConnectionPool, self).__init__()
- self.free = []
- self.busy = []
- self.waiting = []
- self.connectionFactory = connectionFactory
- self.maxConnections = maxConnections
-
-
- def startService(self):
- """
- No startup necessary.
- """
-
-
- @inlineCallbacks
- def stopService(self):
- """
- Forcibly abort any outstanding transactions.
- """
- for busy in self.busy[:]:
- try:
- yield busy.abort()
- except:
- log.err()
- # all transactions should now be in the free list, since 'abort()' will
- # have put them there.
- for free in self.free:
- yield free.stop()
-
-
- def connection(self, label="<unlabeled>"):
- """
- Find a transaction; either retrieve a free one from the list or
- allocate a new one if no free ones are available.
-
- @return: an L{IAsyncTransaction}
- """
-
- overload = False
- if self.free:
- basetxn = self.free.pop(0)
- elif len(self.busy) < self.maxConnections:
- basetxn = BaseSqlTxn(
- connectionFactory=self.connectionFactory,
- reactor=self.reactor
- )
- else:
- basetxn = SpooledTxn()
- overload = True
- txn = PooledSqlTxn(self, basetxn)
- if overload:
- self.waiting.append(txn)
- else:
- self.busy.append(txn)
- return txn
-
-
- def reclaim(self, txn):
- """
- Shuck the L{PooledSqlTxn} wrapper off, and recycle the underlying
- BaseSqlTxn into the free list.
- """
- baseTxn = txn._baseTxn
- baseTxn.reset()
- self.busy.remove(txn)
- if self.waiting:
- waiting = self.waiting.pop(0)
- waiting._baseTxn._unspool(baseTxn)
- # Note: although commit() may already have been called, we don't
- # have to handle it specially here. It only unspools after the
- # deferred returned by commit() has actually been called, and since
- # that occurs in a callFromThread, that won't happen until the next
- # iteration of the mainloop, when the _baseTxn is safely correct.
- waiting._baseTxn = baseTxn
- self.busy.append(waiting)
- else:
- self.free.append(baseTxn)
-
-
-
-def txnarg():
- return [('transactionID', Integer())]
-
-
-CHUNK_MAX = 0xffff
-
-class BigArgument(Argument):
- """
- An argument whose payload can be larger than L{CHUNK_MAX}, by splitting
- across multiple AMP keys.
- """
- def fromBox(self, name, strings, objects, proto):
- value = StringIO()
- for counter in count():
- chunk = strings.get("%s.%d" % (name, counter))
- if chunk is None:
- break
- value.write(chunk)
- objects[name] = self.fromString(value.getvalue())
-
-
- def toBox(self, name, strings, objects, proto):
- value = StringIO(self.toString(objects[name]))
- for counter in count():
- nextChunk = value.read(CHUNK_MAX)
- if not nextChunk:
- break
- strings["%s.%d" % (name, counter)] = nextChunk
-
-
-
-class Pickle(BigArgument):
- """
- A pickle sent over AMP. This is to serialize the 'args' argument to
- C{execSQL}, which is the dynamically-typed 'args' list argument to a DB-API
- C{execute} function, as well as its dynamically-typed result ('rows').
-
- This should be cleaned up into a nicer structure, but this is not a network
- protocol, so we can be a little relaxed about security.
-
- This is a L{BigArgument} rather than a regular L{Argument} because
- individual arguments and query results need to contain entire vCard or
- iCalendar documents, which can easily be greater than 64k.
- """
-
- def toString(self, inObject):
- return dumps(inObject)
-
- def fromString(self, inString):
- return loads(inString)
-
-
-
-
-class StartTxn(Command):
- """
- Start a transaction, identified with an ID generated by the client.
- """
- arguments = txnarg()
-
-
-
-class ExecSQL(Command):
- """
- Execute an SQL statement.
- """
- arguments = [('sql', String()),
- ('queryID', String()),
- ('args', Pickle())] + txnarg()
-
-
-
-class Row(Command):
- """
- A row has been returned. Sent from server to client in response to
- L{ExecSQL}.
- """
-
- arguments = [('queryID', String()),
- ('row', Pickle())]
-
-
-
-class QueryComplete(Command):
- """
- A query issued with ExecSQL is complete.
- """
-
- arguments = [('queryID', String()),
- ('norows', Boolean())]
-
-
-
-class Commit(Command):
- arguments = txnarg()
-
-
-
-class Abort(Command):
- arguments = txnarg()
-
-
-
-class _NoRows(Exception):
- """
- Placeholder exception to report zero rows.
- """
-
-
-class ConnectionPoolConnection(AMP):
- """
- A L{ConnectionPoolConnection} is a single connection to a
- L{ConnectionPool}.
- """
-
- def __init__(self, pool):
- """
- Initialize a mapping of transaction IDs to transaction objects.
- """
- super(ConnectionPoolConnection, self).__init__()
- self.pool = pool
- self._txns = {}
-
-
- @StartTxn.responder
- def start(self, transactionID):
- self._txns[transactionID] = self.pool.connection()
- return {}
-
-
- @ExecSQL.responder
- @inlineCallbacks
- def receivedSQL(self, transactionID, queryID, sql, args):
- try:
- rows = yield self._txns[transactionID].execSQL(sql, args, _NoRows)
- except _NoRows:
- norows = True
- else:
- norows = False
- if rows is not None:
- for row in rows:
- # Either this should be yielded or it should be
- # requiresAnswer=False
- self.callRemote(Row, queryID=queryID, row=row)
- self.callRemote(QueryComplete, queryID=queryID, norows=norows)
- returnValue({})
-
-
- def _complete(self, transactionID, thunk):
- txn = self._txns.pop(transactionID)
- return thunk(txn).addCallback(lambda ignored: {})
-
-
- @Commit.responder
- def commit(self, transactionID):
- """
- Successfully complete the given transaction.
- """
- return self._complete(transactionID, lambda x: x.commit())
-
-
- @Abort.responder
- def abort(self, transactionID):
- """
- Roll back the given transaction.
- """
- return self._complete(transactionID, lambda x: x.abort())
-
-
-
-class ConnectionPoolClient(AMP):
- """
- A client which can execute SQL.
- """
- def __init__(self):
- super(ConnectionPoolClient, self).__init__()
- self._nextID = count().next
- self._txns = {}
- self._queries = {}
-
-
- def newTransaction(self):
- txnid = str(self._nextID())
- self.callRemote(StartTxn, transactionID=txnid)
- txn = Transaction(client=self, transactionID=txnid)
- self._txns[txnid] = txn
- return txn
-
-
- @Row.responder
- def row(self, queryID, row):
- self._queries[queryID].row(row)
- return {}
-
-
- @QueryComplete.responder
- def complete(self, queryID, norows):
- self._queries.pop(queryID).done(norows)
- return {}
-
-
-
-class _Query(object):
- def __init__(self, raiseOnZeroRowCount):
- self.results = []
- self.deferred = Deferred()
- self.raiseOnZeroRowCount = raiseOnZeroRowCount
-
-
- def row(self, row):
- """
- A row was received.
- """
- self.results.append(row)
-
-
- def done(self, norows):
- """
- The query is complete.
-
- @param norows: A boolean. True if there were not any rows.
- """
- if norows and (self.raiseOnZeroRowCount is not None):
- exc = self.raiseOnZeroRowCount()
- self.deferred.errback(Failure(exc))
- else:
- self.deferred.callback(self.results)
-
-
-
-
-class Transaction(object):
- """
- Async protocol-based transaction implementation.
- """
-
- implements(IAsyncTransaction)
-
- def __init__(self, client, transactionID):
- """
- Initialize a transaction with a L{ConnectionPoolClient} and a unique
- transaction identifier.
- """
- self._client = client
- self._transactionID = transactionID
- self._completed = False
-
-
- def execSQL(self, sql, args=None, raiseOnZeroRowCount=None):
- if args is None:
- args = []
- queryID = str(self._client._nextID())
- query = self._client._queries[queryID] = _Query(raiseOnZeroRowCount)
- self._client.callRemote(ExecSQL, queryID=queryID, sql=sql, args=args,
- transactionID=self._transactionID)
- return query.deferred
-
-
- def _complete(self, command):
- if self._completed:
- raise AlreadyFinishedError()
- self._completed = True
- return self._client.callRemote(
- command, transactionID=self._transactionID
- ).addCallback(lambda x: None)
-
-
- def commit(self):
- return self._complete(Commit)
-
-
- def abort(self):
- return self._complete(Abort)
-
-
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/dbapiclient.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/dbapiclient.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/dbapiclient.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -17,7 +17,14 @@
"""
General utility client code for interfacing with DB-API 2.0 modules.
"""
+from twext.enterprise.util import mapOracleOutputType
+try:
+ import cx_Oracle
+except ImportError:
+ cx_Oracle = None
+
+
class DiagnosticCursorWrapper(object):
"""
Diagnostic wrapper around a DB-API 2.0 cursor for debugging connection
@@ -41,11 +48,11 @@
def execute(self, sql, args=()):
self.connectionWrapper.state = 'executing %r' % (sql,)
-# Use log.debug
-# sys.stdout.write(
-# "Really executing SQL %r in thread %r\n" %
-# ((sql % tuple(args)), thread.get_ident())
-# )
+ # Use log.debug
+ # sys.stdout.write(
+ # "Really executing SQL %r in thread %r\n" %
+ # ((sql % tuple(args)), thread.get_ident())
+ # )
self.realCursor.execute(sql, args)
@@ -55,21 +62,68 @@
def fetchall(self):
results = self.realCursor.fetchall()
-# Use log.debug
-# sys.stdout.write(
-# "Really fetching results %r thread %r\n" %
-# (results, thread.get_ident())
-# )
+ # Use log.debug
+ # sys.stdout.write(
+ # "Really fetching results %r thread %r\n" %
+ # (results, thread.get_ident())
+ # )
return results
+class OracleCursorWrapper(DiagnosticCursorWrapper):
+ """
+ Wrapper for cx_Oracle DB-API connections which implements fetchall() to read
+ all CLOB objects into strings.
+ """
+ def fetchall(self):
+ accum = []
+ for row in self.realCursor:
+ newRow = []
+ for column in row:
+ newRow.append(mapOracleOutputType(column))
+ accum.append(newRow)
+ return accum
+
+
+ def var(self, *args):
+ """
+ Create a cx_Oracle variable bound to this cursor. (Forwarded in
+ addition to the standard methods so that implementors of
+ L{IDerivedParameter} do not need to be specifically aware of this
+ layer.)
+ """
+ return self.realCursor.var(*args)
+
+
+ def execute(self, sql, args=()):
+ realArgs = []
+ for arg in args:
+ if isinstance(arg, (str, unicode)) and len(arg) > 1024:
+ # This *may* cause a type mismatch, but none of the non-CLOB
+ # strings that we're passing would allow a value this large
+ # anyway. Smaller strings will be automatically converted by
+ # the bindings; larger ones will generate an error. I'm not
+ # sure why cx_Oracle itself doesn't just do the following hack
+ # automatically and internally for larger values too, but, here
+ # it is:
+ v = self.var(cx_Oracle.CLOB, len(arg) + 1)
+ v.setvalue(0, arg)
+ else:
+ v = arg
+ realArgs.append(v)
+ return super(OracleCursorWrapper, self).execute(sql, realArgs)
+
+
+
class DiagnosticConnectionWrapper(object):
"""
Diagnostic wrapper around a DB-API 2.0 connection for debugging connection
status.
"""
+ wrapper = DiagnosticCursorWrapper
+
def __init__(self, realConnection, label):
self.realConnection = realConnection
self.label = label
@@ -77,7 +131,7 @@
def cursor(self):
- return DiagnosticCursorWrapper(self.realConnection.cursor(), self)
+ return self.wrapper(self.realConnection.cursor(), self)
def close(self):
@@ -103,6 +157,8 @@
@ivar dbModule: the DB-API module to use.
"""
+ wrapper = DiagnosticConnectionWrapper
+
def __init__(self, dbModule, preflight, *connectArgs, **connectKw):
self.dbModule = dbModule
self.connectArgs = connectArgs
@@ -112,12 +168,53 @@
def connect(self, label="<unlabeled>"):
connection = self.dbModule.connect(*self.connectArgs, **self.connectKw)
- w = DiagnosticConnectionWrapper(connection, label)
+ w = self.wrapper(connection, label)
self.preflight(w)
return w
+class OracleConnectionWrapper(DiagnosticConnectionWrapper):
+
+ wrapper = OracleCursorWrapper
+
+
+
+class OracleConnector(DBAPIConnector):
+ """
+ A connector for cx_Oracle connections, with some special-cased behavior to
+ make it work more like other DB-API bindings.
+
+ Note: this is currently necessary to make our usage of twext.enterprise.dal
+ work with cx_Oracle, and should be factored somewhere higher-level.
+ """
+
+ wrapper = OracleConnectionWrapper
+
+ def __init__(self, dsn):
+ super(OracleConnector, self).__init__(
+ cx_Oracle, oraclePreflight, dsn, threaded=True)
+
+
+
+def oraclePreflight(connection):
+ """
+ Pre-flight function for Oracle connections: set the timestamp format to be
+ something closely resembling our default assumption from Postgres.
+ """
+ c = connection.cursor()
+ c.execute(
+ "alter session set NLS_TIMESTAMP_FORMAT = "
+ "'YYYY-MM-DD HH24:MI:SS.FF'"
+ )
+ c.execute(
+ "alter session set NLS_TIMESTAMP_TZ_FORMAT = "
+ "'YYYY-MM-DD HH:MI:SS.FF+TZH:TZM'"
+ )
+ connection.commit()
+ c.close()
+
+
def postgresPreflight(connection):
"""
Pre-flight function for PostgreSQL connections: enable standard conforming
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,8 +21,8 @@
"""
from twext.python.log import LoggingMixIn
-from txdav.idav import IDataStoreResource
-from txdav.idav import AlreadyFinishedError
+from twext.enterprise.ienterprise import AlreadyFinishedError
+from txdav.idav import IDataStoreObject
from txdav.base.propertystore.base import PropertyName
from twext.web2.dav.element.rfc2518 import GETContentType
@@ -191,7 +191,7 @@
class FileMetaDataMixin(object):
- implements(IDataStoreResource)
+ implements(IDataStoreObject)
def name(self):
"""
@@ -240,7 +240,7 @@
@rtype: C{int}
"""
if self._path.exists():
- return self._path.getsize()
+ return int(self._path.getsize())
else:
return 0
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_asyncsqlpool.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_asyncsqlpool.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_asyncsqlpool.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,174 +0,0 @@
-# -*- test-case-name: txdav.caldav.datastore -*-
-##
-# Copyright (c) 2010 Apple Inc. All 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{txdav.base.datastore.asyncsqlpool}.
-"""
-
-from itertools import count
-from twisted.trial.unittest import TestCase
-
-from txdav.base.datastore.asyncsqlpool import ConnectionPool
-from twisted.internet.defer import inlineCallbacks
-
-
-class Child(object):
- def __init__(self, parent):
- self.parent = parent
- self.parent.children.append(self)
-
- def close(self):
- self.parent.children.remove(self)
-
-
-
-class Parent(object):
-
- def __init__(self):
- self.children = []
-
-
-
-class FakeConnection(Parent, Child):
- """
- Fake Stand-in for DB-API 2.0 connection.
- """
-
- def __init__(self, factory):
- """
- Initialize list of cursors
- """
- Parent.__init__(self)
- Child.__init__(self, factory)
- self.id = factory.idcounter.next()
-
-
- @property
- def cursors(self):
- "Alias to make tests more readable."
- return self.children
-
-
- def cursor(self):
- return FakeCursor(self)
-
-
- def commit(self):
- return
-
-
- def rollback(self):
- return
-
-
-
-class FakeCursor(Child):
- """
- Fake stand-in for a DB-API 2.0 cursor.
- """
- def __init__(self, connection):
- Child.__init__(self, connection)
- self.rowcount = 0
- # not entirely correct, but all we care about is its truth value.
- self.description = False
-
-
- @property
- def connection(self):
- "Alias to make tests more readable."
- return self.parent
-
-
- def execute(self, sql, args=()):
- self.sql = sql
- self.description = True
- self.rowcount = 1
- return
-
-
- def fetchall(self):
- """
- Just echo the SQL that was executed in the last query.
- """
- return [[self.connection.id, self.sql]]
-
-
-
-class ConnectionFactory(Parent):
- def __init__(self):
- Parent.__init__(self)
- self.idcounter = count(1)
-
- @property
- def connections(self):
- "Alias to make tests more readable."
- return self.children
-
-
- def connect(self):
- return FakeConnection(self)
-
-
-
-class ConnectionPoolTests(TestCase):
-
- @inlineCallbacks
- def test_tooManyConnections(self):
- """
- When the number of outstanding busy transactions exceeds the number of
- slots specified by L{ConnectionPool.maxConnections},
- L{ConnectionPool.connection} will return a L{PooledSqlTxn} that is not
- backed by any L{BaseSqlTxn}; this object will queue its SQL statements
- until an existing connection becomes available.
- """
- cf = ConnectionFactory()
- cp = ConnectionPool(cf.connect, maxConnections=2)
- cp.startService()
- self.addCleanup(cp.stopService)
- a = cp.connection()
- [[counter, echo]] = yield a.execSQL("alpha")
- b = cp.connection()
- [[bcounter, becho]] = yield b.execSQL("beta")
-
- # both 'a' and 'b' are holding open a connection now; let's try to open
- # a third one. (The ordering will be deterministic even if this fails,
- # because those threads are already busy.)
- c = cp.connection()
- enqueue = c.execSQL("gamma")
- x = []
- def addtox(it):
- x.append(it)
- return it
- enqueue.addCallback(addtox)
-
- # Did 'c' open a connection? Let's hope not...
- self.assertEquals(len(cf.connections), 2)
- # This assertion is _not_ deterministic, unfortunately; it's unlikely
- # that the implementation could be adjusted such that this assertion
- # would fail and the others would succeed. However, if it does fail,
- # that's really bad, so I am leaving it regardless.
- self.failIf(bool(x), "SQL executed too soon!")
- yield b.commit()
-
- # Now that 'b' has committed, 'c' should be able to complete.
- [[ccounter, cecho]] = yield enqueue
-
- # The connection for 'a' ought to be busy, so let's make sure we're
- # using the one for 'c'.
- self.assertEquals(ccounter, bcounter)
-
-
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_subpostgres.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_subpostgres.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/test/test_subpostgres.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -66,11 +66,11 @@
cursor.close()
svc = PostgresService(
- CachingFilePath("../_postgres_test_db1"),
- SimpleService1,
- "create table TEST_DUMMY_TABLE (stub varchar)",
- databaseName="dummy_db",
- testMode=True
+ CachingFilePath("postgres_1.pgdb"),
+ SimpleService1,
+ "create table TEST_DUMMY_TABLE (stub varchar)",
+ databaseName="dummy_db",
+ testMode=True
)
svc.startService()
self.addCleanup(svc.stopService)
@@ -116,12 +116,12 @@
cursor.close()
svc = PostgresService(
- CachingFilePath("../_postgres_test_db2"),
- SimpleService2,
- "create table TEST_DUMMY_TABLE (stub varchar)",
- databaseName="dummy_db",
- listenAddresses=['127.0.0.1',],
- testMode=True
+ CachingFilePath("postgres_2.pgdb"),
+ SimpleService2,
+ "create table TEST_DUMMY_TABLE (stub varchar)",
+ databaseName="dummy_db",
+ listenAddresses=['127.0.0.1',],
+ testMode=True
)
svc.startService()
self.addCleanup(svc.stopService)
Deleted: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/threadutils.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/threadutils.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/datastore/threadutils.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,111 +0,0 @@
-##
-# Copyright (c) 2010 Apple Inc. All 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 sys
-from Queue import Queue
-
-
-from twisted.python.failure import Failure
-from twisted.internet.defer import Deferred
-
-
-_DONE = object()
-
-_STATE_STOPPED = 'STOPPED'
-_STATE_RUNNING = 'RUNNING'
-_STATE_STOPPING = 'STOPPING'
-
-class ThreadHolder(object):
- """
- A queue which will hold a reactor threadpool thread open until all of the
- work in that queue is done.
- """
-
- def __init__(self, reactor):
- self._reactor = reactor
- self._state = _STATE_STOPPED
- self._stopper = None
- self._q = None
-
-
- def _run(self):
- """
- Worker function which runs in a non-reactor thread.
- """
- while True:
- work = self._q.get()
- if work is _DONE:
- def finishStopping():
- self._state = _STATE_STOPPED
- self._q = None
- s = self._stopper
- self._stopper = None
- s.callback(None)
- self._reactor.callFromThread(finishStopping)
- return
- self._oneWorkUnit(*work)
-
-
- def _oneWorkUnit(self, deferred, instruction):
- try:
- result = instruction()
- except:
- etype, evalue, etb = sys.exc_info()
- def relayFailure():
- f = Failure(evalue, etype, etb)
- deferred.errback(f)
- self._reactor.callFromThread(relayFailure)
- else:
- self._reactor.callFromThread(deferred.callback, result)
-
-
- def submit(self, work):
- """
- Submit some work to be run.
-
- @param work: a 0-argument callable, which will be run in a thread.
-
- @return: L{Deferred} that fires with the result of L{work}
- """
- d = Deferred()
- self._q.put((d, work))
- return d
-
-
- def start(self):
- """
- Start this thing, if it's stopped.
- """
- if self._state != _STATE_STOPPED:
- raise RuntimeError("Not stopped.")
- self._state = _STATE_RUNNING
- self._q = Queue(0)
- self._reactor.callInThread(self._run)
-
-
- def stop(self):
- """
- Stop this thing and release its thread, if it's running.
- """
- if self._state != _STATE_RUNNING:
- raise RuntimeError("Not running.")
- s = self._stopper = Deferred()
- self._state = _STATE_STOPPING
- self._q.put(_DONE)
- return s
-
-
-
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/base.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/base.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -98,8 +98,8 @@
"""
implements(IPropertyStore)
- _defaultShadowableKeys = set()
- _defaultGlobalKeys = set((
+ _defaultShadowableKeys = frozenset()
+ _defaultGlobalKeys = frozenset((
PropertyName.fromElement(davxml.ACL),
PropertyName.fromElement(davxml.ResourceID),
PropertyName.fromElement(davxml.ResourceType),
@@ -108,7 +108,7 @@
PropertyName.fromElement(TwistedQuotaRootProperty),
))
- def __init__(self, defaultuser):
+ def __init__(self, defaultUser):
"""
Instantiate the property store for a user. The default is the default user
(owner) property to read in the case of global or shadowable properties.
@@ -117,15 +117,17 @@
@type defaultuser: C{str}
"""
- self._peruser = self._defaultuser = defaultuser
+ self._perUser = self._defaultUser = defaultUser
self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
+ def __str__(self):
+ return "<%s>" % (self.__class__.__name__)
+
def _setPerUserUID(self, uid):
- self._peruser = uid
+ self._perUser = uid
-
def setSpecialProperties(self, shadowableKeys, globalKeys):
self._shadowableKeys.update(shadowableKeys)
self._globalKeys.update(globalKeys)
@@ -145,7 +147,16 @@
def _keys_uid(self, uid):
raise NotImplementedError()
-
+
+ def _removeResource(self):
+ raise NotImplementedError()
+
+ def flush(self):
+ raise NotImplementedError()
+
+ def abort(self):
+ raise NotImplementedError()
+
#
# Required UserDict implementations
#
@@ -154,34 +165,34 @@
# Handle per-user behavior
if self.isShadowableProperty(key):
try:
- result = self._getitem_uid(key, self._peruser)
+ result = self._getitem_uid(key, self._perUser)
except KeyError:
- result = self._getitem_uid(key, self._defaultuser)
+ result = self._getitem_uid(key, self._defaultUser)
return result
elif self.isGlobalProperty(key):
- return self._getitem_uid(key, self._defaultuser)
+ return self._getitem_uid(key, self._defaultUser)
else:
- return self._getitem_uid(key, self._peruser)
+ return self._getitem_uid(key, self._perUser)
def __setitem__(self, key, value):
# Handle per-user behavior
if self.isGlobalProperty(key):
- return self._setitem_uid(key, value, self._defaultuser)
+ return self._setitem_uid(key, value, self._defaultUser)
else:
- return self._setitem_uid(key, value, self._peruser)
+ return self._setitem_uid(key, value, self._perUser)
def __delitem__(self, key):
# Handle per-user behavior
if self.isGlobalProperty(key):
- self._delitem_uid(key, self._defaultuser)
+ self._delitem_uid(key, self._defaultUser)
else:
- self._delitem_uid(key, self._peruser)
+ self._delitem_uid(key, self._perUser)
def keys(self):
- userkeys = list(self._keys_uid(self._peruser))
- if self._defaultuser != self._peruser:
- defaultkeys = self._keys_uid(self._defaultuser)
+ userkeys = list(self._keys_uid(self._perUser))
+ if self._defaultUser != self._perUser:
+ defaultkeys = self._keys_uid(self._defaultUser)
for key in defaultkeys:
if self.isShadowableProperty(key) and key not in userkeys:
userkeys.append(key)
@@ -194,7 +205,6 @@
for key in other:
self[key] = other[key]
-
# Per-user property handling
def isShadowableProperty(self, key):
return key in self._shadowableKeys
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/none.py (from rev 7192, CalendarServer/trunk/txdav/base/propertystore/none.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/none.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/none.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,64 @@
+# -*- test-case-name: txdav.base.propertystore.test.test_none,txdav.caldav.datastore,txdav.carddav.datastore -*-
+##
+# Copyright (c) 2010-2011 Apple Inc. All 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.
+##
+
+"""
+Always-empty property store.
+"""
+
+__all__ = [
+ "PropertyStore",
+]
+
+from txdav.idav import PropertyChangeNotAllowedError
+from txdav.base.propertystore.base import AbstractPropertyStore, validKey
+
+class PropertyStore(AbstractPropertyStore):
+ """
+ Always-empty property store.
+ Writing properties is not allowed.
+ """
+ #
+ # We override the UserDict items directly here rather than the _uid methods
+ #
+
+ def __getitem__(self, key):
+ validKey(key)
+ raise KeyError(key)
+
+ def __setitem__(self, key, value):
+ validKey(key)
+ raise PropertyChangeNotAllowedError("Property store is read-only.", (key,))
+
+ def __delitem__(self, key):
+ validKey(key)
+ raise KeyError(key)
+
+ def keys(self):
+ return ()
+
+ def _removeResource(self):
+ pass
+
+ #
+ # I/O
+ #
+
+ def flush(self):
+ return None
+
+ def abort(self):
+ return None
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -14,7 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
##
-from twisted.internet.defer import inlineCallbacks, returnValue
"""
PostgreSQL data store.
@@ -24,19 +23,38 @@
"PropertyStore",
]
-from txdav.base.propertystore.base import AbstractPropertyStore, PropertyName,\
- validKey
+from twistedcaldav.memcacher import Memcacher
+
+from twext.enterprise.dal.syntax import (
+ Select, Parameter, Update, Insert, TableSyntax, Delete)
+
+from txdav.common.datastore.sql_tables import schema
+from txdav.base.propertystore.base import (AbstractPropertyStore,
+ PropertyName, validKey)
+
from twext.web2.dav.davxml import WebDAVDocument
+from twisted.internet.defer import inlineCallbacks, returnValue
+
+
+prop = schema.RESOURCE_PROPERTY
+
class PropertyStore(AbstractPropertyStore):
+ _cacher = Memcacher("SQL.props", pickle=True, key_normalization=False)
+
def __init__(self, *a, **kw):
raise NotImplementedError(
"do not construct directly, call PropertyStore.load()"
)
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+
@classmethod
@inlineCallbacks
def load(cls, defaultuser, txn, resourceID, created=False):
@@ -46,48 +64,78 @@
self._resourceID = resourceID
self._cached = {}
if not created:
- # Cache existing properties
- rows = yield self._txn.execSQL(
- """
- select NAME, VIEWER_UID, VALUE from RESOURCE_PROPERTY
- where RESOURCE_ID = %s
- """,
- [self._resourceID]
- )
+ # Cache existing properties in this object
+ # Look for memcache entry first
+ rows = yield self._cacher.get(str(self._resourceID))
+ if rows is None:
+ rows = yield self._allWithID.on(txn,
+ resourceID=self._resourceID)
+ yield self._cacher.set(str(self._resourceID),
+ rows if rows is not None else ())
for name, uid, value in rows:
self._cached[(name, uid)] = value
returnValue(self)
+
@classmethod
@inlineCallbacks
- def loadAll(cls, defaultuser, txn, joinTable, joinColumn, parentIDColumn, parentID):
+ def forMultipleResources(cls, defaultUser, txn,
+ childColumn, parentColumn, parentID):
"""
- Return a list of property stores for all objects in a parent collection
+ Load all property stores for all objects in a collection. This is used
+ to optimize Depth:1 operations on that collection, by loading all
+ relevant properties in a single query.
+
+ @param defaultUser: the UID of the user who owns / is requesting the
+ property stores; the ones whose per-user properties will be exposed.
+
+ @type defaultUser: C{str}
+
+ @param txn: the transaction within which to fetch the rows.
+
+ @type txn: L{IAsyncTransaction}
+
+ @param childColumn: The resource ID column for the child resources, i.e.
+ the resources of the type for which this method will loading the
+ property stores.
+
+ @param parentColumn: The resource ID column for the parent resources.
+ e.g. if childColumn is addressbook object's resource ID, then this
+ should be addressbook's resource ID.
+
+ @return: a L{Deferred} that fires with a C{dict} mapping resource ID (a
+ value taken from C{childColumn}) to a L{PropertyStore} for that ID.
"""
- rows = yield txn.execSQL(
- """
- select
- RESOURCE_PROPERTY.RESOURCE_ID,
- RESOURCE_PROPERTY.NAME,
- RESOURCE_PROPERTY.VIEWER_UID,
- RESOURCE_PROPERTY.VALUE
- from RESOURCE_PROPERTY
- left join %s on (RESOURCE_PROPERTY.RESOURCE_ID = %s)
- where %s = %%s
- """ % (joinTable, joinColumn, parentIDColumn),
- [parentID]
+ childTable = TableSyntax(childColumn.model.table)
+ query = Select([
+ childColumn,
+ # XXX is that column necessary? as per the 'on' clause it has to be
+ # the same as prop.RESOURCE_ID anyway.
+ prop.RESOURCE_ID, prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop.join(childTable, prop.RESOURCE_ID == childColumn,
+ 'right'),
+ Where=parentColumn == parentID
)
-
+ rows = yield query.on(txn)
+
createdStores = {}
- for resource_id, name, view_uid, value in rows:
- if resource_id not in createdStores:
+ for object_resource_id, resource_id, name, view_uid, value in rows:
+ if resource_id:
+ if resource_id not in createdStores:
+ store = cls.__new__(cls)
+ super(PropertyStore, store).__init__(defaultUser)
+ store._txn = txn
+ store._resourceID = resource_id
+ store._cached = {}
+ createdStores[resource_id] = store
+ createdStores[resource_id]._cached[(name, view_uid)] = value
+ else:
store = cls.__new__(cls)
- super(PropertyStore, store).__init__(defaultuser)
+ super(PropertyStore, store).__init__(defaultUser)
store._txn = txn
- store._resourceID = resource_id
+ store._resourceID = object_resource_id
store._cached = {}
- createdStores[resource_id] = store
- createdStores[resource_id]._cached[(name, view_uid)] = value
+ createdStores[object_resource_id] = store
returnValue(createdStores)
@@ -103,6 +151,19 @@
return WebDAVDocument.fromString(value).root_element
+ _updateQuery = Update({prop.VALUE: Parameter("value")},
+ Where=(
+ prop.RESOURCE_ID == Parameter("resourceID")).And(
+ prop.NAME == Parameter("name")).And(
+ prop.VIEWER_UID == Parameter("uid")))
+
+
+ _insertQuery = Insert({prop.VALUE: Parameter("value"),
+ prop.RESOURCE_ID: Parameter("resourceID"),
+ prop.NAME: Parameter("name"),
+ prop.VIEWER_UID: Parameter("uid")})
+
+
def _setitem_uid(self, key, value, uid):
validKey(key)
@@ -110,43 +171,46 @@
value_str = value.toxml()
if (key_str, uid) in self._cached:
- self._txn.execSQL(
- """
- update RESOURCE_PROPERTY
- set VALUE = %s
- where RESOURCE_ID = %s and NAME = %s and VIEWER_UID = %s
- """,
- [value_str, self._resourceID, key_str, uid]
- )
- else:
- self._txn.execSQL(
- """
- insert into RESOURCE_PROPERTY
- (RESOURCE_ID, NAME, VALUE, VIEWER_UID)
- values (%s, %s, %s, %s)
- """,
- [self._resourceID, key_str, value_str, uid]
- )
+ self._updateQuery.on(self._txn, resourceID=self._resourceID,
+ value=value_str, name=key_str, uid=uid)
+ else:
+ self._insertQuery.on(self._txn, resourceID=self._resourceID,
+ value=value_str, name=key_str, uid=uid)
self._cached[(key_str, uid)] = value_str
+ self._cacher.delete(str(self._resourceID))
+ _deleteQuery = Delete(
+ prop, Where=(prop.RESOURCE_ID == Parameter("resourceID")).And(
+ prop.NAME == Parameter("name")).And(
+ prop.VIEWER_UID == Parameter("uid"))
+ )
+
+
def _delitem_uid(self, key, uid):
validKey(key)
key_str = key.toString()
del self._cached[(key_str, uid)]
- self._txn.execSQL(
- """
- delete from RESOURCE_PROPERTY
- where RESOURCE_ID = %s and NAME = %s and VIEWER_UID = %s
- """,
- [self._resourceID, key_str, uid],
- raiseOnZeroRowCount=lambda:KeyError(key)
- )
-
+ self._deleteQuery.on(self._txn, lambda:KeyError(key),
+ resourceID=self._resourceID,
+ name=key_str, uid=uid
+ )
+ self._cacher.delete(str(self._resourceID))
+
def _keys_uid(self, uid):
-
for cachedKey, cachedUID in self._cached.keys():
if cachedUID == uid:
yield PropertyName.fromString(cachedKey)
+
+ _deleteResourceQuery = Delete(
+ prop, Where=(prop.RESOURCE_ID == Parameter("resourceID"))
+ )
+
+ def _removeResource(self):
+
+ self._cached = {}
+ self._deleteResourceQuery.on(self._txn, resourceID=self._resourceID)
+ self._cacher.delete(str(self._resourceID))
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/base.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/base.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -36,14 +36,9 @@
from txdav.base.propertystore.base import PropertyName
-class PropertyStoreTest(unittest.TestCase):
+class NonePropertyStoreTest(unittest.TestCase):
# Subclass must define self.propertyStore in setUp().
- def _changed(self, store):
- store.flush()
- def _abort(self, store):
- store.abort()
-
def test_interface(self):
try:
verifyObject(IPropertyStore, self.propertyStore)
@@ -51,6 +46,38 @@
self.fail(e)
+ def test_delete_none(self):
+ def doDelete():
+ del self.propertyStore[propertyName("xyzzy")]
+
+ self.assertRaises(KeyError, doDelete)
+
+
+ def test_keyInPropertyName(self):
+ def doGet():
+ self.propertyStore["xyzzy"]
+ def doSet():
+ self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
+ def doDelete():
+ del self.propertyStore["xyzzy"]
+ def doContains():
+ return "xyzzy" in self.propertyStore
+
+ self.assertRaises(TypeError, doGet)
+ self.assertRaises(TypeError, doSet)
+ self.assertRaises(TypeError, doDelete)
+ self.assertRaises(TypeError, doContains)
+
+
+class PropertyStoreTest(NonePropertyStoreTest):
+ # Subclass must define self.propertyStore in setUp().
+
+ def _changed(self, store):
+ store.flush()
+ def _abort(self, store):
+ store.abort()
+
+
@inlineCallbacks
def test_set_get_contains(self):
@@ -221,34 +248,6 @@
self.assertEquals(len(self.propertyStore), len(names))
- def test_delete_none(self):
-
- def doDelete():
- del self.propertyStore[propertyName("xyzzy")]
-
- self.assertRaises(KeyError, doDelete)
-
-
- def test_keyInPropertyName(self):
-
- def doGet():
- self.propertyStore["xyzzy"]
-
- def doSet():
- self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
-
- def doDelete():
- del self.propertyStore["xyzzy"]
-
- def doContains():
- return "xyzzy" in self.propertyStore
-
- self.assertRaises(TypeError, doGet)
- self.assertRaises(TypeError, doSet)
- self.assertRaises(TypeError, doDelete)
- self.assertRaises(TypeError, doContains)
-
-
@inlineCallbacks
def test_flush(self):
@@ -306,6 +305,7 @@
self.failUnless(name in self.propertyStore2.keys())
+
def propertyName(name):
return PropertyName("http://calendarserver.org/ns/test/", name)
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_none.py (from rev 7192, CalendarServer/trunk/txdav/base/propertystore/test/test_none.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_none.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_none.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,50 @@
+##
+# Copyright (c) 2010 Apple Inc. All 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.
+##
+
+"""
+Property store tests.
+"""
+
+from txdav.idav import PropertyChangeNotAllowedError
+from txdav.base.propertystore.none import PropertyStore
+from txdav.base.propertystore.test.base import propertyName, propertyValue
+
+from txdav.base.propertystore.test import base
+
+
+class PropertyStoreTest(base.NonePropertyStoreTest):
+ def setUp(self):
+ self.propertyStore = PropertyStore("user01")
+
+ def test_set(self):
+ def doSet():
+ self.propertyStore[propertyName("foo")] = propertyValue("bar")
+ self.assertRaises(PropertyChangeNotAllowedError, doSet)
+
+ def test_get(self):
+ self.assertRaises(KeyError, lambda: self.propertyStore[propertyName("foo")])
+
+ def test_len(self):
+ self.assertEquals(len(self.propertyStore), 0)
+
+ def test_keys(self):
+ self.assertEquals(self.propertyStore.keys(), ())
+
+ def test_flush(self):
+ self.propertyStore.flush()
+
+ def test_abort(self):
+ self.propertyStore.abort()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -26,6 +26,9 @@
from txdav.base.propertystore.base import PropertyName
from txdav.base.propertystore.test import base
+from twistedcaldav import memcacher
+from twistedcaldav.config import config
+
try:
from txdav.base.propertystore.sql import PropertyStore
except ImportError, e:
@@ -39,6 +42,10 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(memcacher.Memcacher, "allowTestCache", True)
+
self.notifierFactory = StubNotifierFactory()
self.store = yield buildStore(self, self.notifierFactory)
self.addCleanup(self.maybeCommitLast)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_xattr.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_xattr.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/test/test_xattr.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -20,9 +20,7 @@
"""
from twext.python.filepath import CachingFilePath as FilePath
-
from txdav.base.propertystore.base import PropertyName
-
from txdav.base.propertystore.test import base
try:
@@ -39,9 +37,8 @@
tempDir.makedirs()
tempFile = tempDir.child("test")
tempFile.touch()
- self.propertyStore = self.propertyStore1 = PropertyStore(
- "user01", lambda : tempFile
- )
+ self.propertyStore = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore1 = self.propertyStore
self.propertyStore2 = PropertyStore("user01", lambda : tempFile)
self.propertyStore2._setPerUserUID("user02")
@@ -64,8 +61,8 @@
name = "dummy"
name = PropertyName.fromElement(DummyProperty)
- compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser))
- uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+ compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser))
+ uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
self.propertyStore[name] = DummyProperty.fromString("data")
self.propertyStore.flush()
@@ -80,14 +77,10 @@
name = "dummy"
name = PropertyName.fromElement(DummyProperty)
- uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+ uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
self.propertyStore.attrs[uncompressedKey] = DummyProperty.fromString("data").toxml()
self.assertEqual(self.propertyStore[name], DummyProperty.fromString("data"))
- self.assertRaises(KeyError, lambda:self.propertyStore.attrs[uncompressedKey])
+ self.assertRaises(KeyError, lambda: self.propertyStore.attrs[uncompressedKey])
if PropertyStore is None:
PropertyStoreTest.skip = importErrorMessage
-
-
-def propertyName(name):
- return PropertyName("http://calendarserver.org/ns/test/", name)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/xattr.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/xattr.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/base/propertystore/xattr.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -36,6 +36,7 @@
from txdav.base.propertystore.base import AbstractPropertyStore, PropertyName, validKey
from txdav.idav import PropertyStoreError
+from twisted.python.reflect import namedAny
#
@@ -61,15 +62,11 @@
http://undefined.org/python/#xattr
"""
- #
- # Dead properties are stored as extended attributes on disk. In order to
- # avoid conflicts with other attributes, prefix dead property names.
- #
- deadPropertyXattrPrefix = "WebDAV:"
- # Linux seems to require that attribute names use a "user." prefix.
- if sys.platform == "linux2":
- deadPropertyXattrPrefix = "user." + deadPropertyXattrPrefix
+ # Mimic old xattr-prefix behavior by importing it directly.
+ deadPropertyXattrPrefix = namedAny(
+ "twext.web2.dav.xattrprops.xattrPropertyStore.deadPropertyXattrPrefix"
+ )
# There is a 127 character limit for xattr keys so we need to compress/expand
# overly long namespaces to help stay under that limit now that GUIDs are also
@@ -114,7 +111,7 @@
qname, uid = effective
namespace = self._namespaceCompress.get(qname.namespace, qname.namespace) if compressNamespace else qname.namespace
result = urllib.quote("{%s}%s" % (namespace, qname.name), safe="{}:")
- if uid and uid != self._defaultuser:
+ if uid and uid != self._defaultUser:
result = uid + result
r = self.deadPropertyXattrPrefix + result
return r
@@ -129,7 +126,7 @@
if (index1 is - 1 or index2 is - 1 or not len(name) > index2):
raise ValueError("Invalid encoded name: %r" % (name,))
if index1 == 0:
- uid = self._defaultuser
+ uid = self._defaultUser
else:
uid = name[:index1]
propnamespace = name[index1 + 1:index2]
@@ -260,6 +257,11 @@
if effectivekey[1] == uid and effectivekey not in seen:
yield effectivekey[0]
+ def _removeResource(self):
+ # xattrs are removed when the underlying file is deleted so just clear out cached changes
+ self.removed.clear()
+ self.modified.clear()
+
#
# I/O
#
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.caldav.datastore.test.test_file -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All 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,7 +42,7 @@
from twext.web2.dav import davxml
from twext.web2.dav.element.rfc2518 import ResourceType, GETContentType
from twext.web2.dav.resource import TwistedGETContentMD5
-from twext.web2.http_headers import generateContentType
+from twext.web2.http_headers import generateContentType, MimeType
from twistedcaldav import caldavxml, customxml
from twistedcaldav.caldavxml import ScheduleCalendarTransp, Opaque
@@ -85,8 +85,8 @@
_topPath = "calendars"
_notifierPrefix = "CalDAV"
- def __init__(self, uid, path, calendarStore, transaction, notifier):
- super(CalendarHome, self).__init__(uid, path, calendarStore, transaction, notifier)
+ def __init__(self, uid, path, calendarStore, transaction, notifiers):
+ super(CalendarHome, self).__init__(uid, path, calendarStore, transaction, notifiers)
self._childClass = Calendar
@@ -128,6 +128,30 @@
@inlineCallbacks
+ def hasCalendarResourceUIDSomewhereElse(self, uid, ok_object, type):
+
+ objectResources = (yield self.objectResourcesWithUID(uid, ("inbox",)))
+ for objectResource in objectResources:
+ if ok_object and objectResource._path == ok_object._path:
+ continue
+ matched_type = "schedule" if objectResource.isScheduleObject else "calendar"
+ if type == "schedule" or matched_type == "schedule":
+ returnValue(True)
+
+ returnValue(False)
+
+ @inlineCallbacks
+ def getCalendarResourcesForUID(self, uid, allow_shared=False):
+
+ results = []
+ objectResources = (yield self.objectResourcesWithUID(uid, ("inbox",)))
+ for objectResource in objectResources:
+ if allow_shared or objectResource._parentCollection._owned:
+ results.append(objectResource)
+
+ returnValue(results)
+
+ @inlineCallbacks
def calendarObjectWithDropboxID(self, dropboxID):
"""
Implement lookup with brute-force scanning.
@@ -138,6 +162,19 @@
returnValue(calendarObject)
+ @inlineCallbacks
+ def getAllDropboxIDs(self):
+ dropboxIDs = []
+ for calendar in self.calendars():
+ for calendarObject in calendar.calendarObjects():
+ component = calendarObject.component()
+ if (component.hasPropertyInAnyComponent("X-APPLE-DROPBOX") or
+ component.hasPropertyInAnyComponent("ATTACH")):
+ dropboxID = (yield calendarObject.dropboxID())
+ dropboxIDs.append(dropboxID)
+ returnValue(dropboxIDs)
+
+
@property
def _calendarStore(self):
return self._dataStore
@@ -158,7 +195,7 @@
"""
implements(ICalendar)
- def __init__(self, name, calendarHome, realName=None):
+ def __init__(self, name, calendarHome, owned, realName=None):
"""
Initialize a calendar pointing at a path on disk.
@@ -173,7 +210,7 @@
will eventually have on disk.
@type realName: C{str}
"""
- super(Calendar, self).__init__(name, calendarHome, realName=realName)
+ super(Calendar, self).__init__(name, calendarHome, owned, realName=realName)
self._index = Index(self)
self._invites = Invites(self)
@@ -217,8 +254,14 @@
),
)
+ def contentType(self):
+ """
+ The content type of Calendar objects is text/calendar.
+ """
+ return MimeType.fromString("text/calendar; charset=utf-8")
+
class CalendarObject(CommonObjectResource):
"""
@ivar _path: The path of the .ics file on disk
@@ -231,13 +274,12 @@
super(CalendarObject, self).__init__(name, calendar)
self._attachments = {}
- if metadata is None:
- metadata = {}
- self.accessMode = metadata.get("accessMode", "")
- self.isScheduleObject = metadata.get("isScheduleObject", False)
- self.scheduleTag = metadata.get("scheduleTag", "")
- self.scheduleEtags = metadata.get("scheduleEtags", "")
- self.hasPrivateComment = metadata.get("hasPrivateComment", False)
+ if metadata is not None:
+ self.accessMode = metadata.get("accessMode", "")
+ self.isScheduleObject = metadata.get("isScheduleObject", False)
+ self.scheduleTag = metadata.get("scheduleTag", "")
+ self.scheduleEtags = metadata.get("scheduleEtags", "")
+ self.hasPrivateComment = metadata.get("hasPrivateComment", False)
@property
@@ -252,8 +294,6 @@
@writeOperation
def setComponent(self, component, inserting=False):
- old_size = 0 if inserting else self.size()
-
validateCalendarComponent(self, self._calendar, component, inserting)
self._calendar.retrieveOldIndex().addResource(
@@ -288,16 +328,11 @@
# Now re-write the original properties on the updated file
self.properties().flush()
- # Adjust quota
- quota_adjustment = self.size() - old_size
- self._calendar._home.adjustQuotaUsedBytes(quota_adjustment)
-
def undo():
if backup:
backup.moveTo(self._path)
else:
self._path.remove()
- self._calendar._home.adjustQuotaUsedBytes(-quota_adjustment)
return undo
self._transaction.addOperation(do, "set calendar component %r" % (self.name(),))
@@ -311,6 +346,8 @@
try:
component = VComponent.fromString(text)
+ # Fix any bogus data we can
+ component.validateComponentsForCalDAV(False, fix=True)
except InvalidICalendarDataError, e:
raise InternalDataStoreError(
"File corruption detected (%s) in file: %s"
@@ -368,6 +405,15 @@
def organizer(self):
return self.component().getOrganizer()
+ def getMetadata(self):
+ metadata = {}
+ metadata["accessMode"] = self.accessMode
+ metadata["isScheduleObject"] = self.isScheduleObject
+ metadata["scheduleTag"] = self.scheduleTag
+ metadata["scheduleEtags"] = self.scheduleEtags
+ metadata["hasPrivateComment"] = self.hasPrivateComment
+ return metadata
+
def _get_accessMode(self):
return str(self.properties().get(PropertyName.fromElement(customxml.TwistedCalendarAccessProperty), ""))
@@ -432,7 +478,7 @@
hasPrivateComment = property(_get_hasPrivateComment, _set_hasPrivateComment)
@inlineCallbacks
- def createAttachmentWithName(self, name, contentType):
+ def createAttachmentWithName(self, name):
"""
Implement L{ICalendarObject.removeAttachmentWithName}.
"""
@@ -440,7 +486,7 @@
dropboxPath = yield self._dropboxPath()
attachment = Attachment(self, name, dropboxPath)
self._attachments[name] = attachment
- returnValue(attachment.store(contentType))
+ returnValue(attachment)
@inlineCallbacks
@@ -479,9 +525,8 @@
returnValue(None)
- @inlineCallbacks
def attendeesCanManageAttachments(self):
- returnValue((yield self.component()).hasPropertyInAnyComponent("X-APPLE-DROPBOX"))
+ return self.component().hasPropertyInAnyComponent("X-APPLE-DROPBOX")
def dropboxID(self):
@@ -526,8 +571,15 @@
),
)
+ # IDataStoreObject
+ def contentType(self):
+ """
+ The content type of Calendar objects is text/calendar.
+ """
+ return MimeType.fromString("text/calendar; charset=utf-8")
+
class AttachmentStorageTransport(object):
implements(ITransport)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: twistedcaldav.test.test_index -*-
##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -70,31 +70,7 @@
}
indexfbtype_to_icalfbtype = dict([(v, k) for k,v in icalfbtype_to_indexfbtype.iteritems()])
-#
-# Duration into the future through which recurrences are expanded in the index
-# by default. This is a caching parameter which affects the size of the index;
-# it does not affect search results beyond this period, but it may affect
-# performance of such a search.
-#
-default_future_expansion_duration = datetime.timedelta(days=365*1)
-#
-# Maximum duration into the future through which recurrences are expanded in the
-# index. This is a caching parameter which affects the size of the index; it
-# does not affect search results beyond this period, but it may affect
-# performance of such a search.
-#
-# When a search is performed on a time span that goes beyond that which is
-# expanded in the index, we have to open each resource which may have data in
-# that time period. In order to avoid doing that multiple times, we want to
-# cache those results. However, we don't necessarily want to cache all
-# occurrences into some obscenely far-in-the-future date, so we cap the caching
-# period. Searches beyond this period will always be relatively expensive for
-# resources with occurrences beyond this period.
-#
-maximum_future_expansion_duration = datetime.timedelta(days=365*5)
-
-
class AbstractCalendarIndex(AbstractSQLDatabase, LoggingMixIn):
"""
Calendar collection index abstract base class that defines the apis for the index.
@@ -657,27 +633,59 @@
organizer = ""
# Decide how far to expand based on the component
+ doInstanceIndexing = False
master = calendar.masterComponent()
if master is None or not calendar.isRecurring() and not calendar.isRecurringUnbounded():
# When there is no master we have a set of overridden components - index them all.
# When there is one instance - index it.
# When bounded - index all.
expand = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
+ doInstanceIndexing = True
else:
- if expand_until:
+ # If migrating or re-creating or config option for delayed indexing is off, always index
+ if reCreate or not config.FreeBusyIndexDelayedExpand:
+ doInstanceIndexing = True
+
+ # Duration into the future through which recurrences are expanded in the index
+ # by default. This is a caching parameter which affects the size of the index;
+ # it does not affect search results beyond this period, but it may affect
+ # performance of such a search.
+ expand = (datetime.date.today() +
+ datetime.timedelta(days=config.FreeBusyIndexExpandAheadDays))
+
+ if expand_until and expand_until > expand:
expand = expand_until
- else:
- expand = datetime.date.today() + default_future_expansion_duration
-
- if expand > (datetime.date.today() + maximum_future_expansion_duration):
+
+ # Maximum duration into the future through which recurrences are expanded in the
+ # index. This is a caching parameter which affects the size of the index; it
+ # does not affect search results beyond this period, but it may affect
+ # performance of such a search.
+ #
+ # When a search is performed on a time span that goes beyond that which is
+ # expanded in the index, we have to open each resource which may have data in
+ # that time period. In order to avoid doing that multiple times, we want to
+ # cache those results. However, we don't necessarily want to cache all
+ # occurrences into some obscenely far-in-the-future date, so we cap the caching
+ # period. Searches beyond this period will always be relatively expensive for
+ # resources with occurrences beyond this period.
+ if expand > (datetime.date.today() +
+ datetime.timedelta(days=config.FreeBusyIndexExpandMaxDays)):
raise IndexedSearchException()
+ # Always do recurrence expansion even if we do not intend to index - we need this to double-check the
+ # validity of the iCalendar recurrence data.
try:
instances = calendar.expandTimeRanges(expand, ignoreInvalidInstances=reCreate)
+ recurrenceLimit = instances.limit
except InvalidOverriddenInstanceError, e:
log.err("Invalid instance %s when indexing %s in %s" % (e.rid, name, self.resource,))
raise
+ # Now coerce indexing to off if needed
+ if not doInstanceIndexing:
+ instances = None
+ recurrenceLimit = datetime.datetime(1900, 1, 1, 0, 0, 0, tzinfo=utc)
+
self._delete_from_db(name, uid, False)
# Add RESOURCE item
@@ -685,7 +693,7 @@
"""
insert into RESOURCE (NAME, UID, TYPE, RECURRANCE_MAX, ORGANIZER)
values (:1, :2, :3, :4, :5)
- """, name, uid, calendar.resourceType(), instances.limit, organizer
+ """, name, uid, calendar.resourceType(), recurrenceLimit, organizer
)
resourceid = self.lastrowid
@@ -709,58 +717,59 @@
peruserid = self.lastrowid
useruidmap[useruid] = peruserid
- for key in instances:
- instance = instances[key]
- start = instance.start.replace(tzinfo=utc)
- end = instance.end.replace(tzinfo=utc)
- float = 'Y' if instance.start.tzinfo is None else 'N'
- transp = 'T' if instance.component.propertyValue("TRANSP") == "TRANSPARENT" else 'F'
- self._db_execute(
- """
- insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
- values (:1, :2, :3, :4, :5, :6)
- """,
- resourceid,
- float,
- start,
- end,
- icalfbtype_to_indexfbtype.get(instance.component.getFBType(), 'F'),
- transp
- )
- instanceid = self.lastrowid
- peruserdata = calendar.perUserTransparency(instance.rid)
- for useruid, transp in peruserdata:
- peruserid = useruidmap[useruid]
+ if doInstanceIndexing:
+ for key in instances:
+ instance = instances[key]
+ start = instance.start.replace(tzinfo=utc)
+ end = instance.end.replace(tzinfo=utc)
+ float = 'Y' if instance.start.tzinfo is None else 'N'
+ transp = 'T' if instance.component.propertyValue("TRANSP") == "TRANSPARENT" else 'F'
self._db_execute(
"""
- insert into TRANSPARENCY (PERUSERID, INSTANCEID, TRANSPARENT)
- values (:1, :2, :3)
- """, peruserid, instanceid, 'T' if transp else 'F'
+ insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
+ values (:1, :2, :3, :4, :5, :6)
+ """,
+ resourceid,
+ float,
+ start,
+ end,
+ icalfbtype_to_indexfbtype.get(instance.component.getFBType(), 'F'),
+ transp
)
-
-
- # Special - for unbounded recurrence we insert a value for "infinity"
- # that will allow an open-ended time-range to always match it.
- if calendar.isRecurringUnbounded():
- start = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
- end = datetime.datetime(2100, 1, 1, 1, 0, 0, tzinfo=utc)
- float = 'N'
- self._db_execute(
- """
- insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
- values (:1, :2, :3, :4, :5, :6)
- """, resourceid, float, start, end, '?', '?'
- )
- instanceid = self.lastrowid
- peruserdata = calendar.perUserTransparency(None)
- for useruid, transp in peruserdata:
- peruserid = useruidmap[useruid]
+ instanceid = self.lastrowid
+ peruserdata = calendar.perUserTransparency(instance.rid)
+ for useruid, transp in peruserdata:
+ peruserid = useruidmap[useruid]
+ self._db_execute(
+ """
+ insert into TRANSPARENCY (PERUSERID, INSTANCEID, TRANSPARENT)
+ values (:1, :2, :3)
+ """, peruserid, instanceid, 'T' if transp else 'F'
+ )
+
+
+ # Special - for unbounded recurrence we insert a value for "infinity"
+ # that will allow an open-ended time-range to always match it.
+ if calendar.isRecurringUnbounded():
+ start = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
+ end = datetime.datetime(2100, 1, 1, 1, 0, 0, tzinfo=utc)
+ float = 'N'
self._db_execute(
"""
- insert into TRANSPARENCY (PERUSERID, INSTANCEID, TRANSPARENT)
- values (:1, :2, :3)
- """, peruserid, instanceid, 'T' if transp else 'F'
+ insert into TIMESPAN (RESOURCEID, FLOAT, START, END, FBTYPE, TRANSPARENT)
+ values (:1, :2, :3, :4, :5, :6)
+ """, resourceid, float, start, end, '?', '?'
)
+ instanceid = self.lastrowid
+ peruserdata = calendar.perUserTransparency(None)
+ for useruid, transp in peruserdata:
+ peruserid = useruidmap[useruid]
+ self._db_execute(
+ """
+ insert into TRANSPARENCY (PERUSERID, INSTANCEID, TRANSPARENT)
+ values (:1, :2, :3)
+ """, peruserid, instanceid, 'T' if transp else 'F'
+ )
self._db_execute(
"""
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/config-separation/txdav/caldav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/caldav/datastore/index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/index_file.py:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/index_file.py:6369-6445
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/index.py:6322-6394
+ /CalendarServer/branches/config-separation/txdav/caldav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/caldav/datastore/index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/index.py:6322-6394
/CalendarServer/trunk/txdav/caldav/datastore/index_file.py:6700-7192
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/scheduling.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/scheduling.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/scheduling.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -107,8 +107,14 @@
else:
returnValue(None)
+ def hasCalendarResourceUIDSomewhereElse(self, uid, ok_object, type):
+ return self._calendarHome.hasCalendarResourceUIDSomewhereElse(uid, ok_object, type)
+ def getCalendarResourcesForUID(self, uid, allow_shared=False):
+ return self._calendarHome.getCalendarResourcesForUID(uid, allow_shared)
+
+
class ImplicitCalendarObject(object):
implements(ICalendarObject)
def setComponent(self, component): ""
@@ -124,7 +130,10 @@
class ImplicitCalendar(FancyEqMixin,
proxyForInterface(ICalendar, "_subCalendar")):
- compareAttributes = ['_subCalendar', '_parentHome']
+ compareAttributes = (
+ "_subCalendar",
+ "_parentHome",
+ )
def __init__(self, parentHome, subCalendar):
self._parentHome = parentHome
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -37,9 +37,12 @@
from twistedcaldav import caldavxml, customxml
from twistedcaldav.caldavxml import ScheduleCalendarTransp, Opaque
-from twistedcaldav.dateops import normalizeForIndex, datetimeMktime
+from twistedcaldav.config import config
+from twistedcaldav.dateops import normalizeForIndex, datetimeMktime,\
+ parseSQLTimestamp
from twistedcaldav.ical import Component
from twistedcaldav.instance import InvalidOverriddenInstanceError
+from twistedcaldav.memcacher import Memcacher
from txdav.base.propertystore.base import PropertyName
from txdav.caldav.datastore.util import validateCalendarComponent,\
@@ -53,8 +56,17 @@
SQLLegacyCalendarShares, PostgresLegacyInboxIndexEmulator
from txdav.common.datastore.sql_tables import CALENDAR_TABLE,\
CALENDAR_BIND_TABLE, CALENDAR_OBJECT_REVISIONS_TABLE, CALENDAR_OBJECT_TABLE,\
- _ATTACHMENTS_MODE_WRITE, CALENDAR_HOME_TABLE, CALENDAR_HOME_METADATA_TABLE,\
- CALENDAR_AND_CALENDAR_BIND, CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE
+ _ATTACHMENTS_MODE_NONE, _ATTACHMENTS_MODE_READ, _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
+from twext.enterprise.dal.syntax import Select
+from twext.enterprise.dal.syntax import Insert
+from twext.enterprise.dal.syntax import Update
+from twext.enterprise.dal.syntax import Delete
+from twext.enterprise.dal.syntax import Parameter
+from twext.enterprise.dal.syntax import utcNowSQL
+from twext.enterprise.dal.syntax import Len
from txdav.common.icommondatastore import IndexedSearchException
from vobject.icalendar import utc
@@ -67,17 +79,28 @@
implements(ICalendarHome)
+ # structured tables. (new, preferred)
+ _homeSchema = schema.CALENDAR_HOME
+ _bindSchema = schema.CALENDAR_BIND
+ _homeMetaDataSchema = schema.CALENDAR_HOME_METADATA
+ _revisionsSchema = schema.CALENDAR_OBJECT_REVISIONS
+ _objectSchema = schema.CALENDAR_OBJECT
+
+ # string mappings (old, removing)
_homeTable = CALENDAR_HOME_TABLE
_homeMetaDataTable = CALENDAR_HOME_METADATA_TABLE
_childTable = CALENDAR_TABLE
_bindTable = CALENDAR_BIND_TABLE
+ _objectBindTable = CALENDAR_OBJECT_AND_BIND_TABLE
_notifierPrefix = "CalDAV"
_revisionsTable = CALENDAR_OBJECT_REVISIONS_TABLE
- def __init__(self, transaction, ownerUID, notifier):
+ _cacher = Memcacher("SQL.calhome", pickle=True, key_normalization=False)
+ def __init__(self, transaction, ownerUID, notifiers):
+
self._childClass = Calendar
- super(CalendarHome, self).__init__(transaction, ownerUID, notifier)
+ super(CalendarHome, self).__init__(transaction, ownerUID, notifiers)
self._shares = SQLLegacyCalendarShares(self)
createCalendarWithName = CommonHome.createChildWithName
@@ -89,18 +112,70 @@
@inlineCallbacks
+ def hasCalendarResourceUIDSomewhereElse(self, uid, ok_object, type):
+
+ objectResources = (yield self.objectResourcesWithUID(uid, ("inbox",)))
+ for objectResource in objectResources:
+ if ok_object and objectResource._resourceID == ok_object._resourceID:
+ continue
+ matched_type = "schedule" if objectResource.isScheduleObject else "calendar"
+ if type == "schedule" or matched_type == "schedule":
+ returnValue(True)
+
+ returnValue(False)
+
+ @inlineCallbacks
+ def getCalendarResourcesForUID(self, uid, allow_shared=False):
+
+ results = []
+ objectResources = (yield self.objectResourcesWithUID(uid, ("inbox",)))
+ for objectResource in objectResources:
+ if allow_shared or objectResource._parentCollection._owned:
+ results.append(objectResource)
+
+ returnValue(results)
+
+
+ @inlineCallbacks
def calendarObjectWithDropboxID(self, dropboxID):
"""
- Implement lookup with brute-force scanning.
+ Implement lookup via queries.
"""
- for calendar in (yield self.calendars()):
- for calendarObject in (yield calendar.calendarObjects()):
- dbid = yield calendarObject.dropboxID()
- if dropboxID == dbid:
- returnValue(calendarObject)
+ co = schema.CALENDAR_OBJECT
+ cb = schema.CALENDAR_BIND
+ rows = (yield Select(
+ [co.PARENT_RESOURCE_ID,
+ co.RESOURCE_ID],
+ From=co.join(cb, co.PARENT_RESOURCE_ID == cb.RESOURCE_ID,
+ 'left outer'),
+ Where=(co.DROPBOX_ID == dropboxID).And(
+ cb.HOME_RESOURCE_ID == self._resourceID)
+ ).on(self._txn))
+ if rows:
+ calendarID, objectID = rows[0]
+ calendar = (yield self.childWithID(calendarID))
+ if calendar:
+ calendarObject = (yield calendar.objectResourceWithID(objectID))
+ returnValue(calendarObject)
+ returnValue(None)
+
@inlineCallbacks
+ def getAllDropboxIDs(self):
+ co = schema.CALENDAR_OBJECT
+ cb = schema.CALENDAR_BIND
+ rows = (yield Select(
+ [co.DROPBOX_ID],
+ From=co.join(cb, co.PARENT_RESOURCE_ID == cb.RESOURCE_ID),
+ Where=(co.DROPBOX_ID != None).And(
+ cb.HOME_RESOURCE_ID == self._resourceID),
+ OrderBy=co.DROPBOX_ID
+ ).on(self._txn))
+ returnValue([row[0] for row in rows])
+
+
+ @inlineCallbacks
def createdHome(self):
defaultCal = yield self.createCalendarWithName("calendar")
props = defaultCal.properties()
@@ -116,6 +191,13 @@
"""
implements(ICalendar)
+ # structured tables. (new, preferred)
+ _bindSchema = schema.CALENDAR_BIND
+ _homeChildSchema = schema.CALENDAR
+ _revisionsSchema = schema.CALENDAR_OBJECT_REVISIONS
+ _objectSchema = schema.CALENDAR_OBJECT
+
+ # string mappings (old, removing)
_bindTable = CALENDAR_BIND_TABLE
_homeChildTable = CALENDAR_TABLE
_homeChildBindTable = CALENDAR_AND_CALENDAR_BIND
@@ -123,7 +205,7 @@
_revisionsBindTable = CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE
_objectTable = CALENDAR_OBJECT_TABLE
- def __init__(self, home, name, resourceID):
+ def __init__(self, home, name, resourceID, owned):
"""
Initialize a calendar pointing at a record in a database.
@@ -133,7 +215,7 @@
@param home: the home containing this calendar.
@type home: L{CalendarHome}
"""
- super(Calendar, self).__init__(home, name, resourceID)
+ super(Calendar, self).__init__(home, name, resourceID, owned)
if name == 'inbox':
self._index = PostgresLegacyInboxIndexEmulator(self)
@@ -167,6 +249,13 @@
raise NotImplementedError()
+ def objectResourcesHaveProperties(self):
+ """
+ inbox resources need to store Originator, Recipient etc properties.
+ Other calendars do not have object resources with properties.
+ """
+ return self._name == "inbox"
+
def initPropertyStore(self, props):
# Setup peruser special properties
props.setSpecialProperties(
@@ -186,30 +275,6 @@
"""
return MimeType.fromString("text/calendar; charset=utf-8")
-#
-# Duration into the future through which recurrences are expanded in the index
-# by default. This is a caching parameter which affects the size of the index;
-# it does not affect search results beyond this period, but it may affect
-# performance of such a search.
-#
-default_future_expansion_duration = datetime.timedelta(days=365 * 1)
-
-#
-# Maximum duration into the future through which recurrences are expanded in the
-# index. This is a caching parameter which affects the size of the index; it
-# does not affect search results beyond this period, but it may affect
-# performance of such a search.
-#
-# When a search is performed on a time span that goes beyond that which is
-# expanded in the index, we have to open each resource which may have data in
-# that time period. In order to avoid doing that multiple times, we want to
-# cache those results. However, we don't necessarily want to cache all
-# occurrences into some obscenely far-in-the-future date, so we cap the caching
-# period. Searches beyond this period will always be relatively expensive for
-# resources with occurrences beyond this period.
-#
-maximum_future_expansion_duration = datetime.timedelta(days=365 * 5)
-
icalfbtype_to_indexfbtype = {
"UNKNOWN" : 0,
"FREE" : 1,
@@ -244,10 +309,11 @@
implements(ICalendarObject)
_objectTable = CALENDAR_OBJECT_TABLE
+ _objectSchema = schema.CALENDAR_OBJECT
- def __init__(self, calendar, name, uid, metadata=None):
+ def __init__(self, calendar, name, uid, resourceID=None, metadata=None):
- super(CalendarObject, self).__init__(calendar, name, uid)
+ super(CalendarObject, self).__init__(calendar, name, uid, resourceID)
if metadata is None:
metadata = {}
@@ -258,38 +324,36 @@
self.hasPrivateComment = metadata.get("hasPrivateComment", False)
- @classmethod
- def _selectAllColumns(cls):
- """
- Full set of columns in the object table that need to be loaded to
- initialize the object resource state.
- """
- return """
- select
- %(column_RESOURCE_ID)s,
- %(column_RESOURCE_NAME)s,
- %(column_UID)s,
- %(column_MD5)s,
- character_length(%(column_TEXT)s),
- %(column_ACCESS)s,
- %(column_SCHEDULE_OBJECT)s,
- %(column_SCHEDULE_TAG)s,
- %(column_SCHEDULE_ETAGS)s,
- %(column_PRIVATE_COMMENTS)s,
- %(column_CREATED)s,
- %(column_MODIFIED)s
- """ % cls._objectTable
+ _allColumns = [
+ _objectSchema.RESOURCE_ID,
+ _objectSchema.RESOURCE_NAME,
+ _objectSchema.UID,
+ _objectSchema.MD5,
+ Len(_objectSchema.TEXT),
+ _objectSchema.ATTACHMENTS_MODE,
+ _objectSchema.DROPBOX_ID,
+ _objectSchema.ACCESS,
+ _objectSchema.SCHEDULE_OBJECT,
+ _objectSchema.SCHEDULE_TAG,
+ _objectSchema.SCHEDULE_ETAGS,
+ _objectSchema.PRIVATE_COMMENTS,
+ _objectSchema.CREATED,
+ _objectSchema.MODIFIED
+ ]
+
def _initFromRow(self, row):
"""
- Given a select result using the columns from L{_selectAllColumns}, initialize
- the object resource state.
+ Given a select result using the columns from L{_allColumns}, initialize
+ the calendar object resource state.
"""
(self._resourceID,
self._name,
self._uid,
self._md5,
self._size,
+ self._attachment,
+ self._dropboxID,
self._access,
self._schedule_object,
self._schedule_tag,
@@ -298,6 +362,7 @@
self._created,
self._modified,) = tuple(row)
+
@property
def _calendar(self):
return self._parentCollection
@@ -310,8 +375,6 @@
@inlineCallbacks
def setComponent(self, component, inserting=False):
- old_size = 0 if inserting else self.size()
-
validateCalendarComponent(self, self._calendar, component, inserting)
yield self.updateDatabase(component, inserting=inserting)
@@ -320,14 +383,12 @@
else:
yield self._calendar._updateRevision(self._name)
- # Adjust quota
- yield self._calendar._home.adjustQuotaUsedBytes(self.size() - old_size)
-
self._calendar.notifyChanged()
@inlineCallbacks
- def updateDatabase(self, component, expand_until=None, reCreate=False, inserting=False):
+ def updateDatabase(self, component,
+ expand_until=None, reCreate=False, inserting=False):
"""
Update the database tables for the new data being written.
@@ -336,203 +397,212 @@
"""
# Decide how far to expand based on the component
+ doInstanceIndexing = False
master = component.masterComponent()
- if master is None or not component.isRecurring() and not component.isRecurringUnbounded():
- # When there is no master we have a set of overridden components - index them all.
+ if ( master is None or not component.isRecurring()
+ and not component.isRecurringUnbounded() ):
+ # When there is no master we have a set of overridden components -
+ # index them all.
# When there is one instance - index it.
# When bounded - index all.
expand = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
+ doInstanceIndexing = True
else:
- if expand_until:
+
+ # If migrating or re-creating or config option for delayed indexing is off, always index
+ if reCreate or self._txn._migrating or not config.FreeBusyIndexDelayedExpand:
+ doInstanceIndexing = True
+
+ # Duration into the future through which recurrences are expanded in the index
+ # by default. This is a caching parameter which affects the size of the index;
+ # it does not affect search results beyond this period, but it may affect
+ # performance of such a search.
+ expand = (datetime.date.today() +
+ datetime.timedelta(days=config.FreeBusyIndexExpandAheadDays))
+
+ if expand_until and expand_until > expand:
expand = expand_until
- else:
- expand = datetime.date.today() + default_future_expansion_duration
- if expand > (datetime.date.today() + maximum_future_expansion_duration):
+ # Maximum duration into the future through which recurrences are expanded in the
+ # index. This is a caching parameter which affects the size of the index; it
+ # does not affect search results beyond this period, but it may affect
+ # performance of such a search.
+ #
+ # When a search is performed on a time span that goes beyond that which is
+ # expanded in the index, we have to open each resource which may have data in
+ # that time period. In order to avoid doing that multiple times, we want to
+ # cache those results. However, we don't necessarily want to cache all
+ # occurrences into some obscenely far-in-the-future date, so we cap the caching
+ # period. Searches beyond this period will always be relatively expensive for
+ # resources with occurrences beyond this period.
+ if expand > (datetime.date.today() +
+ datetime.timedelta(days=config.FreeBusyIndexExpandMaxDays)):
raise IndexedSearchException
+ # Always do recurrence expansion even if we do not intend to index - we need this to double-check the
+ # validity of the iCalendar recurrence data.
try:
instances = component.expandTimeRanges(expand, ignoreInvalidInstances=reCreate)
+ recurrenceLimit = instances.limit
except InvalidOverriddenInstanceError, e:
- self.log_error("Invalid instance %s when indexing %s in %s" % (e.rid, self._name, self._calendar,))
-
+ self.log_error("Invalid instance %s when indexing %s in %s" %
+ (e.rid, self._name, self._calendar,))
+
if self._txn._migrating:
# TODO: fix the data here by re-writing component then re-index
instances = component.expandTimeRanges(expand, ignoreInvalidInstances=True)
+ recurrenceLimit = instances.limit
else:
raise
- componentText = str(component)
- self._objectText = componentText
- organizer = component.getOrganizer()
- if not organizer:
- organizer = ""
+ # Now coerce indexing to off if needed
+ if not doInstanceIndexing:
+ instances = None
+ recurrenceLimit = datetime.datetime(1900, 1, 1, 0, 0, 0, tzinfo=utc)
+
+ co = schema.CALENDAR_OBJECT
+ tr = schema.TIME_RANGE
+ tpy = schema.TRANSPARENCY
- # CALENDAR_OBJECT table update
- self._md5 = hashlib.md5(componentText).hexdigest()
- self._size = len(componentText)
- if inserting:
- self._resourceID, self._created, self._modified = (
- yield self._txn.execSQL(
- """
- insert into CALENDAR_OBJECT
- (CALENDAR_RESOURCE_ID, RESOURCE_NAME, ICALENDAR_TEXT, ICALENDAR_UID, ICALENDAR_TYPE,
- ATTACHMENTS_MODE, ORGANIZER, RECURRANCE_MAX, ACCESS, SCHEDULE_OBJECT, SCHEDULE_TAG,
- SCHEDULE_ETAGS, PRIVATE_COMMENTS, MD5)
- values
- (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
- returning
- RESOURCE_ID,
- CREATED,
- MODIFIED
- """,
- # FIXME: correct ATTACHMENTS_MODE based on X-APPLE-
- # DROPBOX
- [
- self._calendar._resourceID,
- self._name,
- componentText,
- component.resourceUID(),
- component.resourceType(),
- _ATTACHMENTS_MODE_WRITE,
- organizer,
- normalizeForIndex(instances.limit) if instances.limit else None,
- self._access,
- self._schedule_object,
- self._schedule_tag,
- self._schedule_etags,
- self._private_comments,
- self._md5,
- ]
- ))[0]
+ # Do not update if reCreate (re-indexing - we don't want to re-write data
+ # or cause modified to change)
+ if not reCreate:
+ componentText = str(component)
+ self._objectText = componentText
+ organizer = component.getOrganizer()
+ if not organizer:
+ organizer = ""
+
+ # CALENDAR_OBJECT table update
+ self._uid = component.resourceUID()
+ self._md5 = hashlib.md5(componentText).hexdigest()
+ self._size = len(componentText)
+
+ # 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())
+
+ values = {
+ co.CALENDAR_RESOURCE_ID : self._calendar._resourceID,
+ co.RESOURCE_NAME : self._name,
+ co.ICALENDAR_TEXT : componentText,
+ co.ICALENDAR_UID : self._uid,
+ co.ICALENDAR_TYPE : component.resourceType(),
+ co.ATTACHMENTS_MODE : self._attachment,
+ co.DROPBOX_ID : self._dropboxID,
+ co.ORGANIZER : organizer,
+ co.RECURRANCE_MAX :
+ normalizeForIndex(recurrenceLimit) if recurrenceLimit else None,
+ co.ACCESS : self._access,
+ co.SCHEDULE_OBJECT : self._schedule_object,
+ co.SCHEDULE_TAG : self._schedule_tag,
+ co.SCHEDULE_ETAGS : self._schedule_etags,
+ co.PRIVATE_COMMENTS : self._private_comments,
+ co.MD5 : self._md5
+ }
+
+ if inserting:
+ self._resourceID, self._created, self._modified = (
+ yield Insert(
+ values,
+ Return=(co.RESOURCE_ID, co.CREATED, co.MODIFIED)
+ ).on(self._txn)
+ )[0]
+ else:
+ values[co.MODIFIED] = utcNowSQL
+ self._modified = (
+ yield Update(
+ values, Return=co.MODIFIED,
+ Where=co.RESOURCE_ID == self._resourceID
+ ).on(self._txn)
+ )[0][0]
+ # Need to wipe the existing time-range for this and rebuild
+ yield Delete(
+ From=tr,
+ Where=tr.CALENDAR_OBJECT_RESOURCE_ID == self._resourceID
+ ).on(self._txn)
else:
- yield self._txn.execSQL(
- """
- update CALENDAR_OBJECT set
- (ICALENDAR_TEXT, ICALENDAR_UID, ICALENDAR_TYPE, ATTACHMENTS_MODE,
- ORGANIZER, RECURRANCE_MAX, ACCESS, SCHEDULE_OBJECT, SCHEDULE_TAG,
- SCHEDULE_ETAGS, PRIVATE_COMMENTS, MD5, MODIFIED)
- =
- (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, timezone('UTC', CURRENT_TIMESTAMP))
- where RESOURCE_ID = %s
- returning MODIFIED
- """,
- # should really be filling out more fields: ORGANIZER,
- # ORGANIZER_OBJECT, a correct ATTACHMENTS_MODE based on X-APPLE-
- # DROPBOX
- [
- componentText,
- component.resourceUID(),
- component.resourceType(),
- _ATTACHMENTS_MODE_WRITE,
- organizer,
- normalizeForIndex(instances.limit) if instances.limit else None,
- self._access,
- self._schedule_object,
- self._schedule_tag,
- self._schedule_etags,
- self._private_comments,
- self._md5,
- self._resourceID,
- ]
- )
-
+ values = {
+ co.RECURRANCE_MAX :
+ normalizeForIndex(recurrenceLimit) if recurrenceLimit else None,
+ }
+
+ yield Update(
+ values,
+ Where=co.RESOURCE_ID == self._resourceID
+ ).on(self._txn)
+
# Need to wipe the existing time-range for this and rebuild
- yield self._txn.execSQL(
- """
- delete from TIME_RANGE where CALENDAR_OBJECT_RESOURCE_ID = %s
- """,
- [
- self._resourceID,
- ],
- )
- self._uid = component.resourceUID()
+ yield Delete(
+ From=tr,
+ Where=tr.CALENDAR_OBJECT_RESOURCE_ID == self._resourceID
+ ).on(self._txn)
+ if doInstanceIndexing:
+ # TIME_RANGE table update
+ for key in instances:
+ instance = instances[key]
+ start = instance.start.replace(tzinfo=utc)
+ end = instance.end.replace(tzinfo=utc)
+ float = instance.start.tzinfo is None
+ transp = instance.component.propertyValue("TRANSP") == "TRANSPARENT"
+ instanceid = (yield Insert({
+ tr.CALENDAR_RESOURCE_ID : self._calendar._resourceID,
+ tr.CALENDAR_OBJECT_RESOURCE_ID : self._resourceID,
+ tr.FLOATING : float,
+ tr.START_DATE : start,
+ tr.END_DATE : end,
+ tr.FBTYPE :
+ icalfbtype_to_indexfbtype.get(
+ instance.component.getFBType(),
+ icalfbtype_to_indexfbtype["FREE"]),
+ tr.TRANSPARENT : transp,
+ }, Return=tr.INSTANCE_ID).on(self._txn))[0][0]
+ peruserdata = component.perUserTransparency(instance.rid)
+ for useruid, transp in peruserdata:
+ (yield Insert({
+ tpy.TIME_RANGE_INSTANCE_ID : instanceid,
+ tpy.USER_ID : useruid,
+ tpy.TRANSPARENT : transp,
+ }).on(self._txn))
+
+ # Special - for unbounded recurrence we insert a value for "infinity"
+ # that will allow an open-ended time-range to always match it.
+ if component.isRecurringUnbounded():
+ start = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
+ end = datetime.datetime(2100, 1, 1, 1, 0, 0, tzinfo=utc)
+ float = False
+ transp = True
+ instanceid = (yield Insert({
+ tr.CALENDAR_RESOURCE_ID : self._calendar._resourceID,
+ tr.CALENDAR_OBJECT_RESOURCE_ID : self._resourceID,
+ tr.FLOATING : float,
+ tr.START_DATE : start,
+ tr.END_DATE : end,
+ tr.FBTYPE :
+ icalfbtype_to_indexfbtype["UNKNOWN"],
+ tr.TRANSPARENT : transp,
+ }, Return=tr.INSTANCE_ID).on(self._txn))[0][0]
+ peruserdata = component.perUserTransparency(None)
+ for useruid, transp in peruserdata:
+ (yield Insert({
+ tpy.TIME_RANGE_INSTANCE_ID : instanceid,
+ tpy.USER_ID : useruid,
+ tpy.TRANSPARENT : transp,
+ }).on(self._txn))
- # CALENDAR_OBJECT table update
- for key in instances:
- instance = instances[key]
- start = instance.start.replace(tzinfo=utc)
- end = instance.end.replace(tzinfo=utc)
- float = instance.start.tzinfo is None
- transp = instance.component.propertyValue("TRANSP") == "TRANSPARENT"
- instanceid = (yield self._txn.execSQL(
- """
- insert into TIME_RANGE
- (CALENDAR_RESOURCE_ID, CALENDAR_OBJECT_RESOURCE_ID, FLOATING, START_DATE, END_DATE, FBTYPE, TRANSPARENT)
- values
- (%s, %s, %s, %s, %s, %s, %s)
- returning
- INSTANCE_ID
- """,
- [
- self._calendar._resourceID,
- self._resourceID,
- float,
- start,
- end,
- icalfbtype_to_indexfbtype.get(instance.component.getFBType(), icalfbtype_to_indexfbtype["FREE"]),
- transp,
- ],
- ))[0][0]
- peruserdata = component.perUserTransparency(instance.rid)
- for useruid, transp in peruserdata:
- yield self._txn.execSQL(
- """
- insert into TRANSPARENCY
- (TIME_RANGE_INSTANCE_ID, USER_ID, TRANSPARENT)
- values
- (%s, %s, %s)
- """,
- [
- instanceid,
- useruid,
- transp,
- ],
- )
- # Special - for unbounded recurrence we insert a value for "infinity"
- # that will allow an open-ended time-range to always match it.
- if component.isRecurringUnbounded():
- start = datetime.datetime(2100, 1, 1, 0, 0, 0, tzinfo=utc)
- end = datetime.datetime(2100, 1, 1, 1, 0, 0, tzinfo=utc)
- float = False
- instanceid = (yield self._txn.execSQL(
- """
- insert into TIME_RANGE
- (CALENDAR_RESOURCE_ID, CALENDAR_OBJECT_RESOURCE_ID, FLOATING, START_DATE, END_DATE, FBTYPE, TRANSPARENT)
- values
- (%s, %s, %s, %s, %s, %s, %s)
- returning
- INSTANCE_ID
- """,
- [
- self._calendar._resourceID,
- self._resourceID,
- float,
- start,
- end,
- icalfbtype_to_indexfbtype["UNKNOWN"],
- True,
- ],
- ))[0][0]
- peruserdata = component.perUserTransparency(None)
- for useruid, transp in peruserdata:
- yield self._txn.execSQL(
- """
- insert into TRANSPARENCY
- (TIME_RANGE_INSTANCE_ID, USER_ID, TRANSPARENT)
- values
- (%s, %s, %s)
- """,
- [
- instanceid,
- useruid,
- transp,
- ],
- )
-
-
@inlineCallbacks
def component(self):
returnValue(VComponent.fromString((yield self.iCalendarText())))
@@ -546,6 +616,15 @@
returnValue((yield self.component()).getOrganizer())
+ def getMetadata(self):
+ metadata = {}
+ metadata["accessMode"] = self.accessMode
+ metadata["isScheduleObject"] = self.isScheduleObject
+ metadata["scheduleTag"] = self.scheduleTag
+ metadata["scheduleEtags"] = self.scheduleEtags
+ metadata["hasPrivateComment"] = self.hasPrivateComment
+ return metadata
+
def _get_accessMode(self):
return accesstype_to_accessMode[self._access]
@@ -587,77 +666,46 @@
hasPrivateComment = property(_get_hasPrivateComment, _set_hasPrivateComment)
@inlineCallbacks
- def createAttachmentWithName(self, name, contentType):
+ def createAttachmentWithName(self, name):
+
+ # We need to know the resource_ID of the home collection of the owner (not sharee)
+ # of this event
+ sharerHomeID = (yield self._parentCollection.sharerHomeID())
+ returnValue((yield Attachment.create(self._txn, self._dropboxID, name, sharerHomeID)))
- try:
- self._attachmentPathRoot().makedirs()
- except:
- pass
-
- attachment = Attachment(self, name)
- yield self._txn.execSQL(
- """
- insert into ATTACHMENT (CALENDAR_OBJECT_RESOURCE_ID, CONTENT_TYPE,
- SIZE, MD5, PATH) values (%s, %s, %s, %s, %s)
- """,
- [
- self._resourceID, generateContentType(contentType), 0, "",
- name,
- ]
- )
- returnValue(attachment.store(contentType))
-
-
@inlineCallbacks
def removeAttachmentWithName(self, name):
attachment = (yield self.attachmentWithName(name))
- old_size = attachment.size()
- self._txn.postCommit(attachment._path.remove)
- yield self._txn.execSQL(
- """
- delete from ATTACHMENT where CALENDAR_OBJECT_RESOURCE_ID = %s AND
- PATH = %s
- """, [self._resourceID, name]
- )
+ yield attachment.remove()
- # Adjust quota
- yield self._calendar._home.adjustQuotaUsedBytes(-old_size)
-
-
- @inlineCallbacks
def attachmentWithName(self, name):
- attachment = Attachment(self, name)
- attachment = (yield attachment.initFromStore())
- returnValue(attachment)
+ return Attachment.attachmentWithName(self._txn, self._dropboxID, name)
- @inlineCallbacks
def attendeesCanManageAttachments(self):
- returnValue((yield self.component()).hasPropertyInAnyComponent(
- "X-APPLE-DROPBOX"
- ))
+ return self._attachment == _ATTACHMENTS_MODE_WRITE
dropboxID = dropboxIDFromCalendarObject
- def _attachmentPathRoot(self):
- attachmentRoot = self._txn._store.attachmentsPath
-
- # Use directory hashing scheme based on owner user id
- homeName = self._calendar.ownerHome().name()
- return attachmentRoot.child(homeName[0:2]).child(homeName[2:4]).child(homeName).child(self.uid())
+ _attachmentsQuery = Select(
+ [schema.ATTACHMENT.PATH],
+ From=schema.ATTACHMENT,
+ Where=schema.ATTACHMENT.DROPBOX_ID == Parameter('dropboxID')
+ )
@inlineCallbacks
def attachments(self):
- rows = yield self._txn.execSQL(
- """
- select PATH from ATTACHMENT where CALENDAR_OBJECT_RESOURCE_ID = %s
- """, [self._resourceID])
- result = []
- for row in rows:
- result.append((yield self.attachmentWithName(row[0])))
- returnValue(result)
+ if self._dropboxID:
+ rows = yield self._attachmentsQuery.on(self._txn,
+ dropboxID=self._dropboxID)
+ result = []
+ for row in rows:
+ result.append((yield self.attachmentWithName(row[0])))
+ returnValue(result)
+ else:
+ returnValue(())
def initPropertyStore(self, props):
@@ -672,7 +720,7 @@
),
)
- # IDataStoreResource
+ # IDataStoreObject
def contentType(self):
"""
The content type of Calendar objects is text/calendar.
@@ -709,77 +757,126 @@
self.attachment._contentType = self.contentType
self.attachment._md5 = self.hash.hexdigest()
self.attachment._size = len(self.buf)
+ att = schema.ATTACHMENT
self.attachment._created, self.attachment._modified = map(
sqltime,
- (yield self._txn.execSQL(
- """
- update ATTACHMENT set CONTENT_TYPE = %s, SIZE = %s, MD5 = %s,
- MODIFIED = timezone('UTC', CURRENT_TIMESTAMP)
- where PATH = %s
- returning CREATED, MODIFIED
- """,
- [
- generateContentType(self.contentType),
- self.attachment._size,
- self.attachment._md5,
- self.attachment.name()
- ]
- ))[0]
+ (yield Update(
+ {
+ att.CONTENT_TYPE : generateContentType(self.contentType),
+ att.SIZE : self.attachment._size,
+ att.MD5 : self.attachment._md5,
+ att.MODIFIED : utcNowSQL
+ },
+ Where=att.PATH == self.attachment.name(),
+ Return=(att.CREATED, att.MODIFIED)).on(self._txn))[0]
)
- # Adjust quota
- yield self.attachment._calendarObject._calendar._home.adjustQuotaUsedBytes(self.attachment.size() - old_size)
+ home = (
+ yield self._txn.calendarHomeWithResourceID(
+ self.attachment._ownerHomeID))
+ if home:
+ # Adjust quota
+ yield home.adjustQuotaUsedBytes(self.attachment.size() - old_size)
+ # Send change notification to home
+ yield home.notifyChanged()
+
+
def sqltime(value):
- return datetimeMktime(datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:%S.%f"))
+ return datetimeMktime(parseSQLTimestamp(value))
class Attachment(object):
implements(IAttachment)
- def __init__(self, calendarObject, name):
- self._calendarObject = calendarObject
+ def __init__(self, txn, dropboxID, name, ownerHomeID=None):
+ self._txn = txn
+ self._dropboxID = dropboxID
self._name = name
+ self._ownerHomeID = ownerHomeID
self._size = 0
- @property
- def _txn(self):
- return self._calendarObject._txn
+ @classmethod
+ def _attachmentPathRoot(cls, txn, dropboxID):
+ attachmentRoot = txn._store.attachmentsPath
+ # Use directory hashing scheme based on MD5 of dropboxID
+ hasheduid = hashlib.md5(dropboxID).hexdigest()
+ return attachmentRoot.child(hasheduid[0:2]).child(
+ hasheduid[2:4]).child(hasheduid)
+
+ @classmethod
@inlineCallbacks
+ def create(cls, txn, dropboxID, name, ownerHomeID):
+
+ # File system paths need to exist
+ try:
+ cls._attachmentPathRoot(txn, dropboxID).makedirs()
+ except:
+ pass
+
+ # Now create the DB entry
+ attachment = cls(txn, dropboxID, name, ownerHomeID)
+ att = schema.ATTACHMENT
+ yield Insert({
+ att.CALENDAR_HOME_RESOURCE_ID : ownerHomeID,
+ att.DROPBOX_ID : dropboxID,
+ att.CONTENT_TYPE : "",
+ att.SIZE : 0,
+ att.MD5 : "",
+ att.PATH : name
+ }).on(txn)
+ returnValue(attachment)
+
+
+ @classmethod
+ @inlineCallbacks
+ def attachmentWithName(cls, txn, dropboxID, name):
+ attachment = Attachment(txn, dropboxID, name)
+ attachment = (yield attachment.initFromStore())
+ returnValue(attachment)
+
+
+ @inlineCallbacks
def initFromStore(self):
"""
Execute necessary SQL queries to retrieve attributes.
@return: C{True} if this attachment exists, C{False} otherwise.
"""
- rows = yield self._txn.execSQL(
- """
- select CONTENT_TYPE, SIZE, MD5, CREATED, MODIFIED from ATTACHMENT where PATH = %s
- """,
- [self._name]
- )
+ att = schema.ATTACHMENT
+ rows = (yield Select([att.CALENDAR_HOME_RESOURCE_ID, att.CONTENT_TYPE,
+ att.SIZE, att.MD5, att.CREATED, att.MODIFIED],
+ From=att,
+ Where=(att.DROPBOX_ID == self._dropboxID).And(
+ att.PATH == self._name)).on(self._txn))
if not rows:
returnValue(None)
- self._contentType = MimeType.fromString(rows[0][0])
- self._size = rows[0][1]
- self._md5 = rows[0][2]
- self._created = sqltime(rows[0][3])
- self._modified = sqltime(rows[0][4])
+ self._ownerHomeID = rows[0][0]
+ self._contentType = MimeType.fromString(rows[0][1])
+ self._size = rows[0][2]
+ self._md5 = rows[0][3]
+ self._created = sqltime(rows[0][4])
+ self._modified = sqltime(rows[0][5])
returnValue(self)
def name(self):
return self._name
+
@property
def _path(self):
- attachmentPath = self._calendarObject._attachmentPathRoot()
- return attachmentPath.child(self.name())
+ attachmentRoot = self._txn._store.attachmentsPath
+ # Use directory hashing scheme based on MD5 of dropboxID
+ hasheduid = hashlib.md5(self._dropboxID).hexdigest()
+ return attachmentRoot.child(hasheduid[0:2]).child(
+ hasheduid[2:4]).child(hasheduid).child(self.name())
+
def properties(self):
pass # stub
@@ -793,7 +890,29 @@
protocol.connectionLost(Failure(ConnectionLost()))
- # IDataStoreResource
+ _removeStatement = Delete(
+ From=schema.ATTACHMENT,
+ Where=(schema.ATTACHMENT.DROPBOX_ID == Parameter("dropboxID")).And(
+ schema.ATTACHMENT.PATH == Parameter("path")
+ ))
+
+
+ @inlineCallbacks
+ def remove(self):
+ old_size = self._size
+ self._txn.postCommit(self._path.remove)
+ yield self._removeStatement.on(self._txn, dropboxID=self._dropboxID,
+ path=self._name)
+ # Adjust quota
+ home = (yield self._txn.calendarHomeWithResourceID(self._ownerHomeID))
+ if home:
+ yield home.adjustQuotaUsedBytes(-old_size)
+
+ # Send change notification to home
+ yield home.notifyChanged()
+
+
+ # IDataStoreObject
def contentType(self):
return self._contentType
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/1.ics
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/1.ics 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/calendar_store/ho/me/home1/calendar_1/1.ics 2011-03-14 20:54:05 UTC (rev 7193)
@@ -32,6 +32,8 @@
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:20090324T121500
CREATED:20090326T145440Z
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -23,9 +23,16 @@
maybeDeferred
from twisted.internet.protocol import Protocol
-from txdav.idav import IPropertyStore, IDataStore, AlreadyFinishedError
+from twext.enterprise.ienterprise import AlreadyFinishedError
+
+from twext.python.filepath import CachingFilePath as FilePath
+from twext.web2.dav import davxml
+from twext.web2.http_headers import MimeType
+from twext.web2.dav.element.base import WebDAVUnknownElement
+from twext.python.vcomponent import VComponent
+
+from txdav.idav import IPropertyStore, IDataStore
from txdav.base.propertystore.base import PropertyName
-
from txdav.common.icommondatastore import HomeChildNameAlreadyExistsError, \
ICommonTransaction
from txdav.common.icommondatastore import InvalidObjectResourceError
@@ -39,11 +46,6 @@
ICalendarObject, ICalendarHome,
ICalendar, IAttachment, ICalendarTransaction)
-from twext.python.filepath import CachingFilePath as FilePath
-from twext.web2.dav import davxml
-from twext.web2.http_headers import MimeType
-from twext.web2.dav.element.base import WebDAVUnknownElement
-from twext.python.vcomponent import VComponent
from twistedcaldav.customxml import InviteNotification, InviteSummary
from twistedcaldav.ical import Component
@@ -150,12 +152,34 @@
L{txdav.caldav.icalendarstore}.
"""
+ metadata1 = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+ metadata2 = {
+ "accessMode": "PRIVATE",
+ "isScheduleObject": False,
+ "scheduleTag": "",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+ metadata3 = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": True,
+ }
+
requirements = {
"home1": {
"calendar_1": {
- "1.ics": cal1Root.child("1.ics").getContent(),
- "2.ics": cal1Root.child("2.ics").getContent(),
- "3.ics": cal1Root.child("3.ics").getContent()
+ "1.ics": (cal1Root.child("1.ics").getContent(), metadata1,),
+ "2.ics": (cal1Root.child("2.ics").getContent(), metadata2,),
+ "3.ics": (cal1Root.child("3.ics").getContent(), metadata3,),
},
"calendar_2": {},
"calendar_empty": {},
@@ -164,6 +188,7 @@
"not_a_home": None
}
+
def storeUnderTest(self):
"""
Subclasses must override this to return an L{ICommonDataStore} provider
@@ -277,6 +302,30 @@
@inlineCallbacks
+ def test_notificationSyncToken(self):
+ """
+ L{ICalendar.resourceNamesSinceToken} will return the names of calendar
+ objects changed or deleted since
+ """
+ txn = self.transactionUnderTest()
+ coll = yield txn.notificationsWithUID("home1")
+ invite1 = InviteNotification()
+ yield coll.writeNotificationObject("1", invite1, invite1.toxml())
+ st = yield coll.syncToken()
+ yield coll.writeNotificationObject("2", invite1, invite1.toxml())
+ rev = self.token2revision(st)
+ yield coll.removeNotificationObjectWithUID("1")
+ st2 = yield coll.syncToken()
+ rev2 = self.token2revision(st2)
+ changed, deleted = yield coll.resourceNamesSinceToken(rev)
+ self.assertEquals(set(changed), set(["2.xml"]))
+ self.assertEquals(set(deleted), set(["1.xml"]))
+ changed, deleted = yield coll.resourceNamesSinceToken(rev2)
+ self.assertEquals(set(changed), set([]))
+ self.assertEquals(set(deleted), set([]))
+
+
+ @inlineCallbacks
def test_replaceNotification(self):
"""
L{INotificationCollection.writeNotificationObject} will silently
@@ -294,13 +343,13 @@
abc = yield notifications.notificationObjectWithUID("abc")
self.assertEquals((yield abc.xmldata()), inviteNotification2.toxml())
+
@inlineCallbacks
def test_addRemoveNotification(self):
"""
L{INotificationCollection.writeNotificationObject} will silently
overwrite the notification object.
"""
-
# Prime the home collection first
yield self.transactionUnderTest().notificationsWithUID(
"home1"
@@ -343,6 +392,7 @@
]
)
+
@inlineCallbacks
def test_loadAllNotifications(self):
"""
@@ -365,8 +415,10 @@
"home1"
)
allObjects = yield notifications.notificationObjects()
- self.assertEqual([obj.uid() for obj in allObjects], ["abc", "def"])
+ self.assertEqual(set([obj.uid() for obj in allObjects]),
+ set(["abc", "def"]))
+
@inlineCallbacks
def test_notificationObjectMetaData(self):
"""
@@ -400,8 +452,22 @@
self.assertEquals(calendar.notifierID(), "CalDAV|home1")
self.assertEquals(calendar.notifierID(label="collection"), "CalDAV|home1/calendar_1")
+ @inlineCallbacks
+ def test_nodeNameSuccess(self):
+ home = yield self.homeUnderTest()
+ name = yield home.nodeName()
+ self.assertEquals(name, "/CalDAV/example.com/home1/")
@inlineCallbacks
+ def test_nodeNameFailure(self):
+ # The StubNodeCacher is set up to fail when the node name has the
+ # word "fail" in it, for testing the failure mode:
+ home = yield self.transactionUnderTest().calendarHomeWithUID("fail",
+ create=True)
+ name = yield home.nodeName()
+ self.assertEquals(name, None)
+
+ @inlineCallbacks
def test_calendarHomeWithUID_exists(self):
"""
Finding an existing calendar home by UID results in an object that
@@ -715,6 +781,38 @@
@inlineCallbacks
+ def test_hasCalendarResourceUIDSomewhereElse(self):
+ """
+ L{ICalendar.calendarObjects} will enumerate the calendar objects present
+ in the filesystem, in name order, but skip those with hidden names.
+ """
+ home = yield self.homeUnderTest()
+ object = yield self.calendarObjectUnderTest()
+ result = (yield home.hasCalendarResourceUIDSomewhereElse("123", object, "schedule"))
+ self.assertFalse(result)
+
+ result = (yield home.hasCalendarResourceUIDSomewhereElse("uid1", object, "schedule"))
+ self.assertFalse(result)
+
+ result = (yield home.hasCalendarResourceUIDSomewhereElse("uid2", object, "schedule"))
+ self.assertTrue(result)
+
+
+ @inlineCallbacks
+ def test_getCalendarResourcesForUID(self):
+ """
+ L{ICalendar.calendarObjects} will enumerate the calendar objects present
+ in the filesystem, in name order, but skip those with hidden names.
+ """
+ home = yield self.homeUnderTest()
+ calendarObjects = (yield home.getCalendarResourcesForUID("123"))
+ self.assertEquals(len(calendarObjects), 0)
+
+ calendarObjects = (yield home.getCalendarResourcesForUID("uid1"))
+ self.assertEquals(len(calendarObjects), 1)
+
+
+ @inlineCallbacks
def test_calendarObjectName(self):
"""
L{ICalendarObject.name} reflects the name of the calendar object.
@@ -728,8 +826,8 @@
@inlineCallbacks
def test_calendarObjectMetaData(self):
"""
- The objects retrieved from the calendar have a variou
- methods which return metadata values.
+ The objects retrieved from the calendar have a various methods which
+ return metadata values.
"""
calendar = yield self.calendarObjectUnderTest()
self.assertIsInstance(calendar.name(), basestring)
@@ -742,17 +840,17 @@
self.assertIsInstance(calendar.size(), int)
self.assertIsInstance(calendar.created(), int)
self.assertIsInstance(calendar.modified(), int)
-
- self.assertEqual(calendar.accessMode, "")
- self.assertEqual(calendar.isScheduleObject, False)
- self.assertEqual(calendar.scheduleEtags, ())
- self.assertEqual(calendar.hasPrivateComment, False)
-
+
+ self.assertEqual(calendar.accessMode, CommonTests.metadata1["accessMode"])
+ self.assertEqual(calendar.isScheduleObject, CommonTests.metadata1["isScheduleObject"])
+ self.assertEqual(calendar.scheduleEtags, CommonTests.metadata1["scheduleEtags"])
+ self.assertEqual(calendar.hasPrivateComment, CommonTests.metadata1["hasPrivateComment"])
+
calendar.accessMode = Component.ACCESS_PRIVATE
calendar.isScheduleObject = True
calendar.scheduleEtags = ("1234", "5678",)
calendar.hasPrivateComment = True
-
+
self.assertEqual(calendar.accessMode, Component.ACCESS_PRIVATE)
self.assertEqual(calendar.isScheduleObject, True)
self.assertEqual(calendar.scheduleEtags, ("1234", "5678",))
@@ -760,6 +858,24 @@
@inlineCallbacks
+ def test_usedQuotaAdjustment(self):
+ """
+ Adjust used quota on the calendar home and then verify that it's used.
+ """
+ home = yield self.homeUnderTest()
+ initialQuota = yield home.quotaUsedBytes()
+ yield home.adjustQuotaUsedBytes(30)
+ yield self.commit()
+ home2 = yield self.homeUnderTest()
+ afterQuota = yield home2.quotaUsedBytes()
+ self.assertEqual(afterQuota - initialQuota, 30)
+ yield home2.adjustQuotaUsedBytes(-100000)
+ yield self.commit()
+ home3 = yield self.homeUnderTest()
+ self.assertEqual((yield home3.quotaUsedBytes()), 0)
+
+
+ @inlineCallbacks
def test_component(self):
"""
L{ICalendarObject.component} returns a L{VComponent} describing the
@@ -899,10 +1015,18 @@
(yield calendar1.calendarObjectWithName(name)), None
)
component = VComponent.fromString(event4_text)
- yield calendar1.createCalendarObjectWithName(name, component)
+ metadata = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+ yield calendar1.createCalendarObjectWithName(name, component, metadata=metadata)
calendarObject = yield calendar1.calendarObjectWithName(name)
self.assertEquals((yield calendarObject.component()), component)
+ self.assertEquals((yield calendarObject.getMetadata()), metadata)
yield self.commit()
@@ -1093,34 +1217,36 @@
propertyContent.name = propertyName.name
propertyContent.namespace = propertyName.namespace
- (yield self.calendarObjectUnderTest()).properties()[
- propertyName] = propertyContent
- yield self.commit()
- # Sanity check; are properties even readable in a separate transaction?
- # Should probably be a separate test.
- self.assertEquals(
- (yield self.calendarObjectUnderTest()).properties()[propertyName],
- propertyContent)
- obj = yield self.calendarObjectUnderTest()
- event1_text = yield obj.iCalendarText()
- event1_text_withDifferentSubject = event1_text.replace(
- "SUMMARY:CalDAV protocol updates",
- "SUMMARY:Changed"
- )
- # Sanity check; make sure the test has the right idea of the subject.
- self.assertNotEquals(event1_text, event1_text_withDifferentSubject)
- newComponent = VComponent.fromString(event1_text_withDifferentSubject)
- yield obj.setComponent(newComponent)
+ calobject = (yield self.calendarObjectUnderTest())
+ if calobject._parentCollection.objectResourcesHaveProperties():
+ (yield self.calendarObjectUnderTest()).properties()[
+ propertyName] = propertyContent
+ yield self.commit()
+ # Sanity check; are properties even readable in a separate transaction?
+ # Should probably be a separate test.
+ self.assertEquals(
+ (yield self.calendarObjectUnderTest()).properties()[propertyName],
+ propertyContent)
+ obj = yield self.calendarObjectUnderTest()
+ event1_text = yield obj.iCalendarText()
+ event1_text_withDifferentSubject = event1_text.replace(
+ "SUMMARY:CalDAV protocol updates",
+ "SUMMARY:Changed"
+ )
+ # Sanity check; make sure the test has the right idea of the subject.
+ self.assertNotEquals(event1_text, event1_text_withDifferentSubject)
+ newComponent = VComponent.fromString(event1_text_withDifferentSubject)
+ yield obj.setComponent(newComponent)
+
+ # Putting everything into a separate transaction to account for any
+ # caching that may take place.
+ yield self.commit()
+ self.assertEquals(
+ (yield self.calendarObjectUnderTest()).properties()[propertyName],
+ propertyContent
+ )
- # Putting everything into a separate transaction to account for any
- # caching that may take place.
- yield self.commit()
- self.assertEquals(
- (yield self.calendarObjectUnderTest()).properties()[propertyName],
- propertyContent
- )
-
eventWithDropbox = "\r\n".join("""
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
@@ -1175,7 +1301,97 @@
self.assertEquals((yield obj.dropboxID()), "some-dropbox-id")
+ def token2revision(self, token):
+ """
+ FIXME: the API names for L{syncToken}() and L{resourceNamesSinceToken}()
+ are slightly inaccurate; one doesn't produce input for the other.
+ Actually it should be resource names since I{revision} and you need to
+ understand the structure of the tokens to extract the revision. Right
+ now that logic lives in the protocol layer, so this testing method
+ replicates it.
+ """
+ uuid, rev = token.split("#", 1)
+ rev = int(rev)
+ return rev
+
+
@inlineCallbacks
+ def test_simpleHomeSyncToken(self):
+ """
+ L{ICalendarHome.resourceNamesSinceToken} will return the names of
+ calendar objects created since L{ICalendarHome.syncToken} last returned
+ a particular value.
+ """
+ home = yield self.homeUnderTest()
+ cal = yield self.calendarUnderTest()
+ st = yield home.syncToken()
+ yield cal.createCalendarObjectWithName("new.ics", VComponent.fromString(
+ self.eventWithDropbox
+ )
+ )
+
+ yield cal.removeCalendarObjectWithName("2.ics")
+ yield home.createCalendarWithName("other-calendar")
+ st2 = yield home.syncToken()
+ self.failIfEquals(st, st2)
+
+ home = yield self.homeUnderTest()
+
+ changed, deleted = yield home.resourceNamesSinceToken(
+ self.token2revision(st), "depth_is_ignored")
+
+ self.assertEquals(set(changed), set(["calendar_1/new.ics",
+ "calendar_1/2.ics",
+ "other-calendar/"]))
+ self.assertEquals(set(deleted), set(["calendar_1/2.ics"]))
+
+ changed, deleted = yield home.resourceNamesSinceToken(
+ self.token2revision(st2), "depth_is_ignored")
+ self.assertEquals(changed, [])
+ self.assertEquals(deleted, [])
+
+
+ @inlineCallbacks
+ def test_collectionSyncToken(self):
+ """
+ L{ICalendar.resourceNamesSinceToken} will return the names of calendar
+ objects changed or deleted since
+ """
+ cal = yield self.calendarUnderTest()
+ st = yield cal.syncToken()
+ rev = self.token2revision(st)
+ yield cal.createCalendarObjectWithName("new.ics", VComponent.fromString(
+ self.eventWithDropbox
+ )
+ )
+ yield cal.removeCalendarObjectWithName("2.ics")
+ st2 = yield cal.syncToken()
+ rev2 = self.token2revision(st2)
+ changed, deleted = yield cal.resourceNamesSinceToken(rev)
+ self.assertEquals(set(changed), set(["new.ics"]))
+ self.assertEquals(set(deleted), set(["2.ics"]))
+ changed, deleted = yield cal.resourceNamesSinceToken(rev2)
+ self.assertEquals(set(changed), set([]))
+ self.assertEquals(set(deleted), set([]))
+
+
+ @inlineCallbacks
+ def test_dropboxIDs(self):
+ """
+ L{ICalendarObject.getAllDropboxIDs} returns a L{Deferred} that fires
+ with a C{list} of all Dropbox IDs.
+ """
+ home = yield self.homeUnderTest()
+ # The only item in the home which has an ATTACH or X-APPLE-DROPBOX
+ # property.
+ allDropboxIDs = set([
+ u'FE5CDC6F-7776-4607-83A9-B90FF7ACC8D0.dropbox',
+ ])
+ self.assertEquals(set((yield home.getAllDropboxIDs())),
+ allDropboxIDs)
+
+
+ @inlineCallbacks
def test_indexByDropboxProperty(self):
"""
L{ICalendarHome.calendarObjectWithDropboxID} will return a calendar
@@ -1203,9 +1419,10 @@
Common logic for attachment-creation tests.
"""
obj = yield self.calendarObjectUnderTest()
- t = yield obj.createAttachmentWithName(
- "new.attachment", MimeType("text", "x-fixture")
+ attachment = yield obj.createAttachmentWithName(
+ "new.attachment",
)
+ t = attachment.store(MimeType("text", "x-fixture"))
t.write("new attachment")
t.write(" text")
yield t.loseConnection()
@@ -1294,9 +1511,10 @@
L{ICalendarHome.calendarWithName} or L{ICalendarHome.calendars}.
"""
obj = yield self.calendarObjectUnderTest()
- t = yield obj.createAttachmentWithName(
- "new.attachment", MimeType("text", "plain")
+ attachment = yield obj.createAttachmentWithName(
+ "new.attachment",
)
+ t = attachment.store(MimeType("text", "plain"))
t.write("new attachment text")
yield t.loseConnection()
yield self.commit()
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -495,3 +495,23 @@
(yield self.homeUnderTest())._path.child(".foo").createDirectory()
yield self.test_calendarObjects()
+
+ def test_simpleHomeSyncToken(self):
+ """
+ File store doesn't have a functioning C{resourceNamesSinceToken} for
+ L{CalendarHome}.
+ """
+
+ test_simpleHomeSyncToken.skip = "Not in file store."
+
+ def test_calendarObjectMetaData(self):
+ pass
+ test_calendarObjectMetaData.skip = "Example file data has no xattrs"
+
+ def test_notificationSyncToken(self):
+ """
+ File store doesn't have a functioning C{resourceNamesSinceToken} for
+ L{Notifications}.
+ """
+
+ test_notificationSyncToken.skip = "Not in file store."
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All 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,11 +18,12 @@
from twisted.internet.task import deferLater
from txdav.caldav.datastore.index_file import Index, MemcachedUIDReserver
-from txdav.common.icommondatastore import ReservationError
+from txdav.common.icommondatastore import ReservationError,\
+ InternalDataStoreError
from twistedcaldav import caldavxml
from twistedcaldav.caldavxml import TimeRange
-from twistedcaldav.ical import Component
+from twistedcaldav.ical import Component, InvalidICalendarDataError
from twistedcaldav.instance import InvalidOverriddenInstanceError
from twistedcaldav.query import calendarqueryfilter
from twistedcaldav.test.util import InMemoryMemcacheProtocol
@@ -33,6 +34,30 @@
from twisted.internet.defer import inlineCallbacks
+class MinimalCalendarObjectReplacement(object):
+ """
+ Provide the minimal set of attributes and methods from CalDAVFile required
+ by L{Index}.
+ """
+
+ def __init__(self, filePath):
+ self.fp = filePath
+
+
+ def iCalendar(self):
+ text = self.fp.open().read()
+ try:
+ component = Component.fromString(text)
+ # Fix any bogus data we can
+ component.validateComponentsForCalDAV(False, fix=True)
+ except InvalidICalendarDataError, e:
+ raise InternalDataStoreError(
+ "File corruption detected (%s) in file: %s"
+ % (e, self._path.path)
+ )
+ return component
+
+
class MinimalResourceReplacement(object):
"""
Provide the minimal set of attributes and methods from CalDAVFile required
@@ -49,7 +74,7 @@
def getChild(self, name):
# FIXME: this should really return something with a child method
- return self.fp.child(name)
+ return MinimalCalendarObjectReplacement(self.fp.child(name))
def initSyncToken(self):
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/config-separation/txdav/caldav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/caldav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/test/test_index_file.py:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/test/test_index_file.py:6369-6445
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_index.py:6322-6394
+ /CalendarServer/branches/config-separation/txdav/caldav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/caldav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/caldav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/caldav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/caldav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/caldav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/caldav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/caldav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/caldav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/caldav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/caldav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/caldav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/caldav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/caldav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/caldav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/caldav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/caldav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/caldav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/oracle/txdav/caldav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/caldav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/caldav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/caldav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/caldav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/caldav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/caldav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/caldav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/caldav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/caldav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/caldav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/caldav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_index.py:6322-6394
/CalendarServer/trunk/txdav/caldav/datastore/test/test_index_file.py:6700-7192
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_scheduling.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_scheduling.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_scheduling.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -26,9 +26,8 @@
scheduling or data caching as middleware in the data-store layer.
"""
-from twisted.trial.unittest import TestCase
-from txdav.caldav.datastore.test.common import CommonTests
-from txdav.caldav.datastore.test.test_file import setUpCalendarStore
+from twisted.trial.unittest import TestCase, SkipTest
+from txdav.caldav.datastore.test.test_file import FileStorageTests
from txdav.caldav.datastore.scheduling import ImplicitStore
simpleEvent = """BEGIN:VCALENDAR
@@ -45,7 +44,7 @@
END:VCALENDAR
"""
-class ImplicitStoreTests(CommonTests, TestCase):
+class ImplicitStoreTests(FileStorageTests, TestCase):
"""
Tests for L{ImplicitSchedulingStore}.
"""
@@ -54,6 +53,12 @@
def storeUnderTest(self):
if self.implicitStore is None:
- setUpCalendarStore(self)
- self.implicitStore = ImplicitStore(self.calendarStore)
+ sut = FileStorageTests.storeUnderTest(self)
+ self.implicitStore = ImplicitStore(sut)
return self.implicitStore
+
+ def skipit(self):
+ raise SkipTest("No private attribute tests.")
+
+ test_calendarObjectsWithDotFile = skipit
+ test_init = skipit
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/test/test_sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,24 +19,32 @@
L{txdav.caldav.datastore.test.common}.
"""
-from twisted.trial import unittest
+from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.internet.task import deferLater
-from twisted.internet import reactor
+from twisted.python import hashlib
+from twisted.trial import unittest
+from twext.enterprise.dal.syntax import Select, Parameter
from twext.python.vcomponent import VComponent
from twext.web2.dav.element.rfc2518 import GETContentLanguage, ResourceType
-from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests
+from txdav.base.propertystore.base import PropertyName
+from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests,\
+ event4_text
+from txdav.caldav.datastore.test.test_file import setUpCalendarStore
+from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
from txdav.common.datastore.sql import ECALENDARTYPE
+from txdav.common.datastore.sql_tables import schema
from txdav.common.datastore.test.util import buildStore, populateCalendarsFrom
-from txdav.caldav.datastore.test.test_file import setUpCalendarStore
-from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
-from txdav.base.propertystore.base import PropertyName
+from twistedcaldav import memcacher, caldavxml
+from twistedcaldav.config import config
+from twistedcaldav.dateops import datetimeMktime
+from twistedcaldav.sharing import SharedCollectionRecord
+import datetime
-
class CalendarSQLStorageTests(CalendarCommonTests, unittest.TestCase):
"""
Calendar SQL storage tests.
@@ -44,6 +52,10 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(memcacher.Memcacher, "allowTestCache", True)
+
yield super(CalendarSQLStorageTests, self).setUp()
self._sqlCalendarStore = yield buildStore(self, self.notifierFactory)
yield self.populate()
@@ -120,9 +132,10 @@
attachmentRoot = (
yield self.calendarObjectUnderTest()
)._txn._store.attachmentsPath
- attachmentPath = attachmentRoot.child("ho").child("me").child("home1")
- attachmentPath = attachmentPath.child(
- (yield self.calendarObjectUnderTest()).uid()).child(
+ obj = yield self.calendarObjectUnderTest()
+ hasheduid = hashlib.md5(obj._dropboxID).hexdigest()
+ attachmentPath = attachmentRoot.child(
+ hasheduid[0:2]).child(hasheduid[2:4]).child(hasheduid).child(
"new.attachment")
self.assertTrue(attachmentPath.isfile())
@@ -365,3 +378,249 @@
yield d1
yield d2
+
+ @inlineCallbacks
+ def test_datetimes(self):
+ calendarStore = self._sqlCalendarStore
+
+ # Provision the home and calendar now
+ txn = calendarStore.newTransaction()
+ home = yield txn.homeWithUID(ECALENDARTYPE, "uid1", create=True)
+ cal = yield home.calendarWithName("calendar")
+ cal._created = "2011-02-05 11:22:47"
+ cal._modified = "2011-02-06 11:22:47"
+ self.assertEqual(cal.created(), datetimeMktime(datetime.datetime(2011, 2, 5, 11, 22, 47)))
+ self.assertEqual(cal.modified(), datetimeMktime(datetime.datetime(2011, 2, 6, 11, 22, 47)))
+
+ obj = yield self.calendarObjectUnderTest()
+ obj._created = "2011-02-07 11:22:47"
+ obj._modified = "2011-02-08 11:22:47"
+ self.assertEqual(obj.created(), datetimeMktime(datetime.datetime(2011, 2, 7, 11, 22, 47)))
+ self.assertEqual(obj.modified(), datetimeMktime(datetime.datetime(2011, 2, 8, 11, 22, 47)))
+
+ @inlineCallbacks
+ def test_notificationsProvisioningConcurrency(self):
+ """
+ Test that two concurrent attempts to provision a notifications collection do not
+ cause a race-condition whereby the second commit results in a second
+ C{INSERT} that violates a unique constraint.
+ """
+
+ calendarStore = self._sqlCalendarStore
+
+ txn1 = calendarStore.newTransaction()
+ txn2 = calendarStore.newTransaction()
+
+ notification_uid1_1 = yield txn1.notificationsWithUID(
+ "uid1",
+ )
+
+ @inlineCallbacks
+ def _defer_notification_uid1_2():
+ notification_uid1_2 = yield txn2.notificationsWithUID(
+ "uid1",
+ )
+ yield txn2.commit()
+ returnValue(notification_uid1_2)
+ d1 = _defer_notification_uid1_2()
+
+ @inlineCallbacks
+ def _pause_notification_uid1_1():
+ yield deferLater(reactor, 1.0, lambda : None)
+ yield txn1.commit()
+ d2 = _pause_notification_uid1_1()
+
+ # Now do the concurrent provision attempt
+ yield d2
+ notification_uid1_2 = yield d1
+
+ self.assertNotEqual(notification_uid1_1, None)
+ self.assertNotEqual(notification_uid1_2, None)
+
+ @inlineCallbacks
+ def test_removeCalendarPropertiesOnDelete(self):
+ """
+ L{ICalendarHome.removeCalendarWithName} removes a calendar that already
+ exists and makes sure properties are also removed.
+ """
+
+ # Create calendar and add a property
+ home = yield self.homeUnderTest()
+ name = "remove-me"
+ calendar = yield home.createCalendarWithName(name)
+ resourceID = calendar._resourceID
+ calendarProperties = calendar.properties()
+
+ prop = caldavxml.CalendarDescription.fromString("Calendar to be removed")
+ calendarProperties[PropertyName.fromElement(prop)] = prop
+ yield self.commit()
+
+ prop = schema.RESOURCE_PROPERTY
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+ # Check that two properties are present
+ home = yield self.homeUnderTest()
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 2)
+ yield self.commit()
+
+ # Remove calendar and check for no properties
+ home = yield self.homeUnderTest()
+ yield home.removeCalendarWithName(name)
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ # Recheck it
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ @inlineCallbacks
+ def test_removeCalendarObjectPropertiesOnDelete(self):
+ """
+ L{ICalendarHome.removeCalendarWithName} removes a calendar object that already
+ exists and makes sure properties are also removed (which is always the case as right
+ now calendar objects never have properties).
+ """
+
+ # Create calendar object
+ calendar1 = yield self.calendarUnderTest()
+ name = "4.ics"
+ component = VComponent.fromString(event4_text)
+ metadata = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+ calobject = yield calendar1.createCalendarObjectWithName(name, component, metadata=metadata)
+ resourceID = calobject._resourceID
+
+ prop = schema.RESOURCE_PROPERTY
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+ # No properties on existing calendar object
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+
+ yield self.commit()
+
+ # Remove calendar and check for no properties
+ calendar1 = yield self.calendarUnderTest()
+ yield calendar1.removeCalendarObjectWithName(name)
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ # Recheck it
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ @inlineCallbacks
+ def test_removeInboxObjectPropertiesOnDelete(self):
+ """
+ L{ICalendarHome.removeCalendarWithName} removes an inbox calendar object that already
+ exists and makes sure properties are also removed. Inbox calendar objects can have properties.
+ """
+
+ # Create calendar object and add a property
+ home = yield self.homeUnderTest()
+ inbox = yield home.createCalendarWithName("inbox")
+
+ name = "4.ics"
+ component = VComponent.fromString(event4_text)
+ metadata = {
+ "accessMode": "PUBLIC",
+ "isScheduleObject": True,
+ "scheduleTag": "abc",
+ "scheduleEtags": (),
+ "hasPrivateComment": False,
+ }
+ calobject = yield inbox.createCalendarObjectWithName(name, component, metadata=metadata)
+ resourceID = calobject._resourceID
+ calobjectProperties = calobject.properties()
+
+ prop = caldavxml.CalendarDescription.fromString("Calendar object to be removed")
+ calobjectProperties[PropertyName.fromElement(prop)] = prop
+ yield self.commit()
+
+ prop = schema.RESOURCE_PROPERTY
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+ # One property exists calendar object
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 1)
+
+ yield self.commit()
+
+ # Remove calendar object and check for no properties
+ home = yield self.homeUnderTest()
+ inbox = yield home.calendarWithName("inbox")
+ yield inbox.removeCalendarObjectWithName(name)
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ # Recheck it
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ @inlineCallbacks
+ def test_directShareCreateConcurrency(self):
+ """
+ Test that two concurrent attempts to create a direct shared calendar
+ work concurrently without an exception.
+ """
+
+ calendarStore = self._sqlCalendarStore
+
+ # Provision the home and calendar now
+ txn = calendarStore.newTransaction()
+ home = yield txn.homeWithUID(ECALENDARTYPE, "uid1", create=True)
+ self.assertNotEqual(home, None)
+ cal = yield home.calendarWithName("calendar")
+ self.assertNotEqual(cal, None)
+ yield txn.commit()
+
+ txn1 = calendarStore.newTransaction()
+ txn2 = calendarStore.newTransaction()
+
+ home1 = yield txn1.homeWithUID(ECALENDARTYPE, "uid1", create=True)
+ home2 = yield txn2.homeWithUID(ECALENDARTYPE, "uid1", create=True)
+
+ shares1 = yield home1.retrieveOldShares()
+ shares2 = yield home2.retrieveOldShares()
+
+ record = SharedCollectionRecord(
+ "abcd",
+ "D",
+ "/calendars/__uids__/uid2/calendar/",
+ "XYZ",
+ "Shared Wiki Calendar",
+ )
+
+ @inlineCallbacks
+ def _defer1():
+ yield shares1.addOrUpdateRecord(record)
+ yield txn1.commit()
+ d1 = _defer1()
+
+ @inlineCallbacks
+ def _defer2():
+ yield shares2.addOrUpdateRecord(record)
+ yield txn2.commit()
+ d2 = _defer2()
+
+ yield d1
+ yield d2
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/datastore/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.caldav.datastore.test.test_util -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -83,7 +83,7 @@
dropboxProperty = (yield calendarObject.component(
)).getFirstPropertyInAnyComponent("X-APPLE-DROPBOX")
if dropboxProperty is not None:
- componentDropboxID = dropboxProperty.value().split("/")[-1]
+ componentDropboxID = dropboxProperty.value().rstrip("/").split("/")[-1]
returnValue(componentDropboxID)
# Now look at each ATTACH property and see if it might be a dropbox item
@@ -125,21 +125,31 @@
for calendarObject in (yield inCalendar.calendarObjects()):
try:
+ # Must account for metadata
+
yield outCalendar.createCalendarObjectWithName(
calendarObject.name(),
- (yield calendarObject.component())) # XXX WRONG SHOULD CALL getComponent
+ (yield calendarObject.component()), # XXX WRONG SHOULD CALL getComponent
+ metadata=calendarObject.getMetadata(),
+ )
# Only the owner's properties are migrated, since previous releases of
# calendar server didn't have per-user properties.
outObject = yield outCalendar.calendarObjectWithName(
calendarObject.name())
- outObject.properties().update(calendarObject.properties())
+ if outCalendar.objectResourcesHaveProperties():
+ outObject.properties().update(calendarObject.properties())
+ if inCalendar.name() == "inbox":
+ # Because of 9023803, skip attachment processing within inboxes
+ continue
+
# Migrate attachments.
for attachment in (yield calendarObject.attachments()):
name = attachment.name()
ctype = attachment.contentType()
- transport = yield outObject.createAttachmentWithName(name, ctype)
+ newattachment = yield outObject.createAttachmentWithName(name)
+ transport = newattachment.store(ctype)
proto =_AttachmentMigrationProto(transport)
attachment.retrieve(proto)
yield proto.done
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/icalendarstore.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/icalendarstore.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/caldav/icalendarstore.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -21,7 +21,7 @@
from txdav.common.icommondatastore import ICommonTransaction, \
IShareableCollection
-from txdav.idav import IDataStoreResource, IDataStore
+from txdav.idav import IDataStoreObject, IDataStore
from txdav.idav import INotifier
@@ -83,7 +83,7 @@
# Interfaces
#
-class ICalendarHome(INotifier, IDataStoreResource):
+class ICalendarHome(INotifier, IDataStoreObject):
"""
An L{ICalendarHome} is a collection of calendars which belongs to a
specific principal and contains the calendars which that principal has
@@ -162,7 +162,31 @@
"""
-class ICalendar(INotifier, IShareableCollection, IDataStoreResource):
+ def getAllDropboxIDs():
+ """
+ Retrieve all of the dropbox IDs of events in this home for calendar
+ objects which either allow attendee write access to their dropboxes,
+ have attachments to read, or both.
+
+ @return: a L{Deferred} which fires with a C{list} of all dropbox IDs (as
+ unicode strings)
+ """
+
+
+ def quotaUsedBytes():
+ """
+ The number of bytes counted towards the user's quota.
+ """
+
+
+ def adjustQuotaUsedBytes(delta):
+ """
+ Increase the number of bytes that count towards the user's quota.
+ """
+
+
+
+class ICalendar(INotifier, IShareableCollection, IDataStoreObject):
"""
Calendar
@@ -282,7 +306,14 @@
"""
-class ICalendarObject(IDataStoreResource):
+ def resourceNamesSinceToken(revision):
+ """
+ Low-level query to gather names for calendarObjectsSinceToken.
+ """
+
+
+
+class ICalendarObject(IDataStoreObject):
"""
Calendar object
@@ -359,7 +390,7 @@
"""
- def createAttachmentWithName(name, contentType):
+ def createAttachmentWithName(name):
"""
Add an attachment to this calendar object.
@@ -368,11 +399,7 @@
@type name: C{str}
- @param contentType: The content-type of the data to store.
-
- @type contentType: L{twext.web2.http_headers.MimeType}
-
- @return: the same type as L{IAttachment.store} returns.
+ @return: the L{IAttachment}.
"""
@@ -415,7 +442,7 @@
-class IAttachment(IDataStoreResource):
+class IAttachment(IDataStoreObject):
"""
Information associated with an attachment to a calendar object.
"""
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.carddav.datastore.test.test_file -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All 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,6 +31,7 @@
from twext.web2.dav.element.rfc2518 import ResourceType, GETContentType
from twext.web2.dav.resource import TwistedGETContentMD5
+from twext.web2.http_headers import MimeType
from twisted.python import hashlib
@@ -67,8 +68,8 @@
_topPath = "addressbooks"
_notifierPrefix = "CardDAV"
- def __init__(self, uid, path, addressbookStore, transaction, notifier):
- super(AddressBookHome, self).__init__(uid, path, addressbookStore, transaction, notifier)
+ def __init__(self, uid, path, addressbookStore, transaction, notifiers):
+ super(AddressBookHome, self).__init__(uid, path, addressbookStore, transaction, notifiers)
self._childClass = AddressBook
@@ -92,7 +93,7 @@
"""
implements(IAddressBook)
- def __init__(self, name, addressbookHome, realName=None):
+ def __init__(self, name, addressbookHome, owned, realName=None):
"""
Initialize an addressbook pointing at a path on disk.
@@ -108,7 +109,7 @@
@type realName: C{str}
"""
- super(AddressBook, self).__init__(name, addressbookHome, realName=realName)
+ super(AddressBook, self).__init__(name, addressbookHome, owned, realName=realName)
self._index = Index(self)
self._invites = Invites(self)
@@ -146,6 +147,11 @@
def _doValidate(self, component):
component.validForCardDAV()
+ def contentType(self):
+ """
+ The content type of Addresbook objects is text/vcard.
+ """
+ return MimeType.fromString("text/vcard; charset=utf-8")
class AddressBookObject(CommonObjectResource):
"""
@@ -169,8 +175,6 @@
@writeOperation
def setComponent(self, component, inserting=False):
- old_size = 0 if inserting else self.size()
-
validateAddressBookComponent(self, self._addressbook, component, inserting)
self._addressbook.retrieveOldIndex().addResource(
@@ -205,16 +209,11 @@
# Now re-write the original properties on the updated file
self.properties().flush()
- # Adjust quota
- quota_adjustment = self.size() - old_size
- self._addressbook._home.adjustQuotaUsedBytes(quota_adjustment)
-
def undo():
if backup:
backup.moveTo(self._path)
else:
self._path.remove()
- self._addressbook._home.adjustQuotaUsedBytes(-quota_adjustment)
return undo
self._transaction.addOperation(do, "set addressbook component %r" % (self.name(),))
@@ -269,6 +268,12 @@
self._uid = self.component().resourceUID()
return self._uid
+ # IDataStoreObject
+ def contentType(self):
+ """
+ The content type of Addressbook objects is text/x-vcard.
+ """
+ return MimeType.fromString("text/vcard; charset=utf-8")
class AddressBookStubResource(CommonStubResource):
"""
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/config-separation/txdav/carddav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/carddav/datastore/index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/index_file.py:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/index_file.py:6369-6445
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/vcardindex.py:6322-6394
+ /CalendarServer/branches/config-separation/txdav/carddav/datastore/index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/carddav/datastore/index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/index_file.py:6932-7023
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/index_file.py:6893-6900
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/index_file.py:6369
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/vcardindex.py:6322-6394
/CalendarServer/trunk/txdav/carddav/datastore/index_file.py:6700-7192
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.carddav.datastore.test.test_sql -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All 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,6 +34,7 @@
from twext.web2.http_headers import MimeType
from twistedcaldav import carddavxml, customxml
+from twistedcaldav.memcacher import Memcacher
from twistedcaldav.vcard import Component as VCard
from txdav.common.datastore.sql_legacy import \
@@ -46,11 +47,15 @@
from txdav.common.datastore.sql import CommonHome, CommonHomeChild,\
CommonObjectResource
+from twext.enterprise.dal.syntax import Insert
+from twext.enterprise.dal.syntax import Update
+from twext.enterprise.dal.syntax import utcNowSQL
from txdav.common.datastore.sql_tables import ADDRESSBOOK_TABLE,\
ADDRESSBOOK_BIND_TABLE, ADDRESSBOOK_OBJECT_REVISIONS_TABLE,\
ADDRESSBOOK_OBJECT_TABLE, ADDRESSBOOK_HOME_TABLE,\
ADDRESSBOOK_HOME_METADATA_TABLE, ADDRESSBOOK_AND_ADDRESSBOOK_BIND,\
- ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE
+ ADDRESSBOOK_OBJECT_AND_BIND_TABLE, \
+ ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE, schema
from txdav.base.propertystore.base import PropertyName
@@ -59,17 +64,28 @@
implements(IAddressBookHome)
+ # structured tables. (new, preferred)
+ _homeSchema = schema.ADDRESSBOOK_HOME
+ _bindSchema = schema.ADDRESSBOOK_BIND
+ _homeMetaDataSchema = schema.ADDRESSBOOK_HOME_METADATA
+ _revisionsSchema = schema.ADDRESSBOOK_OBJECT_REVISIONS
+ _objectSchema = schema.ADDRESSBOOK_OBJECT
+
+ # string mappings (old, removing)
_homeTable = ADDRESSBOOK_HOME_TABLE
_homeMetaDataTable = ADDRESSBOOK_HOME_METADATA_TABLE
_childTable = ADDRESSBOOK_TABLE
_bindTable = ADDRESSBOOK_BIND_TABLE
+ _objectBindTable = ADDRESSBOOK_OBJECT_AND_BIND_TABLE
_notifierPrefix = "CardDAV"
_revisionsTable = ADDRESSBOOK_OBJECT_REVISIONS_TABLE
- def __init__(self, transaction, ownerUID, notifier):
+ _cacher = Memcacher("SQL.adbkhome", pickle=True, key_normalization=False)
+ def __init__(self, transaction, ownerUID, notifiers):
+
self._childClass = AddressBook
- super(AddressBookHome, self).__init__(transaction, ownerUID, notifier)
+ super(AddressBookHome, self).__init__(transaction, ownerUID, notifiers)
self._shares = SQLLegacyAddressBookShares(self)
@@ -92,6 +108,13 @@
"""
implements(IAddressBook)
+ # structured tables. (new, preferred)
+ _bindSchema = schema.ADDRESSBOOK_BIND
+ _homeChildSchema = schema.ADDRESSBOOK
+ _revisionsSchema = schema.ADDRESSBOOK_OBJECT_REVISIONS
+ _objectSchema = schema.ADDRESSBOOK_OBJECT
+
+ # string mappings (old, removing)
_bindTable = ADDRESSBOOK_BIND_TABLE
_homeChildTable = ADDRESSBOOK_TABLE
_homeChildBindTable = ADDRESSBOOK_AND_ADDRESSBOOK_BIND
@@ -99,7 +122,7 @@
_revisionsBindTable = ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE
_objectTable = ADDRESSBOOK_OBJECT_TABLE
- def __init__(self, home, name, resourceID):
+ def __init__(self, home, name, resourceID, owned):
"""
Initialize an addressbook pointing at a path on disk.
@@ -115,7 +138,7 @@
@type realName: C{str}
"""
- super(AddressBook, self).__init__(home, name, resourceID)
+ super(AddressBook, self).__init__(home, name, resourceID, owned)
self._index = PostgresLegacyABIndexEmulator(self)
self._invites = SQLLegacyAddressBookInvites(self)
@@ -171,10 +194,11 @@
implements(IAddressBookObject)
_objectTable = ADDRESSBOOK_OBJECT_TABLE
+ _objectSchema = schema.ADDRESSBOOK_OBJECT
- def __init__(self, addressbook, name, uid, metadata=None):
+ def __init__(self, addressbook, name, uid, resourceID=None, metadata=None):
- super(AddressBookObject, self).__init__(addressbook, name, uid)
+ super(AddressBookObject, self).__init__(addressbook, name, uid, resourceID)
@property
@@ -189,8 +213,6 @@
@inlineCallbacks
def setComponent(self, component, inserting=False):
- old_size = 0 if inserting else self.size()
-
validateAddressBookComponent(self, self._addressbook, component, inserting)
yield self.updateDatabase(component, inserting=inserting)
@@ -199,14 +221,12 @@
else:
yield self._addressbook._updateRevision(self._name)
- # Adjust quota
- yield self._addressbook._home.adjustQuotaUsedBytes(self.size() - old_size)
-
self._addressbook.notifyChanged()
@inlineCallbacks
- def updateDatabase(self, component, expand_until=None, reCreate=False, inserting=False):
+ def updateDatabase(self, component, expand_until=None, reCreate=False,
+ inserting=False):
"""
Update the database tables for the new data being written.
@@ -214,6 +234,8 @@
@type component: L{Component}
"""
+ ao = schema.ADDRESSBOOK_OBJECT
+
componentText = str(component)
self._objectText = componentText
@@ -222,42 +244,24 @@
self._size = len(componentText)
if inserting:
self._resourceID, self._created, self._modified = (
- yield self._txn.execSQL(
- """
- insert into ADDRESSBOOK_OBJECT
- (ADDRESSBOOK_RESOURCE_ID, RESOURCE_NAME, VCARD_TEXT, VCARD_UID, MD5)
- values
- (%s, %s, %s, %s, %s)
- returning
- RESOURCE_ID,
- CREATED,
- MODIFIED
- """,
- [
- self._addressbook._resourceID,
- self._name,
- componentText,
- component.resourceUID(),
- self._md5,
- ]
- ))[0]
+ yield Insert(
+ {ao.ADDRESSBOOK_RESOURCE_ID: self._addressbook._resourceID,
+ ao.RESOURCE_NAME: self._name,
+ ao.VCARD_TEXT: componentText,
+ ao.VCARD_UID: component.resourceUID(),
+ ao.MD5: self._md5},
+ Return=(ao.RESOURCE_ID,
+ ao.CREATED,
+ ao.MODIFIED)
+ ).on(self._txn))[0]
else:
- yield self._txn.execSQL(
- """
- update ADDRESSBOOK_OBJECT set
- (VCARD_TEXT, VCARD_UID, MD5, MODIFIED)
- =
- (%s, %s, %s, timezone('UTC', CURRENT_TIMESTAMP))
- where RESOURCE_ID = %s
- returning MODIFIED
- """,
- [
- componentText,
- component.resourceUID(),
- self._md5,
- self._resourceID,
- ]
- )
+ self._modified = (yield Update(
+ {ao.VCARD_TEXT: componentText,
+ ao.VCARD_UID: component.resourceUID(),
+ ao.MD5: self._md5,
+ ao.MODIFIED: utcNowSQL},
+ Where=ao.RESOURCE_ID == self._resourceID,
+ Return=ao.MODIFIED).on(self._txn))[0][0]
@inlineCallbacks
@@ -268,9 +272,12 @@
vCardText = CommonObjectResource.text
- # IDataStoreResource
+ # IDataStoreObject
def contentType(self):
"""
The content type of Addressbook objects is text/x-vcard.
"""
return MimeType.fromString("text/vcard; charset=utf-8")
+
+
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/common.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/common.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -874,36 +874,38 @@
propertyContent.name = propertyName.name
propertyContent.namespace = propertyName.namespace
- (yield self.addressbookObjectUnderTest()).properties()[
- propertyName] = propertyContent
- yield self.commit()
- # Sanity check; are properties even readable in a separate transaction?
- # Should probably be a separate test.
- self.assertEquals(
+ abobject = (yield self.addressbookObjectUnderTest())
+ if abobject._parentCollection.objectResourcesHaveProperties():
(yield self.addressbookObjectUnderTest()).properties()[
- propertyName
- ],
- propertyContent)
- obj = yield self.addressbookObjectUnderTest()
- vcard1_text = yield obj.vCardText()
- vcard1_text_withDifferentNote = vcard1_text.replace(
- "NOTE:CardDAV protocol updates",
- "NOTE:Changed"
- )
- # Sanity check; make sure the test has the right idea of the subject.
- self.assertNotEquals(vcard1_text, vcard1_text_withDifferentNote)
- newComponent = VComponent.fromString(vcard1_text_withDifferentNote)
- yield obj.setComponent(newComponent)
+ propertyName] = propertyContent
+ yield self.commit()
+ # Sanity check; are properties even readable in a separate transaction?
+ # Should probably be a separate test.
+ self.assertEquals(
+ (yield self.addressbookObjectUnderTest()).properties()[
+ propertyName
+ ],
+ propertyContent)
+ obj = yield self.addressbookObjectUnderTest()
+ vcard1_text = yield obj.vCardText()
+ vcard1_text_withDifferentNote = vcard1_text.replace(
+ "NOTE:CardDAV protocol updates",
+ "NOTE:Changed"
+ )
+ # Sanity check; make sure the test has the right idea of the subject.
+ self.assertNotEquals(vcard1_text, vcard1_text_withDifferentNote)
+ newComponent = VComponent.fromString(vcard1_text_withDifferentNote)
+ yield obj.setComponent(newComponent)
+
+ # Putting everything into a separate transaction to account for any
+ # caching that may take place.
+ yield self.commit()
+ self.assertEquals(
+ (yield self.addressbookObjectUnderTest()).properties()[propertyName],
+ propertyContent
+ )
- # Putting everything into a separate transaction to account for any
- # caching that may take place.
- yield self.commit()
- self.assertEquals(
- (yield self.addressbookObjectUnderTest()).properties()[propertyName],
- propertyContent
- )
-
@inlineCallbacks
def test_dontLeakAddressbooks(self):
"""
Property changes on: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_index_file.py
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/config-separation/txdav/carddav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store/txdav/carddav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/test_index_file.py:6322-6368
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/test/test_index_file.py:6369-6445
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_vcardindex.py:6322-6394
+ /CalendarServer/branches/config-separation/txdav/carddav/datastore/test/test_index_file.py:4379-4443
/CalendarServer/branches/egg-info-351/txdav/carddav/datastore/test/test_index_file.py:4589-4625
/CalendarServer/branches/generic-sqlstore/txdav/carddav/datastore/test/test_index_file.py:6167-6191
/CalendarServer/branches/new-store-no-caldavfile-2/txdav/carddav/datastore/test/test_index_file.py:5936-5981
/CalendarServer/branches/new-store-no-caldavfile/txdav/carddav/datastore/test/test_index_file.py:5911-5935
/CalendarServer/branches/new-store/txdav/carddav/datastore/test/test_index_file.py:5594-5934
/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692/txdav/carddav/datastore/test/test_index_file.py:5693-5702
/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627/txdav/carddav/datastore/test/test_index_file.py:3628-3644
/CalendarServer/branches/users/cdaboo/more-sharing-5591/txdav/carddav/datastore/test/test_index_file.py:5592-5601
/CalendarServer/branches/users/cdaboo/partition-4464/txdav/carddav/datastore/test/test_index_file.py:4465-4957
/CalendarServer/branches/users/cdaboo/relative-config-paths-5070/txdav/carddav/datastore/test/test_index_file.py:5071-5105
/CalendarServer/branches/users/cdaboo/shared-calendars-5187/txdav/carddav/datastore/test/test_index_file.py:5188-5440
/CalendarServer/branches/users/glyph/conn-limit/txdav/carddav/datastore/test/test_index_file.py:6574-6577
/CalendarServer/branches/users/glyph/contacts-server-merge/txdav/carddav/datastore/test/test_index_file.py:4971-5080
/CalendarServer/branches/users/glyph/dalify/txdav/carddav/datastore/test/test_index_file.py:6932-7023
/CalendarServer/branches/users/glyph/dont-start-postgres/txdav/carddav/datastore/test/test_index_file.py:6592-6614
/CalendarServer/branches/users/glyph/linux-tests/txdav/carddav/datastore/test/test_index_file.py:6893-6900
/CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/test_index_file.py:6322-6334
/CalendarServer/branches/users/glyph/more-deferreds-7/txdav/carddav/datastore/test/test_index_file.py:6369
/CalendarServer/branches/users/glyph/oracle/txdav/carddav/datastore/test/test_index_file.py:7106-7155
/CalendarServer/branches/users/glyph/sendfdport/txdav/carddav/datastore/test/test_index_file.py:5388-5424
/CalendarServer/branches/users/glyph/sharedpool/txdav/carddav/datastore/test/test_index_file.py:6490-6550
/CalendarServer/branches/users/glyph/sql-store/txdav/carddav/datastore/test/test_index_file.py:5929-6073
/CalendarServer/branches/users/glyph/use-system-twisted/txdav/carddav/datastore/test/test_index_file.py:5084-5149
/CalendarServer/branches/users/sagen/locations-resources-2/txdav/carddav/datastore/test/test_index_file.py:5052-5061
/CalendarServer/branches/users/sagen/locations-resources/txdav/carddav/datastore/test/test_index_file.py:5032-5051
/CalendarServer/branches/users/sagen/purge_old_events/txdav/carddav/datastore/test/test_index_file.py:6735-6746
/CalendarServer/branches/users/sagen/resource-delegates-4038/txdav/carddav/datastore/test/test_index_file.py:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/txdav/carddav/datastore/test/test_index_file.py:4068-4075
/CalendarServer/branches/users/sagen/resources-2/txdav/carddav/datastore/test/test_index_file.py:5084-5093
/CalendarServer/branches/users/wsanchez/transations/txdav/carddav/datastore/test/test_index_file.py:5515-5593
/CalendarServer/trunk/twistedcaldav/test/test_vcardindex.py:6322-6394
/CalendarServer/trunk/txdav/carddav/datastore/test/test_index_file.py:6700-7192
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/test/test_sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,21 +19,27 @@
L{txdav.carddav.datastore.test.common}.
"""
-from txdav.carddav.datastore.test.common import CommonTests as AddressBookCommonTests
-
-from txdav.common.datastore.sql import EADDRESSBOOKTYPE
-from txdav.common.datastore.test.util import buildStore
-from txdav.carddav.datastore.test.test_file import setUpAddressBookStore
+from twext.enterprise.dal.syntax import Select, Parameter
from twext.web2.dav.element.rfc2518 import GETContentLanguage, ResourceType
-from txdav.base.propertystore.base import PropertyName
-from txdav.carddav.datastore.util import _migrateAddressbook, migrateHome
+from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.trial import unittest
-from twisted.internet.defer import inlineCallbacks, returnValue
+from twistedcaldav import memcacher, carddavxml
+from twistedcaldav.config import config
from twistedcaldav.vcard import Component as VCard
+from twistedcaldav.vcard import Component as VComponent
+from txdav.base.propertystore.base import PropertyName
+from txdav.carddav.datastore.test.common import CommonTests as AddressBookCommonTests,\
+ vcard4_text
+from txdav.carddav.datastore.test.test_file import setUpAddressBookStore
+from txdav.carddav.datastore.util import _migrateAddressbook, migrateHome
+from txdav.common.datastore.sql import EADDRESSBOOKTYPE
+from txdav.common.datastore.sql_tables import schema
+from txdav.common.datastore.test.util import buildStore
+
class AddressBookSQLStorageTests(AddressBookCommonTests, unittest.TestCase):
"""
AddressBook SQL storage tests.
@@ -41,6 +47,10 @@
@inlineCallbacks
def setUp(self):
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(memcacher.Memcacher, "allowTestCache", True)
+
yield super(AddressBookSQLStorageTests, self).setUp()
self._sqlStore = yield buildStore(self, self.notifierFactory)
yield self.populate()
@@ -254,3 +264,83 @@
yield d1
yield d2
+
+ @inlineCallbacks
+ def test_removeAddressBookPropertiesOnDelete(self):
+ """
+ L{IAddressBookHome.removeAddressBookWithName} removes an address book that already
+ exists and makes sure properties are also removed.
+ """
+
+ # Create address book and add a property
+ home = yield self.homeUnderTest()
+ name = "remove-me"
+ addressbook = yield home.createAddressBookWithName(name)
+ resourceID = addressbook._resourceID
+ addressbookProperties = addressbook.properties()
+
+ prop = carddavxml.AddressBookDescription.fromString("Address Book to be removed")
+ addressbookProperties[PropertyName.fromElement(prop)] = prop
+ yield self.commit()
+
+ prop = schema.RESOURCE_PROPERTY
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+ # Check that two properties are present
+ home = yield self.homeUnderTest()
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 2)
+ yield self.commit()
+
+ # Remove address book and check for no properties
+ home = yield self.homeUnderTest()
+ yield home.removeAddressBookWithName(name)
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ # Recheck it
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ @inlineCallbacks
+ def test_removeAddressBookObjectPropertiesOnDelete(self):
+ """
+ L{IAddressBookHome.removeAddressBookWithName} removes an address book object that already
+ exists and makes sure properties are also removed (which is always the case as right
+ now address book objects never have properties).
+ """
+
+ # Create address book object
+ adbk1 = yield self.addressbookUnderTest()
+ name = "4.vcf"
+ component = VComponent.fromString(vcard4_text)
+ addressobject = yield adbk1.createAddressBookObjectWithName(name, component, metadata={})
+ resourceID = addressobject._resourceID
+
+ prop = schema.RESOURCE_PROPERTY
+ _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
+ From=prop,
+ Where=prop.RESOURCE_ID == Parameter("resourceID"))
+
+ # No properties on existing address book object
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+
+ yield self.commit()
+
+ # Remove address book object and check for no properties
+ adbk1 = yield self.addressbookUnderTest()
+ yield adbk1.removeAddressBookObjectWithName(name)
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
+ # Recheck it
+ rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
+ self.assertEqual(len(tuple(rows)), 0)
+ yield self.commit()
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/datastore/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -86,10 +86,12 @@
# Only the owner's properties are migrated, since previous releases of
# addressbook server didn't have per-user properties.
- (yield outAddressbook.addressbookObjectWithName(
- addressbookObject.name())).properties().update(
- addressbookObject.properties())
+ outObject = yield outAddressbook.addressbookObjectWithName(
+ addressbookObject.name())
+ if outAddressbook.objectResourcesHaveProperties():
+ outObject.properties().update(addressbookObject.properties())
+
except InternalDataStoreError:
log.error(" Failed to migrate adress book object: %s/%s/%s" % (
inAddressbook.ownerHome().name(),
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/iaddressbookstore.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/iaddressbookstore.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/carddav/iaddressbookstore.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -22,7 +22,7 @@
from txdav.common.icommondatastore import ICommonTransaction,\
IShareableCollection
from txdav.idav import INotifier
-from txdav.idav import IDataStoreResource
+from txdav.idav import IDataStoreObject
__all__ = [
# Classes
@@ -54,7 +54,7 @@
# Interfaces
#
-class IAddressBookHome(INotifier, IDataStoreResource):
+class IAddressBookHome(INotifier, IDataStoreObject):
"""
AddressBook home
@@ -117,7 +117,7 @@
"""
-class IAddressBook(INotifier, IShareableCollection, IDataStoreResource):
+class IAddressBook(INotifier, IShareableCollection, IDataStoreObject):
"""
AddressBook
@@ -225,7 +225,7 @@
"""
-class IAddressBookObject(IDataStoreResource):
+class IAddressBookObject(IDataStoreObject):
"""
AddressBook object
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/file.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/file.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/file.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.caldav.datastore.test.test_file -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -49,6 +49,7 @@
from txdav.base.datastore.util import cached
from txdav.base.propertystore.base import PropertyName
+from txdav.base.propertystore.none import PropertyStore as NonePropertyStore
from txdav.base.propertystore.xattr import PropertyStore
from errno import EEXIST, ENOENT
@@ -146,7 +147,6 @@
return self._homesOfType(EADDRESSBOOKTYPE)
-
class CommonStoreTransaction(DataStoreTransaction):
"""
In-memory implementation of
@@ -238,12 +238,12 @@
_topPath = None
_notifierPrefix = None
- def __init__(self, uid, path, dataStore, transaction, notifier):
+ def __init__(self, uid, path, dataStore, transaction, notifiers):
self._dataStore = dataStore
self._uid = uid
self._path = path
self._transaction = transaction
- self._notifier = notifier
+ self._notifiers = notifiers
self._shares = SharedCollectionsDatabase(StubResource(self))
self._newChildren = {}
self._removedChildren = set()
@@ -297,12 +297,12 @@
homePath = childPath
if txn._notifierFactory:
- notifier = txn._notifierFactory.newNotifier(id=uid,
- prefix=cls._notifierPrefix)
+ notifiers = (txn._notifierFactory.newNotifier(id=uid,
+ prefix=cls._notifierPrefix),)
else:
- notifier = None
+ notifiers = None
- home = cls(uid, homePath, txn._dataStore, txn, notifier)
+ home = cls(uid, homePath, txn._dataStore, txn, notifiers)
if creating:
home.createdHome()
if withNotifications:
@@ -382,7 +382,7 @@
if name.startswith("."):
return None
- child = self._childClass.objectWithName(self, name)
+ child = self._childClass.objectWithName(self, name, True)
if child is not None:
self._cachedChildren[name] = child
return child
@@ -406,7 +406,7 @@
# FIXME: some way to roll this back.
- c = self._newChildren[name] = self._childClass(temporary.basename(), self, realName=name)
+ c = self._newChildren[name] = self._childClass(temporary.basename(), self, True, realName=name)
c.retrieveOldIndex().create()
def do():
childPath = self._path.child(name)
@@ -481,6 +481,20 @@
self._transaction.addOperation(props.flush, "flush home properties")
return props
+ def objectResourcesWithUID(self, uid, ignore_children=()):
+ """
+ Return all child object resources with the specified UID, ignoring any in the
+ named child collections. The file implementation just iterates all child collections.
+ """
+ results = []
+ for child in self.children():
+ if child.name() in ignore_children:
+ continue
+ object = child.objectResourceWithUID(uid)
+ if object:
+ results.append(object)
+ return results
+
def quotaUsedBytes(self):
try:
@@ -502,18 +516,34 @@
self.properties()[PropertyName.fromElement(TwistedQuotaUsedProperty)] = TwistedQuotaUsedProperty(str(new_used))
+ def addNotifier(self, notifier):
+ if self._notifiers is None:
+ self._notifiers = ()
+ self._notifiers += (notifier,)
+
def notifierID(self, label="default"):
- if self._notifier:
- return self._notifier.getID(label)
+ if self._notifiers:
+ return self._notifiers[0].getID(label)
else:
return None
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ if self._notifiers:
+ for notifier in self._notifiers:
+ name = (yield notifier.nodeName(label=label))
+ if name is not None:
+ returnValue(name)
+ else:
+ returnValue(None)
+
def notifyChanged(self):
"""
Trigger a notification of a change
"""
- if self._notifier:
- self._transaction.postCommit(self._notifier.notify)
+ if self._notifiers:
+ for notifier in self._notifiers:
+ self._transaction.postCommit(notifier.notify)
class CommonHomeChild(FileMetaDataMixin, LoggingMixIn, FancyEqMixin):
@@ -521,11 +551,15 @@
Common ancestor class of AddressBooks and Calendars.
"""
- compareAttributes = '_name _home _transaction'.split()
+ compareAttributes = (
+ "_name",
+ "_home",
+ "_transaction",
+ )
_objectResourceClass = None
- def __init__(self, name, home, realName=None):
+ def __init__(self, name, home, owned, realName=None):
"""
Initialize an home child pointing at a path on disk.
@@ -542,6 +576,7 @@
"""
self._name = name
self._home = home
+ self._owned = owned
self._transaction = home._transaction
self._newObjectResources = {}
self._cachedObjectResources = {}
@@ -550,17 +585,17 @@
self._invites = None # Derived classes need to set this
self._renamedName = realName
- if home._notifier:
+ if home._notifiers:
childID = "%s/%s" % (home.uid(), name)
- notifier = home._notifier.clone(label="collection", id=childID)
+ notifiers = [notifier.clone(label="collection", id=childID) for notifier in home._notifiers]
else:
- notifier = None
- self._notifier = notifier
+ notifiers = None
+ self._notifiers = notifiers
@classmethod
- def objectWithName(cls, home, name):
- return cls(name, home) if home._path.child(name).isdir() else None
+ def objectWithName(cls, home, name, owned):
+ return cls(name, home, owned) if home._path.child(name).isdir() else None
@property
def _path(self):
@@ -633,6 +668,7 @@
def cleanup():
try:
trash.remove()
+ self.properties()._removeResource()
except Exception, e:
self.log_error("Unable to delete trashed child at %s: %s" % (trash.fp, e))
@@ -706,16 +742,11 @@
def objectResourceWithUID(self, uid):
- # FIXME: This _really_ needs to be inspecting an index, not parsing
- # every resource.
- for objectResourcePath in self._path.children():
- if not isValidName(objectResourcePath.basename()):
- continue
- obj = self._objectResourceClass(objectResourcePath.basename(), self)
- if obj.component().resourceUID() == uid:
- if obj.name() in self._removedObjectResources:
- return None
- return obj
+ rname = self.retrieveOldIndex().resourceNameForUID(uid)
+ if rname and rname not in self._removedObjectResources:
+ return self.objectResourceWithName(rname)
+
+ return None
@writeOperation
@@ -750,10 +781,6 @@
objectResourcePath = self._path.child(name)
if objectResourcePath.isfile():
- # Handle quota adjustment
- child = self.objectResourceWithName(name)
- old_size = child.size()
-
self._removedObjectResources.add(name)
# FIXME: test for undo
def do():
@@ -762,9 +789,6 @@
self._transaction.addOperation(do, "remove object resource object %r" %
(name,))
- # Adjust quota
- self._home.adjustQuotaUsedBytes(-old_size)
-
self.notifyChanged()
else:
raise NoSuchObjectResourceError(name)
@@ -794,6 +818,12 @@
return succeed(self.retrieveOldIndex().whatchanged(token))
+ def objectResourcesHaveProperties(self):
+ """
+ So filestore objects do need to support properties.
+ """
+ return True
+
# FIXME: property writes should be a write operation
@cached
def properties(self):
@@ -819,18 +849,34 @@
def _doValidate(self, component):
raise NotImplementedError
+ def addNotifier(self, notifier):
+ if self._notifiers is None:
+ self._notifiers = ()
+ self._notifiers += (notifier,)
+
def notifierID(self, label="default"):
- if self._notifier:
- return self._notifier.getID(label)
+ if self._notifiers:
+ return self._notifiers[0].getID(label)
else:
return None
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ if self._notifiers:
+ for notifier in self._notifiers:
+ name = (yield notifier.nodeName(label=label))
+ if name is not None:
+ returnValue(name)
+ else:
+ returnValue(None)
+
def notifyChanged(self):
"""
Trigger a notification of a change
"""
- if self._notifier:
- self._transaction.postCommit(self._notifier.notify)
+ if self._notifiers:
+ for notifier in self._notifiers:
+ self._transaction.postCommit(notifier.notify)
class CommonObjectResource(FileMetaDataMixin, LoggingMixIn, FancyEqMixin):
@@ -840,7 +886,10 @@
@type _path: L{FilePath}
"""
- compareAttributes = '_name _parentCollection'.split()
+ compareAttributes = (
+ "_name",
+ "_parentCollection",
+ )
def __init__(self, name, parent, metadata=None):
self._name = name
@@ -877,7 +926,7 @@
@cached
def properties(self):
uid = self._parentCollection._home.uid()
- props = PropertyStore(uid, lambda : self._path)
+ props = PropertyStore(uid, lambda : self._path) if self._parentCollection.objectResourcesHaveProperties() else NonePropertyStore(uid)
self.initPropertyStore(props)
self._transaction.addOperation(props.flush, "object properties flush")
return props
@@ -1135,6 +1184,10 @@
def uid(self):
return self._uid
+ def xmlType(self):
+ # NB This is the NotificationType property element
+ return self.properties()[PropertyName.fromElement(NotificationType)]
+
def initPropertyStore(self, props):
# Setup peruser special properties
props.setSpecialProperties(
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,6 +1,6 @@
# -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -25,12 +25,12 @@
"CommonHome",
]
-import datetime
from zope.interface import implements, directlyProvides
from twext.python.log import Logger, LoggingMixIn
from twext.web2.dav.element.rfc2518 import ResourceType
+from twext.web2.dav.element.parser import WebDAVDocument
from twext.web2.http_headers import MimeType
from twisted.python import hashlib
@@ -48,7 +48,8 @@
from txdav.carddav.iaddressbookstore import IAddressBookTransaction
-from txdav.common.datastore.sql_tables import NOTIFICATION_HOME_TABLE, _BIND_MODE_OWN, \
+from txdav.common.datastore.sql_tables import schema
+from txdav.common.datastore.sql_tables import _BIND_MODE_OWN, \
_BIND_STATUS_ACCEPTED, NOTIFICATION_OBJECT_REVISIONS_TABLE
from txdav.common.icommondatastore import HomeChildNameNotAllowedError, \
HomeChildNameAlreadyExistsError, NoSuchHomeChildError, \
@@ -57,13 +58,23 @@
from txdav.common.inotifications import INotificationCollection, \
INotificationObject
+from twext.python.clsprop import classproperty
+from twext.enterprise.dal.syntax import Delete
+from twext.enterprise.dal.syntax import Insert
+from twext.enterprise.dal.syntax import Len
+from twext.enterprise.dal.syntax import Max
+from twext.enterprise.dal.syntax import Parameter
+from twext.enterprise.dal.syntax import SavepointAction
+from twext.enterprise.dal.syntax import Select
+from twext.enterprise.dal.syntax import Update
+
+from txdav.base.propertystore.base import PropertyName
+from txdav.base.propertystore.none import PropertyStore as NonePropertyStore
from txdav.base.propertystore.sql import PropertyStore
-from txdav.base.propertystore.base import PropertyName
from twistedcaldav.customxml import NotificationType
-from twistedcaldav.dateops import datetimeMktime
+from twistedcaldav.dateops import datetimeMktime, parseSQLTimestamp
-
v1_schema = getModule(__name__).filePath.sibling("sql_schema_v1.sql").getContent()
log = Logger()
@@ -109,6 +120,7 @@
return []
+
def newTransaction(self, label="unlabeled", migrating=False):
"""
@see L{IDataStore.newTransaction}
@@ -164,6 +176,8 @@
CommonStoreTransaction._homeClass[ECALENDARTYPE] = CalendarHome
CommonStoreTransaction._homeClass[EADDRESSBOOKTYPE] = AddressBookHome
self._sqlTxn = sqlTxn
+ self.paramstyle = sqlTxn.paramstyle
+ self.dialect = sqlTxn.dialect
def store(self):
@@ -190,6 +204,24 @@
return self._homeClass[storeType].homeWithUID(self, uid, create)
+ @inlineCallbacks
+ def calendarHomeWithResourceID(self, rid):
+ uid = (yield self._homeClass[ECALENDARTYPE].homeUIDWithResourceID(self, rid))
+ if uid:
+ result = (yield self.calendarHomeWithUID(uid))
+ else:
+ result = None
+ returnValue(result)
+
+ @inlineCallbacks
+ def addressbookHomeWithResourceID(self, rid):
+ uid = (yield self._homeClass[EADDRESSBOOKTYPE].homeUIDWithResourceID(self, rid))
+ if uid:
+ result = (yield self.addressbookHomeWithUID(uid))
+ else:
+ result = None
+ returnValue(result)
+
@memoizedKey("uid", "_notificationHomes")
def notificationsWithUID(self, uid):
"""
@@ -230,7 +262,128 @@
return self._sqlTxn.abort()
+ def _oldEventsBase(limited):
+ ch = schema.CALENDAR_HOME
+ co = schema.CALENDAR_OBJECT
+ cb = schema.CALENDAR_BIND
+ tr = schema.TIME_RANGE
+ kwds = { }
+ if limited:
+ kwds["Limit"] = Parameter("batchSize")
+ return Select(
+ [
+ ch.OWNER_UID,
+ cb.CALENDAR_RESOURCE_NAME,
+ co.RESOURCE_NAME,
+ Max(tr.END_DATE)
+ ],
+ From=ch.join(co).join(cb).join(tr),
+ Where=(
+ ch.RESOURCE_ID == cb.CALENDAR_HOME_RESOURCE_ID ).And(
+ tr.CALENDAR_OBJECT_RESOURCE_ID == co.RESOURCE_ID ).And(
+ cb.CALENDAR_RESOURCE_ID == tr.CALENDAR_RESOURCE_ID ).And(
+ cb.BIND_MODE == _BIND_MODE_OWN
+ ),
+ GroupBy=(
+ ch.OWNER_UID,
+ cb.CALENDAR_RESOURCE_NAME,
+ co.RESOURCE_NAME
+ ),
+ Having=Max(tr.END_DATE) < Parameter("CutOff"),
+ OrderBy=Max(tr.END_DATE),
+ **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
+ than "cutoff" (datetime)
+
+ Returns a deferred to a list of (uid, calendarName, eventName, maxDate)
+ tuples.
+ """
+ kwds = { "CutOff" : cutoff }
+ if batchSize is not None:
+ kwds["batchSize"] = batchSize
+ query = self._oldEventsLimited
+ else:
+ query = self._oldEventsUnlimited
+ return query.on(self, **kwds)
+
+
+ @inlineCallbacks
+ def removeOldEvents(self, cutoff, batchSize=None):
+ """
+ Remove up to batchSize events older than "cutoff" and return how
+ many were removed.
+ """
+
+ results = (yield self.eventsOlderThan(cutoff, batchSize=batchSize))
+ count = 0
+ for uid, calendarName, eventName, maxDate in results:
+ home = (yield self.calendarHomeWithUID(uid))
+ calendar = (yield home.childWithName(calendarName))
+ (yield calendar.removeObjectResourceWithName(eventName))
+ count += 1
+ returnValue(count)
+
+
+ def _orphanedBase(limited):
+ at = schema.ATTACHMENT
+ co = schema.CALENDAR_OBJECT
+ kwds = {}
+ if limited:
+ kwds["Limit"] = Parameter('batchSize')
+ 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
+ )
+
+ _orphanedLimited = _orphanedBase(True)
+ _orphanedUnlimited = _orphanedBase(False)
+ del _orphanedBase
+
+
+ def orphanedAttachments(self, batchSize=None):
+ """
+ Find attachments no longer referenced by any events.
+
+ Returns a deferred to a list of (dropbox_id, path) tuples.
+ """
+ if batchSize is not None:
+ kwds = {'batchSize': batchSize}
+ query = self._orphanedLimited
+ else:
+ kwds = {}
+ query = self._orphanedUnlimited
+ return query.on(self, **kwds)
+
+
+ @inlineCallbacks
+ def removeOrphanedAttachments(self, batchSize=None):
+ """
+ Remove attachments that no longer have any references to them
+ """
+
+ # TODO: see if there is a better way to import Attachment
+ from txdav.caldav.datastore.sql import Attachment
+
+ results = (yield self.orphanedAttachments(batchSize=batchSize))
+ count = 0
+ for dropboxID, path in results:
+ attachment = Attachment(self, dropboxID, path)
+ (yield attachment.remove( ))
+ count += 1
+ returnValue(count)
+
+
class CommonHome(LoggingMixIn):
# All these need to be initialized by derived classes for each store type
@@ -239,11 +392,14 @@
_childClass = None
_childTable = None
_bindTable = None
+ _objectBindTable = None
_notifierPrefix = None
_revisionsTable = None
_notificationRevisionsTable = NOTIFICATION_OBJECT_REVISIONS_TABLE
+
+ _cacher = None # Initialize in derived classes
- def __init__(self, transaction, ownerUID, notifier):
+ def __init__(self, transaction, ownerUID, notifiers):
self._txn = transaction
self._ownerUID = ownerUID
self._resourceID = None
@@ -251,7 +407,7 @@
self._childrenLoaded = False
self._children = {}
self._sharedChildren = {}
- self._notifier = notifier
+ self._notifiers = notifiers
self._quotaUsedBytes = None
# Needed for REVISION/BIND table join
@@ -261,18 +417,34 @@
for key, value in self._bindTable.iteritems():
self._revisionBindJoinTable["BIND:%s" % (key,)] = value
+
+ @classproperty
+ def _resourceIDFromOwnerQuery(cls):
+ home = cls._homeSchema
+ return Select([home.RESOURCE_ID],
+ From=home, Where=home.OWNER_UID == Parameter("ownerUID"))
+
+ @classproperty
+ def _ownerFromFromResourceID(cls):
+ home = cls._homeSchema
+ return Select([home.OWNER_UID],
+ From=home,
+ Where=home.RESOURCE_ID == Parameter("resourceID"))
+
@inlineCallbacks
- def initFromStore(self):
+ def initFromStore(self, no_cache=False):
"""
- Initialize this object from the store. We read in and cache all the extra meta-data
- from the DB to avoid having to do DB queries for those individually later.
+ Initialize this object from the store. We read in and cache all the
+ extra meta-data from the DB to avoid having to do DB queries for those
+ individually later.
"""
+ result = yield self._cacher.get(self._ownerUID)
+ if result is None:
+ result = yield self._resourceIDFromOwnerQuery.on(
+ self._txn, ownerUID=self._ownerUID)
+ if result and not no_cache:
+ yield self._cacher.set(self._ownerUID, result)
- result = yield self._txn.execSQL(
- "select %(column_RESOURCE_ID)s from %(name)s"
- " where %(column_OWNER_UID)s = %%s" % self._homeTable,
- [self._ownerUID]
- )
if result:
self._resourceID = result[0][0]
yield self._loadPropertyStore()
@@ -280,56 +452,71 @@
else:
returnValue(None)
+
@classmethod
@inlineCallbacks
def homeWithUID(cls, txn, uid, create=False):
-
if txn._notifierFactory:
- notifier = txn._notifierFactory.newNotifier(
+ notifiers = (txn._notifierFactory.newNotifier(
id=uid, prefix=cls._notifierPrefix
- )
+ ),)
else:
- notifier = None
- homeObject = cls(txn, uid, notifier)
+ notifiers = None
+ homeObject = cls(txn, uid, notifiers)
homeObject = (yield homeObject.initFromStore())
if homeObject is not None:
returnValue(homeObject)
else:
if not create:
returnValue(None)
- # Need to lock to prevent race condition
- # FIXME: this is an entire table lock - ideally we want a row lock
- # but the row does not exist yet. However, the "exclusive" mode
- # does allow concurrent reads so the only thing we block is other
- # attempts to provision a home, which is not too bad
- yield txn.execSQL(
- "lock %(name)s in exclusive mode" % cls._homeTable,
- )
- # Now test again
- exists = yield txn.execSQL(
- "select %(column_RESOURCE_ID)s from %(name)s"
- " where %(column_OWNER_UID)s = %%s" % cls._homeTable,
- [uid]
- )
- if not exists:
- resourceid = (yield txn.execSQL("""
- insert into %(name)s (%(column_OWNER_UID)s) values (%%s)
- returning %(column_RESOURCE_ID)s
- """ % cls._homeTable,
- [uid]
- ))[0][0]
- yield txn.execSQL(
- "insert into %(name)s (%(column_RESOURCE_ID)s) values (%%s)" % cls._homeMetaDataTable,
- [resourceid]
- )
- home = yield cls.homeWithUID(txn, uid)
- if not exists:
+
+ # Use savepoint so we can do a partial rollback if there is a race condition
+ # where this row has already been inserted
+ savepoint = SavepointAction("homeWithUID")
+ yield savepoint.acquire(txn)
+
+ try:
+ resourceid = (yield Insert(
+ {cls._homeSchema.OWNER_UID: uid},
+ Return=cls._homeSchema.RESOURCE_ID).on(txn))[0][0]
+ yield Insert(
+ {cls._homeMetaDataSchema.RESOURCE_ID: resourceid}).on(txn)
+ except Exception: # FIXME: Really want to trap the pg.DatabaseError but in a non-DB specific manner
+ yield savepoint.rollback(txn)
+
+ # Retry the query - row may exist now, if not re-raise
+ homeObject = cls(txn, uid, notifiers)
+ homeObject = (yield homeObject.initFromStore())
+ if homeObject:
+ returnValue(homeObject)
+ else:
+ raise
+ else:
+ yield savepoint.release(txn)
+
+ # Note that we must not cache the owner_uid->resource_id
+ # mapping in _cacher when creating as we don't want that to appear
+ # until AFTER the commit
+ home = cls(txn, uid, notifiers)
+ home = (yield home.initFromStore(no_cache=True))
yield home.createdHome()
- returnValue(home)
+ returnValue(home)
+
+ @classmethod
+ @inlineCallbacks
+ def homeUIDWithResourceID(cls, txn, rid):
+ rows = (yield cls._ownerFromFromResourceID.on(txn, resourceID=rid))
+ if rows:
+ returnValue(rows[0][0])
+ else:
+ returnValue(None)
+
+
def __repr__(self):
return "<%s: %s>" % (self.__class__.__name__, self._resourceID)
+
def uid(self):
"""
Retrieve the unique identifier for this home.
@@ -349,7 +536,7 @@
def name(self):
"""
- Implement L{IDataStoreResource.name} to return the uid.
+ Implement L{IDataStoreObject.name} to return the uid.
"""
return self.uid()
@@ -417,7 +604,17 @@
"""
return self._childClass.objectWithName(self, name, owned=True)
+ @memoizedKey("resourceID", "_children")
+ def childWithID(self, resourceID):
+ """
+ Retrieve the child with the given C{resourceID} contained in this
+ home.
+ @param name: a string.
+ @return: an L{ICalendar} or C{None} if no such child exists.
+ """
+ return self._childClass.objectWithID(self, resourceID)
+
@memoizedKey("name", "_sharedChildren")
def sharedChildWithName(self, name):
"""
@@ -462,24 +659,49 @@
self._children.pop(name, None)
+ @classproperty
+ def _syncTokenQuery(cls):
+ """
+ DAL Select statement to find the sync token.
+ """
+ rev = cls._revisionsSchema
+ bind = cls._bindSchema
+ return Select(
+ [Max(rev.REVISION)],
+ From=rev, Where=(
+ rev.RESOURCE_ID.In(Select(
+ [bind.RESOURCE_ID], From=bind,
+ Where=bind.HOME_RESOURCE_ID == Parameter("resourceID")))
+ ).Or((rev.HOME_RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_ID == None))
+ )
+
+
@inlineCallbacks
def syncToken(self):
- revision = (yield self._txn.execSQL(
- """
- select max(%(REV:column_REVISION)s) from %(REV:name)s
- where %(REV:column_RESOURCE_ID)s in (
- select %(BIND:column_RESOURCE_ID)s from %(BIND:name)s
- where %(BIND:column_HOME_RESOURCE_ID)s = %%s
- ) or (
- %(REV:column_HOME_RESOURCE_ID)s = %%s and
- %(REV:column_RESOURCE_ID)s is null
- )
- """ % self._revisionBindJoinTable,
- [self._resourceID, self._resourceID,]
- ))[0][0]
+ revision = (yield self._syncTokenQuery.on(
+ self._txn, resourceID=self._resourceID))[0][0]
returnValue("%s#%s" % (self._resourceID, revision))
+ @classproperty
+ def _changesQuery(cls):
+ bind = cls._bindSchema
+ rev = cls._revisionsSchema
+ return Select([bind.RESOURCE_NAME, rev.COLLECTION_NAME,
+ rev.RESOURCE_NAME, rev.DELETED],
+ From=rev.join(
+ bind,
+ (bind.HOME_RESOURCE_ID ==
+ Parameter("resourceID")).And(
+ rev.RESOURCE_ID ==
+ bind.RESOURCE_ID),
+ 'left outer'),
+ Where=(rev.REVISION > Parameter("token")).And(
+ rev.HOME_RESOURCE_ID ==
+ Parameter("resourceID")))
+
+
@inlineCallbacks
def resourceNamesSinceToken(self, token, depth):
@@ -490,19 +712,9 @@
wasdeleted
)
for path, collection, name, wasdeleted in
- (yield self._txn.execSQL("""
- select %(BIND:column_RESOURCE_NAME)s, %(REV:column_COLLECTION_NAME)s, %(REV:column_RESOURCE_NAME)s, %(REV:column_DELETED)s
- from %(REV:name)s
- left outer join %(BIND:name)s on (
- %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = %%s and
- %(REV:name)s.%(REV:column_RESOURCE_ID)s = %(BIND:name)s.%(BIND:column_RESOURCE_ID)s
- )
- where
- %(REV:column_REVISION)s > %%s and
- %(REV:name)s.%(REV:column_HOME_RESOURCE_ID)s = %%s
- """ % self._revisionBindJoinTable,
- [self._resourceID, token, self._resourceID],
- ))
+ (yield self._changesQuery.on(self._txn,
+ resourceID=self._resourceID,
+ token=token))
]
deleted = []
@@ -523,22 +735,17 @@
changed_collections.add(path)
# Now deal with shared collections
+ bind = self._bindSchema
+ rev = self._revisionsSchema
shares = yield self.listSharedChildren()
for sharename in shares:
sharetoken = 0 if sharename in changed_collections else token
- shareID = (yield self._txn.execSQL("""
- select %(column_RESOURCE_ID)s from %(name)s
- where
- %(column_RESOURCE_NAME)s = %%s and
- %(column_HOME_RESOURCE_ID)s = %%s and
- %(column_BIND_MODE)s != %%s
- """ % self._bindTable,
- [
- sharename,
- self._resourceID,
- _BIND_MODE_OWN
- ]
- ))[0][0]
+ shareID = (yield Select(
+ [bind.RESOURCE_ID], From=bind,
+ Where=(bind.RESOURCE_NAME == sharename).And(
+ bind.HOME_RESOURCE_ID == self._resourceID).And(
+ bind.BIND_MODE != _BIND_MODE_OWN)
+ ).on(self._txn))[0][0]
results = [
(
sharename,
@@ -546,13 +753,11 @@
wasdeleted
)
for name, wasdeleted in
- (yield self._txn.execSQL("""
- select %(column_RESOURCE_NAME)s, %(column_DELETED)s
- from %(name)s
- where %(column_REVISION)s > %%s and %(column_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [sharetoken, shareID],
- )) if name
+ (yield Select([rev.RESOURCE_NAME, rev.DELETED],
+ From=rev,
+ Where=(rev.REVISION > sharetoken).And(
+ rev.RESOURCE_ID == shareID)).on(self._txn))
+ if name
]
for path, name, wasdeleted in results:
@@ -563,7 +768,6 @@
for path, name, wasdeleted in results:
changed.append("%s/%s" % (path, name,))
-
changed.sort()
deleted.sort()
returnValue((changed, deleted))
@@ -583,7 +787,7 @@
return self._propertyStore
- # IDataStoreResource
+ # IDataStoreObject
def contentType(self):
"""
The content type of objects
@@ -607,292 +811,732 @@
return None
+ @classproperty
+ def _resourceByUIDQuery(cls):
+ obj = cls._objectSchema
+ bind = cls._bindSchema
+ return Select([obj.PARENT_RESOURCE_ID, obj.RESOURCE_ID],
+ From=obj.join(bind, obj.PARENT_RESOURCE_ID ==
+ bind.RESOURCE_ID),
+ Where=(obj.UID == Parameter("uid")).And(
+ bind.HOME_RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
+ def objectResourcesWithUID(self, uid, ignore_children=()):
+ """
+ Return all child object resources with the specified UID, ignoring any
+ in the named child collections.
+ """
+ results = []
+ rows = (yield self._resourceByUIDQuery.on(self._txn, uid=uid,
+ resourceID=self._resourceID))
+ if rows:
+ for childID, objectID in rows:
+ child = (yield self.childWithID(childID))
+ if child and child.name() not in ignore_children:
+ objectResource = (yield child.objectResourceWithID(objectID))
+ results.append(objectResource)
+
+ returnValue(results)
+
+
+ @classproperty
+ def _quotaQuery(cls):
+ meta = cls._homeMetaDataSchema
+ return Select(
+ [meta.QUOTA_USED_BYTES], From=meta,
+ Where=meta.RESOURCE_ID == Parameter("resourceID")
+ )
+
+
+ @inlineCallbacks
def quotaUsedBytes(self):
-
if self._quotaUsedBytes is None:
- self._quotaUsedBytes = (yield self._txn.execSQL(
- "select %(column_QUOTA_USED_BYTES)s from %(name)s"
- " where %(column_RESOURCE_ID)s = %%s" % self._homeMetaDataTable,
- [self._resourceID]
- ))[0][0]
-
+ self._quotaUsedBytes = (yield self._quotaQuery.on(
+ self._txn, resourceID=self._resourceID))[0][0]
returnValue(self._quotaUsedBytes)
+ @classproperty
+ def _preLockResourceIDQuery(cls):
+ meta = cls._homeMetaDataSchema
+ return Select(From=meta,
+ Where=meta.RESOURCE_ID==Parameter("resourceID"),
+ ForUpdate=True)
+
+
+ @classproperty
+ def _increaseQuotaQuery(cls):
+ meta = cls._homeMetaDataSchema
+ return Update({meta.QUOTA_USED_BYTES: meta.QUOTA_USED_BYTES +
+ Parameter("delta")},
+ Where=meta.RESOURCE_ID == Parameter("resourceID"),
+ Return=meta.QUOTA_USED_BYTES)
+
+
+ @classproperty
+ def _resetQuotaQuery(cls):
+ meta = cls._homeMetaDataSchema
+ return Update({meta.QUOTA_USED_BYTES: 0},
+ Where=meta.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def adjustQuotaUsedBytes(self, delta):
"""
- Adjust quota used. We need to get a lock on the row first so that the adjustment
- is done atomically. It is import to do the 'select ... for update' because a race also
- exists in the 'update ... x = x + 1' case as seen via unit tests.
+ Adjust quota used. We need to get a lock on the row first so that the
+ adjustment is done atomically. It is import to do the 'select ... for
+ update' because a race also exists in the 'update ... x = x + 1' case as
+ seen via unit tests.
"""
- yield self._txn.execSQL("""
- select * from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- for update
- """ % self._homeMetaDataTable,
- [self._resourceID]
- )
+ yield self._preLockResourceIDQuery.on(self._txn,
+ resourceID=self._resourceID)
- self._quotaUsedBytes = (yield self._txn.execSQL("""
- update %(name)s
- set %(column_QUOTA_USED_BYTES)s = %(column_QUOTA_USED_BYTES)s + %%s
- where %(column_RESOURCE_ID)s = %%s
- returning %(column_QUOTA_USED_BYTES)s
- """ % self._homeMetaDataTable,
- [delta, self._resourceID]
- ))[0][0]
+ self._quotaUsedBytes = (yield self._increaseQuotaQuery.on(
+ self._txn, delta=delta, resourceID=self._resourceID))[0][0]
# Double check integrity
if self._quotaUsedBytes < 0:
- log.error("Fixing quota adjusted below zero to %s by change amount %s" % (self._quotaUsedBytes, delta,))
- yield self._txn.execSQL("""
- update %(name)s
- set %(column_QUOTA_USED_BYTES)s = 0
- where %(column_RESOURCE_ID)s = %%s
- """ % self._homeMetaDataTable,
- [self._resourceID]
- )
+ log.error(
+ "Fixing quota adjusted below zero to %s by change amount %s" %
+ (self._quotaUsedBytes, delta,))
+ yield self._resetQuotaQuery.on(self._txn,
+ resourceID=self._resourceID)
self._quotaUsedBytes = 0
+ def addNotifier(self, notifier):
+ if self._notifiers is None:
+ self._notifiers = ()
+ self._notifiers += (notifier,)
+
+
def notifierID(self, label="default"):
- if self._notifier:
- return self._notifier.getID(label)
+ if self._notifiers:
+ return self._notifiers[0].getID(label)
else:
return None
+
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ if self._notifiers:
+ for notifier in self._notifiers:
+ name = (yield notifier.nodeName(label=label))
+ if name is not None:
+ returnValue(name)
+ else:
+ returnValue(None)
+
def notifyChanged(self):
"""
Trigger a notification of a change
"""
- if self._notifier:
- self._txn.postCommit(self._notifier.notify)
+ if self._notifiers:
+ for notifier in self._notifiers:
+ self._txn.postCommit(notifier.notify)
-class CommonHomeChild(LoggingMixIn, FancyEqMixin):
+
+class _SharedSyncLogic(object):
"""
+ Logic for maintaining sync-token shared between notification collections and
+ shared collections.
+ """
+
+ @classproperty
+ def _childSyncTokenQuery(cls):
+ """
+ DAL query for retrieving the sync token of a L{CommonHomeChild} based on
+ its resource ID.
+ """
+ rev = cls._revisionsSchema
+ return Select([Max(rev.REVISION)], From=rev,
+ Where=rev.RESOURCE_ID == Parameter("resourceID"))
+
+
+ @inlineCallbacks
+ def syncToken(self):
+ if self._syncTokenRevision is None:
+ self._syncTokenRevision = (yield self._childSyncTokenQuery.on(
+ self._txn, resourceID=self._resourceID))[0][0]
+ returnValue(("%s#%s" % (self._resourceID, self._syncTokenRevision,)))
+
+
+ def objectResourcesSinceToken(self, token):
+ raise NotImplementedError()
+
+
+ @classproperty
+ def _objectNamesSinceRevisionQuery(cls):
+ """
+ DAL query for (resource, deleted-flag)
+ """
+ rev = cls._revisionsSchema
+ return Select([rev.RESOURCE_NAME, rev.DELETED],
+ From=rev,
+ Where=(rev.REVISION > Parameter("revision")).And(
+ rev.RESOURCE_ID == Parameter("resourceID")))
+
+
+ @inlineCallbacks
+ def resourceNamesSinceToken(self, token):
+ results = [
+ (name if name else "", deleted)
+ for name, deleted in
+ (yield self._objectNamesSinceRevisionQuery.on(
+ self._txn, revision=token, resourceID=self._resourceID))
+ ]
+ results.sort(key=lambda x:x[1])
+
+ changed = []
+ deleted = []
+ for name, wasdeleted in results:
+ if name:
+ if wasdeleted:
+ if token:
+ deleted.append(name)
+ else:
+ changed.append(name)
+
+ returnValue((changed, deleted))
+
+
+ @classproperty
+ def _removeDeletedRevision(cls):
+ rev = cls._revisionsSchema
+ return Delete(From=rev,
+ Where=(rev.HOME_RESOURCE_ID == Parameter("homeID")).And(
+ rev.COLLECTION_NAME == Parameter("collectionName")))
+
+
+ @classproperty
+ def _addNewRevision(cls):
+ rev = cls._revisionsSchema
+ return Insert({rev.HOME_RESOURCE_ID: Parameter("homeID"),
+ rev.RESOURCE_ID: Parameter("resourceID"),
+ rev.COLLECTION_NAME: Parameter("collectionName"),
+ rev.RESOURCE_NAME: None,
+ # Always starts false; may be updated to be a tombstone
+ # later.
+ rev.DELETED: False},
+ Return=[rev.REVISION])
+
+
+ @inlineCallbacks
+ def _initSyncToken(self):
+ yield self._removeDeletedRevision.on(
+ self._txn, homeID=self._home._resourceID, collectionName=self._name
+ )
+ self._syncTokenRevision = (yield (
+ self._addNewRevision.on(self._txn, homeID=self._home._resourceID,
+ resourceID=self._resourceID,
+ collectionName=self._name)))[0][0]
+
+
+ @classproperty
+ def _renameSyncTokenQuery(cls):
+ """
+ DAL query to change sync token for a rename (increment and adjust
+ resource name).
+ """
+ rev = cls._revisionsSchema
+ return Update({
+ rev.REVISION: schema.REVISION_SEQ,
+ rev.COLLECTION_NAME: Parameter("name")},
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")
+ ).And(rev.RESOURCE_NAME == None),
+ Return=rev.REVISION
+ )
+
+
+ @inlineCallbacks
+ def _renameSyncToken(self):
+ self._syncTokenRevision = (yield self._renameSyncTokenQuery.on(
+ self._txn, name=self._name, resourceID=self._resourceID))[0][0]
+
+
+ @classproperty
+ def _deleteSyncTokenQuery(cls):
+ """
+ DAL query to update a sync revision to be a tombstone instead.
+ """
+ rev = cls._revisionsSchema
+ return Delete(From=rev, Where=(
+ rev.HOME_RESOURCE_ID == Parameter("homeID")).And(
+ rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.COLLECTION_NAME == None))
+
+
+ @classproperty
+ def _sharedRemovalQuery(cls):
+ """
+ DAL query to update the sync token for a shared collection.
+ """
+ rev = cls._revisionsSchema
+ return Update({rev.RESOURCE_ID: None,
+ rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: True},
+ Where=(rev.HOME_RESOURCE_ID == Parameter("homeID")).And(
+ rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == None)
+ )
+
+
+ @classproperty
+ def _unsharedRemovalQuery(cls):
+ """
+ DAL query to update the sync token for an owned collection.
+ """
+ rev = cls._revisionsSchema
+ return Update({rev.RESOURCE_ID: None,
+ rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: True},
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == None),
+ )
+
+
+ @inlineCallbacks
+ def _deletedSyncToken(self, sharedRemoval=False):
+ # Remove all child entries
+ yield self._deleteSyncTokenQuery.on(self._txn,
+ homeID=self._home._resourceID,
+ resourceID=self._resourceID)
+
+ # If this is a share being removed then we only mark this one specific
+ # home/resource-id as being deleted. On the other hand, if it is a
+ # non-shared collection, then we need to mark all collections
+ # with the resource-id as being deleted to account for direct shares.
+ if sharedRemoval:
+ yield self._sharedRemovalQuery.on(self._txn,
+ homeID=self._home._resourceID,
+ resourceID=self._resourceID)
+ else:
+ yield self._unsharedRemovalQuery.on(self._txn,
+ resourceID=self._resourceID)
+ self._syncTokenRevision = None
+
+
+ def _insertRevision(self, name):
+ return self._changeRevision("insert", name)
+
+
+ def _updateRevision(self, name):
+ return self._changeRevision("update", name)
+
+
+ def _deleteRevision(self, name):
+ return self._changeRevision("delete", name)
+
+
+ @classproperty
+ def _deleteBumpTokenQuery(cls):
+ rev = cls._revisionsSchema
+ return Update({rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: True},
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == Parameter("name")),
+ Return=rev.REVISION)
+
+
+ @classproperty
+ def _updateBumpTokenQuery(cls):
+ rev = cls._revisionsSchema
+ return Update({rev.REVISION: schema.REVISION_SEQ},
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == Parameter("name")),
+ Return=rev.REVISION)
+
+
+ @classproperty
+ def _insertFindPreviouslyNamedQuery(cls):
+ rev = cls._revisionsSchema
+ return Select([rev.RESOURCE_ID], From=rev,
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == Parameter("name")))
+
+
+ @classproperty
+ def _updatePreviouslyNamedQuery(cls):
+ rev = cls._revisionsSchema
+ return Update({rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: False},
+ Where=(rev.RESOURCE_ID == Parameter("resourceID")).And(
+ rev.RESOURCE_NAME == Parameter("name")),
+ Return=rev.REVISION)
+
+
+ @classproperty
+ def _completelyNewRevisionQuery(cls):
+ rev = cls._revisionsSchema
+ return Insert({rev.HOME_RESOURCE_ID: Parameter("homeID"),
+ rev.RESOURCE_ID: Parameter("resourceID"),
+ rev.RESOURCE_NAME: Parameter("name"),
+ rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: False},
+ Return=rev.REVISION)
+
+
+ @inlineCallbacks
+ def _changeRevision(self, action, name):
+ if action == "delete":
+ self._syncTokenRevision = (
+ yield self._deleteBumpTokenQuery.on(
+ self._txn, resourceID=self._resourceID, name=name))[0][0]
+ elif action == "update":
+ self._syncTokenRevision = (
+ yield self._updateBumpTokenQuery.on(
+ self._txn, resourceID=self._resourceID, name=name))[0][0]
+ elif action == "insert":
+ # Note that an "insert" may happen for a resource that previously
+ # existed and then was deleted. In that case an entry in the
+ # REVISIONS table still exists so we have to detect that and do db
+ # INSERT or UPDATE as appropriate
+
+ found = bool( (
+ yield self._insertFindPreviouslyNamedQuery.on(
+ self._txn, resourceID=self._resourceID, name=name)) )
+ if found:
+ self._syncTokenRevision = (
+ yield self._updatePreviouslyNamedQuery.on(
+ self._txn, resourceID=self._resourceID, name=name)
+ )[0][0]
+ else:
+ self._syncTokenRevision = (
+ yield self._completelyNewRevisionQuery.on(
+ self._txn, homeID=self._home._resourceID,
+ resourceID=self._resourceID, name=name)
+ )[0][0]
+ self._maybeNotify()
+
+
+ def _maybeNotify(self):
+ """
+ Maybe notify changed. (Overridden in NotificationCollection.)
+ """
+
+
+
+class CommonHomeChild(LoggingMixIn, FancyEqMixin, _SharedSyncLogic):
+ """
Common ancestor class of AddressBooks and Calendars.
"""
- compareAttributes = "_name _home _resourceID".split()
+ compareAttributes = (
+ "_name",
+ "_home",
+ "_resourceID",
+ )
_objectResourceClass = None
- _bindTable = None
- _homeChildTable = None
- _homeChildBindTable = None
- _revisionsTable = None
- _revisionsBindTable = None
- _objectTable = None
- def __init__(self, home, name, resourceID):
- self._home = home
- self._name = name
- self._resourceID = resourceID
- self._created = None
- self._modified = None
- self._objects = {}
- self._objectNames = None
- self._syncTokenRevision = None
+ _bindSchema = None
+ _homeChildSchema = None
+ _revisionsSchema = None
+ _objectSchema = None
- if home._notifier:
+ _bindTable = None
+ _homeChildTable = None
+ _homeChildBindTable = None
+ _revisionsTable = None
+ _revisionsBindTable = None
+ _objectTable = None
+
+
+ def __init__(self, home, name, resourceID, owned):
+
+ if home._notifiers:
childID = "%s/%s" % (home.uid(), name)
- notifier = home._notifier.clone(label="collection", id=childID)
+ notifiers = [notifier.clone(label="collection", id=childID)
+ for notifier in home._notifiers]
else:
- notifier = None
- self._notifier = notifier
+ notifiers = None
- self._index = None # Derived classes need to set this
- self._invites = None # Derived classes need to set this
+ self._home = home
+ self._name = name
+ self._resourceID = resourceID
+ self._owned = owned
+ self._created = None
+ self._modified = None
+ self._objects = {}
+ self._objectNames = None
+ self._syncTokenRevision = None
+ self._notifiers = notifiers
+ self._index = None # Derived classes need to set this
+ self._invites = None # Derived classes need to set this
+
+ @classproperty
+ def _ownedChildListQuery(cls):
+ bind = cls._bindSchema
+ return Select([bind.RESOURCE_NAME], From=bind,
+ Where=(bind.HOME_RESOURCE_ID ==
+ Parameter("resourceID")).And(
+ bind.BIND_MODE == _BIND_MODE_OWN))
+
+
+ @classproperty
+ def _sharedChildListQuery(cls):
+ bind = cls._bindSchema
+ return Select([bind.RESOURCE_NAME], From=bind,
+ Where=(bind.HOME_RESOURCE_ID ==
+ Parameter("resourceID")).And(
+ bind.BIND_MODE != _BIND_MODE_OWN).And(
+ bind.RESOURCE_NAME != None))
+
+
@classmethod
@inlineCallbacks
def listObjects(cls, home, owned):
"""
- Retrieve the names of the children that exist in this home.
+ Retrieve the names of the children that exist in the given home.
@return: an iterable of C{str}s.
"""
- # FIXME: not specified on the interface or exercised by the tests, but
- # required by clients of the implementation!
+ # FIXME: tests don't cover this as directly as they should.
if owned:
- rows = yield home._txn.execSQL("""
- select %(column_RESOURCE_NAME)s from %(name)s
- where
- %(column_HOME_RESOURCE_ID)s = %%s and
- %(column_BIND_MODE)s = %%s
- """ % cls._bindTable,
- [home._resourceID, _BIND_MODE_OWN]
- )
+ rows = yield cls._ownedChildListQuery.on(
+ home._txn, resourceID=home._resourceID)
else:
- rows = yield home._txn.execSQL("""
- select %(column_RESOURCE_NAME)s from %(name)s
- where
- %(column_HOME_RESOURCE_ID)s = %%s and
- %(column_BIND_MODE)s != %%s and
- %(column_RESOURCE_NAME)s is not null
- """ % cls._bindTable,
- [home._resourceID, _BIND_MODE_OWN]
- )
-
+ rows = yield cls._sharedChildListQuery.on(
+ home._txn, resourceID=home._resourceID)
names = [row[0] for row in rows]
returnValue(names)
+
@classmethod
+ def _allHomeChildrenQuery(cls, owned):
+ bind = cls._bindSchema
+ child = cls._homeChildSchema
+ if owned:
+ ownedPiece = bind.BIND_MODE == _BIND_MODE_OWN
+ else:
+ ownedPiece = (bind.BIND_MODE != _BIND_MODE_OWN).And(
+ bind.RESOURCE_NAME != None)
+ return Select([child.RESOURCE_ID,
+ bind.RESOURCE_NAME,
+ child.CREATED,
+ child.MODIFIED],
+ From=child.join(
+ bind, child.RESOURCE_ID == bind.RESOURCE_ID,
+ 'left outer'),
+ Where=(bind.HOME_RESOURCE_ID == Parameter("resourceID")
+ ).And(ownedPiece))
+
+
+ @classproperty
+ def _ownedHomeChildrenQuery(cls):
+ return cls._allHomeChildrenQuery(True)
+
+
+ @classproperty
+ def _sharedHomeChildrenQuery(cls):
+ return cls._allHomeChildrenQuery(False)
+
+
+ @classmethod
@inlineCallbacks
def loadAllObjects(cls, home, owned):
"""
- Load all child objects and return a list of them. This must create the child classes
- and initialize them using "batched" SQL operations to keep this constant wrt the number of
- children. This is an optimization for Depth:1 operations on the home.
+ Load all child objects and return a list of them. This must create the
+ child classes and initialize them using "batched" SQL operations to keep
+ this constant wrt the number of children. This is an optimization for
+ Depth:1 operations on the home.
"""
-
results = []
# Load from the main table first
if owned:
- ownedPiece = "%(BIND:column_BIND_MODE)s = %%s"
+ query = cls._ownedHomeChildrenQuery
else:
- ownedPiece = "%(BIND:column_BIND_MODE)s != %%s and %(BIND:column_RESOURCE_NAME)s is not null"
- dataRows = (yield home._txn.execSQL(("""
- select %(CHILD:column_RESOURCE_ID)s, %(BIND:column_RESOURCE_NAME)s, %(CHILD:column_CREATED)s, %(CHILD:column_MODIFIED)s
- from %(CHILD:name)s
- left outer join %(BIND:name)s on (%(CHILD:column_RESOURCE_ID)s = %(BIND:column_RESOURCE_ID)s)
- where
- %(BIND:column_HOME_RESOURCE_ID)s = %%s and """ + ownedPiece
- ) % cls._homeChildBindTable,
- [
- home._resourceID,
- _BIND_MODE_OWN,
- ]
- ))
-
+ query = cls._sharedHomeChildrenQuery
+ dataRows = (yield query.on(home._txn, resourceID=home._resourceID))
+
if dataRows:
# Get property stores for all these child resources (if any found)
- propertyStores =(yield PropertyStore.loadAll(
- home.uid(),
- home._txn,
- cls._bindTable["name"],
- cls._bindTable["column_RESOURCE_ID"],
- cls._bindTable["column_HOME_RESOURCE_ID"],
- home._resourceID,
+ propertyStores = (yield PropertyStore.forMultipleResources(
+ home.uid(), home._txn,
+ cls._bindSchema.RESOURCE_ID, cls._bindSchema.HOME_RESOURCE_ID,
+ home._resourceID
))
- revisions = (yield home._txn.execSQL(("""
- select %(REV:name)s.%(REV:column_RESOURCE_ID)s, max(%(REV:column_REVISION)s) from %(REV:name)s
- left join %(BIND:name)s on (%(REV:name)s.%(REV:column_RESOURCE_ID)s = %(BIND:name)s.%(BIND:column_RESOURCE_ID)s)
- where
- %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = %%s and
- %(BIND:column_BIND_MODE)s """ + ("=" if owned else "!=") + """ %%s and
- %(REV:column_DELETED)s = FALSE
- group by %(REV:name)s.%(REV:column_RESOURCE_ID)s
- """) % cls._revisionsBindTable,
- [
- home._resourceID,
- _BIND_MODE_OWN,
- ]
- ))
+ bind = cls._bindSchema
+ rev = cls._revisionsSchema
+ if owned:
+ ownedCond = bind.BIND_MODE == _BIND_MODE_OWN
+ else:
+ ownedCond = bind.BIND_MODE != _BIND_MODE_OWN
+ revisions = (yield Select(
+ [rev.RESOURCE_ID, Max(rev.REVISION)],
+ From=rev.join(bind, rev.RESOURCE_ID == bind.RESOURCE_ID, 'left'),
+ Where=(bind.HOME_RESOURCE_ID == home._resourceID).
+ And(ownedCond).
+ And((rev.RESOURCE_NAME != None).Or(rev.DELETED == False)),
+ GroupBy=rev.RESOURCE_ID
+ ).on(home._txn))
revisions = dict(revisions)
-
+
# Create the actual objects merging in properties
- for resource_id, resource_name, created, modified in dataRows:
- child = cls(home, resource_name, resource_id)
+ for resourceID, resource_name, created, modified in dataRows:
+ child = cls(home, resource_name, resourceID, owned)
child._created = created
child._modified = modified
- child._syncTokenRevision = revisions[resource_id]
- yield child._loadPropertyStore(propertyStores.get(resource_id, None))
+ child._syncTokenRevision = revisions[resourceID]
+ propstore = propertyStores.get(resourceID, None)
+ yield child._loadPropertyStore(propstore)
results.append(child)
-
returnValue(results)
+
@classmethod
+ def _homeChildLookup(cls, ownedPart):
+ """
+ Common portions of C{_ownedResourceIDByName}
+ C{_resourceIDSharedToHomeByName}, except for the 'owned' fragment of the
+ Where clause, supplied as an argument.
+ """
+ bind = cls._bindSchema
+ return Select(
+ [bind.RESOURCE_ID],
+ From=bind,
+ Where=(bind.RESOURCE_NAME == Parameter('objectName')).And(
+ bind.HOME_RESOURCE_ID == Parameter('homeID')).And(
+ ownedPart))
+
+
+ @classproperty
+ def _resourceIDOwnedByHomeByName(cls):
+ """
+ DAL query to look up an object resource ID owned by a home, given a
+ resource name (C{objectName}), and a home resource ID
+ (C{homeID}).
+ """
+ return cls._homeChildLookup(
+ cls._bindSchema.BIND_MODE == _BIND_MODE_OWN)
+
+
+ @classproperty
+ def _resourceIDSharedToHomeByName(cls):
+ """
+ DAL query to look up an object resource ID shared to a home, given a
+ resource name (C{objectName}), and a home resource ID
+ (C{homeID}).
+ """
+ return cls._homeChildLookup(
+ cls._bindSchema.BIND_MODE != _BIND_MODE_OWN)
+
+
+ @classmethod
@inlineCallbacks
def objectWithName(cls, home, name, owned):
"""
- Retrieve the child with the given C{name} contained in this
+ Retrieve the child with the given C{name} contained in the given
C{home}.
@param home: a L{CommonHome}.
- @param name: a string.
+
+ @param name: a string; the name of the L{CommonHomeChild} to retrieve.
+
@param owned: a boolean - whether or not to get a shared child
- @param mustExist: a boolean - if False return and empty object
- @return: an L{CommonHomChild} or C{None} if no such child
+ @return: an L{CommonHomeChild} or C{None} if no such child
exists.
"""
-
if owned:
- data = yield home._txn.execSQL("""
- select %(column_RESOURCE_ID)s from %(name)s
- where
- %(column_RESOURCE_NAME)s = %%s and
- %(column_HOME_RESOURCE_ID)s = %%s and
- %(column_BIND_MODE)s = %%s
- """ % cls._bindTable,
- [
- name,
- home._resourceID,
- _BIND_MODE_OWN
- ]
- )
+ query = cls._resourceIDOwnedByHomeByName
else:
- data = yield home._txn.execSQL("""
- select %(column_RESOURCE_ID)s from %(name)s
- where
- %(column_RESOURCE_NAME)s = %%s and
- %(column_HOME_RESOURCE_ID)s = %%s and
- %(column_BIND_MODE)s != %%s
- """ % cls._bindTable,
- [
- name,
- home._resourceID,
- _BIND_MODE_OWN
- ]
- )
-
+ query = cls._resourceIDSharedToHomeByName
+ data = yield query.on(home._txn,
+ objectName=name, homeID=home._resourceID)
if not data:
returnValue(None)
resourceID = data[0][0]
- child = cls(home, name, resourceID)
+ child = cls(home, name, resourceID, owned)
yield child.initFromStore()
returnValue(child)
+
+ @classproperty
+ def _homeChildByIDQuery(cls):
+ """
+ DAL query that looks up home child names / bind modes by home child
+ resouce ID and home resource ID.
+ """
+ bind = cls._bindSchema
+ return Select([bind.RESOURCE_NAME, bind.BIND_MODE],
+ From=bind,
+ Where=(bind.RESOURCE_ID == Parameter("resourceID")
+ ).And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
+
+
@classmethod
@inlineCallbacks
+ def objectWithID(cls, home, resourceID):
+ """
+ Retrieve the child with the given C{resourceID} contained in the given
+ C{home}.
+
+ @param home: a L{CommonHome}.
+ @param resourceID: a string.
+ @return: an L{CommonHomeChild} or C{None} if no such child
+ exists.
+ """
+ data = yield cls._homeChildByIDQuery.on(
+ home._txn, resourceID=resourceID, homeID=home._resourceID)
+ if not data:
+ returnValue(None)
+ name, mode = data[0]
+ child = cls(home, name, resourceID, mode == _BIND_MODE_OWN)
+ yield child.initFromStore()
+ returnValue(child)
+
+
+ @classproperty
+ def _insertDefaultHomeChild(cls):
+ """
+ DAL statement to create a home child with all default values.
+ """
+ child = cls._homeChildSchema
+ return Insert({child.RESOURCE_ID: schema.RESOURCE_ID_SEQ},
+ Return=(child.RESOURCE_ID, child.CREATED, child.MODIFIED))
+
+
+ @classproperty
+ def _initialOwnerBind(cls):
+ """
+ DAL statement to create a bind entry for a particular home value.
+ """
+ bind = cls._bindSchema
+ return Insert({bind.HOME_RESOURCE_ID: Parameter("homeID"),
+ bind.RESOURCE_ID: Parameter("resourceID"),
+ bind.RESOURCE_NAME: Parameter("name"),
+ bind.BIND_MODE: _BIND_MODE_OWN,
+ bind.SEEN_BY_OWNER: True,
+ bind.SEEN_BY_SHAREE: True,
+ bind.BIND_STATUS: _BIND_STATUS_ACCEPTED})
+
+
+ @classmethod
+ @inlineCallbacks
def create(cls, home, name):
-
child = (yield cls.objectWithName(home, name, owned=True))
- if child:
+ if child is not None:
raise HomeChildNameAlreadyExistsError(name)
if name.startswith("."):
raise HomeChildNameNotAllowedError(name)
-
- # Create and initialize (in a similar manner to initFromStore) this object
- rows = yield home._txn.execSQL("select nextval('RESOURCE_ID_SEQ')")
- resourceID = rows[0][0]
- _created, _modified = (yield home._txn.execSQL("""
- insert into %(name)s (%(column_RESOURCE_ID)s)
- values (%%s)
- returning %(column_CREATED)s, %(column_MODIFIED)s
- """ % cls._homeChildTable,
- [resourceID]
- ))[0]
-
+
+ # Create and initialize this object, similar to initFromStore
+ resourceID, _created, _modified = (
+ yield cls._insertDefaultHomeChild.on(home._txn))[0]
+
# Bind table needs entry
- yield home._txn.execSQL("""
- insert into %(name)s (
- %(column_HOME_RESOURCE_ID)s,
- %(column_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_BIND_MODE)s,
- %(column_SEEN_BY_OWNER)s, %(column_SEEN_BY_SHAREE)s, %(column_BIND_STATUS)s) values (
- %%s, %%s, %%s, %%s, %%s, %%s, %%s)
- """ % cls._bindTable,
- [home._resourceID, resourceID, name, _BIND_MODE_OWN, True, True,
- _BIND_STATUS_ACCEPTED]
- )
+ yield cls._initialOwnerBind.on(home._txn, homeID=home._resourceID,
+ resourceID=resourceID, name=name)
# Initialize other state
- child = cls(home, name, resourceID)
+ child = cls(home, name, resourceID, True)
child._created = _created
child._modified = _modified
yield child._loadPropertyStore()
@@ -907,21 +1551,31 @@
home.notifyChanged()
returnValue(child)
+
+ @classproperty
+ def _datesByIDQuery(cls):
+ """
+ DAL query to retrieve created/modified dates based on a resource ID.
+ """
+ child = cls._homeChildSchema
+ return Select([child.CREATED, child.MODIFIED],
+ From=child,
+ Where=child.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def initFromStore(self):
"""
- Initialise this object from the store. We read in and cache all the extra metadata
- from the DB to avoid having to do DB queries for those individually later.
+ Initialise this object from the store, based on its already-populated
+ resource ID. We read in and cache all the extra metadata from the DB to
+ avoid having to do DB queries for those individually later.
"""
+ self._created, self._modified = (
+ yield self._datesByIDQuery.on(self._txn,
+ resourceID=self._resourceID))[0]
+ yield self._loadPropertyStore()
- self._created, self._modified = (yield self._txn.execSQL(
- "select %(column_CREATED)s, %(column_MODIFIED)s from %(name)s "
- "where %(column_RESOURCE_ID)s = %%s" % self._homeChildTable,
- [self._resourceID]
- ))[0]
- yield self._loadPropertyStore()
-
@property
def _txn(self):
return self._home._txn
@@ -949,19 +1603,34 @@
"""
return self._resourceID is not None
+
def name(self):
return self._name
+ @classproperty
+ def _renameQuery(cls):
+ """
+ DAL statement to rename a L{CommonHomeChild}
+ """
+ bind = cls._bindSchema
+ return Update({bind.RESOURCE_NAME: Parameter("name")},
+ Where=(bind.RESOURCE_ID == Parameter("resourceID")).And(
+ bind.HOME_RESOURCE_ID == Parameter("homeID")))
+
+
@inlineCallbacks
def rename(self, name):
+ """
+ Change the name of this L{CommonHomeChild} and update its sync token to
+ reflect that change.
+
+ @return: a L{Deferred} which fires when the modification is complete.
+ """
oldName = self._name
- yield self._txn.execSQL(
- "update %(name)s set %(column_RESOURCE_NAME)s = %%s "
- "where %(column_RESOURCE_ID)s = %%s AND "
- "%(column_HOME_RESOURCE_ID)s = %%s" % self._bindTable,
- [name, self._resourceID, self._home._resourceID]
- )
+ yield self._renameQuery.on(self._txn, name=name,
+ resourceID=self._resourceID,
+ homeID=self._home._resourceID)
self._name = name
# update memos
del self._home._children[oldName]
@@ -971,29 +1640,62 @@
self.notifyChanged()
+
+ @classproperty
+ def _deleteQuery(cls):
+ """
+ DAL statement to delete a L{CommonHomeChild} by its resource ID.
+ """
+ child = cls._homeChildSchema
+ return Delete(child, Where=child.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def remove(self):
-
yield self._deletedSyncToken()
+ yield self._deleteQuery.on(self._txn, NoSuchHomeChildError,
+ resourceID=self._resourceID)
+ self.properties()._removeResource()
- yield self._txn.execSQL(
- "delete from %(name)s where %(column_RESOURCE_ID)s = %%s" % self._homeChildTable,
- [self._resourceID],
- raiseOnZeroRowCount=NoSuchHomeChildError
- )
-
# Set to non-existent state
self._resourceID = None
- self._created = None
- self._modified = None
- self._objects = {}
+ self._created = None
+ self._modified = None
+ self._objects = {}
self.notifyChanged()
+
def ownerHome(self):
return self._home
+ @classproperty
+ def _ownerHomeFromResourceQuery(cls):
+ """
+ DAL query to retrieve the home resource ID of the owner from the bound
+ home-child ID.
+ """
+ bind = cls._bindSchema
+ return Select([bind.HOME_RESOURCE_ID],
+ From=bind,
+ Where=(bind.RESOURCE_ID ==
+ Parameter("resourceID")).And(
+ bind.BIND_MODE == _BIND_MODE_OWN))
+
+
+ @inlineCallbacks
+ def sharerHomeID(self):
+ if self._owned:
+ # If this was loaded by its owner then we can skip the query, since
+ # we already know who the owner is.
+ returnValue(self._home._resourceID)
+ else:
+ rid = (yield self._ownerHomeFromResourceQuery.on(
+ self._txn, resourceID=self._resourceID))[0][0]
+ returnValue(rid)
+
+
def setSharingUID(self, uid):
self.properties()._setPerUserUID(uid)
@@ -1011,15 +1713,22 @@
returnValue(results)
+ @classproperty
+ def _objectResourceNamesQuery(cls):
+ """
+ DAL query to load all object resource names for a home child.
+ """
+ obj = cls._objectSchema
+ return Select([obj.RESOURCE_NAME], From=obj,
+ Where=obj.PARENT_RESOURCE_ID == Parameter('resourceID'))
+
+
@inlineCallbacks
def listObjectResources(self):
if self._objectNames is None:
- rows = yield self._txn.execSQL(
- "select %(column_RESOURCE_NAME)s from %(name)s "
- "where %(column_PARENT_RESOURCE_ID)s = %%s" % self._objectTable,
- [self._resourceID])
+ rows = yield self._objectResourceNamesQuery.on(
+ self._txn, resourceID=self._resourceID)
self._objectNames = sorted([row[0] for row in rows])
-
returnValue(self._objectNames)
@@ -1027,30 +1736,62 @@
if name in self._objects:
return succeed(self._objects[name])
else:
- return self._makeObjectResource(name, None)
+ return self._makeObjectResource(name=name)
def objectResourceWithUID(self, uid):
if uid in self._objects:
return succeed(self._objects[uid])
else:
- return self._makeObjectResource(None, uid)
+ return self._makeObjectResource(uid=uid)
+ def objectResourceWithID(self, resourceID):
+ if resourceID in self._objects:
+ return succeed(self._objects[resourceID])
+ else:
+ return self._makeObjectResource(resourceID=resourceID)
+
+
@inlineCallbacks
- def _makeObjectResource(self, name, uid):
+ def _makeObjectResource(self, name=None, uid=None, resourceID=None):
"""
- We create the empty object first then have it initialize itself from the store
+ We create the empty object first then have it initialize itself from the
+ store.
"""
- objectResource = (yield self._objectResourceClass.objectWithName(self, name, uid))
+ if resourceID:
+ objectResource = (
+ yield self._objectResourceClass.objectWithID(self, resourceID)
+ )
+ else:
+ objectResource = (
+ yield self._objectResourceClass.objectWithName(self, name, uid)
+ )
if objectResource:
self._objects[objectResource.name()] = objectResource
self._objects[objectResource.uid()] = objectResource
+ self._objects[objectResource._resourceID] = objectResource
else:
- self._objects[name if name else uid] = None
+ if resourceID:
+ self._objects[resourceID] = None
+ else:
+ self._objects[name if name else uid] = None
returnValue(objectResource)
+ @classproperty
+ def _resourceNameForUIDQuery(cls):
+ """
+ DAL query to retrieve the resource name for an object resource based on
+ its UID column.
+ """
+ obj = cls._objectSchema
+ return Select(
+ [obj.RESOURCE_NAME], From=obj,
+ Where=(obj.UID == Parameter("uid")
+ ).And(obj.PARENT_RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
def resourceNameForUID(self, uid):
try:
@@ -1058,20 +1799,28 @@
returnValue(resource.name() if resource else None)
except KeyError:
pass
-
- rows = yield self._txn.execSQL("""
- select %(column_RESOURCE_NAME)s
- from %(name)s
- where %(column_UID)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
- """ % self._objectTable,
- [uid, self._resourceID]
- )
+ rows = yield self._resourceNameForUIDQuery.on(
+ self._txn, uid=uid, resourceID=self._resourceID)
if rows:
returnValue(rows[0][0])
else:
self._objects[uid] = None
returnValue(None)
+
+ @classproperty
+ def _resourceUIDForNameQuery(cls):
+ """
+ DAL query to retrieve the UID for an object resource based on its
+ resource name column.
+ """
+ obj = cls._objectSchema
+ return Select(
+ [obj.UID], From=obj,
+ Where=(obj.UID == Parameter("name")
+ ).And(obj.PARENT_RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
def resourceUIDForName(self, name):
try:
@@ -1079,258 +1828,73 @@
returnValue(resource.uid() if resource else None)
except KeyError:
pass
-
- rows = yield self._txn.execSQL("""
- select %(column_UID)s
- from %(name)s
- where %(column_RESOURCE_NAME)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
- """ % self._objectTable,
- [name, self._resourceID]
- )
+ rows = yield self._resourceUIDForNameQuery.on(
+ self._txn, name=name, resourceID=self._resourceID)
if rows:
returnValue(rows[0][0])
else:
self._objects[name] = None
returnValue(None)
+
@inlineCallbacks
def createObjectResourceWithName(self, name, component, metadata=None):
"""
- Create a new resource with component data and optional metadata. We create the
- python object using the metadata then create the actual store object with setComponent.
+ Create a new resource with component data and optional metadata. We
+ create the python object using the metadata then create the actual store
+ object with setComponent.
"""
if name in self._objects:
if self._objects[name]:
raise ObjectResourceNameAlreadyExistsError()
- objectResource = (yield self._objectResourceClass.create(self, name, component, metadata))
+ objectResource = (
+ yield self._objectResourceClass.create(self, name, component,
+ metadata)
+ )
self._objects[objectResource.name()] = objectResource
self._objects[objectResource.uid()] = objectResource
- # Note: create triggers a notification when the component is set, so we don't need to
- # call notify( ) here like we do for object removal.
-
+ # Note: create triggers a notification when the component is set, so we
+ # don't need to call notify() here like we do for object removal.
returnValue(objectResource)
+
@inlineCallbacks
def removeObjectResourceWithName(self, name):
+
+ child = (yield self.objectResourceWithName(name))
+ if child is None:
+ raise NoSuchObjectResourceError
+ yield self._removeObjectResource(child)
- uid, old_size = (yield self._txn.execSQL(
- "delete from %(name)s "
- "where %(column_RESOURCE_NAME)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s "
- "returning %(column_UID)s, character_length(%(column_TEXT)s)" % self._objectTable,
- [name, self._resourceID],
- raiseOnZeroRowCount=lambda:NoSuchObjectResourceError()
- ))[0]
- self._objects.pop(name, None)
- self._objects.pop(uid, None)
- yield self._deleteRevision(name)
- # Adjust quota
- yield self._home.adjustQuotaUsedBytes(-old_size)
-
- self.notifyChanged()
-
-
@inlineCallbacks
def removeObjectResourceWithUID(self, uid):
+
+ child = (yield self.objectResourceWithUID(uid))
+ if child is None:
+ raise NoSuchObjectResourceError
+ yield self._removeObjectResource(child)
- name, old_size = (yield self._txn.execSQL(
- "delete from %(name)s "
- "where %(column_UID)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s "
- "returning %(column_RESOURCE_NAME)s, character_length(%(column_TEXT)s)" % self._objectTable,
- [uid, self._resourceID],
- raiseOnZeroRowCount=lambda:NoSuchObjectResourceError()
- ))[0]
- self._objects.pop(name, None)
- self._objects.pop(uid, None)
- yield self._deleteRevision(name)
-
- # Adjust quota
- yield self._home.adjustQuotaUsedBytes(-old_size)
-
- self.notifyChanged()
-
-
@inlineCallbacks
- def syncToken(self):
- if self._syncTokenRevision is None:
- self._syncTokenRevision = (yield self._txn.execSQL(
- """
- select max(%(column_REVISION)s) from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [self._resourceID,]
- ))[0][0]
- returnValue(("%s#%s" % (self._resourceID, self._syncTokenRevision,)))
+ def _removeObjectResource(self, child):
+ name = child.name()
+ uid = child.uid()
+ try:
+ yield child.remove()
+ finally:
+ self._objects.pop(name, None)
+ self._objects.pop(uid, None)
+ yield self._deleteRevision(name)
+ self.notifyChanged()
- def objectResourcesSinceToken(self, token):
- raise NotImplementedError()
+ def objectResourcesHaveProperties(self):
+ return False
@inlineCallbacks
- def resourceNamesSinceToken(self, token):
- results = [
- (name if name else "", deleted)
- for name, deleted in
- (yield self._txn.execSQL("""
- select %(column_RESOURCE_NAME)s, %(column_DELETED)s from %(name)s
- where %(column_REVISION)s > %%s and %(column_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [token, self._resourceID],
- ))
- ]
- results.sort(key=lambda x:x[1])
-
- changed = []
- deleted = []
- for name, wasdeleted in results:
- if name:
- if wasdeleted:
- if token:
- deleted.append(name)
- else:
- changed.append(name)
-
- returnValue((changed, deleted))
-
-
- @inlineCallbacks
- def _initSyncToken(self):
-
- # Remove any deleted revision entry that uses the same name
- yield self._txn.execSQL("""
- delete from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_COLLECTION_NAME)s = %%s
- """ % self._revisionsTable,
- [self._home._resourceID, self._name]
- )
-
- # Insert new entry
- self._syncTokenRevision = (yield self._txn.execSQL("""
- insert into %(name)s
- (%(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_ID)s, %(column_COLLECTION_NAME)s, %(column_RESOURCE_NAME)s, %(column_REVISION)s, %(column_DELETED)s)
- values (%%s, %%s, %%s, null, nextval('%(sequence)s'), FALSE)
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._home._resourceID, self._resourceID, self._name]
- ))[0][0]
-
-
- @inlineCallbacks
- def _updateSyncToken(self):
-
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s) = (nextval('%(sequence)s'))
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s is null
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID,]
- ))[0][0]
-
-
- @inlineCallbacks
- def _renameSyncToken(self):
-
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s, %(column_COLLECTION_NAME)s) = (nextval('%(sequence)s'), %%s)
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s is null
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._name, self._resourceID,]
- ))[0][0]
-
-
- @inlineCallbacks
- def _deletedSyncToken(self):
-
- # Remove all child entries
- yield self._txn.execSQL("""
- delete from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_ID)s = %%s and %(column_COLLECTION_NAME)s is null
- """ % self._revisionsTable,
- [self._home._resourceID, self._resourceID,]
- )
-
- # Then adjust collection entry to deleted state (do this for all entries with this collection's
- # resource-id so that we deal with direct shares which are not normally removed through an unshare
- yield self._txn.execSQL("""
- update %(name)s
- set (%(column_RESOURCE_ID)s, %(column_REVISION)s, %(column_DELETED)s)
- = (null, nextval('%(sequence)s'), TRUE)
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s is null
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID,]
- )
- self._syncTokenRevision = None
-
-
- def _insertRevision(self, name):
- return self._changeRevision("insert", name)
-
- def _updateRevision(self, name):
- return self._changeRevision("update", name)
-
- def _deleteRevision(self, name):
- return self._changeRevision("delete", name)
-
-
- @inlineCallbacks
- def _changeRevision(self, action, name):
-
- if action == "delete":
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), TRUE)
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- elif action == "update":
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s) = (nextval('%(sequence)s'))
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- elif action == "insert":
- # Note that an "insert" may happen for a resource that previously existed and then
- # was deleted. In that case an entry in the REVISIONS table still exists so we have to
- # detect that and do db INSERT or UPDATE as appropriate
-
- found = bool( (yield self._txn.execSQL("""
- select %(column_RESOURCE_ID)s from %(name)s
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- """ % self._revisionsTable,
- [self._resourceID, name, ]
- )) )
- if found:
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), FALSE)
- where %(column_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- else:
- self._syncTokenRevision = (yield self._txn.execSQL("""
- insert into %(name)s
- (%(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_REVISION)s, %(column_DELETED)s)
- values (%%s, %%s, %%s, nextval('%(sequence)s'), FALSE)
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._home._resourceID, self._resourceID, name]
- ))[0][0]
-
- @inlineCallbacks
def _loadPropertyStore(self, props=None):
if props is None:
props = yield PropertyStore.load(
@@ -1359,7 +1923,7 @@
raise NotImplementedError
- # IDataStoreResource
+ # IDataStoreObject
def contentType(self):
raise NotImplementedError()
@@ -1373,26 +1937,41 @@
def created(self):
- return datetimeMktime(datetime.datetime.strptime(self._created, "%Y-%m-%d %H:%M:%S.%f")) if self._created else None
+ return datetimeMktime(parseSQLTimestamp(self._created)) if self._created else None
def modified(self):
- return datetimeMktime(datetime.datetime.strptime(self._modified, "%Y-%m-%d %H:%M:%S.%f")) if self._modified else None
+ return datetimeMktime(parseSQLTimestamp(self._modified)) if self._modified else None
+ def addNotifier(self, notifier):
+ if self._notifiers is None:
+ self._notifiers = ()
+ self._notifiers += (notifier,)
+
def notifierID(self, label="default"):
- if self._notifier:
- return self._notifier.getID(label)
+ if self._notifiers:
+ return self._notifiers[0].getID(label)
else:
return None
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ if self._notifiers:
+ for notifier in self._notifiers:
+ name = (yield notifier.nodeName(label=label))
+ if name is not None:
+ returnValue(name)
+ else:
+ returnValue(None)
def notifyChanged(self):
"""
Trigger a notification of a change
"""
- if self._notifier:
- self._txn.postCommit(self._notifier.notify)
+ if self._notifiers:
+ for notifier in self._notifiers:
+ self._txn.postCommit(notifier.notify)
@@ -1403,13 +1982,18 @@
@type _path: L{FilePath}
"""
- compareAttributes = "_name _parentCollection".split()
+ compareAttributes = (
+ "_name",
+ "_parentCollection",
+ )
_objectTable = None
- def __init__(self, parent, name, uid, metadata=None):
+ _objectSchema = None
+
+ def __init__(self, parent, name, uid, resourceID=None, metadata=None):
self._parentCollection = parent
- self._resourceID = None
+ self._resourceID = resourceID
self._name = name
self._uid = uid
self._md5 = None
@@ -1419,51 +2003,66 @@
self._objectText = None
+
+ @classproperty
+ def _allColumnsWithParent(cls):
+ obj = cls._objectSchema
+ return Select(cls._allColumns, From=obj,
+ Where=obj.PARENT_RESOURCE_ID == Parameter("parentID"))
+
+
@classmethod
@inlineCallbacks
def loadAllObjects(cls, parent):
"""
- Load all child objects and return a list of them. This must create the child classes
- and initialize them using "batched" SQL operations to keep this constant wrt the number of
- children. This is an optimization for Depth:1 operations on the collection.
+ Load all child objects and return a list of them. This must create the
+ child classes and initialize them using "batched" SQL operations to keep
+ this constant wrt the number of children. This is an optimization for
+ Depth:1 operations on the collection.
"""
-
+
results = []
# Load from the main table first
- dataRows = yield parent._txn.execSQL(cls._selectAllColumns() + """
- from %(name)s
- where %(column_PARENT_RESOURCE_ID)s = %%s
- """ % cls._objectTable,
- [parent._resourceID,]
- )
-
+ dataRows = yield cls._allColumnsWithParent.on(
+ parent._txn, parentID=parent._resourceID)
+
if dataRows:
# Get property stores for all these child resources (if any found)
- propertyStores =(yield PropertyStore.loadAll(
- parent._home.uid(),
- parent._txn,
- cls._objectTable["name"],
- "%s.%s" % (cls._objectTable["name"], cls._objectTable["column_RESOURCE_ID"],),
- "%s.%s" % (cls._objectTable["name"], cls._objectTable["column_PARENT_RESOURCE_ID"]),
- parent._resourceID,
- ))
-
+ if parent.objectResourcesHaveProperties():
+ propertyStores =(yield PropertyStore.forMultipleResources(
+ parent._home.uid(),
+ parent._txn,
+ cls._objectSchema.RESOURCE_ID,
+ cls._objectSchema.PARENT_RESOURCE_ID,
+ parent._resourceID
+ ))
+ else:
+ propertyStores = {}
+
# Create the actual objects merging in properties
for row in dataRows:
child = cls(parent, "", None)
child._initFromRow(tuple(row))
- yield child._loadPropertyStore(props=propertyStores.get(child._resourceID, None))
+ yield child._loadPropertyStore(
+ props=propertyStores.get(child._resourceID, None)
+ )
results.append(child)
-
+
returnValue(results)
+
@classmethod
def objectWithName(cls, parent, name, uid):
- objectResource = cls(parent, name, uid)
+ objectResource = cls(parent, name, uid, None)
return objectResource.initFromStore()
@classmethod
+ def objectWithID(cls, parent, resourceID):
+ objectResource = cls(parent, None, None, resourceID)
+ return objectResource.initFromStore()
+
+ @classmethod
@inlineCallbacks
def create(cls, parent, name, component, metadata):
@@ -1474,7 +2073,7 @@
if name.startswith("."):
raise ObjectResourceNameNotAllowedError(name)
- objectResource = cls(parent, name, None, metadata)
+ objectResource = cls(parent, name, None, None, metadata=metadata)
yield objectResource.setComponent(component, inserting=True)
yield objectResource._loadPropertyStore(created=True)
@@ -1483,30 +2082,59 @@
returnValue(objectResource)
+
+ @classmethod
+ def _allWithParentAnd(cls, column, paramName):
+ """
+ DAL query for all columns where PARENT_RESOURCE_ID matches a parentID
+ parameter and a given instance column matches a given parameter name.
+ """
+ return Select(
+ cls._allColumns, From=cls._objectSchema,
+ Where=(column == Parameter(paramName)).And(
+ cls._objectSchema.PARENT_RESOURCE_ID == Parameter("parentID"))
+ )
+
+
+ @classproperty
+ def _allWithParentAndName(cls):
+ return cls._allWithParentAnd(cls._objectSchema.RESOURCE_NAME, "name")
+
+
+ @classproperty
+ def _allWithParentAndUID(cls):
+ return cls._allWithParentAnd(cls._objectSchema.UID, "uid")
+
+
+ @classproperty
+ def _allWithParentAndID(cls):
+ return cls._allWithParentAnd(cls._objectSchema.RESOURCE_ID,
+ "resourceID")
+
+
@inlineCallbacks
def initFromStore(self):
"""
- Initialise this object from the store. We read in and cache all the extra metadata
- from the DB to avoid having to do DB queries for those individually later. Either the
- name or uid is present, so we have to tweak the query accordingly.
+ Initialise this object from the store. We read in and cache all the
+ extra metadata from the DB to avoid having to do DB queries for those
+ individually later. Either the name or uid is present, so we have to
+ tweak the query accordingly.
@return: L{self} if object exists in the DB, else C{None}
"""
if self._name:
- rows = yield self._txn.execSQL(self._selectAllColumns() + """
- from %(name)s
- where %(column_RESOURCE_NAME)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
- """ % self._objectTable,
- [self._name, self._parentCollection._resourceID]
- )
- else:
- rows = yield self._txn.execSQL(self._selectAllColumns() + """
- from %(name)s
- where %(column_UID)s = %%s and %(column_PARENT_RESOURCE_ID)s = %%s
- """ % self._objectTable,
- [self._uid, self._parentCollection._resourceID]
- )
+ rows = yield self._allWithParentAndName.on(
+ self._txn, name=self._name,
+ parentID=self._parentCollection._resourceID)
+ elif self._uid:
+ rows = yield self._allWithParentAndUID.on(
+ self._txn, uid=self._uid,
+ parentID=self._parentCollection._resourceID)
+ elif self._resourceID:
+ rows = yield self._allWithParentAndID.on(
+ self._txn, resourceID=self._resourceID,
+ parentID=self._parentCollection._resourceID)
if rows:
self._initFromRow(tuple(rows[0]))
yield self._loadPropertyStore()
@@ -1514,26 +2142,28 @@
else:
returnValue(None)
- @classmethod
- def _selectAllColumns(cls):
+
+ @classproperty
+ def _allColumns(cls):
"""
Full set of columns in the object table that need to be loaded to
initialize the object resource state.
"""
- return """
- select
- %(column_RESOURCE_ID)s,
- %(column_RESOURCE_NAME)s,
- %(column_UID)s,
- %(column_MD5)s,
- character_length(%(column_TEXT)s),
- %(column_CREATED)s,
- %(column_MODIFIED)s
- """ % cls._objectTable
+ obj = cls._objectSchema
+ return [
+ obj.RESOURCE_ID,
+ obj.RESOURCE_NAME,
+ obj.UID,
+ obj.MD5,
+ Len(obj.TEXT),
+ obj.CREATED,
+ obj.MODIFIED
+ ]
+
def _initFromRow(self, row):
"""
- Given a select result using the columns from L{_selectAllColumns}, initialize
+ Given a select result using the columns from L{_allColumns}, initialize
the object resource state.
"""
(self._resourceID,
@@ -1544,15 +2174,19 @@
self._created,
self._modified,) = tuple(row)
+
@inlineCallbacks
def _loadPropertyStore(self, props=None, created=False):
if props is None:
- props = yield PropertyStore.load(
- self._parentCollection.ownerHome().uid(),
- self._txn,
- self._resourceID,
- created=created
- )
+ if self._parentCollection.objectResourcesHaveProperties():
+ props = yield PropertyStore.load(
+ self._parentCollection.ownerHome().uid(),
+ self._txn,
+ self._resourceID,
+ created=created
+ )
+ else:
+ props = NonePropertyStore(self._parentCollection.ownerHome().uid())
self.initPropertyStore(props)
self._propertyStore = props
@@ -1590,7 +2224,30 @@
def componentType(self):
returnValue((yield self.component()).mainType())
+ @classproperty
+ def _deleteQuery(cls):
+ """
+ DAL statement to delete a L{CommonObjectResource} by its resource ID.
+ """
+ return Delete(cls._objectSchema, Where=cls._objectSchema.RESOURCE_ID == Parameter("resourceID"))
+
+ @inlineCallbacks
+ def remove(self):
+ yield self._deleteQuery.on(self._txn, NoSuchObjectResourceError,
+ resourceID=self._resourceID)
+ self.properties()._removeResource()
+
+ # Set to non-existent state
+ self._resourceID = None
+ self._name = None
+ self._uid = None
+ self._md5 = None
+ self._size = None
+ self._created = None
+ self._modified = None
+ self._objectText = None
+
def uid(self):
return self._uid
@@ -1600,7 +2257,7 @@
- # IDataStoreResource
+ # IDataStoreObject
def contentType(self):
raise NotImplementedError()
@@ -1614,23 +2271,30 @@
def created(self):
- utc = datetime.datetime.strptime(self._created, "%Y-%m-%d %H:%M:%S.%f")
- return datetimeMktime(utc)
+ return datetimeMktime(parseSQLTimestamp(self._created))
def modified(self):
- utc = datetime.datetime.strptime(self._modified, "%Y-%m-%d %H:%M:%S.%f")
- return datetimeMktime(utc)
+ return datetimeMktime(parseSQLTimestamp(self._modified))
+ @classproperty
+ def _textByIDQuery(cls):
+ """
+ DAL query to load iCalendar/vCard text via an object's resource ID.
+ """
+ obj = cls._objectSchema
+ return Select([obj.TEXT], From=obj,
+ Where=obj.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def text(self):
if self._objectText is None:
- text = (yield self._txn.execSQL(
- "select %(column_TEXT)s from %(name)s where "
- "%(column_RESOURCE_ID)s = %%s" % self._objectTable,
- [self._resourceID]
- ))[0][0]
+ text = (
+ yield self._textByIDQuery.on(self._txn,
+ resourceID=self._resourceID)
+ )[0][0]
self._objectText = text
returnValue(text)
else:
@@ -1638,14 +2302,20 @@
-class NotificationCollection(LoggingMixIn, FancyEqMixin):
+class NotificationCollection(LoggingMixIn, FancyEqMixin, _SharedSyncLogic):
implements(INotificationCollection)
- compareAttributes = "_uid _resourceID".split()
+ compareAttributes = (
+ "_uid",
+ "_resourceID",
+ )
_revisionsTable = NOTIFICATION_OBJECT_REVISIONS_TABLE
+ _revisionsSchema = schema.NOTIFICATION_OBJECT_REVISIONS
+ _homeSchema = schema.NOTIFICATION_HOME
+
def __init__(self, txn, uid, resourceID):
self._txn = txn
@@ -1665,37 +2335,70 @@
prefix=txn._homeClass[txn._primaryHomeType]._notifierPrefix
)
notifier.addID(id=uid)
+ notifiers = (notifier,)
else:
- notifier = None
- self._notifier = notifier
+ notifiers = None
+ self._notifiers = notifiers
+
+ _resourceIDFromUIDQuery = Select(
+ [_homeSchema.RESOURCE_ID], From=_homeSchema,
+ Where=_homeSchema.OWNER_UID == Parameter("uid"))
+
+
+ _provisionNewNotificationsQuery = Insert(
+ {_homeSchema.OWNER_UID: Parameter("uid")},
+ Return=_homeSchema.RESOURCE_ID
+ )
+
+ @property
+ def _home(self):
+ """
+ L{NotificationCollection} serves as its own C{_home} for the purposes of
+ working with L{_SharedSyncLogic}.
+ """
+ return self
+
+
@classmethod
@inlineCallbacks
def notificationsWithUID(cls, txn, uid):
- """
- Implement notificationsWithUID.
- """
- rows = yield txn.execSQL(
- """
- select %(column_RESOURCE_ID)s from %(name)s where
- %(column_OWNER_UID)s = %%s
- """ % NOTIFICATION_HOME_TABLE, [uid]
- )
+ rows = yield cls._resourceIDFromUIDQuery.on(txn, uid=uid)
+
if rows:
resourceID = rows[0][0]
created = False
else:
- resourceID = str((yield txn.execSQL(
- "insert into %(name)s (%(column_OWNER_UID)s) values (%%s) returning %(column_RESOURCE_ID)s" % NOTIFICATION_HOME_TABLE,
- [uid]
- ))[0][0])
- created = True
+ # Use savepoint so we can do a partial rollback if there is a race condition
+ # where this row has already been inserted
+ savepoint = SavepointAction("notificationsWithUID")
+ yield savepoint.acquire(txn)
+
+ try:
+ resourceID = str((
+ yield cls._provisionNewNotificationsQuery.on(txn, uid=uid)
+ )[0][0])
+ except Exception: # FIXME: Really want to trap the pg.DatabaseError but in a non-DB specific manner
+ yield savepoint.rollback(txn)
+
+ # Retry the query - row may exist now, if not re-raise
+ rows = yield cls._resourceIDFromUIDQuery.on(txn, uid=uid)
+ if rows:
+ resourceID = rows[0][0]
+ created = False
+ else:
+ raise
+ else:
+ created = True
+ yield savepoint.release(txn)
+
collection = cls(txn, uid, resourceID)
yield collection._loadPropertyStore()
if created:
yield collection._initSyncToken()
returnValue(collection)
+
@inlineCallbacks
def _loadPropertyStore(self):
self._propertyStore = yield PropertyStore.load(
@@ -1708,15 +2411,19 @@
def resourceType(self):
return ResourceType.notification #@UndefinedVariable
+
def retrieveOldIndex(self):
return PostgresLegacyNotificationsEmulator(self)
+
def __repr__(self):
return "<%s: %s>" % (self.__class__.__name__, self._resourceID)
+
def name(self):
return "notification"
+
def uid(self):
return self._uid
@@ -1730,13 +2437,17 @@
returnValue(results)
+ _notificationUIDsForHomeQuery = Select(
+ [schema.NOTIFICATION.NOTIFICATION_UID], From=schema.NOTIFICATION,
+ Where=schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID ==
+ Parameter("resourceID"))
+
+
@inlineCallbacks
def listNotificationObjects(self):
if self._notificationNames is None:
- rows = yield self._txn.execSQL(
- "select (NOTIFICATION_UID) from NOTIFICATION "
- "where NOTIFICATION_HOME_RESOURCE_ID = %s",
- [self._resourceID])
+ rows = yield self._notificationUIDsForHomeQuery.on(
+ self._txn, resourceID=self._resourceID)
self._notificationNames = sorted([row[0] for row in rows])
returnValue(self._notificationNames)
@@ -1757,9 +2468,9 @@
@inlineCallbacks
def notificationObjectWithUID(self, uid):
"""
- We create the empty object first then have it initialize itself from the store
+ Create an empty notification object first then have it initialize itself
+ from the store.
"""
-
no = NotificationObject(self, uid)
no = (yield no.initFromStore())
returnValue(no)
@@ -1784,175 +2495,114 @@
return self.removeNotificationObjectWithUID(self._nameToUID(name))
+ _removeByUIDQuery = Delete(
+ From=schema.NOTIFICATION,
+ Where=(schema.NOTIFICATION.NOTIFICATION_UID == Parameter("uid")).And(
+ schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID
+ == Parameter("resourceID")))
+
+
@inlineCallbacks
def removeNotificationObjectWithUID(self, uid):
- yield self._txn.execSQL(
- "delete from NOTIFICATION "
- "where NOTIFICATION_UID = %s and NOTIFICATION_HOME_RESOURCE_ID = %s",
- [uid, self._resourceID]
- )
+ yield self._removeByUIDQuery.on(
+ self._txn, uid=uid, resourceID=self._resourceID)
self._notifications.pop(uid, None)
yield self._deleteRevision("%s.xml" % (uid,))
- @inlineCallbacks
- def _initSyncToken(self):
- self._syncTokenRevision = (yield self._txn.execSQL("""
- insert into %(name)s
- (%(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_REVISION)s, %(column_DELETED)s)
- values (%%s, null, nextval('%(sequence)s'), FALSE)
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID,]
- ))[0][0]
+ _initSyncTokenQuery = Insert(
+ {
+ _revisionsSchema.HOME_RESOURCE_ID : Parameter("resourceID"),
+ _revisionsSchema.RESOURCE_NAME : None,
+ _revisionsSchema.REVISION : schema.REVISION_SEQ,
+ _revisionsSchema.DELETED : False
+ }, Return=_revisionsSchema.REVISION
+ )
@inlineCallbacks
- def syncToken(self):
- if self._syncTokenRevision is None:
- self._syncTokenRevision = (yield self._txn.execSQL(
- """
- select max(%(column_REVISION)s) from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [self._resourceID,]
- ))[0][0]
- returnValue("%s#%s" % (self._resourceID, self._syncTokenRevision,))
+ def _initSyncToken(self):
+ self._syncTokenRevision = (yield self._initSyncTokenQuery.on(
+ self._txn, resourceID=self._resourceID))[0][0]
- def objectResourcesSinceToken(self, token):
- raise NotImplementedError()
+ _syncTokenQuery = Select(
+ [Max(_revisionsSchema.REVISION)], From=_revisionsSchema,
+ Where=_revisionsSchema.HOME_RESOURCE_ID == Parameter("resourceID")
+ )
@inlineCallbacks
- def resourceNamesSinceToken(self, token):
- results = [
- (name if name else "", deleted)
- for name, deleted in
- (yield self._txn.execSQL("""
- select %(column_RESOURCE_NAME)s, %(column_DELETED)s from %(name)s
- where %(column_REVISION)s > %%s and %(column_HOME_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [token, self._resourceID],
- ))
- ]
- results.sort(key=lambda x:x[1])
+ def syncToken(self):
+ if self._syncTokenRevision is None:
+ self._syncTokenRevision = (
+ yield self._syncTokenQuery.on(
+ self._txn, resourceID=self._resourceID)
+ )[0][0]
+ returnValue("%s#%s" % (self._resourceID, self._syncTokenRevision))
- changed = []
- deleted = []
- for name, wasdeleted in results:
- if name:
- if wasdeleted:
- if token:
- deleted.append(name)
- else:
- changed.append(name)
- returnValue((changed, deleted))
-
-
- def _updateSyncToken(self):
- self._syncTokenRevision = self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s) = (nextval('%(sequence)s'))
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s is null
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID,]
- )[0][0]
-
-
- def _insertRevision(self, name):
- return self._changeRevision("insert", name)
-
-
- def _updateRevision(self, name):
- return self._changeRevision("update", name)
-
-
- def _deleteRevision(self, name):
- return self._changeRevision("delete", name)
-
-
- @inlineCallbacks
- def _changeRevision(self, action, name):
-
- if action == "delete":
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), TRUE)
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- elif action == "update":
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s) = (nextval('%(sequence)s'))
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- elif action == "insert":
- # Note that an "insert" may happen for a resource that previously existed and then
- # was deleted. In that case an entry in the REVISIONS table still exists so we have to
- # detect that and do db INSERT or UPDATE as appropriate
-
- found = bool( (yield self._txn.execSQL("""
- select %(column_HOME_RESOURCE_ID)s from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- """ % self._revisionsTable,
- [self._resourceID, name, ]
- )))
- if found:
- self._syncTokenRevision = (yield self._txn.execSQL("""
- update %(name)s
- set (%(column_REVISION)s, %(column_DELETED)s) = (nextval('%(sequence)s'), FALSE)
- where %(column_HOME_RESOURCE_ID)s = %%s and %(column_RESOURCE_NAME)s = %%s
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name]
- ))[0][0]
- else:
- self._syncTokenRevision = (yield self._txn.execSQL("""
- insert into %(name)s
- (%(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_REVISION)s, %(column_DELETED)s)
- values (%%s, %%s, nextval('%(sequence)s'), FALSE)
- returning %(column_REVISION)s
- """ % self._revisionsTable,
- [self._resourceID, name,]
- ))[0][0]
-
- self.notifyChanged()
-
-
def properties(self):
return self._propertyStore
def notifierID(self, label="default"):
- if self._notifier:
- return self._notifier.getID(label)
+ if self._notifiers:
+ return self._notifiers[0].getID(label)
else:
return None
+ @inlineCallbacks
+ def nodeName(self, label="default"):
+ if self._notifiers:
+ for notifier in self._notifiers:
+ name = (yield notifier.nodeName(label=label))
+ if name is not None:
+ returnValue(name)
+ else:
+ returnValue(None)
+
+
def notifyChanged(self):
"""
Trigger a notification of a change
"""
- if self._notifier:
- self._txn.postCommit(self._notifier.notify)
+ if self._notifiers:
+ for notifier in self._notifiers:
+ self._txn.postCommit(notifier.notify)
+ @classproperty
+ def _completelyNewRevisionQuery(cls):
+ rev = cls._revisionsSchema
+ return Insert({rev.HOME_RESOURCE_ID: Parameter("homeID"),
+ # rev.RESOURCE_ID: Parameter("resourceID"),
+ rev.RESOURCE_NAME: Parameter("name"),
+ rev.REVISION: schema.REVISION_SEQ,
+ rev.DELETED: False},
+ Return=rev.REVISION)
+
+
+ def _maybeNotify(self):
+ """
+ Emit a push notification after C{_changeRevision}.
+ """
+ self.notifyChanged()
+
+
+
class NotificationObject(LoggingMixIn, FancyEqMixin):
implements(INotificationObject)
- compareAttributes = "_resourceID _home".split()
+ compareAttributes = (
+ "_resourceID",
+ "_home",
+ )
+ _objectSchema = schema.NOTIFICATION
+
def __init__(self, home, uid):
self._home = home
self._resourceID = None
@@ -1961,48 +2611,55 @@
self._size = None
self._created = None
self._modified = None
+ self._xmlType = None
self._objectText = None
+
def __repr__(self):
return "<%s: %s>" % (self.__class__.__name__, self._resourceID)
+
+ @classproperty
+ def _allColumnsByHomeIDQuery(cls):
+ """
+ DAL query to load all columns by home ID.
+ """
+ obj = cls._objectSchema
+ return Select([obj.RESOURCE_ID, obj.NOTIFICATION_UID, obj.MD5,
+ Len(obj.XML_DATA), obj.XML_TYPE, obj.CREATED,
+ obj.MODIFIED],
+ From=obj,
+ Where=(obj.NOTIFICATION_HOME_RESOURCE_ID == Parameter(
+ "homeID")))
+
+
@classmethod
@inlineCallbacks
def loadAllObjects(cls, parent):
"""
- Load all child objects and return a list of them. This must create the child classes
- and initialize them using "batched" SQL operations to keep this constant wrt the number of
- children. This is an optimization for Depth:1 operations on the collection.
+ Load all child objects and return a list of them. This must create the
+ child classes and initialize them using "batched" SQL operations to keep
+ this constant wrt the number of children. This is an optimization for
+ Depth:1 operations on the collection.
"""
-
+
results = []
# Load from the main table first
- dataRows = (yield parent._txn.execSQL("""
- select
- RESOURCE_ID,
- NOTIFICATION_UID,
- MD5,
- character_length(XML_DATA),
- CREATED,
- MODIFIED
- from NOTIFICATION
- where NOTIFICATION_HOME_RESOURCE_ID = %s
- """,
- [parent._resourceID]
- ))
-
+ dataRows = (
+ yield cls._allColumnsByHomeIDQuery.on(parent._txn,
+ homeID=parent._resourceID))
+
if dataRows:
# Get property stores for all these child resources (if any found)
- propertyStores =(yield PropertyStore.loadAll(
+ propertyStores =(yield PropertyStore.forMultipleResources(
parent.uid(),
parent._txn,
- "NOTIFICATION",
- "NOTIFICATION.RESOURCE_ID",
- "NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID",
+ schema.NOTIFICATION.RESOURCE_ID,
+ schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID,
parent._resourceID,
))
-
+
# Create the actual objects merging in properties
for row in dataRows:
child = cls(parent, None)
@@ -2010,53 +2667,62 @@
child._uid,
child._md5,
child._size,
+ child._xmlType,
child._created,
child._modified,) = tuple(row)
- yield child._loadPropertyStore(props=propertyStores.get(child._resourceID, None))
+ child._loadPropertyStore(
+ props=propertyStores.get(child._resourceID, None)
+ )
results.append(child)
-
+
returnValue(results)
+
+ @classproperty
+ def _oneNotificationQuery(cls):
+ no = cls._objectSchema
+ return Select(
+ [
+ no.RESOURCE_ID,
+ no.MD5,
+ Len(no.XML_DATA),
+ no.XML_TYPE,
+ no.CREATED,
+ no.MODIFIED
+ ],
+ From=no,
+ Where=(no.NOTIFICATION_UID ==
+ Parameter("uid")).And(no.NOTIFICATION_HOME_RESOURCE_ID ==
+ Parameter("homeID")))
+
+
@inlineCallbacks
def initFromStore(self):
"""
- Initialise this object from the store. We read in and cache all the extra metadata
- from the DB to avoid having to do DB queries for those individually later.
+ Initialise this object from the store, based on its UID and home
+ resource ID. We read in and cache all the extra metadata from the DB to
+ avoid having to do DB queries for those individually later.
@return: L{self} if object exists in the DB, else C{None}
"""
- rows = (yield self._txn.execSQL("""
- select
- RESOURCE_ID,
- MD5,
- character_length(XML_DATA),
- CREATED,
- MODIFIED
- from NOTIFICATION
- where NOTIFICATION_UID = %s and NOTIFICATION_HOME_RESOURCE_ID = %s
- """,
- [self._uid, self._home._resourceID]))
+ rows = (yield self._oneNotificationQuery.on(
+ self._txn, uid=self._uid, homeID=self._home._resourceID))
if rows:
(self._resourceID,
self._md5,
self._size,
+ self._xmlType,
self._created,
self._modified,) = tuple(rows[0])
- yield self._loadPropertyStore()
+ self._loadPropertyStore()
returnValue(self)
else:
returnValue(None)
- @inlineCallbacks
+
def _loadPropertyStore(self, props=None, created=False):
if props is None:
- props = yield PropertyStore.load(
- self._home.uid(),
- self._txn,
- self._resourceID,
- created=created
- )
- self.initPropertyStore(props)
+ props = NonePropertyStore(self._home.uid())
self._propertyStore = props
@@ -2064,17 +2730,6 @@
return self._propertyStore
- def initPropertyStore(self, props):
- # Setup peruser special properties
- props.setSpecialProperties(
- (
- ),
- (
- PropertyName.fromElement(NotificationType),
- ),
- )
-
-
@property
def _txn(self):
return self._home._txn
@@ -2092,60 +2747,72 @@
return self.uid() + ".xml"
+ @classproperty
+ def _newNotificationQuery(cls):
+ no = cls._objectSchema
+ return Insert(
+ {
+ no.NOTIFICATION_HOME_RESOURCE_ID: Parameter("homeID"),
+ no.NOTIFICATION_UID: Parameter("uid"),
+ no.XML_TYPE: Parameter("xmlType"),
+ no.XML_DATA: Parameter("xmlData"),
+ no.MD5: Parameter("md5"),
+ },
+ Return=[no.RESOURCE_ID, no.CREATED, no.MODIFIED]
+ )
+
+
+ @classproperty
+ def _updateNotificationQuery(cls):
+ no = cls._objectSchema
+ return Update(
+ {
+ no.XML_TYPE: Parameter("xmlType"),
+ no.XML_DATA: Parameter("xmlData"),
+ no.MD5: Parameter("md5"),
+ },
+ Where=(no.NOTIFICATION_HOME_RESOURCE_ID == Parameter("homeID")).And(
+ no.NOTIFICATION_UID == Parameter("uid")),
+ Return=no.MODIFIED
+ )
+
+
@inlineCallbacks
def setData(self, uid, xmltype, xmldata, inserting=False):
"""
Set the object resource data and update and cached metadata.
"""
- xmltypeString = xmltype.toxml()
+ self._xmlType = NotificationType(xmltype)
self._md5 = hashlib.md5(xmldata).hexdigest()
self._size = len(xmldata)
if inserting:
- rows = yield self._txn.execSQL("""
- insert into NOTIFICATION
- (NOTIFICATION_HOME_RESOURCE_ID, NOTIFICATION_UID, XML_TYPE, XML_DATA, MD5)
- values
- (%s, %s, %s, %s, %s)
- returning
- RESOURCE_ID,
- CREATED,
- MODIFIED
- """,
- [self._home._resourceID, uid, xmltypeString, xmldata, self._md5]
+ rows = yield self._newNotificationQuery.on(
+ self._txn, homeID=self._home._resourceID, uid=uid,
+ xmlType=self._xmlType.toxml(), xmlData=xmldata, md5=self._md5
)
self._resourceID, self._created, self._modified = rows[0]
- yield self._loadPropertyStore()
+ self._loadPropertyStore()
else:
- rows = yield self._txn.execSQL("""
- update NOTIFICATION
- set XML_TYPE = %s, XML_DATA = %s, MD5 = %s
- where NOTIFICATION_HOME_RESOURCE_ID = %s and NOTIFICATION_UID = %s
- returning MODIFIED
- """,
- [xmltypeString, xmldata, self._md5, self._home._resourceID, uid])
+ rows = yield self._updateNotificationQuery.on(
+ self._txn, homeID=self._home._resourceID, uid=uid,
+ xmlType=self._xmlType.toxml(), xmlData=xmldata, md5=self._md5
+ )
self._modified = rows[0][0]
-
- self.properties()[PropertyName.fromElement(NotificationType)] = NotificationType(xmltype)
-
self._objectText = xmldata
- @inlineCallbacks
- def _fieldQuery(self, field):
- data = yield self._txn.execSQL(
- "select " + field + " from NOTIFICATION "
- "where RESOURCE_ID = %s",
- [self._resourceID]
- )
- returnValue(data[0][0])
+ _xmlDataFromID = Select(
+ [_objectSchema.XML_DATA], From=_objectSchema,
+ Where=_objectSchema.RESOURCE_ID == Parameter("resourceID"))
@inlineCallbacks
def xmldata(self):
-
if self._objectText is None:
- self._objectText = (yield self._fieldQuery("XML_DATA"))
+ self._objectText = (
+ yield self._xmlDataFromID.on(
+ self._txn, resourceID=self._resourceID))[0][0]
returnValue(self._objectText)
@@ -2163,15 +2830,20 @@
def size(self):
return self._size
+ def xmlType(self):
+ # NB This is the NotificationType property element
+ if isinstance(self._xmlType, str):
+ # Convert into NotificationType property element
+ self._xmlType = WebDAVDocument.fromString(self._xmlType).root_element
+ return self._xmlType
+
def created(self):
- utc = datetime.datetime.strptime(self._created, "%Y-%m-%d %H:%M:%S.%f")
- return datetimeMktime(utc)
+ return datetimeMktime(parseSQLTimestamp(self._created))
def modified(self):
- utc = datetime.datetime.strptime(self._modified, "%Y-%m-%d %H:%M:%S.%f")
- return datetimeMktime(utc)
+ return datetimeMktime(parseSQLTimestamp(self._modified))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_legacy.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_legacy.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_legacy.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,4 +1,4 @@
-# -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
+# -*- test-case-name: twistedcaldav.test.test_sharing,twistedcaldav.test.test_calendarquery -*-
##
# Copyright (c) 2010 Apple Inc. All rights reserved.
#
@@ -28,6 +28,7 @@
from twisted.python import hashlib
from twisted.internet.defer import succeed, inlineCallbacks, returnValue
+from twext.python.clsprop import classproperty
from twext.python.log import Logger, LoggingMixIn
from twistedcaldav import carddavxml
@@ -35,19 +36,26 @@
from twistedcaldav.dateops import normalizeForIndex
from twistedcaldav.memcachepool import CachePoolUserMixIn
from twistedcaldav.notifications import NotificationRecord
-from twistedcaldav.query import calendarqueryfilter, calendarquery, \
- addressbookquery
+from twistedcaldav.query import (
+ calendarqueryfilter, calendarquery, addressbookquery)
from twistedcaldav.query.sqlgenerator import sqlgenerator
from twistedcaldav.sharing import Invite
-from txdav.common.icommondatastore import IndexedSearchException, \
- ReservationError
-from txdav.common.datastore.sql_tables import \
- _BIND_MODE_OWN, _BIND_MODE_READ, _BIND_MODE_WRITE, _BIND_MODE_DIRECT, \
- _BIND_STATUS_INVITED, _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED, _BIND_STATUS_INVALID, \
- CALENDAR_BIND_TABLE, CALENDAR_HOME_TABLE, ADDRESSBOOK_HOME_TABLE, \
- ADDRESSBOOK_BIND_TABLE
+from txdav.common.icommondatastore import (
+ IndexedSearchException, ReservationError)
+from twext.enterprise.dal.syntax import Update, SavepointAction
+from twext.enterprise.dal.syntax import Insert
+from twext.enterprise.dal.syntax import Select
+from twext.enterprise.dal.syntax import Delete
+from twext.enterprise.dal.syntax import Parameter
+from txdav.common.datastore.sql_tables import (
+ _BIND_MODE_OWN, _BIND_MODE_READ, _BIND_MODE_WRITE, _BIND_MODE_DIRECT,
+ _BIND_STATUS_INVITED, _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED,
+ _BIND_STATUS_INVALID, CALENDAR_BIND_TABLE, CALENDAR_HOME_TABLE,
+ ADDRESSBOOK_HOME_TABLE, ADDRESSBOOK_BIND_TABLE, schema)
+
+
log = Logger()
indexfbtype_to_icalfbtype = {
@@ -70,7 +78,7 @@
NotificationRecord(
notificationObject.uid(),
notificationObject.name(),
- (yield notificationObject._fieldQuery("XML_TYPE"))
+ (yield notificationObject.xmlType().toxml())
)
)
else:
@@ -108,6 +116,9 @@
_homeTable = None
_bindTable = None
+ _homeSchema = None
+ _bindSchema = None
+
def __init__(self, collection):
self._collection = collection
@@ -136,56 +147,63 @@
"No-op, because the index implicitly always exists in the database."
+ @classmethod
+ def _allColumnsQuery(cls, condition):
+ inv = schema.INVITE
+ home = cls._homeSchema
+ bind = cls._bindSchema
+ return Select(
+ [inv.INVITE_UID,
+ inv.NAME,
+ inv.RECIPIENT_ADDRESS,
+ home.OWNER_UID,
+ bind.BIND_MODE,
+ bind.BIND_STATUS,
+ bind.MESSAGE],
+ From=inv.join(home).join(bind),
+ Where=(
+ condition
+ .And(inv.RESOURCE_ID == bind.RESOURCE_ID)
+ .And(inv.HOME_RESOURCE_ID == home.RESOURCE_ID)
+ .And(inv.HOME_RESOURCE_ID == bind.HOME_RESOURCE_ID)),
+ OrderBy=inv.NAME, Ascending=True
+ )
+
+
+ @classproperty
+ def _allRecordsQuery(cls):
+ """
+ DAL query for all invite records with a given resource ID.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(inv.RESOURCE_ID == Parameter("resourceID"))
+
+
@inlineCallbacks
def allRecords(self):
values = []
- for row in (yield self._txn.execSQL(
- """
- select
- INVITE.INVITE_UID,
- INVITE.NAME,
- INVITE.RECIPIENT_ADDRESS,
- %(HOME:name)s.%(HOME:column_OWNER_UID)s,
- %(BIND:name)s.%(BIND:column_BIND_MODE)s,
- %(BIND:name)s.%(BIND:column_BIND_STATUS)s,
- %(BIND:name)s.%(BIND:column_MESSAGE)s
- from
- INVITE, %(HOME:name)s, %(BIND:name)s
- where
- INVITE.RESOURCE_ID = %%s
- and INVITE.HOME_RESOURCE_ID = %(HOME:name)s.%(HOME:column_RESOURCE_ID)s
- and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- order by
- INVITE.NAME asc
- """ % self._combinedTable,
- [self._collection._resourceID]
- )):
+ rows = yield self._allRecordsQuery.on(
+ self._txn, resourceID=self._collection._resourceID
+ )
+ for row in rows:
values.append(self._makeInvite(row))
returnValue(values)
+ @classproperty
+ def _inviteForRecipientQuery(cls):
+ """
+ DAL query to retrieve an invite record for a given recipient address.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(
+ inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
@inlineCallbacks
def recordForUserID(self, userid):
- rows = yield self._txn.execSQL(
- """
- select
- INVITE.INVITE_UID,
- INVITE.NAME,
- INVITE.RECIPIENT_ADDRESS,
- %(HOME:name)s.%(HOME:column_OWNER_UID)s,
- %(BIND:name)s.%(BIND:column_BIND_MODE)s,
- %(BIND:name)s.%(BIND:column_BIND_STATUS)s,
- %(BIND:name)s.%(BIND:column_MESSAGE)s
- from
- INVITE, %(HOME:name)s, %(BIND:name)s
- where INVITE.RECIPIENT_ADDRESS = %%s
- and INVITE.HOME_RESOURCE_ID = %(HOME:name)s.%(HOME:column_RESOURCE_ID)s
- and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- """ % self._combinedTable,
- [userid]
- )
+ rows = yield self._inviteForRecipientQuery.on(self._txn,
+ recipient=userid)
returnValue(self._makeInvite(rows[0]) if rows else None)
@@ -196,27 +214,18 @@
returnValue(record)
+ @classproperty
+ def _inviteForUIDQuery(cls):
+ """
+ DAL query to retrieve an invite record for a given recipient address.
+ """
+ inv = schema.INVITE
+ return cls._allColumnsQuery(inv.INVITE_UID == Parameter("uid"))
+
+
@inlineCallbacks
def recordForInviteUID(self, inviteUID):
- rows = yield self._txn.execSQL(
- """
- select
- INVITE.INVITE_UID,
- INVITE.NAME,
- INVITE.RECIPIENT_ADDRESS,
- %(HOME:name)s.%(HOME:column_OWNER_UID)s,
- %(BIND:name)s.%(BIND:column_BIND_MODE)s,
- %(BIND:name)s.%(BIND:column_BIND_STATUS)s,
- %(BIND:name)s.%(BIND:column_MESSAGE)s
- from
- INVITE, %(HOME:name)s, %(BIND:name)s
- where INVITE.INVITE_UID = %%s
- and INVITE.HOME_RESOURCE_ID = %(HOME:name)s.%(HOME:column_RESOURCE_ID)s
- and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- """ % self._combinedTable,
- [inviteUID]
- )
+ rows = yield self._inviteForUIDQuery.on(self._txn, uid=inviteUID)
returnValue(self._makeInvite(rows[0]) if rows else None)
@@ -242,6 +251,71 @@
)
+ @classproperty
+ def _updateBindQuery(cls):
+ bind = cls._bindSchema
+
+ return Update({bind.BIND_MODE: Parameter("mode"),
+ bind.BIND_STATUS: Parameter("status"),
+ bind.MESSAGE: Parameter("message")},
+ Where=
+ (bind.RESOURCE_ID == Parameter("resourceID"))
+ .And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
+
+
+ @classproperty
+ def _idsForRecipient(cls):
+ inv = schema.INVITE
+ return Select([inv.RESOURCE_ID, inv.HOME_RESOURCE_ID],
+ From=inv,
+ Where=inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _updateInviteQuery(cls):
+ """
+ DAL query to update an invitation for a given recipient.
+ """
+ inv = schema.INVITE
+ return Update({inv.NAME: Parameter("name"),
+ inv.INVITE_UID: Parameter("uid")},
+ Where=inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _insertBindQuery(cls):
+ bind = cls._bindSchema
+ return Insert(
+ {
+ bind.HOME_RESOURCE_ID: Parameter("homeID"),
+ bind.RESOURCE_ID: Parameter("resourceID"),
+ bind.BIND_MODE: Parameter("mode"),
+ bind.BIND_STATUS: Parameter("status"),
+ bind.MESSAGE: Parameter("message"),
+
+ # name is NULL because the resource is not bound yet, just
+ # invited; let's be explicit about that.
+ bind.RESOURCE_NAME: None,
+ bind.SEEN_BY_OWNER: False,
+ bind.SEEN_BY_SHAREE: False,
+ }
+ )
+
+
+ @classproperty
+ def _insertInviteQuery(cls):
+ inv = schema.INVITE
+ return Insert(
+ {
+ inv.INVITE_UID: Parameter("uid"),
+ inv.NAME: Parameter("name"),
+ inv.HOME_RESOURCE_ID: Parameter("homeID"),
+ inv.RESOURCE_ID: Parameter("resourceID"),
+ inv.RECIPIENT_ADDRESS: Parameter("recipient")
+ }
+ )
+
+
@inlineCallbacks
def addOrUpdateRecord(self, record):
bindMode = {'read-only': _BIND_MODE_READ,
@@ -257,108 +331,88 @@
# (and may contain a trailing slash).
principalUID = record.principalURL.split("/")[3]
shareeHome = yield self._getHomeWithUID(principalUID)
- rows = yield self._txn.execSQL(
- "select RESOURCE_ID, HOME_RESOURCE_ID from INVITE where RECIPIENT_ADDRESS = %s",
- [record.userid]
- )
+ rows = yield self._idsForRecipient.on(self._txn,
+ recipient=record.userid)
if rows:
[[resourceID, homeResourceID]] = rows
- # Invite(inviteuid, userid, principalURL, common_name, access, state, summary)
- yield self._txn.execSQL(
- """
- update %(BIND:name)s
- set %(BIND:column_BIND_MODE)s = %%s,
- %(BIND:column_BIND_STATUS)s = %%s,
- %(BIND:column_MESSAGE)s = %%s
- where %(BIND:column_RESOURCE_ID)s = %%s
- and %(BIND:column_HOME_RESOURCE_ID)s = %%s
- """ % self._combinedTable,
- [bindMode, bindStatus, record.summary, resourceID, homeResourceID]
+ yield self._updateBindQuery.on(
+ self._txn,
+ mode=bindMode, status=bindStatus, message=record.summary,
+ resourceID=resourceID, homeID=homeResourceID
)
- yield self._txn.execSQL("""
- update INVITE
- set NAME = %s, INVITE_UID = %s
- where RECIPIENT_ADDRESS = %s
- """,
- [record.name, record.inviteuid, record.userid]
+ yield self._updateInviteQuery.on(
+ self._txn, name=record.name, uid=record.inviteuid,
+ recipient=record.userid
)
else:
- yield self._txn.execSQL(
- """
- insert into INVITE
- (
- INVITE_UID, NAME,
- HOME_RESOURCE_ID, RESOURCE_ID,
- RECIPIENT_ADDRESS
- )
- values (%s, %s, %s, %s, %s)
- """,
- [
- record.inviteuid, record.name,
- shareeHome._resourceID, self._collection._resourceID,
- record.userid
- ])
- yield self._txn.execSQL(
- """
- insert into %(BIND:name)s
- (
- %(BIND:column_HOME_RESOURCE_ID)s,
- %(BIND:column_RESOURCE_ID)s,
- %(BIND:column_RESOURCE_NAME)s,
- %(BIND:column_BIND_MODE)s,
- %(BIND:column_BIND_STATUS)s,
- %(BIND:column_SEEN_BY_OWNER)s,
- %(BIND:column_SEEN_BY_SHAREE)s,
- %(BIND:column_MESSAGE)s
- )
- values (%%s, %%s, %%s, %%s, %%s, %%s, %%s, %%s)
- """ % self._combinedTable,
- [
- shareeHome._resourceID,
- self._collection._resourceID,
- None, # this is NULL because it is not bound yet, let's be
- # explicit about that.
- bindMode,
- bindStatus,
- False,
- False,
- record.summary
- ]
+ yield self._insertInviteQuery.on(
+ self._txn, uid=record.inviteuid, name=record.name,
+ homeID=shareeHome._resourceID,
+ resourceID=self._collection._resourceID,
+ recipient=record.userid
)
+ yield self._insertBindQuery.on(
+ self._txn,
+ homeID=shareeHome._resourceID,
+ resourceID=self._collection._resourceID,
+ mode=bindMode,
+ status=bindStatus,
+ message=record.summary
+ )
+ @classmethod
+ def _deleteOneBindQuery(cls, constraint):
+ inv = schema.INVITE
+ bind = cls._bindSchema
+ return Delete(
+ From=bind, Where=(bind.HOME_RESOURCE_ID, bind.RESOURCE_ID) ==
+ Select([inv.HOME_RESOURCE_ID, inv.RESOURCE_ID],
+ From=inv, Where=constraint))
+
+
+ @classmethod
+ def _deleteOneInviteQuery(cls, constraint):
+ inv = schema.INVITE
+ return Delete(From=inv, Where=constraint)
+
+
+ @classproperty
+ def _deleteBindByRecipient(cls):
+ inv = schema.INVITE
+ return cls._deleteOneBindQuery(
+ inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _deleteInviteByRecipient(cls):
+ inv = schema.INVITE
+ return cls._deleteOneInviteQuery(
+ inv.RECIPIENT_ADDRESS == Parameter("recipient"))
+
+
+ @classproperty
+ def _deleteBindByUID(cls):
+ inv = schema.INVITE
+ return cls._deleteOneBindQuery(inv.INVITE_UID == Parameter("uid"))
+
+
+ @classproperty
+ def _deleteInviteByUID(cls):
+ inv = schema.INVITE
+ return cls._deleteOneInviteQuery(inv.INVITE_UID == Parameter("uid"))
+
+
@inlineCallbacks
def removeRecordForUserID(self, userid):
- yield self._txn.execSQL(
- """
- delete from %(BIND:name)s using INVITE
- where INVITE.RECIPIENT_ADDRESS = %%s
- and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- """ % self._combinedTable,
- [userid]
- )
- yield self._txn.execSQL(
- "delete from INVITE where RECIPIENT_ADDRESS = %s",
- [userid]
- )
+ yield self._deleteBindByRecipient.on(self._txn, recipient=userid)
+ yield self._deleteInviteByRecipient.on(self._txn, recipient=userid)
@inlineCallbacks
def removeRecordForInviteUID(self, inviteUID):
- yield self._txn.execSQL(
- """
- delete from %(BIND:name)s using INVITE
- where INVITE.INVITE_UID = %s
- and %(BIND:name)s.%(BIND:column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- and %(BIND:name)s.%(BIND:column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- """ % self._combinedTable,
- [inviteUID]
- )
- yield self._txn.execSQL(
- "delete from INVITE where INVITE_UID = %s",
- [inviteUID]
- )
+ yield self._deleteBindByUID.on(self._txn, uid=inviteUID)
+ yield self._deleteInviteByUID.on(self._txn, uid=inviteUID)
@@ -368,11 +422,11 @@
L{twistedcaldav.sharing.InvitesDatabase}.
"""
- def __init__(self, calendar):
- self._homeTable = CALENDAR_HOME_TABLE
- self._bindTable = CALENDAR_BIND_TABLE
- super(SQLLegacyCalendarInvites, self).__init__(calendar)
+ _homeTable = CALENDAR_HOME_TABLE
+ _bindTable = CALENDAR_BIND_TABLE
+ _homeSchema = schema.CALENDAR_HOME
+ _bindSchema = schema.CALENDAR_BIND
def _getHomeWithUID(self, uid):
return self._txn.calendarHomeWithUID(uid, create=True)
@@ -385,11 +439,11 @@
L{twistedcaldav.sharing.InvitesDatabase}.
"""
- def __init__(self, addressbook):
- self._homeTable = ADDRESSBOOK_HOME_TABLE
- self._bindTable = ADDRESSBOOK_BIND_TABLE
- super(SQLLegacyAddressBookInvites, self).__init__(addressbook)
+ _homeTable = ADDRESSBOOK_HOME_TABLE
+ _bindTable = ADDRESSBOOK_BIND_TABLE
+ _homeSchema = schema.ADDRESSBOOK_HOME
+ _bindSchema = schema.ADDRESSBOOK_BIND
def _getHomeWithUID(self, uid):
return self._txn.addressbookHomeWithUID(uid, create=True)
@@ -402,9 +456,13 @@
_bindTable = None
_urlTopSegment = None
+ _homeSchema = None
+ _bindSchema = None
+
def __init__(self, home):
self._home = home
+
@property
def _txn(self):
return self._home._txn
@@ -422,6 +480,50 @@
pass
+ @classproperty
+ def _allSharedToQuery(cls):
+ bind = cls._bindSchema
+ return Select(
+ [bind.RESOURCE_ID, bind.RESOURCE_NAME,
+ bind.BIND_MODE, bind.MESSAGE],
+ From=bind,
+ Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+ .And(bind.BIND_MODE != _BIND_MODE_OWN)
+ .And(bind.RESOURCE_NAME != None)
+ )
+
+
+ @classproperty
+ def _inviteUIDByResourceIDsQuery(cls):
+ inv = schema.INVITE
+ return Select(
+ [inv.INVITE_UID], From=inv, Where=
+ (inv.RESOURCE_ID == Parameter("resourceID"))
+ .And(inv.HOME_RESOURCE_ID == Parameter("homeID"))
+ )
+
+
+ @classproperty
+ def _ownerHomeIDAndName(cls):
+ bind = cls._bindSchema
+ return Select(
+ [bind.HOME_RESOURCE_ID, bind.RESOURCE_NAME], From=bind, Where=
+ (bind.RESOURCE_ID == Parameter("resourceID"))
+ .And(bind.BIND_MODE == _BIND_MODE_OWN)
+ )
+
+
+ @classproperty
+ def _ownerUIDFromHomeID(cls):
+ home = cls._homeSchema
+ return Select(
+ [home.OWNER_UID], From=home,
+ Where=home.RESOURCE_ID == Parameter("homeID")
+ )
+
+
+
+
@inlineCallbacks
def allRecords(self):
# This should have been a smart join that got all these columns at
@@ -429,78 +531,31 @@
# _want_ to do (just look for binds in a particular homes) is
# much simpler anyway; we should just do that.
all = []
- shareRows = yield self._txn.execSQL(
- """
- select %(column_RESOURCE_ID)s, %(column_RESOURCE_NAME)s, %(column_BIND_MODE)s, %(column_MESSAGE)s
- from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s
- and %(column_BIND_MODE)s != %%s
- and %(column_RESOURCE_NAME)s is not null
- """ % self._bindTable,
- [self._home._resourceID, _BIND_MODE_OWN]
- )
+ shareRows = yield self._allSharedToQuery.on(
+ self._txn, homeID=self._home._resourceID)
for resourceID, resourceName, bindMode, summary in shareRows:
+ [[ownerHomeID, ownerResourceName]] = yield (
+ self._ownerHomeIDAndName.on(self._txn,
+ resourceID=resourceID))
+ [[ownerUID]] = yield self._ownerUIDFromHomeID.on(
+ self._txn, homeID=ownerHomeID)
+ hosturl = '/%s/__uids__/%s/%s' % (
+ self._urlTopSegment, ownerUID, ownerResourceName
+ )
+ localname = resourceName
if bindMode != _BIND_MODE_DIRECT:
- [[shareuid]] = yield self._txn.execSQL(
- """
- select INVITE_UID
- from INVITE
- where RESOURCE_ID = %s and HOME_RESOURCE_ID = %s
- """,
- [resourceID, self._home._resourceID]
- )
sharetype = 'I'
- [[ownerHomeID, ownerResourceName]] = yield self._txn.execSQL(
- """
- select %(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_NAME)s
- from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- and %(column_BIND_MODE)s = %%s
- """ % self._bindTable,
- [resourceID, _BIND_MODE_OWN]
+ [[shareuid]] = yield self._inviteUIDByResourceIDsQuery.on(
+ self._txn, resourceID=resourceID,
+ homeID=self._home._resourceID
)
- [[ownerUID]] = yield self._txn.execSQL(
- """
- select %(column_OWNER_UID)s from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- """ % self._homeTable,
- [ownerHomeID]
- )
- hosturl = '/%s/__uids__/%s/%s' % (
- self._urlTopSegment, ownerUID, ownerResourceName
- )
- localname = resourceName
- record = SharedCollectionRecord(
- shareuid, sharetype, hosturl, localname, summary
- )
- all.append(record)
else:
sharetype = 'D'
- [[ownerHomeID, ownerResourceName]] = yield self._txn.execSQL(
- """
- select %(column_HOME_RESOURCE_ID)s, %(column_RESOURCE_NAME)s
- from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- and %(column_BIND_MODE)s = %%s
- """ % self._bindTable,
- [resourceID, _BIND_MODE_OWN]
- )
- [[ownerUID]] = yield self._txn.execSQL(
- """
- select %(column_OWNER_UID)s from %(name)s
- where %(column_RESOURCE_ID)s = %%s
- """ % self._homeTable,
- [ownerHomeID]
- )
- hosturl = '/%s/__uids__/%s/%s' % (
- self._urlTopSegment, ownerUID, ownerResourceName
- )
- localname = resourceName
- synthesisedUID = "Direct-%s-%s" % (self._home._resourceID, resourceID,)
- record = SharedCollectionRecord(
- synthesisedUID, sharetype, hosturl, localname, summary
- )
- all.append(record)
+ shareuid = "Direct-%s-%s" % (self._home._resourceID, resourceID,)
+ record = SharedCollectionRecord(
+ shareuid, sharetype, hosturl, localname, summary
+ )
+ all.append(record)
returnValue(all)
@@ -516,15 +571,39 @@
return self._search(shareuid=shareUID)
+ @classproperty
+ def _updateBindName(cls):
+ bind = cls._bindSchema
+ return Update({bind.RESOURCE_NAME: Parameter("localname")},
+ Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+ .And(bind.RESOURCE_ID == Parameter('resourceID')))
+
+
+ @classproperty
+ def _acceptDirectShareQuery(cls):
+ bind = cls._bindSchema
+ return Insert({
+ bind.HOME_RESOURCE_ID: Parameter("homeID"),
+ bind.RESOURCE_ID: Parameter("resourceID"),
+ bind.RESOURCE_NAME: Parameter("name"),
+ bind.MESSAGE: Parameter("message"),
+ bind.BIND_MODE: _BIND_MODE_DIRECT,
+ bind.BIND_STATUS: _BIND_STATUS_ACCEPTED,
+ bind.SEEN_BY_OWNER: True,
+ bind.SEEN_BY_SHAREE: True,
+ })
+
+
@inlineCallbacks
def addOrUpdateRecord(self, record):
# record.hosturl -> /.../__uids__/<uid>/<name>
splithost = record.hosturl.split('/')
-
+
# Double-check the path
if splithost[2] != "__uids__":
- raise ValueError("Sharing URL must be a __uids__ path: %s" % (record.hosturl,))
-
+ raise ValueError(
+ "Sharing URL must be a __uids__ path: %s" % (record.hosturl,))
+
ownerUID = splithost[3]
ownerCollectionName = splithost[4]
ownerHome = yield self._getHomeWithUID(ownerUID)
@@ -532,120 +611,115 @@
collectionResourceID = ownerCollection._resourceID
if record.sharetype == 'I':
-
# There needs to be a bind already, one that corresponds to the
# invitation. The invitation's UID is the same as the share UID. I
# just need to update its 'localname', i.e.
# XXX_BIND.XXX_RESOURCE_NAME.
- yield self._txn.execSQL(
- """
- update %(name)s
- set %(column_RESOURCE_NAME)s = %%s
- where %(column_HOME_RESOURCE_ID)s = %%s
- and %(column_RESOURCE_ID)s = %%s
- """ % self._bindTable,
- [record.localname, self._home._resourceID, collectionResourceID]
+ yield self._updateBindName.on(
+ self._txn, localname=record.localname,
+ homeID=self._home._resourceID, resourceID=collectionResourceID
)
elif record.sharetype == 'D':
- # There is no bind entry already so add one.
+ # There is no bind entry already so add one - but be aware of possible race to create
- yield self._txn.execSQL(
- """
- insert into %(name)s
- (
- %(column_HOME_RESOURCE_ID)s,
- %(column_RESOURCE_ID)s,
- %(column_RESOURCE_NAME)s,
- %(column_BIND_MODE)s,
- %(column_BIND_STATUS)s,
- %(column_SEEN_BY_OWNER)s,
- %(column_SEEN_BY_SHAREE)s,
- %(column_MESSAGE)s
+ # Use savepoint so we can do a partial rollback if there is a race condition
+ # where this row has already been inserted
+ savepoint = SavepointAction("addOrUpdateRecord")
+ yield savepoint.acquire(self._txn)
+
+ try:
+ yield self._acceptDirectShareQuery.on(
+ self._txn, homeID=self._home._resourceID,
+ resourceID=collectionResourceID, name=record.localname,
+ message=record.summary
)
- values (%%s, %%s, %%s, %%s, %%s, %%s, %%s, %%s)
- """ % self._bindTable,
- [
- self._home._resourceID,
- collectionResourceID,
- record.localname,
- _BIND_MODE_DIRECT,
- _BIND_STATUS_ACCEPTED,
- True,
- True,
- record.summary,
- ])
+ except Exception: # FIXME: Really want to trap the pg.DatabaseError but in a non-DB specific manner
+ yield savepoint.rollback(self._txn)
+ # For now we will assume that the insert already done is the winner - so nothing more to do here
+ else:
+ yield savepoint.release(self._txn)
+
shareeCollection = yield self._home.sharedChildWithName(record.localname)
yield shareeCollection._initSyncToken()
+ @classproperty
+ def _unbindShareQuery(cls):
+ bind = cls._bindSchema
+ return Update({
+ bind.RESOURCE_NAME: None
+ }, Where=(bind.RESOURCE_NAME == Parameter("name"))
+ .And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
+
+
@inlineCallbacks
def removeRecordForLocalName(self, localname):
record = yield self.recordForLocalName(localname)
shareeCollection = yield self._home.sharedChildWithName(record.localname)
- yield shareeCollection._deletedSyncToken()
+ yield shareeCollection._deletedSyncToken(sharedRemoval=True)
- returnValue((yield self._txn.execSQL(
- """
- update %(name)s
- set %(column_RESOURCE_NAME)s = NULL
- where %(column_RESOURCE_NAME)s = %%s
- and %(column_HOME_RESOURCE_ID)s = %%s
- """ % self._bindTable,
- [localname, self._home._resourceID]
- )))
+ result = yield self._unbindShareQuery.on(self._txn, name=localname,
+ homeID=self._home._resourceID)
+ returnValue(result)
+ @classproperty
+ def _removeInviteShareQuery(cls):
+ """
+ DAL query to remove a non-direct share by invite UID.
+ """
+ bind = cls._bindSchema
+ inv = schema.INVITE
+ return Update(
+ {bind.RESOURCE_NAME: None},
+ Where=(bind.HOME_RESOURCE_ID, bind.RESOURCE_ID) ==
+ Select([inv.HOME_RESOURCE_ID, inv.RESOURCE_ID],
+ From=inv, Where=inv.INVITE_UID == Parameter("uid")))
+
+
+ @classproperty
+ def _removeDirectShareQuery(cls):
+ """
+ DAL query to remove a direct share by its homeID and resourceID.
+ """
+ bind = cls._bindSchema
+ return Delete(From=bind,
+ Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+ .And(bind.RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
def removeRecordForShareUID(self, shareUID):
record = yield self.recordForShareUID(shareUID)
shareeCollection = yield self._home.sharedChildWithName(record.localname)
- yield shareeCollection._deletedSyncToken()
+ yield shareeCollection._deletedSyncToken(sharedRemoval=True)
if not shareUID.startswith("Direct"):
- yield self._txn.execSQL(
- """
- update %(name)s
- set %(column_RESOURCE_NAME)s = NULL
- from INVITE
- where INVITE.INVITE_UID = %%s
- and %(name)s.%(column_HOME_RESOURCE_ID)s = INVITE.HOME_RESOURCE_ID
- and %(name)s.%(column_RESOURCE_ID)s = INVITE.RESOURCE_ID
- """ % self._bindTable,
- [shareUID, ]
- )
+ yield self._removeInviteShareQuery.on(self._txn, uid=shareUID)
else:
# Extract pieces from synthesised UID
homeID, resourceID = shareUID[len("Direct-"):].split("-")
-
# Now remove the binding for the direct share
- yield self._txn.execSQL(
- """
- delete from %(name)s
- where %(column_HOME_RESOURCE_ID)s = %%s
- and %(column_RESOURCE_ID)s = %%s
- """ % self._bindTable,
- [homeID, resourceID, ]
- )
+ yield self._removeDirectShareQuery.on(
+ self._txn, homeID=homeID, resourceID=resourceID)
-
class SQLLegacyCalendarShares(SQLLegacyShares):
"""
Emulator for the implicit interface specified by
L{twistedcaldav.sharing.InvitesDatabase}.
"""
- def __init__(self, home):
- self._homeTable = CALENDAR_HOME_TABLE
- self._bindTable = CALENDAR_BIND_TABLE
- self._urlTopSegment = "calendars"
+ _homeTable = CALENDAR_HOME_TABLE
+ _bindTable = CALENDAR_BIND_TABLE
+ _homeSchema = schema.CALENDAR_HOME
+ _bindSchema = schema.CALENDAR_BIND
+ _urlTopSegment = "calendars"
- super(SQLLegacyCalendarShares, self).__init__(home)
-
def _getHomeWithUID(self, uid):
return self._txn.calendarHomeWithUID(uid, create=True)
@@ -657,17 +731,18 @@
L{twistedcaldav.sharing.InvitesDatabase}.
"""
- def __init__(self, home):
- self._homeTable = ADDRESSBOOK_HOME_TABLE
- self._bindTable = ADDRESSBOOK_BIND_TABLE
- self._urlTopSegment = "addressbooks"
+ _homeTable = ADDRESSBOOK_HOME_TABLE
+ _bindTable = ADDRESSBOOK_BIND_TABLE
+ _homeSchema = schema.ADDRESSBOOK_HOME
+ _bindSchema = schema.ADDRESSBOOK_BIND
+ _urlTopSegment = "addressbooks"
- super(SQLLegacyAddressBookShares, self).__init__(home)
def _getHomeWithUID(self, uid):
return self._txn.addressbookHomeWithUID(uid, create=True)
+
class MemcachedUIDReserver(CachePoolUserMixIn, LoggingMixIn):
def __init__(self, index, cachePool=None):
self.index = index
@@ -779,10 +854,14 @@
key = self._key(uid)
return succeed(key in self.reservations)
-class postgresqlgenerator(sqlgenerator):
+
+
+class RealSQLBehaviorMixin(object):
"""
- Query generator for postgreSQL indexed searches. (Currently unused: work
- in progress.)
+ Class attributes for 'real' SQL behavior; avoid idiosyncracies of SQLite,
+ use standard SQL constructions, and depend on the full schema in
+ sql_schema_vX.sql rather than the partial one in twistedcaldav which depends
+ on the placement of the database in the filesystem for some information.
"""
ISOP = " = "
@@ -792,24 +871,20 @@
"TYPE": "CALENDAR_OBJECT.ICALENDAR_TYPE",
"UID": "CALENDAR_OBJECT.ICALENDAR_UID",
}
+ RESOURCEDB = "CALENDAR_OBJECT"
+ TIMESPANDB = "TIME_RANGE"
- def __init__(self, expr, calendarid, userid):
- self.RESOURCEDB = "CALENDAR_OBJECT"
- self.TIMESPANDB = "TIME_RANGE"
- self.TIMESPANTEST = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.START_DATE < %s AND TIME_RANGE.END_DATE > %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.START_DATE < %s AND TIME_RANGE.END_DATE > %s))"
- self.TIMESPANTEST_NOEND = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.END_DATE > %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.END_DATE > %s))"
- self.TIMESPANTEST_NOSTART = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.START_DATE < %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.START_DATE < %s))"
- self.TIMESPANTEST_TAIL_PIECE = " AND TIME_RANGE.CALENDAR_OBJECT_RESOURCE_ID = CALENDAR_OBJECT.RESOURCE_ID AND CALENDAR_OBJECT.CALENDAR_RESOURCE_ID = %s"
- self.TIMESPANTEST_JOIN_ON_PIECE = "TIME_RANGE.INSTANCE_ID = TRANSPARENCY.TIME_RANGE_INSTANCE_ID AND TRANSPARENCY.USER_ID = %s"
+ TIMESPANTEST = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.START_DATE < %s AND TIME_RANGE.END_DATE > %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.START_DATE < %s AND TIME_RANGE.END_DATE > %s))"
+ TIMESPANTEST_NOEND = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.END_DATE > %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.END_DATE > %s))"
+ TIMESPANTEST_NOSTART = "((TIME_RANGE.FLOATING = FALSE AND TIME_RANGE.START_DATE < %s) OR (TIME_RANGE.FLOATING = TRUE AND TIME_RANGE.START_DATE < %s))"
+ TIMESPANTEST_TAIL_PIECE = " AND TIME_RANGE.CALENDAR_OBJECT_RESOURCE_ID = CALENDAR_OBJECT.RESOURCE_ID AND TIME_RANGE.CALENDAR_RESOURCE_ID = %s"
+ TIMESPANTEST_JOIN_ON_PIECE = "TIME_RANGE.INSTANCE_ID = TRANSPARENCY.TIME_RANGE_INSTANCE_ID AND TRANSPARENCY.USER_ID = %s"
- super(postgresqlgenerator, self).__init__(expr, calendarid, userid)
-
-
def generate(self):
"""
Generate the actual SQL 'where ...' expression from the passed in
expression tree.
-
+
@return: a C{tuple} of (C{str}, C{list}), where the C{str} is the
partial SQL statement, and the C{list} is the list of argument
substitutions to use with the SQL API execute method.
@@ -841,23 +916,61 @@
return select, self.arguments
+ def containsArgument(self, arg):
+ return "%%%s%%" % (arg,)
+
+
+
+class FormatParamStyleMixin(object):
+ """
+ Mixin for overriding methods on sqlgenerator that generate arguments
+ according to format/pyformat rules rather than the base class's 'numeric'
+ rules.
+ """
+
def addArgument(self, arg):
self.arguments.append(arg)
self.substitutions.append("%s")
self.sout.write("%s")
+
def setArgument(self, arg):
self.arguments.append(arg)
self.substitutions.append("%s")
+
def frontArgument(self, arg):
self.arguments.insert(0, arg)
self.substitutions.insert(0, "%s")
- def containsArgument(self, arg):
- return "%%%s%%" % (arg,)
+class postgresqlgenerator(FormatParamStyleMixin, RealSQLBehaviorMixin,
+ sqlgenerator):
+ """
+ Query generator for PostgreSQL indexed searches.
+ """
+
+
+def fixbools(sqltext):
+ return sqltext.replace("TRUE", "1").replace("FALSE", "0")
+
+
+
+class oraclesqlgenerator(RealSQLBehaviorMixin, sqlgenerator):
+ """
+ Query generator for Oracle indexed searches.
+ """
+ TIMESPANTEST = fixbools(RealSQLBehaviorMixin.TIMESPANTEST)
+ TIMESPANTEST_NOEND = fixbools(RealSQLBehaviorMixin.TIMESPANTEST_NOEND)
+ TIMESPANTEST_NOSTART = fixbools(RealSQLBehaviorMixin.TIMESPANTEST_NOSTART)
+ TIMESPANTEST_TAIL_PIECE = fixbools(
+ RealSQLBehaviorMixin.TIMESPANTEST_TAIL_PIECE)
+ TIMESPANTEST_JOIN_ON_PIECE = fixbools(
+ RealSQLBehaviorMixin.TIMESPANTEST_JOIN_ON_PIECE)
+
+
+
class LegacyIndexHelper(LoggingMixIn, object):
@inlineCallbacks
@@ -906,6 +1019,8 @@
# This is only used with unit tests
self.reserver = DummyUIDReserver(self)
+ _objectSchema = schema.CALENDAR_OBJECT
+
@property
def _txn(self):
return self.calendar._txn
@@ -939,17 +1054,28 @@
returnValue(name)
+ @classproperty
+ def _notExpandedBeyondQuery(self):
+ """
+ DAL query to satisfy L{PostgresLegacyIndexEmulator.notExpandedBeyond}.
+ """
+ co = schema.CALENDAR_OBJECT
+ return Select([co.RESOURCE_NAME], From=co,
+ Where=(co.RECURRANCE_MAX < Parameter("minDate"))
+ .And(co.CALENDAR_RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
def notExpandedBeyond(self, minDate):
"""
Gives all resources which have not been expanded beyond a given date
in the database. (Unused; see above L{postgresqlgenerator}.
"""
- returnValue([row[0] for row in (yield self._txn.execSQL(
- "select RESOURCE_NAME from CALENDAR_OBJECT "
- "where RECURRANCE_MAX < %s and CALENDAR_RESOURCE_ID = %s",
- [normalizeForIndex(minDate), self.calendar._resourceID]
- ))])
+ returnValue([row[0] for row in (
+ yield self._notExpandedBeyondQuery.on(
+ self._txn, minDate=normalizeForIndex(minDate),
+ resourceID=self.calendar._resourceID))]
+ )
@inlineCallbacks
@@ -971,7 +1097,8 @@
# Actually expand recurrence max
for name in names:
- self.log_info("Search falls outside range of index for %s %s" % (name, minDate))
+ self.log_info("Search falls outside range of index for %s %s" %
+ (name, minDate))
yield self.reExpandResource(name, minDate)
@@ -979,20 +1106,29 @@
def indexedSearch(self, filter, useruid='', fbtype=False):
"""
Finds resources matching the given qualifiers.
+
@param filter: the L{Filter} for the calendar-query to execute.
@return: a L{Deferred} which fires with an iterable of tuples for each
resource matching the given C{qualifiers}. The tuples are C{(name,
uid, type)}, where C{name} is the resource name, C{uid} is the
- resource UID, and C{type} is the resource iCalendar component
- type.
+ resource UID, and C{type} is the resource iCalendar component type.
"""
+ # Detect which style of parameter-generation we're using. Naming is a
+ # little off here, because the reason we're using the numeric one is
+ # that it happens to be used by the oracle binding that we're using,
+ # whereas the postgres binding happens to use the 'pyformat' (e.g. %s)
+ # parameter style.
+ if self.calendar._txn.paramstyle == 'numeric':
+ generator = oraclesqlgenerator
+ else:
+ generator = postgresqlgenerator
# Make sure we have a proper Filter element and get the partial SQL
# statement to use.
if isinstance(filter, calendarqueryfilter.Filter):
qualifiers = calendarquery.sqlcalendarquery(
filter, self.calendar._resourceID, useruid,
- generator=postgresqlgenerator
+ generator=generator
)
if qualifiers is not None:
# Determine how far we need to extend the current expansion of
@@ -1014,13 +1150,7 @@
# Perform the search
if qualifiers is None:
- rowiter = yield self._txn.execSQL(
- """
- select RESOURCE_NAME, ICALENDAR_UID, ICALENDAR_TYPE
- from CALENDAR_OBJECT where CALENDAR_RESOURCE_ID = %s
- """,
- [self.calendar._resourceID],
- )
+ rowiter = yield self.bruteForceSearch()
else:
if fbtype:
# For a free-busy time-range query we return all instances
@@ -1064,28 +1194,49 @@
returnValue(results)
- def bruteForceSearch(self):
- return self._txn.execSQL(
- "select RESOURCE_NAME, ICALENDAR_UID, ICALENDAR_TYPE from "
- "CALENDAR_OBJECT where CALENDAR_RESOURCE_ID = %s",
- [self.calendar._resourceID]
+ @classproperty
+ def _bruteForceQuery(cls):
+ """
+ DAL query for all C{CALENDAR_OBJECT} rows in the calendar represented by
+ this index.
+ """
+ obj = cls._objectSchema
+ return Select(
+ [obj.RESOURCE_NAME, obj.ICALENDAR_UID, obj.ICALENDAR_TYPE],
+ From=obj, Where=obj.PARENT_RESOURCE_ID == Parameter("resourceID")
)
+ def bruteForceSearch(self):
+ return self._bruteForceQuery.on(
+ self._txn, resourceID=self.resource._resourceID)
+
+
@inlineCallbacks
def resourcesExist(self, names):
returnValue(list(set(names).intersection(
set((yield self.calendar.listCalendarObjects())))))
+ @classproperty
+ def _resourceExistsQuery(cls):
+ """
+ DAL query to determine whether a calendar object exists in the
+ collection represented by this index.
+ """
+ obj = cls._objectSchema
+ return Select(
+ [obj.RESOURCE_NAME], From=obj,
+ Where=(obj.RESOURCE_NAME == Parameter("name"))
+ .And(obj.PARENT_RESOURCE_ID == Parameter("resourceID"))
+ )
+
+
@inlineCallbacks
def resourceExists(self, name):
returnValue((bool(
- (yield self._txn.execSQL(
- "select RESOURCE_NAME from CALENDAR_OBJECT where "
- "RESOURCE_NAME = %s and CALENDAR_RESOURCE_ID = %s",
- [name, self.calendar._resourceID]
- ))
+ (yield self._resourceExistsQuery.on(
+ self._txn, name=name, resourceID=self.resource._resourceID))
)))
@@ -1112,10 +1263,9 @@
# CARDDAV
-class postgresqladbkgenerator(sqlgenerator):
+class oraclesqladbkgenerator(sqlgenerator):
"""
- Query generator for postgreSQL indexed searches. (Currently unused: work
- in progress.)
+ Query generator for Oracle indexed searches.
"""
ISOP = " = "
@@ -1124,18 +1274,17 @@
FIELDS = {
"UID": "ADDRESSBOOK_OBJECT.VCARD_UID",
}
+ RESOURCEDB = "ADDRESSBOOK_OBJECT"
- def __init__(self, expr, addressbookid):
- self.RESOURCEDB = "ADDRESSBOOK_OBJECT"
+ def containsArgument(self, arg):
+ return "%%%s%%" % (arg,)
- super(postgresqladbkgenerator, self).__init__(expr, addressbookid)
-
def generate(self):
"""
Generate the actual SQL 'where ...' expression from the passed in
expression tree.
-
+
@return: a C{tuple} of (C{str}, C{list}), where the C{str} is the
partial SQL statement, and the C{list} is the list of argument
substitutions to use with the SQL API execute method.
@@ -1159,29 +1308,24 @@
return select, self.arguments
- def addArgument(self, arg):
- self.arguments.append(arg)
- self.substitutions.append("%s")
- self.sout.write("%s")
- def setArgument(self, arg):
- self.arguments.append(arg)
- self.substitutions.append("%s")
+class postgresqladbkgenerator(FormatParamStyleMixin, oraclesqladbkgenerator):
+ """
+ Query generator for PostgreSQL indexed searches. Inherit 'real' database
+ behavior from L{oracleadbkgenerator}, and %s-style formatting from
+ L{FormatParamStyleMixin}.
+ """
- def frontArgument(self, arg):
- self.arguments.insert(0, arg)
- self.substitutions.insert(0, "%s")
- def containsArgument(self, arg):
- return "%%%s%%" % (arg,)
-
class PostgresLegacyABIndexEmulator(LegacyIndexHelper):
"""
Emulator for L{twistedcaldv.index.Index} and
L{twistedcaldv.index.IndexSchedule}.
"""
+ _objectSchema = schema.ADDRESSBOOK_OBJECT
+
def __init__(self, addressbook):
self.resource = self.addressbook = addressbook
if (
@@ -1234,10 +1378,14 @@
C{name} is the resource name, C{uid} is the resource UID, and
C{type} is the resource iCalendar component type.x
"""
-
+ if self.addressbook._txn.paramstyle == 'numeric':
+ generator = oraclesqladbkgenerator
+ else:
+ generator = postgresqladbkgenerator
# Make sure we have a proper Filter element and get the partial SQL statement to use.
if isinstance(filter, carddavxml.Filter):
- qualifiers = addressbookquery.sqladdressbookquery(filter, self.addressbook._resourceID, generator=postgresqladbkgenerator)
+ qualifiers = addressbookquery.sqladdressbookquery(
+ filter, self.addressbook._resourceID, generator=generator)
else:
qualifiers = None
if qualifiers is not None:
@@ -1247,10 +1395,13 @@
qualifiers[1]
)
else:
- rowiter = yield self._txn.execSQL(
- "select RESOURCE_NAME, VCARD_UID from ADDRESSBOOK_OBJECT where ADDRESSBOOK_RESOURCE_ID = %s",
- [self.addressbook._resourceID, ],
- )
+ rowiter = yield Select(
+ [schema.ADDRESSBOOK_OBJECT.RESOURCE_NAME,
+ schema.ADDRESSBOOK_OBJECT.VCARD_UID],
+ From=schema.ADDRESSBOOK_OBJECT,
+ Where=schema.ADDRESSBOOK_OBJECT.ADDRESSBOOK_RESOURCE_ID ==
+ self.addressbook._resourceID
+ ).on(self.addressbook._txn)
returnValue(list(rowiter))
@@ -1263,26 +1414,8 @@
raise IndexedSearchException()
- def bruteForceSearch(self):
- return self._txn.execSQL(
- "select RESOURCE_NAME, VCARD_UID from "
- "ADDRESSBOOK_OBJECT where ADDRESSBOOK_RESOURCE_ID = %s",
- [self.addressbook._resourceID]
- )
-
-
@inlineCallbacks
def resourcesExist(self, names):
returnValue(list(set(names).intersection(
set((yield self.addressbook.listAddressbookObjects())))))
-
- @inlineCallbacks
- def resourceExists(self, name):
- returnValue(bool(
- (yield self._txn.execSQL(
- "select RESOURCE_NAME from ADDRESSBOOK_OBJECT where "
- "RESOURCE_NAME = %s and ADDRESSBOOK_RESOURCE_ID = %s",
- [name, self.addressbook._resourceID]
- ))
- ))
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_schema_v1.sql
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_schema_v1.sql 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_schema_v1.sql 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,3 +1,21 @@
+-- -*- test-case-name: txdav.caldav.datastore.test.test_sql,txdav.carddav.datastore.test.test_sql -*-
+
+----
+-- Copyright (c) 2010-2011 Apple Inc. All 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 --
-----------------
@@ -14,6 +32,7 @@
OWNER_UID varchar(255) not null unique
);
+create index CALENDAR_HOME_OWNER_UID on CALENDAR_HOME(OWNER_UID);
----------------------------
-- Calendar Home Metadata --
@@ -24,6 +43,8 @@
QUOTA_USED_BYTES integer default 0 not null
);
+create index CALENDAR_HOME_METADATA_RESOURCE_ID
+ on CALENDAR_HOME_METADATA(RESOURCE_ID);
--------------
-- Calendar --
@@ -48,6 +69,9 @@
RESOURCE_ID integer not null
);
+create index INVITE_INVITE_UID on INVITE(INVITE_UID);
+create index INVITE_RESOURCE_ID on INVITE(INVITE_UID);
+create index INVITE_HOME_RESOURCE_ID on INVITE(INVITE_UID);
---------------------------
-- Sharing Notifications --
@@ -58,13 +82,15 @@
OWNER_UID varchar(255) not null unique
);
+create index NOTIFICATION_HOME_OWNER_UID on NOTIFICATION_HOME(OWNER_UID);
+
create table NOTIFICATION (
RESOURCE_ID integer primary key default nextval('RESOURCE_ID_SEQ'),
NOTIFICATION_HOME_RESOURCE_ID integer not null references NOTIFICATION_HOME,
NOTIFICATION_UID varchar(255) not null,
- XML_TYPE varchar not null,
- XML_DATA varchar 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),
@@ -72,7 +98,11 @@
unique(NOTIFICATION_UID, NOTIFICATION_HOME_RESOURCE_ID)
);
+create index NOTIFICATION_NOTIFICATION_HOME_RESOURCE_ID on
+ NOTIFICATION(NOTIFICATION_HOME_RESOURCE_ID);
+create index NOTIFICATION_NOTIFICATION_UID on NOTIFICATION(NOTIFICATION_UID);
+
-------------------
-- Calendar Bind --
-------------------
@@ -97,6 +127,11 @@
unique(CALENDAR_HOME_RESOURCE_ID, CALENDAR_RESOURCE_NAME)
);
+create index CALENDAR_BIND_HOME_RESOURCE_ID on
+ CALENDAR_BIND(CALENDAR_HOME_RESOURCE_ID);
+create index CALENDAR_BIND_RESOURCE_ID on
+ CALENDAR_BIND(CALENDAR_RESOURCE_ID);
+
-- Enumeration of calendar bind modes
create table CALENDAR_BIND_MODE (
@@ -133,7 +168,8 @@
ICALENDAR_TEXT text not null,
ICALENDAR_UID varchar(255) not null,
ICALENDAR_TYPE varchar(255) not null,
- ATTACHMENTS_MODE integer not null, -- enum CALENDAR_OBJECT_ATTACHMENTS_MODE
+ 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_MAX date, -- maximum date that recurrences have been expanded to.
@@ -155,6 +191,21 @@
-- unique(CALENDAR_RESOURCE_ID, ICALENDAR_UID)
);
+create index CALENDAR_OBJECT_CALENDAR_RESOURCE_ID on
+ CALENDAR_OBJECT(CALENDAR_RESOURCE_ID);
+
+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 (
@@ -162,8 +213,9 @@
DESCRIPTION varchar(16) not null unique
);
-insert into CALENDAR_OBJECT_ATTACHMENTS_MODE values (0, 'read' );
-insert into CALENDAR_OBJECT_ATTACHMENTS_MODE values (1, 'write');
+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
@@ -201,6 +253,12 @@
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 (
@@ -225,13 +283,16 @@
TRANSPARENT boolean not null
);
+create index TRANSPARENCY_TIME_RANGE_INSTANCE_ID on
+ TRANSPARENCY(TIME_RANGE_INSTANCE_ID);
----------------
-- Attachment --
----------------
create table ATTACHMENT (
- CALENDAR_OBJECT_RESOURCE_ID integer not null references CALENDAR_OBJECT on delete cascade,
+ CALENDAR_HOME_RESOURCE_ID integer not null references CALENDAR_HOME,
+ DROPBOX_ID varchar(255) not null,
CONTENT_TYPE varchar(255) not null,
SIZE integer not null,
MD5 char(32) not null,
@@ -239,23 +300,12 @@
MODIFIED timestamp default timezone('UTC', CURRENT_TIMESTAMP),
PATH varchar(1024) not null,
- unique(CALENDAR_OBJECT_RESOURCE_ID, PATH)
+ unique(DROPBOX_ID, PATH)
);
+create index ATTACHMENT_DROPBOX_ID on ATTACHMENT(DROPBOX_ID);
-------------------
--- iTIP Message --
-------------------
-create table ITIP_MESSAGE (
- CALENDAR_RESOURCE_ID integer not null references CALENDAR,
- ICALENDAR_TEXT text not null,
- ICALENDAR_UID varchar(255) not null,
- MD5 char(32) not null,
- CHANGES text not null
-);
-
-
-----------------------
-- Resource Property --
-----------------------
@@ -279,6 +329,7 @@
OWNER_UID varchar(255) not null unique
);
+create index ADDRESSBOOK_HOME_OWNER_UID on ADDRESSBOOK_HOME(OWNER_UID);
--------------------------------
-- AddressBook Home Meta-data --
@@ -289,6 +340,8 @@
QUOTA_USED_BYTES integer default 0 not null
);
+create index ADDRESSBOOK_HOME_METADATA_RESOURCE_ID
+ on ADDRESSBOOK_HOME_METADATA(RESOURCE_ID);
-----------------
-- AddressBook --
@@ -325,6 +378,10 @@
unique(ADDRESSBOOK_HOME_RESOURCE_ID, ADDRESSBOOK_RESOURCE_NAME)
);
+create index ADDRESSBOOK_BIND_HOME_RESOURCE_ID on
+ ADDRESSBOOK_BIND(ADDRESSBOOK_HOME_RESOURCE_ID);
+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'),
@@ -340,6 +397,9 @@
unique(ADDRESSBOOK_RESOURCE_ID, VCARD_UID)
);
+create index ADDRESSBOOK_OBJECT_ADDRESSBOOK_RESOURCE_ID on
+ ADDRESSBOOK_OBJECT(ADDRESSBOOK_RESOURCE_ID);
+
---------------
-- Revisions --
---------------
@@ -356,13 +416,20 @@
CALENDAR_RESOURCE_ID integer references CALENDAR,
CALENDAR_NAME varchar(255) default null,
RESOURCE_NAME varchar(255),
- REVISION integer not null,
+ REVISION integer default nextval('REVISION_SEQ') not null,
DELETED boolean not null,
unique(CALENDAR_RESOURCE_ID, RESOURCE_NAME)
);
+create index CALENDAR_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on CALENDAR_OBJECT_REVISIONS(CALENDAR_HOME_RESOURCE_ID);
+
+create index CALENDAR_OBJECT_REVISIONS_RESOURCE_ID
+ on CALENDAR_OBJECT_REVISIONS(CALENDAR_RESOURCE_ID);
+
+
-------------------------------
-- AddressBook Object Revisions --
-------------------------------
@@ -372,13 +439,18 @@
ADDRESSBOOK_RESOURCE_ID integer references ADDRESSBOOK,
ADDRESSBOOK_NAME varchar(255) default null,
RESOURCE_NAME varchar(255),
- REVISION integer not null,
+ REVISION integer default nextval('REVISION_SEQ') not null,
DELETED boolean not null,
unique(ADDRESSBOOK_RESOURCE_ID, RESOURCE_NAME)
);
+create index ADDRESSBOOK_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_HOME_RESOURCE_ID);
+create index ADDRESSBOOK_OBJECT_REVISIONS_RESOURCE_ID
+ on ADDRESSBOOK_OBJECT_REVISIONS(ADDRESSBOOK_RESOURCE_ID);
+
-----------------------------------
-- Notification Object Revisions --
-----------------------------------
@@ -386,10 +458,26 @@
create table NOTIFICATION_OBJECT_REVISIONS (
NOTIFICATION_HOME_RESOURCE_ID integer not null references NOTIFICATION_HOME on delete cascade,
RESOURCE_NAME varchar(255),
- REVISION integer not null,
+ REVISION integer default nextval('REVISION_SEQ') not null,
DELETED boolean not null,
unique(NOTIFICATION_HOME_RESOURCE_ID, RESOURCE_NAME)
);
+create index NOTIFICATION_OBJECT_REVISIONS_HOME_RESOURCE_ID
+ on NOTIFICATION_OBJECT_REVISIONS(NOTIFICATION_HOME_RESOURCE_ID);
+
+
+--------------------
+-- Schema Version --
+--------------------
+
+create table CALENDARSERVER (
+ NAME varchar(255),
+ VALUE varchar(255),
+ unique(NAME)
+);
+
+insert into CALENDARSERVER values ('VERSION', '3');
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_tables.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_tables.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/sql_tables.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,162 +19,250 @@
SQL Table definitions.
"""
-CALENDAR_HOME_TABLE = {
- "name" : "CALENDAR_HOME",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_OWNER_UID" : "OWNER_UID",
-}
+from twisted.python.modules import getModule
+from twext.enterprise.dal.syntax import SchemaSyntax
+from twext.enterprise.dal.model import NO_DEFAULT
+from twext.enterprise.dal.model import Sequence, ProcedureCall
+from twext.enterprise.dal.parseschema import schemaFromPath
-CALENDAR_HOME_METADATA_TABLE = {
- "name" : "CALENDAR_HOME_METADATA",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_QUOTA_USED_BYTES" : "QUOTA_USED_BYTES",
-}
-ADDRESSBOOK_HOME_TABLE = {
- "name" : "ADDRESSBOOK_HOME",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_OWNER_UID" : "OWNER_UID",
-}
-ADDRESSBOOK_HOME_METADATA_TABLE = {
- "name" : "ADDRESSBOOK_HOME_METADATA",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_QUOTA_USED_BYTES" : "QUOTA_USED_BYTES",
-}
+def _populateSchema():
+ """
+ Generate the global L{SchemaSyntax}.
+ """
+ pathObj = getModule(__name__).filePath.sibling("sql_schema_v1.sql")
+ return SchemaSyntax(schemaFromPath(pathObj))
-NOTIFICATION_HOME_TABLE = {
- "name" : "NOTIFICATION_HOME",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_OWNER_UID" : "OWNER_UID",
-}
-CALENDAR_TABLE = {
- "name" : "CALENDAR",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_CREATED" : "CREATED",
- "column_MODIFIED" : "MODIFIED",
-}
-ADDRESSBOOK_TABLE = {
- "name" : "ADDRESSBOOK",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_CREATED" : "CREATED",
- "column_MODIFIED" : "MODIFIED",
-}
+schema = _populateSchema()
-CALENDAR_BIND_TABLE = {
- "name" : "CALENDAR_BIND",
- "column_HOME_RESOURCE_ID" : "CALENDAR_HOME_RESOURCE_ID",
- "column_RESOURCE_ID" : "CALENDAR_RESOURCE_ID",
- "column_RESOURCE_NAME" : "CALENDAR_RESOURCE_NAME",
- "column_BIND_MODE" : "BIND_MODE",
- "column_BIND_STATUS" : "BIND_STATUS",
- "column_SEEN_BY_OWNER" : "SEEN_BY_OWNER",
- "column_SEEN_BY_SHAREE" : "SEEN_BY_SHAREE",
- "column_MESSAGE" : "MESSAGE",
-}
-ADDRESSBOOK_BIND_TABLE = {
- "name" : "ADDRESSBOOK_BIND",
- "column_HOME_RESOURCE_ID" : "ADDRESSBOOK_HOME_RESOURCE_ID",
- "column_RESOURCE_ID" : "ADDRESSBOOK_RESOURCE_ID",
- "column_RESOURCE_NAME" : "ADDRESSBOOK_RESOURCE_NAME",
- "column_BIND_MODE" : "BIND_MODE",
- "column_BIND_STATUS" : "BIND_STATUS",
- "column_SEEN_BY_OWNER" : "SEEN_BY_OWNER",
- "column_SEEN_BY_SHAREE" : "SEEN_BY_SHAREE",
- "column_MESSAGE" : "MESSAGE",
-}
+# Column aliases, defined so that similar tables (such as CALENDAR_OBJECT and
+# ADDRESSBOOK_OBJECT) can be used according to a polymorphic interface.
-CALENDAR_OBJECT_REVISIONS_TABLE = {
- "name" : "CALENDAR_OBJECT_REVISIONS",
- "sequence" : "REVISION_SEQ",
- "column_HOME_RESOURCE_ID" : "CALENDAR_HOME_RESOURCE_ID",
- "column_RESOURCE_ID" : "CALENDAR_RESOURCE_ID",
- "column_COLLECTION_NAME" : "CALENDAR_NAME",
- "column_RESOURCE_NAME" : "RESOURCE_NAME",
- "column_REVISION" : "REVISION",
- "column_DELETED" : "DELETED",
-}
+schema.CALENDAR_BIND.RESOURCE_NAME = \
+ schema.CALENDAR_BIND.CALENDAR_RESOURCE_NAME
+schema.CALENDAR_BIND.RESOURCE_ID = \
+ schema.CALENDAR_BIND.CALENDAR_RESOURCE_ID
+schema.CALENDAR_BIND.HOME_RESOURCE_ID = \
+ schema.CALENDAR_BIND.CALENDAR_HOME_RESOURCE_ID
+schema.ADDRESSBOOK_BIND.RESOURCE_NAME = \
+ schema.ADDRESSBOOK_BIND.ADDRESSBOOK_RESOURCE_NAME
+schema.ADDRESSBOOK_BIND.RESOURCE_ID = \
+ schema.ADDRESSBOOK_BIND.ADDRESSBOOK_RESOURCE_ID
+schema.ADDRESSBOOK_BIND.HOME_RESOURCE_ID = \
+ schema.ADDRESSBOOK_BIND.ADDRESSBOOK_HOME_RESOURCE_ID
+schema.CALENDAR_OBJECT_REVISIONS.RESOURCE_ID = \
+ schema.CALENDAR_OBJECT_REVISIONS.CALENDAR_RESOURCE_ID
+schema.CALENDAR_OBJECT_REVISIONS.HOME_RESOURCE_ID = \
+ schema.CALENDAR_OBJECT_REVISIONS.CALENDAR_HOME_RESOURCE_ID
+schema.CALENDAR_OBJECT_REVISIONS.COLLECTION_NAME = \
+ schema.CALENDAR_OBJECT_REVISIONS.CALENDAR_NAME
+schema.ADDRESSBOOK_OBJECT_REVISIONS.RESOURCE_ID = \
+ schema.ADDRESSBOOK_OBJECT_REVISIONS.ADDRESSBOOK_RESOURCE_ID
+schema.ADDRESSBOOK_OBJECT_REVISIONS.HOME_RESOURCE_ID = \
+ schema.ADDRESSBOOK_OBJECT_REVISIONS.ADDRESSBOOK_HOME_RESOURCE_ID
+schema.ADDRESSBOOK_OBJECT_REVISIONS.COLLECTION_NAME = \
+ schema.ADDRESSBOOK_OBJECT_REVISIONS.ADDRESSBOOK_NAME
+schema.NOTIFICATION_OBJECT_REVISIONS.HOME_RESOURCE_ID = \
+ schema.NOTIFICATION_OBJECT_REVISIONS.NOTIFICATION_HOME_RESOURCE_ID
+schema.NOTIFICATION_OBJECT_REVISIONS.RESOURCE_ID = \
+ schema.NOTIFICATION_OBJECT_REVISIONS.NOTIFICATION_HOME_RESOURCE_ID
+schema.CALENDAR_OBJECT.TEXT = \
+ schema.CALENDAR_OBJECT.ICALENDAR_TEXT
+schema.CALENDAR_OBJECT.UID = \
+ schema.CALENDAR_OBJECT.ICALENDAR_UID
+schema.CALENDAR_OBJECT.PARENT_RESOURCE_ID = \
+ schema.CALENDAR_OBJECT.CALENDAR_RESOURCE_ID
+schema.ADDRESSBOOK_OBJECT.TEXT = \
+ schema.ADDRESSBOOK_OBJECT.VCARD_TEXT
+schema.ADDRESSBOOK_OBJECT.UID = \
+ schema.ADDRESSBOOK_OBJECT.VCARD_UID
+schema.ADDRESSBOOK_OBJECT.PARENT_RESOURCE_ID = \
+ schema.ADDRESSBOOK_OBJECT.ADDRESSBOOK_RESOURCE_ID
-ADDRESSBOOK_OBJECT_REVISIONS_TABLE = {
- "name" : "ADDRESSBOOK_OBJECT_REVISIONS",
- "sequence" : "REVISION_SEQ",
- "column_HOME_RESOURCE_ID" : "ADDRESSBOOK_HOME_RESOURCE_ID",
- "column_RESOURCE_ID" : "ADDRESSBOOK_RESOURCE_ID",
- "column_COLLECTION_NAME" : "ADDRESSBOOK_NAME",
- "column_RESOURCE_NAME" : "RESOURCE_NAME",
- "column_REVISION" : "REVISION",
- "column_DELETED" : "DELETED",
-}
-NOTIFICATION_OBJECT_REVISIONS_TABLE = {
- "name" : "NOTIFICATION_OBJECT_REVISIONS",
- "sequence" : "REVISION_SEQ",
- "column_HOME_RESOURCE_ID" : "NOTIFICATION_HOME_RESOURCE_ID",
- "column_RESOURCE_NAME" : "RESOURCE_NAME",
- "column_REVISION" : "REVISION",
- "column_DELETED" : "DELETED",
-}
-CALENDAR_OBJECT_TABLE = {
- "name" : "CALENDAR_OBJECT",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_PARENT_RESOURCE_ID" : "CALENDAR_RESOURCE_ID",
- "column_RESOURCE_NAME" : "RESOURCE_NAME",
- "column_TEXT" : "ICALENDAR_TEXT",
- "column_UID" : "ICALENDAR_UID",
- "column_ACCESS" : "ACCESS",
- "column_SCHEDULE_OBJECT" : "SCHEDULE_OBJECT",
- "column_SCHEDULE_TAG" : "SCHEDULE_TAG",
- "column_SCHEDULE_ETAGS" : "SCHEDULE_ETAGS",
- "column_PRIVATE_COMMENTS" : "PRIVATE_COMMENTS",
- "column_MD5" : "MD5",
- "column_CREATED" : "CREATED",
- "column_MODIFIED" : "MODIFIED",
-}
+def _combine(**kw):
+ """
+ Combine two table dictionaries used in a join to produce a single dictionary
+ that can be used in formatting.
+ """
+ result = {}
+ for tableRole, tableDictionary in kw.items():
+ result.update([("%s:%s" % (tableRole, k), v)
+ for k,v in tableDictionary.items()])
+ return result
-ADDRESSBOOK_OBJECT_TABLE = {
- "name" : "ADDRESSBOOK_OBJECT",
- "column_RESOURCE_ID" : "RESOURCE_ID",
- "column_PARENT_RESOURCE_ID" : "ADDRESSBOOK_RESOURCE_ID",
- "column_RESOURCE_NAME" : "RESOURCE_NAME",
- "column_TEXT" : "VCARD_TEXT",
- "column_UID" : "VCARD_UID",
- "column_MD5" : "MD5",
- "column_CREATED" : "CREATED",
- "column_MODIFIED" : "MODIFIED",
-}
+def _S(tableSyntax):
+ """
+ Construct a dictionary of strings from a L{TableSyntax} for those queries
+ that are still constructed via string interpolation.
+ """
+ result = {}
+ result['name'] = tableSyntax.model.name
+ #pkey = tableSyntax.model.primaryKey
+ #if pkey is not None:
+ # default = pkey.default
+ # if isinstance(default, Sequence):
+ # result['sequence'] = default.name
+ result['sequence'] = schema.model.sequenceNamed('REVISION_SEQ').name
+ for columnSyntax in tableSyntax:
+ result['column_' + columnSyntax.model.name] = columnSyntax.model.name
+ for alias, realColumnSyntax in tableSyntax.aliases().items():
+ result['column_' + alias] = realColumnSyntax.model.name
+ return result
+
+
+
+def _schemaConstants(nameColumn, valueColumn):
+ """
+ Get a constant value from the rows defined in the schema.
+ """
+ def get(name):
+ for row in nameColumn.model.table.schemaRows:
+ if row[nameColumn.model] == name:
+ return row[valueColumn.model]
+ return get
+
+
+
# Various constants
-_BIND_STATUS_INVITED = 0
-_BIND_STATUS_ACCEPTED = 1
-_BIND_STATUS_DECLINED = 2
-_BIND_STATUS_INVALID = 3
+_bindStatus = _schemaConstants(
+ schema.CALENDAR_BIND_STATUS.DESCRIPTION,
+ schema.CALENDAR_BIND_STATUS.ID
+)
-_ATTACHMENTS_MODE_WRITE = 1
+_BIND_STATUS_INVITED = _bindStatus('invited')
+_BIND_STATUS_ACCEPTED = _bindStatus('accepted')
+_BIND_STATUS_DECLINED = _bindStatus('declined')
+_BIND_STATUS_INVALID = _bindStatus('invalid')
-_BIND_MODE_OWN = 0
-_BIND_MODE_READ = 1
-_BIND_MODE_WRITE = 2
-_BIND_MODE_DIRECT = 3
+_attachmentsMode = _schemaConstants(
+ schema.CALENDAR_OBJECT_ATTACHMENTS_MODE.DESCRIPTION,
+ schema.CALENDAR_OBJECT_ATTACHMENTS_MODE.ID
+)
-# Some combined tables used in joins
-CALENDAR_AND_CALENDAR_BIND = {}
-CALENDAR_AND_CALENDAR_BIND.update([("CHILD:%s" % (k,), v) for k,v in CALENDAR_TABLE.items()])
-CALENDAR_AND_CALENDAR_BIND.update([("BIND:%s" % (k,), v) for k,v in CALENDAR_BIND_TABLE.items()])
+_ATTACHMENTS_MODE_NONE = _attachmentsMode('none')
+_ATTACHMENTS_MODE_READ = _attachmentsMode('read')
+_ATTACHMENTS_MODE_WRITE = _attachmentsMode('write')
-CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE = {}
-CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE.update([("REV:%s" % (k,), v) for k,v in CALENDAR_OBJECT_REVISIONS_TABLE.items()])
-CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE.update([("BIND:%s" % (k,), v) for k,v in CALENDAR_BIND_TABLE.items()])
-ADDRESSBOOK_AND_ADDRESSBOOK_BIND = {}
-ADDRESSBOOK_AND_ADDRESSBOOK_BIND.update([("CHILD:%s" % (k,), v) for k,v in ADDRESSBOOK_TABLE.items()])
-ADDRESSBOOK_AND_ADDRESSBOOK_BIND.update([("BIND:%s" % (k,), v) for k,v in ADDRESSBOOK_BIND_TABLE.items()])
+_bindMode = _schemaConstants(
+ schema.CALENDAR_BIND_MODE.DESCRIPTION,
+ schema.CALENDAR_BIND_MODE.ID
+)
-ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE = {}
-ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE.update([("REV:%s" % (k,), v) for k,v in ADDRESSBOOK_OBJECT_REVISIONS_TABLE.items()])
-ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE.update([("BIND:%s" % (k,), v) for k,v in ADDRESSBOOK_BIND_TABLE.items()])
+
+_BIND_MODE_OWN = _bindMode('own')
+_BIND_MODE_READ = _bindMode('read')
+_BIND_MODE_WRITE = _bindMode('write')
+_BIND_MODE_DIRECT = _bindMode('direct')
+
+
+# Compatibility tables for string formatting:
+CALENDAR_HOME_TABLE = _S(schema.CALENDAR_HOME)
+CALENDAR_HOME_METADATA_TABLE = _S(schema.CALENDAR_HOME_METADATA)
+ADDRESSBOOK_HOME_TABLE = _S(schema.ADDRESSBOOK_HOME)
+ADDRESSBOOK_HOME_METADATA_TABLE = _S(schema.ADDRESSBOOK_HOME_METADATA)
+NOTIFICATION_HOME_TABLE = _S(schema.NOTIFICATION_HOME)
+CALENDAR_TABLE = _S(schema.CALENDAR)
+ADDRESSBOOK_TABLE = _S(schema.ADDRESSBOOK)
+CALENDAR_BIND_TABLE = _S(schema.CALENDAR_BIND)
+ADDRESSBOOK_BIND_TABLE = _S(schema.ADDRESSBOOK_BIND)
+CALENDAR_OBJECT_REVISIONS_TABLE = _S(schema.CALENDAR_OBJECT_REVISIONS)
+ADDRESSBOOK_OBJECT_REVISIONS_TABLE = _S(schema.ADDRESSBOOK_OBJECT_REVISIONS)
+NOTIFICATION_OBJECT_REVISIONS_TABLE = _S(schema.NOTIFICATION_OBJECT_REVISIONS)
+CALENDAR_OBJECT_TABLE = _S(schema.CALENDAR_OBJECT)
+ADDRESSBOOK_OBJECT_TABLE = _S(schema.ADDRESSBOOK_OBJECT)
+
+# Some combined tables used in join-string-formatting.
+CALENDAR_AND_CALENDAR_BIND = _combine(CHILD=CALENDAR_TABLE,
+ BIND=CALENDAR_BIND_TABLE)
+CALENDAR_OBJECT_AND_BIND_TABLE = _combine(OBJECT=CALENDAR_OBJECT_TABLE,
+ BIND=CALENDAR_BIND_TABLE)
+CALENDAR_OBJECT_REVISIONS_AND_BIND_TABLE = _combine(
+ REV=CALENDAR_OBJECT_REVISIONS_TABLE,
+ BIND=CALENDAR_BIND_TABLE)
+ADDRESSBOOK_AND_ADDRESSBOOK_BIND = _combine(CHILD=ADDRESSBOOK_TABLE,
+ BIND=ADDRESSBOOK_BIND_TABLE)
+ADDRESSBOOK_OBJECT_AND_BIND_TABLE = _combine(OBJECT=ADDRESSBOOK_OBJECT_TABLE,
+ BIND=ADDRESSBOOK_BIND_TABLE)
+ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE = _combine(
+ REV=ADDRESSBOOK_OBJECT_REVISIONS_TABLE,
+ BIND=ADDRESSBOOK_BIND_TABLE)
+
+
+
+def _translateSchema(out):
+ """
+ When run as a script, translate the schema to another dialect. Currently
+ only postgres and oracle are supported, and native format is postgres, so
+ emit in oracle format.
+ """
+ for sequence in schema.model.sequences:
+ out.write('drop sequence %s; create sequence %s;\n' % (
+ sequence.name, sequence.name))
+ for table in schema:
+ # The only table name which actually exceeds the length limit right now
+ # is CALENDAR_OBJECT_ATTACHMENTS_MODE, which isn't actually _used_
+ # anywhere, so we can fake it for now.
+ out.write('drop table %s; create table %s (\n' % (
+ table.model.name[:30], table.model.name[:30],))
+ first = True
+ for column in table:
+ if first:
+ first = False
+ else:
+ out.write(",\n")
+ typeName = column.model.type.name
+ if typeName == 'text':
+ typeName = 'clob'
+ if typeName == 'boolean':
+ typeName = 'integer'
+ out.write(' "%s" %s' % (column.model.name, typeName))
+ if column.model.type.length:
+ out.write("(%s)" % (column.model.type.length,))
+ if column.model is table.model.primaryKey:
+ out.write(' primary key')
+ default = column.model.default
+ if default is not NO_DEFAULT:
+ # Can't do default sequence types in Oracle, so don't bother.
+ if not isinstance(default, Sequence):
+ out.write(' default')
+ if default is None:
+ out.write(' null')
+ elif isinstance(default, ProcedureCall):
+ # Cheating, because there are currently no other
+ # functions being used.
+ out.write(" CURRENT_TIMESTAMP at time zone 'UTC'")
+ else:
+ if default is True:
+ default = 1
+ elif default is False:
+ default = 0
+ out.write(" " + repr(default))
+ if not column.model.canBeNull():
+ out.write(' not null')
+ if set([column.model]) in list(table.model.uniques()):
+ out.write(' unique')
+ if column.model.references is not None:
+ out.write(" references %s" % (column.model.references.name,))
+ if column.model.cascade:
+ out.write(" on delete cascade")
+
+ out.write('\n);\n\n')
+
+
+
+if __name__ == '__main__':
+ import sys
+ _translateSchema(sys.stdout)
+
+
+
Copied: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_sql_tables.py (from rev 7192, CalendarServer/trunk/txdav/common/datastore/test/test_sql_tables.py)
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_sql_tables.py (rev 0)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_sql_tables.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -0,0 +1,38 @@
+# -*- test-case-name: txdav.caldav.datastore.test.test_sql -*-
+##
+# Copyright (c) 2010 Apple Inc. All 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 the SQL Table definitions in txdav.common.datastore.sql_tables: sample
+a couple of tables to make sure the schema is adequately parsed.
+
+These aren't unit tests, they're integration tests to verify the behavior tested
+by L{txdav.base.datastore.test.test_parseschema}.
+"""
+
+from txdav.common.datastore.sql_tables import schema
+from twisted.trial.unittest import TestCase
+
+class SampleSomeColumns(TestCase):
+ """
+ Sample some columns from the tables defined by L{schema} and verify that
+ they look correct.
+ """
+
+ def test_addressbookObjectResourceID(self):
+ self.assertEquals(schema.ADDRESSBOOK_OBJECT.RESOURCE_ID.model.name,
+ "RESOURCE_ID")
+
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/test_util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -18,20 +18,23 @@
Tests for L{txdav.common.datastore.util}.
"""
-from twisted.internet.protocol import Protocol
-from twisted.trial.unittest import TestCase
from twext.python.filepath import CachingFilePath
from twext.web2.http_headers import MimeType
from twisted.application.service import Service, MultiService
-from txdav.common.datastore.util import UpgradeToDatabaseService
+from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
+from twisted.internet.protocol import Protocol
+from twisted.trial.unittest import TestCase
+
+from twistedcaldav.config import config
+from twistedcaldav.memcacher import Memcacher
+
+from txdav.caldav.datastore.test.common import CommonTests
from txdav.common.datastore.file import CommonDataStore
from txdav.common.datastore.test.util import theStoreBuilder, \
populateCalendarsFrom, StubNotifierFactory
-from txdav.caldav.datastore.test.common import CommonTests
-from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
+from txdav.common.datastore.util import UpgradeToDatabaseService
-
class HomeMigrationTests(TestCase):
"""
Tests for L{UpgradeToDatabaseService}.
@@ -43,6 +46,9 @@
Set up two stores to migrate between.
"""
# Add some files to the file store.
+ self.patch(config.Memcached.Pools.Default, "ClientEnabled", False)
+ self.patch(config.Memcached.Pools.Default, "ServerEnabled", False)
+ self.patch(Memcacher, "allowTestCache", True)
self.filesPath = CachingFilePath(self.mktemp())
self.filesPath.createDirectory()
fileStore = self.fileStore = CommonDataStore(
@@ -91,6 +97,17 @@
".some-extra-data").getContent(),
"some extra data"
)
+
+ # Want metadata preserved
+ home = (yield txn.calendarHomeWithUID("home1"))
+ calendar = (yield home.calendarWithName("calendar_1"))
+ for name, metadata in (
+ ("1.ics", CommonTests.metadata1),
+ ("2.ics", CommonTests.metadata2),
+ ("3.ics", CommonTests.metadata3),
+ ):
+ object = (yield calendar.calendarObjectWithName(name))
+ self.assertEquals(object.getMetadata(), metadata)
@inlineCallbacks
@@ -138,12 +155,13 @@
inObject = yield getSampleObj()
someAttachmentName = "some-attachment"
someAttachmentType = MimeType.fromString("application/x-custom-type")
- transport = yield inObject.createAttachmentWithName(
- someAttachmentName, someAttachmentType
+ attachment = yield inObject.createAttachmentWithName(
+ someAttachmentName,
)
+ transport = attachment.store(someAttachmentType)
someAttachmentData = "Here is some data for your attachment, enjoy."
transport.write(someAttachmentData)
- transport.loseConnection()
+ yield transport.loseConnection()
yield maybeCommit()
self.topService.startService()
yield self.subStarted
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/util.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/util.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/datastore/test/util.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -28,7 +28,7 @@
from twext.python.vcomponent import VComponent
from twisted.internet import reactor
-from twisted.internet.defer import Deferred, inlineCallbacks
+from twisted.internet.defer import Deferred, inlineCallbacks, succeed
from twisted.internet.task import deferLater
from twisted.python import log
from twisted.application.service import Service
@@ -37,9 +37,9 @@
from txdav.base.datastore.subpostgres import PostgresService
from txdav.base.datastore.dbapiclient import DiagnosticConnectionWrapper
from txdav.common.icommondatastore import NoSuchHomeChildError
-from txdav.base.datastore.asyncsqlpool import ConnectionPool
+from twext.enterprise.adbapi2 import ConnectionPool
from twisted.internet.defer import returnValue
-from twistedcaldav.notify import Notifier
+from twistedcaldav.notify import Notifier, NodeCreationException
def allInstancesOf(cls):
@@ -64,7 +64,7 @@
sharedService = None
currentTestID = None
- SHARED_DB_PATH = "../_test_sql_db"
+ SHARED_DB_PATH = "_test_sql_db"
def buildStore(self, testCase, notifierFactory):
"""
@@ -164,6 +164,14 @@
except:
log.err()
yield cleanupTxn.commit()
+
+ # Deal with memcached items that must be cleared
+ from txdav.caldav.datastore.sql import CalendarHome
+ CalendarHome._cacher.flush_all()
+ from txdav.carddav.datastore.sql import AddressBookHome
+ AddressBookHome._cacher.flush_all()
+ from txdav.base.propertystore.sql import PropertyStore
+ PropertyStore._cacher.flush_all()
theStoreBuilder = SQLStoreBuilder()
buildStore = theStoreBuilder.buildStore
@@ -200,9 +208,11 @@
yield home.createCalendarWithName(calendarName)
calendar = yield home.calendarWithName(calendarName)
for objectName in calendarObjNames:
- objData = calendarObjNames[objectName]
- calendar.createCalendarObjectWithName(
- objectName, VComponent.fromString(objData)
+ objData, metadata = calendarObjNames[objectName]
+ yield calendar.createCalendarObjectWithName(
+ objectName,
+ VComponent.fromString(objData),
+ metadata = metadata,
)
yield populateTxn.commit()
@@ -283,7 +293,15 @@
return self.commit()
+class StubNodeCacher(object):
+ def waitForNode(self, notifier, nodeName):
+ if "fail" in nodeName:
+ raise NodeCreationException("Could not create node")
+ else:
+ return succeed(True)
+
+
class StubNotifierFactory(object):
"""
For testing push notifications without an XMPP server.
@@ -291,6 +309,13 @@
def __init__(self):
self.reset()
+ self.nodeCacher = StubNodeCacher()
+ self.pubSubConfig = {
+ "enabled" : True,
+ "service" : "pubsub.example.com",
+ "host" : "example.com",
+ "port" : "123",
+ }
def newNotifier(self, label="default", id=None, prefix=None):
return Notifier(self, label=label, id=id, prefix=prefix)
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/inotifications.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/inotifications.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/common/inotifications.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -19,7 +19,7 @@
"""
from zope.interface.interface import Interface
-from txdav.idav import IDataStoreResource
+from txdav.idav import IDataStoreObject
__all__ = [
@@ -134,7 +134,7 @@
"""
-class INotificationObject(IDataStoreResource):
+class INotificationObject(IDataStoreObject):
"""
Notification object
Modified: CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/idav.py
===================================================================
--- CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/idav.py 2011-03-14 17:35:29 UTC (rev 7192)
+++ CalendarServer/branches/users/cdaboo/batchupload-6699/txdav/idav.py 2011-03-14 20:54:05 UTC (rev 7193)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2010 Apple Inc. All rights reserved.
+# Copyright (c) 2010-2011 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -21,11 +21,12 @@
__all__ = [
"PropertyStoreError",
"PropertyChangeNotAllowedError",
- "AlreadyFinishedError",
"IPropertyName",
"IPropertyStore",
"IDataStore",
- "IDataStoreResource",
+ "IDataStoreObject",
+ "ITransaction",
+ "INotifier",
]
from zope.interface import Attribute, Interface
@@ -40,8 +41,6 @@
Property store error.
"""
-
-
class PropertyChangeNotAllowedError(PropertyStoreError):
"""
Property cannot be edited.
@@ -52,13 +51,6 @@
-class AlreadyFinishedError(Exception):
- """
- The transaction was already completed via an C{abort} or C{commit} and
- cannot be aborted or committed again.
- """
-
-
#
# Interfaces
#
@@ -92,8 +84,19 @@
# FIXME: the type for values isn't quite right, there should be some more
# specific interface for that.
+ def flush():
+ """
+ Flush the property store.
+ @return: C{None}
+ """
+ def abort():
+ """
+ Abort changes to the property store.
+ @return: C{None}
+ """
+
class IDataStore(Interface):
"""
An L{IDataStore} is a storage of some objects.
@@ -114,9 +117,9 @@
"""
-class IDataStoreResource(Interface):
+class IDataStoreObject(Interface):
"""
- An L{IDataStoreResource} are the objects stored in an L{IDataStore}.
+ An L{IDataStoreObject} are the objects stored in an L{IDataStore}.
"""
def name():
@@ -134,7 +137,6 @@
@rtype: L{MimeType}
"""
-
def md5():
"""
The MD5 hex digest of this object's content.
@@ -172,53 +174,6 @@
-class IAsyncTransaction(Interface):
- """
- Asynchronous execution of SQL.
-
- Note that there is no {begin()} method; if an L{IAsyncTransaction} exists,
- it is assumed to have been started.
- """
-
- def execSQL(sql, args=(), raiseOnZeroRowCount=None):
- """
- Execute some SQL.
-
- @param sql: an SQL string.
-
- @type sql: C{str}
-
- @param args: C{list} of arguments to interpolate into C{sql}.
-
- @param raiseOnZeroRowCount: a 0-argument callable which returns an
- exception to raise if the executed SQL does not affect any rows.
-
- @return: L{Deferred} which fires C{list} of C{tuple}
-
- @raise: C{raiseOnZeroRowCount} if it was specified and no rows were
- affected.
- """
-
-
- def commit():
- """
- Commit changes caused by this transaction.
-
- @return: L{Deferred} which fires with C{None} upon successful
- completion of this transaction.
- """
-
-
- def abort():
- """
- Roll back changes caused by this transaction.
-
- @return: L{Deferred} which fires with C{None} upon successful
- rollback of this transaction.
- """
-
-
-
class ITransaction(Interface):
"""
Transaction that can be aborted and either succeeds or fails in
@@ -290,3 +245,25 @@
@return: a string (or None if notifications are disabled)
"""
+
+ def nodeName(label):
+ """
+ Returns a pubsub node path.
+
+ A pubsub node path is comprised of the following values:
+
+ /<protocol>/<hostname>/<notifierID>/
+
+ <protocol> is either CalDAV or CardDAV
+ <hostname> is the name of the calendar server
+ <notifierID> is a unique string representing the resource
+
+ This method builds this string based on pubsub configuration
+ that was passed to the NotifierFactory, and it also attempts
+ to create and configure the node in the pubsub server. If that
+ fails, a value of None will be returned. This is used when a client
+ requests push-related DAV properties.
+
+ @return: a deferred to a string (or None if notifications are disabled
+ or the node could not be created)
+ """
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110314/129d9f77/attachment-0001.html>
More information about the calendarserver-changes
mailing list