@@ -173,6 +173,35 @@ def get_review_status(url: str, token: Optional[str], review_id: str,
173173 sys .exit (1 )
174174
175175
176+ def delete_review (url : str , token : str , review_id : str ) -> bool :
177+ """Delete a review (superuser only)
178+
179+ Args:
180+ url: AIR service URL
181+ token: API token (must be superuser)
182+ review_id: Review ID to delete
183+
184+ Returns:
185+ True if successful
186+ """
187+ api_url = f"{ url } /api/review"
188+ params = {
189+ 'id' : review_id ,
190+ 'token' : token ,
191+ }
192+
193+ try :
194+ response = requests .delete (api_url , params = params , timeout = 30 )
195+ response .raise_for_status ()
196+ return response .json ().get ('success' , False )
197+ except requests .exceptions .RequestException as e :
198+ print (f"Error deleting review: { e } " , file = sys .stderr )
199+ sys .exit (1 )
200+ except json .JSONDecodeError as e :
201+ print (f"Error parsing response: { e } " , file = sys .stderr )
202+ sys .exit (1 )
203+
204+
176205def format_status_line (status : dict ) -> str :
177206 """Format one-line status summary with color
178207
@@ -300,6 +329,8 @@ def main():
300329 help = 'Git commit hash or range (e.g., abc123 or abc123..def456)' )
301330 parser .add_argument ('--review-id' , metavar = 'ID' ,
302331 help = 'Existing review ID to check (skip submission)' )
332+ parser .add_argument ('--delete' , action = 'store_true' ,
333+ help = 'Delete the specified review (requires --review-id and superuser token)' )
303334 parser .add_argument ('patches' , nargs = '*' , metavar = 'PATCH_FILE' ,
304335 help = 'Patch files to submit' )
305336
@@ -333,6 +364,22 @@ def main():
333364
334365 args .url = args .url .rstrip ('/' )
335366
367+ # Handle --delete operation
368+ if args .delete :
369+ if not args .review_id :
370+ parser .error ('--delete requires --review-id' )
371+ if not args .token :
372+ parser .error ('--delete requires --token (must be superuser)' )
373+
374+ print (f"Deleting review { args .review_id } ..." )
375+ success = delete_review (args .url , args .token , args .review_id )
376+ if success :
377+ print (colorize (f"Review { args .review_id } deleted successfully" , Colors .GREEN ))
378+ else :
379+ print (colorize ("Failed to delete review" , Colors .RED ), file = sys .stderr )
380+ sys .exit (1 )
381+ return
382+
336383 # Validate arguments
337384 if args .review_id :
338385 review_id = args .review_id
0 commit comments