Skip to content

Commit 2d20ebc

Browse files
committed
air: support deleting reviews
Due to various bugs I have to occasionally "clean" bad reviews out from the DB. Add CLI support for this. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent ddd9fc2 commit 2d20ebc

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

air-submit.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
176205
def 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

Comments
 (0)