Remova dependências desnecessárias do Cygwin

15

No Cygwin, quando instalo um novo pacote, ele instala automaticamente todas as dependências necessárias para esse pacote.

Posteriormente, se optar por remover esse pacote, como posso remover as dependências instaladas com ele, que não são mais necessárias?

Josh
fonte

Respostas:

8

Bem, aqui está a minha solução atual que eu criei. Usando meu conhecimento (muito) limitado do bash e do 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

Eu adoraria ver se alguém tem uma solução melhor ou alguma dica para melhorar meu script.

Josh
fonte
Não sei se você ainda está no site, mas editei seu script para corrigir um N=$N+1erro - no bash, isso realmente criará uma string em vez de matemática. Ao colocar a declaração em, (( ))você pode fazer contas reais no bash (como você deve ter descoberto mais adiante no script). Além disso, não mudei esta parte, mas você não precisa manter uma contagem do número de elementos em uma matriz. Em vez de $PackageCount, você pode acessar ${#PackageList}para obter o número de elementos diretamente.
Piojo