1*1b3f573fSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*1b3f573fSAndroid Build Coastguard Worker# Usage: ./update_version.py <MAJOR>.<MINOR>.<MICRO> [<RC version>] 3*1b3f573fSAndroid Build Coastguard Worker# 4*1b3f573fSAndroid Build Coastguard Worker# Example: 5*1b3f573fSAndroid Build Coastguard Worker# ./update_version.py 3.7.1 2 6*1b3f573fSAndroid Build Coastguard Worker# => Version will become 3.7.1-rc-2 (beta) 7*1b3f573fSAndroid Build Coastguard Worker# ./update_version.py 3.7.1 8*1b3f573fSAndroid Build Coastguard Worker# => Version will become 3.7.1 (stable) 9*1b3f573fSAndroid Build Coastguard Worker 10*1b3f573fSAndroid Build Coastguard Workerimport datetime 11*1b3f573fSAndroid Build Coastguard Workerimport re 12*1b3f573fSAndroid Build Coastguard Workerimport sys 13*1b3f573fSAndroid Build Coastguard Workerfrom xml.dom import minidom 14*1b3f573fSAndroid Build Coastguard Worker 15*1b3f573fSAndroid Build Coastguard Workerif len(sys.argv) < 2 or len(sys.argv) > 3: 16*1b3f573fSAndroid Build Coastguard Worker print(""" 17*1b3f573fSAndroid Build Coastguard Worker[ERROR] Please specify a version. 18*1b3f573fSAndroid Build Coastguard Worker 19*1b3f573fSAndroid Build Coastguard Worker./update_version.py <MAJOR>.<MINOR>.<MICRO> [<RC version>] 20*1b3f573fSAndroid Build Coastguard Worker 21*1b3f573fSAndroid Build Coastguard WorkerExample: 22*1b3f573fSAndroid Build Coastguard Worker./update_version.py 3.7.1 2 23*1b3f573fSAndroid Build Coastguard Worker""") 24*1b3f573fSAndroid Build Coastguard Worker exit(1) 25*1b3f573fSAndroid Build Coastguard Worker 26*1b3f573fSAndroid Build Coastguard WorkerNEW_VERSION = sys.argv[1] 27*1b3f573fSAndroid Build Coastguard WorkerNEW_VERSION_INFO = [int(x) for x in NEW_VERSION.split('.')] 28*1b3f573fSAndroid Build Coastguard Workerif len(NEW_VERSION_INFO) != 3: 29*1b3f573fSAndroid Build Coastguard Worker print(""" 30*1b3f573fSAndroid Build Coastguard Worker[ERROR] Version must be in the format <MAJOR>.<MINOR>.<MICRO> 31*1b3f573fSAndroid Build Coastguard Worker 32*1b3f573fSAndroid Build Coastguard WorkerExample: 33*1b3f573fSAndroid Build Coastguard Worker./update_version.py 3.7.3 34*1b3f573fSAndroid Build Coastguard Worker""") 35*1b3f573fSAndroid Build Coastguard Worker exit(1) 36*1b3f573fSAndroid Build Coastguard Worker 37*1b3f573fSAndroid Build Coastguard WorkerRC_VERSION = -1 38*1b3f573fSAndroid Build Coastguard Workerif len(sys.argv) > 2: 39*1b3f573fSAndroid Build Coastguard Worker RC_VERSION = int(sys.argv[2]) 40*1b3f573fSAndroid Build Coastguard Worker 41*1b3f573fSAndroid Build Coastguard Worker 42*1b3f573fSAndroid Build Coastguard Workerdef Find(elem, tagname): 43*1b3f573fSAndroid Build Coastguard Worker for child in elem.childNodes: 44*1b3f573fSAndroid Build Coastguard Worker if child.nodeName == tagname: 45*1b3f573fSAndroid Build Coastguard Worker return child 46*1b3f573fSAndroid Build Coastguard Worker return None 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker 49*1b3f573fSAndroid Build Coastguard Workerdef FindAndClone(elem, tagname): 50*1b3f573fSAndroid Build Coastguard Worker return Find(elem, tagname).cloneNode(True) 51*1b3f573fSAndroid Build Coastguard Worker 52*1b3f573fSAndroid Build Coastguard Worker 53*1b3f573fSAndroid Build Coastguard Workerdef ReplaceText(elem, text): 54*1b3f573fSAndroid Build Coastguard Worker elem.firstChild.replaceWholeText(text) 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Worker 57*1b3f573fSAndroid Build Coastguard Workerdef GetFullVersion(rc_suffix = '-rc-'): 58*1b3f573fSAndroid Build Coastguard Worker if RC_VERSION < 0: 59*1b3f573fSAndroid Build Coastguard Worker return NEW_VERSION 60*1b3f573fSAndroid Build Coastguard Worker else: 61*1b3f573fSAndroid Build Coastguard Worker return '%s%s%s' % (NEW_VERSION, rc_suffix, RC_VERSION) 62*1b3f573fSAndroid Build Coastguard Worker 63*1b3f573fSAndroid Build Coastguard Worker 64*1b3f573fSAndroid Build Coastguard Workerdef GetSharedObjectVersion(): 65*1b3f573fSAndroid Build Coastguard Worker protobuf_version_offset = 11 66*1b3f573fSAndroid Build Coastguard Worker expected_major_version = 3 67*1b3f573fSAndroid Build Coastguard Worker if NEW_VERSION_INFO[0] != expected_major_version: 68*1b3f573fSAndroid Build Coastguard Worker print("""[ERROR] Major protobuf version has changed. Please update 69*1b3f573fSAndroid Build Coastguard Workerupdate_version.py to readjust the protobuf_version_offset and 70*1b3f573fSAndroid Build Coastguard Workerexpected_major_version such that the PROTOBUF_VERSION in src/Makefile.am is 71*1b3f573fSAndroid Build Coastguard Workeralways increasing. 72*1b3f573fSAndroid Build Coastguard Worker """) 73*1b3f573fSAndroid Build Coastguard Worker exit(1) 74*1b3f573fSAndroid Build Coastguard Worker return [NEW_VERSION_INFO[1] + protobuf_version_offset, NEW_VERSION_INFO[2], 0] 75*1b3f573fSAndroid Build Coastguard Worker 76*1b3f573fSAndroid Build Coastguard Worker 77*1b3f573fSAndroid Build Coastguard Workerdef RewriteXml(filename, rewriter, add_xml_prefix=True): 78*1b3f573fSAndroid Build Coastguard Worker document = minidom.parse(filename) 79*1b3f573fSAndroid Build Coastguard Worker rewriter(document) 80*1b3f573fSAndroid Build Coastguard Worker # document.toxml() always prepend the XML version without inserting new line. 81*1b3f573fSAndroid Build Coastguard Worker # We wants to preserve as much of the original formatting as possible, so we 82*1b3f573fSAndroid Build Coastguard Worker # will remove the default XML version and replace it with our custom one when 83*1b3f573fSAndroid Build Coastguard Worker # wherever necessary. 84*1b3f573fSAndroid Build Coastguard Worker content = document.toxml().replace('<?xml version="1.0" ?>', '') 85*1b3f573fSAndroid Build Coastguard Worker file_handle = open(filename, 'wb') 86*1b3f573fSAndroid Build Coastguard Worker if add_xml_prefix: 87*1b3f573fSAndroid Build Coastguard Worker file_handle.write(b'<?xml version="1.0" encoding="UTF-8"?>\n') 88*1b3f573fSAndroid Build Coastguard Worker file_handle.write(content.encode('utf-8')) 89*1b3f573fSAndroid Build Coastguard Worker file_handle.write(b'\n') 90*1b3f573fSAndroid Build Coastguard Worker file_handle.close() 91*1b3f573fSAndroid Build Coastguard Worker 92*1b3f573fSAndroid Build Coastguard Worker 93*1b3f573fSAndroid Build Coastguard Workerdef RewriteTextFile(filename, line_rewriter): 94*1b3f573fSAndroid Build Coastguard Worker lines = open(filename, 'r').readlines() 95*1b3f573fSAndroid Build Coastguard Worker updated_lines = [] 96*1b3f573fSAndroid Build Coastguard Worker for line in lines: 97*1b3f573fSAndroid Build Coastguard Worker updated_lines.append(line_rewriter(line)) 98*1b3f573fSAndroid Build Coastguard Worker if lines == updated_lines: 99*1b3f573fSAndroid Build Coastguard Worker print('%s was not updated. Please double check.' % filename) 100*1b3f573fSAndroid Build Coastguard Worker f = open(filename, 'w') 101*1b3f573fSAndroid Build Coastguard Worker f.write(''.join(updated_lines)) 102*1b3f573fSAndroid Build Coastguard Worker f.close() 103*1b3f573fSAndroid Build Coastguard Worker 104*1b3f573fSAndroid Build Coastguard Worker 105*1b3f573fSAndroid Build Coastguard Workerdef UpdateCMake(): 106*1b3f573fSAndroid Build Coastguard Worker cmake_files = ( 107*1b3f573fSAndroid Build Coastguard Worker 'cmake/libprotobuf.cmake', 108*1b3f573fSAndroid Build Coastguard Worker 'cmake/libprotobuf-lite.cmake', 109*1b3f573fSAndroid Build Coastguard Worker 'cmake/libprotoc.cmake' 110*1b3f573fSAndroid Build Coastguard Worker ) 111*1b3f573fSAndroid Build Coastguard Worker for cmake_file in cmake_files: 112*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile(cmake_file, 113*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 114*1b3f573fSAndroid Build Coastguard Worker r'SOVERSION ([0-9]+)$', 115*1b3f573fSAndroid Build Coastguard Worker 'SOVERSION %s' % GetSharedObjectVersion()[0], 116*1b3f573fSAndroid Build Coastguard Worker line)) 117*1b3f573fSAndroid Build Coastguard Worker 118*1b3f573fSAndroid Build Coastguard Worker 119*1b3f573fSAndroid Build Coastguard Workerdef UpdateConfigure(): 120*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('configure.ac', 121*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 122*1b3f573fSAndroid Build Coastguard Worker r'^AC_INIT\(\[Protocol Buffers\],\[.*\],\[[email protected]\],\[protobuf\]\)$', 123*1b3f573fSAndroid Build Coastguard Worker ('AC_INIT([Protocol Buffers],[%s],[[email protected]],[protobuf])' 124*1b3f573fSAndroid Build Coastguard Worker % GetFullVersion()), 125*1b3f573fSAndroid Build Coastguard Worker line)) 126*1b3f573fSAndroid Build Coastguard Worker 127*1b3f573fSAndroid Build Coastguard Worker 128*1b3f573fSAndroid Build Coastguard Workerdef UpdateCpp(): 129*1b3f573fSAndroid Build Coastguard Worker cpp_version = '%d%03d%03d' % ( 130*1b3f573fSAndroid Build Coastguard Worker NEW_VERSION_INFO[0], NEW_VERSION_INFO[1], NEW_VERSION_INFO[2]) 131*1b3f573fSAndroid Build Coastguard Worker version_suffix = '' 132*1b3f573fSAndroid Build Coastguard Worker if RC_VERSION != -1: 133*1b3f573fSAndroid Build Coastguard Worker version_suffix = '-rc%s' % RC_VERSION 134*1b3f573fSAndroid Build Coastguard Worker def RewriteCommon(line): 135*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 136*1b3f573fSAndroid Build Coastguard Worker r'^#define GOOGLE_PROTOBUF_VERSION .*$', 137*1b3f573fSAndroid Build Coastguard Worker '#define GOOGLE_PROTOBUF_VERSION %s' % cpp_version, 138*1b3f573fSAndroid Build Coastguard Worker line) 139*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 140*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_VERSION .*$', 141*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_VERSION %s' % cpp_version, 142*1b3f573fSAndroid Build Coastguard Worker line) 143*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 144*1b3f573fSAndroid Build Coastguard Worker r'^#define GOOGLE_PROTOBUF_VERSION_SUFFIX .*$', 145*1b3f573fSAndroid Build Coastguard Worker '#define GOOGLE_PROTOBUF_VERSION_SUFFIX "%s"' % version_suffix, 146*1b3f573fSAndroid Build Coastguard Worker line) 147*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 148*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_VERSION_SUFFIX .*$', 149*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_VERSION_SUFFIX "%s"' % version_suffix, 150*1b3f573fSAndroid Build Coastguard Worker line) 151*1b3f573fSAndroid Build Coastguard Worker if NEW_VERSION_INFO[2] == 0: 152*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 153*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC .*$', 154*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC %s' % cpp_version, 155*1b3f573fSAndroid Build Coastguard Worker line) 156*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 157*1b3f573fSAndroid Build Coastguard Worker r'^#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION .*$', 158*1b3f573fSAndroid Build Coastguard Worker '#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION %s' % cpp_version, 159*1b3f573fSAndroid Build Coastguard Worker line) 160*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 161*1b3f573fSAndroid Build Coastguard Worker r'^static const int kMinHeaderVersionForLibrary = .*$', 162*1b3f573fSAndroid Build Coastguard Worker 'static const int kMinHeaderVersionForLibrary = %s;' % cpp_version, 163*1b3f573fSAndroid Build Coastguard Worker line) 164*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 165*1b3f573fSAndroid Build Coastguard Worker r'^static const int kMinHeaderVersionForProtoc = .*$', 166*1b3f573fSAndroid Build Coastguard Worker 'static const int kMinHeaderVersionForProtoc = %s;' % cpp_version, 167*1b3f573fSAndroid Build Coastguard Worker line) 168*1b3f573fSAndroid Build Coastguard Worker return line 169*1b3f573fSAndroid Build Coastguard Worker 170*1b3f573fSAndroid Build Coastguard Worker def RewritePortDef(line): 171*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 172*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_VERSION .*$', 173*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_VERSION %s' % cpp_version, 174*1b3f573fSAndroid Build Coastguard Worker line) 175*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 176*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_VERSION_SUFFIX .*$', 177*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_VERSION_SUFFIX "%s"' % version_suffix, 178*1b3f573fSAndroid Build Coastguard Worker line) 179*1b3f573fSAndroid Build Coastguard Worker if NEW_VERSION_INFO[2] == 0: 180*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 181*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC .*$', 182*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_MIN_HEADER_VERSION_FOR_PROTOC %s' % cpp_version, 183*1b3f573fSAndroid Build Coastguard Worker line) 184*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 185*1b3f573fSAndroid Build Coastguard Worker r'^#define PROTOBUF_MIN_PROTOC_VERSION .*$', 186*1b3f573fSAndroid Build Coastguard Worker '#define PROTOBUF_MIN_PROTOC_VERSION %s' % cpp_version, 187*1b3f573fSAndroid Build Coastguard Worker line) 188*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 189*1b3f573fSAndroid Build Coastguard Worker r'^#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION .*$', 190*1b3f573fSAndroid Build Coastguard Worker '#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION %s' % cpp_version, 191*1b3f573fSAndroid Build Coastguard Worker line) 192*1b3f573fSAndroid Build Coastguard Worker return line 193*1b3f573fSAndroid Build Coastguard Worker 194*1b3f573fSAndroid Build Coastguard Worker def RewritePbH(line): 195*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 196*1b3f573fSAndroid Build Coastguard Worker r'^#if PROTOBUF_VERSION < .*$', 197*1b3f573fSAndroid Build Coastguard Worker '#if PROTOBUF_VERSION < %s' % cpp_version, 198*1b3f573fSAndroid Build Coastguard Worker line) 199*1b3f573fSAndroid Build Coastguard Worker line = re.sub( 200*1b3f573fSAndroid Build Coastguard Worker r'^#if .* < PROTOBUF_MIN_PROTOC_VERSION$', 201*1b3f573fSAndroid Build Coastguard Worker '#if %s < PROTOBUF_MIN_PROTOC_VERSION' % cpp_version, 202*1b3f573fSAndroid Build Coastguard Worker line) 203*1b3f573fSAndroid Build Coastguard Worker return line 204*1b3f573fSAndroid Build Coastguard Worker 205*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('src/google/protobuf/stubs/common.h', RewriteCommon) 206*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('src/google/protobuf/port_def.inc', RewritePortDef) 207*1b3f573fSAndroid Build Coastguard Worker 208*1b3f573fSAndroid Build Coastguard Worker 209*1b3f573fSAndroid Build Coastguard Workerdef UpdateCsharp(): 210*1b3f573fSAndroid Build Coastguard Worker RewriteXml('csharp/src/Google.Protobuf/Google.Protobuf.csproj', 211*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 212*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'PropertyGroup'), 'VersionPrefix'), 213*1b3f573fSAndroid Build Coastguard Worker GetFullVersion(rc_suffix = '-rc')), 214*1b3f573fSAndroid Build Coastguard Worker add_xml_prefix=False) 215*1b3f573fSAndroid Build Coastguard Worker 216*1b3f573fSAndroid Build Coastguard Worker RewriteXml('csharp/Google.Protobuf.Tools.nuspec', 217*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 218*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'metadata'), 'version'), 219*1b3f573fSAndroid Build Coastguard Worker GetFullVersion(rc_suffix = '-rc'))) 220*1b3f573fSAndroid Build Coastguard Worker 221*1b3f573fSAndroid Build Coastguard Worker 222*1b3f573fSAndroid Build Coastguard Workerdef UpdateJava(): 223*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/pom.xml', 224*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 225*1b3f573fSAndroid Build Coastguard Worker Find(document.documentElement, 'version'), GetFullVersion())) 226*1b3f573fSAndroid Build Coastguard Worker 227*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/bom/pom.xml', 228*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 229*1b3f573fSAndroid Build Coastguard Worker Find(document.documentElement, 'version'), GetFullVersion())) 230*1b3f573fSAndroid Build Coastguard Worker 231*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/core/pom.xml', 232*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 233*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'parent'), 'version'), 234*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 235*1b3f573fSAndroid Build Coastguard Worker 236*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/lite/pom.xml', 237*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 238*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'parent'), 'version'), 239*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 240*1b3f573fSAndroid Build Coastguard Worker 241*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/util/pom.xml', 242*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 243*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'parent'), 'version'), 244*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 245*1b3f573fSAndroid Build Coastguard Worker 246*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/kotlin/pom.xml', 247*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 248*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'parent'), 'version'), 249*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 250*1b3f573fSAndroid Build Coastguard Worker 251*1b3f573fSAndroid Build Coastguard Worker RewriteXml('java/kotlin-lite/pom.xml', 252*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 253*1b3f573fSAndroid Build Coastguard Worker Find(Find(document.documentElement, 'parent'), 'version'), 254*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 255*1b3f573fSAndroid Build Coastguard Worker 256*1b3f573fSAndroid Build Coastguard Worker RewriteXml('protoc-artifacts/pom.xml', 257*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 258*1b3f573fSAndroid Build Coastguard Worker Find(document.documentElement, 'version'), GetFullVersion())) 259*1b3f573fSAndroid Build Coastguard Worker 260*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('java/README.md', 261*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 262*1b3f573fSAndroid Build Coastguard Worker r'<version>.*</version>', 263*1b3f573fSAndroid Build Coastguard Worker '<version>%s</version>' % GetFullVersion(), 264*1b3f573fSAndroid Build Coastguard Worker line)) 265*1b3f573fSAndroid Build Coastguard Worker 266*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('java/README.md', 267*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 268*1b3f573fSAndroid Build Coastguard Worker r'implementation \'com.google.protobuf:protobuf-java:.*\'', 269*1b3f573fSAndroid Build Coastguard Worker 'implementation \'com.google.protobuf:protobuf-java:%s\'' % GetFullVersion(), 270*1b3f573fSAndroid Build Coastguard Worker line)) 271*1b3f573fSAndroid Build Coastguard Worker 272*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('java/lite.md', 273*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 274*1b3f573fSAndroid Build Coastguard Worker r'<version>.*</version>', 275*1b3f573fSAndroid Build Coastguard Worker '<version>%s</version>' % GetFullVersion(), 276*1b3f573fSAndroid Build Coastguard Worker line)) 277*1b3f573fSAndroid Build Coastguard Worker 278*1b3f573fSAndroid Build Coastguard Worker 279*1b3f573fSAndroid Build Coastguard Workerdef UpdateMakefile(): 280*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('src/Makefile.am', 281*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 282*1b3f573fSAndroid Build Coastguard Worker r'^PROTOBUF_VERSION = .*$', 283*1b3f573fSAndroid Build Coastguard Worker 'PROTOBUF_VERSION = %s' % ":".join(map(str,GetSharedObjectVersion())), 284*1b3f573fSAndroid Build Coastguard Worker line)) 285*1b3f573fSAndroid Build Coastguard Worker 286*1b3f573fSAndroid Build Coastguard Worker 287*1b3f573fSAndroid Build Coastguard Workerdef UpdateObjectiveC(): 288*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('Protobuf.podspec', 289*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 290*1b3f573fSAndroid Build Coastguard Worker r"^ s.version = '.*'$", 291*1b3f573fSAndroid Build Coastguard Worker " s.version = '%s'" % GetFullVersion(rc_suffix = '-rc'), 292*1b3f573fSAndroid Build Coastguard Worker line)) 293*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('Protobuf-C++.podspec', 294*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 295*1b3f573fSAndroid Build Coastguard Worker r"^ s.version = '.*'$", 296*1b3f573fSAndroid Build Coastguard Worker " s.version = '%s'" % GetFullVersion(rc_suffix = '-rc'), 297*1b3f573fSAndroid Build Coastguard Worker line)) 298*1b3f573fSAndroid Build Coastguard Worker 299*1b3f573fSAndroid Build Coastguard Worker 300*1b3f573fSAndroid Build Coastguard Workerdef UpdatePhp(): 301*1b3f573fSAndroid Build Coastguard Worker def Callback(document): 302*1b3f573fSAndroid Build Coastguard Worker def CreateNode(tagname, indent, children): 303*1b3f573fSAndroid Build Coastguard Worker elem = document.createElement(tagname) 304*1b3f573fSAndroid Build Coastguard Worker indent += 1 305*1b3f573fSAndroid Build Coastguard Worker for child in children: 306*1b3f573fSAndroid Build Coastguard Worker elem.appendChild(document.createTextNode('\n' + (' ' * indent))) 307*1b3f573fSAndroid Build Coastguard Worker elem.appendChild(child) 308*1b3f573fSAndroid Build Coastguard Worker indent -= 1 309*1b3f573fSAndroid Build Coastguard Worker elem.appendChild(document.createTextNode('\n' + (' ' * indent))) 310*1b3f573fSAndroid Build Coastguard Worker return elem 311*1b3f573fSAndroid Build Coastguard Worker 312*1b3f573fSAndroid Build Coastguard Worker root = document.documentElement 313*1b3f573fSAndroid Build Coastguard Worker now = datetime.datetime.now() 314*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(root, 'date'), now.strftime('%Y-%m-%d')) 315*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(root, 'time'), now.strftime('%H:%M:%S')) 316*1b3f573fSAndroid Build Coastguard Worker version = Find(root, 'version') 317*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(version, 'release'), GetFullVersion(rc_suffix = 'RC')) 318*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(version, 'api'), NEW_VERSION) 319*1b3f573fSAndroid Build Coastguard Worker stability = Find(root, 'stability') 320*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(stability, 'release'), 321*1b3f573fSAndroid Build Coastguard Worker 'stable' if RC_VERSION < 0 else 'beta') 322*1b3f573fSAndroid Build Coastguard Worker ReplaceText(Find(stability, 'api'), 'stable' if RC_VERSION < 0 else 'beta') 323*1b3f573fSAndroid Build Coastguard Worker changelog = Find(root, 'changelog') 324*1b3f573fSAndroid Build Coastguard Worker for old_version in changelog.getElementsByTagName('version'): 325*1b3f573fSAndroid Build Coastguard Worker if Find(old_version, 'release').firstChild.nodeValue == NEW_VERSION: 326*1b3f573fSAndroid Build Coastguard Worker print ('[WARNING] Version %s already exists in the change log.' 327*1b3f573fSAndroid Build Coastguard Worker % NEW_VERSION) 328*1b3f573fSAndroid Build Coastguard Worker return 329*1b3f573fSAndroid Build Coastguard Worker if RC_VERSION != 0: 330*1b3f573fSAndroid Build Coastguard Worker changelog.appendChild(document.createTextNode(' ')) 331*1b3f573fSAndroid Build Coastguard Worker release = CreateNode('release', 2, [ 332*1b3f573fSAndroid Build Coastguard Worker CreateNode('version', 3, [ 333*1b3f573fSAndroid Build Coastguard Worker FindAndClone(version, 'release'), 334*1b3f573fSAndroid Build Coastguard Worker FindAndClone(version, 'api') 335*1b3f573fSAndroid Build Coastguard Worker ]), 336*1b3f573fSAndroid Build Coastguard Worker CreateNode('stability', 3, [ 337*1b3f573fSAndroid Build Coastguard Worker FindAndClone(stability, 'release'), 338*1b3f573fSAndroid Build Coastguard Worker FindAndClone(stability, 'api') 339*1b3f573fSAndroid Build Coastguard Worker ]), 340*1b3f573fSAndroid Build Coastguard Worker FindAndClone(root, 'date'), 341*1b3f573fSAndroid Build Coastguard Worker FindAndClone(root, 'time'), 342*1b3f573fSAndroid Build Coastguard Worker FindAndClone(root, 'license'), 343*1b3f573fSAndroid Build Coastguard Worker CreateNode('notes', 3, []), 344*1b3f573fSAndroid Build Coastguard Worker ]) 345*1b3f573fSAndroid Build Coastguard Worker changelog.appendChild(release) 346*1b3f573fSAndroid Build Coastguard Worker changelog.appendChild(document.createTextNode('\n ')) 347*1b3f573fSAndroid Build Coastguard Worker RewriteXml('php/ext/google/protobuf/package.xml', Callback) 348*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('php/ext/google/protobuf/protobuf.h', 349*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 350*1b3f573fSAndroid Build Coastguard Worker r"^#define PHP_PROTOBUF_VERSION .*$", 351*1b3f573fSAndroid Build Coastguard Worker "#define PHP_PROTOBUF_VERSION \"%s\"" % GetFullVersion(rc_suffix = 'RC'), 352*1b3f573fSAndroid Build Coastguard Worker line)) 353*1b3f573fSAndroid Build Coastguard Worker 354*1b3f573fSAndroid Build Coastguard Workerdef UpdatePython(): 355*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('python/google/protobuf/__init__.py', 356*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 357*1b3f573fSAndroid Build Coastguard Worker r"^__version__ = '.*'$", 358*1b3f573fSAndroid Build Coastguard Worker "__version__ = '%s'" % GetFullVersion(rc_suffix = 'rc'), 359*1b3f573fSAndroid Build Coastguard Worker line)) 360*1b3f573fSAndroid Build Coastguard Worker 361*1b3f573fSAndroid Build Coastguard Workerdef UpdateRuby(): 362*1b3f573fSAndroid Build Coastguard Worker RewriteXml('ruby/pom.xml', 363*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 364*1b3f573fSAndroid Build Coastguard Worker Find(document.documentElement, 'version'), GetFullVersion())) 365*1b3f573fSAndroid Build Coastguard Worker RewriteXml('ruby/pom.xml', 366*1b3f573fSAndroid Build Coastguard Worker lambda document : ReplaceText( 367*1b3f573fSAndroid Build Coastguard Worker Find(Find(Find(document.documentElement, 'dependencies'), 'dependency'), 'version'), 368*1b3f573fSAndroid Build Coastguard Worker GetFullVersion())) 369*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('ruby/google-protobuf.gemspec', 370*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 371*1b3f573fSAndroid Build Coastguard Worker r'^ s.version = ".*"$', 372*1b3f573fSAndroid Build Coastguard Worker ' s.version = "%s"' % GetFullVersion(rc_suffix = '.rc.'), 373*1b3f573fSAndroid Build Coastguard Worker line)) 374*1b3f573fSAndroid Build Coastguard Worker 375*1b3f573fSAndroid Build Coastguard Workerdef UpdateBazel(): 376*1b3f573fSAndroid Build Coastguard Worker RewriteTextFile('protobuf_version.bzl', 377*1b3f573fSAndroid Build Coastguard Worker lambda line : re.sub( 378*1b3f573fSAndroid Build Coastguard Worker r"^PROTOBUF_VERSION = '.*'$", 379*1b3f573fSAndroid Build Coastguard Worker "PROTOBUF_VERSION = '%s'" % GetFullVersion(), 380*1b3f573fSAndroid Build Coastguard Worker line)) 381*1b3f573fSAndroid Build Coastguard Worker 382*1b3f573fSAndroid Build Coastguard Worker 383*1b3f573fSAndroid Build Coastguard WorkerUpdateCMake() 384*1b3f573fSAndroid Build Coastguard WorkerUpdateConfigure() 385*1b3f573fSAndroid Build Coastguard WorkerUpdateCsharp() 386*1b3f573fSAndroid Build Coastguard WorkerUpdateCpp() 387*1b3f573fSAndroid Build Coastguard WorkerUpdateJava() 388*1b3f573fSAndroid Build Coastguard WorkerUpdateMakefile() 389*1b3f573fSAndroid Build Coastguard WorkerUpdateObjectiveC() 390*1b3f573fSAndroid Build Coastguard WorkerUpdatePhp() 391*1b3f573fSAndroid Build Coastguard WorkerUpdatePython() 392*1b3f573fSAndroid Build Coastguard WorkerUpdateRuby() 393*1b3f573fSAndroid Build Coastguard WorkerUpdateBazel() 394