On Tue, 29 Dec 2020 14:05:48 +0000
Stuart Henderson wrote:

> On 2020/12/29 14:46, Björn Ketelaars wrote:
> > On Tue 29/12/2020 11:27, Charlene Wendling wrote:
> > > Hi,
> > > 
> > > Here is an update for lfm to version 3.1. It has been rewritten
> > > almost from scratch, here are the most important changes (see
> > > [0]):
> > > 
> > > * move from python 2 to python 3
> > > * pyview has been removed in favour of less(1)
> > > * many backward incompatible changes, notably ~/.lfmrc has been
> > >   deprecated in favour of ~/.config/lfmrc/...
> > > 
> > > Port-wise, despite the size of the diff, there is not much to say.
> > > Nonetheless, data files were not installed where they should.
> > > 
> > > As such, i've brought back the 2.3 behaviour and chose to install
> > > everything as data_files, instead of using a post-install hook. We
> > > would have needed to patch setup.py anyway.
> > > 
> > > I met no issues while testing, but given the number of features, i
> > > indeed did not test all of them.
> > > 
> > > I'm not used to deal with python stuff, so feedback is very
> > > welcome :)
> > > 
> > > Charlène.

Thanks for the feedback.

> > Builds and packages ok, however errors out upon starting:
> > 
> > $ lfm
> > ERROR: Cannot copy default theme or keys file to user configuration
> > folder /home/bket/.config/lfm [Errno 2] No such file or directory:
> > '/usr/local/lib/python3.8/site-packages/lfm/etc/lfm-default.theme'
> > Quitting
> > 
> > I'm guessing that
> > '/usr/local/lib/python3.8/site-packages/lfm/etc/lfm-default.theme'
> > should read '/usr/local/share/examples/lfm/lfm-default.theme'.

I mistakenly thought there were not used, but they are when no
configuration file is present. Once lfm has been run, these two files
are not used since they're dumped to $HOME/.config/lfm.

They are not shipped anymore in my diff, lfm provides
'--restore-{keys,theme,andmore}' flags anyway.

> .. or /etc/lfm/lfm-default.theme (installed from examples via @sample)
> 

I should have not removed that paragraph in my first mail :) See
$WRKSRC/lfm/common.py:17. There is no configuration file hierarchy,
only $HOME/.config/lfm/ is used, as such lfm does not read its
configuration from /etc, hence no @sample seems needed.

It appears that lfm also wants docs so the help system works (press 'h'
in the main window). I've added a new patch to do so without 
duplicating them; Debian does this as well, but differently because
they provide gzip'd manpages. In any case the docs are displayed
in raw restructured text format.

Testing the runtime in a clean chroot showed that error message:

        ModuleNotFoundError: No module named 'pkg_resources'

So it needs MODPY_SETUPTOOLS to be defined; yet setup.py failed with:

        error: option --single-version-externally-managed not recognized

I made setup.py use setuptool's install instead of distutils'
one, and sent a mail to the author about that -- hopefully kmos@
has well documented the issue in another port commit :)

Charlène.


Index: Makefile
===================================================================
RCS file: /cvs/ports/misc/lfm/Makefile,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 Makefile
--- Makefile    24 Mar 2020 15:12:39 -0000      1.8
+++ Makefile    29 Dec 2020 20:39:28 -0000
@@ -2,9 +2,8 @@
 
 COMMENT =              powerful curses interface python file manager
 
-MODPY_EGG_VERSION =    2.3
+MODPY_EGG_VERSION =    3.1
 DISTNAME =             lfm-${MODPY_EGG_VERSION}
-REVISION=              2
 
 CATEGORIES =           misc
 
@@ -13,14 +12,20 @@ HOMEPAGE =          https://inigo.katxi.org/deve
 # GPLv3+
 PERMIT_PACKAGE =       Yes
 
+MODULES =              lang/python
+
 MODPY_PI =             Yes
+MODPY_VERSION =                ${MODPY_DEFAULT_VERSION_3}
 
-MODULES =              lang/python
+# Actually required at runtime (pkg_resources), also see
+# patches/patch-setup_py comment
+MODPY_SETUPTOOLS =     Yes
 
 NO_TEST =              Yes
 
