@@ -74,53 +74,78 @@ def compare_content(title, actual_str):
74
74
return retval
75
75
76
76
77
- def process_one_file (filename , interactive ):
77
+ def process_one_file (filename , explain ):
78
78
global VALIDATORS
79
79
80
80
failures = None
81
81
82
82
sections_needed = ["BEGIN" , "ROLES" , "SYMBOLS" , "REQUIRES" , "PROVIDES" , "END" ]
83
83
84
- if interactive :
84
+ if explain :
85
85
failures = []
86
86
else :
87
87
failures = ""
88
- with open (filename , "r" ) as file :
89
- content = file .read ()
90
- pieces = content .split (PRELUDE_FLAG )
91
- for section in pieces :
92
- stripped = section .strip ()
93
- name , content = section .split ("\n " , 1 )
94
- try :
95
- sections_needed .remove (name )
96
- except :
97
- pass
98
- content = content .strip ()
99
- if name in VALIDATORS .keys ():
100
- validator = VALIDATORS [name ]
101
- if not globals ()[validator ](name , content ):
102
- if interactive :
103
- failures .extend (compare_content (name , content ))
104
- else :
105
- failures = failures + " " + name
106
- if len (sections_needed ) > 0 :
107
- if interactive :
108
- failures .append ("Missing Section(s)" )
109
- for section in sections_needed :
110
- failures .append (" " + section )
111
- else :
112
- for section in sections_needed :
113
- failures = failures + " " + section
88
+
89
+ if not os .path .isfile (filename ):
90
+ return failures
91
+
92
+ try :
93
+ with open (filename , "r" ) as file :
94
+ content = file .read ()
95
+ pieces = content .split (PRELUDE_FLAG )
96
+ for section in pieces :
97
+ stripped = section .strip ()
98
+ name , content = section .split ("\n " , 1 )
99
+ try :
100
+ sections_needed .remove (name )
101
+ except :
102
+ pass
103
+ content = content .strip ()
104
+ if name in VALIDATORS .keys ():
105
+ validator = VALIDATORS [name ]
106
+ if not globals ()[validator ](name , content ):
107
+ if explain :
108
+ failures .extend (compare_content (name , content ))
109
+ else :
110
+ failures = failures + " " + name
111
+ if len (sections_needed ) > 0 :
112
+ if explain :
113
+ failures .append ("Missing Section(s)" )
114
+ for section in sections_needed :
115
+ failures .append (" " + section )
116
+ else :
117
+ for section in sections_needed :
118
+ failures = failures + " " + section
119
+ except :
120
+ print ("WARN: unable to process " + str (filename ))
114
121
115
122
return failures
116
123
117
124
118
125
if __name__ == "__main__" :
119
126
ap = argparse .ArgumentParser ()
120
127
ap .add_argument (
121
- "--files-to-check" , type = Path , default = CONTRIB / "rst_files_with_prelude.txt"
128
+ "--files-to-check" ,
129
+ type = Path ,
130
+ default = CONTRIB / "rst_files_with_prelude.txt" ,
131
+ help = (
132
+ "File containing list of files (wildcards allowed). "
133
+ + "Can be relative to the repository ("
134
+ + str (PROJECT )
135
+ + ") "
136
+ "or current directory (if no matches in the repository)"
137
+ ),
138
+ )
139
+ ap .add_argument (
140
+ "--explain" ,
141
+ help = "Give details as to why a file failed the check" ,
142
+ action = "store_true" ,
143
+ )
144
+ ap .add_argument (
145
+ "--update" ,
146
+ help = "Run 'rst_update_prelude' script to fix errors" ,
147
+ action = "store_true" ,
122
148
)
123
- ap .add_argument ("--interactive" , action = "store_true" )
124
149
args = ap .parse_args ()
125
150
126
151
total_failures = 0
@@ -130,15 +155,27 @@ def process_one_file(filename, interactive):
130
155
files_with_prelude_glob = f .read ().splitlines ()
131
156
132
157
for glob in files_with_prelude_glob :
158
+ if len (glob ) == 0 :
159
+ print ("WARN: empty line found in " + str (args .files_to_check ))
160
+ continue
161
+
133
162
f_prel = list (PROJECT .glob (glob ))
134
163
if not f_prel :
135
164
continue
136
165
137
166
for one in f_prel :
138
- failures = process_one_file (one , args .interactive )
167
+ failures = process_one_file (one , args .explain )
139
168
if len (failures ) > 0 :
140
169
total_failures = total_failures + 1
141
- if args .interactive :
170
+ if args .update :
171
+ command = [
172
+ str (sys .executable ),
173
+ os .path .join (CONTRIB , "rst_update_prelude.py" ),
174
+ "--in-place" ,
175
+ one ,
176
+ ]
177
+ subprocess .check_call (command )
178
+ elif args .explain :
142
179
print ("FAIL: " + str (one ))
143
180
for line in failures :
144
181
print (" " + line )
0 commit comments