#!/usr/bin/env bash # vim:ts=4:sts=4:sw=4:et # # Author: Hari Sekhon # Date: 2019-02-27 11:52:24 +0000 (Wed, 27 Feb 2019) # # https://github.com/harisekhon/bash-tools # # License: see accompanying Hari Sekhon LICENSE file # # If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish # # https://www.linkedin.com/in/harisekhon # # Script to find duplicate Perl CPAN module requirements across files set -euo pipefail [ -n "${DEBUG:-}" ] && set -x srcdir="$(dirname "$0")" # shellcheck disable=SC1090 . "$srcdir/lib/utils.sh" # shellcheck disable=SC2034 usage_args="[]" for x in "$@"; do case "$x" in -h|--help) usage ;; esac done if [ $# -gt 0 ]; then requirements_files="$*" else # might be more confusing in perl tools to find unused modules in subdirs like perl lib, so just stick to local #requirements_files="$(find . -name cpan-requirements.txt)" requirements_files="$(find . -maxdepth 2 -name cpan-requirements.txt)" if [ -z "$requirements_files" ]; then usage "No requirements files found, please specify explicit path to cpan-requirements.txt" fi fi found=0 # want splitting of requirements files to separate files # shellcheck disable=SC2086 duplicate_cpan_modules="$( sed 's/#.*//; s/@.*//; s/^[[:space:]]*//; s/[[:space:]]*$//; /^[[:space:]]*$/d;' $requirements_files | sort | uniq -d )" while read -r module; do [ -z "$module" ] && continue # want splitting of requirements files to separate files # shellcheck disable=SC2086 grep "^$module\\>" $requirements_files ((found + 1)) done <<< "$duplicate_cpan_modules" if [ $found -gt 0 ]; then exit 1 fi