def show_release_status(opts): """check release status""" release = opts.release if release is None: release = current_branch(repo_directory()) result = release_status(release) if not result: # unmerged/tagged release => exit as error status sys.exit(1)
def make_new_version(opts): LOGGER.info("Updating package version...") if not highlander([opts.major, opts.minor, opts.micro]): msg = "Can only specify one of --major, --minor or --micro" LOGGER.error(msg) raise RuntimeError(msg) fields = ['major', 'minor', 'micro'] mask = [opts.major, opts.minor, opts.micro] field = [x for x in itertools.compress(fields, mask)][0] config = load_configuration() current_version = config.package_version() # need to be on the latest develop repo_dir = repo_directory() curr_branch = current_branch(repo_dir) # make sure repo is clean if has_unstaged_changes(repo_dir): msg = ("Error: Unstaged changes are present on the branch {}" "Please commit them or clean up before proceeding" ).format(curr_branch) LOGGER.error(msg) raise RuntimeError(msg) # update cirrus conf new_version = bump_version_field(current_version, field) msg = "Bumping version from {prev} to {new} on branch {branch}".format( prev=current_version, new=new_version, branch=curr_branch) LOGGER.info(msg) config.update_package_version(new_version) changes = ['cirrus.conf'] if opts.bump: reqs_file = os.path.join(repo_dir, 'requirements.txt') for pkg, version in opts.bump: LOGGER.info("Bumping dependency {} to {}".format(pkg, version)) bump_package(reqs_file, pkg, version) changes.append(reqs_file) # update __version__ or equivalent version_file, version_attr = config.version_file() if version_file is not None: LOGGER.info('Updating {0} attribute in {1}'.format( version_file, version_attr)) update_version(version_file, new_version, version_attr) changes.append(version_file) # update files changed msg = "cirrus release: version bumped for {0}".format(curr_branch) LOGGER.info('Committing files: {0}'.format(','.join(changes))) LOGGER.info(msg) commit_files_optional_push(repo_dir, msg, not opts.no_remote, *changes)
def merge_feature_branch(opts): """ merge current feature branch into develop """ config = load_configuration() main_branch = config.gitflow_branch_name() repo_dir = repo_directory() curr_branch = current_branch(repo_dir) LOGGER.info("Merging {} into {}".format(curr_branch, main_branch)) # make sure repo is clean if has_unstaged_changes(repo_dir): msg = ("Error: Unstaged changes are present on the feature branch {}" "Please commit them or clean up before proceeding" ).format(curr_branch) LOGGER.error(msg) raise RuntimeError(msg) checkout_and_pull(repo_dir, main_branch, pull=not opts.no_remote) with GitHubContext(repo_dir) as ghc: ghc.merge_branch(curr_branch) if not opts.no_remote: ghc.push_branch(main_branch) LOGGER.info("Branch {0} pushed to remote".format(main_branch))
def merge_feature_branch(opts): """ merge current feature branch into develop """ config = load_configuration() main_branch = config.gitflow_branch_name() repo_dir = repo_directory() curr_branch = current_branch(repo_dir) LOGGER.info("Merging {} into {}".format(curr_branch, main_branch)) # make sure repo is clean if has_unstaged_changes(repo_dir): msg = ( "Error: Unstaged changes are present on the feature branch {}" "Please commit them or clean up before proceeding" ).format(curr_branch) LOGGER.error(msg) raise RuntimeError(msg) checkout_and_pull(repo_dir, main_branch, pull=not opts.no_remote) with GitHubContext(repo_dir) as ghc: ghc.merge_branch(curr_branch) if not opts.no_remote: ghc.push_branch(main_branch) LOGGER.info("Branch {0} pushed to remote".format(main_branch))