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