Skip to content

Instantly share code, notes, and snippets.

@codrcodz
Last active April 3, 2018 18:28
Show Gist options
  • Save codrcodz/ffe6004d8e73adf55fb862c42af9628d to your computer and use it in GitHub Desktop.
Save codrcodz/ffe6004d8e73adf55fb862c42af9628d to your computer and use it in GitHub Desktop.
Finds all the dependencies of a packages, and its deps' deps, and those deps' deps...
#!/usr/bin/env bash
main_pkg="${1}";
arch="$(uname -i)"
deps_list=( ${main_pkg} );
declare -a master_pkg_list;
declare -a deps_list_additions;
echo "[INFO] Finding deps for main_pkg: ${main_pkg}";
while true; do
for dep in ${deps_list[@]}; do
if [[ "${dep}" != "${main_pkg}" ]]; then
echo "[INFO] Finding deps for dep: ${dep}";
fi
dep_deps=( $(yum deplist ${dep} | grep -oP "(?<=(provider:\s)).*\.(${arch}|noarch)" | sort -u;) );
deps_list_additions+=( ${dep_deps[@]} );
deps_list_additions=( $(for item in ${deps_list_additions[@]}; do echo ${item}; done | sort -u) );
done
dep_count=$(for item in ${master_pkg_list[@]} ${deps_list_additions[@]}; do echo "${item}"; done | sort -u | wc -l;);
if [[ "${#master_pkg_list[@]}" != "${dep_count}" ]]; then
deps_list=(
$(
for item in ${deps_list_additions[@]}; do
echo "${master_pkg_list[@]}" | grep "${item}" > /dev/null || echo "${item}";
done | sort -u
)
);
master_pkg_list=( $(for item in ${master_pkg_list[@]} ${deps_list_additions[@]}; do echo "${item}"; done | sort -u;) );
deps_list_additions=();
else
echo "[INFO] Found the following packages:"
for pkg in ${main_pkg} ${master_pkg_list[@]}; do
echo "${pkg}";
done
exit 0;
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment