Skip to content

Instantly share code, notes, and snippets.

@jsoffer
Created April 14, 2010 17:05
Show Gist options
  • Save jsoffer/366062 to your computer and use it in GitHub Desktop.
Save jsoffer/366062 to your computer and use it in GitHub Desktop.
paquetes :: IO [String]
paquetes = readFile "packages.log" >>= (\k -> return $ lines k) >>= (\k -> return $ map (takeWhile (/= ' ')) k)
flechas :: IO [String]
flechas = readFile "portgraph.dot" >>= (\k -> return $ lines k) >>= (\k -> return $ init $ tail k)
-- "foo-1.2.3" -> "bar-baz-2.0.0"
-- se convierte en (foo, bar-baz)
-- se considera que no hay paquetes con subcadena "-<num>" en el nombre
flecha_a_par :: String -> (String, String)
flecha_a_par xs = (quita_version a, quita_version b) where
izq = takeWhile (/= '>') xs
der = dropWhile (/= '>') xs
a = takeWhile (/= '"') $ tail $ dropWhile (/= '"') izq
b = takeWhile (/= '"') $ tail $ dropWhile (/= '"') der
quita_version (x:'-':num:xs)
| elem num ['0'..'9'] = [x]
| otherwise = x:'-': num : quita_version xs
quita_version (x:xs) = x : quita_version xs
encadenar = do
p <- paquetes
f <- flechas
let pares = map flecha_a_par f
let filtrado = filter (\(a,b) -> elem a p && elem b p) pares
let res = map (\(a,b) -> show a ++ " -> " ++ show b) filtrado
return $ unlines res
-- encadenar >>= (\k -> writeFile "dependencias.dot" k)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment