summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Sautier <sbraz@gentoo.org>2021-09-08 00:48:23 +0200
committerLouis Sautier <sbraz@gentoo.org>2021-09-08 23:39:02 +0200
commitf87696bda2d6580aac1762fd96c5cfc95b7090ce (patch)
tree16e6417a6d012188ab8dd2545982c4a720ea99ad
parentdev-python/hypothesis: Bump to 6.19.0 (diff)
downloadgentoo-f87696bda2d6580aac1762fd96c5cfc95b7090ce.tar.gz
gentoo-f87696bda2d6580aac1762fd96c5cfc95b7090ce.tar.bz2
gentoo-f87696bda2d6580aac1762fd96c5cfc95b7090ce.zip
app-misc/rmlint: initial import, v2.10.1
Closes: https://bugs.gentoo.org/560390 Signed-off-by: Louis Sautier <sbraz@gentoo.org>
-rw-r--r--app-misc/rmlint/Manifest1
-rw-r--r--app-misc/rmlint/files/rmlint-2.10.1-cflags.patch18
-rw-r--r--app-misc/rmlint/files/rmlint-2.10.1-fix-tests.patch135
-rw-r--r--app-misc/rmlint/files/rmlint-2.10.1-scons.patch93
-rw-r--r--app-misc/rmlint/files/rmlint-2.10.1-skip-tests.patch35
-rw-r--r--app-misc/rmlint/files/rmlint-2.10.1-x86-fix-size.patch30
-rw-r--r--app-misc/rmlint/metadata.xml12
-rw-r--r--app-misc/rmlint/rmlint-2.10.1.ebuild135
8 files changed, 459 insertions, 0 deletions
diff --git a/app-misc/rmlint/Manifest b/app-misc/rmlint/Manifest
new file mode 100644
index 000000000000..09581c7bdc75
--- /dev/null
+++ b/app-misc/rmlint/Manifest
@@ -0,0 +1 @@
+DIST rmlint-2.10.1.tar.gz 2494474 BLAKE2B 40219ff64d54f0e2fc66a958c6ca51520152f77f9038e9756ab601da5180502528be7b2d750c85b5991c31db96c3eb7415841084b6c90db103dc212947864034 SHA512 a1281359798816dadaf3a1e706e671dc63edf8f7d176c114a924a1e03fc9ad6fa54d10de701b09b5e364a9a815e0d11bdbef3d16fb7fec74eb85af20a106db1a
diff --git a/app-misc/rmlint/files/rmlint-2.10.1-cflags.patch b/app-misc/rmlint/files/rmlint-2.10.1-cflags.patch
new file mode 100644
index 000000000000..6ddfd98d956a
--- /dev/null
+++ b/app-misc/rmlint/files/rmlint-2.10.1-cflags.patch
@@ -0,0 +1,18 @@
+--- a/SConstruct
++++ b/SConstruct
+@@ -724,7 +724,6 @@ if ARGUMENTS.get('DEBUG') == "1":
+ O_value = ARGUMENTS.get('O', O_DEBUG)
+ else:
+ conf.env.Append(CCFLAGS=['-DG_DISABLE_ASSERT', '-DNDEBUG'])
+- conf.env.Append(LINKFLAGS=['-s'])
+ O_value = ARGUMENTS.get('O', O_RELEASE)
+
+ if O_value == 'debug':
+@@ -735,7 +734,6 @@ elif O_value == 'release':
+ cc_O_option = '-O' + O_value
+
+ print("Using compiler optimisation {} (to change, run scons with O=[0|1|2|3|s|fast])".format(cc_O_option))
+-conf.env.Append(CCFLAGS=[cc_O_option])
+
+ if ARGUMENTS.get('SYMBOLS') == '1':
+ print("Compiling with debugging symbols")
diff --git a/app-misc/rmlint/files/rmlint-2.10.1-fix-tests.patch b/app-misc/rmlint/files/rmlint-2.10.1-fix-tests.patch
new file mode 100644
index 000000000000..db43e366b389
--- /dev/null
+++ b/app-misc/rmlint/files/rmlint-2.10.1-fix-tests.patch
@@ -0,0 +1,135 @@
+--- a/tests/test_options/test_replay.py
++++ b/tests/test_options/test_replay.py
+@@ -69,7 +69,7 @@ def test_replay_match_basename():
+ create_file('xxx', 'test1/b')
+ create_file('xxx', 'test2/a')
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ head, *data, footer = run_rmlint('-o json:{p}'.format(
+ p=replay_path
+@@ -104,7 +104,7 @@ def test_replay_hidden():
+ create_file('xxx', 'test/.a')
+ create_file('xxx', 'test/.b')
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ head, *data, footer = run_rmlint('--hidden -o json:{p}'.format(
+ p=replay_path
+@@ -130,7 +130,7 @@ def test_replay_must_match_tagged():
+ create_file('xxx', 'test_a/a')
+ create_file('xxx', 'test_b/a')
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ head, *data, footer = run_rmlint('-o json:{p}'.format(
+ p=replay_path
+@@ -182,7 +182,7 @@ def test_sorting():
+ (''.join(p) for p in permutations(all_opts, n_terms))
+ )
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ for combo in combos:
+ combo_str = '-y ' + combo
+@@ -218,7 +218,7 @@ def test_replay_no_dir():
+
+ try:
+ os.chdir(TESTDIR_NAME)
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+ head, *data, footer = run_rmlint(
+ '-o json:{p}'.format(p=replay_path),
+ use_default_dir=False,
+@@ -242,7 +242,7 @@ def test_replay_unicode_fuckup():
+ create_file('xxx', names[1])
+ create_file('xxx', names[2])
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ head, *data, footer = run_rmlint('-o json:{p}'.format(p=replay_path))
+ assert len(data) == 3
+@@ -260,8 +260,8 @@ def test_replay_tagged_order():
+ create_file('xxx', 'b/1')
+ create_file('xxx', 'b/2')
+
+- replay_path_a = '/tmp/replay-a.json'
+- replay_path_b = '/tmp/replay-b.json'
++ replay_path_a = os.path.join(TESTDIR_NAME, 'replay-a.json')
++ replay_path_b = os.path.join(TESTDIR_NAME, 'replay-b.json')
+
+ # Create replay-a.json
+ head, *data, footer = run_rmlint(
+@@ -326,7 +326,7 @@ def test_replay_duplicate_directory_size():
+ create_file('xxx', 'a/xxx')
+ create_file('xxx', 'b/xxx')
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+ head, *data, footer = run_rmlint('-o json:{p} -S a'.format(p=replay_path))
+ assert len(data) == 2
+
+@@ -427,7 +427,7 @@ def test_replay_pack_directories():
+ create_pack_and_unpack_scenario()
+
+ # Do a run without -D and pack it later during --replay.
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+
+ head, *data, footer = run_rmlint('-o json:{p} -S ahD'.format(p=replay_path))
+ assert len(data) == 13
+@@ -449,7 +449,7 @@ def test_replay_unpack_directories():
+ create_pack_and_unpack_scenario()
+
+ # Do a run with -D and pack it later during --replay.
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+ head, *data, footer = run_rmlint('-o json:{p} -S ahD -D'.format(p=replay_path))
+
+ assert len(data) == 21
+--- a/tests/test_options/test_size.py
++++ b/tests/test_options/test_size.py
+@@ -90,7 +90,7 @@ def test_replay_size():
+ create_file('yyy', 'b/yyy')
+ create_testdir('empty_dir')
+
+- replay_path = '/tmp/replay.json'
++ replay_path = os.path.join(TESTDIR_NAME, 'replay.json')
+ head, *data, footer = run_rmlint('-o json:{p}'.format(
+ p=replay_path
+ ))
+--- a/tests/test_options/test_stdin.py
++++ b/tests/test_options/test_stdin.py
+@@ -69,7 +69,6 @@ def test_path_starting_with_dash():
+ os.chdir(TESTDIR_NAME)
+ data = check_output(
+ [cwd + '/rmlint', '-o', 'json', '-S', 'a', '--', subdir],
+- stderr=STDOUT
+ )
+ finally:
+ os.chdir(cwd)
+--- a/tests/utils.py
++++ b/tests/utils.py
+@@ -133,7 +133,7 @@ def run_rmlint_once(*args,
+
+ cmd += shlex.split(' '.join(args))
+ if with_json:
+- cmd += ['-o', 'json:/tmp/out.json', '-c', 'json:oneline']
++ cmd += ['-o', 'json:' + os.path.join(TESTDIR_NAME, 'out.json'), '-c', 'json:oneline']
+
+ for idx, output in enumerate(outputs or []):
+ cmd.append('-o')
+@@ -168,7 +168,7 @@ def run_rmlint_once(*args,
+ return output
+
+ if with_json:
+- with open('/tmp/out.json', 'r') as f:
++ with open(os.path.join(TESTDIR_NAME, 'out.json'), 'r') as f:
+ json_data = json.loads(f.read())
+ else:
+ json_data = []
diff --git a/app-misc/rmlint/files/rmlint-2.10.1-scons.patch b/app-misc/rmlint/files/rmlint-2.10.1-scons.patch
new file mode 100644
index 000000000000..a60aafe1fa67
--- /dev/null
+++ b/app-misc/rmlint/files/rmlint-2.10.1-scons.patch
@@ -0,0 +1,93 @@
+--- a/SConstruct
++++ b/SConstruct
+@@ -515,7 +515,7 @@ AddOption(
+ action='store', metavar='DIR', help='libdir name (lib or lib64)'
+ )
+
+-for suffix in ['libelf', 'gettext', 'fiemap', 'blkid', 'json-glib', 'gui']:
++for suffix in ['libelf', 'gettext', 'fiemap', 'blkid', 'json-glib', 'gui', 'docs']:
+ AddOption(
+ '--without-' + suffix, action='store_const', default=False, const=False,
+ dest='with_' + suffix
+@@ -804,7 +804,8 @@ env.Default(library)
+
+ SConscript('tests/SConscript', exports='programs')
+ SConscript('po/SConscript')
+-SConscript('docs/SConscript')
++if GetOption("with_docs"):
++ SConscript('docs/SConscript')
+ SConscript('gui/SConscript')
+
+
+@@ -883,7 +884,6 @@ if 'config' in COMMAND_LINE_TARGETS:
+ Find non-stripped binaries (needs libelf) : {libelf}
+ Optimize using ioctl(FS_IOC_FIEMAP) (needs linux) : {fiemap}
+ Support for SHA512 (needs glib >= 2.31) : {sha512}
+- Build manpage from docs/rmlint.1.rst : {sphinx}
+ Support for caching checksums in file's xattr : {xattr}
+ Support for reading json caches (needs json-glib) : {json_glib}
+ Checking for proper support of big files >= 4GB : {bigfiles}
+@@ -898,6 +898,9 @@ if 'config' in COMMAND_LINE_TARGETS:
+ (needs <locale.h> for compile side support) : {locale}
+ (needs msgfmt to compile .po files) : {msgfmt}
+
++ Enable GUI : {gui}
++ Build docs : {docs}
++
+ {grey}The following constants will be used during the build:{end}
+
+ Version information : {version}
+@@ -925,6 +928,8 @@ Type 'scons' to actually compile rmlint now. Good luck.
+ bigfiles=yesno(env['HAVE_BIGFILES']),
+ bigofft=yesno(env['HAVE_BIG_OFF_T']),
+ bigstat=yesno(env['HAVE_BIG_STAT']),
++ gui=yesno(GetOption("with_gui")),
++ docs=yesno(GetOption("with_docs")),
+ sphinx=COLORS['green'] + 'yes, using ' + COLORS['end'] + sphinx_bin if sphinx_bin else yesno(sphinx_bin),
+ compiler=env['CC'],
+ prefix=GetOption('prefix'),
+--- a/gui/setup.py
++++ b/gui/setup.py
+@@ -37,7 +37,7 @@ def get_prefix():
+ PREFIX = get_prefix()
+
+
+-class PrePlusPostInstall(install):
++class PreInstall(install):
+ def run(self):
+ # Compile the resource bundle freshly
+ print('==> Compiling resource bundle')
+@@ -59,24 +59,6 @@ class PrePlusPostInstall(install):
+ # Run the usual distutils install routine:
+ install.run(self)
+
+- # Make sure the schema file is updated.
+- # Otherwise the gui will trace trap.
+- print('==> Compiling GLib Schema files')
+-
+- try:
+- subprocess.call([
+- 'glib-compile-schemas',
+- os.path.join(PREFIX, 'share/glib-2.0/schemas')
+- ])
+- except subprocess.CalledProcessError as err:
+- print('==> Could not update schemas: ', err)
+- print('==> Please run the following manually:\n')
+- print(' sudo glib-compile-schemas {prefix}'.format(
+- prefix=os.path.join(PREFIX, 'share/glib-2.0/schemas')
+- ))
+- else:
+- print('==> OK!')
+-
+
+ setup(
+ name='Shredder',
+@@ -88,7 +70,7 @@ setup(
+ url='https://rmlint.rtfd.org',
+ license='GPLv3',
+ platforms='any',
+- cmdclass={'install': PrePlusPostInstall},
++ cmdclass={'install': PreInstall},
+ packages=['shredder', 'shredder.views'],
+ package_data={'': [
+ 'resources/*.gresource'
diff --git a/app-misc/rmlint/files/rmlint-2.10.1-skip-tests.patch b/app-misc/rmlint/files/rmlint-2.10.1-skip-tests.patch
new file mode 100644
index 000000000000..f5f81fd6d0a0
--- /dev/null
+++ b/app-misc/rmlint/files/rmlint-2.10.1-skip-tests.patch
@@ -0,0 +1,35 @@
+commit 566198730352f2353fd8332794409d7c9edf80e2
+Author: Louis Sautier <sautier.louis@gmail.com>
+Date: Wed Sep 8 00:53:28 2021 +0200
+
+ tests: skip man and python2
+
+ Those tests fail respectively when the documentation isn't built and when
+ python2 isn't available (probably specific to Gentoo).
+
+diff --git a/tests/test_formatters/test_py.py b/tests/test_formatters/test_py.py
+index 92b17604..28d2dd42 100644
+--- a/tests/test_formatters/test_py.py
++++ b/tests/test_formatters/test_py.py
+@@ -16,7 +16,7 @@ def _check_interpreter(interpreter):
+ return False
+
+
+-@parameterized(["python2", "python3"])
++@parameterized(["python3"])
+ @with_setup(usual_setup_func, usual_teardown_func)
+ def test_paranoia(interpreter):
+ if not _check_interpreter(interpreter):
+diff --git a/tests/test_options/test_help.py b/tests/test_options/test_help.py
+index d934724a..60bc40a0 100644
+--- a/tests/test_options/test_help.py
++++ b/tests/test_options/test_help.py
+@@ -17,7 +17,7 @@ def test_help():
+
+
+ @with_setup(usual_setup_func, usual_teardown_func)
+-def test_man():
++def _test_man():
+ yelp = subprocess.check_output(
+ ['./rmlint', '--show-man'], stderr=subprocess.STDOUT
+ ).decode('utf-8')
diff --git a/app-misc/rmlint/files/rmlint-2.10.1-x86-fix-size.patch b/app-misc/rmlint/files/rmlint-2.10.1-x86-fix-size.patch
new file mode 100644
index 000000000000..b67c13f527ee
--- /dev/null
+++ b/app-misc/rmlint/files/rmlint-2.10.1-x86-fix-size.patch
@@ -0,0 +1,30 @@
+commit 87c53a5cb0ec37412cf9fe748dc90dddc6812733
+Author: Louis Sautier <sautier.louis@gmail.com>
+Date: Wed Sep 8 19:39:07 2021 +0200
+
+ Fix max sizes on x86, closes #522
+
+ strtoull returns ULLONG_MAX, not ULONG_MAX.
+
+diff --git a/lib/cmdline.c b/lib/cmdline.c
+index 56141d94..36f48c1b 100644
+--- a/lib/cmdline.c
++++ b/lib/cmdline.c
+@@ -351,7 +351,7 @@ static RmOff rm_cmd_size_string_to_bytes(const char *size_spec, GError **error)
+ return 0;
+ }
+
+- if(fraction_num == ULONG_MAX && errno == ERANGE) {
++ if(fraction_num == ULLONG_MAX && errno == ERANGE) {
+ g_set_error(error, RM_ERROR_QUARK, 0, _("Fraction is too big for uint64"));
+ return 0;
+ }
+@@ -371,7 +371,7 @@ static RmOff rm_cmd_size_string_to_bytes(const char *size_spec, GError **error)
+ return 0;
+ }
+
+- if(base_size == ULONG_MAX && errno == ERANGE) {
++ if(base_size == ULLONG_MAX && errno == ERANGE) {
+ g_set_error(error, RM_ERROR_QUARK, 0, _("Size is too big for uint64"));
+ return 0;
+ }
diff --git a/app-misc/rmlint/metadata.xml b/app-misc/rmlint/metadata.xml
new file mode 100644
index 000000000000..045b589e3cb0
--- /dev/null
+++ b/app-misc/rmlint/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>sbraz@gentoo.org</email>
+ <name>Louis Sautier</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">sahib/rmlint</remote-id>
+ <bugs-to>https://github.com/sahib/rmlint/issues</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/app-misc/rmlint/rmlint-2.10.1.ebuild b/app-misc/rmlint/rmlint-2.10.1.ebuild
new file mode 100644
index 000000000000..11a0d0b2e175
--- /dev/null
+++ b/app-misc/rmlint/rmlint-2.10.1.ebuild
@@ -0,0 +1,135 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{8..9} )
+
+inherit gnome2-utils python-single-r1 scons-utils toolchain-funcs xdg-utils
+
+DESCRIPTION="Extremely fast tool to remove duplicates and other lint from your filesystem"
+HOMEPAGE="https://rmlint.readthedocs.io/"
+SRC_URI="https://github.com/sahib/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="doc gui nls test"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/glib:2
+ dev-libs/json-glib
+ virtual/libelf:0=
+"
+RDEPEND="
+ ${DEPEND}
+ gui? (
+ ${PYTHON_DEPS}
+ x11-libs/gtksourceview:3.0
+ $(python_gen_cond_dep '
+ dev-python/colorlog[${PYTHON_MULTI_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}]
+ ')
+ )
+"
+BDEPEND="
+ virtual/pkgconfig
+ doc? (
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/sphinx[${PYTHON_MULTI_USEDEP}]
+ dev-python/sphinx-bootstrap-theme[${PYTHON_MULTI_USEDEP}]
+ ')
+ )
+ nls? ( sys-devel/gettext )
+ test? (
+ ${PYTHON_DEPS}
+ app-shells/dash
+ $(python_gen_cond_dep '
+ dev-python/nose[${PYTHON_MULTI_USEDEP}]
+ dev-python/parameterized[${PYTHON_MULTI_USEDEP}]
+ dev-python/psutil[${PYTHON_MULTI_USEDEP}]
+ dev-python/pyxattr[${PYTHON_MULTI_USEDEP}]
+ ')
+ )
+"
+
+DOCS=(CHANGELOG.md README.rst)
+PATCHES=(
+ # The build system tries to override several CFLAGS
+ "${FILESDIR}/${PN}-2.10.1-cflags.patch"
+ # https://github.com/sahib/rmlint/pull/520
+ "${FILESDIR}/${PN}-2.10.1-scons.patch"
+ # https://github.com/sahib/rmlint/pull/521
+ "${FILESDIR}/${PN}-2.10.1-fix-tests.patch"
+ # Skip problematic tests
+ "${FILESDIR}/${PN}-2.10.1-skip-tests.patch"
+ # https://github.com/sahib/rmlint/pull/523
+ "${FILESDIR}/${PN}-2.10.1-x86-fix-size.patch"
+)
+
+src_prepare() {
+ default
+ if use test && use x86; then
+ # Skip part of a test until this is fixed:
+ # https://github.com/sahib/rmlint/issues/522
+ sed -i '/--size 0-18446744073709551615\.1/d' \
+ tests/test_options/test_size.py || die
+ fi
+}
+
+src_configure() {
+ # Needed for USE=-native-symlinks
+ tc-export CC
+ scons_opts=(
+ VERBOSE=1
+ $(use_with doc docs)
+ $(use_with gui)
+ $(use_with nls gettext)
+ )
+ escons "${scons_opts[@]}" config
+}
+
+src_compile() {
+ escons "${scons_opts[@]}"
+}
+
+src_test() {
+ RM_TS_DIR="${T}/tests" nosetests -s -v -a '!slow' || \
+ die "Tests failed"
+}
+
+src_install() {
+ escons "${scons_opts[@]}" --prefix="${ED}/usr" --actual-prefix="${EPREFIX}/usr" install
+
+ # https://github.com/sahib/rmlint/pull/525
+ if use doc; then
+ gzip -d "${ED}/usr/share/man/man1/rmlint.1.gz" || die
+ fi
+ if use gui; then
+ python_optimize
+ fi
+ einstalldocs
+}
+
+pkg_preinst() {
+ if use gui; then
+ gnome2_schemas_savelist
+ fi
+}
+
+pkg_postinst() {
+ if use gui; then
+ gnome2_schemas_update
+ xdg_icon_cache_update
+ fi
+}
+
+pkg_postrm() {
+ if use gui; then
+ gnome2_schemas_update
+ xdg_icon_cache_update
+ fi
+}