Bug 1065539 - Review Request: subunit - C bindings for subunit
Summary: Review Request: subunit - C bindings for subunit
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: David King
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2014-02-14 21:38 UTC by Jerry James
Modified: 2014-11-14 17:03 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2014-05-19 15:59:43 UTC
Type: ---
Embargoed:
amigadave: fedora-review+
gwync: fedora-cvs+


Attachments (Terms of Use)

Description Jerry James 2014-02-14 21:38:46 UTC
Spec URL: http://jjames.fedorapeople.org/subunit/subunit.spec
SRPM URL: http://jjames.fedorapeople.org/subunit/subunit-0.0.18-1.fc21.src.rpm
Fedora Account System Username: jjames
Description: Subunit is a streaming protocol for test results.  The protocol is a binary encoding that is easily generated and parsed.  By design all the components of the protocol conceptually fit into the xUnit TestCase -> TestResult interaction.

Subunit comes with command line filters to process a subunit stream and language bindings for python, C, C++ and shell.  Bindings are easy to write for other languages.

A number of useful things can be done easily with subunit:
- Test aggregation: Tests run separately can be combined and then reported/displayed together.  For instance, tests from different languages can be shown as a seamless whole.
- Test archiving: A test run may be recorded and replayed later.
- Test isolation: Tests that may crash or otherwise interact badly with each other can be run separately and then aggregated, rather than interfering with each other.
- Grid testing: subunit can act as the necessary serialization and deserialization to get test runs on distributed machines to be reported in real time.

The package breakdown and interdependencies are somewhat unusual.  That is partly because some bits are architecture-dependent and other bits are architecture-independent.  Due to the way rpm handles noarch packages, that means one of the architecture-dependent bits must be the main package, with the noarch parts in subpackages.  The other part is that subunit consists of 2 different kinds of packages: language bindings (which allow test results to be emitted in subunit format), and processing tools.  The two different kinds are completely independent.  It is possible, for example, to produce test results with the language bindings on one machine, then ship the results to a completely different machine to process those results.  Therefore, there are no rpm package dependencies in either direction between the two kinds of packages.  I have tried to make the order of the packages in the spec file reflect this, to help alleviate confusion.

The main package contains a C library that allows C programs to emit subunit test results.  It does not depend on any of the other packages.  The -devel package, which contains the single header file needed to use the library, depends only on the main package.  The -cppunit package contains cppunit integration for subunit.  Since it links against the C library, it depends on the main package.  The -cppunit-devel package therefore requires both -devel and the -cppunit package.  The -perl package allows perl programs to emit subunit test results.  It does not depend on any of the other packages.  Likewise, the -shell package does not depend on any of the other packages.  That is all of the language binding packages.

The python-subunit package is the main processing package.  It is currently available for python 2 only, due to missing python 3 dependencies.  It does not depend on any language bindings, and therefore has no Requires on any other package.  Last is the -filters package, which contains some command line filters that use the python code, and therefore depend on python-subunit.

There is already a python-subunit package in Fedora.  This package will replace it, as discussed in bug 908842.

Comment 1 David King 2014-04-24 09:34:03 UTC
Minor licensing problem to fix, in that because of the lack of interdependencies (which is fine, based on your reasoning) the license is not necessarily installed when one of the binding packages is installed (at least the -filters, -perl and -shell packages seem to be affected, but you can examine the generated Requires below for more details). I would suggest adding the appropriate license to %doc for each of the subpackages.

As you have mentioned that this package will replace the existing python-subunit package, would it be useful to add Obsoletes/Provides as per https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.2FReplacing_Existing_Packages ?

The Perl packaging guidelines seem to require a particular style of Requires, so I suppose that should be added to the -perl subpackage:

https://fedoraproject.org/wiki/Packaging:Perl#Perl_Requires_and_Provides

Where chmod is used to change permissions, it updates the timestamp too, so you should try to preserve timestamps (maybe with "touch -r", although there might be a better way).

Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed


===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses found:
     "GPL (v2 or later)", "Unknown or generated". 37 files have unknown
     license. Detailed output of licensecheck in
     /home/david/checkout/rpms/1065539-subunit/licensecheck.txt

GPLv2 is bogus, as it is the license of the libtool script, so this is fine.

[!]: License file installed when any subpackage combination is installed.
[x]: If the package is under multiple licenses, the licensing breakdown must
     be documented in the spec.
