Bug 202496 - Review Request: quodlibet - A music management program
Review Request: quodlibet - A music management program
Status: CLOSED NEXTRELEASE
Product: Fedora
Classification: Fedora
Component: Package Review (Show other bugs)
rawhide
All Linux
medium Severity medium
: ---
: ---
Assigned To: Jason Tibbitts
Fedora Package Reviews List
:
Depends On:
Blocks: FE-ACCEPT
  Show dependency treegraph
 
Reported: 2006-08-14 16:07 EDT by Jeffrey C. Ollie
Modified: 2007-11-30 17:11 EST (History)
1 user (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2006-10-07 10:51:56 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:


Attachments (Terms of Use)

  None (edit)
Description Jeffrey C. Ollie 2006-08-14 16:07:51 EDT
Spec URL: http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-1.fc6.spec
SRPM URL: http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-1.fc6.src.rpm
Description:

Quod Libet is a music management program. It provides several different ways
to view your audio library, as well as support for Internet radio and
audio feeds. It has extremely flexible metadata tag editing and searching
capabilities.

Ex Falso is a tag editor with the same tag editing interface as Quod Libet,
but it does not play files.

Supported file formats include Ogg Vorbis, MP3, FLAC, MOD/XM/IT, Musepack,
Wavpack, and MPEG-4 AAC.

(FYI, Quod Libet uses GStreamer for audio playback so it will actually only support the audio formats that GStreamer supports).
Comment 1 Jeffrey C. Ollie 2006-08-14 16:09:34 EDT
DOH! Forgot to set a proper summary.
Comment 2 Manuel Arostegui Ramirez 2006-08-15 03:03:33 EDT
It works fine on FC5 ;-)
Comment 3 Jason Tibbitts 2006-08-15 21:25:12 EDT
Builds fine; here's the rpmlint complaint list:

W: quodlibet mixed-use-of-spaces-and-tabs
  I'm seeing this quite a bit lately.  Just do "less -U *spec" and you can see
the inconsistencies in indentation.

W: quodlibet incoherent-version-in-changelog 0.22-1 0.23-1.fc6
  Looks like a typo in your changelog entry.

E: quodlibet non-executable-script
/usr/share/quodlibet/plugins/songsmenu/replaygain.py 0644
E: quodlibet non-executable-script
/usr/share/quodlibet/plugins/songsmenu/_subprocobj.py 0644
  I think these are valid.  These errors are often false positives, when the
python code is actually runnable.  But these seem to contain only class
definitions, and as such they shouldn't have the shebang line.

At least that's my interpretation of things.  A while back there was a good IRC
discussion about this; I'll try to dig up the log if you'd like to read it.
Comment 4 Jeffrey C. Ollie 2006-08-16 08:18:25 EDT
Spec: http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-2.fc6.spec
SRPM:
http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-2.fc6.src.rpm

%changelog
* Tue Aug 15 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 0.23-2
- Convert tabs to spaces.
- Add shell plugin
- Get rid of some shebang lines.
- Add Google search plugin
Comment 5 Rex Dieter 2006-08-16 08:34:45 EDT
It appears that the dir
%{_libdir}/quodlibet/
is unowned, easiest fix, imo, change
%{_libdir}/quodlibet/_mmkeys.so
to simply
%{_libdir}/quodlibet/
Comment 6 Jeffrey C. Ollie 2006-08-16 09:00:59 EDT
Spec: http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-3.fc6.spec
SRPM:
http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-3.fc6.src.rpm

%changelog
* Wed Aug 16 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 0.23-3
- Make sure that %%{_libdir}/quodlibet/ is owned
Comment 7 Jason Tibbitts 2006-08-17 02:01:54 EDT
You missed one tab, in Source58.

You should package COPYING, HACKING, NEWS and README as %doc.

Also, what's the upstream for google.py?  From the looks of things, it's you,
which would be OK.

