diff options
author | Louis Sautier <sbraz@gentoo.org> | 2021-09-08 00:48:23 +0200 |
---|---|---|
committer | Louis Sautier <sbraz@gentoo.org> | 2021-09-08 23:39:02 +0200 |
commit | f87696bda2d6580aac1762fd96c5cfc95b7090ce (patch) | |
tree | 16e6417a6d012188ab8dd2545982c4a720ea99ad /app-misc | |
parent | dev-python/hypothesis: Bump to 6.19.0 (diff) | |
download | gentoo-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>
Diffstat (limited to 'app-misc')
-rw-r--r-- | app-misc/rmlint/Manifest | 1 | ||||
-rw-r--r-- | app-misc/rmlint/files/rmlint-2.10.1-cflags.patch | 18 | ||||
-rw-r--r-- | app-misc/rmlint/files/rmlint-2.10.1-fix-tests.patch | 135 | ||||
-rw-r--r-- | app-misc/rmlint/files/rmlint-2.10.1-scons.patch | 93 | ||||
-rw-r--r-- | app-misc/rmlint/files/rmlint-2.10.1-skip-tests.patch | 35 | ||||
-rw-r--r-- | app-misc/rmlint/files/rmlint-2.10.1-x86-fix-size.patch | 30 | ||||
-rw-r--r-- | app-misc/rmlint/metadata.xml | 12 | ||||
-rw-r--r-- | app-misc/rmlint/rmlint-2.10.1.ebuild | 135 |
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 +} |