[x]: Package must own all directories that it creates.
     Note: Directories without known owners: /etc/profile.d

Should be fine, owned by setup package.

[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[!]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[-]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 92160 bytes in 8 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least one
     supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the license(s)
     in its own file, then that file, containing the text of the license(s)
     for the package is included in %doc.
[x]: Package requires other packages for directories it uses.
[x]: Package does not own files or directories owned by other packages.
[x]: All build dependencies are listed in BuildRequires, except for any that
     are listed in the exceptions section of Packaging Guidelines.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: %config files are marked noreplace or the reason is justified.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: No %config files under /usr.
[x]: Package do not use a name that already exist
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as provided
     in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

Perl:
[ ]: Package contains the mandatory BuildRequires and Requires:.
     Note: Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo
     $version)) missing?

Python:
[x]: Python eggs must not download any dependencies during the build process.
[ ]: A package which is used by another package via an egg interface should
     provide egg info.
[x]: Package meets the Packaging Guidelines::Python
[x]: Package contains BR: python2-devel or python3-devel
[x]: Binary eggs must be removed in %prep

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate file
     from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[-]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in subunit-
     cppunit-devel , subunit-perl , subunit-shell , python-subunit , subunit-
     filters
[ ]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[-]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: %check is present and all tests pass.
[!]: Packages should try to preserve timestamps of original installed files.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: Dist tag is present (not strictly required in GL).
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: The placement of pkgconfig(.pc) files are correct.
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package is
     arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: subunit-0.0.18-1.fc21.x86_64.rpm
          subunit-devel-0.0.18-1.fc21.x86_64.rpm
          subunit-cppunit-0.0.18-1.fc21.x86_64.rpm
          subunit-cppunit-devel-0.0.18-1.fc21.x86_64.rpm
          subunit-perl-0.0.18-1.fc21.noarch.rpm
          subunit-shell-0.0.18-1.fc21.noarch.rpm
          python-subunit-0.0.18-1.fc21.noarch.rpm
          subunit-filters-0.0.18-1.fc21.noarch.rpm
          subunit-0.0.18-1.fc21.src.rpm
subunit.x86_64: W: name-repeated-in-summary C subunit
subunit-cppunit.x86_64: W: no-documentation
subunit-cppunit-devel.x86_64: E: incorrect-fsf-address /usr/share/doc/subunit-cppunit-devel/README
subunit-perl.noarch: W: no-documentation
subunit-perl.noarch: W: no-manual-page-for-binary subunit-diff
python-subunit.noarch: W: spelling-error %description -l en_US xUnit -> x Unit, unit
python-subunit.noarch: W: spelling-error %description -l en_US deserialization -> serialization, materialization, denationalization
python-subunit.noarch: W: no-documentation
subunit-filters.noarch: W: no-documentation
subunit-filters.noarch: W: no-manual-page-for-binary subunit2gtk
subunit-filters.noarch: W: no-manual-page-for-binary subunit-tags
subunit-filters.noarch: W: no-manual-page-for-binary tap2subunit
subunit-filters.noarch: W: no-manual-page-for-binary subunit2junitxml
subunit-filters.noarch: W: no-manual-page-for-binary subunit-2to1
subunit-filters.noarch: W: no-manual-page-for-binary subunit-output
subunit-filters.noarch: W: no-manual-page-for-binary subunit-1to2
subunit-filters.noarch: W: no-manual-page-for-binary subunit-filter
subunit-filters.noarch: W: no-manual-page-for-binary subunit2pyunit
subunit-filters.noarch: W: no-manual-page-for-binary subunit-notify
subunit-filters.noarch: W: no-manual-page-for-binary subunit2csv
subunit-filters.noarch: W: no-manual-page-for-binary subunit-ls
subunit-filters.noarch: W: no-manual-page-for-binary subunit-stats
subunit.src: W: name-repeated-in-summary C subunit
9 packages and 0 specfiles checked; 1 errors, 22 warnings.