-post-install:
-               ${INSTALL_MAN} ${WRKSRC}/lfm.1 ${PREFIX}/man/man1
-               ${INSTALL_MAN} ${WRKSRC}/pyview.1 ${PREFIX}/man/man1
+# fix hardcoded paths
+pre-build:
+       sed -i 's,/usr,${LOCALBASE},g' ${WRKSRC}/lfm.1
+       ${SUBST_CMD} ${WRKSRC}/lfm/actions.py
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/misc/lfm/distinfo,v
retrieving revision 1.2
diff -u -p -u -p -r1.2 distinfo
--- distinfo    18 Jan 2015 03:14:31 -0000      1.2
+++ distinfo    29 Dec 2020 20:39:28 -0000
@@ -1,2 +1,2 @@
-SHA256 (lfm-2.3.tar.gz) = 6N8YjBfU1nbPQcyun2v4KqDF/zlC1arZhZkK0URslQQ=
-SIZE (lfm-2.3.tar.gz) = 119120
+SHA256 (lfm-3.1.tar.gz) = L3MaJpQNsWj5yIMM4YbYdplcSFd1coiAUva84Dd6v8o=
+SIZE (lfm-3.1.tar.gz) = 88876
Index: patches/patch-lfm___init___py
===================================================================
RCS file: patches/patch-lfm___init___py
diff -N patches/patch-lfm___init___py
--- patches/patch-lfm___init___py       17 Jul 2011 20:23:46 -0000      1.1.1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-$OpenBSD: patch-lfm___init___py,v 1.1.1.1 2011/07/17 20:23:46 sthen Exp $
-
-Change default .rar handler
-
---- lfm/__init__.py.orig       Thu Jul 14 11:45:30 2011
-+++ lfm/__init__.py    Thu Jul 14 11:46:01 2011
-@@ -46,7 +46,7 @@ sysprogs = { 'tar': 'tar',
-              'gzip': 'gzip',
-              'zip': 'zip',
-              'unzip': 'unzip',
--             'rar': 'rar',
-+             'rar': 'unrar',
-              '7z': '7z',
-              'xz': 'xz',
-              'grep': 'grep',
Index: patches/patch-lfm_actions_py
===================================================================
RCS file: patches/patch-lfm_actions_py
diff -N patches/patch-lfm_actions_py
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-lfm_actions_py        29 Dec 2020 20:39:28 -0000
@@ -0,0 +1,27 @@
+$OpenBSD$
+
+Allow reading lfm documentation in lfm while making the document available in
+${LOCALBASE}/share/doc/lfm
+
+Index: lfm/actions.py
+--- lfm/actions.py.orig
++++ lfm/actions.py
+@@ -1111,11 +1111,13 @@ def help_menu():
+         else:
+             docfile = {'r': 'README', 'n': 'NEWS', 't': 'TODO', 'l': 
'COPYING'}.get(ret[0])
+             try:
+-                filename = pkg_resources.resource_filename('lfm', 'doc/' + 
docfile)
+-                utils.run_on_current_file(app.cfg.programs['pager'], filename)
+-            except NotImplementedError:
+-                buf = str(pkg_resources.resource_string('lfm', 'doc/' + 
docfile), 'UTF-8')
+-                InternalView(docfile, [(l, 'view_white_on_black') for l in 
buf.splitlines()], center=False).run()
++                filename = '${LOCALBASE}/share/doc/lfm/' + docfile
++                with open(filename) as f:
++                    buf = f.readlines()
++                f.close()
++                InternalView(docfile, [(l, 'view_white_on_black') for l in 
buf], center=False).run()
++            except Exception as e:
++                DialogError('Cannot read the doc!\n{}'.format(str(e)))
+         return refresh()
+     else:
+         return RetCode.nothing, None
Index: patches/patch-lfm_common_py
===================================================================
RCS file: patches/patch-lfm_common_py
diff -N patches/patch-lfm_common_py
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-lfm_common_py 29 Dec 2020 20:39:28 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+Change default handler for rar files
+
+Index: lfm/common.py
+--- lfm/common.py.orig
++++ lfm/common.py
+@@ -37,7 +37,7 @@ SYSPROGS = {'tar': 'tar',
+             'gzip': 'gzip',
+             'zip': 'zip',
+             'unzip': 'unzip',
+-            'rar': 'rar',
++            'rar': 'unrar',
+             '7z': '7z',
+             'xz': 'xz',
+             'lzip': 'lzip',
Index: patches/patch-lfm_compress_py
===================================================================
RCS file: /cvs/ports/misc/lfm/patches/patch-lfm_compress_py,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-lfm_compress_py
--- patches/patch-lfm_compress_py       17 Jul 2011 20:23:46 -0000      1.1.1.1
+++ patches/patch-lfm_compress_py       29 Dec 2020 20:39:28 -0000
@@ -2,14 +2,42 @@ $OpenBSD: patch-lfm_compress_py,v 1.1.1.
 
 Incompatible GNU tar option
 
---- lfm/compress.py.orig       Thu Jul 14 12:19:36 2011
-+++ lfm/compress.py    Thu Jul 14 12:19:48 2011
-@@ -111,7 +111,7 @@ class PackagerTGZ(PackagerBase):
-     exts = ('.tar.gz', '.tgz', '.tar.Z')
+Index: lfm/compress.py
+--- lfm/compress.py.orig
++++ lfm/compress.py
+@@ -108,7 +108,7 @@ class PackagerTGZ(PackagerBase):
      need_tar = True
-     uncompress_prog = compress_prog = sysprogs['gzip']
--    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + sysprogs['tar'] + 
' xfi -'
-+    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + sysprogs['tar'] + 
' xf -'
-     compress_cmd = sysprogs['tar'] + ' cf - \"%s\" | ' + compress_prog + ' > 
\"%s\"'
-     compressXXX_cmd = sysprogs['tar'] + ' cf - %s | ' + compress_prog + ' > 
\"%s\"'
+     can_vfs = True
+     uncompress_prog = compress_prog = SYSPROGS['gzip']
+-    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xfi -'
++    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xf -'
+     compress_cmd = SYSPROGS['tar'] + ' cf - \"%s\" | ' + compress_prog + ' > 
\"%s\"'
+     compress2_cmd = SYSPROGS['tar'] + ' cf - %s | ' + compress_prog + ' > 
\"%s\"'
+ 
+@@ -130,7 +130,7 @@ class PackagerTXZ(PackagerBase):
+     need_tar = True
+     can_vfs = True
+     uncompress_prog = compress_prog = SYSPROGS['xz']
+-    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xfi -'
++    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xf -'
+     compress_cmd = SYSPROGS['tar'] + ' cf - \"%s\" | ' + compress_prog + ' > 
\"%s\"'
+     compress2_cmd = SYSPROGS['tar'] + ' cf - %s | ' + compress_prog + ' > 
\"%s\"'
+ 
+@@ -152,7 +152,7 @@ class PackagerTLZ(PackagerBase):
+     need_tar = True
+     can_vfs = True
+     uncompress_prog = compress_prog = SYSPROGS['lzip']
+-    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xfi -'
++    uncompress_cmd = uncompress_prog + ' -d \"%s\" -c | ' + SYSPROGS['tar'] + 
' xf -'
+     compress_cmd = SYSPROGS['tar'] + ' cf - \"%s\" | ' + compress_prog + ' > 
\"%s\"'
+     compress2_cmd = SYSPROGS['tar'] + ' cf - %s | ' + compress_prog + ' > 
\"%s\"'
+ 
+@@ -174,7 +174,7 @@ class PackagerTLZ4(PackagerBase):
+     need_tar = True
+     can_vfs = True
+     uncompress_prog = compress_prog = SYSPROGS['lz4']
+-    uncompress_cmd = uncompress_prog + ' -q -d \"%s\" -c | ' + 
SYSPROGS['tar'] + ' xfi -'
++    uncompress_cmd = uncompress_prog + ' -q -d \"%s\" -c | ' + 
SYSPROGS['tar'] + ' xf -'
+     compress_cmd = SYSPROGS['tar'] + ' cf - \"%s\" | ' + compress_prog + ' -9 
-q > \"%s\"'
+     compress2_cmd = SYSPROGS['tar'] + ' cf - %s | ' + compress_prog + ' -9 -q 
> \"%s\"'
  
Index: patches/patch-setup_py
===================================================================
RCS file: /cvs/ports/misc/lfm/patches/patch-setup_py,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-setup_py
--- patches/patch-setup_py      17 Jul 2011 20:23:46 -0000      1.1.1.1
+++ patches/patch-setup_py      29 Dec 2020 20:39:28 -0000
@@ -1,15 +1,51 @@
 $OpenBSD: patch-setup_py,v 1.1.1.1 2011/07/17 20:23:46 sthen Exp $
 
-Fix manpage path
+setuptools is required at runtime, but using MODPY_SETUPTOOLS=Yes broke the
+build because of --single-version-externally-managed that distutils can't
+deal with. It's needed to supercede distutils' install by setuptools' one.
 
---- setup.py.orig      Thu Jul 14 11:45:34 2011
-+++ setup.py   Thu Jul 14 11:45:45 2011
-@@ -57,7 +57,7 @@ setup(name = 'lfm',
-                     'lfm/config', 'lfm/pyview'],
-       scripts = ['lfm/lfm', 'lfm/pyview'],
-       data_files = [('share/doc/lfm', DOC_FILES),
--                    ('share/man/man1', MAN_FILES)]
-+                    ('man/man1', MAN_FILES)]
- #      **addargs
-      )
+Install the manpage and docs according to our file hierarchy, otherwise:
+* the manpage was installed in /usr/share/man/man1
+* doc files were in sites-packages, now they're in ${LOCALBASE}/share/doc/lfm;
+  see also patch-lfm_actions_py
+* default config files are needed in sites-packages in case $HOME/.config/lfm
+is empty, and can be restored through a runtime option. There is no need for 
@sample
+entries in PLIST since lfm reads its configuration files in ~/.config/lfm only.
+
+Index: setup.py
+--- setup.py.orig
++++ setup.py
+@@ -12,6 +12,7 @@ Released under GNU Public License, read COPYING file f
+ 
+ import os
+ from distutils.core import setup
++from setuptools.command.install import install as install
+ from os.path import join
+ from sys import argv, exit, prefix, version_info
  
