Xcode/XcodeFileNamer.py (80 lines of code) (raw):

#!/usr/bin/python # # Copyright (c) Facebook, Inc. and its affiliates. # # Licensed 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. # """Create a filename for Xcode based on version information.""" from autopkglib import Processor __all__ = ["XcodeFileNamer"] class XcodeFileNamer(Processor): """Create a filename for Xcode based on version information.""" description = __doc__ input_variables = { "should_produce_versioned_name": { "description": ( "Whether or not we should produce a versioned name. " "If this is non-empty, it's evaluated as true." ), "required": True, }, "major_version": { "description": "Major version of Xcode - i.e. Xcode 7, 8.", "required": True, }, "minor_version": { "description": "Minor version of Xcode - i.e. Xcode X.1, X.2.", "required": True, }, "patch_version": { "description": ( "Patch version of Xcode - i.e. Xcode X.Y.0, X.Y.1. " "Patch version will be normalized to 0 if missing (i.e. 8.3 " "becomes 8.3.0)." ), "required": True, }, "is_beta": { "description": ("Boolean that is true if this Xcode is a beta version."), "required": True, }, "beta_version": { "description": ( "The beta number - 1, 2, 3, etc. Only used if is_beta is True. " "Assumed to be 0 if not provided." ), "required": False, }, "should_lowercase": { "description": ( "If this value is non-empty, use a lower-case filename - xcode_X.Y.0_suffix.app." ), "required": False, }, "suffix": { "description": ( "Any additional suffix string to append to the name prior to the .app extension." ), "required": False, }, } output_variables = { "xcode_filename": {"description": "Allow producing a versioned Xcode name."} } __doc__ = description def main(self): """Main.""" if not self.env["should_produce_versioned_name"] and self.env["is_beta"]: # Default name for Xcode Beta self.env["xcode_filename"] = "Xcode-beta" return elif not self.env["should_produce_versioned_name"]: # Default name for Xcode self.env["xcode_filename"] = "Xcode" return # end up with xcode_10.2.0_beta_4 or xcode_10.2.1 prefix = "Xcode" if self.env.get("should_lowercase"): prefix = "xcode" name = "{}_{}.{}.{}".format( prefix, self.env["major_version"], self.env["minor_version"], self.env["patch_version"], ) if self.env["is_beta"]: name = name + "_beta_{}".format(self.env.get("beta_version", "0")) name += self.env.get("suffix", "") self.output("Xcode name: {}".format(name)) self.env["xcode_filename"] = name if __name__ == "__main__": PROCESSOR = XcodeFileNamer() PROCESSOR.execute_shell()