diff --git a/.clufter.metadata b/.clufter.metadata new file mode 100644 index 0000000..bba10f0 --- /dev/null +++ b/.clufter.metadata @@ -0,0 +1,2 @@ +a8e2a4aeed9ec51b267f59e66f4011d22d434cbd SOURCES/clufter-0.77.1-tests.tar.xz +8dbcaa596a15ed926a2cb93c3cad8a6ae4eb473d SOURCES/clufter-0.77.1.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f83920 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/clufter-0.77.1-tests.tar.xz +SOURCES/clufter-0.77.1.tar.gz diff --git a/SOURCES/fix-jing-simplified-rng.xsl b/SOURCES/fix-jing-simplified-rng.xsl new file mode 100644 index 0000000..580d192 --- /dev/null +++ b/SOURCES/fix-jing-simplified-rng.xsl @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SOURCES/pacemaker-borrow-schemas b/SOURCES/pacemaker-borrow-schemas new file mode 100644 index 0000000..48dab83 --- /dev/null +++ b/SOURCES/pacemaker-borrow-schemas @@ -0,0 +1,71 @@ +#!/bin/sh +# Copyright 2017 Red Hat, Inc. +# Part of clufter project +# Licensed under GPLv2+ (a copy included | http://gnu.org/licenses/gpl-2.0.txt) + +# A helper for "borrow validation schemas from pacemaker" process. + +die() { echo; echo "$@"; exit 1; } + +# $1 ... input directory with original pacemaker schemas +# $2 ... output directory with consolidated schemas +# $3 ... schemas to skip (as posix-egrep expression) +# $4 ... postprocess XSLT +# $5 ... clobber existing files? (true if set and non-null) +consolidate() { + inputdir="${1}"; outputdir="${2}"; skipschemas="${3}"; postprocess="${4}" + test "${#}" -lt 5 || clobber="${5}" + mkdir -p -- "${outputdir}" + # for all the schema versions at the boundary of the "major" bump, + # except for the lower boundary of the first one (i.e. pacemaker-1.0) + # -- the versions in between are not interesting from validation POV + for base in $( + find "${inputdir}" -regextype posix-egrep -regex "${skipschemas}" -prune \ + -o -name 'pacemaker-*.rng' -printf '%P\n' | sort -V \ + | sed -e 'N;/^\(pacemaker-[0-9]\)\.\([0-9][0-9]*\)\.rng\n\1\.\([0-9][0-9]*\)\.rng$/!p;D'); do + f="${inputdir}/${base}" + printf "processing: ${f} ... " + test -f "${f}" || continue + sentinel=10; old=/dev/null; new="${f}" + # until the jing output converged (simplification gets idempotent) + # as prescribed by did-size-change heuristic (or sentinel is hit) + while [ "$(stat -c '%s' "${old}")" != "$(stat -c '%s' "${new}")" ]; do + [ "$((sentinel -= 1))" -gt 0 ] || break + [ "${old}" = "${f}" ] && old="${outputdir}/${base}"; + [ "${new}" = "${f}" ] \ + && { old="${f}"; new="${outputdir}/${base}.new"; } \ + || cp -f "${new}" "${old}" + jing -is "${old}" > "${new}" + #printf "(%d -> %d) " "$(stat -c '%s' "${old}")" "$(stat -c '%s' "${new}")" + done + printf "%d iterations" "$((10 - ${sentinel}))" + test -z "${clobber-}" && test -s "${old}" && die "file ${old} already exists" || : + if [ -z "${postprocess}" ]; then + mv "${new}" "${old}" + printf ", moved\n" + else + # xmllint drops empty lines caused by the applied transformation + xsltproc --stringparam filename-or-version "${base}" \ + "${postprocess}" "${new}" \ + | xmllint --format - > "${old}" + rm -f -- "${new}" + printf ", postprocessed\n" + fi + done +} + +which jing >/dev/null 2>&1 || die "jing (from jing-trang project) required" + +: "${INPUTDIR=$(pkg-config --variable schemadir pacemaker)}" +test -n "${INPUTDIR}" || die "Input dir with pacemaker schemas not known" + +: "${OUTPUTDIR=schemas-consolidated}" +test -n "${OUTPUTDIR}" || die "Output dir for consolidated schemas not known" + +: "${POSTPROCESS=$(dirname "${0}")/fix-jing-simplified-rng.xsl}" + +# skip non-defaults of upstream releases +#: "${SKIPSCHEMAS=.*/pacemaker-(1\.0|2\.[126]).rng}" +: "${SKIPSCHEMAS=".*/pacemaker-next\.rng"}" # only skip WIP schema by default + +consolidate "${INPUTDIR}" "${OUTPUTDIR}" "${SKIPSCHEMAS}" "${POSTPROCESS}" "${@}" diff --git a/SPECS/clufter.spec b/SPECS/clufter.spec new file mode 100644 index 0000000..cf51f37 --- /dev/null +++ b/SPECS/clufter.spec @@ -0,0 +1,477 @@ +# virtual provides: +# clufter -> clufter-cli +# clufter-lib -> python.+-clufter (any if multiple) +# python2-clufter -> python-clufter + +Name: clufter +Version: 0.77.1 +Release: 1%{?dist} +Group: System Environment/Base +Summary: Tool/library for transforming/analyzing cluster configuration formats +License: GPLv2+ +URL: https://pagure.io/%{name} + +# required for autosetup macro +#BuildRequires: git + +# Python 2 related +BuildRequires: python2-devel +BuildRequires: python-setuptools +BuildRequires: python-lxml + +# following to ensure "which bash" (and, in extension, "which sh") works +BuildRequires: bash which + +BuildRequires: pkgconfig(libxml-2.0) +# needed for schemadir path pointer +BuildRequires: pkgconfig(pacemaker) +# needed for schemas themselves +BuildRequires: pacemaker +# needed to squash multi-file schemas to single file +BuildRequires: jing +# needed for xsltproc and xmllint respectively +BuildRequires: libxslt libxml2 + +#global test_version +%global testver %{?test_version}%{?!test_version:%{version}} + +Source0: https://people.redhat.com/jpokorny/pkgs/%{name}/%{name}-%{version}.tar.gz +Source1: https://people.redhat.com/jpokorny/pkgs/%{name}/%{name}-%{testver}-tests.tar.xz +Source2: https://pagure.io/%{name}/raw/v%{version}/f/misc/fix-jing-simplified-rng.xsl +Source3: https://pagure.io/%{name}/raw/v%{version}/f/misc/pacemaker-borrow-schemas + +# for pacemaker BuildRequires dependency +%if 0%{?rhel} > 0 +ExclusiveArch: i686 x86_64 aarch64 ppc64le s390x +%endif + +%description +While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster +stacks configuration conversion (as per RHEL trend), the command-filter-format +framework (capable of XSLT) offers also other uses through its plugin library. + +%package cli +Group: System Environment/Base +Summary: Tool for transforming/analyzing cluster configuration formats +Provides: %{name} = %{version}-%{release} + +BuildRequires: bash-completion + +BuildRequires: help2man + +# following for pkg_resources module +Requires: python-setuptools +Requires: python-%{name} = %{version}-%{release} +Requires: %{_bindir}/nano +BuildArch: noarch + +%description cli +While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster +stacks configuration conversion (as per RHEL trend), the command-filter-format +framework (capable of XSLT) offers also other uses through its plugin library. + +This package contains %{name} command-line interface for the underlying +library (packaged as python-%{name}). + +%package -n python-%{name} +Group: System Environment/Libraries +Summary: Library for transforming/analyzing cluster configuration formats +License: GPLv2+ and GFDL +Provides: %{name}-lib = %{version}-%{release} +Provides: python2-%{name} = %{version}-%{release} + +Requires: %{name}-bin = %{version}-%{release} +Requires: python-lxml +BuildArch: noarch + +%description -n python-%{name} +While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster +stacks configuration conversion (as per RHEL trend), the command-filter-format +framework (capable of XSLT) offers also other uses through its plugin library. + +This package contains %{name} library including built-in plugins. + +%package bin +Group: System Environment/Libraries +Summary: Common internal compiled files for %{name} +License: GPLv2+ + +Requires: %{name}-common = %{version}-%{release} + +%description bin +While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster +stacks configuration conversion (as per RHEL trend), the command-filter-format +framework (capable of XSLT) offers also other uses through its plugin library. + +This package contains internal, arch-specific files for %{name}. + +%package common +Group: System Environment/Libraries +Summary: Common internal data files for %{name} +License: GPLv2+ +BuildArch: noarch + +%description common +While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster +stacks configuration conversion (as per RHEL trend), the command-filter-format +framework (capable of XSLT) offers also other uses through its plugin library. + +This package contains internal, arch-agnostic files for %{name}. + +%package lib-general +Group: System Environment/Libraries +Summary: Extra %{name} plugins usable for/as generic/auxiliary products +Requires: %{name}-lib = %{version}-%{release} +BuildArch: noarch + +%description lib-general +This package contains set of additional plugins targeting variety of generic +formats often serving as a byproducts in the intermediate steps of the overall +process arrangement: either experimental commands or internally unused, +reusable formats and filters. + +%package lib-ccs +Group: System Environment/Libraries +Summary: Extra plugins for transforming/analyzing CMAN configuration +Requires: %{name}-lib-general = %{version}-%{release} +BuildArch: noarch + +%description lib-ccs +This package contains set of additional plugins targeting CMAN cluster +configuration: either experimental commands or internally unused, reusable +formats and filters. + +%package lib-pcs +Group: System Environment/Libraries +Summary: Extra plugins for transforming/analyzing Pacemaker configuration +Requires: %{name}-lib-general = %{version}-%{release} +BuildArch: noarch + +%description lib-pcs +This package contains set of additional plugins targeting Pacemaker cluster +configuration: either experimental commands or internally unused, reusable +formats and filters. + +%prep +%setup -b 1 +#XXX cannot patch ccs-flatten this way +#pushd {name} >/dev/null +#global __scm git_am +#{expand:__scm_setup_{__scm}} +#{__git} config core.whitespace -blank-at-eol +#autopatch -p1 +#popd >/dev/null + +%if "%{testver}" != "%{version}" + %{__cp} -a ../"%{name}-%{testver}"/* . +%endif + +## for some esoteric reason, the line above has to be empty +%{__python} setup.py saveopts -f setup.cfg pkg_prepare \ + --ccs-flatten='%{_libexecdir}/%{name}-%{version}/ccs_flatten' \ + --editor='%{_bindir}/nano' \ + --extplugins-shared='%{_datarootdir}/%{name}/ext-plugins' \ + --ra-metadata-dir='%{_datadir}/cluster' \ + --ra-metadata-ext='metadata' \ + --shell-posix='%(which sh 2>/dev/null || echo /bin/SHELL-POSIX)' \ + --shell-bashlike='%(which bash 2>/dev/null || echo /bin/SHELL-BASHLIKE)' +%{__python} setup.py saveopts -f setup.cfg pkg_prepare \ +--report-bugs='https://bugzilla.redhat.com/enter_bug.cgi?product=Red%20Hat%20Enterprise%20Linux%207&component=clufter' +# make Python interpreter executation sane (via -Es flags) +%{__python2} setup.py saveopts -f setup.cfg build_scripts \ + --executable='%{__python2} -Es' + +%build +%{__python2} setup.py build +%{__python} ./run-dev --skip-ext --completion-bash 2>/dev/null \ + | sed 's|run[-_]dev|%{name}|g' > .bashcomp +# generate man pages (proper commands and aliases from a sorted sequence) +%{__mkdir_p} -- .manpages/man1 +{ echo; ./run-dev -l | sed -n 's|^ \(\S\+\).*|\1|p' | sort; } > .subcmds +sed -e 's:\(.\+\):\\\&\\fIrun_dev-\1\\fR\\\|(1), :' \ + -e '1s|\(.*\)|\[SEE ALSO\]\n|' \ + -e '$s|\(.*\)|\1\nand perhaps more|' \ + .subcmds > .see-also +help2man -N -h -H -i .see-also \ + -n "$(sed -n '2s|[^(]\+(\([^)]\+\))|\1|p' README)" ./run-dev \ + | sed 's|run\\\?[-_]dev|%{name}|g' \ + > ".manpages/man1/%{name}.1" +while read cmd; do + [ -n "${cmd}" ] || continue + echo -e "#\!/bin/sh\n{ [ \$# -ge 1 ] && [ \"\$1\" = \"--version\" ] \ + && ./run-dev \"\$@\" || ./run-dev \"${cmd}\" \"\$@\"; }" > ".tmp-${cmd}" + chmod +x ".tmp-${cmd}" + grep -v "^${cmd}\$" .subcmds \ + | grep -e '^$' -e "$(echo ${cmd} | cut -d- -f1)\(-\|\$\)" \ + | sed -e 's:\(.\+\):\\\&\\fIrun_dev-\1\\fR\\\|(1), :' \ + -e '1s|\(.*\)|\[SEE ALSO\]\n\\\&\\fIrun_dev\\fR\\\|(1), \n|' \ + -e '$s|\(.*\)|\1\nand perhaps more|' > .see-also + # XXX uses ";;&" bashism + case "${cmd}" in + ccs[2-]*) + sed -i \ + '1s:\(.*\):\1\n\\\&\\fIcluster.conf\\fR\\\|(5), \\\&\\fIccs\\fR\\\|(7), :' \ + .see-also + ;;& + ccs2pcs*) + sed -i \ + '1s:\(.*\):\1\n\\\&\\fI%{_defaultdocdir}/%{name}-%{version}/rgmanager-pacemaker\\fR\\\|, :' \ + .see-also + ;;& + *[2-]pcscmd*) + sed -i '1s:\(.*\):\1\n\\\&\\fIpcs\\fR\\\|(8), :' .see-also + ;;& + esac + help2man -N -h -H -i .see-also -n "${cmd}" "./.tmp-${cmd}" \ + | sed 's|run\\\?[-_]dev|%{name}|g' \ + > ".manpages/man1/%{name}-${cmd}.1" +done < .subcmds + +OUTPUTDIR=.schemas POSTPROCESS="%{SOURCE2}" sh "%{SOURCE3}" --clobber + +%install + +# '--root' implies setuptools involves distutils to do old-style install +%{__python2} setup.py install --skip-build --root '%{buildroot}' +# following is needed due to umask 022 not taking effect(?) leading to 775 +%{__chmod} -- g-w '%{buildroot}%{_libexecdir}/%{name}-%{version}/ccs_flatten' +# fix excessive script interpreting "executable" quoting with old setuptools: +# https://github.com/pypa/setuptools/issues/188 +# https://bugzilla.redhat.com/1353934 +sed -i '1s|^\(#!\)"\(.*\)"$|\1\2|' '%{buildroot}%{_bindir}/%{name}' +# %%{_bindir}/%%{name} should have been created +test -f '%{buildroot}%{_bindir}/%{name}' \ + || %{__install} -D -pm 644 -- '%{buildroot}%{_bindir}/%{name}' \ + '%{buildroot}%{_bindir}/%{name}' + +# move data files from python-specific locations to a single common one +# and possibly symlink that back +%{__mkdir_p} -- '%{buildroot}%{_datarootdir}/%{name}/formats' +for format in cib corosync; do + %{__cp} -a -t '%{buildroot}%{_datarootdir}/%{name}/formats' \ + -- "%{buildroot}%{python2_sitelib}/%{name}/formats/${format}" + %{__rm} -f -- "%{buildroot}%{python2_sitelib}/%{name}/formats/${format}"/* + ln -s -t "%{buildroot}%{python2_sitelib}/%{name}/formats/${format}" \ + -- $(pushd "%{buildroot}%{_datarootdir}/%{name}/formats/${format}" >/dev/null; \ + ls -1A | sed "s:.*:%{_datarootdir}/%{name}/formats/${format}/\\0:") +done + +# move ext-plugins from python-specific locations to a single common one +# incl. the different sorts of precompiled bytecodes +%{__mkdir_p} -- '%{buildroot}%{_datarootdir}/%{name}/ext-plugins' +mv -t '%{buildroot}%{_datarootdir}/%{name}/ext-plugins' \ + -- '%{buildroot}%{python2_sitelib}/%{name}'/ext-plugins/*/ + +declare bashcompdir="$(pkg-config --variable=completionsdir bash-completion \ + || echo '%{_datadir}/bash-completion/completions')" +declare bashcomp="${bashcompdir}/%{name}" +%{__install} -D -pm 644 -- \ + .bashcomp '%{buildroot}%{_sysconfdir}/%{name}/bash-completion' +%{__mkdir_p} -- "%{buildroot}${bashcompdir}" +ln -s '%{_sysconfdir}/%{name}/bash-completion' "%{buildroot}${bashcomp}" +# own %%{_datadir}/bash-completion in case of ...bash-completion/completions, +# more generally any path up to any of /, /usr, /usr/share, /etc +while true; do + test "$(dirname "${bashcompdir}")" != "/" \ + && test "$(dirname "${bashcompdir}")" != "%{_prefix}" \ + && test "$(dirname "${bashcompdir}")" != "%{_datadir}" \ + && test "$(dirname "${bashcompdir}")" != "%{_sysconfdir}" \ + || break + bashcompdir="$(dirname "${bashcompdir}")" +done +cat >.bashcomp-files <<-EOF + ${bashcompdir} + %dir %{_sysconfdir}/%{name} + %verify(not size md5 mtime) %{_sysconfdir}/%{name}/bash-completion +EOF +%{__mkdir_p} -- '%{buildroot}%{_mandir}' +%{__cp} -a -t '%{buildroot}%{_mandir}' -- .manpages/* +%{__cp} -a -f -t '%{buildroot}%{_datarootdir}/%{name}/formats/cib' \ + -- .schemas/pacemaker-*.*.rng +%{__mkdir_p} -- '%{buildroot}%{_defaultdocdir}/%{name}-%{version}' +%{__cp} -a -t '%{buildroot}%{_defaultdocdir}/%{name}-%{version}' \ + -- gpl-2.0.txt doc/*.txt doc/rgmanager-pacemaker + +%check +# just a basic sanity check +# we need to massage RA metadata files and PATH so the local run works +# XXX we could also inject buildroot's site_packages dir to PYTHONPATH +declare ret=0 \ + ccs_flatten_dir="$(dirname '%{buildroot}%{_libexecdir}/%{name}-%{version}/ccs_flatten')" +ln -s '%{buildroot}%{_datadir}/cluster'/*.'metadata' \ + "${ccs_flatten_dir}" +PATH="${PATH:+${PATH}:}${ccs_flatten_dir}" PYTHONEXEC="%{__python2} -Es" ./run-tests +ret=$? +%{__rm} -f -- "${ccs_flatten_dir}"/*.'metadata' +[ ${ret} -eq 0 ] || exit ${ret} + +%post cli +if [ $1 -gt 1 ]; then # no gain regenerating it w/ fresh install (same result) +declare bashcomp="%{_sysconfdir}/%{name}/bash-completion" +%{_bindir}/%{name} --completion-bash > "${bashcomp}" 2>/dev/null || : +fi + +%post lib-general +declare bashcomp="%{_sysconfdir}/%{name}/bash-completion" +# if the completion file is not present, suppose it is not desired +test -x '%{_bindir}/%{name}' && test -f "${bashcomp}" \ + && %{_bindir}/%{name} --completion-bash > "${bashcomp}" 2>/dev/null || : + +%post lib-ccs +declare bashcomp="%{_sysconfdir}/%{name}/bash-completion" +# if the completion file is not present, suppose it is not desired +test -x '%{_bindir}/%{name}' && test -f "${bashcomp}" \ + && %{_bindir}/%{name} --completion-bash > "${bashcomp}" 2>/dev/null || : + +%post lib-pcs +declare bashcomp="%{_sysconfdir}/%{name}/bash-completion" +# if the completion file is not present, suppose it is not desired +test -x '%{_bindir}/%{name}' && test -f "${bashcomp}" \ + && %{_bindir}/%{name} --completion-bash > "${bashcomp}" 2>/dev/null || : + +%files cli -f .bashcomp-files +%{_mandir}/man1/*.1* +%{_bindir}/%{name} + +%files -n python-%{name} +%{python2_sitelib}/%{name} +%{python2_sitelib}/%{name}-*.egg-info + +%files bin +%{_libexecdir}/%{name}-%{version} + +%files common +%{_datadir}/cluster +%{_datarootdir}/%{name} +%dir %{_defaultdocdir}/%{name}-%{version} +%{_defaultdocdir}/%{name}-%{version}/*[^[:digit:]] +%license %{_defaultdocdir}/%{name}-%{version}/*[[:digit:]].txt + +%files lib-general +%{_datarootdir}/%{name}/ext-plugins/lib-general + +%files lib-ccs +%{_datarootdir}/%{name}/ext-plugins/lib-ccs + +%files lib-pcs +%{_datarootdir}/%{name}/ext-plugins/lib-pcs + +%changelog +* Fri Jun 08 2018 Jan Pokorný - 0.77.1-1 +- bump upstream package, see https://pagure.io/clufter/releases +- build for aarch64 + [rhbz#1569111] + +* Fri Dec 01 2017 Jan Pokorný - 0.77.0-2 +- fix nodelist.node.name configuration option (originaly devised by pacemaker) + not supported in corosync.conf with the built-in validation schema + [rhbz#1517834] + +* Fri Nov 10 2017 Jan Pokorný - 0.77.0-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Tue Jun 06 2017 Jan Pokorný - 0.76.0-1 +- factor "borrow validation schemas from pacemaker" out to a separate script +- bump upstream package, see https://pagure.io/clufter/releases + +* Fri May 26 2017 Jan Pokorný - 0.75.0-1 +- move nano fallback editor dependency to -cli package [PGissue#1] +- bump upstream package, see https://pagure.io/clufter/releases + +* Wed Mar 29 2017 Jan Pokorný - 0.70.0-2 +- split -bin and -common packages, the former becoming the only arch-specific +- also move python-specific (entry points, main files) back from -cli package +- also add virtual provides for python-clufter as python2-clufter +- bump upstream package (version rolling the above changes out) +- build for ppc64le + [rhbz#1402565] + +* Wed Aug 10 2016 Jan Pokorný - 0.59.5-2 +- fix malformed man pages due to help screen being previously split on hyphens + +* Mon Aug 08 2016 Jan Pokorný - 0.59.5-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Tue Aug 02 2016 Jan Pokorný - 0.59.4-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Fri Jul 29 2016 Jan Pokorný - 0.59.3-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Thu Jul 28 2016 Jan Pokorný - 0.59.2-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Tue Jul 26 2016 Jan Pokorný - 0.59.1-1 +- bump upstream package, see https://pagure.io/clufter/releases + +* Fri Jul 22 2016 Jan Pokorný - 0.59.0-1 +- add ability to borrow validation schemas from pacemaker installed along +- bump upstream package, see https://pagure.io/clufter/releases +- build for s390x + +* Fri Jul 15 2016 Jan Pokorný - 0.58.0-1 +- fix Python interpreter propagated as enquoted string with old setuptools +- bump upstream package, see https://pagure.io/clufter/releases + +* Fri Jul 01 2016 Jan Pokorný - 0.57.0-1 +- bump upstream package, see https://pagure.io/clufter/releases +- generate man pages also for offered commands +- auto-generate SEE ALSO sections for the man pages +- move entry_points.txt to clufter-cli sub-package +- general spec file refresh (pagure.io as a default project base, etc.) +- make Python interpreter execution sane +- fix *2pcscmd* commands so they do not suggest + "pcs cluster cib --config" that doesn't currently + work for subsequent local-modification pcs commands + [rhbz#1328078] +- add support for ticket constraints to *2pcscmd commands + [rhbz#1340243] + +* Wed Sep 09 2015 Jan Pokorný - 0.50.4-1 +- bump upstream package + +* Thu Sep 03 2015 Jan Pokorný - 0.50.3-1 +- bump upstream package + +* Wed Aug 12 2015 Jan Pokorný - 0.50.2-1 +- bump upstream package + +* Tue Jul 14 2015 Jan Pokorný - 0.50.1-1 +- bump upstream package + +* Fri Jul 03 2015 Jan Pokorný - 0.50.0-1 +- bump upstream package (intentional jump on upstream front) + +* Fri Jun 19 2015 Jan Pokorný - 0.12.0-1 +- move completion module to clufter-cli sub-package +- bump upstream package + +* Wed Apr 15 2015 Jan Pokorný - 0.11.0-1 +- bump upstream package + +* Fri Mar 20 2015 Jan Pokorný - 0.10.3-1 +- bump upstream package + +* Mon Mar 16 2015 Jan Pokorný - 0.10.2-1 +- bump upstream package + +* Fri Mar 06 2015 Jan Pokorný - 0.10.1-2 +- packaging fixes (%{name}-cli requires python-setuptools, adjust for + older schema of Bash completions) + +* Fri Mar 06 2015 Jan Pokorný - 0.10.1-1 +- bump upstream package + +* Thu Feb 26 2015 Jan Pokorný - 0.10.0-1 +- packaging enhacements (structure, redundancy, ownership, scriptlets, symlink) +- version bump so as not to collide with python-clufter co-packaged with pcs + +* Tue Jan 20 2015 Jan Pokorný - 0.3.5-1 +- packaging enhancements (pkg-config, license tag) + +* Wed Jan 14 2015 Jan Pokorný - 0.3.4-1 +- packaging enhancements (permissions, ownership) +- man page for CLI frontend now included + +* Tue Jan 13 2015 Jan Pokorný - 0.3.3-1 +- initial build