17
17
Code written to hack things together until they work, so don't expect much :D
18
18
"""
19
19
20
-
20
+ import argparse
21
21
import sys
22
22
import re
23
23
import tempfile
@@ -221,7 +221,7 @@ def get_log_content(status: GithubStatus) -> str:
221
221
return content
222
222
223
223
224
- def main (pr_number : Optional [int ], sha_override : Optional [str ] = None ):
224
+ def main (pr_number : Optional [int ], sha_override : Optional [str ] = None , force = False ):
225
225
if not pr_number and not sha_override :
226
226
raise Exception ("Must specify either a PR number or a SHA" )
227
227
@@ -237,7 +237,7 @@ def main(pr_number: Optional[int], sha_override: Optional[str] = None):
237
237
["git" , "rev-parse" , "HEAD" ]
238
238
).decode ("utf-8" ).strip ()
239
239
240
- if local_sha != github_sha :
240
+ if local_sha != github_sha and not force :
241
241
LOGGER .error (f"GitHub SHA ({ github_sha } ) different from your local SHA ({ local_sha } ), sync your changes first!" )
242
242
sys .exit (1 )
243
243
sha = github_sha
@@ -421,23 +421,6 @@ def ok_job_name(job_name: str) -> bool:
421
421
print ("Expected output in semmle-code changed!" )
422
422
423
423
424
- def call_main ():
425
- pr_number = None
426
- override_sha = None
427
- if len (sys .argv ) < 2 :
428
- pr_number_response = subprocess .check_output ([
429
- "gh" , "pr" , "view" , "--json" , "number"
430
- ]).decode ("utf-8" )
431
-
432
- pr_number = json .loads (pr_number_response )["number" ]
433
- else :
434
- if len (sys .argv [1 ]) > 10 :
435
- override_sha = sys .argv [1 ]
436
- else :
437
- pr_number = int (sys .argv [1 ])
438
- main (pr_number , override_sha )
439
-
440
-
441
424
if __name__ == "__main__" :
442
425
443
426
level = logging .INFO
@@ -448,6 +431,10 @@ def call_main():
448
431
except ImportError :
449
432
logging .basicConfig (level = logging .INFO , format = "%(levelname)s: %(message)s" )
450
433
434
+ # parse command line arguments
435
+ parser = argparse .ArgumentParser ()
436
+ parser .add_argument ("--force" , action = "store_true" , help = "Apply patches even if the local SHA is different from the GitHub PR SHA" )
437
+ parser .add_argument ("posarg" , nargs = "?" , default = None )
451
438
452
439
if DEBUG_LOG_FILE :
453
440
patches = make_patches_from_log_file (open (DEBUG_LOG_FILE , "r" ).readlines ())
@@ -459,4 +446,20 @@ def call_main():
459
446
sys .exit (1 )
460
447
461
448
os .chdir (CODEQL_REPO_DIR )
462
- call_main ()
449
+
450
+ pr_number = None
451
+ override_sha = None
452
+ args = parser .parse_args ()
453
+
454
+ if args .posarg is None :
455
+ pr_number_response = subprocess .check_output ([
456
+ "gh" , "pr" , "view" , "--json" , "number"
457
+ ]).decode ("utf-8" )
458
+ pr_number = json .loads (pr_number_response )["number" ]
459
+ else :
460
+ if len (args .posarg ) > 10 :
461
+ override_sha = args .posarg
462
+ else :
463
+ pr_number = int (args .posarg )
464
+
465
+ main (pr_number , override_sha , force = args .force )
0 commit comments