From 3f46b732b6ae51880a0acaa9d2a7a38698a9b951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Sun, 22 Apr 2018 14:22:52 +0200 Subject: [PATCH] Give precedence to PKG-INFO over manifest to get version --- CHANGES.rst | 6 +++++- setuptools_odoo/core.py | 14 ++++++++++---- tests/test_setup_keywords.py | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 25a45d5c..481dac35 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,8 +5,12 @@ Changes .. ---------- .. - -2.0.5 (unreleased) +2.1.0 (unreleased) ------------------ +- [FIX] give precedence to PKG-INFO over manifest to get version, + so the git post version obtained when generating an sdist is + preserved (before it would fall back in the manifest version + when trying to build from an sdist outside of git) - [IMP] update base addons list for Odoo 11.0 2.0.4 (2018-04-18) diff --git a/setuptools_odoo/core.py b/setuptools_odoo/core.py index 355244b7..e544300b 100644 --- a/setuptools_odoo/core.py +++ b/setuptools_odoo/core.py @@ -2,6 +2,7 @@ # Copyright © 2015 ACSONE SA/NV # License LGPLv3 (http://www.gnu.org/licenses/lgpl-3.0-standalone.html) +import email.parser import os import setuptools from distutils.core import DistutilsSetupError @@ -318,10 +319,15 @@ def prepare_odoo_addon(depends_override={}, addon_name = addons[0] addon_dir = os.path.join(addons_dir, addon_name) manifest = read_manifest(addon_dir) - version, _, odoo_version_info = _get_version(addon_dir, - manifest, - odoo_version_override, - git_post_version=True) + if os.path.exists('PKG-INFO'): + with open('PKG-INFO', 'rb') as fp: + pkg_info = email.parser.Parser().parse(fp) + version = pkg_info['Version'] + _, _, odoo_version_info = _get_version( + addon_dir, manifest, odoo_version_override, git_post_version=False) + else: + version, _, odoo_version_info = _get_version( + addon_dir, manifest, odoo_version_override, git_post_version=True) install_requires = get_install_requires_odoo_addon( addon_dir, depends_override=depends_override, diff --git a/tests/test_setup_keywords.py b/tests/test_setup_keywords.py index fe914b93..7bc40753 100644 --- a/tests/test_setup_keywords.py +++ b/tests/test_setup_keywords.py @@ -7,6 +7,7 @@ import shutil import subprocess import sys +import tarfile import tempfile import unittest from zipfile import ZipFile @@ -37,6 +38,39 @@ def test_odoo_addon1(self): finally: shutil.rmtree(egg_info_dir) + def test_odoo_addon1_sdist(self): + addon1_dir = os.path.join(DATA_DIR, 'setup_reusable_addons', 'addon1') + dist_dir = tempfile.mkdtemp() + assert os.path.isdir(dist_dir) + try: + subprocess.check_call([ + sys.executable, 'setup.py', 'sdist', '-d', dist_dir, + ], cwd=addon1_dir) + sdist_file = os.path.join( + dist_dir, + 'odoo8-addon-addon1-8.0.1.0.0.99.dev2.tar.gz') + assert os.path.isfile(sdist_file) + # dist from the tar file, must produce an identical tar file + with tarfile.open(sdist_file, 'r') as tf: + tar_dir = tempfile.mkdtemp() + try: + tar_setup_dir = os.path.join( + tar_dir, 'odoo8-addon-addon1-8.0.1.0.0.99.dev2') + tf.extractall(tar_dir) + subprocess.check_call([ + sys.executable, 'setup.py', 'sdist', + ], cwd=tar_setup_dir) + sdist_file2 = os.path.join( + tar_setup_dir, 'dist', + 'odoo8-addon-addon1-8.0.1.0.0.99.dev2.tar.gz') + assert os.path.isfile(sdist_file2) + with tarfile.open(sdist_file2, 'r') as tf2: + assert sorted(tf.getnames()) == sorted(tf2.getnames()) + finally: + shutil.rmtree(tar_dir) + finally: + shutil.rmtree(dist_dir) + def test_odoo_addon2(self): addon2_dir = os.path.join(DATA_DIR, 'setup_reusable_addons', 'addon2') subprocess.check_call([sys.executable, 'setup.py', 'egg_info'],