Come trovare a livello di programmazione l'ultimo numero di versione di Homebrew?

3

Come trovare a livello di programmazione l'ultimo numero di versione di Homebrew?

Posso trovarlo sul mio computer locale con brew --version e stringa elaborare il risultato per ottenere un numero di versione. Qual è un buon modo per ottenerlo per l'Homebrew rilasciato? Mi piacerebbe verificare a livello di codice che l'homebrew sia aggiornato per molti computer.

    
posta qazwsx 27.03.2017 - 19:48
fonte

1 risposta

2

Personalmente non uso Homebrew, quindi se c'è un modo usando brew per ottenere l'ultimo numero di versione disponibile online, non lo so.

Da notare che dal 27 giugno 2012 e dalla versione 0.9.1 di Homebrew, la numerazione delle versioni ha mantenuto un modello tipico impostato di major.minor.maintenance , utilizzando solo numeri separati da un punto. Quindi è relativamente facile verificare che i valori restituiti dalle sostituzioni di comando utilizzate per assegnarli sia alla versione installata che all'ultima versione variabili seguano questo modello.

Una volta testato, le stringhe della versione vengono convertite in numeri, in modo che un confronto binario possa determinare se la versione installata è inferiore all'ultima versione, a quel punto si può prendere l'azione appropriata.

Il seguente bash script è un esempio di come si può codificarlo :

#!/bin/bash

    # Get installed version number and latest release version number.

localHomebrewVersion="$(brew --version | awk '/Homebrew [0-9]/{print $2}')"
latestHomebrewRelease="$(curl -sL https://api.github.com/repos/Homebrew/brew/releases/latest | ruby -rjson -e 'puts JSON.parse($<.read)["name"]')"

    # Test that both variables hold the expected pattern.

if [[ $localHomebrewVersion =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]] && [[ $latestHomebrewRelease =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]]; then

        # Function used to convert string version numbers to numeric values for testing.

    function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d", $1,$2,$3,$4); }'; }

        # Test to see if the installed version number is less than the latest release version.

    if [[ $(version $localHomebrewVersion) -lt $(version $latestHomebrewRelease) ]]; then
        brew update
    else
        echo "Homebrew is already up-to-date."
    fi

else
        # One or both of the command substitutions '$(...)' returned unexpected output for the version variables.

    echo "At least one of the version variables contains an unexpected value."
fi

Nota: ho incorporato il comando suggerito nel commento di Synoli per assegnare alla variabile latestHomebrewRelease , in quanto sembra certamente un metodo più stabile da ottenere le ultime informazioni sulla versione.

Aggiornamento: aggiunto un test per vedere le variabili di versione contengono lo schema previsto prima di testare se la versione installata è inferiore all'ultima versione.

    
risposta data 28.03.2017 - 03:19
fonte

Leggi altre domande sui tag