It seems to me that there must be a simpler way to copy 50 sources into place.

The README file says there are unit tests included, but I don't see them in the
package.

I built this for i386 and installed it on my home machine; it seems to run OK
but I saw this odd bit on startup:

Introspect error: The name org.gajim.dbus was not provided by any .service files

I found errors with four plugins:

ImportError: No module named musicbrainz
ImportError: No module named CDDB
ImportError: No module named lastfm
ImportError: No module named path

I guess the first three are optional requirements, which should be OK.  The last
one is odd; here's the full backtrace:

Traceback (most recent call last):
  File "/usr/share/quodlibet/plugins/songsmenu/shell.2.py", line 11, in ?
    import os
  File "/usr/lib/python2.4/os.py", line 133, in ?
    from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
ImportError: No module named path

In addition, I chose View->File System and got this backtrace:

Traceback (most recent call last):
  File "/usr/share/quodlibet/qltk/quodlibet.py", line 518, in select_browser
    self.browser = Browser(library, player)
  File "/usr/share/quodlibet/browsers/filesystem.py", line 67, in __init__
    dt = DirectoryTree(initial=const.HOME, folders=folders)
  File "/usr/share/quodlibet/qltk/filesel.py", line 68, in __init__
    folders = filter(is_folder, folders)
UnboundLocalError: local variable 'is_folder' referenced before assignment

I exited the program which left the default view that way and now neither
quodlibet nor exfalso will start.

These are probably issues for upstream, but I just wanted to make sure that
something wasn't missing from the package.

For some reason I don't get any desktop menu entry, even though the desktop file
looks OK to me.  (I use KDE.)

Review:
* All 9000 source files match upstream:
   195c39433b4e2a5bf930af7570b61f3e  quodlibet-0.23.tar.gz

   0b7d2ff31c4c113b52b74e1b8c867843  albumart.py
   2385a15ea0f8c4ccbcf347eb9e5ef174  _amazon.py
   b5f85eb37b75acba938d082913d31b32  animosd.py
   17421585b258ac44a0c04a50f06b25da  ape2id3.py
   680c7f7df3ac0cd949daa153c419e451  automask.py
   f3d86669ab18d4c25075212943cd74e1  autorating.py
   9a984fb37453ff86ac861b01b31f6594  bookmarks.py
   3865f4f3ece8d667c20fe3b8d34418dd  brainz.py
   ab800ac4b48a0a228f1504914f198b5a  browsefolders.py
   ae0be895b7441c9d38b0d8725f53f46c  cddb.py
   73c4409dfbdc8a9d8b7cd1a04f86ac23  clock.py
   c898ef2d38ad04b64137f0b6a8845852  fixlatin1tags.py
   0fb2b513d89026c809b77c423c5080f8  gajim_status.py
   ae32b874d01fb16bed24626602ed2a98  html.py
   4b71dfdbed6d5e8248028f62a3290888  iconv.py
   cd8f349983822b0429ef36d51c506992  ifp.py
   4fd524e514cb0da6714628c7c1078242  importexport.py
   57c82a80c4f30f6ac9b87801e7c80728  iradiolog.py
   d73546846d3280d0d3b2548a97bd8991  jep118.py
   692f212693a86de9858e4979d6cec1b6  k3b.py
   437ab5e65b7788641880b1ff7f4ae9f4  kakasi.py
   57cf89358975fc75267bbff6d629749f  lastfmsubmit.py
   c235836bb4b3f0480f674b6d21996407  nautilus.py
   2a140f01260cb7dc5fc89f95fe11b4e0  notify.py
   d9868612bc1a13536f37d321bd4748d2  qlscrobbler.py
   77dd97961b563ce6a0e0e596d98c39fe  randomalbum.py
   f179c4db522561eed1629854b8de3a4d  replaygain.py
   cb8f5b018503b2f0ad44fc10fc0bd3be  reset.py
   dbd51ebd76b5a8e0a23558480c79da7b  resub.py
   e5fc6a506f63de6f9661d2ded274d70d  splitting.py
   09c6da4082b6aa33d998991be7c508a8  _subprocobj.py
   18ba6a789e95d5d202d911d826d94747  titlecase.py
   12a36f1cc82b14cb25ba54b3d84503c8  trayicon.py
   87065bf6d3b2084ca1a1c1f06f2b3f6c  wikipedia.py
   705e734f3d755a1e05854bc68ed90f6a  write_cover.py

  Source58, pulled manually according to the comments, also matches:
   5a9d7e599fab9be828a6244ee12e3542  shell.2.py?format=raw

  No upstream for google.py

