nspr-release-helper.py (6585B)
1 #!/usr/bin/python 2 # This Source Code Form is subject to the terms of the Mozilla Public 3 # License, v. 2.0. If a copy of the MPL was not distributed with this 4 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6 7 import os 8 import sys 9 import datetime 10 import shutil 11 import glob 12 from optparse import OptionParser 13 from subprocess import check_call 14 15 prinit_h = "pr/include/prinit.h" 16 f_conf = "configure" 17 f_conf_in = "configure.in" 18 19 def check_call_noisy(cmd, *args, **kwargs): 20 print("Executing command:", cmd) 21 check_call(cmd, *args, **kwargs) 22 23 o = OptionParser(usage="client.py [options] remove_beta | set_beta | print_library_versions | set_version_to_minor_release | set_version_to_patch_release | create_nspr_release_archive") 24 25 try: 26 options, args = o.parse_args() 27 action = args[0] 28 except IndexError: 29 o.print_help() 30 sys.exit(2) 31 32 def exit_with_failure(what): 33 print("failure: ", what) 34 sys.exit(2) 35 36 def check_files_exist(): 37 if (not os.path.exists(prinit_h)): 38 exit_with_failure("cannot find expected header files, must run from inside NSPR hg directory") 39 40 def sed_inplace(sed_expression, filename): 41 backup_file = filename + '.tmp' 42 check_call_noisy(["sed", "-i.tmp", sed_expression, filename]) 43 os.remove(backup_file) 44 45 def toggle_beta_status(is_beta): 46 check_files_exist() 47 if (is_beta): 48 print("adding Beta status to version numbers") 49 sed_inplace('s/^\\(#define *PR_VERSION *\"[0-9.]\\+\\)\" *$/\\1 Beta\"/', prinit_h) 50 sed_inplace('s/^\\(#define *PR_BETA *\\)PR_FALSE *$/\\1PR_TRUE/', prinit_h) 51 52 else: 53 print("removing Beta status from version numbers") 54 sed_inplace('s/^\\(#define *PR_VERSION *\"[0-9.]\\+\\) *Beta\" *$/\\1\"/', prinit_h) 55 sed_inplace('s/^\\(#define *PR_BETA *\\)PR_TRUE *$/\\1PR_FALSE/', prinit_h) 56 print("please run 'hg stat' and 'hg diff' to verify the files have been verified correctly") 57 58 def print_beta_versions(): 59 check_call_noisy(["egrep", "#define *PR_VERSION|#define *PR_BETA", prinit_h]) 60 61 def remove_beta_status(): 62 print("--- removing beta flags. Existing versions were:") 63 print_beta_versions() 64 toggle_beta_status(False) 65 print("--- finished modifications, new versions are:") 66 print_beta_versions() 67 68 def set_beta_status(): 69 print("--- adding beta flags. Existing versions were:") 70 print_beta_versions() 71 toggle_beta_status(True) 72 print("--- finished modifications, new versions are:") 73 print_beta_versions() 74 75 def print_library_versions(): 76 check_files_exist() 77 check_call_noisy(["egrep", "#define *PR_VERSION|#define PR_VMAJOR|#define *PR_VMINOR|#define *PR_VPATCH|#define *PR_BETA", prinit_h]) 78 79 def ensure_arguments_after_action(how_many, usage): 80 if (len(sys.argv) != (2+how_many)): 81 exit_with_failure("incorrect number of arguments, expected parameters are:\n" + usage) 82 83 def set_major_versions(major): 84 sed_inplace('s/^\\(#define *PR_VMAJOR *\\).*$/\\1' + major + '/', prinit_h) 85 sed_inplace('s/^MOD_MAJOR_VERSION=.*$/MOD_MAJOR_VERSION=' + major + '/', f_conf) 86 sed_inplace('s/^MOD_MAJOR_VERSION=.*$/MOD_MAJOR_VERSION=' + major + '/', f_conf_in) 87 88 def set_minor_versions(minor): 89 sed_inplace('s/^\\(#define *PR_VMINOR *\\).*$/\\1' + minor + '/', prinit_h) 90 sed_inplace('s/^MOD_MINOR_VERSION=.*$/MOD_MINOR_VERSION=' + minor + '/', f_conf) 91 sed_inplace('s/^MOD_MINOR_VERSION=.*$/MOD_MINOR_VERSION=' + minor + '/', f_conf_in) 92 93 def set_patch_versions(patch): 94 sed_inplace('s/^\\(#define *PR_VPATCH *\\).*$/\\1' + patch + '/', prinit_h) 95 sed_inplace('s/^MOD_PATCH_VERSION=.*$/MOD_PATCH_VERSION=' + patch + '/', f_conf) 96 sed_inplace('s/^MOD_PATCH_VERSION=.*$/MOD_PATCH_VERSION=' + patch + '/', f_conf_in) 97 98 def set_full_lib_versions(version): 99 sed_inplace('s/^\\(#define *PR_VERSION *\"\\)\\([0-9.]\\+\\)\\(.*\\)$/\\1' + version + '\\3/', prinit_h) 100 101 def set_all_lib_versions(version, major, minor, patch): 102 set_full_lib_versions(version) 103 set_major_versions(major) 104 set_minor_versions(minor) 105 set_patch_versions(patch) 106 print() 107 print("===========================") 108 print("======== ATTENTION ========") 109 print() 110 print("You *MUST* manually edit file pr/tests/vercheck.c") 111 print() 112 print("Edit two arrays, named compatible_version and incompatible_version") 113 print("according to the new version you're adding.") 114 print() 115 print("======== ATTENTION ========") 116 print("===========================") 117 118 def set_version_to_minor_release(): 119 ensure_arguments_after_action(2, "major_version minor_version") 120 major = args[1].strip() 121 minor = args[2].strip() 122 version = major + '.' + minor 123 patch = "0" 124 set_all_lib_versions(version, major, minor, patch) 125 126 def set_version_to_patch_release(): 127 ensure_arguments_after_action(3, "major_version minor_version patch_release") 128 major = args[1].strip() 129 minor = args[2].strip() 130 patch = args[3].strip() 131 version = major + '.' + minor + '.' + patch 132 set_all_lib_versions(version, major, minor, patch) 133 134 def create_nspr_release_archive(): 135 ensure_arguments_after_action(2, "nspr_release_version nspr_hg_release_tag") 136 nsprrel = args[1].strip() #e.g. 4.10.9 137 nsprreltag = args[2].strip() #e.g. NSPR_4_10_9_RTM 138 139 nspr_tar = "nspr-" + nsprrel + ".tar.gz" 140 nspr_stagedir="../stage/v" + nsprrel + "/src" 141 if (os.path.exists(nspr_stagedir)): 142 exit_with_failure("nspr stage directory already exists: " + nspr_stagedir) 143 144 check_call_noisy(["mkdir", "-p", nspr_stagedir]) 145 check_call_noisy(["hg", "archive", "-r", nsprreltag, "--prefix=nspr-" + nsprrel + "/nspr", 146 "../stage/v" + nsprrel + "/src/" + nspr_tar, "-X", ".hgtags"]) 147 print("changing to directory " + nspr_stagedir) 148 os.chdir(nspr_stagedir) 149 150 check_call("sha1sum " + nspr_tar + " > SHA1SUMS", shell=True) 151 check_call("sha256sum " + nspr_tar + " > SHA256SUMS", shell=True) 152 print("created directory " + nspr_stagedir + " with files:") 153 check_call_noisy(["ls", "-l"]) 154 155 if action in ('remove_beta'): 156 remove_beta_status() 157 158 elif action in ('set_beta'): 159 set_beta_status() 160 161 elif action in ('print_library_versions'): 162 print_library_versions() 163 164 # x.y version number - 2 parameters 165 elif action in ('set_version_to_minor_release'): 166 set_version_to_minor_release() 167 168 # x.y.z version number - 3 parameters 169 elif action in ('set_version_to_patch_release'): 170 set_version_to_patch_release() 171 172 elif action in ('create_nspr_release_archive'): 173 create_nspr_release_archive() 174 175 else: 176 o.print_help() 177 sys.exit(2) 178 179 sys.exit(0)