Hapus dependensi yang tidak dibutuhkan dari Cygwin

15

Di Cygwin ketika saya menginstal paket baru, secara otomatis menginstal semua dependensi yang diperlukan untuk paket itu.

Nanti jika saya memilih untuk menghapus paket itu, bagaimana saya bisa menghapus dependensi yang diinstal dengannya, yang tidak lagi diperlukan?

Josh
sumber

Jawaban:

8

Nah, inilah solusi saya saat ini. Menggunakan pengetahuan bash dan Google saya yang sangat terbatas.

#!/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

Saya ingin melihat apakah ada yang punya solusi yang lebih baik, atau ada tips untuk memperbaiki skrip saya.

Josh
sumber
Saya tidak tahu apakah Anda masih di situs, tetapi saya mengedit skrip Anda untuk memperbaiki N=$N+1kesalahan - dalam bash, ini sebenarnya akan membuat string daripada matematika. Mengitari pernyataan di (( ))memungkinkan Anda melakukan matematika nyata di bash (seperti yang Anda temukan nanti dalam skrip). Juga, saya tidak mengubah bagian ini, tetapi Anda tidak perlu menyimpan jumlah elemen dalam array. Alih-alih $PackageCount, Anda dapat mengakses ${#PackageList}untuk mendapatkan jumlah elemen secara langsung.
piojo