* package meets naming and packaging guidelines.
* specfile is properly named, is cleanly written and uses macros consistently.
* dist tag is present.
* build root is correct.
* license field matches the actual license.
X license is open source-compatible.  License text upstream but not included in
package.
* latest version is being packaged.
* BuildRequires are proper.
* compiler flags are appropriate.
* %clean is present.
* package builds in mock (development, x86_64).
* debuginfo package looks complete.
X rpmlint is silent (just one tab)
* final provides and requires are sane:
   _mmkeys.so()(64bit)
   quodlibet = 0.23-3.fc6
  =
   /usr/bin/env
   gnome-python2-libegg
   gstreamer-python >= 0.10
   libatk-1.0.so.0()(64bit)
   libcairo.so.2()(64bit)
   libgdk-x11-2.0.so.0()(64bit)
   libgdk_pixbuf-2.0.so.0()(64bit)
   libglib-2.0.so.0()(64bit)
   libgmodule-2.0.so.0()(64bit)
   libgobject-2.0.so.0()(64bit)
   libgtk-x11-2.0.so.0()(64bit)
   libpango-1.0.so.0()(64bit)
   libpangocairo-1.0.so.0()(64bit)
   pygtk2 >= 2.8
   python >= 2.4
   python-mutagen >= 1.5
   vorbisgain
