Remove common prefix from output
import Data.Aeson qualified as Aeson
import Data.Aeson (ToJSON(..), FromJSON(..), Value(..), (.:), (.=), object)
import Data.Aeson.Types (prependFailure, typeMismatch)
+import Data.List (stripPrefix)
+import Data.Maybe (catMaybes, fromMaybe)
import Data.Set (Set)
import Data.Set qualified as Set
import Data.Text (Text)
import GHC.Base (quotInt)
-import Relude (catMaybes, foldMapM, sortWith, mapAccumL)
+import Relude (foldMapM, sortWith, mapAccumL)
import System.Directory (doesDirectoryExist, listDirectory, pathIsSymbolicLink)
import System.IO (stderr, hPutStrLn)
import System.Posix.Files qualified as Posix
import System.ProgressBar qualified as ProgressBar
import Text.Printf (printf)
+rootsBase :: FilePath
+rootsBase = "/nix/var/nix/gcroots"
+
main :: IO ()
main = do
- gcrootPaths <- findRoots "/nix/var/nix/gcroots"
+ gcrootPaths <- findRoots rootsBase
hPutStrLn stderr "Scanning gcroots..."
pb <- hNewProgressBar stderr ProgressBar.defStyle 10 (ProgressBar.Progress 0 (length gcrootPaths) ())
gcroots <- catMaybes <$> mapM (collectAndLog pb) gcrootPaths
Left err ->
throwIO $ PathInfoException err
Right pathInfos ->
- return $ Just $ Gcroot gcroot pathInfos
+ return $ Just $ Gcroot (fromMaybe gcroot $ stripPrefix (rootsBase <> "/") gcroot) pathInfos
data PathInfoException =
PathInfoException String