Retrieves the version of the package, checking in this order of priority:

    * From an environment variable named ${project_name}_VERSION (all in caps)
      if project_name was specified.
    * From the PKG-INFO file if inside a packaged distro.
    * From the git history.

    Args:
        project_name(str): Name of the project to get the version for, if none
            passed, will not use any environment variable override.

    Returns:
        str: Version for the package.

    Raises:
        RuntimeError: If the version could not be retrieved.

def get_current_version(project_name=None, project_dir=os.curdir,
                        repo_dir=None):
    """
    Retrieves the version of the package, checking in this order of priority:

    * From an environment variable named ${project_name}_VERSION (all in caps)
      if project_name was specified.
    * From the PKG-INFO file if inside a packaged distro.
    * From the git history.

    Args:
        project_name(str): Name of the project to get the version for, if none
            passed, will not use any environment variable override.

    Returns:
        str: Version for the package.

    Raises:
        RuntimeError: If the version could not be retrieved.
    """
    if project_name is not None:
        version_env_var = '%s_VERSION' % project_name.upper()

        if version_env_var in os.environ and os.environ[version_env_var]:
            return os.environ[version_env_var]

    version = None
    repo_dir = repo_dir or project_dir
    pkg_info_file = os.path.join(project_dir, 'PKG-INFO')
    if os.path.exists(pkg_info_file):
        with open(pkg_info_file) as info_fd:
            for line in info_fd.readlines():
                if line.startswith('Version: '):
                    version = line.split(' ', 1)[-1]

    if version is None:
        try:
            version = api.get_current_version(repo_path=repo_dir)
        except:
            pass

    if version is None:
        if project_name:
            try:
                distribution = pkg_resources.get_distribution(project_name)
                if distribution.has_version():
                    version = distribution.version
            except:
                pass

    if version is None:
        raise RuntimeError('Failed to get package version')

    # py3 compatibility step
    if not isinstance(version, str) and isinstance(version, bytes):
        version = api._to_str(version)

    return version