? %check is not present; no test suite upstream.  Manual testing reveals a few
problems; see above.
* shared libraries are present, but they aren't in the ld search path.
* package is not relocatable.
* owns the directories it creates.
* doesn't own any directories it shouldn't.
* no duplicates in %files.
* file permissions are appropriate.
* no scriptlets present.
* code, not content.
* documentation is small, so no -docs subpackage is necessary.
* %docs are not necessary for the proper functioning of the package.
* no headers.
* no pkgconfig files.
* no libtool .la droppings.
* desktop file looks correct and is installed properly.  (Note that I don't get
a desktop menu entry, but I don't see anything wrong with the desktop file.)
Comment 8 Jeffrey C. Ollie 2006-08-17 21:11:57 EDT
Spec: http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-4.fc6.spec
SRPM:
http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23-4.fc6.src.rpm

* Thu Aug 17 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 0.23-4
- Instead of manually copying all of the plugins, pack them into a
  tarball and include a script for generating the tarball
Comment 9 Jason Tibbitts 2006-08-17 22:09:21 EDT
That is significantly shorter.  I was just hoping that some specfile wizard knew
of a way to loop over those %{S:n} entries.

In any case, it does look like you addressed the %doc issue even though you
didn't mention it.

The spaces-tabs thing is still there; Source1, 2, and 3 are all tab-indented
while none of the other lines are.  Not that this is a huge deal, but I have to
mention it.

What about the problems I had in testing?  It would be nice to know they're
expected, if there are missing dependencies or if something went wrong in the
build.  And do you have any idea where the _sanity.sh unit tests promised by the
HACKING file are?
Comment 10 Jeffrey C. Ollie 2006-08-18 01:36:34 EDT
It looks like the unit tests are only in SVN:

http://svn.sacredchao.net/svn/quodlibet/trunk/quodlibet/_sanity.sh
http://svn.sacredchao.net/svn/quodlibet/trunk/quodlibet/tests/

I chatted with the developer on IRC and he said that the tests use PyGTK which
needs X so that's a non-starter for a rpm build.  He also said that the tests
use a number of other libraries that may or may not be in Fedora.  See:

http://www.sacredchao.net/quodlibet/changeset/3795

(In reply to comment #7)

> Also, what's the upstream for google.py?  From the looks of things, it's you,
> which would be OK.

Yup, it's me.

> It seems to me that there must be a simpler way to copy 50 sources into place.
> 
> The README file says there are unit tests included, but I don't see them in the
> package.
> 
> I built this for i386 and installed it on my home machine; it seems to run OK
> but I saw this odd bit on startup:
> 
> Introspect error: The name org.gajim.dbus was not provided by any .service files

Probably because you don't have gajim installed.  One of the plugins is for 

> I found errors with four plugins:
> 
> ImportError: No module named musicbrainz

Expected... libmusicbrainz is in Core, but the python-ctypes package needed for
the libmusicbrainz python bindings are in Extras.  There is now a
python-musicbrainz2 package in extras but the API is completely different from
the original bindings.

> ImportError: No module named CDDB
> ImportError: No module named lastfm

Neither of these modules are available in Fedora at the moment.  My reasoning
for including these plugins anyway is that Quod Libet handles errors like this
cleanly, and if the user was to obtain these modules some other way (say by
manually installing from the source) the plugins would work for them.

> ImportError: No module named path
> 
> I guess the first three are optional requirements, which should be OK.  The last
> one is odd; here's the full backtrace:
> 
> Traceback (most recent call last):
>   File "/usr/share/quodlibet/plugins/songsmenu/shell.2.py", line 11, in ?
>     import os
>   File "/usr/lib/python2.4/os.py", line 133, in ?
>     from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
> ImportError: No module named path
>
> In addition, I chose View->File System and got this backtrace:
> 
> Traceback (most recent call last):
>   File "/usr/share/quodlibet/qltk/quodlibet.py", line 518, in select_browser
>     self.browser = Browser(library, player)
>   File "/usr/share/quodlibet/browsers/filesystem.py", line 67, in __init__
>     dt = DirectoryTree(initial=const.HOME, folders=folders)
>   File "/usr/share/quodlibet/qltk/filesel.py", line 68, in __init__
>     folders = filter(is_folder, folders)
> UnboundLocalError: local variable 'is_folder' referenced before assignment

The developer feels that these tracebacks may indicate some local problem with
the Pythin library.  I was unable to duplicate the problem on by screen

> I exited the program which left the default view that way and now neither
> quodlibet nor exfalso will start.

You should be able to get the view back to the default by editing
~/.quodlibet/config and changing "browser = FileSystem" to "browser = SearchBar".


> For some reason I don't get any desktop menu entry, even though the desktop file
> looks OK to me.  (I use KDE.)
> 
> Review:
> * All 9000 source files match upstream:
>    195c39433b4e2a5bf930af7570b61f3e  quodlibet-0.23.tar.gz
> 
>    0b7d2ff31c4c113b52b74e1b8c867843  albumart.py
>    2385a15ea0f8c4ccbcf347eb9e5ef174  _amazon.py
>    b5f85eb37b75acba938d082913d31b32  animosd.py
>    17421585b258ac44a0c04a50f06b25da  ape2id3.py
>    680c7f7df3ac0cd949daa153c419e451  automask.py
>    f3d86669ab18d4c25075212943cd74e1  autorating.py
>    9a984fb37453ff86ac861b01b31f6594  bookmarks.py
>    3865f4f3ece8d667c20fe3b8d34418dd  brainz.py
>    ab800ac4b48a0a228f1504914f198b5a  browsefolders.py
>    ae0be895b7441c9d38b0d8725f53f46c  cddb.py
>    73c4409dfbdc8a9d8b7cd1a04f86ac23  clock.py
>    c898ef2d38ad04b64137f0b6a8845852  fixlatin1tags.py
>    0fb2b513d89026c809b77c423c5080f8  gajim_status.py
>    ae32b874d01fb16bed24626602ed2a98  html.py
>    4b71dfdbed6d5e8248028f62a3290888  iconv.py
>    cd8f349983822b0429ef36d51c506992  ifp.py
>    4fd524e514cb0da6714628c7c1078242  importexport.py
>    57c82a80c4f30f6ac9b87801e7c80728  iradiolog.py
>    d73546846d3280d0d3b2548a97bd8991  jep118.py
>    692f212693a86de9858e4979d6cec1b6  k3b.py
>    437ab5e65b7788641880b1ff7f4ae9f4  kakasi.py
>    57cf89358975fc75267bbff6d629749f  lastfmsubmit.py
>    c235836bb4b3f0480f674b6d21996407  nautilus.py
>    2a140f01260cb7dc5fc89f95fe11b4e0  notify.py
>    d9868612bc1a13536f37d321bd4748d2  qlscrobbler.py
>    77dd97961b563ce6a0e0e596d98c39fe  randomalbum.py
>    f179c4db522561eed1629854b8de3a4d  replaygain.py
>    cb8f5b018503b2f0ad44fc10fc0bd3be  reset.py
>    dbd51ebd76b5a8e0a23558480c79da7b  resub.py
>    e5fc6a506f63de6f9661d2ded274d70d  splitting.py
>    09c6da4082b6aa33d998991be7c508a8  _subprocobj.py
>    18ba6a789e95d5d202d911d826d94747  titlecase.py
>    12a36f1cc82b14cb25ba54b3d84503c8  trayicon.py
>    87065bf6d3b2084ca1a1c1f06f2b3f6c  wikipedia.py
>    705e734f3d755a1e05854bc68ed90f6a  write_cover.py
> 
>   Source58, pulled manually according to the comments, also matches:
>    5a9d7e599fab9be828a6244ee12e3542  shell.2.py?format=raw
> 
>   No upstream for google.py
> 
> * package meets naming and packaging guidelines.
> * specfile is properly named, is cleanly written and uses macros consistently.
> * dist tag is present.
> * build root is correct.
> * license field matches the actual license.
> X license is open source-compatible.  License text upstream but not included in
> package.
> * latest version is being packaged.
> * BuildRequires are proper.
> * compiler flags are appropriate.
> * %clean is present.
> * package builds in mock (development, x86_64).
> * debuginfo package looks complete.
> X rpmlint is silent (just one tab)
> * final provides and requires are sane:
>    _mmkeys.so()(64bit)
>    quodlibet = 0.23-3.fc6
>   =
>    /usr/bin/env
>    gnome-python2-libegg
>    gstreamer-python >= 0.10
>    libatk-1.0.so.0()(64bit)
>    libcairo.so.2()(64bit)
>    libgdk-x11-2.0.so.0()(64bit)
>    libgdk_pixbuf-2.0.so.0()(64bit)
>    libglib-2.0.so.0()(64bit)
>    libgmodule-2.0.so.0()(64bit)
>    libgobject-2.0.so.0()(64bit)
>    libgtk-x11-2.0.so.0()(64bit)
>    libpango-1.0.so.0()(64bit)
>    libpangocairo-1.0.so.0()(64bit)
>    pygtk2 >= 2.8
>    python >= 2.4
>    python-mutagen >= 1.5
>    vorbisgain
> ? %check is not present; no test suite upstream.  Manual testing reveals a few
> problems; see above.
> * shared libraries are present, but they aren't in the ld search path.
> * package is not relocatable.
> * owns the directories it creates.
> * doesn't own any directories it shouldn't.
> * no duplicates in %files.
> * file permissions are appropriate.
> * no scriptlets present.
> * code, not content.
> * documentation is small, so no -docs subpackage is necessary.
> * %docs are not necessary for the proper functioning of the package.
> * no headers.
> * no pkgconfig files.
> * no libtool .la droppings.
> * desktop file looks correct and is installed properly.  (Note that I don't get
> a desktop menu entry, but I don't see anything wrong with the desktop file.)
> 

Comment 11 Jason Tibbitts 2006-08-18 13:36:18 EDT
> It looks like the unit tests are only in SVN:

No problem.

> I chatted with the developer on IRC and he said that the tests use PyGTK which
> needs X so that's a non-starter for a rpm build.

OK, that's fine.  It's just that I always want to see available test suites run
if it's possible to do so.


> Probably because you don't have gajim installed.  One of the plugins is for 

OK, I can accept that some of the included plugins don't run if optional modules
aren't installed.  Since we have no other way to specify optional modules, can
you create a README.fedora file or somesuch with information about which
optional modules can be installed to give more functionality?  Either that or
split out the plugins with extra dependencies into separate packages that have
those dependencies.

> Expected... libmusicbrainz is in Core, but the python-ctypes package needed for
> the libmusicbrainz python bindings are in Extras.

So I just need to install python-ctypes?  Or is the issue that the python
bindings aren't built in the core package because a requisite module is not in
core?  Is it possible to get this plugin working at all with the current state
of the libmusicbrainz packages?  If not, there's probably not much point in
shipping the plugin.

> Neither of these modules are available in Fedora at the moment.  My reasoning
> for including these plugins anyway is that Quod Libet handles errors like this
> cleanly, and if the user was to obtain these modules some other way (say by
> manually installing from the source) the plugins would work for them.

I can buy that; hopefully the libraries will make it in at some point.

> The developer feels that these tracebacks may indicate some local problem with
> the Pythin library.  I was unable to duplicate the problem on by screen

I have a plain extremely stock FC5 system.  It would be nice to get another
tester to see if anyone else can duplicate this.  I'll try it on a freshly
installed machine at work, but the remote display will be sloooow.
Comment 12 Jeffrey C. Ollie 2006-08-29 09:46:07 EDT
Spec:
http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23.1-1.fc6.spec
SRPM:
http://repo.ocjtech.us/misc/fedora/development/SRPMS/quodlibet-0.23.1-1.fc6.src.rpm

%changelog
* Mon Aug 28 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 0.23.1-1
- Update to 0.23.1

* Thu Aug 24 2006 Jeffrey C. Ollie <jeff@ocjtech.us> - 0.23-5
- Include a README.fedora
Comment 13 Jason Tibbitts 2006-08-30 02:33:41 EDT
It would be nice to document which plugins are expected to work, which aren't,
and which need additional modules not available from Extras, but I'm not going
to hold this up for something like that.  If the problem I found in testing is
common and persists with the new version, I'm sure you'll receive plenty of bug
reports.

All of the blocker issues I found have been addressed.  The updated package
builds cleanly and rpmlint is silent.

APPROVED
Comment 14 Deji Akingunola 2006-09-26 23:17:59 EDT
Hi,

Almost a month since the packaging was approved, is there any reason this
package has not been imported into FE tree yet?
Comment 15 Jason Tibbitts 2006-09-26 23:21:00 EDT
The packager has indicated on extras-list that he is currently quite busy.
Comment 16 Jeffrey C. Ollie 2006-09-27 01:46:27 EDT
Things are *starting* to slow up...  I'll try and get a few moments in the next
day or so to import the package.
Comment 17 Deji Akingunola 2006-09-27 02:28:33 EDT
(In reply to comment #15)
> The packager has indicated on extras-list that he is currently quite busy.

Sorry, I missed that.
Comment 18 Jeffrey C. Ollie 2006-10-07 10:51:56 EDT
Imported and built for development, branch requested for FC-5.

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