+@@ -52,9 +53,6 @@ if 'bdist_wheel' in argv:
+ import shutil
+ try:
+     try:
+-        os.mkdir('lfm/doc')
+-        for f in DOC_FILES:
+-            shutil.copy2(f, 'lfm/doc')
+         os.symlink('../etc', 'lfm/etc')
+     except:
+         pass
+@@ -71,11 +69,12 @@ try:
+           license='GPL3+',
+           packages=['lfm'],
+           scripts=['lfm/lfm'],
+-          data_files=[(join(prefix, 'share/man/man1'), MAN_FILES)],
+-          package_data={'': CONFIG_FILES + [join('doc', f) for f in 
DOC_FILES]},
++          data_files=[(join(prefix, 'man/man1'), MAN_FILES),
++                      (join(prefix, 'share/doc/lfm'), DOC_FILES),
++                     ],
++          package_data={'': CONFIG_FILES},
+     )
+ finally:
+-    shutil.rmtree('lfm/doc')
+     try:
+         os.unlink('lfm/etc')
+     except IsADirectoryError:
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/misc/lfm/pkg/PLIST,v
retrieving revision 1.2
diff -u -p -u -p -r1.2 PLIST
--- pkg/PLIST   16 Sep 2011 22:08:32 -0000      1.2
+++ pkg/PLIST   29 Dec 2020 20:39:28 -0000
@@ -1,34 +1,40 @@
 @comment $OpenBSD: PLIST,v 1.2 2011/09/16 22:08:32 sthen Exp $
 bin/lfm