Rpmlint (installed packages)
----------------------------
# rpmlint python-subunit subunit-shell subunit-perl subunit-d 
evel subunit-cppunit subunit-cppunit-devel subunit-filters subunit
python-subunit.noarch: W: spelling-error %description -l en_US xUnit -> x Unit, unit
python-subunit.noarch: W: spelling-error %description -l en_US deserialization -> serialization, materialization, denationalization
python-subunit.noarch: W: no-documentation
subunit-perl.noarch: W: no-documentation
subunit-perl.noarch: W: no-manual-page-for-binary subunit-diff
subunit-cppunit.x86_64: W: no-documentation
subunit-cppunit-devel.x86_64: E: incorrect-fsf-address /usr/share/doc/subunit-cppunit-devel/README
subunit-filters.noarch: W: no-documentation
subunit-filters.noarch: W: no-manual-page-for-binary subunit2gtk
subunit-filters.noarch: W: no-manual-page-for-binary subunit-tags
subunit-filters.noarch: W: no-manual-page-for-binary tap2subunit
subunit-filters.noarch: W: no-manual-page-for-binary subunit2junitxml
subunit-filters.noarch: W: no-manual-page-for-binary subunit-2to1
subunit-filters.noarch: W: no-manual-page-for-binary subunit-output
subunit-filters.noarch: W: no-manual-page-for-binary subunit-1to2
subunit-filters.noarch: W: no-manual-page-for-binary subunit-filter
subunit-filters.noarch: W: no-manual-page-for-binary subunit2pyunit
subunit-filters.noarch: W: no-manual-page-for-binary subunit-notify
subunit-filters.noarch: W: no-manual-page-for-binary subunit2csv
subunit-filters.noarch: W: no-manual-page-for-binary subunit-ls
subunit-filters.noarch: W: no-manual-page-for-binary subunit-stats
subunit.x86_64: W: name-repeated-in-summary C subunit
8 packages and 0 specfiles checked; 1 errors, 21 warnings.
# echo 'rpmlint-done:'



Requires
--------
python-subunit (rpmlib, GLIBC filtered):
    /usr/bin/python
    python(abi)
    python-extras
    python-iso8601
    python-testtools

subunit-shell (rpmlib, GLIBC filtered):
    config(subunit-shell)

subunit-perl (rpmlib, GLIBC filtered):
    /usr/bin/perl
    perl(Exporter)
    perl(FindBin)
    perl(Getopt::Long)
    perl(POSIX)
    perl(Subunit)
    perl(Subunit::Diff)
    perl(lib)
    perl(strict)
    perl(vars)

subunit-devel (rpmlib, GLIBC filtered):
    /usr/bin/pkg-config
    libsubunit.so.0()(64bit)
    subunit(x86-64)

