Gereksiz bağımlılıkları Cygwin'den kaldırın


15

Cygwin'de yeni bir paket yüklediğimde, bu paket için gereken bağımlılıkları otomatik olarak yükler.

Daha sonra bu paketi kaldırmayı seçersem, onunla birlikte yüklenen ve artık gerekli olmayan bağımlılıkları nasıl kaldırabilirim?

Yanıtlar:


8

İşte benim şimdiki çözümüm. (Çok) sınırlı bash ve Google bilgimi kullanıyorum.

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

Herkes daha iyi bir çözüm ya da benim senaryo geliştirmek için herhangi bir ipucu olup olmadığını görmek isterim.


Hala sitede olup olmadığınızı bilmiyorum, ancak bir N=$N+1hatayı düzeltmek için komut dosyanızı düzenledim - bash'da, bu aslında matematik yerine bir dize oluşturacak. İfadeyi (( ))çevrelemek, bash'de gerçek matematik yapmanıza izin verir (komut dosyasında daha sonra keşfetmiş olmanız gerektiği gibi). Ayrıca, bu kısmı değiştirmedim, ancak bir dizideki elemanların sayısını tutmanıza gerek yok. Bunun yerine, elemanların sayısını doğrudan almak için $PackageCounterişebilirsiniz ${#PackageList}.
piojo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.