"/tmp/pytest-of-root/" in your logs means you are running this as root,
that's an extremely bad idea. I strongly recommend PORTS_PRIVSEP=Yes in
mk.conf and fixing up permissions so that it works.

Not sure whether that is responsible for the test failures (which look a
bit strange to me) but it's not impossible.



On 2023/12/06 03:25, wen heping wrote:
> My test log:
> platform openbsd7 -- Python 3.10.13, pytest-7.1.3, pluggy-1.3.0
> rootdir: /home/wen/ports/obj/khal-0.11.2/khal-0.11.2
> plugins: cov-4.0.0, hypothesis-6.47.1
> collected 315 items
> 
> tests/backend_test.py ..............................                     [  
> 9%]
> tests/cal_display_test.py .....FFFF                                      [ 
> 12%]
> tests/cli_test.py ..........xX.X..................FF.......              [ 
> 25%]
> tests/configwizard_test.py ..                                            [ 
> 26%]
> tests/controller_test.py ............                                    [ 
> 29%]
> tests/event_test.py ..F...............F..F.........F.................F.. [ 
> 46%]
> ..F.                                                                     [ 
> 47%]
> tests/icalendar_test.py .FFF...                                          [ 
> 49%]
> tests/khalendar_test.py ..........F............F......                   [ 
> 59%]
> tests/khalendar_utils_test.py .........................................  [ 
> 72%]
> tests/parse_datetime_test.py .......................................FFFF [ 
> 86%]
> FFFFF                                                                    [ 
> 87%]
> tests/settings_test.py ............                                      [ 
> 91%]
> tests/terminal_test.py ...                                               [ 
> 92%]
> tests/utils_test.py ........                                             [ 
> 94%]
> tests/vdir_test.py ...                                                   [ 
> 95%]
> tests/vtimezone_test.py FFF                                              [ 
> 96%]
> tests/ui/test_calendarwidget.py .....                                    [ 
> 98%]
> tests/ui/test_editor.py ....                                             [ 
> 99%]
> tests/ui/test_widgets.py .                                               
> [100%]
> 
> =================================== FAILURES 
> ===================================
> _________________________ test_vertical_month_unicode 
> __________________________
> 
>     def test_vertical_month_unicode():
>         try:
>             locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
>             vert_str = vertical_month(month=12, year=2011,
>                                       today=dt.date(2011, 12, 12))
>             # de_DE locale on at least Net and FreeBSD is different from the 
> one
>             # commonly used on linux systems
>             if platform.system() == 'FreeBSD':
>                 assert vert_str == example_de_freebsd
>             elif platform.system() == 'NetBSD':
>                 assert vert_str == example_de_netbsd
>             else:
> >               assert vert_str == example_de
> E               AssertionError: assert ['\x1b[1m    ... 31  1 ', ...] == 
> ['\x1b[1m    ... 31  1 ', ...]
> E                 At index 0 diff: '\x1b[1m    Mo Tu We Th Fr Sa Su \x1b[0m' 
> != '\x1b[1m    Mo Di Mi Do Fr Sa So \x1b[0m'
> E                 Use -v to get more diff
> 
> tests/cal_display_test.py:357: AssertionError
> ____________________ test_vertical_month_unicode_weekdeays 
> _____________________
> 
>     def test_vertical_month_unicode_weekdeays():
>         try:
>             locale.setlocale(locale.LC_ALL, 'cs_CZ.UTF-8')
>             vert_str = vertical_month(month=12, year=2011,
>                                       today=dt.date(2011, 12, 12))
> >           assert [line.lower() for line in vert_str] == [line.lower() for 
> > line in example_cz]
> E           AssertionError: assert ['\x1b[1m    ... 31  1 ', ...] == 
> ['\x1b[1m    ... 31  1 ', ...]
> E             At index 0 diff: '\x1b[1m    mo tu we th fr sa su \x1b[0m' != 
> '\x1b[1m    po út st čt pá so ne \x1b[0m'
> E             Use -v to get more diff
> 
> tests/cal_display_test.py:379: AssertionError
> ___________________ test_vertical_month_unicode_weekdeays_gr 
> ___________________
> 
>     def test_vertical_month_unicode_weekdeays_gr():
>         try:
>             locale.setlocale(locale.LC_ALL, 'el_GR.UTF-8')
>             vert_str = vertical_month(month=12, year=2011,
>                                       today=dt.date(2011, 12, 12))
>             # on some OSes, Greek locale's abbreviated day of the week and
>             # month names have accents, on some they haven't
>             if platform.system() == 'Darwin':
>                 assert strip_accents('\n'.join([line.lower() for line in 
> vert_str])) == \
>                     '\n'.join(example_gr_darwin)
>             else:
> >               assert strip_accents('\n'.join([line.lower() for line in 
> > vert_str])) == \
>                     '\n'.join(example_gr)
> E                   AssertionError: assert '\x1b[1m    m...  1  2  3  4 ' == 
> '\x1b[1m     ...  1  2  3  4 '
> E                     -      δε τρ τε πε πα σα κυ
> E                     +     mo tu we th fr sa su
> E                     - δεκ  28 29 30  1  2  3  4
> E                     ?     ^^^^
> E                     + dec 28 29 30  1  2  3  4
> E                     ?     ^^^
> E                     -       5  6  7  8  9 10 11 ...
> E
> E                     ...Full output truncated (42 lines hidden), use '-vv' 
> to show
> 
> tests/cal_display_test.py:412: AssertionError
> _________________________ test_vertical_month_abbr_fr 
> __________________________
> 
>     def test_vertical_month_abbr_fr():
>         # see issue #653
>         try:
>             locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
>             vert_str = vertical_month(month=12, year=2011,
>                                       today=dt.date(2011, 12, 12))
>             if platform.system() == 'Darwin':
>                 assert '\n'.join(vert_str) == '\n'.join(example_fr_darwin)
>             else:
> >               assert '\n'.join(vert_str) == '\n'.join(example_fr)
> E               AssertionError: assert '\x1b[1m    M...  1  2  3  4 ' == 
> '\x1b[1m     ...  1  2  3  4 '
> E                 -       lu ma me je ve sa di
> E                 +     Mo Tu We Th Fr Sa Su
> E                 - déc.  28 29 30  1  2  3  4
> E                 ?     ^^ --
> E                 + Dec 28 29 30  1  2  3  4
> E                 ?     ^^
> E                 -        5  6  7  8  9 10 11 ...
> E
> E                 ...Full output truncated (42 lines hidden), use '-vv' to 
> show
> 
> tests/cal_display_test.py:438: AssertionError
> _______________ test_configure_command_cannot_write_config_file 
> ________________
> 
> runner = <tests.cli_test.CustomCliRunner object at 0xa287cf442e0>
> 
>     def test_configure_command_cannot_write_config_file(runner):
>         runner = runner()
>         runner.config_file.remove()
>         os.chmod(str(runner.xdg_config_home), 555)
>         result = runner.invoke(main_khal, ['configure'], input=choices())
> >       assert result.exit_code == 1
> E       assert 0 == 1
> E        +  where 0 = <Result okay>.exit_code
> 
> tests/cli_test.py:786: AssertionError
> __________________ test_configure_command_cannot_create_vdir 
> ___________________
> 
> runner = <tests.cli_test.CustomCliRunner object at 0xa287cf45120>
> 
>     def test_configure_command_cannot_create_vdir(runner):
>         runner = runner()
>         runner.config_file.remove()
>         os.mkdir(str(runner.xdg_data_home), mode=555)
>         result = runner.invoke(
>             main_khal, ['configure'],
>             input=choices(),
>         )
> >       assert 'Exiting' in result.output
> E       AssertionError: assert 'Exiting' in 'What ordering of year, month, 
> date do you want to use?\n[0] year-month-day (today: 2023-12-06)\n[1] 
> day/month/year (t...Successfully wrote configuration to 
> /tmp/pytest-of-root/pytest-0/test_configure_command_cannot_1/.config/khal/config\n'
> E        +  where 'What ordering of year, month, date do you want to 
> use?\n[0] year-month-day (today: 2023-12-06)\n[1] day/month/year 
> (t...Successfully wrote configuration to 
> /tmp/pytest-of-root/pytest-0/test_configure_command_cannot_1/.config/khal/config\n'
>  = <Result okay>.output
> 
> tests/cli_test.py:799: AssertionError
> _________________________________ test_raw_dt 
> __________________________________
> 
>     def test_raw_dt():
>         event_dt = _get_text('event_dt_simple')
>         start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30))
>         end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30))
>         event = Event.fromString(event_dt, start=start, end=end, 
> **EVENT_KWARGS)
>         with freeze_time('2016-1-1'):
> >           assert normalize_component(event.raw) == \
>                 
> normalize_component(_get_text('event_dt_simple_inkl_vtimezone'))
> E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
> ('VCALENDAR',...enset())}))}))
> E             At index 2 diff: frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
> frozenset({('DAYLIGHT', 
> b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
>  frozenset()), ('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
>  frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
> Event\r\nDTSTART;TZID=Europe/Berlin:20140409T093000\r\nDTEND;TZID=Europe/Berlin:201404...
> E
> E             ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/event_test.py:50: AssertionError
> _____________________________ test_transform_event 
> _____________________________
> 
>     def test_transform_event():
>         """test if transformation between different event types works"""
>         event_d = _get_text('event_d')
>         event = Event.fromString(event_d, **EVENT_KWARGS)
>         assert isinstance(event, AllDayEvent)
>         start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30))
>         end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30))
>         event.update_start_end(start, end)
>         assert isinstance(event, LocalizedEvent)
>         assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '09:30-10:30 
> An Event\x1b[0m'
>         assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == \
>             '09.04.2014 09:30-10:30 An Event\x1b[0m'
>         analog_event = Event.fromString(_get_text('event_dt_simple'), 
> **EVENT_KWARGS)
> >       assert normalize_component(event.raw) == 
> > normalize_component(analog_event.raw)
> E       AssertionError: assert ('VCALENDAR',...enset())}))})) == 
> ('VCALENDAR',...enset())}))}))
> E         At index 2 diff: frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
> frozenset({('DAYLIGHT', 
> b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
>  frozenset()), ('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
>  frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
> Event\r\nDTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20140409T093000\r\nDTEND;TZID=Euro...
> E
> E         ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/event_test.py:184: AssertionError
> ________________________________ test_dt_two_tz 
> ________________________________
> 
>     def test_dt_two_tz():
>         event_dt_two_tz = _get_text('event_dt_two_tz')
>         cal_dt_two_tz = _get_text('cal_dt_two_tz')
> 
>         event = Event.fromString(event_dt_two_tz, **EVENT_KWARGS)
>         with freeze_time('2016-02-16 12:00:00'):
> >           assert normalize_component(cal_dt_two_tz) == 
> > normalize_component(event.raw)
> E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
> ('VCALENDAR',...enset())}))}))
> E             At index 2 diff: frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:America/New_York\r\nEND:VTIMEZONE\r\n', 
> frozenset({('DAYLIGHT', 
> b'BEGIN:DAYLIGHT\r\nDTSTART:20140309T030000\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nEND:DAYLIGHT\r\n',
>  frozenset()), ('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART:20141102T010000\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nEND:STANDARD\r\n',
>  frozenset())})), ('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
> frozenset({('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nTZNAME:C...
> E
> E             ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/event_test.py:222: AssertionError
> ______________________________ test_event_no_dst 
> _______________________________
> 
>     def test_event_no_dst():
>         """test the creation of a corect VTIMEZONE for timezones with no 
> dst"""
>         event_no_dst = _get_text('event_no_dst')
>         cal_no_dst = _get_text('cal_no_dst')
>         event = Event.fromString(event_no_dst, calendar='foobar', 
> locale=LOCALE_BOGOTA)
>         if version.parse(pytz.__version__) > version.Version('2017.1'):
>             if version.parse(pytz.__version__) < version.Version('2022.7'):
>                 cal_no_dst = cal_no_dst.replace(
>                     'TZNAME:COT',
>                     'RDATE:20380118T221407\r\nTZNAME:-05'
>                 )
>             else:
>                 cal_no_dst = cal_no_dst.replace(
>                     'TZNAME:COT',
>                     'TZNAME:-05'
>                 )
> 
> >       assert normalize_component(event.raw) == 
> > normalize_component(cal_no_dst)
> E       AssertionError: assert ('VCALENDAR',...enset())}))})) == 
> ('VCALENDAR',...enset())}))}))
> E         At index 2 diff: frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:America/Bogota\r\nEND:VTIMEZONE\r\n', 
> frozenset({('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:19930206T230000\r\nTZNAME:-05\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nEND:STANDARD\r\n',
>  frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
> Event\r\nDTSTART;TZID=America/Bogota:20140409T093000\r\nDTEND;TZID=America/Bogota:20140409T103000\r\nDTSTAMP:20140401T234817Z\r\nUID:event_no_dst\r\nEND:VEVENT\r\n',
>  frozenset())}) != frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:America/Bogota\r...
> E
> E         ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/event_test.py:370: AssertionError
> _________________________ test_create_timezone_static 
> __________________________
> 
>     def test_create_timezone_static():
>         gmt = pytz.timezone('Etc/GMT-8')
> >       assert create_timezone(gmt).to_ical().split() == [
>             b'BEGIN:VTIMEZONE',
>             b'TZID:Etc/GMT-8',
>             b'BEGIN:STANDARD',
>             b'DTSTART:16010101T000000',
>             b'RDATE:16010101T000000',
>             b'TZNAME:Etc/GMT-8',
>             b'TZOFFSETFROM:+0800',
>             b'TZOFFSETTO:+0800',
>             b'END:STANDARD',
>             b'END:VTIMEZONE',
>         ]
> E       AssertionError: assert [b'BEGIN:VTIM...c/GMT-8', ...] == 
> [b'BEGIN:VTIM...c/GMT-8', ...]
> E         At index 3 diff: b'DTSTART;VALUE=DATE-TIME:16010101T000000' != 
> b'DTSTART:16010101T000000'
> E         Use -v to get more diff
> 
> tests/event_test.py:552: AssertionError
> ________________________ test_create_timezone_in_future 
> ________________________
> 
>     def test_create_timezone_in_future():
>         """Events too far into the future (after the next DST transition) used
>         to be created with invalid timezones"""
>         with freeze_time('2019-03-31'):
> >           assert create_timezone(
>                 pytz.timezone('Europe/Amsterdam'),
>                 dt.datetime(2022, 1, 1, 18, 0)).to_ical().split() == [
>                     b'BEGIN:VTIMEZONE',
>                     b'TZID:Europe/Amsterdam',
>                     b'BEGIN:STANDARD',
>                     b'DTSTART:20211031T020000',
>                     b'TZNAME:CET',
>                     b'TZOFFSETFROM:+0200',
>                     b'TZOFFSETTO:+0100',
>                     b'END:STANDARD',
>                     b'BEGIN:DAYLIGHT',
>                     b'DTSTART:20220327T030000',
>                     b'TZNAME:CEST',
>                     b'TZOFFSETFROM:+0100',
>                     b'TZOFFSETTO:+0200',
>                     b'END:DAYLIGHT',
>                     b'END:VTIMEZONE']
> E           AssertionError: assert [b'BEGIN:VTIM...M:+0200', ...] == 
> [b'BEGIN:VTIM...M:+0200', ...]
> E             At index 3 diff: b'DTSTART;VALUE=DATE-TIME:20211031T020000' != 
> b'DTSTART:20211031T020000'
> E             Use -v to get more diff
> 
> tests/event_test.py:631: AssertionError
> _______________________________ test_new_vevent 
> ________________________________
> 
>     def test_new_vevent():
>         with freeze_time('20220702T1400'):
>             vevent = _replace_uid(new_vevent(
>                 LOCALE_BERLIN,
>                 dt.date(2022, 7, 2),
>                 dt.date(2022, 7, 3),
>                 'An Event',
>                 allday=True,
>                 repeat='weekly',
>             ))
> >           assert vevent.to_ical().decode('utf-8') == '\r\n'.join([
>                 'BEGIN:VEVENT',
>                 'SUMMARY:An Event',
>                 'DTSTART;VALUE=DATE:20220702',
>                 'DTEND;VALUE=DATE:20220703',
>                 'DTSTAMP:20220702T140000Z',
>                 'UID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA',
>                 'RRULE:FREQ=WEEKLY',
>                 'END:VEVENT',
>                 ''
>             ])
> E           AssertionError: assert 'BEGIN:VEVENT...ND:VEVENT\r\n' == 
> 'BEGIN:VEVENT...ND:VEVENT\r\n'
> E             Skipping 85 identical leading characters in diff, use -v to show
> E               3
> E             - DTSTAMP:20220702T140000Z
> E             + DTSTAMP;VALUE=DATE-TIME:20220702T140000Z
> E             ?        ++++++++++++++++
> E               UID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA
> ...             RRULE:FREQ=WEEKLY
> E
> E             ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/icalendar_test.py:40: AssertionError
> ________________________________ test_split_ics 
> ________________________________
> 
>     def test_split_ics():
>         cal = _get_text('cal_lots_of_timezones')
>         vevents = split_ics(cal)
> 
>         vevents0 = vevents[0].split('\r\n')
>         vevents1 = vevents[1].split('\r\n')
> 
>         part0 = _get_text('part0').split('\n')
>         part1 = _get_text('part1').split('\n')
> 
>         assert _get_TZIDs(vevents0) == _get_TZIDs(part0)
>         assert _get_TZIDs(vevents1) == _get_TZIDs(part1)
> 
> >       assert sorted(vevents0) == sorted(part0)
> E       AssertionError: assert ['', 'BEGIN:D...IMEZONE', ...] == ['', 
> 'BEGIN:D...IMEZONE', ...]
> E         At index 6 diff: 
> 'DTEND;TZID=Europe_London;VALUE=DATE-TIME:20140509T203000' != 
> 'DTEND;TZID=Europe_London:20140509T203000'
> E         Use -v to get more diff
> 
> tests/icalendar_test.py:66: AssertionError
> __________________________ test_split_ics_random_uid 
> ___________________________
> 
>     def test_split_ics_random_uid():
>         random.seed(123)
>         cal = _get_text('cal_lots_of_timezones')
>         vevents = split_ics(cal, random_uid=True)
> 
>         part0 = _get_text('part0').split('\n')
>         part1 = _get_text('part1').split('\n')
> 
>         for item in icalendar.Calendar.from_ical(vevents[0]).walk():
>             if item.name == 'VEVENT':
>                 assert item['UID'] == 'DRF0RGCY89VVDKIV9VPKA1FYEAU2GCFJIBS1'
>         for item in icalendar.Calendar.from_ical(vevents[1]).walk():
>             if item.name == 'VEVENT':
>                 assert item['UID'] == '4Q4CTV74N7UAZ618570X6CLF5QKVV9ZE3YVB'
> 
>         # after replacing the UIDs, everything should be as above
>         vevents0 = vevents[0].replace('DRF0RGCY89VVDKIV9VPKA1FYEAU2GCFJIBS1', 
> '123').split('\r\n')
>         vevents1 = vevents[1].replace('4Q4CTV74N7UAZ618570X6CLF5QKVV9ZE3YVB', 
> 'abcde').split('\r\n')
> 
>         assert _get_TZIDs(vevents0) == _get_TZIDs(part0)
>         assert _get_TZIDs(vevents1) == _get_TZIDs(part1)
> 
> >       assert sorted(vevents0) == sorted(part0)
> E       AssertionError: assert ['', 'BEGIN:D...IMEZONE', ...] == ['', 
> 'BEGIN:D...IMEZONE', ...]
> E         At index 6 diff: 
> 'DTEND;TZID=Europe_London;VALUE=DATE-TIME:20140509T203000' != 
> 'DTEND;TZID=Europe_London:20140509T203000'
> E         Use -v to get more diff
> 
> tests/icalendar_test.py:92: AssertionError
> ___________________________ TestCollection.test_get 
> ____________________________
> 
> self = <tests.khalendar_test.TestCollection object at 0xa295e854f40>
> coll_vdirs = (<khal.khalendar.khalendar.CalendarCollection object at 
> 0xa287d039270>, {"Dad's calendar": <khal.khalendar.vdir.Vdir o...r': 
> <khal.khalendar.vdir.Vdir object at 0xa287d03b640>, 'private': 
> <khal.khalendar.vdir.Vdir object at 0xa287d03b940>})
> 
>     def test_get(self, coll_vdirs):
>         """test getting an event by its href"""
>         coll, vdirs = coll_vdirs
>         event = Event.fromString(
>             _get_text('event_dt_simple'), href='xyz.ics', calendar=cal1, 
> locale=LOCALE_BERLIN,
>         )
>         coll.insert(event, cal1)
>         event_from_db = coll.get_event(SIMPLE_EVENT_UID + '.ics', cal1)
>         with freeze_time('2016-1-1'):
> >           assert normalize_component(event_from_db.raw) == \
>                 
> normalize_component(_get_text('event_dt_simple_inkl_vtimezone'))
> E           AssertionError: assert ('VCALENDAR',...enset())}))})) == 
> ('VCALENDAR',...enset())}))}))
> E             At index 2 diff: frozenset({('VTIMEZONE', 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\n', 
> frozenset({('DAYLIGHT', 
> b'BEGIN:DAYLIGHT\r\nDTSTART;VALUE=DATE-TIME:20140330T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\n',
>  frozenset()), ('STANDARD', 
> b'BEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD\r\n',
>  frozenset())})), ('VEVENT', b'BEGIN:VEVENT\r\nSUMMARY:An 
> Event\r\nDTSTART;TZID=Europe/Berlin:20140409T093000\r\nDTEND;TZID=Europe/Berlin:201404...
> E
> E             ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/khalendar_test.py:227: AssertionError
> _____________________ TestDbCreation.test_failed_create_db 
> _____________________
> 
> self = <tests.khalendar_test.TestDbCreation object at 0xa294fe3ded0>
> tmpdir = local('/tmp/pytest-of-root/pytest-0/test_failed_create_db0')
> 
>     def test_failed_create_db(self, tmpdir):
>         dbdir = str(tmpdir) + '/subdir/'
>         dbpath = dbdir + 'khal.db'
>         os.chmod(str(tmpdir), 400)
> 
>         calendars = {cal1: {'name': cal1, 'path': str(tmpdir)}}
> >       with pytest.raises(CouldNotCreateDbDir):
> E       Failed: DID NOT RAISE <class 
> 'khal.khalendar.exceptions.CouldNotCreateDbDir'>
> 
> tests/khalendar_test.py:415: Failed
> ________________________ test_construct_event_format_de 
> ________________________
> 
>     @freeze_time('20140216T120000')
>     def test_construct_event_format_de():
>         for data_list, vevent_expected in test_set_format_de:
>             vevent = _construct_event(data_list.split(), locale=LOCALE_BERLIN)
> >           assert _replace_uid(vevent).to_ical() == vevent_expected
> E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E             At index 102 diff: b';' != b':'
> E             Use -v to get more diff
> 
> tests/parse_datetime_test.py:400: AssertionError
> _______________________ test__construct_event_format_us 
> ________________________
> 
>     @freeze_time('2014-02-16 12:00:00')
>     def test__construct_event_format_us():
>         for data_list, vevent in test_set_format_us:
>             event = _construct_event(data_list.split(), 
> locale=LOCALE_NEW_YORK)
> >           assert _replace_uid(event).to_ical() == vevent
> E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E             At index 68 diff: b';' != b':'
> E             Use -v to get more diff
> 
> tests/parse_datetime_test.py:419: AssertionError
> __________________ test__construct_event_format_de_complexer 
> ___________________
> 
>     @freeze_time('2014-02-16 12:00:00')
>     def test__construct_event_format_de_complexer():
>         for data_list, vevent in test_set_format_de_complexer:
>             event = _construct_event(data_list.split(), locale=LOCALE_BERLIN)
> >           assert _replace_uid(event).to_ical() == vevent
> E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E             At index 65 diff: b';' != b':'
> E             Use -v to get more diff
> 
> tests/parse_datetime_test.py:452: AssertionError
> ________________________________ test_leap_year 
> ________________________________
> 
>     def test_leap_year():
>         for data_list, vevent in test_set_leap_year:
>             with freeze_time('1999-1-1'):
>                 with pytest.raises(DateTimeParseError):
>                     event = _construct_event(data_list.split(), 
> locale=LOCALE_BERLIN)
>             with freeze_time('2016-1-1 20:21:22'):
>                 event = _construct_event(data_list.split(), 
> locale=LOCALE_BERLIN)
> >               assert _replace_uid(event).to_ical() == vevent
> E               AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E                 At index 102 diff: b';' != b':'
> E                 Use -v to get more diff
> 
> tests/parse_datetime_test.py:471: AssertionError
> _______________________________ test_description 
> _______________________________
> 
>     def test_description():
>         for data_list, vevent in test_set_description:
>             with freeze_time('2014-02-16 12:00:00'):
>                 event = _construct_event(data_list.split(), 
> locale=LOCALE_BERLIN)
> >               assert _replace_uid(event).to_ical() == vevent
> E               AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E                 At index 65 diff: b';' != b':'
> E                 Use -v to get more diff
> 
> tests/parse_datetime_test.py:501: AssertionError
> _____________________________ test_repeat_floating 
> _____________________________
> 
>     def test_repeat_floating():
>         for data_list, vevent in test_set_repeat_floating:
>             with freeze_time('2014-02-16 12:00:00'):
>                 event = _construct_event(data_list.split(),
>                                          description='please describe the 
> event',
>                                          repeat='daily',
>                                          until='04.06.2015',
>                                          locale=LOCALE_FLOATING)
> >               assert normalize_component(_replace_uid(event).to_ical()) == \
>                     normalize_component(vevent)
> E               AssertionError: assert ('VEVENT', b'..., frozenset()) == 
> ('VEVENT', b'..., frozenset())
> E                 At index 1 diff: 
> b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
> Event\r\nDTSTART;VALUE=DATE-TIME:20140216T080000\r\nDTEND;VALUE=DATE-TIME:20140216T090000\r\nDTSTAMP;VALUE=DATE-TIME:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T000000\r\nDESCRIPTION:please
>  describe the event\r\nEND:VEVENT\r\n' != 
> b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
> Event\r\nDTSTART:20140216T080000\r\nDTEND:20140216T090000\r\nDTSTAMP:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T000000\r\nDESCR...
> E
> E                 ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/parse_datetime_test.py:523: AssertionError
> ____________________________ test_repeat_localized 
> _____________________________
> 
>     def test_repeat_localized():
>         for data_list, vevent in test_set_repeat_localized:
>             with freeze_time('2014-02-16 12:00:00'):
>                 event = _construct_event(data_list.split(),
>                                          description='please describe the 
> event',
>                                          repeat='daily',
>                                          until='05.06.2015',
>                                          locale=LOCALE_BERLIN)
> >               assert normalize_component(_replace_uid(event).to_ical()) == \
>                     normalize_component(vevent)
> E               AssertionError: assert ('VEVENT', b'..., frozenset()) == 
> ('VEVENT', b'..., frozenset())
> E                 At index 1 diff: 
> b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
> Event\r\nDTSTART;TZID=Europe/Berlin;VALUE=DATE-TIME:20140216T080000\r\nDTEND;TZID=Europe/Berlin;VALUE=DATE-TIME:20140216T090000\r\nDTSTAMP;VALUE=DATE-TIME:20140216T120000Z\r\nUID:E41JRQX2DB4P1AQZI86BAT7NHPBHPRIIHQKA\r\nRRULE:FREQ=DAILY;UNTIL=20150604T230000Z\r\nDESCRIPTION:please
>  describe the event\r\nEND:VEVENT\r\n' != 
> b'BEGIN:VEVENT\r\nSUMMARY:\xc3\x84wes\xc3\xb6me 
> Event\r\nDTSTART;TZID=Europe/Berlin:20140216T080000\r\nDTEND;TZID=Europe/Berlin:20140216T090000\r\nDTSTAMP:20140216T120000Z\r\nUID:E41JRQX2DB...
> E
> E                 ...Full output truncated (2 lines hidden), use '-vv' to show
> 
> tests/parse_datetime_test.py:546: AssertionError
> __________________________________ test_alarm 
> __________________________________
> 
>     @freeze_time('2014-02-16 12:00:00')
>     def test_alarm():
>         for data_list, vevent in test_set_alarm:
>             event = _construct_event(data_list.split(),
>                                      description='please describe the event',
>                                      alarm='23m',
>                                      locale=LOCALE_BERLIN)
> >           assert _replace_uid(event).to_ical() == vevent
> E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E             At index 65 diff: b';' != b':'
> E             Use -v to get more diff
> 
> tests/parse_datetime_test.py:574: AssertionError
> _________________ test_description_and_location_and_categories 
> _________________
> 
>     @freeze_time('2014-02-16 12:00:00')
>     def test_description_and_location_and_categories():
>         for data_list, vevent in 
> test_set_description_and_location_and_categories:
>             event = _construct_event(data_list.split(),
>                                      description='please describe the event',
>                                      location='in the office',
>                                      categories=['boring meeting'],
>                                      locale=LOCALE_BERLIN)
> >           assert _replace_uid(event).to_ical() == vevent
> E           AssertionError: assert b'BEGIN:VEVEN...ND:VEVENT\r\n' == 
> b'BEGIN:VEVEN...ND:VEVENT\r\n'
> E             At index 65 diff: b';' != b':'
> E             Use -v to get more diff
> 
> tests/parse_datetime_test.py:597: AssertionError
> _________________________________ test_berlin 
> __________________________________
> 
>     def test_berlin():
>         vberlin_std = b'\r\n'.join(
>             [b'BEGIN:STANDARD',
>              b'DTSTART:20141026T020000',
>              b'TZNAME:CET',
>              b'TZOFFSETFROM:+0200',
>              b'TZOFFSETTO:+0100',
>              b'END:STANDARD',
>              ])
> 
>         vberlin_dst = b'\r\n'.join(
>             [b'BEGIN:DAYLIGHT',
>              b'DTSTART:20150329T030000',
>              b'TZNAME:CEST',
>              b'TZOFFSETFROM:+0100',
>              b'TZOFFSETTO:+0200',
>              b'END:DAYLIGHT',
>              ])
> 
>         vberlin = create_timezone(berlin, atime, atime).to_ical()
>         assert b'TZID:Europe/Berlin' in vberlin
> >       assert vberlin_std in vberlin
> E       AssertionError: assert 
> b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD'
>  in 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nBEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nTZNAME:CET\r\n...ATE-TIME:20150329T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n'
> 
> tests/vtimezone_test.py:36: AssertionError
> ______________________________ test_berlin_rdate 
> _______________________________
> 
>     def test_berlin_rdate():
>         vberlin_std = b'\r\n'.join(
>             [b'BEGIN:STANDARD',
>              b'DTSTART:20141026T020000',
>              b'RDATE:20151025T020000,20161030T020000',
>              b'TZNAME:CET',
>              b'TZOFFSETFROM:+0200',
>              b'TZOFFSETTO:+0100',
>              b'END:STANDARD',
>              ])
> 
>         vberlin_dst = b'\r\n'.join(
>             [b'BEGIN:DAYLIGHT',
>              b'DTSTART:20150329T030000',
>              b'RDATE:20160327T030000',
>              b'TZNAME:CEST',
>              b'TZOFFSETFROM:+0100',
>              b'TZOFFSETTO:+0200',
>              b'END:DAYLIGHT',
>              ])
> 
>         vberlin = create_timezone(berlin, atime, btime).to_ical()
>         assert b'TZID:Europe/Berlin' in vberlin
> >       assert vberlin_std in vberlin
> E       AssertionError: assert 
> b'BEGIN:STANDARD\r\nDTSTART:20141026T020000\r\nRDATE:20151025T020000,20161030T020000\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nEND:STANDARD'
>  in 
> b'BEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nBEGIN:STANDARD\r\nDTSTART;VALUE=DATE-TIME:20141026T020000\r\nRDATE:20151025...r\nRDATE:20160327T030000\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n'
> 
> tests/vtimezone_test.py:63: AssertionError
> _________________________________ test_bogota 
> __________________________________
> 
>     def test_bogota():
>         vbogota = [b'BEGIN:VTIMEZONE',
>                    b'TZID:America/Bogota',
>                    b'BEGIN:STANDARD',
>                    b'DTSTART:19930206T230000',
>                    b'TZNAME:COT',
>                    b'TZOFFSETFROM:-0400',
>                    b'TZOFFSETTO:-0500',
>                    b'END:STANDARD',
>                    b'END:VTIMEZONE',
>                    b'']
>         if version.parse(pytz.__version__) > version.Version('2017.1'):
>             vbogota[4] = b'TZNAME:-05'
>             if version.parse(pytz.__version__) < version.Version('2022.7'):
>                 vbogota.insert(4, b'RDATE:20380118T221407')
> 
> >       assert create_timezone(bogota, atime, atime).to_ical().split(b'\r\n') 
> > == vbogota
> E       AssertionError: assert [b'BEGIN:VTIM...M:-0400', ...] == 
> [b'BEGIN:VTIM...M:-0400', ...]
> E         At index 3 diff: b'DTSTART;VALUE=DATE-TIME:19930206T230000' != 
> b'DTSTART:19930206T230000'
> E         Use -v to get more diff
> 
> tests/vtimezone_test.py:83: AssertionError
> =============================== warnings summary 
> ===============================
> tests/backend_test.py:5
>   /home/wen/ports/obj/khal-0.11.2/khal-0.11.2/tests/backend_test.py:5: 
> DeprecationWarning: pkg_resources is deprecated as an API. See 
> https://setuptools.pypa.io/en/latest/pkg_resources.html
>     import pkg_resources
> 
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
>   /usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871: 
> DeprecationWarning: Deprecated call to 
> `pkg_resources.declare_namespace('mpl_toolkits')`.
>   Implementing implicit namespace packages (as specified in PEP 420) is 
> preferred to `pkg_resources.declare_namespace`. See 
> https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
>     declare_namespace(pkg)
> 
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
> ../../../../../../usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871
>   /usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py:2871: 
> DeprecationWarning: Deprecated call to 
> `pkg_resources.declare_namespace('sphinxcontrib')`.
>   Implementing implicit namespace packages (as specified in PEP 420) is 
> preferred to `pkg_resources.declare_namespace`. See 
> https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
>     declare_namespace(pkg)
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info 
> ============================
> FAILED tests/cal_display_test.py::test_vertical_month_unicode - 
> AssertionErro...
> FAILED tests/cal_display_test.py::test_vertical_month_unicode_weekdeays - 
> Ass...
> FAILED tests/cal_display_test.py::test_vertical_month_unicode_weekdeays_gr - 
> ...
> FAILED tests/cal_display_test.py::test_vertical_month_abbr_fr - 
> AssertionErro...
> FAILED tests/cli_test.py::test_configure_command_cannot_write_config_file - 
> a...
> FAILED tests/cli_test.py::test_configure_command_cannot_create_vdir - 
> Asserti...
> FAILED tests/event_test.py::test_raw_dt - AssertionError: assert 
> ('VCALENDAR'...
> FAILED tests/event_test.py::test_transform_event - AssertionError: assert 
> ('V...
> FAILED tests/event_test.py::test_dt_two_tz - AssertionError: assert 
> ('VCALEND...
> FAILED tests/event_test.py::test_event_no_dst - AssertionError: assert 
> ('VCAL...
> FAILED tests/event_test.py::test_create_timezone_static - AssertionError: 
> ass...
> FAILED tests/event_test.py::test_create_timezone_in_future - AssertionError: 
> ...
> FAILED tests/icalendar_test.py::test_new_vevent - AssertionError: assert 
> 'BEG...
> FAILED tests/icalendar_test.py::test_split_ics - AssertionError: assert ['', 
> ...
> FAILED tests/icalendar_test.py::test_split_ics_random_uid - AssertionError: 
> a...
> FAILED tests/khalendar_test.py::TestCollection::test_get - AssertionError: 
> as...
> FAILED tests/khalendar_test.py::TestDbCreation::test_failed_create_db - 
> Faile...
> FAILED tests/parse_datetime_test.py::test_construct_event_format_de - 
> Asserti...
> FAILED tests/parse_datetime_test.py::test__construct_event_format_us - 
> Assert...
> FAILED tests/parse_datetime_test.py::test__construct_event_format_de_complexer
> FAILED tests/parse_datetime_test.py::test_leap_year - AssertionError: assert 
> ...
> FAILED tests/parse_datetime_test.py::test_description - AssertionError: 
> asser...
> FAILED tests/parse_datetime_test.py::test_repeat_floating - AssertionError: 
> a...
> FAILED tests/parse_datetime_test.py::test_repeat_localized - AssertionError: 
> ...
> FAILED tests/parse_datetime_test.py::test_alarm - AssertionError: assert 
> b'BE...
> FAILED 
> tests/parse_datetime_test.py::test_description_and_location_and_categories
> FAILED tests/vtimezone_test.py::test_berlin - AssertionError: assert 
> b'BEGIN:...
> FAILED tests/vtimezone_test.py::test_berlin_rdate - AssertionError: assert 
> b'...
> FAILED tests/vtimezone_test.py::test_bogota - AssertionError: assert 
> [b'BEGIN...
> ====== 29 failed, 283 passed, 1 xfailed, 2 xpassed, 7 warnings in 18.76s 
> =======
> 
> ________________________________________
> 发件人: Stuart Henderson <s...@spacehopper.org>
> 发送时间: 2023年12月5日 20:14
> 收件人: wen heping
> 抄送: j...@openbsd.org; ports@openbsd.org
> 主题: Re: productivity/khal: Update to 0.11.2
> 
> On 2023/12/05 03:08, wen heping wrote:
> > Hi, all:
> >
> >     Here is a patch for productivity/khal:
> >     i) Update to 0.11.2
> >     ii) Add some missing TEST_DEPENDS
> >
> >    It build and run well on amd64-current system.
> >    In all 300+ tests there are 29 tests failed.
> >    No other ports depend on it.
> 
> vdirsyncer is a RUN_DEPENDS so it doesn't need listing again in
> TEST_DEPENDS
> 
> can you show your test log? I only get 4 failed so maybe there are
> some other deps we can add.
> 
> 
> > Index: productivity/khal/Makefile
> > ===================================================================
> > RCS file: /cvs/ports/productivity/khal/Makefile,v
> > retrieving revision 1.20
> > diff -u -p -r1.20 Makefile
> > --- productivity/khal/Makefile        13 Nov 2022 20:31:00 -0000      1.20
> > +++ productivity/khal/Makefile        5 Dec 2023 03:03:27 -0000
> > @@ -1,8 +1,7 @@
> >  COMMENT =            standards based terminal calendar
> >
> > -MODPY_EGG_VERSION =  0.10.4
> > +MODPY_EGG_VERSION =  0.11.2
> >  DISTNAME =           khal-${MODPY_EGG_VERSION}
> > -REVISION =           2
> >
> >  CATEGORIES =         productivity
> >
> > @@ -31,7 +30,9 @@ RUN_DEPENDS =               devel/py-atomicwrites${MO
> >                       devel/py-urwid${MODPY_FLAVOR} \
> >                       devel/py-xdg${MODPY_FLAVOR} \
> >                       productivity/vdirsyncer
> > -TEST_DEPENDS =               devel/py-freezegun${MODPY_FLAVOR} \
> > -                     devel/py-test-cov${MODPY_FLAVOR}
> > +TEST_DEPENDS =               devel/py-hypothesis${MODPY_FLAVOR} \
> > +                     devel/py-freezegun${MODPY_FLAVOR} \
> > +                     productivity/vdirsyncer \
> > +                     sysutils/py-packaging${MODPY_FLAVOR}
> >
> >  .include <bsd.port.mk>
> > Index: productivity/khal/distinfo
> > ===================================================================
> > RCS file: /cvs/ports/productivity/khal/distinfo,v
> > retrieving revision 1.8
> > diff -u -p -r1.8 distinfo
> > --- productivity/khal/distinfo        15 Sep 2021 20:06:12 -0000      1.8
> > +++ productivity/khal/distinfo        5 Dec 2023 03:03:27 -0000
> > @@ -1,2 +1,2 @@
> > -SHA256 (khal-0.10.4.tar.gz) = P9uYCpphwCBteoKxb3e0CKTzQaK4ZrnJ/PamQYUNEp8=
> > -SIZE (khal-0.10.4.tar.gz) = 185736
> > +SHA256 (khal-0.11.2.tar.gz) = j7jYk3HlPiI1lToHZeQbl+F0hIpojWN2hHdXbQP4mbo=
> > +SIZE (khal-0.11.2.tar.gz) = 196986
> > Index: productivity/khal/pkg/PLIST
> > ===================================================================
> > RCS file: /cvs/ports/productivity/khal/pkg/PLIST,v
> > retrieving revision 1.6
> > diff -u -p -r1.6 PLIST
> > --- productivity/khal/pkg/PLIST       13 Nov 2022 20:31:00 -0000      1.6
> > +++ productivity/khal/pkg/PLIST       5 Dec 2023 03:03:27 -0000
> > @@ -24,6 +24,8 @@ lib/python${MODPY_VERSION}/site-packages
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}configwizard.${MODPY_PYC_MAGIC_TAG}pyc
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}controllers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}controllers.${MODPY_PYC_MAGIC_TAG}pyc
> > +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}custom_types.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> > +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}custom_types.${MODPY_PYC_MAGIC_TAG}pyc
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}pyc
> >  
> > lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}icalendar.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> > @@ -40,6 +42,7 @@ lib/python${MODPY_VERSION}/site-packages
> >  lib/python${MODPY_VERSION}/site-packages/khal/cli.py
> >  lib/python${MODPY_VERSION}/site-packages/khal/configwizard.py
> >  lib/python${MODPY_VERSION}/site-packages/khal/controllers.py
> > +lib/python${MODPY_VERSION}/site-packages/khal/custom_types.py
> >  lib/python${MODPY_VERSION}/site-packages/khal/exceptions.py
> >  lib/python${MODPY_VERSION}/site-packages/khal/icalendar.py
> >  lib/python${MODPY_VERSION}/site-packages/khal/khalendar/
> 


Reply via email to