subunit-cppunit (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    libc.so.6()(64bit)
    libcppunit-1.12.so.1()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libsubunit.so.0()(64bit)
    rtld(GNU_HASH)
    subunit(x86-64)

subunit-cppunit-devel (rpmlib, GLIBC filtered):
    /usr/bin/pkg-config
    cppunit-devel(x86-64)
    libcppunit_subunit.so.0()(64bit)
    subunit-cppunit(x86-64)
    subunit-devel(x86-64)

subunit-filters (rpmlib, GLIBC filtered):
    /usr/bin/python
    pygtk2
    python-subunit

subunit (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    libc.so.6()(64bit)
    rtld(GNU_HASH)



Provides
--------
python-subunit:
    python-subunit

subunit-shell:
    config(subunit-shell)
    subunit-shell

subunit-perl:
    perl(Subunit)
    perl(Subunit::Diff)
    subunit-perl

subunit-devel:
    pkgconfig(libsubunit)
    subunit-devel
    subunit-devel(x86-64)

subunit-cppunit:
    libcppunit_subunit.so.0()(64bit)
    subunit-cppunit
    subunit-cppunit(x86-64)

subunit-cppunit-devel:
    pkgconfig(libcppunit_subunit)
    subunit-cppunit-devel
    subunit-cppunit-devel(x86-64)

subunit-filters:
    subunit-filters

subunit:
    libsubunit.so.0()(64bit)
    subunit
    subunit(x86-64)



Source checksums
----------------
https://launchpad.net/subunit/trunk/0.0.18/+download/subunit-0.0.18.tar.gz :
  CHECKSUM(SHA256) this package     : f4508a83b1206a85f6c1cfc57f83edc2ca13d62cc65be90ec27eadfa792a6eb4
  CHECKSUM(SHA256) upstream package : f4508a83b1206a85f6c1cfc57f83edc2ca13d62cc65be90ec27eadfa792a6eb4


Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13
Command line :/usr/bin/fedora-review -b 1065539
Buildroot used: fedora-rawhide-x86_64
Active plugins: Python, Generic, Shell-api, C/C++, Perl
Disabled plugins: Java, fonts, SugarActivity, Ocaml, Haskell, R, PHP, Ruby
Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG

Comment 2 David King 2014-04-24 09:36:54 UTC
As you mentioned a review swap on the devel mailing list, it would be great if you could review bug 1077935.

Comment 3 Jerry James 2014-04-24 20:32:37 UTC
(In reply to David King from comment #1)
> Minor licensing problem to fix, in that because of the lack of
> interdependencies (which is fine, based on your reasoning) the license is
> not necessarily installed when one of the binding packages is installed (at
> least the -filters, -perl and -shell packages seem to be affected, but you
> can examine the generated Requires below for more details). I would suggest
> adding the appropriate license to %doc for each of the subpackages.

Good catch.  I have added the licenses.

> As you have mentioned that this package will replace the existing
> python-subunit package, would it be useful to add Obsoletes/Provides as per
> https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.
> 2FReplacing_Existing_Packages ?

No, the name of the binary package will not change.  It's just being built from a different source RPM.  All that is necessary is for the NEVR to be higher on the new package than on the old.  When I first submitted this for review, python-subunit was on 0.0.12, so it wasn't a problem.  It has been updated to 0.0.18-1 now, so the new package must be at least 0.0.18-2, and there should not be any more builds of python-subunit.  I am adding the python-subunit maintainers to the CC list for this bug to try to prevent that.

> 
> The Perl packaging guidelines seem to require a particular style of
> Requires, so I suppose that should be added to the -perl subpackage:
> 
> https://fedoraproject.org/wiki/Packaging:Perl#Perl_Requires_and_Provides
> 
> Where chmod is used to change permissions, it updates the timestamp too, so
> you should try to preserve timestamps (maybe with "touch -r", although there
> might be a better way).
> 
> Package Review
> ==============
> 
> Legend:
> [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
> [ ] = Manual review needed
> 
> 
> ===== MUST items =====
> 
> C/C++:
> [x]: Package does not contain kernel modules.
> [x]: Package contains no static executables.
> [x]: Header files in -devel subpackage, if present.
> [x]: ldconfig called in %post and %postun if required.
> [x]: Package does not contain any libtool archives (.la)
> [x]: Rpath absent or only used for internal libs.
> [x]: Development (unversioned) .so files in -devel subpackage, if present.
> 
> Generic:
> [x]: Package is licensed with an open-source compatible license and meets
>      other legal requirements as defined in the legal section of Packaging
>      Guidelines.
> [x]: License field in the package spec file matches the actual license.
>      Note: Checking patched sources after %prep for licenses. Licenses found:
>      "GPL (v2 or later)", "Unknown or generated". 37 files have unknown
>      license. Detailed output of licensecheck in
>      /home/david/checkout/rpms/1065539-subunit/licensecheck.txt
> 
> GPLv2 is bogus, as it is the license of the libtool script, so this is fine.
> 
> [!]: License file installed when any subpackage combination is installed.
> [x]: If the package is under multiple licenses, the licensing breakdown must
>      be documented in the spec.
> [x]: Package must own all directories that it creates.
>      Note: Directories without known owners: /etc/profile.d
> 
> Should be fine, owned by setup package.
> 
> [x]: %build honors applicable compiler flags or justifies otherwise.
> [x]: Package contains no bundled libraries without FPC exception.
> [x]: Changelog in prescribed format.
> [x]: Sources contain only permissible code or content.
> [-]: Package contains desktop file if it is a GUI application.
> [x]: Development files must be in a -devel package
> [x]: Package uses nothing in %doc for runtime.
> [x]: Package consistently uses macros (instead of hard-coded directory
> names).
> [x]: Package is named according to the Package Naming Guidelines.
> [x]: Package does not generate any conflict.
> [x]: Package obeys FHS, except libexecdir and /usr/target.
> [!]: If the package is a rename of another package, proper Obsoletes and
>      Provides are present.
> [x]: Requires correct, justified where necessary.
> [x]: Spec file is legible and written in American English.
> [-]: Package contains systemd file(s) if in need.
> [-]: Useful -debuginfo package or justification otherwise.
> [x]: Package is not known to require an ExcludeArch tag.
> [-]: Large documentation must go in a -doc subpackage. Large could be size
>      (~1MB) or number of files.
>      Note: Documentation size is 92160 bytes in 8 files.
> [x]: Package complies to the Packaging Guidelines
> [x]: Package successfully compiles and builds into binary rpms on at least
> one
>      supported primary architecture.
> [x]: Package installs properly.
> [x]: Rpmlint is run on all rpms the build produces.
>      Note: There are rpmlint messages (see attachment).
> [x]: If (and only if) the source package includes the text of the license(s)
>      in its own file, then that file, containing the text of the license(s)
>      for the package is included in %doc.
> [x]: Package requires other packages for directories it uses.
> [x]: Package does not own files or directories owned by other packages.
> [x]: All build dependencies are listed in BuildRequires, except for any that
>      are listed in the exceptions section of Packaging Guidelines.
> [x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
> [x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
>      beginning of %install.
> [x]: %config files are marked noreplace or the reason is justified.
> [x]: Macros in Summary, %description expandable at SRPM build time.
> [x]: Package does not contain duplicates in %files.
> [x]: Permissions on files are set properly.
> [x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't
>      work.
> [x]: Package is named using only allowed ASCII characters.
> [x]: No %config files under /usr.
> [x]: Package do not use a name that already exist
> [x]: Package is not relocatable.
> [x]: Sources used to build the package match the upstream source, as provided
>      in the spec URL.
> [x]: Spec file name must match the spec package %{name}, in the format
>      %{name}.spec.
> [x]: File names are valid UTF-8.
> [x]: Packages must not store files under /srv, /opt or /usr/local
> 
> Perl:
> [ ]: Package contains the mandatory BuildRequires and Requires:.
>      Note: Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`";
> echo
>      $version)) missing?
> 
> Python:
> [x]: Python eggs must not download any dependencies during the build process.
> [ ]: A package which is used by another package via an egg interface should
>      provide egg info.
> [x]: Package meets the Packaging Guidelines::Python
> [x]: Package contains BR: python2-devel or python3-devel
> [x]: Binary eggs must be removed in %prep
> 
> ===== SHOULD items =====
> 
> Generic:
> [-]: If the source package does not include license text(s) as a separate
> file
>      from upstream, the packager SHOULD query upstream to include it.
> [x]: Final provides and requires are sane (see attachments).
> [-]: Fully versioned dependency in subpackages if applicable.
>      Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in subunit-
>      cppunit-devel , subunit-perl , subunit-shell , python-subunit , subunit-
>      filters
> [ ]: Package functions as described.
> [x]: Latest version is packaged.
> [x]: Package does not include license text files separate from upstream.
> [x]: Patches link to upstream bugs/comments/lists or are otherwise justified.
> [x]: Scriptlets must be sane, if used.
> [-]: Description and summary sections in the package spec file contains
>      translations for supported Non-English languages, if available.
> [-]: Package should compile and build into binary rpms on all supported
>      architectures.
> [x]: %check is present and all tests pass.
> [!]: Packages should try to preserve timestamps of original installed files.
> [x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
> [x]: Sources can be downloaded from URI in Source: tag
> [x]: Reviewer should test that the package builds in mock.
> [x]: Buildroot is not present
> [x]: Package has no %clean section with rm -rf %{buildroot} (or
>      $RPM_BUILD_ROOT)
> [x]: Dist tag is present (not strictly required in GL).
> [x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
> [x]: Uses parallel make %{?_smp_mflags} macro.
> [x]: The placement of pkgconfig(.pc) files are correct.
> [x]: SourceX is a working URL.
> [x]: Spec use %global instead of %define unless justified.
> 
> ===== EXTRA items =====
> 
> Generic:
> [x]: Rpmlint is run on all installed packages.
>      Note: There are rpmlint messages (see attachment).
> [x]: Large data in /usr/share should live in a noarch subpackage if package
> is
>      arched.
> [x]: Spec file according to URL is the same as in SRPM.
> 
> 
> Rpmlint
> -------
> Checking: subunit-0.0.18-1.fc21.x86_64.rpm
>           subunit-devel-0.0.18-1.fc21.x86_64.rpm
>           subunit-cppunit-0.0.18-1.fc21.x86_64.rpm
>           subunit-cppunit-devel-0.0.18-1.fc21.x86_64.rpm
>           subunit-perl-0.0.18-1.fc21.noarch.rpm
>           subunit-shell-0.0.18-1.fc21.noarch.rpm
>           python-subunit-0.0.18-1.fc21.noarch.rpm
>           subunit-filters-0.0.18-1.fc21.noarch.rpm
>           subunit-0.0.18-1.fc21.src.rpm
> subunit.x86_64: W: name-repeated-in-summary C subunit
> subunit-cppunit.x86_64: W: no-documentation
> subunit-cppunit-devel.x86_64: E: incorrect-fsf-address
> /usr/share/doc/subunit-cppunit-devel/README
> subunit-perl.noarch: W: no-documentation
> subunit-perl.noarch: W: no-manual-page-for-binary subunit-diff
> python-subunit.noarch: W: spelling-error %description -l en_US xUnit -> x
> Unit, unit
> python-subunit.noarch: W: spelling-error %description -l en_US
> deserialization -> serialization, materialization, denationalization
> python-subunit.noarch: W: no-documentation
> subunit-filters.noarch: W: no-documentation
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2gtk
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-tags
> subunit-filters.noarch: W: no-manual-page-for-binary tap2subunit
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2junitxml
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-2to1
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-output
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-1to2
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-filter
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2pyunit
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-notify
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2csv
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-ls
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-stats
> subunit.src: W: name-repeated-in-summary C subunit
> 9 packages and 0 specfiles checked; 1 errors, 22 warnings.
> 
> 
> 
> 
> Rpmlint (installed packages)
> ----------------------------
> # rpmlint python-subunit subunit-shell subunit-perl subunit-d 
> evel subunit-cppunit subunit-cppunit-devel subunit-filters subunit
> python-subunit.noarch: W: spelling-error %description -l en_US xUnit -> x
> Unit, unit
> python-subunit.noarch: W: spelling-error %description -l en_US
> deserialization -> serialization, materialization, denationalization
> python-subunit.noarch: W: no-documentation
> subunit-perl.noarch: W: no-documentation
> subunit-perl.noarch: W: no-manual-page-for-binary subunit-diff
> subunit-cppunit.x86_64: W: no-documentation
> subunit-cppunit-devel.x86_64: E: incorrect-fsf-address
> /usr/share/doc/subunit-cppunit-devel/README
> subunit-filters.noarch: W: no-documentation
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2gtk
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-tags
> subunit-filters.noarch: W: no-manual-page-for-binary tap2subunit
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2junitxml
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-2to1
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-output
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-1to2
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-filter
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2pyunit
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-notify
> subunit-filters.noarch: W: no-manual-page-for-binary subunit2csv
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-ls
> subunit-filters.noarch: W: no-manual-page-for-binary subunit-stats
> subunit.x86_64: W: name-repeated-in-summary C subunit
> 8 packages and 0 specfiles checked; 1 errors, 21 warnings.
> # echo 'rpmlint-done:'
> 
> 
> 
> Requires
> --------
> python-subunit (rpmlib, GLIBC filtered):
>     /usr/bin/python
>     python(abi)
>     python-extras
>     python-iso8601
>     python-testtools
> 
> subunit-shell (rpmlib, GLIBC filtered):
>     config(subunit-shell)
> 
> subunit-perl (rpmlib, GLIBC filtered):
>     /usr/bin/perl
>     perl(Exporter)
>     perl(FindBin)
>     perl(Getopt::Long)
>     perl(POSIX)
>     perl(Subunit)
>     perl(Subunit::Diff)
>     perl(lib)
>     perl(strict)
>     perl(vars)
> 
> subunit-devel (rpmlib, GLIBC filtered):
>     /usr/bin/pkg-config
>     libsubunit.so.0()(64bit)
>     subunit(x86-64)
> 
> subunit-cppunit (rpmlib, GLIBC filtered):
>     /sbin/ldconfig
>     libc.so.6()(64bit)
>     libcppunit-1.12.so.1()(64bit)
>     libgcc_s.so.1()(64bit)
>     libgcc_s.so.1(GCC_3.0)(64bit)
>     libstdc++.so.6()(64bit)
>     libstdc++.so.6(CXXABI_1.3)(64bit)
>     libsubunit.so.0()(64bit)
>     rtld(GNU_HASH)
>     subunit(x86-64)
> 
> subunit-cppunit-devel (rpmlib, GLIBC filtered):
>     /usr/bin/pkg-config
>     cppunit-devel(x86-64)
>     libcppunit_subunit.so.0()(64bit)
>     subunit-cppunit(x86-64)
>     subunit-devel(x86-64)
> 
> subunit-filters (rpmlib, GLIBC filtered):
>     /usr/bin/python
>     pygtk2
>     python-subunit
> 
> subunit (rpmlib, GLIBC filtered):
>     /sbin/ldconfig
>     libc.so.6()(64bit)
>     rtld(GNU_HASH)
> 
> 
> 
> Provides
> --------
> python-subunit:
>     python-subunit
> 
> subunit-shell:
>     config(subunit-shell)
>     subunit-shell
> 
> subunit-perl:
>     perl(Subunit)
>     perl(Subunit::Diff)
>     subunit-perl
> 
> subunit-devel:
>     pkgconfig(libsubunit)
>     subunit-devel
>     subunit-devel(x86-64)
> 
> subunit-cppunit:
>     libcppunit_subunit.so.0()(64bit)
>     subunit-cppunit
>     subunit-cppunit(x86-64)
> 
> subunit-cppunit-devel:
>     pkgconfig(libcppunit_subunit)
>     subunit-cppunit-devel
>     subunit-cppunit-devel(x86-64)
> 
> subunit-filters:
>     subunit-filters
> 
> subunit:
>     libsubunit.so.0()(64bit)
>     subunit
>     subunit(x86-64)
> 
> 
> 
> Source checksums
> ----------------
> https://launchpad.net/subunit/trunk/0.0.18/+download/subunit-0.0.18.tar.gz :
>   CHECKSUM(SHA256) this package     :
> f4508a83b1206a85f6c1cfc57f83edc2ca13d62cc65be90ec27eadfa792a6eb4
>   CHECKSUM(SHA256) upstream package :
> f4508a83b1206a85f6c1cfc57f83edc2ca13d62cc65be90ec27eadfa792a6eb4
> 
> 
> Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13
> Command line :/usr/bin/fedora-review -b 1065539
> Buildroot used: fedora-rawhide-x86_64
> Active plugins: Python, Generic, Shell-api, C/C++, Perl
> Disabled plugins: Java, fonts, SugarActivity, Ocaml, Haskell, R, PHP, Ruby
> Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG

Comment 4 Jerry James 2014-04-24 20:33:40 UTC
Argh.  Sorry.  It turns out that adding users to the CC list does NOT involve hitting the Enter button.  The rest of my reply will follow in a moment.

Comment 5 Jerry James 2014-04-24 20:48:03 UTC
Continuing on from where I prematurely cut things off in comment 3:

(In reply to David King from comment #1)
> The Perl packaging guidelines seem to require a particular style of
> Requires, so I suppose that should be added to the -perl subpackage:
> 
> https://fedoraproject.org/wiki/Packaging:Perl#Perl_Requires_and_Provides

I have added a Requires on perl(:MODULE_COMPAT_%{perl_version}) to the -perl subpackage.  Was that all you had in mind?  I don't see anything else at that URL that this package needs, I think.

> Where chmod is used to change permissions, it updates the timestamp too, so
> you should try to preserve timestamps (maybe with "touch -r", although there
> might be a better way).

Actually, no, it doesn't.  It does update the ctime, but that won't match anyway.  However, chmod does not change the mtime, which is the one we're worried about.  Try it.

New URLs:
Spec URL: http://jjames.fedorapeople.org/subunit/subunit.spec
SRPM URL: http://jjames.fedorapeople.org/subunit/subunit-0.0.18-2.fc21.src.rpm

Comment 6 David King 2014-04-24 21:04:35 UTC
Thanks for the update, and the clarifications about the Obsoletes/Provides.

Yes, that Perl change was what I had in mind, sorry for not mentioning it explicitly. 

Duh, of course chmod does not change the mtime, silly me. I think that I assumed that as subunit-diff in the subunit-perl RPM has a timestamp the same as the build time of the RPM (just looking at the rpm contents with "less), that the chmod was triggering the mtime update. Do you know why that is? As this is only a "should" item, there is nothing holding back the review, so it is now approved.

Comment 7 Jerry James 2014-04-24 23:16:53 UTC
(In reply to David King from comment #6)
> Duh, of course chmod does not change the mtime, silly me. I think that I
> assumed that as subunit-diff in the subunit-perl RPM has a timestamp the
> same as the build time of the RPM (just looking at the rpm contents with
> "less), that the chmod was triggering the mtime update. Do you know why that
> is? As this is only a "should" item, there is nothing holding back the
> review, so it is now approved.

Oh, I see.  It looks like the project makefiles don't preserve timestamps when installing.  I can fix that for some of them by specifying INSTALL="install -p", but that doesn't fix the perl case.  I can do a 'touch -r' after installing if that bothers you.

Comment 8 David King 2014-04-25 07:41:23 UTC
(In reply to Jerry James from comment #7)
> It looks like the project makefiles don't preserve timestamps
> when installing.  I can fix that for some of them by specifying
> INSTALL="install -p", but that doesn't fix the perl case.  I can do a 'touch
> -r' after installing if that bothers you.

If it is easy to fix then it would be nice, but as a "should" item I think it is only a nice-to-have, not a blocker. Thanks for investigating!

Comment 9 Jerry James 2014-04-25 14:29:50 UTC
New Package SCM Request
=======================
Package Name: subunit
Short Description: C bindings for subunit
Owners: jjames
Branches: 
InitialCC:

Comment 10 Gwyn Ciesla 2014-04-25 15:18:50 UTC
Git done (by process-git-requests).

Comment 11 Jerry James 2014-04-25 19:36:43 UTC
(In reply to David King from comment #8)
> If it is easy to fix then it would be nice, but as a "should" item I think
> it is only a nice-to-have, not a blocker. Thanks for investigating!

I was able to fix this with a handful of touch commands at the end of %install, by the way.

Comment 12 Jerry James 2014-04-25 19:40:00 UTC
Pádraig and Matthias, subunit has now been built for Rawhide.  Can one of you retire the existing python-subunit package, in Rawhide only, please?

I will send email about this, too, in case they aren't following this bug.

Comment 13 Pádraig Brady 2014-04-26 02:06:10 UTC
BTW this loop looks very inefficient:

for filt in filters/*; do
  sed 's,/usr/bin/env ,/usr/bin/,' $filt > ${filt}.new
  chmod 0755 ${filt}.new
  touch -r $filt ${filt}.new
  mv -f ${filt}.new $filt
done

Could it be replaced with:

sed -i 's,/usr/bin/env ,/usr/bin/,; q' filters/*

or

find filters/ -exec sed -i 's,/usr/bin/env ,/usr/bin/,; q' {} +

Comment 14 Jerry James 2014-05-19 15:59:43 UTC
(In reply to Pádraig Brady from comment #13)
> BTW this loop looks very inefficient:
> 
> for filt in filters/*; do
>   sed 's,/usr/bin/env ,/usr/bin/,' $filt > ${filt}.new
>   chmod 0755 ${filt}.new
>   touch -r $filt ${filt}.new
>   mv -f ${filt}.new $filt
> done
> 
> Could it be replaced with:
> 
> sed -i 's,/usr/bin/env ,/usr/bin/,; q' filters/*
> 
> or
> 
> find filters/ -exec sed -i 's,/usr/bin/env ,/usr/bin/,; q' {} +

Neither of the latter 2 preserves timestamps or fixes the missing executable bits on subunit-output.  In any case, there are only 13 files that are processed in this way.  Even if it is inefficient, it is still only a minuscule fraction of the total build time:

real	0m0.135s
user	0m0.011s
sys	0m0.030s

Compared to the total number of minutes taken by a build, this just isn't worth optimizing, in my opinion, especially when doing so leads to loss of functionality (i.e., the timestamp and executable bit fixes).

Comment 15 Pádraig Brady 2014-11-14 03:32:43 UTC
Package Change Request
======================
Package Name: subunit
New Branches: epel7
Owners: pbrady apevec

Comment 16 Gwyn Ciesla 2014-11-14 12:48:56 UTC
Comments from the primary maintainers?

Comment 17 Pádraig Brady 2014-11-14 13:00:30 UTC
Oops I should have added primary maintainers to Owners field anyway. Will do on next request. Jerry we need this for OpenStack testing on EL7.

Comment 18 Jerry James 2014-11-14 15:08:48 UTC
Sure, that's fine by me.  If you guys want to comaintain the Fedora branches, too, that would also be fine by me. :-)

Comment 19 Pádraig Brady 2014-11-14 16:12:35 UTC
Package Change Request
======================
Package Name: subunit
New Branches: epel7
Owners: jjames pbrady apevec

Comment 20 Gwyn Ciesla 2014-11-14 17:03:45 UTC
Git done (by process-git-requests).


Note You need to log in before you can comment on or make changes to this bug.