blob: 3d1eb0c3765fead1774bee03e2c6f14c8980b80b [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
"""
This script changes versions in every pom.xml and relevant files.
(How to run)
python change_version <reef_home> <reef_version_for_pom.xml> -s <true or false> (optional) -p
-s option changes value of 'IsSnapshot' in lang/cs/build.props.
If you use the option "-s false", bulid.props changes as,
<IsSnapshot>false</IsSnapshot>
<SnapshotNumber>00</SnapshotNumber>
If you use "-s true", then the value of 'IsSnapshot' is changed to true.
If you use "-p", then only the "pom.xml" files are changed.
You can also see how to run the script with "python change_version.py -h"
(Example)
python change_version ~/reef 0.14.0 -s true
python change_version ~/reef 0.14.0 -s false
python change_version ~/reef 0.14.0 -p -s true
"""
import os
import re
import sys
import argparse
"""
Get list of path for every file in a directory
"""
def get_filepaths(directory):
file_paths = []
for root, directories, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
"""
Change REEF version to new_version in every pom.xml
"""
def change_pom(file, new_version):
changed_str = ""
ready_to_change = False
f = open(file, 'r')
while True:
line = f.readline()
if not line:
break
if "<groupId>org.apache.reef</groupId>" in line:
ready_to_change = True
if "<version>" in line and ready_to_change:
break
changed_str += line
r = re.compile('<version>(.*?)</version>')
m = r.search(line)
old_version = m.group(1)
changed_str += line.replace(old_version, new_version)
while True:
line = f.readline()
if not line:
break
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
"""
Change JavaBridgeJarFileName in lang/cs/Org.Apache.REEF.Driver/DriverConfigGenerator.cs
"""
def change_constants_cs(file, new_version):
changed_str = ""
f = open(file, 'r')
while True:
line = f.readline()
if not line:
break
if "JavaBridgeJarFileName =" in line:
r = re.compile('"(.*?)"')
m = r.search(line)
old_version = m.group(1)
new_version = "reef-bridge-java-" + new_version + "-shaded.jar"
changed_str += line.replace(old_version, new_version)
else:
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
"""
Change version in every AssemblyInfo.cs and AssemblyInfo.cpp
"""
def change_assembly_info_cs(file, new_version):
changed_str = ""
new_version = new_version.split("-")[0] + ".0"
f = open(file, 'r')
r = re.compile('"(.*?)"')
while True:
line = f.readline()
if not line:
break
if ("[assembly: AssemblyVersion(" in line and "*" not in line) or ("[assembly: AssemblyFileVersion(" in line) \
or ("[assembly:AssemblyVersionAttribute(" in line and "*" not in line) \
or ("[assembly:AssemblyFileVersion(" in line):
m = r.search(line)
old_version = m.group(1)
changed_str += line.replace(old_version, new_version)
else:
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
"""
Read 'IsSnapshot' from lang/cs/build.props
"""
def read_is_snapshot(file):
f = open(file, 'r')
r = re.compile('<IsSnapshot>(.*?)</IsSnapshot>')
while True:
line = f.readline()
if not line:
break
if "<IsSnapshot>" in line and "</IsSnapshot>" in line:
m = r.search(line)
if(m.group(1)=="true"):
return True
else:
return False
f.close()
"""
Change lang/cs/build.props for the release branch
"""
def change_build_props(file, is_snapshot):
changed_str = ""
f = open(file, 'r')
r1 = re.compile('<IsSnapshot>(.*?)</IsSnapshot>')
r2 = re.compile('<SnapshotNumber>(.*?)</SnapshotNumber>')
while True:
line = f.readline()
if not line:
break
if "<IsSnapshot>" in line and "</IsSnapshot>" in line:
old_is_snapshot = r1.search(line).group(1)
changed_str += line.replace(old_is_snapshot, is_snapshot)
elif "<SnapshotNumber>" in line and "</SnapshotNumber>" in line:
old_snapshot_number = r2.search(line).group(1)
if is_snapshot=="false":
changed_str += line.replace(old_snapshot_number, "00")
else:
changed_str += line.replace(old_snapshot_number, "01")
else:
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
print file
"""
Change the name of shaded.jar in run.cmd and lang/cs/Org.Apache.REEF.Client/Properties/Resources.xml
"""
def change_shaded_jar_name(file, new_version):
changed_str = ""
f = open(file, 'r')
r1 = re.compile('reef-bridge-java-(.*?)-shaded.jar')
r2 = re.compile('reef-bridge-client-(.*?)-shaded.jar')
while True:
line = f.readline()
if not line:
break
m1 = r1.search(line)
m2 = r2.search(line)
if m1 is not None:
changed_str += line.replace(m1.group(1), new_version)
elif m2 is not None:
changed_str += line.replace(m2.group(1), new_version)
else:
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
"""
Change the version in Doxyfile
"""
def change_project_number_Doxyfile(file, new_version):
changed_str = ""
f = open(file, 'r')
while True:
line = f.readline()
if not line:
break
if "PROJECT_NUMBER = " in line:
r = re.compile('= (.*?)$')
m = r.search(line)
old_version = m.group(1)
changed_str += line.replace(old_version, new_version)
else:
changed_str += line
f.close()
f = open(file, 'w')
f.write(changed_str)
f.close()
"""
Change version of every pom.xml, every AssemblyInfo.cs,
AssemblyInfo.cpp, run.cmd and Resources.xml
"""
def change_version(reef_home, new_version, pom_only):
if pom_only:
for fi in get_filepaths(reef_home):
if "pom.xml" in fi:
print fi
change_pom(fi, new_version)
else:
for fi in get_filepaths(reef_home):
if "pom.xml" in fi:
print fi
change_pom(fi, new_version)
if "AssemblyInfo.cs" in fi:
print fi
change_assembly_info_cs(fi, new_version)
change_assembly_info_cs(reef_home + "/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp", new_version)
print reef_home + "/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp"
change_assembly_info_cs(reef_home + "/lang/cs/Org.Apache.REEF.ClrDriver/AssemblyInfo.cpp", new_version)
print reef_home + "/lang/cs/Org.Apache.REEF.ClrDriver/AssemblyInfo.cpp"
change_constants_cs(reef_home + "/lang/cs/Org.Apache.REEF.Driver/DriverConfigGenerator.cs", new_version)
print reef_home + "/lang/cs/Org.Apache.REEF.Driver/DriverConfigGenerator.cs"
change_shaded_jar_name(reef_home + "/lang/cs/Org.Apache.REEF.Client/Properties/Resources.xml", new_version)
print reef_home + "/lang/cs/Org.Apache.REEF.Client/Properties/Resources.xml"
change_shaded_jar_name(reef_home + "/lang/cs/Org.Apache.REEF.Client/run.cmd", new_version)
print reef_home + "/lang/cs/Org.Apache.REEF.Client/run.cmd"
change_project_number_Doxyfile(reef_home + "/Doxyfile", new_version)
print reef_home + "/Doxyfile"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Script for changing REEF version in all files that use it")
parser.add_argument("reef_home", type=str, help="REEF home")
parser.add_argument("reef_version", type=str, help="REEF version")
parser.add_argument("-s", "--isSnapshot", type=str, metavar="<true or false>", help="Change 'IsSnapshot' to true or false", required=True)
parser.add_argument("-p", "--pomonly", help="Change only poms", action="store_true")
args = parser.parse_args()
reef_home = os.path.abspath(args.reef_home)
reef_version = args.reef_version
is_snapshot = args.isSnapshot
pom_only = args.pomonly
if is_snapshot is not None and not pom_only:
change_build_props(reef_home + "/lang/cs/build.props", is_snapshot)
if is_snapshot=="true":
reef_version += "-SNAPSHOT"
change_version(reef_home, reef_version, pom_only)