From 1b6f51cafc6d0d214a3b7d822d4b15fb3dd4687d Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sun, 7 Apr 2019 22:04:53 +0300 Subject: [PATCH 1/2] version: unused pkg_dir argument Signed-off-by: Ruslan Kuprieiev --- dvc/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dvc/version.py b/dvc/version.py index d4a6c6cb0..255d3c71b 100644 --- a/dvc/version.py +++ b/dvc/version.py @@ -7,7 +7,7 @@ def generate_version(base_version): """Generate a version with information about the git repository""" pkg_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) - if not is_git_repo(pkg_dir) or not have_git(pkg_dir): + if not is_git_repo(pkg_dir) or not have_git(): return base_version return "{base_version}+{short_sha}{dirty}".format( @@ -22,7 +22,7 @@ def is_git_repo(dir_path): return os.path.exists(os.path.join(dir_path, ".git")) -def have_git(dir_path): +def have_git(): """Can we run the git executable?""" try: subprocess.check_output(["git", "--help"]) From 54f7b43aac5fae8d877f0f09e83dbf6b692e5bd6 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sun, 7 Apr 2019 22:07:47 +0300 Subject: [PATCH 2/2] dvc: version: detect release See failed release at [1]. Previously we used to look at TRAVIS_TAG env var, but now we will try to detect release by matching current tag with base version. [1] https://travis-ci.com/iterative/dvc/builds/107365596 Signed-off-by: Ruslan Kuprieiev --- dvc/version.py | 19 ++++++++++++++++++- tests/unit/test_version.py | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/unit/test_version.py diff --git a/dvc/version.py b/dvc/version.py index 255d3c71b..dbd6705cc 100644 --- a/dvc/version.py +++ b/dvc/version.py @@ -3,6 +3,9 @@ import os import subprocess +BASE_VERSION = "0.35.0" + + def generate_version(base_version): """Generate a version with information about the git repository""" pkg_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) @@ -10,6 +13,9 @@ def generate_version(base_version): if not is_git_repo(pkg_dir) or not have_git(): return base_version + if is_release(pkg_dir, base_version): + return base_version + return "{base_version}+{short_sha}{dirty}".format( base_version=base_version, short_sha=git_revision(pkg_dir).decode("utf-8")[0:6], @@ -33,6 +39,17 @@ def have_git(): return False +def is_release(dir_path, base_version): + try: + output = subprocess.check_output( + ["git", "describe", "--tags", "--exact-match"], cwd=dir_path + ).decode("utf-8") + tag = output.strip() + return tag == base_version + except subprocess.CalledProcessError: + return False + + def git_revision(dir_path): """Get the SHA-1 of the HEAD of a git repository.""" return subprocess.check_output( @@ -49,4 +66,4 @@ def is_dirty(dir_path): return True -__version__ = generate_version(base_version="0.35.0") +__version__ = generate_version(BASE_VERSION) diff --git a/tests/unit/test_version.py b/tests/unit/test_version.py new file mode 100644 index 000000000..249f58e7e --- /dev/null +++ b/tests/unit/test_version.py @@ -0,0 +1,22 @@ +import mock +import subprocess + + +import dvc.version +from dvc.utils.compat import cast_bytes + + +def test_is_release(): + with mock.patch.object(dvc.version.subprocess, "check_output") as m: + m.side_effect = subprocess.CalledProcessError(1, "cmd") + ret = dvc.version.is_release(None, dvc.version.BASE_VERSION) + assert ret is False + + m.side_effect = None + m.return_value = cast_bytes(dvc.version.BASE_VERSION) + ret = dvc.version.is_release(None, dvc.version.BASE_VERSION) + assert ret + + m.return_value = cast_bytes("630d1741c2d5dd89a3176bd15b63121b905d35c9") + ret = dvc.version.is_release(None, dvc.version.BASE_VERSION) + assert ret is False