1717Code written to hack things together until they work, so don't expect much :D
1818"""
1919
20-
20+ import argparse
2121import sys
2222import re
2323import tempfile
@@ -221,7 +221,7 @@ def get_log_content(status: GithubStatus) -> str:
221221 return content
222222
223223
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 ):
225225 if not pr_number and not sha_override :
226226 raise Exception ("Must specify either a PR number or a SHA" )
227227
@@ -237,7 +237,7 @@ def main(pr_number: Optional[int], sha_override: Optional[str] = None):
237237 ["git" , "rev-parse" , "HEAD" ]
238238 ).decode ("utf-8" ).strip ()
239239
240- if local_sha != github_sha :
240+ if local_sha != github_sha and not force :
241241 LOGGER .error (f"GitHub SHA ({ github_sha } ) different from your local SHA ({ local_sha } ), sync your changes first!" )
242242 sys .exit (1 )
243243 sha = github_sha
@@ -421,23 +421,6 @@ def ok_job_name(job_name: str) -> bool:
421421 print ("Expected output in semmle-code changed!" )
422422
423423
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-
441424if __name__ == "__main__" :
442425
443426 level = logging .INFO
@@ -448,6 +431,10 @@ def call_main():
448431 except ImportError :
449432 logging .basicConfig (level = logging .INFO , format = "%(levelname)s: %(message)s" )
450433
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 )
451438
452439 if DEBUG_LOG_FILE :
453440 patches = make_patches_from_log_file (open (DEBUG_LOG_FILE , "r" ).readlines ())
@@ -459,4 +446,20 @@ def call_main():
459446 sys .exit (1 )
460447
461448 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