def get_change_log_for_app(app, from_version, to_version): change_log_folder = os.path.join(frappe.get_app_path(app), "change_log") if not os.path.exists(change_log_folder): return from_version = Version(from_version) to_version = Version(to_version) # remove pre-release part to_version.prerelease = None major_version_folders = [ "v{0}".format(i) for i in range(from_version.major, to_version.major + 1) ] app_change_log = [] for folder in os.listdir(change_log_folder): if folder in major_version_folders: for file in os.listdir(os.path.join(change_log_folder, folder)): version = Version( os.path.splitext(file)[0][1:].replace("_", ".")) if from_version < version <= to_version: file_path = os.path.join(change_log_folder, folder, file) content = frappe.read_file(file_path) app_change_log.append([version, content]) app_change_log = sorted(app_change_log, key=lambda d: d[0], reverse=True) # convert version to string and send return [[cstr(d[0]), d[1]] for d in app_change_log]
def get_change_log_for_app(app, from_version, to_version): change_log_folder = os.path.join(frappe.get_app_path(app), "change_log") if not os.path.exists(change_log_folder): return from_version = Version(from_version) to_version = Version(to_version) # remove pre-release part to_version.prerelease = None major_version_folders = ["v{0}".format(i) for i in range(from_version.major, to_version.major + 1)] app_change_log = [] for folder in os.listdir(change_log_folder): if folder in major_version_folders: for file in os.listdir(os.path.join(change_log_folder, folder)): version = Version(os.path.splitext(file)[0][1:].replace("_", ".")) if from_version < version <= to_version: file_path = os.path.join(change_log_folder, folder, file) content = frappe.read_file(file_path) app_change_log.append([version, content]) app_change_log = sorted(app_change_log, key=lambda d: d[0], reverse=True) # convert version to string and send return [[cstr(d[0]), d[1]] for d in app_change_log]
def update_version_number(update_level='patch'): """Update version number Returns a semantic_version object""" """Find current version""" temp_file = version_file().parent / ("~" + version_file().name) with open(str(temp_file), 'w') as g: with open(str(version_file()), 'r') as f: for line in f: version_matches = bare_version_re.match(line) if version_matches: bare_version_str = version_matches.groups(0)[0] if semantic_version.validate(bare_version_str): current_version = Version(bare_version_str) print("{}Current version is {}".format(" "*4, current_version)) else: current_version = Version.coerce(bare_version_str) if not text.query_yes_quit("{}I think the version is {}. Use it?".format(" "*4, current_version), default="yes"): exit(colorama.Fore.RED + 'Please set an initial version number to continue') """Determine new version number""" if update_level is 'major': current_version = current_version.next_major() elif update_level is 'minor': current_version = current_version.next_minor() elif update_level is 'patch': current_version = current_version.next_patch() elif update_level is 'prerelease': if not current_version.prerelease: current_version = current_version.next_patch() current_version.prerelease = ('dev', ) elif update_level is None: # don't update version pass else: exit(colorama.Fore.RED + 'Cannot update version in {} mode'.format(update_level)) print("{}New version is {}".format(" "*4, current_version)) """Update version number""" line = '__version__ = "{}"\n'.format(current_version) print(line, file=g, end="") #print('', file=g) # add a blank line at the end of the file shutil.copyfile(str(temp_file), str(version_file())) os.remove(str(temp_file)) return(current_version)
def update_version_number(update_level='patch'): """Update version number Returns a semantic_version object""" """Find current version""" temp_file = version_file().parent / ("~" + version_file().name) with open(str(temp_file), 'w') as g: with open(str(version_file()), 'r') as f: for line in f: version_matches = bare_version_re.match(line) if version_matches: bare_version_str = version_matches.groups(0)[0] if semantic_version.validate(bare_version_str): current_version = Version(bare_version_str) print("{}Current version is {}".format(" "*4, current_version)) else: current_version = Version.coerce(bare_version_str) if not text.query_yes_quit("{}I think the version is {}. Use it?".format(" "*4, current_version), default="yes"): exit(colorama.Fore.RED + 'Please set an initial version number to continue') """Determine new version number""" if update_level is 'major': current_version = current_version.next_major() elif update_level is 'minor': current_version = current_version.next_minor() elif update_level is 'patch': current_version = current_version.next_patch() elif update_level is 'prerelease': if not current_version.prerelease: current_version = current_version.next_patch() current_version.prerelease = ('dev', ) elif update_level is None: # don't update version pass else: exit(colorama.Fore.RED + 'Cannot update version in {} mode'.format(update_level)) print("{}New version is {}".format(" "*4, current_version)) """Update version number""" line = '__version__ = "{}"\n'.format(current_version) print(line, file=g, end="") #print('', file=g) # add a blank line at the end of the file shutil.copyfile(str(temp_file), str(version_file())) os.remove(str(temp_file)) return(current_version)
def resolve_template(self, identifier: Union[str, BaseTemplate], **kwargs) -> Optional[BaseTemplate]: if isinstance(identifier, str): kwargs['name'] = identifier elif isinstance(identifier, BaseTemplate): kwargs['orig'] = identifier query = BaseTemplate.create_query(**kwargs) logger(__name__).info(f'Query: {query}') logger(__name__).debug(query.__dict__) templates = self.resolve_templates(query, **kwargs) logger(__name__).info( f'Candidates: {", ".join([str(t) for t in templates])}') if not any(templates): return None query.version = str( Spec(query.version or '>0').select([Version(t.version) for t in templates])) v = Version(query.version) v.prerelease = v.prerelease if len(v.prerelease) else ('', ) v.build = v.build if len(v.build) else ('', ) query.version = f'=={v}' logger(__name__).info(f'Resolved to {query.identifier}') templates = self.resolve_templates(query, **kwargs) if not any(templates): return None # prefer local templates first local_templates = [ t for t in templates if isinstance(t, LocalTemplate) ] if any(local_templates): # there's a local template satisfying the query if len(local_templates) > 1: # This should never happen! Conductor state must be invalid raise Exception( f'Multiple local templates satisfy {query.identifier}!') return [t for t in templates if isinstance(t, LocalTemplate)][0] # prefer pros-mainline template second mainline_templates = [ t for t in templates if t.metadata['origin'] == 'pros-mainline' ] if any(mainline_templates): return mainline_templates[0] # No preference, just FCFS return templates[0]
def msi_version(version): nopre_v = Version(version) nopre_v.prerelease = None return str(nopre_v)