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:
Profpatsch 2023-04-08 14:18:09 +02:00 committed by clbot
parent 0d4ca2c31b
commit 34d89cd6a8
2 changed files with 0 additions and 228 deletions

View file

@ -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 }

View file

@ -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, lets 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 dont want in tvl for now
# uncomment manually if you want to use it.
# meta-stdenv-lib
# replace-stdenv-lib
;
}