Eliminar dependencias innecesarias de Cygwin


15

En Cygwin, cuando instalo un nuevo paquete, instala automáticamente cualquier dependencia necesaria para ese paquete.

Más adelante, si elijo eliminar ese paquete, ¿cómo puedo eliminar las dependencias que instaló con él, que ya no son necesarias?

Respuestas:


8

Bueno, aquí está mi solución actual que se me ocurrió. Usando mi (muy) limitado conocimiento de bash y 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

Me encantaría ver si alguien tiene una mejor solución o algún consejo para mejorar mi script.


No sé si todavía estás en el sitio, pero edité tu script para corregir un N=$N+1error; en bash, esto realmente creará una cadena en lugar de matemáticas. Rodear la declaración en le (( ))permite hacer matemática real en bash (como debe haber descubierto más adelante en el script). Además, no cambié esta parte, pero no es necesario que cuente la cantidad de elementos en una matriz. En lugar de $PackageCount, puede acceder ${#PackageList}para obtener el número de elementos directamente.
piojo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.