import libcomps-0.1.16-4.el9

This commit is contained in:
CentOS Sources 2021-11-03 21:33:45 -04:00 committed by Stepan Oksanichenko
commit a72546f2f1
4 changed files with 753 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/libcomps-0.1.16.tar.gz

1
.libcomps.metadata Normal file
View File

@ -0,0 +1 @@
2837109aca4e610c57e35e43c7cbb0e296cfdaa9 SOURCES/libcomps-0.1.16.tar.gz

View File

@ -0,0 +1,388 @@
From 879e67e5f6fa01f5ae745c9287e95f74541d32ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Mon, 19 Jul 2021 14:53:04 +0200
Subject: [PATCH 1/3] Fix several covscan warnings
- don't reuse `tmp` variable across the entire function
- don't reuse `it` variable across the entire function
- check whether malloc was successful
- do not copy strings unnecessarily
- remove couple of macros which were confusing covscans and are too
verbose
- add missing return value checks
---
libcomps/src/comps_doc.c | 7 +++----
libcomps/src/comps_doccategory.c | 9 +++++++--
libcomps/src/comps_docenv.c | 10 ++++++++--
libcomps/src/comps_docgroup.c | 9 +++++++--
libcomps/src/comps_parse.c | 12 ++++--------
libcomps/src/comps_set.c | 18 ++++++++++--------
libcomps/src/python/src/pycomps.c | 5 ++---
libcomps/src/python/src/pycomps_sequence.c | 13 +++++++++++++
8 files changed, 54 insertions(+), 29 deletions(-)
diff --git a/libcomps/src/comps_doc.c b/libcomps/src/comps_doc.c
index 9e6005b..c5e65cd 100644
--- a/libcomps/src/comps_doc.c
+++ b/libcomps/src/comps_doc.c
@@ -644,7 +644,6 @@ static signed char comps_doc_xml(COMPS_Doc *doc, xmlTextWriterPtr writer,
COMPS_ObjMDict *mdict;
COMPS_HSList *hslist;
COMPS_HSListItem *hsit;
- char *tmp;
int retc;
signed char ret = 0, tmpret;
@@ -709,7 +708,7 @@ static signed char comps_doc_xml(COMPS_Doc *doc, xmlTextWriterPtr writer,
xmlTextWriterWriteAttribute(writer, BAD_CAST "name",
(xmlChar*) ((COMPS_ObjRTreePair*)hsit->data)->key);
- tmp = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data);
+ char *tmp = comps_object_tostr(((COMPS_ObjRTreePair*)hsit->data)->data);
xmlTextWriterWriteAttribute(writer, BAD_CAST "install", BAD_CAST tmp);
free(tmp);
@@ -749,7 +748,7 @@ static signed char comps_doc_xml(COMPS_Doc *doc, xmlTextWriterPtr writer,
xmlTextWriterWriteAttribute(writer, BAD_CAST "name",
(xmlChar*) ((COMPS_ObjRTreePair*)hsit->data)->key);
- tmp = comps_object_tostr(it->comps_obj);
+ char *tmp = comps_object_tostr(it->comps_obj);
xmlTextWriterWriteAttribute(writer, BAD_CAST "arch", BAD_CAST tmp);
free(tmp);
@@ -789,7 +788,7 @@ static signed char comps_doc_xml(COMPS_Doc *doc, xmlTextWriterPtr writer,
xmlTextWriterWriteAttribute(writer, BAD_CAST "requires",
(xmlChar*) ((COMPS_ObjRTreePair*)hsit->data)->key);
- tmp = comps_object_tostr(it->comps_obj);
+ char *tmp = comps_object_tostr(it->comps_obj);
xmlTextWriterWriteAttribute(writer, BAD_CAST "package", BAD_CAST tmp);
free(tmp);
diff --git a/libcomps/src/comps_doccategory.c b/libcomps/src/comps_doccategory.c
index 9c36633..59f9772 100644
--- a/libcomps/src/comps_doccategory.c
+++ b/libcomps/src/comps_doccategory.c
@@ -317,8 +317,13 @@ char* comps_doccategory_tostr_u(COMPS_Object* cat) {
total_len += strlen(desc_by_lang_str);
group_ids_str = comps_object_tostr((COMPS_Object*)_cat_->group_ids);
total_len += strlen(group_ids_str);
-
- ret = malloc(sizeof(char) * (total_len+2+(6*2)+strlen(head)));
+
+ if ((ret = malloc(sizeof(char) * (total_len+2+(6*2)+strlen(head)))) == NULL) {
+ free(name_by_lang_str);
+ free(desc_by_lang_str);
+ free(group_ids_str);
+ return NULL;
+ }
ret[0] = 0;
strcat(ret, head);
for (int i=0; i<4; i++) {
diff --git a/libcomps/src/comps_docenv.c b/libcomps/src/comps_docenv.c
index 11b9b72..c93d7be 100644
--- a/libcomps/src/comps_docenv.c
+++ b/libcomps/src/comps_docenv.c
@@ -415,8 +415,14 @@ char* comps_docenv_tostr_u(COMPS_Object* env) {
total_len += strlen(group_list_str);
option_list_str = comps_object_tostr((COMPS_Object*)_env_->option_list);
total_len += strlen(option_list_str);
-
- ret = malloc(sizeof(char) * (total_len+2+(8*2)+strlen(head)));
+
+ if ((ret = malloc(sizeof(char) * (total_len+2+(8*2)+strlen(head)))) == NULL) {
+ free(name_by_lang_str);
+ free(desc_by_lang_str);
+ free(group_list_str);
+ free(option_list_str);
+ return NULL;
+ }
ret[0] = 0;
strcat(ret, head);
for (int i=0; i<4; i++) {
diff --git a/libcomps/src/comps_docgroup.c b/libcomps/src/comps_docgroup.c
index 6c0eb14..6f89ed6 100644
--- a/libcomps/src/comps_docgroup.c
+++ b/libcomps/src/comps_docgroup.c
@@ -399,8 +399,13 @@ char* comps_docgroup_tostr_u(COMPS_Object* group) {
total_len += strlen(desc_by_lang_str);
group_packages_str = comps_object_tostr((COMPS_Object*)_group_->packages);
total_len += strlen(group_packages_str);
-
- ret = malloc(sizeof(char) * (total_len+2+(8*2)+strlen(head)));
+
+ if ((ret = malloc(sizeof(char) * (total_len+2+(8*2)+strlen(head)))) == NULL) {
+ free(name_by_lang_str);
+ free(desc_by_lang_str);
+ free(group_packages_str);
+ return NULL;
+ }
ret[0] = 0;
strcat(ret, head);
for (int i=0; i<6; i++) {
diff --git a/libcomps/src/comps_parse.c b/libcomps/src/comps_parse.c
index 55dbd2f..18133a2 100644
--- a/libcomps/src/comps_parse.c
+++ b/libcomps/src/comps_parse.c
@@ -436,19 +436,16 @@ void comps_parse_char_data_handler(void *userData,
}
void comps_parse_check_attributes(COMPS_Parsed *parsed, COMPS_Elem* elem) {
- #define parser_line XML_GetCurrentLineNumber(parsed->parser)
- #define parser_col XML_GetCurrentColumnNumber(parsed->parser)
const COMPS_ElemInfo *info;
info = COMPS_ElemInfos[elem->type];
int attr_count;
COMPS_HSList *keys;
char *val;
- COMPS_HSListItem *it;
for (attr_count = 0; info->attributes[attr_count] != NULL; attr_count++);
keys = comps_dict_keys(elem->attrs);
for (int x =0; x<attr_count; x++) {
- for (it = keys->first; it != NULL; it = it->next) {
+ for (COMPS_HSListItem *it = keys->first; it != NULL; it = it->next) {
if (strcmp((char*)it->data, info->attributes[x]->name) == 0) {
if (info->attributes[x]->val_check) {
val = comps_dict_get(elem->attrs, it->data);
@@ -464,12 +461,11 @@ void comps_parse_check_attributes(COMPS_Parsed *parsed, COMPS_Elem* elem) {
}
}
}
- for (it = keys->first; it != NULL; it = it->next) {
+ for (COMPS_HSListItem *it = keys->first; it != NULL; it = it->next) {
comps_log_warning_x(parsed->log, COMPS_ERR_ATTR_UNKNOWN, 4,
comps_str(it->data), comps_str(info->name),
- comps_num(parser_line), comps_num(parser_col));
+ comps_num(XML_GetCurrentLineNumber(parsed->parser)),
+ comps_num(XML_GetCurrentColumnNumber(parsed->parser)));
}
comps_hslist_destroy(&keys);
- #undef parser_line
- #undef parser_col
}
diff --git a/libcomps/src/comps_set.c b/libcomps/src/comps_set.c
index e3eecfa..9ea048a 100644
--- a/libcomps/src/comps_set.c
+++ b/libcomps/src/comps_set.c
@@ -113,14 +113,16 @@ char comps_set_add(COMPS_Set * set, void *item) {
}
void* comps_set_remove(COMPS_Set *set, void *item) {
- void * ret;
- COMPS_HSListItem * it;
- for (it = set->data->first; it != NULL; it = it->next) {
- if (set->eqf(it->data, item)) {
- comps_hslist_remove(set->data, it);
- ret = it->data;
- free(it);
- return ret;
+ if (set && set->data) {
+ void * ret;
+ COMPS_HSListItem * it;
+ for (it = set->data->first; it != NULL; it = it->next) {
+ if (set->eqf(it->data, item)) {
+ comps_hslist_remove(set->data, it);
+ ret = it->data;
+ free(it);
+ return ret;
+ }
}
}
return NULL;
diff --git a/libcomps/src/python/src/pycomps.c b/libcomps/src/python/src/pycomps.c
index aa73a8e..1c1cb3b 100644
--- a/libcomps/src/python/src/pycomps.c
+++ b/libcomps/src/python/src/pycomps.c
@@ -499,7 +499,6 @@ PyObject* PyCOMPS_filter_arches(PyObject *self, PyObject *other) {
PyCOMPS *doc;
COMPS_Doc *comps_doc;
PyObject *item;
- char *str;
char created = 0;
if ((Py_TYPE(other) != &PyCOMPS_StrSeqType) &&
(Py_TYPE(other) != &PyList_Type)) {
@@ -512,9 +511,9 @@ PyObject* PyCOMPS_filter_arches(PyObject *self, PyObject *other) {
arches = COMPS_OBJECT_CREATE(COMPS_ObjList, NULL);
for (Py_ssize_t x=0; x < PyList_Size(other); x++) {
item = PyList_GetItem(other, x);
+ char *str;
__pycomps_arg_to_char(item, &str);
- comps_objlist_append_x(arches, (COMPS_Object*)comps_str(str));
- free(str);
+ comps_objlist_append_x(arches, (COMPS_Object*)comps_str_x(str));
}
} else {
arches = ((PyCOMPS_Sequence*)other)->list;
diff --git a/libcomps/src/python/src/pycomps_sequence.c b/libcomps/src/python/src/pycomps_sequence.c
index acd2e71..4f5f886 100644
--- a/libcomps/src/python/src/pycomps_sequence.c
+++ b/libcomps/src/python/src/pycomps_sequence.c
@@ -307,12 +307,14 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
n = _seq_->list->len;
uret = PySlice_GetIndicesEx((PyObject*)key, n,
&istart, &istop, &istep, &ilen);
+ if (uret) return -1;
if (ilen == 0) {
uret = PySlice_GetIndicesEx((PyObject*)key, n+istart,
&istart, &istop, &istep, &ilen);
}
if (uret) return -1;
if (val) {
+ // set val for list items indexed by given slice
if (Py_TYPE(self) != Py_TYPE(val)) {
PyErr_SetString(PyExc_TypeError, "different object class");
return -1;
@@ -340,6 +342,11 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
for (i=0 ; i<istart && it != NULL; it=it->next, i++);
if (istep != 1) {
while (clen != ilen) {
+ if (!it) {
+ PyErr_SetString(PyExc_ValueError,
+ "failed to index list using the given slice");
+ return -1;
+ }
COMPS_OBJECT_DESTROY(it->comps_obj);
it->comps_obj = comps_object_incref(it2->comps_obj);
clen += 1;
@@ -372,10 +379,16 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
}
return 0;
} else {
+ // if val is NULL we want to delete list items indexed by given slice
clen = 0;
it = ((PyCOMPS_Sequence*)self)->list->first;
for (i=0 ; i<istart && it != NULL; it=it->next, i++);
while (clen != ilen) {
+ if (!it) {
+ PyErr_SetString(PyExc_ValueError,
+ "failed to index list using the given slice");
+ return -1;
+ }
if (it->comps_obj) {
COMPS_OBJECT_DESTROY(it->comps_obj);
it->comps_obj = NULL;
From 50f3b3b80c8f21987ddfc726bcc75980e0db1b95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Tue, 20 Jul 2021 11:44:35 +0200
Subject: [PATCH 2/3] Add missing undef for _seq_ macro and use it everywhere
---
libcomps/src/python/src/pycomps_sequence.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/libcomps/src/python/src/pycomps_sequence.c b/libcomps/src/python/src/pycomps_sequence.c
index 4f5f886..9b42341 100644
--- a/libcomps/src/python/src/pycomps_sequence.c
+++ b/libcomps/src/python/src/pycomps_sequence.c
@@ -352,7 +352,7 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
clen += 1;
it2 = it2->next;
for (i=0 ; i<istep && it != NULL; it=it->next, i++);
- if (!it) it = ((PyCOMPS_Sequence*)self)->list->first;
+ if (!it) it = _seq_->list->first;
for (; i<istep; it=it->next, i++);
}
} else {
@@ -366,14 +366,12 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
}
if (it == NULL) {
for (;it2 != NULL; it2 = it2->next) {
- comps_objlist_append(((PyCOMPS_Sequence*)self)->list,
- it2->comps_obj);
+ comps_objlist_append(_seq_->list, it2->comps_obj);
}
}
if (it != NULL) {
for (c = i; c < istop; c++) {
- comps_objlist_remove_at(((PyCOMPS_Sequence*)self)->list,
- i);
+ comps_objlist_remove_at(_seq_->list, i);
}
}
}
@@ -381,7 +379,7 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
} else {
// if val is NULL we want to delete list items indexed by given slice
clen = 0;
- it = ((PyCOMPS_Sequence*)self)->list->first;
+ it = _seq_->list->first;
for (i=0 ; i<istart && it != NULL; it=it->next, i++);
while (clen != ilen) {
if (!it) {
@@ -395,23 +393,24 @@ int list_set_slice(PyObject *self, PyObject *key, PyObject *val) {
}
clen+=1;
for (i=0 ; i<istep && it != NULL; it=it->next, i++);
- if (!it) it = ((PyCOMPS_Sequence*)self)->list->first;
+ if (!it) it = _seq_->list->first;
for (; i<istep; it=it->next, i++);
}
it2 = NULL;
- for (i=0, it = ((PyCOMPS_Sequence*)self)->list->first;
+ for (i=0, it = _seq_->list->first;
it != NULL; it2 = it, it = it->next, i++) {
if (it2 && !it2->comps_obj) {
- comps_objlist_remove_at(((PyCOMPS_Sequence*)self)->list, i);
+ comps_objlist_remove_at(_seq_->list, i);
}
}
if (it2 && !it2->comps_obj) {
- comps_objlist_remove_at(((PyCOMPS_Sequence*)self)->list, i);
+ comps_objlist_remove_at(_seq_->list, i);
}
return 0;
}
}
return 0;
+ #undef _seq_
}
int __PyCOMPSSeq_set(PyObject *self, PyObject *key, PyObject *val,
From e7521d21bba6407957325a63cb9d65c07a2e0a94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Date: Tue, 10 Aug 2021 08:12:28 +0200
Subject: [PATCH 3/3] Check return value of `__pycomps_arg_to_char` and add a
test
It fixes a crash when the conversion to char is not successful.
---
libcomps/src/python/src/pycomps.c | 5 ++++-
libcomps/src/python/tests/__test.py | 5 +++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/libcomps/src/python/src/pycomps.c b/libcomps/src/python/src/pycomps.c
index 1c1cb3b..ee6f691 100644
--- a/libcomps/src/python/src/pycomps.c
+++ b/libcomps/src/python/src/pycomps.c
@@ -512,7 +512,10 @@ PyObject* PyCOMPS_filter_arches(PyObject *self, PyObject *other) {
for (Py_ssize_t x=0; x < PyList_Size(other); x++) {
item = PyList_GetItem(other, x);
char *str;
- __pycomps_arg_to_char(item, &str);
+ if (__pycomps_arg_to_char(item, &str)) {
+ COMPS_OBJECT_DESTROY(arches);
+ return NULL;
+ }
comps_objlist_append_x(arches, (COMPS_Object*)comps_str_x(str));
}
} else {
diff --git a/libcomps/src/python/tests/__test.py b/libcomps/src/python/tests/__test.py
index 35a41f7..4152c7d 100644
--- a/libcomps/src/python/tests/__test.py
+++ b/libcomps/src/python/tests/__test.py
@@ -1088,6 +1088,11 @@ def test_arches(self):
comps5.fromxml_str(s)
self.assertTrue(comps == comps5)
+ def test_arches_invalid_input(self):
+ INVALID_UTF8_CHAR = '\udcfd'
+ c = libcomps.Comps()
+ self.assertRaises(TypeError, c.arch_filter, [INVALID_UTF8_CHAR])
+
#@unittest.skip("")
def test_validate(self):
c = libcomps.Comps()

363
SPECS/libcomps.spec Normal file
View File

@ -0,0 +1,363 @@
%define __cmake_in_source_build 1
Name: libcomps
Version: 0.1.16
Release: 4%{?dist}
Summary: Comps XML file manipulation library
License: GPLv2+
URL: https://github.com/rpm-software-management/libcomps
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
Patch1: 0001-Fix-several-covscan-warnings.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
BuildRequires: python3-sphinx
%description -n python-%{name}-doc
Documentation files for python bindings libcomps library.
%package -n python3-%{name}
Summary: Python 3 bindings for libcomps library
BuildRequires: python3-devel
BuildRequires: make
%{?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.
%prep
%autosetup -p1 -n %{name}-%{version}
mkdir build-py3
mkdir build-doc
%build
pushd build-py3
%cmake ../libcomps/
%make_build
popd
pushd build-doc
%cmake ../libcomps/
make %{?_smp_mflags} docs
make %{?_smp_mflags} pydocs
popd
%install
pushd build-py3
%make_install
popd
%check
pushd build-py3
make test
make pytest
popd
%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
%{_libdir}/pkgconfig/%{name}.pc
%{_includedir}/%{name}/
%files doc
%doc build-doc/docs/libcomps-doc/html
%files -n python-%{name}-doc
%doc build-doc/src/python/docs/html
%files -n python3-%{name}
%{python3_sitearch}/%{name}/
%{python3_sitearch}/%{name}-%{version}-py%{python3_version}.egg-info
%changelog
* Mon Aug 16 2021 Pavla Kratochvilova <pkratoch@redhat.com> - 0.1.16-4
- Fix issues detected by static analyzers
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 0.1.16-3
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Tue Apr 27 2021 Pavla Kratochvilova <pkratoch@redhat.com> - 0.1.16-1
- Update to 0.1.16
- Fix a crash when clearing COMPS_ObjRTree (RhBug:1888343)
- Fix memory leaks and resource leaks
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 0.1.15-7
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.15-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Aug 07 2020 Nicola Sella <nsella@redhat.com> - 0.1.15-5
- spec: Fix building with new cmake macros
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.15-4
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.15-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri May 22 2020 Miro Hrončok <mhroncok@redhat.com> - 0.1.15-2
- Rebuilt for Python 3.9
* Wed Apr 01 2020 Ales Matej <amatej@redhat.com> - 0.1.15-1
- Update to 0.1.15
- Do not skip type=mandatory in xml output (RhBug:1771224)
* Fri Jan 31 2020 Ales Matej <amatej@redhat.com> - 0.1.14-4
- Fix global header variable defined without extern for gcc-10
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.14-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Dec 14 2019 Jeff Law <law@redhat.com> - 0.1.14-2
- Fix inline vs static inline issue for gcc-10
* Fri Nov 29 2019 Ales Matej <amatej@redhat.com> - 0.1.14-1
- Update to 0.1.14
* Fri Nov 29 2019 Ales Matej <amatej@redhat.com> - 0.1.12-1
- Update to 0.1.12
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 0.1.11-5
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Thu Aug 15 2019 Miro Hrončok <mhroncok@redhat.com> - 0.1.11-4
- Rebuilt for Python 3.8
* Wed Jul 31 2019 Miro Hrončok <mhroncok@redhat.com> - 0.1.11-3
- Fix Python method descriptors for Python 3.8 (#1734777)
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon Mar 11 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.1.11-1
- Update to 0.1.11
* Wed Feb 13 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 0.1.10-1
- Update to 0.1.10
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Tue Nov 27 2018 Marek Blaha <mblaha@redhat.com> - 0.1.8-15
- Disable Python 2 bindings for Fedora >= 30
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Jun 15 2018 Miro Hrončok <mhroncok@redhat.com> - 0.1.8-13
- Rebuilt for Python 3.7
* Tue Feb 20 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.1.8-12
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Jan 31 2018 Igor Gnatenko <ignatenko@redhat.com> - 0.1.8-10
- Switch to %%ldconfig_scriptlets
* Tue Nov 07 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.1.8-9
- Use better Obsoletes for platform-python
* Fri Nov 03 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.1.8-8
- Remove platform-python subpackage
* Fri Sep 01 2017 Igor Gnatenko <ignatenko@redhat.com> - 0.1.8-7
- Disable platform python on old releases
* Thu Aug 10 2017 Lumír Balhar <lbalhar@redhat.com> - 0.1.8-6
- Add Platform Python subpackage (https://fedoraproject.org/wiki/Changes/Platform_Python_Stack)
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Dec 13 2016 Stratakis Charalampos <cstratak@redhat.com> - 0.1.8-2
- Rebuild for Python 3.6
* Thu Sep 22 2016 Igor Gnatenko <ignatenko@redhat.com> - 0.1.8-1
- Update to 0.1.8
* Tue Aug 09 2016 Igor Gnatenko <ignatenko@redhat.com> - 0.1.7-6
- Add %%{?system_python_abi}
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.1.7-5
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Tue Apr 12 2016 Igor Gnatenko <ignatenko@redhat.com> - 0.1.7-4
- Adopt to new packaging guidelines
- Use %%license macro
- Fix file ownerships
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.7-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Oct 14 2015 Robert Kuska <rkuska@redhat.com> - 0.1.7-2
- Rebuilt for Python3.5 rebuild
* Thu Jul 02 2015 Jindrich Luza <jluza@redhat.com> 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 <jluza@redhat.com> 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 <jluza@redhat.com> 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 <jluza@redhat.com> 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 <jluza@redhat.com> 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 <jluza@redhat.com> 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 <jluza@redhat.com> 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 <packagereq requires=...> support
- new prop system in progress....
- separated doc package
- some minor fixes in CMakeFiles
- improved integrated tests
* Tue Jun 25 2013 Jindrich Luza <jluza@redhat.com> 0.1.1-1
- Automatic commit of package [libcomps] release [0.1.1-1].