-bin/pyview
 lib/python${MODPY_VERSION}/site-packages/lfm/
-lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info
+lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/
+lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/PKG-INFO
+lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/SOURCES.txt
+lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/dependency_links.txt
+lib/python${MODPY_VERSION}/site-packages/lfm-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/top_level.txt
 lib/python${MODPY_VERSION}/site-packages/lfm/__init__.py
-lib/python${MODPY_VERSION}/site-packages/lfm/__init__.pyc
+${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}/
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}actions.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}common.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}compress.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}folders.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}key_defs.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}lfm.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}preferences.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}ui.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}ui_widgets.${MODPY_PYC_MAGIC_TAG}pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc
 lib/python${MODPY_VERSION}/site-packages/lfm/actions.py
-lib/python${MODPY_VERSION}/site-packages/lfm/actions.pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/common.py
 lib/python${MODPY_VERSION}/site-packages/lfm/compress.py
-lib/python${MODPY_VERSION}/site-packages/lfm/compress.pyc
-lib/python${MODPY_VERSION}/site-packages/lfm/config.py
-lib/python${MODPY_VERSION}/site-packages/lfm/config.pyc
-lib/python${MODPY_VERSION}/site-packages/lfm/files.py
-lib/python${MODPY_VERSION}/site-packages/lfm/files.pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/etc/
+lib/python${MODPY_VERSION}/site-packages/lfm/etc/lfm-default.keys
+lib/python${MODPY_VERSION}/site-packages/lfm/etc/lfm-default.theme
+lib/python${MODPY_VERSION}/site-packages/lfm/folders.py
+lib/python${MODPY_VERSION}/site-packages/lfm/key_defs.py
 lib/python${MODPY_VERSION}/site-packages/lfm/lfm.py
-lib/python${MODPY_VERSION}/site-packages/lfm/lfm.pyc
-lib/python${MODPY_VERSION}/site-packages/lfm/messages.py
-lib/python${MODPY_VERSION}/site-packages/lfm/messages.pyc
-lib/python${MODPY_VERSION}/site-packages/lfm/pyview.py
-lib/python${MODPY_VERSION}/site-packages/lfm/pyview.pyc
+lib/python${MODPY_VERSION}/site-packages/lfm/preferences.py
+lib/python${MODPY_VERSION}/site-packages/lfm/ui.py
+lib/python${MODPY_VERSION}/site-packages/lfm/ui_widgets.py
 lib/python${MODPY_VERSION}/site-packages/lfm/utils.py
-lib/python${MODPY_VERSION}/site-packages/lfm/utils.pyc
-lib/python${MODPY_VERSION}/site-packages/lfm/vfs.py
-lib/python${MODPY_VERSION}/site-packages/lfm/vfs.pyc
 @man man/man1/lfm.1
-@man man/man1/pyview.1
 share/doc/lfm/
 share/doc/lfm/COPYING
-share/doc/lfm/ChangeLog
 share/doc/lfm/NEWS
 share/doc/lfm/README
-share/doc/lfm/README.pyview
 share/doc/lfm/TODO

Reply via email to