apply-patches-by-label-private.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Download all pull requests as patches that match a specific label
  2. # Usage: python download-patches-by-label.py <Label to Match> <Root Path Folder to DL to>
  3. import requests, sys, json, shutil, subprocess, os, traceback
  4. org = os.getenv("PRIVATEMERGEORG", "yuzu-emu")
  5. repo = os.getenv("PRIVATEMERGEREPO", "yuzu-private")
  6. tagline = sys.argv[3]
  7. user = sys.argv[1]
  8. dl_list = {}
  9. TAG_NAME = sys.argv[2]
  10. def check_individual(repo_id, pr_id):
  11. url = 'https://%sdev.azure.com/%s/%s/_apis/git/repositories/%s/pullRequests/%s/labels?api-version=5.1-preview.1' % (user, org, repo, repo_id, pr_id)
  12. response = requests.get(url)
  13. if (response.ok):
  14. try:
  15. js = response.json()
  16. return any(tag.get('name') == TAG_NAME for tag in js['value'])
  17. except:
  18. return False
  19. return False
  20. def merge_pr(pn, ref):
  21. print("Matched PR# %s" % pn)
  22. print(subprocess.check_output(["git", "fetch", "https://%sdev.azure.com/%s/_git/%s" % (user, org, repo), ref, "-f", "--no-recurse-submodules"]))
  23. print(subprocess.check_output(["git", "merge", "--squash", 'origin/' + ref.replace('refs/heads/','')]))
  24. print(subprocess.check_output(["git", "commit", "-m\"Merge %s PR %s\"" % (tagline, pn)]))
  25. def main():
  26. url = 'https://%sdev.azure.com/%s/%s/_apis/git/pullrequests?api-version=5.1' % (user, org, repo)
  27. response = requests.get(url)
  28. if (response.ok):
  29. js = response.json()
  30. tagged_prs = filter(lambda pr: check_individual(pr['repository']['id'], pr['pullRequestId']), js['value'])
  31. map(lambda pr: merge_pr(pr['pullRequestId'], pr['sourceRefName']), tagged_prs)
  32. if __name__ == '__main__':
  33. try:
  34. main()
  35. except:
  36. traceback.print_exc(file=sys.stdout)
  37. sys.exit(-1)