Supprimer les dépendances inutiles de Cygwin

15

Dans Cygwin, lorsque j'installe un nouveau package, il installe automatiquement toutes les dépendances nécessaires pour ce package.

Plus tard, si je choisis de supprimer ce package, comment puis-je supprimer les dépendances qu'il a installées avec lui, qui ne sont plus nécessaires?

Josh
la source

Réponses:

8

Eh bien, voici ma solution actuelle que j'ai trouvée. Utilisation de ma connaissance (très) limitée de bash et de Google.

#!/bin/bash
# Print a list of packages that no other package depends on

PackageCount=0
PackageIter=0

# Populate package array
declare -A Packages
PackageList=$(cygcheck.exe -c | cut -d' ' -f1 | tail -n +3)
for P in $PackageList; do
    Packages[${P,,}]=0
    ((PackageCount++))
done

# Determine the last mirror used
LastMirror=$(sed -n '/last-mirror/{n;p}' /etc/setup/setup.rc | tr -d '\t')
echo "[DEBUG] LastMirror = $LastMirror"

# Download the setup.ini file from the mirror server
echo "[DEBUG] Downloading setup.ini from mirror"
if which bzcat &>/dev/null; then
    wget --quiet "${LastMirror}$(uname -m)/setup.bz2" -O - | bzcat > setup.ini
else
    wget --quiet "${LastMirror}$(uname -m)/setup.ini" -O setup.ini
fi

for P in $PackageList; do
    ((PackageIter++))
    echo -ne "[DEBUG] Processing packages $((PackageIter * 100 / PackageCount))%\r"

    deps=$(sed -n "/^@ $P$/,/^requires/p" setup.ini | grep -i '^requires' | cut -d' ' -f2-)

    for dep in $deps; do
        if [[ ${Packages[${dep,,}]} ]]; then
            Packages[${dep,,}]=$((Packages[${dep,,}]+1))
        fi
    done
done

echo -e "\n== Packages =="

for P in $PackageList; do
    if [[ ${Packages[${P,,}]} == 0 ]]; then
        echo $P
    fi
done

rm setup.ini

J'aimerais voir si quelqu'un a une meilleure solution ou des conseils pour améliorer mon script.

Josh
la source
Je ne sais pas si vous êtes toujours sur le site, mais j'ai modifié votre script pour corriger une N=$N+1erreur - en bash, cela créera en fait une chaîne plutôt que des mathématiques. Entourer l'instruction dans (( ))vous permet de faire de vrais calculs en bash (comme vous devez l'avoir découvert plus tard dans le script). De plus, je n'ai pas changé cette partie, mais vous n'avez pas besoin de compter le nombre d'éléments dans un tableau. Au lieu de $PackageCount, vous pouvez accéder ${#PackageList}pour obtenir directement le nombre d'éléments.
piojo