<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13330] CalendarServer/trunk/txdav/caldav/datastore/scheduling</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/13330">13330</a></dd>
<dt>Author</dt> <dd>cdaboo@apple.com</dd>
<dt>Date</dt> <dd>2014-04-18 12:32:26 -0700 (Fri, 18 Apr 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Split related-id is now different from the event UID.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingicalsplitterpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/icalsplitter.py</a></li>
<li><a href="#CalendarServertrunktxdavcaldavdatastoreschedulingtesttest_icalsplitterpy">CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingicalsplitterpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/icalsplitter.py (13329 => 13330)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/icalsplitter.py        2014-04-18 19:31:05 UTC (rev 13329)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/icalsplitter.py        2014-04-18 19:32:26 UTC (rev 13330)
</span><span class="lines">@@ -18,13 +18,17 @@
</span><span class="cx"> 
</span><span class="cx"> from twistedcaldav.ical import Property
</span><span class="cx"> 
</span><ins>+import uuid
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class iCalSplitter(object):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Class that manages the &quot;splitting&quot; of large iCalendar objects into two pieces so that we can keep the overall
</span><span class="cx">     size of individual calendar objects to a reasonable limit. This should only be used on Organizer events.
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx"> 
</span><ins>+    uuid_namespace = uuid.UUID(&quot;1F50F5E1-3E10-4A85-A8B4-3906DA3B8C52&quot;)
+
</ins><span class="cx">     def __init__(self, threshold, past):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         @param threshold: the size in bytes that will trigger a split
</span><span class="lines">@@ -155,7 +159,7 @@
</span><span class="cx"> 
</span><span class="cx">         # Relate them - add RELATED-TO;RELTYPE=RECURRENCE-SET if not already present
</span><span class="cx">         if not icalOld.hasPropertyWithParameterMatch(&quot;RELATED-TO&quot;, &quot;RELTYPE&quot;, &quot;X-CALENDARSERVER-RECURRENCE-SET&quot;):
</span><del>-            property = Property(&quot;RELATED-TO&quot;, oldUID, params={&quot;RELTYPE&quot;: &quot;X-CALENDARSERVER-RECURRENCE-SET&quot;})
</del><ins>+            property = Property(&quot;RELATED-TO&quot;, str(uuid.uuid5(self.uuid_namespace, oldUID)), params={&quot;RELTYPE&quot;: &quot;X-CALENDARSERVER-RECURRENCE-SET&quot;})
</ins><span class="cx">             icalOld.addPropertyToAllComponents(property)
</span><span class="cx">             icalNew.addPropertyToAllComponents(property)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcaldavdatastoreschedulingtesttest_icalsplitterpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py (13329 => 13330)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py        2014-04-18 19:31:05 UTC (rev 13329)
+++ CalendarServer/trunk/txdav/caldav/datastore/scheduling/test/test_icalsplitter.py        2014-04-18 19:32:26 UTC (rev 13330)
</span><span class="lines">@@ -720,7 +720,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -753,7 +753,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -763,7 +763,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -884,7 +884,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -919,7 +919,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -929,7 +929,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1041,7 +1041,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -1075,7 +1075,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back13_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1085,7 +1085,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1220,7 +1220,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -1254,7 +1254,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s;INTERVAL=10
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back30)s
</span><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1264,7 +1264,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back20)s
</span><span class="cx"> DTSTART:%(now_back20)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1421,7 +1421,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -1454,7 +1454,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back30)s
</span><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1464,7 +1464,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back15)s
</span><span class="cx"> DTSTART:%(now_back15)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1600,7 +1600,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -1633,7 +1633,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back30)s
</span><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1643,7 +1643,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back15)s
</span><span class="cx"> DTSTART:%(now_back15)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1805,7 +1805,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -1838,7 +1838,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1848,7 +1848,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -1858,7 +1858,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:X-CALENDARSERVER-PERUSER
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> X-CALENDARSERVER-PERUSER-UID:user01
</span><span class="cx"> BEGIN:X-CALENDARSERVER-PERINSTANCE
</span><span class="cx"> TRANSP:OPAQUE
</span><span class="lines">@@ -1980,7 +1980,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now_back30)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -2013,7 +2013,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2023,7 +2023,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2079,7 +2079,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2125,7 +2125,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back25)s
</span><span class="cx"> DTSTART:%(now_back25)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2135,7 +2135,7 @@
</span><span class="cx"> RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_back24)s
</span><span class="cx"> DTSTART:%(now_back24)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2212,7 +2212,8 @@
</span><span class="cx">                 self.assertTrue(splitter.willSplit(ical), &quot;Failed will split: %s&quot; % (title,))
</span><span class="cx">             icalOld, icalNew = splitter.split(ical)
</span><span class="cx">             relsubs = dict(self.subs)
</span><del>-            relsubs[&quot;relID&quot;] = icalOld.resourceUID()
</del><ins>+            relsubs[&quot;uid&quot;] = icalOld.resourceUID()
+            relsubs[&quot;relID&quot;] = icalOld.mainComponent().propertyValue(&quot;RELATED-TO&quot;) if icalOld.mainComponent() else icalNew.mainComponent().propertyValue(&quot;RELATED-TO&quot;)
</ins><span class="cx">             self.assertEqual(str(icalNew).replace(&quot;\r\n &quot;, &quot;&quot;), split_future.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed future: %s&quot; % (title,))
</span><span class="cx">             self.assertEqual(str(icalOld).replace(&quot;\r\n &quot;, &quot;&quot;), split_past.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed past: %s&quot; % (title,))
</span><span class="cx"> 
</span><span class="lines">@@ -2333,7 +2334,7 @@
</span><span class="cx"> VERSION:2.0
</span><span class="cx"> PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> DTSTART:%(now)s
</span><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:mailto:user1@example.com
</span><span class="lines">@@ -2366,7 +2367,7 @@
</span><span class="cx"> RRULE:FREQ=DAILY;UNTIL=%(now_fwd11_1)s
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><del>-UID:%(relID)s
</del><ins>+UID:%(uid)s
</ins><span class="cx"> RECURRENCE-ID:%(now_fwd10)s
</span><span class="cx"> DTSTART:%(now_fwd10)s
</span><span class="cx"> DURATION:PT1H
</span><span class="lines">@@ -2385,7 +2386,8 @@
</span><span class="cx">             splitter = iCalSplitter(1024, 14)
</span><span class="cx">             icalOld, icalNew = splitter.split(ical, rid=DateTime.parseText(&quot;%(now_fwd11)s&quot; % self.subs))
</span><span class="cx">             relsubs = dict(self.subs)
</span><del>-            relsubs[&quot;relID&quot;] = icalOld.resourceUID()
</del><ins>+            relsubs[&quot;uid&quot;] = icalOld.resourceUID()
+            relsubs[&quot;relID&quot;] = icalOld.mainComponent().propertyValue(&quot;RELATED-TO&quot;) if icalOld.mainComponent() else icalNew.mainComponent().propertyValue(&quot;RELATED-TO&quot;)
</ins><span class="cx">             self.assertEqual(str(icalNew).replace(&quot;\r\n &quot;, &quot;&quot;), split_future.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed future: %s&quot; % (title,))
</span><span class="cx">             self.assertEqual(str(icalOld).replace(&quot;\r\n &quot;, &quot;&quot;), split_past.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed past: %s&quot; % (title,))
</span><span class="cx"> 
</span><span class="lines">@@ -2397,7 +2399,8 @@
</span><span class="cx">             splitter = iCalSplitter(1024, 14)
</span><span class="cx">             icalOld, icalNew = splitter.split(ical, rid=splitter.whereSplit(ical, break_point=DateTime.parseText(&quot;%(now_fwd10_12h)s&quot; % self.subs)))
</span><span class="cx">             relsubs = dict(self.subs)
</span><del>-            relsubs[&quot;relID&quot;] = icalOld.resourceUID()
</del><ins>+            relsubs[&quot;uid&quot;] = icalOld.resourceUID()
+            relsubs[&quot;relID&quot;] = icalOld.mainComponent().propertyValue(&quot;RELATED-TO&quot;) if icalOld.mainComponent() else icalNew.mainComponent().propertyValue(&quot;RELATED-TO&quot;)
</ins><span class="cx">             self.assertEqual(str(icalNew).replace(&quot;\r\n &quot;, &quot;&quot;), split_future.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed future: %s&quot; % (title,))
</span><span class="cx">             self.assertEqual(str(icalOld).replace(&quot;\r\n &quot;, &quot;&quot;), split_past.replace(&quot;\n&quot;, &quot;\r\n&quot;) % relsubs, &quot;Failed past: %s&quot; % (title,))
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>