cumulusci-plus 5.0.8__py3-none-any.whl → 5.0.8.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cumulusci-plus might be problematic. Click here for more details.
- cumulusci/__about__.py +1 -1
- cumulusci/cli/cci.py +10 -3
- cumulusci/cli/tests/test_cci.py +78 -67
- cumulusci/tasks/vcs/tests/github/test_download_extract.py +15 -11
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/METADATA +1 -1
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/RECORD +10 -10
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/WHEEL +0 -0
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/entry_points.txt +0 -0
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/licenses/AUTHORS.rst +0 -0
- {cumulusci_plus-5.0.8.dist-info → cumulusci_plus-5.0.8.dev0.dist-info}/licenses/LICENSE +0 -0
cumulusci/__about__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "5.0.8"
|
|
1
|
+
__version__ = "5.0.8.dev0"
|
cumulusci/cli/cci.py
CHANGED
|
@@ -93,9 +93,16 @@ def _signal_handler(signum, frame):
|
|
|
93
93
|
old_handler = signal.signal(signum, signal.SIG_IGN)
|
|
94
94
|
|
|
95
95
|
try:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
# Only use process group termination on Unix systems
|
|
97
|
+
if hasattr(os, "getpgrp") and hasattr(os, "killpg"):
|
|
98
|
+
pgrp = os.getpgrp()
|
|
99
|
+
# Send signal to all processes in the group except ourselves
|
|
100
|
+
os.killpg(pgrp, signum)
|
|
101
|
+
else:
|
|
102
|
+
# On Windows, we can't use process groups, so just log the attempt
|
|
103
|
+
console.print(
|
|
104
|
+
"[yellow]Process group termination not supported on this platform[/yellow]"
|
|
105
|
+
)
|
|
99
106
|
finally:
|
|
100
107
|
# Restore the original signal handler
|
|
101
108
|
signal.signal(signum, old_handler)
|
cumulusci/cli/tests/test_cci.py
CHANGED
|
@@ -3,7 +3,6 @@ import io
|
|
|
3
3
|
import os
|
|
4
4
|
import signal
|
|
5
5
|
import sys
|
|
6
|
-
import tempfile
|
|
7
6
|
from pathlib import Path
|
|
8
7
|
from unittest import mock
|
|
9
8
|
|
|
@@ -26,17 +25,11 @@ CONSOLE = mock.Mock()
|
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
@pytest.fixture(autouse=True)
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
# Reset signal handler flag to ensure clean state for tests
|
|
28
|
+
def reset_signal_handler_flag():
|
|
29
|
+
"""Reset signal handler flag to ensure clean state for tests"""
|
|
30
|
+
cci._signal_handler_active = False
|
|
31
|
+
yield
|
|
36
32
|
cci._signal_handler_active = False
|
|
37
|
-
|
|
38
|
-
with mock.patch.dict(os.environ, config):
|
|
39
|
-
yield
|
|
40
33
|
|
|
41
34
|
|
|
42
35
|
@mock.patch("cumulusci.cli.cci.tee_stdout_stderr")
|
|
@@ -544,8 +537,8 @@ def test_dash_dash_version(
|
|
|
544
537
|
|
|
545
538
|
@mock.patch("sys.exit")
|
|
546
539
|
@mock.patch("cumulusci.cli.cci.Console")
|
|
547
|
-
@mock.patch("os.killpg")
|
|
548
|
-
@mock.patch("os.getpgrp")
|
|
540
|
+
@mock.patch("os.killpg", create=True)
|
|
541
|
+
@mock.patch("os.getpgrp", create=True)
|
|
549
542
|
@mock.patch("signal.signal")
|
|
550
543
|
def test_signal_handler_terminates_process_group(
|
|
551
544
|
mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
|
|
@@ -557,38 +550,40 @@ def test_signal_handler_terminates_process_group(
|
|
|
557
550
|
# Mock the global exit stack
|
|
558
551
|
mock_exit_stack = mock.Mock()
|
|
559
552
|
with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
|
|
560
|
-
#
|
|
561
|
-
|
|
553
|
+
# Mock hasattr to return True for Unix functions
|
|
554
|
+
with mock.patch("builtins.hasattr", return_value=True):
|
|
555
|
+
# Call the signal handler with SIGTERM
|
|
556
|
+
cci._signal_handler(signal.SIGTERM, None)
|
|
562
557
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
558
|
+
# Verify console output
|
|
559
|
+
console_instance.print.assert_any_call(
|
|
560
|
+
"\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
|
|
561
|
+
)
|
|
562
|
+
console_instance.print.assert_any_call(
|
|
563
|
+
"[yellow]Exiting with failure code due to external cancellation.[/yellow]"
|
|
564
|
+
)
|
|
565
|
+
console_instance.print.assert_any_call(
|
|
566
|
+
"[yellow]Terminating child processes...[/yellow]"
|
|
567
|
+
)
|
|
573
568
|
|
|
574
|
-
|
|
575
|
-
|
|
569
|
+
# Verify cleanup was called
|
|
570
|
+
mock_exit_stack.close.assert_called_once()
|
|
576
571
|
|
|
577
|
-
|
|
578
|
-
|
|
572
|
+
# Verify signal was temporarily ignored and then restored
|
|
573
|
+
mock_signal.assert_called()
|
|
579
574
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
575
|
+
# Verify process group was terminated
|
|
576
|
+
mock_getpgrp.assert_called_once()
|
|
577
|
+
mock_killpg.assert_called_once_with(1234, signal.SIGTERM)
|
|
583
578
|
|
|
584
|
-
|
|
585
|
-
|
|
579
|
+
# Verify exit with correct code
|
|
580
|
+
mock_exit.assert_called_once_with(143)
|
|
586
581
|
|
|
587
582
|
|
|
588
583
|
@mock.patch("sys.exit")
|
|
589
584
|
@mock.patch("cumulusci.cli.cci.Console")
|
|
590
|
-
@mock.patch("os.killpg")
|
|
591
|
-
@mock.patch("os.getpgrp")
|
|
585
|
+
@mock.patch("os.killpg", create=True)
|
|
586
|
+
@mock.patch("os.getpgrp", create=True)
|
|
592
587
|
@mock.patch("signal.signal")
|
|
593
588
|
def test_signal_handler_sigint(
|
|
594
589
|
mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
|
|
@@ -600,19 +595,21 @@ def test_signal_handler_sigint(
|
|
|
600
595
|
# Mock the global exit stack
|
|
601
596
|
mock_exit_stack = mock.Mock()
|
|
602
597
|
with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
|
|
603
|
-
#
|
|
604
|
-
|
|
598
|
+
# Mock hasattr to return True for Unix functions
|
|
599
|
+
with mock.patch("builtins.hasattr", return_value=True):
|
|
600
|
+
# Call the signal handler with SIGINT
|
|
601
|
+
cci._signal_handler(signal.SIGINT, None)
|
|
605
602
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
603
|
+
# Verify console output
|
|
604
|
+
console_instance.print.assert_any_call(
|
|
605
|
+
"\n[yellow]Received SIGINT - CumulusCI is being terminated[/yellow]"
|
|
606
|
+
)
|
|
610
607
|
|
|
611
|
-
|
|
612
|
-
|
|
608
|
+
# Verify process group was terminated with SIGINT
|
|
609
|
+
mock_killpg.assert_called_once_with(1234, signal.SIGINT)
|
|
613
610
|
|
|
614
|
-
|
|
615
|
-
|
|
611
|
+
# Verify exit with correct code for SIGINT
|
|
612
|
+
mock_exit.assert_called_once_with(130)
|
|
616
613
|
|
|
617
614
|
|
|
618
615
|
@mock.patch("sys.exit")
|
|
@@ -635,8 +632,8 @@ def test_signal_handler_prevents_recursion(mock_console, mock_exit):
|
|
|
635
632
|
|
|
636
633
|
@mock.patch("sys.exit")
|
|
637
634
|
@mock.patch("cumulusci.cli.cci.Console")
|
|
638
|
-
@mock.patch("os.killpg")
|
|
639
|
-
@mock.patch("os.getpgrp")
|
|
635
|
+
@mock.patch("os.killpg", create=True)
|
|
636
|
+
@mock.patch("os.getpgrp", create=True)
|
|
640
637
|
@mock.patch("signal.signal")
|
|
641
638
|
def test_signal_handler_handles_killpg_error(
|
|
642
639
|
mock_signal, mock_getpgrp, mock_killpg, mock_console, mock_exit
|
|
@@ -646,8 +643,10 @@ def test_signal_handler_handles_killpg_error(
|
|
|
646
643
|
mock_getpgrp.return_value = 1234
|
|
647
644
|
mock_killpg.side_effect = OSError("Process group not found")
|
|
648
645
|
|
|
649
|
-
#
|
|
650
|
-
|
|
646
|
+
# Mock hasattr to return True for Unix functions
|
|
647
|
+
with mock.patch("builtins.hasattr", return_value=True):
|
|
648
|
+
# Call the signal handler with SIGTERM
|
|
649
|
+
cci._signal_handler(signal.SIGTERM, None)
|
|
651
650
|
|
|
652
651
|
# Verify error message was printed
|
|
653
652
|
console_instance.print.assert_any_call(
|
|
@@ -661,27 +660,39 @@ def test_signal_handler_handles_killpg_error(
|
|
|
661
660
|
@mock.patch("sys.exit")
|
|
662
661
|
@mock.patch("cumulusci.cli.cci.Console")
|
|
663
662
|
def test_signal_handler_without_process_group_support(mock_console, mock_exit):
|
|
664
|
-
"""Test that the signal handler works on
|
|
663
|
+
"""Test that the signal handler works on Windows where process groups aren't supported"""
|
|
665
664
|
console_instance = mock_console.return_value
|
|
666
665
|
|
|
667
666
|
# Mock the global exit stack
|
|
668
667
|
mock_exit_stack = mock.Mock()
|
|
669
|
-
|
|
670
|
-
# Mock os module to not have killpg or getpgrp
|
|
671
668
|
with mock.patch.object(cci, "_exit_stack", mock_exit_stack):
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
669
|
+
# Mock hasattr to return False for Unix functions (like on Windows)
|
|
670
|
+
with mock.patch("builtins.hasattr", return_value=False):
|
|
671
|
+
# Call the signal handler with SIGTERM
|
|
672
|
+
cci._signal_handler(signal.SIGTERM, None)
|
|
673
|
+
|
|
674
|
+
# Verify console output
|
|
675
|
+
console_instance.print.assert_any_call(
|
|
676
|
+
"\n[yellow]Received SIGTERM - CumulusCI is being terminated[/yellow]"
|
|
677
|
+
)
|
|
678
|
+
console_instance.print.assert_any_call(
|
|
679
|
+
"[yellow]Exiting with failure code due to external cancellation.[/yellow]"
|
|
680
|
+
)
|
|
681
|
+
console_instance.print.assert_any_call(
|
|
682
|
+
"[yellow]Terminating child processes...[/yellow]"
|
|
683
|
+
)
|
|
684
|
+
console_instance.print.assert_any_call(
|
|
685
|
+
"[yellow]Process group termination not supported on this platform[/yellow]"
|
|
686
|
+
)
|
|
687
|
+
|
|
688
|
+
# Verify cleanup was called
|
|
689
|
+
mock_exit_stack.close.assert_called_once()
|
|
690
|
+
|
|
691
|
+
# Verify exit with correct code
|
|
692
|
+
mock_exit.assert_called_once_with(143)
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
@mock.patch("os.setpgrp", create=True)
|
|
685
696
|
def test_main_creates_process_group(mock_setpgrp):
|
|
686
697
|
"""Test that main() creates a new process group"""
|
|
687
698
|
# Mock dependencies to avoid actual CLI execution
|
|
@@ -711,7 +722,7 @@ def test_main_creates_process_group(mock_setpgrp):
|
|
|
711
722
|
mock_setpgrp.assert_called_once()
|
|
712
723
|
|
|
713
724
|
|
|
714
|
-
@mock.patch("os.setpgrp")
|
|
725
|
+
@mock.patch("os.setpgrp", create=True)
|
|
715
726
|
def test_main_handles_setpgrp_error(mock_setpgrp):
|
|
716
727
|
"""Test that main() handles setpgrp errors gracefully"""
|
|
717
728
|
mock_setpgrp.side_effect = OSError("Operation not permitted")
|
|
@@ -373,20 +373,24 @@ class TestDownloadExtract:
|
|
|
373
373
|
|
|
374
374
|
def test_set_target_directory__absolute_path(self):
|
|
375
375
|
"""Test _set_target_directory with absolute path"""
|
|
376
|
-
absolute_path = "
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
"
|
|
381
|
-
|
|
376
|
+
absolute_path = tempfile.mkdtemp(prefix="test_")
|
|
377
|
+
try:
|
|
378
|
+
task_config = TaskConfig(
|
|
379
|
+
{
|
|
380
|
+
"options": {
|
|
381
|
+
"repo_url": self.repo_url,
|
|
382
|
+
"target_directory": absolute_path,
|
|
383
|
+
}
|
|
382
384
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
task = DownloadExtract(self.project_config, task_config)
|
|
385
|
+
)
|
|
386
|
+
task = DownloadExtract(self.project_config, task_config)
|
|
386
387
|
|
|
387
|
-
|
|
388
|
+
task._set_target_directory()
|
|
388
389
|
|
|
389
|
-
|
|
390
|
+
assert task.options["target_directory"] == absolute_path
|
|
391
|
+
finally:
|
|
392
|
+
# Clean up the temporary directory
|
|
393
|
+
os.rmdir(absolute_path)
|
|
390
394
|
|
|
391
395
|
def test_rename_files(self):
|
|
392
396
|
"""Test _rename_files method"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cumulusci-plus
|
|
3
|
-
Version: 5.0.8
|
|
3
|
+
Version: 5.0.8.dev0
|
|
4
4
|
Summary: Build and release tools for Salesforce developers
|
|
5
5
|
Project-URL: Homepage, https://github.com/jorgesolebur/CumulusCI
|
|
6
6
|
Project-URL: Changelog, https://cumulusci.readthedocs.io/en/stable/history.html
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
cumulusci/__about__.py,sha256=
|
|
1
|
+
cumulusci/__about__.py,sha256=nnWzpE6c_AzsihHEu6Ul-b8Oj0n88PpGCNkmHuwzmis,27
|
|
2
2
|
cumulusci/__init__.py,sha256=jdanFQ_i8vbdO7Eltsf4pOfvV4mwa_Osyc4gxWKJ8ng,764
|
|
3
3
|
cumulusci/__main__.py,sha256=kgRH-n5AJrH_daCK_EJwH7azAUxdXEmpi-r-dPGMR6Y,43
|
|
4
4
|
cumulusci/conftest.py,sha256=AIL98BDwNAQtdo8YFmLKwav0tmrQ5dpbw1cX2FyGouQ,5108
|
|
5
5
|
cumulusci/cumulusci.yml,sha256=FE1Dm7EhcMXY-XtLljbcbRyo_E0tvspaxqh8Nsiup3w,72365
|
|
6
6
|
cumulusci/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
cumulusci/cli/cci.py,sha256=
|
|
7
|
+
cumulusci/cli/cci.py,sha256=NcFm0Nng5o47fAMcjpSHjWRvQKDbD2lwPSkuoCVW9eA,11901
|
|
8
8
|
cumulusci/cli/error.py,sha256=znj0YN8D2Grozm1u7mZAsJlmmdGebbuy0c1ofQluL4Q,4410
|
|
9
9
|
cumulusci/cli/flow.py,sha256=rN_9WL2Z6dcx-oRngChIgei3E5Qmg3XVzk5ND1o0i3s,6171
|
|
10
10
|
cumulusci/cli/logger.py,sha256=bpzSD0Bm0BAwdNbVR6yZXMREh2vm7jOytZevEaNoVR4,2267
|
|
@@ -18,7 +18,7 @@ cumulusci/cli/task.py,sha256=xm8lo0_LMMpcsUDv1Gj_HpW1phllyEW9IRm2lQSh5wg,10077
|
|
|
18
18
|
cumulusci/cli/ui.py,sha256=Ld-2S6Kr204SBput-1pNAVlYglzcvbV5nVA_rGXlAo8,7346
|
|
19
19
|
cumulusci/cli/utils.py,sha256=Bl-l8eOXxzi6E_DsWGGGeefwZxrVg7Zo52BIwoNhKH8,5522
|
|
20
20
|
cumulusci/cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
cumulusci/cli/tests/test_cci.py,sha256=
|
|
21
|
+
cumulusci/cli/tests/test_cci.py,sha256=p9PYNij3dB3dNwOg9ivPSzVw179WORFVMfRpkWW68pg,27891
|
|
22
22
|
cumulusci/cli/tests/test_error.py,sha256=zU2ccfGOivcVMpCManam18uyhlzT-HFb9xuMljU4few,6629
|
|
23
23
|
cumulusci/cli/tests/test_flow.py,sha256=CIkZWvai5H4EOs35epMKWmxzDfauIEqL6BUwC8q3LPU,8535
|
|
24
24
|
cumulusci/cli/tests/test_logger.py,sha256=-XBwSmtuelpx5sax0_E2xi4F9m_UsRkt2gn1o9ub6h8,834
|
|
@@ -622,7 +622,7 @@ cumulusci/tasks/vcs/release.py,sha256=xXim12XVij34LRK6kAQ_5qeQLlYHNtx4e386doQCxh
|
|
|
622
622
|
cumulusci/tasks/vcs/release_report.py,sha256=B8ehl6PK7kaEI_jS-rapQfNm0bhJRR7LBL4WFq1meNE,4226
|
|
623
623
|
cumulusci/tasks/vcs/tag.py,sha256=x9Xw5t6g13ztl0TjtclQ1_JRBWtez73e9Az8oYJeqvU,1098
|
|
624
624
|
cumulusci/tasks/vcs/tests/github/test_commit_status.py,sha256=1IAGz8_wFVUvk0wY5V_Aetb6M5Ri0nkOHaRSUdqQkZI,7206
|
|
625
|
-
cumulusci/tasks/vcs/tests/github/test_download_extract.py,sha256=
|
|
625
|
+
cumulusci/tasks/vcs/tests/github/test_download_extract.py,sha256=_8j2xkypbF6xECkYgWby6vfHAss16FHhuy9flu-m5Fo,32594
|
|
626
626
|
cumulusci/tasks/vcs/tests/github/test_merge.py,sha256=OS25YJHNVqfb2lPzpXOpzR8BEiDEh_C94BwDTvTDQ-U,39306
|
|
627
627
|
cumulusci/tasks/vcs/tests/github/test_publish.py,sha256=kl3IvWmDL8M225R7Ygyr-vUjXQ0_GoUDH85kOncDlMk,30739
|
|
628
628
|
cumulusci/tasks/vcs/tests/github/test_pull_request.py,sha256=dh-XihMjCH69wML6vg3KKqjB2NsfhBoMr0Ii1xfM8gw,974
|
|
@@ -736,9 +736,9 @@ cumulusci/vcs/tests/dummy_service.py,sha256=RltOUpMIhSDNrfxk0LhLqlH4ppC0sK6NC2cO
|
|
|
736
736
|
cumulusci/vcs/tests/test_vcs_base.py,sha256=9mp6uZ3lTxY4onjUNCucp9N9aB3UylKS7_2Zu_hdAZw,24331
|
|
737
737
|
cumulusci/vcs/tests/test_vcs_bootstrap.py,sha256=N0NA48-rGNIIjY3Z7PtVnNwHObSlEGDk2K55TQGI8g4,27954
|
|
738
738
|
cumulusci/vcs/utils/__init__.py,sha256=py4fEcHM7Vd0M0XWznOlywxaeCtG3nEVGmELmEKVGU8,869
|
|
739
|
-
cumulusci_plus-5.0.8.dist-info/METADATA,sha256=
|
|
740
|
-
cumulusci_plus-5.0.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
741
|
-
cumulusci_plus-5.0.8.dist-info/entry_points.txt,sha256=nTtu04b9iLXhzADcTrb5PwmdXE6e2MTUAMh9OK6Z2pg,80
|
|
742
|
-
cumulusci_plus-5.0.8.dist-info/licenses/AUTHORS.rst,sha256=PvewjKImdKPhhJ6xR2EEZ4T7GbpY2ZeAeyWm2aLtiMQ,676
|
|
743
|
-
cumulusci_plus-5.0.8.dist-info/licenses/LICENSE,sha256=NFsF_s7RVXk2dU6tmRAN8wF45pnD98VZ5IwqOsyBcaU,1499
|
|
744
|
-
cumulusci_plus-5.0.8.dist-info/RECORD,,
|
|
739
|
+
cumulusci_plus-5.0.8.dev0.dist-info/METADATA,sha256=No5M7E99WFdnfIqbyhyCUrW2WpLlo8W09i7yx6wgr7w,6139
|
|
740
|
+
cumulusci_plus-5.0.8.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
741
|
+
cumulusci_plus-5.0.8.dev0.dist-info/entry_points.txt,sha256=nTtu04b9iLXhzADcTrb5PwmdXE6e2MTUAMh9OK6Z2pg,80
|
|
742
|
+
cumulusci_plus-5.0.8.dev0.dist-info/licenses/AUTHORS.rst,sha256=PvewjKImdKPhhJ6xR2EEZ4T7GbpY2ZeAeyWm2aLtiMQ,676
|
|
743
|
+
cumulusci_plus-5.0.8.dev0.dist-info/licenses/LICENSE,sha256=NFsF_s7RVXk2dU6tmRAN8wF45pnD98VZ5IwqOsyBcaU,1499
|
|
744
|
+
cumulusci_plus-5.0.8.dev0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|