Hello community,
here is the log from the commit of package obs-service-set_version for
openSUSE:Factory checked in at 2017-12-21 11:29:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/obs-service-set_version (Old)
and /work/SRC/openSUSE:Factory/.obs-service-set_version.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "obs-service-set_version"
Thu Dec 21 11:29:30 2017 rev:32 rq:558810 version:0.5.8
Changes:
--------
---
/work/SRC/openSUSE:Factory/obs-service-set_version/obs-service-set_version.changes
2017-11-14 13:02:41.646943843 +0100
+++
/work/SRC/openSUSE:Factory/.obs-service-set_version.new/obs-service-set_version.changes
2017-12-21 11:29:37.806711100 +0100
@@ -1,0 +2,15 @@
+Mon Dec 11 15:50:24 UTC 2017 - [email protected]
+
+- Update to version 0.5.8:
+ * fixes boo#1072359
+ * code cleanup and some refactoring
+ * cli options --debug and --regex
+ * new targets (test/clean) for Makefile
+ * initial .gitignore
+ * Mention that tests may take some time in README.md
+ * Fix pip/zypper tests for python3
+ * enforce files to be decoded as UTF-8
+ * Don't let version check get beyond path boundary
+ * Slightly reorganize README.md file
+
+-------------------------------------------------------------------
Old:
----
obs-service-set_version-0.5.7.tar.gz
New:
----
obs-service-set_version-0.5.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ obs-service-set_version.spec ++++++
--- /var/tmp/diff_new_pack.Ur2BF9/_old 2017-12-21 11:29:38.498677360 +0100
+++ /var/tmp/diff_new_pack.Ur2BF9/_new 2017-12-21 11:29:38.502677165 +0100
@@ -19,7 +19,7 @@
%define service set_version
Name: obs-service-%{service}
-Version: 0.5.7
+Version: 0.5.8
Release: 0
Summary: An OBS source service: Update spec file version
License: GPL-2.0+
++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.Ur2BF9/_old 2017-12-21 11:29:38.530675800 +0100
+++ /var/tmp/diff_new_pack.Ur2BF9/_new 2017-12-21 11:29:38.530675800 +0100
@@ -1,5 +1,5 @@
pkgname=obs-service-set_version
-pkgver=0.5.7
+pkgver=0.5.8
pkgrel=0
pkgdesc="An OBS source service: Update spec file version"
arch=('i686' 'x86_64')
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Ur2BF9/_old 2017-12-21 11:29:38.554674630 +0100
+++ /var/tmp/diff_new_pack.Ur2BF9/_new 2017-12-21 11:29:38.558674435 +0100
@@ -1,5 +1,5 @@
<servicedata>
<service name="tar_scm">
<param
name="url">[email protected]:openSUSE/obs-service-set_version.git</param>
- <param
name="changesrevision">98641aeb28f887737a293a46f6f0c091fe81af0a</param></service>
+ <param
name="changesrevision">5fabceedf07f6a8597b510e16993b613eded4655</param></service>
</servicedata>
\ No newline at end of file
++++++ debian.dsc ++++++
--- /var/tmp/diff_new_pack.Ur2BF9/_old 2017-12-21 11:29:38.574673654 +0100
+++ /var/tmp/diff_new_pack.Ur2BF9/_new 2017-12-21 11:29:38.578673459 +0100
@@ -1,6 +1,6 @@
Format: 1.0
Source: obs-service-set_version
-Version: 0.5.7-0
+Version: 0.5.8-0
Binary: obs-service-set_version
Provides: obs-service-set_version
Maintainer: Adrian Schroeter <[email protected]>
++++++ obs-service-set_version-0.5.7.tar.gz ->
obs-service-set_version-0.5.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/Makefile
new/obs-service-set_version-0.5.8/Makefile
--- old/obs-service-set_version-0.5.7/Makefile 2017-11-06 10:15:46.000000000
+0100
+++ new/obs-service-set_version-0.5.8/Makefile 2017-12-11 13:06:13.000000000
+0100
@@ -15,6 +15,7 @@
clean:
find -name "*.pyc" -exec rm {} \;
+ find -name '*.pyo' -exec rm {} \;
rm -rf set_versionc
.PHONY: all install test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/README.md
new/obs-service-set_version-0.5.8/README.md
--- old/obs-service-set_version-0.5.7/README.md 2017-11-06 10:15:46.000000000
+0100
+++ new/obs-service-set_version-0.5.8/README.md 2017-12-11 13:06:13.000000000
+0100
@@ -1,10 +1,10 @@
# set_version (OBS source service) [](https://travis-ci.org/openSUSE/obs-service-set_version)
-This service updates a RPM spec or Debian changelog according to the existing
files.
-The service can be used in combination with other services like
[download_files](https://github.com/openSUSE/obs-service-download_files)
-or [tar_scm](https://github.com/openSUSE/obs-service-tar_scm).
-This is the git repository for
[openSUSE:Tools/obs-service-set_version](https://build.opensuse.org/package/show/openSUSE:Tools/obs-service-set_version).
-The authoritative source is https://github.com/openSUSE/obs-service-set_version
+This is an [Open Build Service](http://openbuildservice.org/) source service.
It updates an RPM spec or Debian changelog according to the existing files.
+
+This is the git repository for
[openSUSE:Tools/obs-service-set_version](https://build.opensuse.org/package/show/openSUSE:Tools/obs-service-set_version).
The authoritative source is https://github.com/openSUSE/obs-service-set_version
+
+The service can be used in combination with other services like
[download_files](https://github.com/openSUSE/obs-service-download_files),
[tar_scm](https://github.com/openSUSE/obs-service-tar_scm),
[recompress](https://github.com/openSUSE/obs-service-recompress) or
[extract_file](https://github.com/openSUSE/obs-service-extract_file) e.g.
within the [GIT
integration](https://en.opensuse.org/openSUSE:Build_Service_Concept_SourceService#Example_2:_GIT_integration)
workflow.
## Dependencies
Install the following deps:
@@ -20,13 +20,21 @@
If the dependencies are not installed, some tests are skipped. `zypper` itself
is also needed for the tests with python packages and PEP440 compatible
versions.
-To run the testsuite, execute:
+To run the full testsuite, execute:
python -m unittest discover tests/
-The testrun may take some time. Don't forget to run also
+If ```zypper``` and/or ```dpkg``` are installed, theses tests take some time,
+but you can specify a filename pattern, which test files should be run.
+
+ python -m unittest discover -p test_b*.py tests/
+
+Don't forget to run also
flake8 set_version tests/
+or simply use
+ make test
+to run all linters and tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/set_version
new/obs-service-set_version-0.5.8/set_version
--- old/obs-service-set_version-0.5.7/set_version 2017-11-06
10:15:46.000000000 +0100
+++ new/obs-service-set_version-0.5.8/set_version 2017-12-11
13:06:13.000000000 +0100
@@ -22,6 +22,7 @@
import sys
import tarfile
import zipfile
+import codecs
try:
from packaging.version import LegacyVersion, Version, parse
@@ -34,6 +35,8 @@
HAS_PACKAGING = True
+DEBUG = False
+
outdir = None
suffixes = ('obscpio', 'tar', 'tar.gz', 'tgz', 'tar.bz2', 'tbz2', 'tar.xz',
'zip')
@@ -49,36 +52,60 @@
class VersionDetector(object):
- @staticmethod
- def _autodetect(files, basename):
- version = VersionDetector._get_version_via_obsinfo(
- files, basename)
+ def __init__(self, regex=None, file_list=(), basename=''):
+ self.regex = regex
+ self.file_list = file_list
+ self.basename = basename
+
+ def autodetect(self):
+ if DEBUG:
+ print("Starting version autodetect")
+
+ version = self._get_version_via_obsinfo()
if not version:
- version = VersionDetector._get_version_via_archive_dirname(
- files, basename)
+ if DEBUG:
+ print("Could not find version via obsinfo")
+ version = self._get_version_via_archive_dirname()
if not version:
- version = VersionDetector._get_version_via_filename(
- files, basename)
+ if DEBUG:
+ print("Could not find version via archive dirname")
+ version = self._get_version_via_filename()
if not version:
- version = VersionDetector._get_version_via_debian_changelog(
- "debian.changelog")
+ if DEBUG:
+ print("Could not find version via filename")
+ version = self.get_version_via_debian_changelog("debian.changelog")
+ if not version:
+ if DEBUG:
+ print("Could not find version via debian changelog")
return version
- @staticmethod
- def _get_version_via_filename(files, basename):
+ def _get_version_via_filename(self):
""" detect version based on file names"""
- for f in files:
- regex = r"^%s.*[-_]([\d].*)\.(?:%s)$" % (re.escape(basename),
- suffixes_re)
+ if DEBUG:
+ print("detecting version via files")
+ for f in self.file_list:
+ if DEBUG:
+ print(" - checking file ", f)
+ if self.regex:
+ if DEBUG:
+ print(" - using regex: ", self.regex)
+ regex = self.regex
+ else:
+ regex = r"^%s.*[-_]([\d].*)\.(?:%s)$" % (
+ re.escape(self.basename),
+ suffixes_re)
m = re.match(regex, f)
if m:
return m.group(1)
# Nothing found
return None
- @staticmethod
- def __get_version(str_list, basename):
- regex = "%s.*[-_]([\d][^\/]*).*" % basename
+ def __get_version(self, str_list):
+ if self.regex:
+ regex = self.regex
+ else:
+ regex = "%s.*[-_]([\d][^\/]*).*" % self.basename
+
for s in str_list:
m = re.match(regex, s)
if m:
@@ -86,31 +113,29 @@
# Nothing found
return None
- @staticmethod
- def _get_version_via_archive_dirname(files, basename):
+ def _get_version_via_archive_dirname(self):
""" detect version based tar'd directory name"""
- for f in filter(lambda x: x.endswith(suffixes), files):
+ for f in filter(lambda x: x.endswith(suffixes), self.file_list):
# handle tarfiles
if tarfile.is_tarfile(f):
with tarfile.open(f) as tf:
- v = VersionDetector.__get_version(tf.getnames(), basename)
+ v = self.__get_version(tf.getnames())
if v:
return v
# handle zipfiles
if zipfile.is_zipfile(f):
with zipfile.ZipFile(f, 'r') as zf:
- v = VersionDetector.__get_version(zf.namelist(), basename)
+ v = self.__get_version(zf.namelist())
if v:
return v
# Nothing found
return None
- @staticmethod
- def _get_version_via_obsinfo(files, basename):
- join_suffix = basename + ".obsinfo"
- for filename in filter(lambda x: x.endswith(join_suffix), files):
- if os.path.exists(filename):
- with open(filename, "r") as fp:
+ def _get_version_via_obsinfo(self):
+ join_suffix = self.basename + ".obsinfo"
+ for fname in filter(lambda x: x.endswith(join_suffix), self.file_list):
+ if os.path.exists(fname):
+ with codecs.open(fname, 'r', 'utf8') as fp:
for line in fp:
if line.startswith("version: "):
string = line[9:]
@@ -120,7 +145,7 @@
return None
@staticmethod
- def _get_version_via_debian_changelog(filename):
+ def get_version_via_debian_changelog(filename):
# from http://anonscm.debian.org/cgit/pkg-python-debian/\
# python-debian.git/tree/lib/debian/changelog.py
topline = re.compile(r'^(\w%(name_chars)s*) \(([^\(\) \t]+)\)'
@@ -128,7 +153,7 @@
% {'name_chars': '[-+0-9a-z.]'},
re.IGNORECASE)
if os.path.exists(filename):
- with open(filename, "r") as f:
+ with codecs.open(filename, 'r', 'utf8') as f:
firstline = f.readline()
topmatch = topline.match(firstline)
if topmatch:
@@ -140,7 +165,7 @@
def _get_version_via_debian_dsc(filename):
version = re.compile(r'^Version:([ \t\f\v]*)[^%\n\r]*', re.IGNORECASE)
if os.path.exists(filename):
- with open(filename, "r") as f:
+ with codecs.open(filename, 'r', 'utf8') as f:
for line in f:
versionmatch = version.match(line)
if versionmatch:
@@ -150,6 +175,7 @@
class PackageTypeDetector(object):
+ # pylint: disable=too-few-public-methods
@staticmethod
def _get_package_type(files):
pt_found = False
@@ -177,7 +203,7 @@
def _replace_define(filename, def_name, def_value, add_if_missing=True):
# first, modify a copy of filename and then move it
- with open(filename, 'r+') as f:
+ with codecs.open(filename, 'r+', 'utf8') as f:
contents = f.read()
f.seek(0)
contents_new, subs = re.subn(
@@ -200,7 +226,7 @@
def _replace_spec_setup(filename, version_define):
# first, modify a copy of filename and then move it
- with open(filename, 'r+') as f:
+ with codecs.open(filename, 'r+', 'utf8') as f:
contents = f.read()
f.seek(0)
# %setup without "-n" uses implicit "-n" as "%{name}-%{version}"
@@ -223,7 +249,7 @@
def _replace_tag(filename, tag, string):
# first, modify a copy of filename and then move it
- with open(filename, 'r+') as f:
+ with codecs.open(filename, 'r+', 'utf8') as f:
contents = f.read()
f.seek(0)
if filename.endswith("PKGBUILD") or filename.endswith("build.collax"):
@@ -243,12 +269,11 @@
f.write(contents_new)
-def _replace_debian_changelog_version(filename, version_new):
+def _replace_debian_changelog_version(fname, version_new):
# first, modify a copy of filename and then move it
# get current version
- version_current = VersionDetector._get_version_via_debian_changelog(
- filename)
- with open(filename, 'r+') as f:
+ version_current = VersionDetector.get_version_via_debian_changelog(fname)
+ with codecs.open(fname, 'r+', 'utf8') as f:
content_lines = f.readlines()
f.seek(0)
content_lines[0] = content_lines[0].replace(
@@ -282,6 +307,15 @@
return version_rpm
+def _version_detect(args, files_local):
+ vdetect = VersionDetector(args['regex'], files_local, args["basename"])
+ ver = vdetect.autodetect()
+ if DEBUG:
+ print("Found version '%s'" % ver)
+
+ return ver
+
+
if __name__ == '__main__':
parser = argparse.ArgumentParser(
@@ -299,20 +333,28 @@
parser.add_argument('--file', action='append',
help='modify only this build description. '
'maybe used multiple times.')
+ parser.add_argument('--debug', default=False,
+ help='Enable more verbose output.')
+ parser.add_argument('--regex',
+ help='regex to be used by autodetect')
args = vars(parser.parse_args())
version = args['version']
- files_local = _get_local_files()
-
outdir = args['outdir']
if not outdir:
print("no outdir specified")
sys.exit(-1)
+ if args['debug']:
+ print("Running in debug mode")
+ DEBUG = True
+
+ files_local = _get_local_files()
+
if not version:
- version = VersionDetector._autodetect(files_local, args["basename"])
+ version = _version_detect(args, files_local)
if not version:
print("unable to detect the version")
@@ -355,7 +397,7 @@
for f in filter(lambda x: x.endswith(("debian.changelog")), files):
filename = outdir + "/" + f
shutil.copyfile(f, filename)
- if "-" in VersionDetector._get_version_via_debian_changelog(filename):
+ if "-" in VersionDetector.get_version_via_debian_changelog(filename):
_replace_debian_changelog_version(filename, version + "-0")
else:
_replace_debian_changelog_version(filename, version)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/set_version.service
new/obs-service-set_version-0.5.8/set_version.service
--- old/obs-service-set_version-0.5.7/set_version.service 2017-11-06
10:15:46.000000000 +0100
+++ new/obs-service-set_version-0.5.8/set_version.service 2017-12-11
13:06:13.000000000 +0100
@@ -12,5 +12,9 @@
<parameter name="file">
<description>Update only the given file.</description>
</parameter>
+ <parameter name="regex">
+ <description>This regex can be used to autodetect the version from the
source dir
+inside the source file or the source file directly.</description>
+ </parameter>
</service>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/obs-service-set_version-0.5.7/tests/fixtures/broken-utf8.spec
new/obs-service-set_version-0.5.8/tests/fixtures/broken-utf8.spec
--- old/obs-service-set_version-0.5.7/tests/fixtures/broken-utf8.spec
1970-01-01 01:00:00.000000000 +0100
+++ new/obs-service-set_version-0.5.8/tests/fixtures/broken-utf8.spec
2017-12-11 13:06:13.000000000 +0100
@@ -0,0 +1,69 @@
+#
+# spec file for package rawspeed
+#
+# Copyright (c) 2017 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+Name: rawspeed
+Version: 0
+Release: 0
+License: LGPL-2.1
+Summary: Fast raw decoding library
+Url: https://github.com/darktable-org/rawspeed
+Group: System/Libraries
+Source: %{name}-%{version}.tar.xz
+BuildRequires: cmake >= 3
+BuildRequires: gcc-c++ >= 4.9
+BuildRequires: libxml2-tools
+BuildRequires: pkgconfig
+BuildRequires: pugixml-devel
+BuildRequires: libjpeg-devel
+BuildRequires: zlib-devel
+BuildRequires: googletest-source
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+RawSpeed…
+
+- is capable of decoding various images in RAW file format.
+- is intended to provide the fastest decoding speed possible.
+- supports the most common DSLR and similar class brands.
+- supplies unmodified RAW data, optionally scaled to 16 bit, or normalized to
0->1 float point data.
+- supplies CFA layout for all known cameras.
+- provides automatic black level calculation for cameras having such
information.
+- optionally crops off “junk” areas of images, containing no valid image
information.
+- can add support for new cameras by adding definitions to an xml file.
+- ~~is extensively crash-tested on broken files~~.
+- decodes images from memory, not a file stream. You can use a memory mapped
file, but it is rarely faster.
+- open source under the LGPL v2 license.
+
+%prep
+%setup -q
+
+%build
+%cmake -DGOOGLETEST_PATH:PATH=%{_datadir}/googletest-source/
-DBUILD_SHARED_LIBS:BOOL=OFF
+make %{?_smp_mflags}
+
+%check
+%ctest
+
+%install
+%cmake_install
+
+%files
+%defattr(-,root,root)
+%{_bindir}/rs-identify
+%dir %{_datadir}/rawspeed/
+%{_datadir}/rawspeed/cameras.xml
+%{_datadir}/rawspeed/showcameras.xsl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/tests/test_base.py
new/obs-service-set_version-0.5.8/tests/test_base.py
--- old/obs-service-set_version-0.5.7/tests/test_base.py 2017-11-06
10:15:46.000000000 +0100
+++ new/obs-service-set_version-0.5.8/tests/test_base.py 2017-12-11
13:06:13.000000000 +0100
@@ -248,3 +248,20 @@
self.assertEqual(len(current_lines), len(expected_lines))
for nbr, l in enumerate(current_lines):
self.assertEqual(l, expected_lines[nbr])
+
+ def test_autodetect_filename(self):
+ dname = os.path.join(self._tmpdir, "test-v1.2.3")
+ os.chdir(self._tmpdir)
+ os.mkdir(dname)
+ subprocess.call(['tar', '-cf', 'test-v1.2.3.tar', 'test-v1.2.3'])
+ files_local = ['test-v1.2.3.tar']
+
+ # checking dirname in archive detection
+ args = {'regex': '^test-v(.*)', 'basename': ''}
+ ver = sv._version_detect(args, files_local)
+ self.assertEqual(ver, '1.2.3')
+
+ # checking archive filename detection
+ args = {'regex': '^test-v(.*).tar', 'basename': ''}
+ ver = sv._version_detect(args, files_local)
+ self.assertEqual(ver, '1.2.3')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/obs-service-set_version-0.5.7/tests/test_python_pip2rpm.py
new/obs-service-set_version-0.5.8/tests/test_python_pip2rpm.py
--- old/obs-service-set_version-0.5.7/tests/test_python_pip2rpm.py
2017-11-06 10:15:46.000000000 +0100
+++ new/obs-service-set_version-0.5.8/tests/test_python_pip2rpm.py
2017-12-11 13:06:13.000000000 +0100
@@ -65,13 +65,22 @@
class ZypperVersionCompare(VersionCompareBase):
""" class to compare version strings with zypper"""
- def __cmp__(self, other):
+ def _do_compare(self, other):
# zypper's return val is negative if v1 is older than v2.
# See 'man zypper'
ret = subprocess.check_output("zypper --terse versioncmp %s %s" % (
self.version_str, other.version_str), shell=True)
return int(ret)
+ def __lt__(self, other):
+ return self._do_compare(other) < 0
+
+ def __gt__(self, other):
+ return self._do_compare(other) > 0
+
+ def __eq__(self, other):
+ return (self._do_compare(other) == 0)
+
class DpkgVersionCompare(VersionCompareBase):
def __do_compare(self, other, op):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/obs-service-set_version-0.5.7/tests/test_rpmspec.py
new/obs-service-set_version-0.5.8/tests/test_rpmspec.py
--- old/obs-service-set_version-0.5.7/tests/test_rpmspec.py 2017-11-06
10:15:46.000000000 +0100
+++ new/obs-service-set_version-0.5.8/tests/test_rpmspec.py 2017-12-11
13:06:13.000000000 +0100
@@ -17,6 +17,7 @@
import os
import imp
+import shutil
from ddt import data, ddt, file_data, unpack
from test_base import SetVersionBaseTest
@@ -56,7 +57,8 @@
def test_version_from_obsinfo(self):
obsinfo = self._write_obsinfo("test.obsinfo", "0.0.1")
files = [obsinfo]
- ver = sv.VersionDetector._get_version_via_obsinfo(files, '')
+ vdetector = sv.VersionDetector(None, files, '')
+ ver = vdetector._get_version_via_obsinfo()
self.assertEqual(ver, "0.0.1")
@file_data("data_test_from_commandline.json")
@@ -260,3 +262,11 @@
self.assertEqual(len(current_lines), len(expected_spec_lines))
for nbr, l in enumerate(current_lines):
self.assertEqual(l, expected_spec_lines[nbr])
+
+ def test_broken_utf8_spec(self):
+ fn = os.path.join(os.path.dirname(__file__), 'fixtures',
+ 'broken-utf8.spec')
+ nfn = fn + "1"
+ shutil.copyfile(fn, nfn)
+ sv._replace_spec_setup(nfn, '0.0.1')
+ os.unlink(nfn)