package_util.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. def cmd(cmd):
  2. import subprocess
  3. import shlex
  4. return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
  5. def get_tag_info(tag):
  6. rev = cmd('git rev-parse {0}'.format(latest_tag))
  7. anno = cmd('git cat-file -p {0}'.format(rev))
  8. tag_info = []
  9. for i, v in enumerate(anno.splitlines()):
  10. if i <= 4:
  11. continue
  12. tag_info.append(v.lstrip())
  13. return tag_info
  14. def gen_html(github_user, latest_tag):
  15. url = 'https://github.com/{0}/obs-studio/commit/%H'.format(github_user)
  16. with open('readme.html', 'w') as f:
  17. f.write("<html><body>")
  18. log_cmd = """git log {0}...HEAD --pretty=format:'<li>&bull; <a href="{1}">(view)</a> %s</li>'"""
  19. log_res = cmd(log_cmd.format(latest_tag, url))
  20. if len(log_res.splitlines()):
  21. f.write('<p>Changes since {0}: (Newest to oldest)</p>'.format(latest_tag))
  22. f.write(log_res)
  23. ul = False
  24. f.write('<p>')
  25. import re
  26. for l in get_tag_info(latest_tag):
  27. if not len(l):
  28. continue
  29. if l.startswith('*'):
  30. ul = True
  31. if not ul:
  32. f.write('<ul>')
  33. f.write('<li>&bull; {0}</li>'.format(re.sub(r'^(\s*)?[*](\s*)?', '', l)))
  34. else:
  35. if ul:
  36. f.write('</ul><p/>')
  37. ul = False
  38. f.write('<p>{0}</p>'.format(l))
  39. if ul:
  40. f.write('</ul>')
  41. f.write('</p></body></html>')
  42. cmd('textutil -convert rtf readme.html -output readme.rtf')
  43. cmd("""sed -i '' 's/Times-Roman/Verdana/g' readme.rtf""")
  44. def save_manifest(latest_tag, user, jenkins_build, branch, stable):
  45. log = cmd('git log --pretty=oneline {0}...HEAD'.format(latest_tag))
  46. manifest = {}
  47. manifest['commits'] = []
  48. for v in log.splitlines():
  49. manifest['commits'].append(v)
  50. manifest['tag'] = {
  51. 'name': latest_tag,
  52. 'description': get_tag_info(latest_tag)
  53. }
  54. manifest['version'] = cmd('git rev-list HEAD --count')
  55. manifest['sha1'] = cmd('git rev-parse HEAD')
  56. manifest['jenkins_build'] = jenkins_build
  57. manifest['user'] = user
  58. manifest['branch'] = branch
  59. manifest['stable'] = stable
  60. import cPickle
  61. with open('manifest', 'w') as f:
  62. cPickle.dump(manifest, f)
  63. def prepare_pkg(project, package_id):
  64. cmd('packagesutil --file "{0}" set package-1 identifier {1}'.format(project, package_id))
  65. cmd('packagesutil --file "{0}" set package-1 version {1}'.format(project, '1.0'))
  66. import argparse
  67. parser = argparse.ArgumentParser(description='obs-studio package util')
  68. parser.add_argument('-u', '--user', dest='user', default='jp9000')
  69. parser.add_argument('-p', '--package-id', dest='package_id', default='org.obsproject.pkg.obs-studio')
  70. parser.add_argument('-f', '--project-file', dest='project', default='OBS.pkgproj')
  71. parser.add_argument('-j', '--jenkins-build', dest='jenkins_build', default='0')
  72. parser.add_argument('-b', '--branch', dest='branch', default='master')
  73. parser.add_argument('-s', '--stable', dest='stable', required=False, action='store_true', default=False)
  74. args = parser.parse_args()
  75. latest_tag = cmd('git describe --tags --abbrev=0')
  76. gen_html(args.user, latest_tag)
  77. prepare_pkg(args.project, args.package_id)
  78. save_manifest(latest_tag, args.user, args.jenkins_build, args.branch, args.stable)