in build_defs/stamp_plugin_xml.py [0:0]
def main():
args = parser.parse_args()
if args.plugin_xml:
dom = minidom.parse(args.plugin_xml)
else:
dom = minidom.parseString("<idea-plugin/>")
since_build_numbers = {}
until_build_numbers = {}
if args.since_build_numbers:
since_build_numbers = parse_key_value_items(args.since_build_numbers)
if args.until_build_numbers:
until_build_numbers = parse_key_value_items(args.until_build_numbers)
is_eap = False
with open(args.api_version_txt) as f:
api_version = f.readline().strip()
if api_version.endswith(" EAP"):
is_eap = True
api_version = api_version[:-4]
new_elements = []
idea_plugin = dom.documentElement
if args.version and args.version_file:
raise ValueError("Cannot supply both version and version_file")
if args.version or args.version_file:
version_elements = idea_plugin.getElementsByTagName("version")
for element in version_elements:
idea_plugin.removeChild(element)
version_element = dom.createElement("version")
new_elements.append(version_element)
version_value = None
if args.version:
version_value = args.version
else:
with open(args.version_file) as f:
version_value = f.read().strip()
# Since we may release different versions that target different plugin api
# versions simultaneously, we append the name of the api_version to the
# plugin version.
version_text = dom.createTextNode(version_value + "-api-version-" +
_parse_major_version(api_version))
version_element.appendChild(version_text)
if args.stamp_since_build or args.stamp_until_build:
if idea_plugin.getElementsByTagName("idea-version"):
raise ValueError("idea-version element already present")
idea_version_element = dom.createElement("idea-version")
new_elements.append(idea_version_element)
if is_eap:
# IU211.6693.111 >> since_build=211.6693 and until_build=211.6693.*
build_version = _strip_build_number(
_strip_product_code(api_version))
else:
# IU211.6693.111 >> since_build=211 and until_build=211.*
build_version = _parse_major_version(api_version)
if args.stamp_since_build:
if build_version in since_build_numbers.keys():
idea_version_element.setAttribute("since-build",
since_build_numbers[build_version])
else:
idea_version_element.setAttribute("since-build", build_version)
if args.stamp_until_build:
if build_version in until_build_numbers.keys():
idea_version_element.setAttribute("until-build",
until_build_numbers[build_version])
else:
idea_version_element.setAttribute("until-build", build_version + ".*")
if args.changelog_file:
if idea_plugin.getElementsByTagName("change-notes"):
raise ValueError("change-notes element already in plugin.xml")
changelog_element = dom.createElement("change-notes")
changelog_text = _read_changelog(args.changelog_file)
changelog_cdata = dom.createCDATASection(changelog_text)
changelog_element.appendChild(changelog_cdata)
new_elements.append(changelog_element)
if args.plugin_id:
if idea_plugin.getElementsByTagName("id"):
raise ValueError("id element already in plugin.xml")
id_element = dom.createElement("id")
new_elements.append(id_element)
id_text = dom.createTextNode(args.plugin_id)
id_element.appendChild(id_text)
if args.plugin_name:
if idea_plugin.getElementsByTagName("name"):
raise ValueError("name element already in plugin.xml")
name_element = dom.createElement("name")
new_elements.append(name_element)
name_text = dom.createTextNode(args.plugin_name)
name_element.appendChild(name_text)
if args.description_file:
if idea_plugin.getElementsByTagName("description"):
raise ValueError("description element already in plugin.xml")
description_element = dom.createElement("description")
description_text = _read_description(args.description_file)
description_cdata = dom.createCDATASection(description_text)
description_element.appendChild(description_cdata)
new_elements.append(description_element)
if args.vendor_file:
if idea_plugin.getElementsByTagName("vendor"):
raise ValueError("vendor element already in plugin.xml")
vendor_element = dom.createElement("vendor")
vendor_src_element = _read_vendor(args.vendor_file)
vendor_element.setAttribute("email",
vendor_src_element.getAttribute("email"))
vendor_element.setAttribute("url", vendor_src_element.getAttribute("url"))
vendor_text = dom.createTextNode(vendor_src_element.firstChild.data)
vendor_element.appendChild(vendor_text)
new_elements.append(vendor_element)
for new_element in new_elements:
idea_plugin.appendChild(new_element)
sys.stdout.buffer.write(dom.toxml(encoding="utf-8"))