diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eb7115 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libcomps-0.1.11.tar.gz diff --git a/.libcomps.metadata b/.libcomps.metadata new file mode 100644 index 0000000..c46b0aa --- /dev/null +++ b/.libcomps.metadata @@ -0,0 +1 @@ +ad66eb33f10da57565fbbf44e30e4d418f0a0a4d SOURCES/libcomps-0.1.11.tar.gz diff --git a/SOURCES/0001-Fix-order-of-asserts-in-unit-test-RhBug1713220.patch b/SOURCES/0001-Fix-order-of-asserts-in-unit-test-RhBug1713220.patch new file mode 100644 index 0000000..20e98f7 --- /dev/null +++ b/SOURCES/0001-Fix-order-of-asserts-in-unit-test-RhBug1713220.patch @@ -0,0 +1,26 @@ +From 849ae4a7c7abe72baaeb22214be3e04e4e43eb81 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 22 May 2019 13:21:19 +0200 +Subject: [PATCH] Fix: order of asserts() in unit test (RhBug:1713220) + +--- + libcomps/src/python/tests/__test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libcomps/src/python/tests/__test.py b/libcomps/src/python/tests/__test.py +index 40c2e83..c9b4dd4 100644 +--- a/libcomps/src/python/tests/__test.py ++++ b/libcomps/src/python/tests/__test.py +@@ -891,8 +891,8 @@ class COMPSTest(unittest.TestCase): + gid1 = libcomps.GroupId("gid1") + gid2 = libcomps.GroupId("gid2", default=False) + gid3 = libcomps.GroupId("gid3", default=True) +- self.assertRaises(TypeError, gid1.__eq__, 1) + self.assertTrue(gid1 != None) ++ self.assertRaises(TypeError, gid1.__eq__, 1) + self.assertTrue(gid1 == gid1) + self.assertTrue(gid1 != "gid2") + self.assertTrue(gid1 != gid2) +-- +libgit2 0.28.2 + diff --git a/SOURCES/0002-Empty-dict-created-by-_by_lang-in-python-api-causes-segfault.patch b/SOURCES/0002-Empty-dict-created-by-_by_lang-in-python-api-causes-segfault.patch new file mode 100644 index 0000000..3e4f692 --- /dev/null +++ b/SOURCES/0002-Empty-dict-created-by-_by_lang-in-python-api-causes-segfault.patch @@ -0,0 +1,161 @@ +From 257df5670310775a9c279f5f34e3d088966759b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Mon, 7 Oct 2019 12:14:22 +0200 +Subject: [PATCH 1/3] Update couple of tests + +- list indices cannot by of type float +- remove unnecessary print +- update print with parenthesis which are now required in python +--- + libcomps/src/python/tests/__test.py | 2 +- + libcomps/src/python/tests/test_libcomps.py | 1 - + libcomps/src/python/tests/test_merge_comps.py | 4 ++-- + 3 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/libcomps/src/python/tests/__test.py b/libcomps/src/python/tests/__test.py +index c9b4dd4..c7529f3 100644 +--- a/libcomps/src/python/tests/__test.py ++++ b/libcomps/src/python/tests/__test.py +@@ -225,7 +225,7 @@ def test_union3(self): + def test_hash(self): + s = set() + for x in range(6): +- s.add(self.obj_constructor(**self.obj_data[x/2])) ++ s.add(self.obj_constructor(**self.obj_data[int(x/2)])) + self.assertTrue(len(s) == 3) + self.assertTrue(hash(self.obj_constructor(**self.obj_data[0])) ==\ + hash(self.obj_constructor(**self.obj_data[0]))) +diff --git a/libcomps/src/python/tests/test_libcomps.py b/libcomps/src/python/tests/test_libcomps.py +index 2a18984..71311ef 100755 +--- a/libcomps/src/python/tests/test_libcomps.py ++++ b/libcomps/src/python/tests/test_libcomps.py +@@ -19,7 +19,6 @@ + class TestLibcomps(unittest.TestCase): + + def setUp(self): +- print (dir(libcomps)) + self.comps = libcomps.Comps() + self.comps.fromxml_f("comps/comps-f21.xml") + self.tmp_dir = tempfile.mkdtemp() +diff --git a/libcomps/src/python/tests/test_merge_comps.py b/libcomps/src/python/tests/test_merge_comps.py +index beef2cf..73e743f 100755 +--- a/libcomps/src/python/tests/test_merge_comps.py ++++ b/libcomps/src/python/tests/test_merge_comps.py +@@ -7,10 +7,10 @@ + + try: + import _libpycomps as libcomps +- print "local tests" ++ print("local tests") + except ImportError: + import libcomps +- print "global tests" ++ print("global tests") + + + class TestMergeComps(unittest.TestCase): + +From 1b7add27595b12b9f47e54c3e5f1bda2177da346 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Mon, 7 Oct 2019 12:50:21 +0200 +Subject: [PATCH 2/3] Fix segfault when converting empty dict to string + (RhBug:1757959) + +Handle all elements in single loop consistently, instead of handling +last element separately which caused problems with empty dictionary. + +https://bugzilla.redhat.com/show_bug.cgi?id=1757959 +--- + libcomps/src/python/src/pycomps_dict.c | 20 +------------------- + 1 file changed, 1 insertion(+), 19 deletions(-) + +diff --git a/libcomps/src/python/src/pycomps_dict.c b/libcomps/src/python/src/pycomps_dict.c +index 1b42909..4a20cf7 100644 +--- a/libcomps/src/python/src/pycomps_dict.c ++++ b/libcomps/src/python/src/pycomps_dict.c +@@ -78,7 +78,7 @@ PyObject* PyCOMPSDict_str(PyObject *self) { + pairlist = comps_objdict_pairs(((PyCOMPS_Dict*)self)->dict); + char *tmpstr; + +- for (it = pairlist->first; it != pairlist->last; it = it->next) { ++ for (it = pairlist->first; it != NULL; it = it->next) { + tmp = ret; + tmpkey = __pycomps_lang_decode(((COMPS_ObjRTreePair*)it->data)->key); + if (!tmpkey) { +@@ -99,24 +99,6 @@ PyObject* PyCOMPSDict_str(PyObject *self) { + Py_XDECREF(tmpkey); + Py_XDECREF(tmpval); + } +- tmp = ret; +- tmpkey = __pycomps_lang_decode(((COMPS_RTreePair*)it->data)->key); +- if (!tmpkey) { +- goto out; +- } +- tmpstr = comps_object_tostr(((COMPS_ObjRTreePair*)it->data)->data); +- tmpval = __pycomps_lang_decode(tmpstr); +- free(tmpstr); +- if (!tmpval) { +- //PyErr_SetString(PyExc_TypeError, "val convert error"); +- goto out; +- } +- tmp2 = PyUnicode_FromFormat("%U = '%U'", tmpkey, tmpval); +- ret = PyUnicode_Concat(ret, tmp2); +- Py_XDECREF(tmp); +- Py_XDECREF(tmp2); +- Py_XDECREF(tmpkey); +- Py_XDECREF(tmpval); + + tmp = ret; + tmp2 = PyUnicode_FromString("}"); + +From 6b4bffb541e70a1715e91ba06de8172b57cd26f0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Mon, 7 Oct 2019 12:52:59 +0200 +Subject: [PATCH 3/3] Add test for python API with empty *_by_lang dictionary + input + +--- + .../python/tests/comps/comps_empty_by_lang_tags.xml | 12 ++++++++++++ + libcomps/src/python/tests/test_libcomps.py | 10 ++++++++++ + 2 files changed, 22 insertions(+) + create mode 100644 libcomps/src/python/tests/comps/comps_empty_by_lang_tags.xml + +diff --git a/libcomps/src/python/tests/comps/comps_empty_by_lang_tags.xml b/libcomps/src/python/tests/comps/comps_empty_by_lang_tags.xml +new file mode 100644 +index 0000000..2f40a86 +--- /dev/null ++++ b/libcomps/src/python/tests/comps/comps_empty_by_lang_tags.xml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ birds ++ ++ ++ ++ all ++ all ++ ++ +diff --git a/libcomps/src/python/tests/test_libcomps.py b/libcomps/src/python/tests/test_libcomps.py +index 71311ef..64c2b59 100755 +--- a/libcomps/src/python/tests/test_libcomps.py ++++ b/libcomps/src/python/tests/test_libcomps.py +@@ -153,6 +153,16 @@ def test_duplicate_groups(self): + #print self.comps.xml_str() + self.comps.fromxml_str(self.comps.xml_str()) + ++ def test_empty_by_lang_tags(self): ++ self.comps = libcomps.Comps() ++ self.comps.fromxml_f("comps/comps_empty_by_lang_tags.xml") ++ for group in self.comps.groups: ++ self.assertEqual("{}", str(group.name_by_lang)) ++ self.assertEqual("{}", str(group.desc_by_lang)) ++ ++ for category in self.comps.categories: ++ self.assertEqual("{}", str(category.name_by_lang)) ++ self.assertEqual("{}", str(category.desc_by_lang)) + + if __name__ == "__main__": + unittest.main(testRunner = utest.MyRunner) diff --git a/SOURCES/0003-Do-not-skip-type-mandatory-in-xml-output-and-test-it-RhBu1771224.patch b/SOURCES/0003-Do-not-skip-type-mandatory-in-xml-output-and-test-it-RhBu1771224.patch new file mode 100644 index 0000000..5b74ab4 --- /dev/null +++ b/SOURCES/0003-Do-not-skip-type-mandatory-in-xml-output-and-test-it-RhBu1771224.patch @@ -0,0 +1,64 @@ +From be21c727509e252859d7850f7d7ec06c51ba15b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Mon, 6 Jan 2020 12:08:00 +0100 +Subject: [PATCH] Do not skip type=mandatory in xml output and test it + (RhBug:1771224) + +The mandatory type is used when no other configuration and no other +type is specified but since this behavior can be overridden with passed +configuration it doesn't make sense to always skip outputting the type +mandatory. +The user can specify for example optional type as default and then +the knowledge that some specific were mandatory would be +lost. + +https://bugzilla.redhat.com/show_bug.cgi?id=1771224 +--- + libcomps/src/comps_docpackage.c | 5 +++-- + libcomps/src/python/tests/__test.py | 10 +++++++++- + 2 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/libcomps/src/comps_docpackage.c b/libcomps/src/comps_docpackage.c +index 25d8564..f2d6bae 100644 +--- a/libcomps/src/comps_docpackage.c ++++ b/libcomps/src/comps_docpackage.c +@@ -164,8 +164,9 @@ signed char comps_docpackage_xml(COMPS_DocGroupPackage *pkg, + str = "conditional"; + else + str = "default"; +- if (pkg->type != COMPS_PACKAGE_MANDATORY) +- ret = xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST str); ++ ++ ret = xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST str); ++ + if (pkg->requires) { + str = comps_object_tostr((COMPS_Object*)pkg->requires); + ret = xmlTextWriterWriteAttribute(writer, (xmlChar*) "requires", +diff --git a/libcomps/src/python/tests/__test.py b/libcomps/src/python/tests/__test.py +index c7529f3..9cb957a 100644 +--- a/libcomps/src/python/tests/__test.py ++++ b/libcomps/src/python/tests/__test.py +@@ -620,6 +620,14 @@ def test_hash(self): + self.assertTrue(hash(pkg2) != hash(pkg3)) + self.assertTrue(len(set([pkg1,pkg2,pkg3])) == 2) + ++ def test_mandatory_in_xml_out(self): ++ self.comps = libcomps.Comps() ++ self.comps.groups.append(libcomps.Group("g1", "group1", "group desc", 0, 0, 0, "en")) ++ self.comps.groups[0].packages.append(libcomps.Package("kernel", libcomps.PACKAGE_TYPE_MANDATORY)) ++ ++ out = self.comps.xml_str() ++ self.assertTrue("kernel" in out) ++ + #@unittest.skip("skip") + class DictTest(unittest.TestCase): + def test_dict(self): +@@ -998,7 +1006,7 @@ def test_xml_options(self): + self.assertEqual(len(comps2.groups), 0) + self.assertEqual(len(comps2.categories), 0) + self.assertEqual(len(comps2.environments), 0) +- ++ + s = comps.toxml_str(xml_options={"empty_groups": True, + "empty_categories": True, + "empty_environments": True}) diff --git a/SPECS/libcomps.spec b/SPECS/libcomps.spec new file mode 100644 index 0000000..856a014 --- /dev/null +++ b/SPECS/libcomps.spec @@ -0,0 +1,374 @@ +# Do not build python3 bindings for RHEL <= 7 +%if 0%{?rhel} && 0%{?rhel} <= 7 +%bcond_with python3 +%else +%bcond_without python3 +%endif + +# Do not build python2 bindings for RHEL > 7 and Fedora > 29 +%if 0%{?rhel} > 7 || 0%{?fedora} > 29 +%bcond_with python2 +%else +%bcond_without python2 +%endif + +Name: libcomps +Version: 0.1.11 +Release: 4%{?dist} +Summary: Comps XML file manipulation library + +License: GPLv2+ +URL: https://github.com/rpm-software-management/libcomps +Source0: %{url}/archive/%{name}-%{version}/%{name}-%{version}.tar.gz +Patch0: 0001-Fix-order-of-asserts-in-unit-test-RhBug1713220.patch +Patch1: 0002-Empty-dict-created-by-_by_lang-in-python-api-causes-segfault.patch +Patch2: 0003-Do-not-skip-type-mandatory-in-xml-output-and-test-it-RhBu1771224.patch + +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: gcc +BuildRequires: libxml2-devel +BuildRequires: check-devel +BuildRequires: expat-devel +BuildRequires: zlib-devel + +%description +Libcomps is library for structure-like manipulation with content of +comps XML files. Supports read/write XML file, structure(s) modification. + +%package devel +Summary: Development files for libcomps library +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for libcomps library. + +%package doc +Summary: Documentation files for libcomps library +Requires: %{name} = %{version}-%{release} +BuildArch: noarch +BuildRequires: doxygen + +%description doc +Documentation files for libcomps library. + +%package -n python-%{name}-doc +Summary: Documentation files for python bindings libcomps library +Requires: %{name} = %{version}-%{release} +BuildArch: noarch +%if %{with python3} +BuildRequires: python3-sphinx +%endif +%if %{with python2} +%if 0%{?rhel} && 0%{?rhel} <= 7 +BuildRequires: python-sphinx +%else +BuildRequires: python2-sphinx +%endif +%endif + +%description -n python-%{name}-doc +Documentation files for python bindings libcomps library. + +%if %{with python2} +%package -n python2-%{name} +Summary: Python 2 bindings for libcomps library +%{?python_provide:%python_provide python2-%{name}} +BuildRequires: python2-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n python2-%{name} +Python 2 bindings for libcomps library. +%endif + +%if %{with python3} +%package -n python3-%{name} +Summary: Python 3 bindings for libcomps library +BuildRequires: python3-devel +%{?python_provide:%python_provide python3-%{name}} +Requires: %{name}%{?_isa} = %{version}-%{release} +Obsoletes: platform-python-%{name} < %{version}-%{release} + +%description -n python3-%{name} +Python3 bindings for libcomps library. +%endif + +%prep +%autosetup -n %{name}-%{name}-%{version} -p1 + +%if %{with python2} +mkdir build-py2 +%endif +%if %{with python3} +mkdir build-py3 +%endif +mkdir build-doc + +%build +%if %{with python2} +pushd build-py2 + %cmake ../libcomps/ -DPYTHON_DESIRED:STRING=2 + %make_build +popd +%endif + +%if %{with python3} +pushd build-py3 + %cmake ../libcomps/ -DPYTHON_DESIRED:STRING=3 + %make_build +popd +%endif + +pushd build-doc +%if %{with python2} + %cmake ../libcomps/ -DPYTHON_DESIRED:STRING=2 +%else +%if %{with python3} + %cmake ../libcomps/ -DPYTHON_DESIRED:STRING=3 +%endif +%endif + make %{?_smp_mflags} docs + make %{?_smp_mflags} pydocs +popd + +%install +%if %{with python2} +pushd build-py2 + %make_install +popd +%endif + +%if %{with python3} +pushd build-py3 + %make_install +popd +%endif + +%check +%if %{with python2} +pushd build-py2 + make test + make pytest +popd +%endif + +%if %{with python3} +pushd build-py3 + make test + make pytest +popd +%endif + +%if %{undefined ldconfig_scriptlets} +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig +%else +%ldconfig_scriptlets +%endif + +%files +%license COPYING +%doc README.md +%{_libdir}/%{name}.so.* + +%files devel +%{_libdir}/%{name}.so +%{_includedir}/%{name}/ + +%files doc +%doc build-doc/docs/libcomps-doc/html + +%files -n python-%{name}-doc +%doc build-doc/src/python/docs/html + +%if %{with python2} +%files -n python2-%{name} +%{python2_sitearch}/%{name}/ +%endif + +%if %{with python3} +%files -n python3-%{name} +%{python3_sitearch}/%{name}/ +%endif + +%changelog +* Mon Jan 13 2020 Ales Matej - 0.1.11-4 +- Do not skip type=mandatory in xml output (RhBug:1771224) + +* Wed Nov 13 2019 Ales Matej - 0.1.11-3 +- Fix segfault caused by empty dict created by *_by_lang in python api (RhBug:1757959) + +* Thu Aug 01 2019 Pavla Kratochvilova - 0.1.11-2 +- Backport patch: Fix order of asserts in unit test (RhBug:1713220) + +* Mon May 13 2019 Pavla Kratochvilova - 0.1.11-1 +- Update to 0.1.11 + +* Thu Dec 13 2018 Daniel Mach - 0.1.8-13 +- Fix resource leaks, double free, unused code, optimize +- Resolves: rhbz#1606974 + +* Mon Jun 25 2018 Lumír Balhar - 0.1.8-12 +- Disable Python 2 subpackage (and dependent) by default + +* Wed Feb 07 2018 Fedora Release Engineering - 0.1.8-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Jan 31 2018 Igor Gnatenko - 0.1.8-10 +- Switch to %%ldconfig_scriptlets + +* Tue Nov 07 2017 Igor Gnatenko - 0.1.8-9 +- Use better Obsoletes for platform-python + +* Fri Nov 03 2017 Igor Gnatenko - 0.1.8-8 +- Remove platform-python subpackage + +* Fri Sep 01 2017 Igor Gnatenko - 0.1.8-7 +- Disable platform python on old releases + +* Thu Aug 10 2017 Lumír Balhar - 0.1.8-6 +- Add Platform Python subpackage (https://fedoraproject.org/wiki/Changes/Platform_Python_Stack) + +* Thu Aug 03 2017 Fedora Release Engineering - 0.1.8-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.1.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 0.1.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Dec 13 2016 Stratakis Charalampos - 0.1.8-2 +- Rebuild for Python 3.6 + +* Thu Sep 22 2016 Igor Gnatenko - 0.1.8-1 +- Update to 0.1.8 + +* Tue Aug 09 2016 Igor Gnatenko - 0.1.7-6 +- Add %%{?system_python_abi} + +* Tue Jul 19 2016 Fedora Release Engineering - 0.1.7-5 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Tue Apr 12 2016 Igor Gnatenko - 0.1.7-4 +- Adopt to new packaging guidelines +- Use %%license macro +- Fix file ownerships + +* Thu Feb 04 2016 Fedora Release Engineering - 0.1.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Oct 14 2015 Robert Kuska - 0.1.7-2 +- Rebuilt for Python3.5 rebuild + +* Thu Jul 02 2015 Jindrich Luza 0.1.7 +- added langpacks to union process +- comps DOCTYPE read-write-read fix +- support biarchonly attribute +- fixed rhbz#1073885 rhbz#1073890 rhbz#1073907 rhbz#1073979 +- fix rhbz#1073079 +- comps_*_match() now support fnmatching +- added libpycomps.MATCH_IGNORECASE as matching flag +- added group.packages_match +- added comps.groups_match, comps.categories_match, comps.entironments_match +- PyCOMPS_Package hash +- cmake-2.6, python-2.6, RHEL-6 compatible +- '_arch' attribute change to 'arch' +- empty 'arch' attribute will be ommited from output from now + +* Wed Jan 29 2014 Jindrich Luza 0.1.6 +- version bumped +- added libcomps.MDict.keys() +- libcomps.MDict.values() +- libcomps.MDict.items() +- libcomps.MDict.clear() +- libcomps.MDict.update() +- libcomps.MDict.copy() +- COMPS_List replaced with COMPS_HSList +- added missing basearchonly to DocGroupPackage +- python3/CMakeLists.txt fixed +- added explicit attributes support for xml options +- added arch_filter test for python +- insert method in libcomps.Sequence +- Unioning is now accomplished with replace x append policy +- Weaker package equality check (comparing only name now) +- Fixed leeks in unioning +- modified test_merge_comps test_libcomps +- dictionaries are now storing keys in alphabetical order +- comps parser redesigned +- change python/tests directory composition +- added elem attributes check in parser +- xml output '_arch' attribute support +- parser and xml output defaults options for specify defaults values +- comps object validation in python +- added validity checker before append/set object to list (python only) +- .validate() method +- added libcomps.Dict.keys +- libcomps.Dict.values +- libcomps.Dict.items +- libcomps.Dict.clear +- libcomps.Dict.update +- libcomps.Dict.copy +- added xml output options (comps.xml_str([options = {}]), comps.xml_f(options = {})) + +* Wed Oct 23 2013 Jindrich Luza 0.1.4-4 +- group.uservisible is true by default now. +- fixed comps_mobjradix parent node problem +- implemented bindings for blacklist, whiteout and langpacks +- COMPS_Logger redesigned + +* Tue Oct 08 2013 Jindrich Luza 0.1.5 +- version bump +- PyCOMPS_Sequence.__getitem__["objectid"] implemented for libcomps.GroupList, libcomps.CategoryList, libcomps.EnvList +- added missing files +- missing display_order fix for libcomps.Environment + +* Tue Oct 01 2013 Jindrich Luza 0.1.4 +- added missing files +- architectural redesign finished +- fixed #1003986 by Gustavo Luiz Duarte guidelines (but not tested on ppc) +- fixed bug #1000449 +- fixed bug #1000442 +- added GroupId.default test +- some minor unreported bugs discovered during testing fixed +- finished default attribute support in groupid object +- Comps.get_last_parse_errors and Comps.get_last_parse_log has been renamed +- as Comps.get_last_errors and Comps.get_last_log +- version bumped. Python bindings is now easier. +- added missing files + +* Tue Aug 20 2013 Jindrich Luza 0.1.3 +- finished default attribute support in groupid object +- Comps.get_last_parse_errors and Comps.get_last_parse_log has been renamed +- as Comps.get_last_errors and Comps.get_last_log +- finished default attribute support in groupid object +- Comps.get_last_parse_errors and Comps.get_last_parse_log has been renamed +- as Comps.get_last_errors and Comps.get_last_log + +* Thu Jul 18 2013 Jindrich Luza 0.1.2 +- automatic changelog system +- fixed issue #14 +- libcomps.Dict is now behave more like python dict. Implemented iter(libcomps.Dict) +- libcomps.iteritems() and libcomps.itervalues() +- remaked error reporting system. +- libcomps.Comps.fromxml_f and libcomps.Comps.fromxml_str now return +- -1, 0 or 1. 0 means parse procedure completed without any problem, +- 1 means there's some errors or warnings but not fatal. -1 indicates +- fatal error problem (some results maybe given, but probably incomplete +- and invalid) +- errors catched during parsing can be obtained by calling +- libcomps.Comps.get_last_parse_errors +- all log is given by +- libcomps.Comps.get_last_parse_log +- prop system complete +- fixed issue 1 +- fixed issue 3 +- added support +- new prop system in progress.... +- separated doc package +- some minor fixes in CMakeFiles +- improved integrated tests + +* Tue Jun 25 2013 Jindrich Luza 0.1.1-1 +- Automatic commit of package [libcomps] release [0.1.1-1]. +