44
44
}
45
45
46
46
47
+ def fail_for_called_process_error (
48
+ succinct_description : str ,
49
+ error : subprocess .CalledProcessError
50
+ ):
51
+ printerr (f"FAIL: { succinct_description } " )
52
+ printerr (f"Executing: { escapeCmd (error .cmd )} " )
53
+ printerr (error .output )
54
+ raise SystemExit (1 )
55
+
56
+
47
57
# -----------------------------------------------------------------------------
48
58
# Xcode Projects Generation
49
59
@@ -72,7 +82,7 @@ def note(message: str):
72
82
73
83
def fatal_error (message : str ):
74
84
printerr (message )
75
- sys . exit (1 )
85
+ raise SystemExit (1 )
76
86
77
87
78
88
def escapeCmdArg (arg : str ) -> str :
@@ -82,10 +92,14 @@ def escapeCmdArg(arg: str) -> str:
82
92
return arg
83
93
84
94
95
+ def escapeCmd (cmd : List [str ]) -> str :
96
+ return " " .join ([escapeCmdArg (arg ) for arg in cmd ])
97
+
98
+
85
99
def call (cmd : List [str ], env : Dict [str , str ] = dict (os .environ ), stdout = None ,
86
100
stderr = subprocess .STDOUT , verbose : bool = False ):
87
101
if verbose :
88
- print (" " . join ([ escapeCmdArg ( arg ) for arg in cmd ] ))
102
+ print (escapeCmd ( cmd ))
89
103
process = subprocess .Popen (cmd , env = env , stdout = stdout , stderr = stderr )
90
104
process .wait ()
91
105
@@ -95,7 +109,7 @@ def call(cmd: List[str], env: Dict[str, str] = dict(os.environ), stdout=None,
95
109
def check_call (cmd : List [str ], cwd : Optional [str ] = None ,
96
110
env : Dict [str , str ] = dict (os .environ ), verbose : bool = False ):
97
111
if verbose :
98
- print (" " . join ([ escapeCmdArg ( arg ) for arg in cmd ] ))
112
+ print (escapeCmd ( cmd ))
99
113
subprocess .check_call (cmd , cwd = cwd , env = env , stderr = subprocess .STDOUT )
100
114
101
115
@@ -317,7 +331,7 @@ def generate_gyb_files(
317
331
def run_code_generation (
318
332
toolchain : str , build_dir : Optional [str ], multiroot_data_file : Optional [str ],
319
333
release : bool , verbose : bool , swiftsyntaxbuilder_destination : str
320
- ) -> bool :
334
+ ):
321
335
print ("** Running code generation **" )
322
336
swiftpm_call = get_swiftpm_invocation (
323
337
toolchain = toolchain ,
@@ -340,7 +354,7 @@ def run_code_generation(
340
354
env ["SWIFTCI_USE_LOCAL_DEPS" ] = "1"
341
355
env ["SWIFT_SYNTAX_PARSER_LIB_SEARCH_PATH" ] = \
342
356
os .path .join (toolchain , "lib" , "swift" , "macosx" )
343
- return check_call (swiftpm_call , env = env , verbose = verbose ) == 0
357
+ check_call (swiftpm_call , env = env , verbose = verbose )
344
358
345
359
346
360
def make_dir_if_needed (path ):
@@ -493,14 +507,20 @@ def verify_code_generated_files(
493
507
494
508
self_swiftsyntaxbuilder_generated_dir = tempfile .mkdtemp ()
495
509
496
- run_code_generation (
497
- toolchain = toolchain ,
498
- build_dir = realpath (build_dir ),
499
- multiroot_data_file = multiroot_data_file ,
500
- release = release ,
501
- verbose = verbose ,
502
- swiftsyntaxbuilder_destination = self_swiftsyntaxbuilder_generated_dir
503
- )
510
+ try :
511
+ run_code_generation (
512
+ toolchain = toolchain ,
513
+ build_dir = realpath (build_dir ),
514
+ multiroot_data_file = multiroot_data_file ,
515
+ release = release ,
516
+ verbose = verbose ,
517
+ swiftsyntaxbuilder_destination = self_swiftsyntaxbuilder_generated_dir
518
+ )
519
+ except subprocess .CalledProcessError as e :
520
+ fail_for_called_process_error (
521
+ "Source generation using SwiftSyntaxBuilder failed" ,
522
+ e
523
+ )
504
524
505
525
print ("** Verifing code generated files **" )
506
526
@@ -542,34 +562,25 @@ def verify_c_syntax_nodes_match():
542
562
def run_tests (
543
563
toolchain : str , build_dir : Optional [str ], multiroot_data_file : Optional [str ],
544
564
release : bool , filecheck_exec : Optional [str ], skip_lit_tests : bool , verbose : bool
545
- ) -> bool :
565
+ ):
546
566
print ("** Running SwiftSyntax Tests **" )
547
567
548
- if skip_lit_tests :
549
- lit_success = True
550
- else :
551
- lit_success = run_lit_tests (
568
+ if not skip_lit_tests :
569
+ run_lit_tests (
552
570
toolchain = toolchain ,
553
571
build_dir = build_dir ,
554
572
release = release ,
555
573
filecheck_exec = filecheck_exec ,
556
574
verbose = verbose ,
557
575
)
558
- if not lit_success :
559
- return False
560
576
561
- xctest_success = run_xctests (
577
+ run_xctests (
562
578
toolchain = toolchain ,
563
579
build_dir = build_dir ,
564
580
multiroot_data_file = multiroot_data_file ,
565
581
release = release ,
566
582
verbose = verbose ,
567
583
)
568
- if not xctest_success :
569
- return False
570
-
571
- return True
572
-
573
584
574
585
# -----------------------------------------------------------------------------
575
586
# Lit Tests
@@ -602,7 +613,9 @@ def check_incr_transfer_roundtrip_exec():
602
613
)
603
614
604
615
605
- def find_lit_test_helper_exec (toolchain : str , build_dir : Optional [str ], release : bool ):
616
+ def find_lit_test_helper_exec (
617
+ toolchain : str , build_dir : Optional [str ], release : bool
618
+ ) -> str :
606
619
swiftpm_call = get_swiftpm_invocation (
607
620
toolchain = toolchain ,
608
621
action = "build" ,
@@ -644,7 +657,7 @@ def run_lit_tests(toolchain: str, build_dir: Optional[str], release: bool,
644
657
# Don't show all commands if verbose is not enabled
645
658
if not verbose :
646
659
lit_call .extend (["--succinct" ])
647
- return call (lit_call , verbose = verbose ) == 0
660
+ check_call (lit_call , verbose = verbose )
648
661
649
662
650
663
# -----------------------------------------------------------------------------
@@ -673,7 +686,7 @@ def run_xctests(toolchain: str, build_dir: Optional[str],
673
686
env ["SWIFTCI_USE_LOCAL_DEPS" ] = "1"
674
687
env ["SWIFT_SYNTAX_PARSER_LIB_SEARCH_PATH" ] = \
675
688
os .path .join (toolchain , "lib" , "swift" , "macosx" )
676
- return call (swiftpm_call , env = env , verbose = verbose ) == 0
689
+ check_call (swiftpm_call , env = env , verbose = verbose )
677
690
678
691
# -----------------------------------------------------------------------------
679
692
# Arugment Parsing functions
@@ -691,21 +704,22 @@ def generate_source_code_command(args):
691
704
add_source_locations = args .add_source_locations ,
692
705
)
693
706
except subprocess .CalledProcessError as e :
694
- printerr ("FAIL: Generating .gyb files failed" )
695
- printerr ("Executing: %s" % " " .join (e .cmd ))
696
- printerr (e .output )
697
- raise SystemExit (1 )
707
+ fail_for_called_process_error ("Generating .gyb files failed" , e )
698
708
699
- if not args .gyb_only :
700
- destination = os .path .join (SWIFTSYNTAXBUILDER_DIR , "generated" )
701
- run_code_generation (
702
- toolchain = args .toolchain ,
703
- build_dir = realpath (args .build_dir ),
704
- multiroot_data_file = args .multiroot_data_file ,
705
- release = args .release ,
706
- verbose = args .verbose ,
707
- swiftsyntaxbuilder_destination = destination
708
- )
709
+ try :
710
+ if not args .gyb_only :
711
+ destination = os .path .join (SWIFTSYNTAXBUILDER_DIR , "generated" )
712
+ run_code_generation (
713
+ toolchain = args .toolchain ,
714
+ build_dir = realpath (args .build_dir ),
715
+ multiroot_data_file = args .multiroot_data_file ,
716
+ release = args .release ,
717
+ verbose = args .verbose ,
718
+ swiftsyntaxbuilder_destination = destination
719
+ )
720
+ except subprocess .CalledProcessError as e :
721
+ fail_for_called_process_error (
722
+ "Source generation using SwiftSyntaxBuilder failed" , e )
709
723
710
724
711
725
def verify_source_code_command (args ):
@@ -750,9 +764,7 @@ def build_command(args):
750
764
builder .build ("SwiftSyntaxBuilder" )
751
765
builder .build ("SwiftSyntaxBuilderGeneration" )
752
766
except subprocess .CalledProcessError as e :
753
- printerr ("FAIL: Building SwiftSyntax failed" )
754
- printerr ("Executing: %s" % " " .join (e .cmd ))
755
- printerr (e .output )
767
+ fail_for_called_process_error ("Building SwiftSyntax failed" , e )
756
768
757
769
758
770
def test_command (args ):
@@ -768,7 +780,7 @@ def test_command(args):
768
780
769
781
builder .build ("lit-test-helper" )
770
782
771
- success = run_tests (
783
+ run_tests (
772
784
toolchain = args .toolchain ,
773
785
build_dir = realpath (args .build_dir ),
774
786
multiroot_data_file = args .multiroot_data_file ,
@@ -777,17 +789,9 @@ def test_command(args):
777
789
skip_lit_tests = args .skip_lit_tests ,
778
790
verbose = args .verbose ,
779
791
)
780
- if not success :
781
- # An error message has already been printed by the failing test
782
- # suite
783
- sys .exit (1 )
784
- else :
785
- print ("** All tests passed **" )
792
+ print ("** All tests passed **" )
786
793
except subprocess .CalledProcessError as e :
787
- printerr ("FAIL: Running tests failed" )
788
- printerr ("Executing: %s" % " " .join (e .cmd ))
789
- printerr (e .output )
790
- sys .exit (1 )
794
+ fail_for_called_process_error ("Running tests failed" , e )
791
795
792
796
793
797
# -----------------------------------------------------------------------------
0 commit comments