Example #1
0
def verify_create_head_tag(flags, branch, tag_type, version_str=None):
    """
    Verifies or creates a version tag for a branch HEAD.
    If tag needs to be created and no version is given,
    user will be prompted for version.
    - branch        -- The branch to tag.
    - tag_type      -- The tag type (<tag_type>/<version>).
    - version_str   -- The version string to use.
    Returns the a tuple with version created or found
    and True if created otherwise False. (<version>, <created>)
    """
    try:
        # Check that at least one head tag exists.
        if get_head_tags(branch, tag_type):
            log(flags, "The HEAD commit on branch \'" + branch +
                "\' is already tagged, skipping tagging")
            version_str = get_head_tag_version_str(branch, tag_type)
            return version_str, tag_type + "/" + version_str, False
        else:
            log(flags, "The HEAD commit on branch \'" + branch +
                "\' is not tagged correctly")
            if version_str is None:
                # Prompt user to tag the HEAD of release branch.
                raw_ver = prompt_user_input("Enter release version to tag",
                                            True)
                if raw_ver is not None:
                    version_str = raw_ver
                else:
                    raise OpError(msg="Tagging of HEAD commit on branch " +
                                      "\'" + branch + "\' aborted by user")

            # Tag using the given version string.
            tag = tag_type + "/" + version_str
            if not flags[Flag.SAFEMODE]:
                log(flags, "Tagging HEAD commit on branch \'" + branch +
                    "\' as \'" + tag + "\'")
                tag_head(flags, branch, tag)
            return version_str, tag, True
    except Error as err:
        raise OpError(err)