chore(users/Profpatsch): delete nixpkgs-rewriter
Change-Id: I0e8a1f4e6e23cbeead46ea60129cad66d3ffe844 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8467 Tested-by: BuildkiteCI Autosubmit: Profpatsch <mail@profpatsch.de> Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
0d4ca2c31b
commit
34d89cd6a8
2 changed files with 0 additions and 228 deletions
|
@ -1,80 +0,0 @@
|
||||||
{-# LANGUAGE PartialTypeSignatures #-}
|
|
||||||
{-# LANGUAGE LambdaCase #-}
|
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
|
||||||
{-# LANGUAGE NamedFieldPuns #-}
|
|
||||||
import Nix.Parser
|
|
||||||
import Nix.Expr.Types
|
|
||||||
import Nix.Expr.Types.Annotated
|
|
||||||
import System.Environment (getArgs)
|
|
||||||
import System.Exit (die)
|
|
||||||
import Data.Fix (Fix(..))
|
|
||||||
import qualified Data.Text as Text
|
|
||||||
import qualified Data.ByteString.Lazy.Char8 as BL
|
|
||||||
import qualified Data.Aeson as A
|
|
||||||
import qualified Data.Aeson.Encoding as A
|
|
||||||
import Data.Function ((&))
|
|
||||||
import qualified System.IO as IO
|
|
||||||
import qualified Text.Megaparsec.Pos as MP
|
|
||||||
|
|
||||||
main = do
|
|
||||||
(nixFile:_) <- getArgs
|
|
||||||
(parseNixFileLoc nixFile :: IO _) >>= \case
|
|
||||||
Failure err -> do
|
|
||||||
ePutStrLn $ show err
|
|
||||||
die "oh no"
|
|
||||||
Success expr -> do
|
|
||||||
case snd $ match expr of
|
|
||||||
NoArguments -> do
|
|
||||||
ePutStrLn $ "NoArguments in " <> nixFile
|
|
||||||
printPairs mempty
|
|
||||||
YesLib vars -> do
|
|
||||||
ePutStrLn $ "lib in " <> show vars <> " in " <> nixFile
|
|
||||||
printPairs mempty
|
|
||||||
NoLib vars srcSpan -> do
|
|
||||||
ePutStrLn $ nixFile <> " needs lib added"
|
|
||||||
printPairs
|
|
||||||
$ "fileName" A..= nixFile
|
|
||||||
<> "fromLine" A..= (srcSpan & spanBegin & sourceLine)
|
|
||||||
<> "fromColumn" A..= (srcSpan & spanBegin & sourceColumn)
|
|
||||||
<> "toLine" A..= (srcSpan & spanEnd & sourceLine)
|
|
||||||
<> "toColumn" A..= (srcSpan & spanEnd & sourceColumn)
|
|
||||||
|
|
||||||
printPairs pairs = BL.putStrLn $ A.encodingToLazyByteString $ A.pairs pairs
|
|
||||||
|
|
||||||
ePutStrLn = IO.hPutStrLn IO.stderr
|
|
||||||
|
|
||||||
data Descend = YesDesc | NoDesc
|
|
||||||
deriving Show
|
|
||||||
data Matched = NoArguments | NoLib [VarName] SrcSpan | YesLib [VarName]
|
|
||||||
deriving Show
|
|
||||||
|
|
||||||
match :: Fix (Compose (Ann SrcSpan) NExprF) -> (Descend, Matched)
|
|
||||||
match = \case
|
|
||||||
(AnnE outerSpan (NAbs (ParamSet params _ _) (AnnE innerSpan _))) -> (NoDesc,
|
|
||||||
let vars = map fst params in
|
|
||||||
case (any (== "lib") vars) of
|
|
||||||
True -> YesLib vars
|
|
||||||
False ->
|
|
||||||
-- The span of the arglist is from the beginning of the match
|
|
||||||
-- to the beginning of the inner expression
|
|
||||||
let varSpan = SrcSpan
|
|
||||||
{ spanBegin = outerSpan & spanBegin
|
|
||||||
-- -1 to prevent the spans from overlapping
|
|
||||||
, spanEnd = sourcePosMinus1 (innerSpan & spanBegin) }
|
|
||||||
in NoLib vars varSpan)
|
|
||||||
_ -> (NoDesc, NoArguments)
|
|
||||||
|
|
||||||
-- | Remove one from a source positon.
|
|
||||||
--
|
|
||||||
-- That means if the current position is at the very beginning of a line,
|
|
||||||
-- jump to the previous line.
|
|
||||||
sourcePosMinus1 :: SourcePos -> SourcePos
|
|
||||||
sourcePosMinus1 src@(SourcePos { sourceLine, sourceColumn }) =
|
|
||||||
let
|
|
||||||
col = MP.mkPos $ max (MP.unPos sourceColumn - 1) 1
|
|
||||||
line = MP.mkPos $ case MP.unPos sourceColumn of
|
|
||||||
1 -> max (MP.unPos sourceLine - 1) 1
|
|
||||||
_ -> MP.unPos sourceLine
|
|
||||||
in src
|
|
||||||
{ sourceLine = line
|
|
||||||
, sourceColumn = col }
|
|
|
@ -1,148 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
let
|
|
||||||
inherit (depot.nix)
|
|
||||||
writeExecline
|
|
||||||
;
|
|
||||||
inherit (depot.users.Profpatsch.lib)
|
|
||||||
debugExec
|
|
||||||
;
|
|
||||||
|
|
||||||
bins = depot.nix.getBins pkgs.coreutils [ "head" "shuf" ]
|
|
||||||
// depot.nix.getBins pkgs.jq [ "jq" ]
|
|
||||||
// depot.nix.getBins pkgs.findutils [ "xargs" ]
|
|
||||||
// depot.nix.getBins pkgs.gnused [ "sed" ]
|
|
||||||
;
|
|
||||||
|
|
||||||
export-json-object = pkgs.writers.writePython3 "export-json-object" { } ''
|
|
||||||
import json
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
d = json.load(sys.stdin)
|
|
||||||
|
|
||||||
if d == {}:
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
for k, v in d.items():
|
|
||||||
os.environ[k] = str(v)
|
|
||||||
|
|
||||||
os.execvp(sys.argv[1], sys.argv[1:])
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta-stdenv-lib = pkgs.writers.writeHaskell "meta-stdenv-lib"
|
|
||||||
{
|
|
||||||
libraries = [
|
|
||||||
pkgs.haskellPackages.hnix
|
|
||||||
pkgs.haskellPackages.aeson
|
|
||||||
];
|
|
||||||
} ./MetaStdenvLib.hs;
|
|
||||||
|
|
||||||
replace-between-lines = writeExecline "replace-between-lines" { readNArgs = 1; } [
|
|
||||||
"importas"
|
|
||||||
"-ui"
|
|
||||||
"file"
|
|
||||||
"fileName"
|
|
||||||
"importas"
|
|
||||||
"-ui"
|
|
||||||
"from"
|
|
||||||
"fromLine"
|
|
||||||
"importas"
|
|
||||||
"-ui"
|
|
||||||
"to"
|
|
||||||
"toLine"
|
|
||||||
"if"
|
|
||||||
[ depot.tools.eprintf "%s-%s\n" "$from" "$to" ]
|
|
||||||
(debugExec "adding lib")
|
|
||||||
bins.sed
|
|
||||||
"-e"
|
|
||||||
"\${from},\${to} \${1}"
|
|
||||||
"-i"
|
|
||||||
"$file"
|
|
||||||
];
|
|
||||||
|
|
||||||
add-lib-if-necessary = writeExecline "add-lib-if-necessary" { readNArgs = 1; } [
|
|
||||||
"pipeline"
|
|
||||||
[ meta-stdenv-lib "$1" ]
|
|
||||||
export-json-object
|
|
||||||
# first replace any stdenv.lib mentions in the arg header
|
|
||||||
# if this is not done, the replace below kills these.
|
|
||||||
# Since we want it anyway ultimately, let’s do it here.
|
|
||||||
"if"
|
|
||||||
[ replace-between-lines "s/stdenv\.lib/lib/" ]
|
|
||||||
# then add the lib argument
|
|
||||||
# (has to be before stdenv, otherwise default arguments might be in the way)
|
|
||||||
replace-between-lines
|
|
||||||
"s/stdenv/lib, stdenv/"
|
|
||||||
];
|
|
||||||
|
|
||||||
metaString = ''meta = with stdenv.lib; {'';
|
|
||||||
|
|
||||||
replace-stdenv-lib = pkgs.writers.writeBash "replace-stdenv-lib" ''
|
|
||||||
set -euo pipefail
|
|
||||||
sourceDir="$1"
|
|
||||||
for file in $(
|
|
||||||
${pkgs.ripgrep}/bin/rg \
|
|
||||||
--files-with-matches \
|
|
||||||
--fixed-strings \
|
|
||||||
-e '${metaString}' \
|
|
||||||
"$sourceDir"
|
|
||||||
)
|
|
||||||
do
|
|
||||||
echo "replacing stdenv.lib meta in $file" >&2
|
|
||||||
${bins.sed} -e '/${metaString}/ s/stdenv.lib/lib/' \
|
|
||||||
-i "$file"
|
|
||||||
${add-lib-if-necessary} "$file"
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
instantiate-nixpkgs-randomly = writeExecline "instantiate-nixpkgs-randomly" { readNArgs = 1; } [
|
|
||||||
"export"
|
|
||||||
"NIXPKGS_ALLOW_BROKEN"
|
|
||||||
"1"
|
|
||||||
"export"
|
|
||||||
"NIXPKGS_ALLOW_UNFREE"
|
|
||||||
"1"
|
|
||||||
"export"
|
|
||||||
"NIXPKGS_ALLOW_INSECURE"
|
|
||||||
"1"
|
|
||||||
"export"
|
|
||||||
"NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM"
|
|
||||||
"1"
|
|
||||||
"pipeline"
|
|
||||||
[
|
|
||||||
"nix"
|
|
||||||
"eval"
|
|
||||||
"--raw"
|
|
||||||
''(
|
|
||||||
let pkgs = import ''${1} {};
|
|
||||||
in builtins.toJSON (builtins.attrNames pkgs)
|
|
||||||
)''
|
|
||||||
]
|
|
||||||
"pipeline"
|
|
||||||
[ bins.jq "-r" ".[]" ]
|
|
||||||
"pipeline"
|
|
||||||
[ bins.shuf ]
|
|
||||||
"pipeline"
|
|
||||||
[ bins.head "-n" "1000" ]
|
|
||||||
bins.xargs
|
|
||||||
"-I"
|
|
||||||
"{}"
|
|
||||||
"-n1"
|
|
||||||
"if"
|
|
||||||
[ depot.tools.eprintf "instantiating %s\n" "{}" ]
|
|
||||||
"nix-instantiate"
|
|
||||||
"$1"
|
|
||||||
"-A"
|
|
||||||
"{}"
|
|
||||||
];
|
|
||||||
|
|
||||||
in
|
|
||||||
depot.nix.readTree.drvTargets {
|
|
||||||
inherit
|
|
||||||
instantiate-nixpkgs-randomly
|
|
||||||
# requires hnix, which we don’t want in tvl for now
|
|
||||||
# uncomment manually if you want to use it.
|
|
||||||
# meta-stdenv-lib
|
|
||||||
# replace-stdenv-lib
|
|
||||||
;
|
|
||||||
}
|
|
Loading…
Reference in a new issue