xref: /aosp_15_r20/external/cronet/third_party/protobuf/update_version.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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