@@ -72,7 +72,7 @@ discoverNixFiles yield dirOrFile = do
7272 (False,_) -> io (readDirectory dirOrFile) >>= mapM_ (discoverNixFiles yield . (dirOrFile </>))
7373
7474regenerateDerivation :: Derivation -> String -> Bool
75−regenerateDerivation _ buf = not (buf =~ "(pre|post)Configure|(pre|post)Install|patchPhase|patches")
75+regenerateDerivation _ buf = not (buf =~ "(pre|post)Configure|(pre|post)Install|patchPhase|patches|broken")
7676
7777parseNixFile :: FilePath -> String -> Hackage4Nix (Maybe Pkg)
7878parseNixFile path buf
@@ -103,36 +103,53 @@ discoverUpdates name vers = do
103103
104104updateNixPkgs :: [FilePath] -> Hackage4Nix ()
105105updateNixPkgs paths = do
106− msgDebug $ "updating = " ++ show paths
107− forM_ paths $ \fileOrDir ->
106+ -- Traverse the given directorcy structure and discover all available
107+ -- Haskell packages.
108+ forM_ paths $ \fileOrDir -> do
109+ msgDebug $ "scanning " ++ show fileOrDir
108110 flip discoverNixFiles fileOrDir $ \file -> do
109111 nix' <- io (readFile file) >>= parseNixFile file
110− flip (maybe (return ())) nix' $ \nix -> do
111− let Pkg deriv path regenerate = nix
112− maints = maintainers (metaSection deriv)
113− plats = platforms (metaSection deriv)
114− hplats = hydraPlatforms (metaSection deriv)
112+ flip (maybe (return ())) nix' $ \nix ->
115113 modify (Set.insert nix)
116− when regenerate $ do
117− msgDebug ("re-generate " ++ path)
118− pkg <- getCabalPackage (pname deriv) (version deriv)
119− let deriv' = (cabal2nix pkg) { src = src deriv
120− , runHaddock = runHaddock deriv
121− , doCheck = doCheck deriv
122− , jailbreak = jailbreak deriv
123− , hyperlinkSource = hyperlinkSource deriv
124− }
125− meta = metaSection deriv'
126− plats' = if null plats then platforms meta else plats
127− deriv'' = deriv' { metaSection = meta
128− { maintainers = maints -- ++ ["andres","simons"]
129− , platforms = plats'
130− , hydraPlatforms = hplats
131− }
132− }
133− io $ writeFile path (show (disp (normalize deriv'')))
134− pkgset <- gets selectLatestVersions
135− updates' <- forM (Set.elems pkgset) $ \pkg -> do
114+
115+ -- Re-generate all Haskell packages in-place (unless
116+ -- 'regenerateDerivation' decided that this particular package
117+ -- shouldn't be touched.
118+ latestVersions <- gets selectLatestVersions
119+ let latestVersionMap :: [(String,Version)]
120+ latestVersionMap = [ (pname deriv, version deriv) | Pkg deriv _ _ <- Set.toList latestVersions ]
121+ let isLatest :: Derivation -> Bool
122+ isLatest deriv = maybe False (version deriv ==) (lookup (pname deriv) latestVersionMap)
123+ get >>= \pkgset -> forM_ (Set.toList pkgset) $ \nix -> do
124+ let Pkg deriv path regenerate = nix
125+ maints = maintainers (metaSection deriv)
126+ plats = platforms (metaSection deriv)
127+ hplats = if isLatest deriv then hydraPlatforms (metaSection deriv) else ["self.stdenv.lib.platforms.none"]
128+
129+ when regenerate $ do
130+ msgDebug ("re-generate " ++ path)
131+ pkg <- getCabalPackage (pname deriv) (version deriv)
132+ let deriv' = (cabal2nix pkg) { src = src deriv
133+ , runHaddock = runHaddock deriv
134+ , doCheck = doCheck deriv
135+ , jailbreak = jailbreak deriv
136+ , hyperlinkSource = hyperlinkSource deriv
137+ , enableSplitObjs = enableSplitObjs deriv
138+ }
139+ meta = metaSection deriv'
140+ plats' = if null plats then platforms meta else plats
141+ deriv'' = deriv' { metaSection = meta
142+ { maintainers = maints
143+ , platforms = plats'
144+ , hydraPlatforms = hplats
145+ }
146+ }
147+ io $ writeFile path (show (disp (normalize deriv'')))
148+
149+ -- Discover available updates and print the appropriate cabal2nix
150+ -- command line to the console for the user to execute at his/her
151+ -- discretion.
152+ updates' <- forM (Set.elems latestVersions) $ \pkg -> do
136153 let Pkg deriv _ _ = pkg
137154 updates <- discoverUpdates (pname deriv) (version deriv)
138155 return (pkg,updates)
@@ -233,8 +250,7 @@ badPackagePaths = [ -- These expression are not found on Hackage:
233250 -- Requires platform-specific magic that I don't want to add to cabal2nix.
234251 , "pkgs/development/libraries/haskell/fsnotify/default.nix"
235252 -- Not registered on Hackage.
236− , "pkgs/development/compilers/agda/stdlib-0.7.nix"
237− , "pkgs/development/compilers/agda/stdlib-0.8.nix"
253+ , "pkgs/development/compilers/agda/stdlib.nix"
238254 , "pkgs/development/compilers/cryptol/1.8.x.nix"
239255 , "pkgs/development/compilers/cryptol/2.0.x.nix"
240256 , "pkgs/development/compilers/jhc/default.nix"