def run(self):
if not self.options.project or not self.options.user:<EOL><INDENT>print("<STR_LIT>"<EOL>"<STR_LIT>")<EOL>return<EOL><DEDENT>if not self.options.quiet:<EOL><INDENT>print("<STR_LIT>")<EOL><DEDENT>log = None<EOL>try:<EOL><INDENT>log = self.generator.compound_changelog()<EOL><DEDENT>except ChangelogGeneratorError as err:<EOL><INDENT>print("<STR_LIT>".format(err.args[<NUM_LIT:0>]))<EOL>exit(<NUM_LIT:1>)<EOL><DEDENT>if not log:<EOL><INDENT>if not self.options.quiet:<EOL><INDENT>print("<STR_LIT>".format(<EOL>self.options.output)<EOL>)<EOL><DEDENT>return<EOL><DEDENT>if self.options.no_overwrite:<EOL><INDENT>out = checkname(self.options.output)<EOL><DEDENT>else:<EOL><INDENT>out = self.options.output<EOL><DEDENT>with codecs.open(out, "<STR_LIT:w>", "<STR_LIT:utf-8>") as fh:<EOL><INDENT>fh.write(log)<EOL><DEDENT>if not self.options.quiet:<EOL><INDENT>print("<STR_LIT>")<EOL>print("<STR_LIT>".format(out))<EOL><DEDENT>
The entry point of this script to generate change log
'ChangelogGeneratorError' Is thrown when one
of the specified tags was not found in list of tags.