mirror of
https://github.com/ryantm/nixpkgs-update.git
synced 2024-12-17 08:21:44 +03:00
port fix-src-url.sh
This commit is contained in:
parent
e819684d1d
commit
9da6cfdb43
@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
||||||
|
|
||||||
GITHUB_TOKEN="$(cat "$SCRIPT_DIR"/github_token.txt)"
|
|
||||||
export GITHUB_TOKEN
|
|
||||||
|
|
||||||
# shellcheck source=setup-nixpkgs.sh
|
|
||||||
source "$SCRIPT_DIR/setup-nixpkgs.sh"
|
|
||||||
|
|
||||||
PACKAGE_NAME=$1
|
|
||||||
OLD_VERSION=$2
|
|
||||||
NEW_VERSION=$3
|
|
||||||
DERIVATION_FILE=$4
|
|
||||||
ATTR_PATH=$5
|
|
||||||
OLD_SRC_URL=$6
|
|
||||||
|
|
||||||
OLD_DERIVATION_NAME=$(nix eval -f ~/p/nixpkgs --raw "pkgs.$ATTR_PATH.name")
|
|
||||||
NEW_DERIVATION_NAME=$(sed "s|$OLD_VERSION|$NEW_VERSION|" <<< "$OLD_DERIVATION_NAME")
|
|
||||||
NAME=$(nix eval --raw "(let pkgs = import ./. {}; in (builtins.parseDrvName pkgs.$ATTR_PATH.name).name)")
|
|
||||||
|
|
||||||
if grep -q "name = \"$NEW_DERIVATION_NAME\"" "$DERIVATION_FILE"
|
|
||||||
then
|
|
||||||
# Separate name and version
|
|
||||||
sed -i "s|$NEW_DERIVATION_NAME|$NAME-\${version}|" "$DERIVATION_FILE"
|
|
||||||
grep -q "name = \"$NAME-\${version}\"" "$DERIVATION_FILE"
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
sed -i 's|^\([ ]*\)\(name = "'"$NAME"'-\${version}";\)|\1\2\n\1version = "'"$NEW_VERSION"'";|' "$DERIVATION_FILE"
|
|
||||||
grep -q "version = \"$NEW_VERSION\";" "$DERIVATION_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ESCAPED_NEW_VERSION="${NEW_VERSION//\./\\.}"
|
|
||||||
DOWNLOADS=$(curl "https://repology.org/api/v1/metapackage/$PACKAGE_NAME" | jq '.[].downloads | select(values) | .[] ')
|
|
||||||
FILTERED_DOWNLOADS=$(echo "$DOWNLOADS" | grep "$ESCAPED_NEW_VERSION" | grep -vE "${ESCAPED_NEW_VERSION}[^/]+\\.tar" | grep -vE "${ESCAPED_NEW_VERSION}[^/]+\\.zip" | sed 's|"||g')
|
|
||||||
|
|
||||||
for d in $FILTERED_DOWNLOADS
|
|
||||||
do
|
|
||||||
OLD_URL="$OLD_SRC_URL"
|
|
||||||
OLD_URL=$(sed "s|$OLD_DERIVATION_NAME|\${name}|g" <<< "$OLD_URL")
|
|
||||||
OLD_URL=$(sed "s|$OLD_VERSION|\${version}|g" <<< "$OLD_URL")
|
|
||||||
|
|
||||||
NEW_URL=$(sed "s|$NEW_DERIVATION_NAME|\${name}|g" <<< "$d" | sed "s|$NEW_VERSION|\${version}|g")
|
|
||||||
sed -i "s|$OLD_URL|$NEW_URL|" "$DERIVATION_FILE"
|
|
||||||
grep -q 'url = "'"$NEW_URL"'";' "$DERIVATION_FILE" || continue
|
|
||||||
|
|
||||||
nix-prefetch-url -A "$ATTR_PATH.src" && exit 0
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 1
|
|
53
src/Clean.hs
Normal file
53
src/Clean.hs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE ExtendedDefaultRules #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
|
||||||
|
|
||||||
|
module Clean (fixSrcUrl) where
|
||||||
|
|
||||||
|
import Control.Applicative ((<|>), some)
|
||||||
|
import Data.Function ((&))
|
||||||
|
import qualified Data.Text as T
|
||||||
|
import Control.Monad (forM_)
|
||||||
|
import Data.Maybe (isNothing)
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Utils (Version, succeded, setupNixpkgs)
|
||||||
|
import Data.Semigroup ((<>))
|
||||||
|
import Shelly
|
||||||
|
import qualified Text.Regex.Applicative as RE
|
||||||
|
import Text.Regex.Applicative (RE, (=~))
|
||||||
|
|
||||||
|
default (T.Text)
|
||||||
|
|
||||||
|
-- | Construct regex: ${version}[^/]+\.(tar|zip)
|
||||||
|
archiveRegex :: Version -> RE Char ()
|
||||||
|
archiveRegex version = (\_ _ _ _ -> ()) <$> RE.string (T.unpack version) <*> some (RE.psym (/= '/')) <*> RE.sym '.' <*> (RE.string "tar" <|> RE.string "zip")
|
||||||
|
|
||||||
|
|
||||||
|
fixSrcUrl :: Text -> Version -> Version -> Text -> Text -> Text -> Sh Text
|
||||||
|
fixSrcUrl packageName oldVersion newVersion derivationFile attrPath oldSrcUrl = do
|
||||||
|
nixpkgsPath <- setupNixpkgs
|
||||||
|
|
||||||
|
oldDerivationName <- cmd "nix" "eval" "-f" nixpkgsPath "--raw" ("pkgs." <> attrPath <> ".name")
|
||||||
|
let newDerivationName = T.replace oldVersion newVersion oldDerivationName
|
||||||
|
name <- cmd "nix" "eval" "--raw" ("(let pkgs = import ./. {}; in (builtins.parseDrvName pkgs." <> attrPath <> ".name).name)")
|
||||||
|
|
||||||
|
whenM (succeded $ cmd "grep" "-q" ("name = \"" <> newDerivationName <> "\"") derivationFile) $ do
|
||||||
|
-- Separate name and version
|
||||||
|
cmd "sed" "-i" ("s|" <> newDerivationName <> "|" <> name <> "-${version}|") derivationFile
|
||||||
|
cmd "grep" "-q" ("name = \"" <> name <> "-${version}\"") derivationFile
|
||||||
|
cmd "sed" "-i" ("s|^\\([ ]*\\)\\(name = \"" <> name <> "-${version}\";\\)|\\1\\2\n\\1version = \"" <> newVersion <> "\";|") derivationFile
|
||||||
|
cmd "grep" "-q" ("version = \"" <> newVersion <> "\";") derivationFile
|
||||||
|
|
||||||
|
downloads <- cmd "curl" ("https://repology.org/api/v1/metapackage/" <> packageName) -|- cmd "jq" ".[].downloads | select(values) | .[]"
|
||||||
|
let filteredDownloads = downloads & T.lines & filter (\url -> newVersion `T.isInfixOf` url && isNothing (T.unpack url =~ archiveRegex newVersion)) & map (T.replace "\"" "")
|
||||||
|
|
||||||
|
forM_ filteredDownloads $ \downloadUrl -> do
|
||||||
|
let oldUrl = T.replace oldVersion "${version}" (T.replace oldDerivationName "${name}" oldSrcUrl)
|
||||||
|
let newUrl = T.replace newVersion "${version}" (T.replace newDerivationName "${name}" downloadUrl)
|
||||||
|
cmd "sed" "-i" ("s|" <> oldUrl <> "|" <> newUrl <> "|") derivationFile
|
||||||
|
cmd "grep" "-q" ("url = \"" <> newUrl <> "\";") derivationFile
|
||||||
|
|
||||||
|
whenM (succeded $ cmd "grep" "-q" ("url = \"" <> newUrl <> "\";") derivationFile) $ do
|
||||||
|
whenM (succeded $ cmd "nix-prefetch-url" "-A" (attrPath <> ".src")) (exit 0)
|
||||||
|
|
||||||
|
exit 1
|
@ -9,6 +9,7 @@ import qualified Data.Text as T
|
|||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Shelly
|
import Shelly
|
||||||
|
import Clean (fixSrcUrl)
|
||||||
import Check (checkResult)
|
import Check (checkResult)
|
||||||
import Utils (Version, Options(..), ExitCode(..), canFail, orElse, setupNixpkgs, tRead, checkAttrPathVersion)
|
import Utils (Version, Options(..), ExitCode(..), canFail, orElse, setupNixpkgs, tRead, checkAttrPathVersion)
|
||||||
import Data.Semigroup ((<>))
|
import Data.Semigroup ((<>))
|
||||||
@ -53,8 +54,6 @@ isOnBlackList _ _ = return ""
|
|||||||
rawEval :: Text -> Sh Text
|
rawEval :: Text -> Sh Text
|
||||||
rawEval expr = cmd "nix" "eval" "-f" "." "--raw" expr
|
rawEval expr = cmd "nix" "eval" "-f" "." "--raw" expr
|
||||||
|
|
||||||
fixSrcUrl :: Text -> Version -> Version -> Text -> Text -> Text -> Sh Text
|
|
||||||
fixSrcUrl packageName oldVersion newVersion derivationFile attrPath oldSrcUrl = cmd "./fix-src-url.sh" packageName oldVersion newVersion derivationFile attrPath oldSrcUrl
|
|
||||||
|
|
||||||
push :: Text -> Options -> Sh ()
|
push :: Text -> Options -> Sh ()
|
||||||
push branchName options =
|
push branchName options =
|
||||||
|
Loading…
Reference in New Issue
Block a user