diff --git a/Distribution/Client/Config.hs b/Distribution/Client/Config.hs
--- a/Distribution/Client/Config.hs
+++ b/Distribution/Client/Config.hs
@@ -228,7 +228,8 @@
         globalIgnoreSandbox     = combine globalIgnoreSandbox,
         globalIgnoreExpiry      = combine globalIgnoreExpiry,
         globalHttpTransport     = combine globalHttpTransport,
-        globalNix               = combine globalNix
+        globalNix               = combine globalNix,
+        globalStoreDir          = combine globalStoreDir
         }
         where
           combine        = combine'        savedGlobalFlags
diff --git a/Distribution/Client/Configure.hs b/Distribution/Client/Configure.hs
--- a/Distribution/Client/Configure.hs
+++ b/Distribution/Client/Configure.hs
@@ -141,7 +141,7 @@
       warn verbosity $
            "solver failed to find a solution:\n"
         ++ message
-        ++ "Trying configure anyway."
+        ++ "\nTrying configure anyway."
       setupWrapper verbosity (setupScriptOptions installedPkgIndex Nothing)
         Nothing configureCommand (const configFlags) extraArgs
 
diff --git a/Distribution/Client/DistDirLayout.hs b/Distribution/Client/DistDirLayout.hs
--- a/Distribution/Client/DistDirLayout.hs
+++ b/Distribution/Client/DistDirLayout.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE RecordWildCards #-}
 
--- | 
+-- |
 --
 -- The layout of the .\/dist\/ directory where cabal keeps all of it's state
 -- and build artifacts.
@@ -18,7 +18,8 @@
 
     -- * 'CabalDirLayout'
     CabalDirLayout(..),
-    defaultCabalDirLayout,
+    mkCabalDirLayout,
+    defaultCabalDirLayout
 ) where
 
 import Data.Maybe (fromMaybe)
@@ -243,12 +244,16 @@
 
 defaultCabalDirLayout :: FilePath -> CabalDirLayout
 defaultCabalDirLayout cabalDir =
+    mkCabalDirLayout cabalDir Nothing Nothing
+
+mkCabalDirLayout :: FilePath -- ^ Cabal directory
+                 -> Maybe FilePath -- ^ Store directory
+                 -> Maybe FilePath -- ^ Log directory
+                 -> CabalDirLayout
+mkCabalDirLayout cabalDir mstoreDir mlogDir =
     CabalDirLayout {..}
   where
-
-    cabalStoreDirLayout = defaultStoreDirLayout (cabalDir </> "store")
-
-    cabalLogsDirectory = cabalDir </> "logs"
-
+    cabalStoreDirLayout =
+        defaultStoreDirLayout (fromMaybe (cabalDir </> "store") mstoreDir)
+    cabalLogsDirectory = fromMaybe (cabalDir </> "logs") mlogDir
     cabalWorldFile = cabalDir </> "world"
-
diff --git a/Distribution/Client/GlobalFlags.hs b/Distribution/Client/GlobalFlags.hs
--- a/Distribution/Client/GlobalFlags.hs
+++ b/Distribution/Client/GlobalFlags.hs
@@ -68,7 +68,8 @@
     globalIgnoreSandbox     :: Flag Bool,
     globalIgnoreExpiry      :: Flag Bool,    -- ^ Ignore security expiry dates
     globalHttpTransport     :: Flag String,
-    globalNix               :: Flag Bool  -- ^ Integrate with Nix
+    globalNix               :: Flag Bool,  -- ^ Integrate with Nix
+    globalStoreDir          :: Flag FilePath
   } deriving Generic
 
 defaultGlobalFlags :: GlobalFlags
@@ -87,7 +88,8 @@
     globalIgnoreSandbox     = Flag False,
     globalIgnoreExpiry      = Flag False,
     globalHttpTransport     = mempty,
-    globalNix               = Flag False
+    globalNix               = Flag False,
+    globalStoreDir          = mempty
   }
 
 instance Monoid GlobalFlags where
diff --git a/Distribution/Client/IndexUtils.hs b/Distribution/Client/IndexUtils.hs
--- a/Distribution/Client/IndexUtils.hs
+++ b/Distribution/Client/IndexUtils.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE GADTs #-}
 
 -----------------------------------------------------------------------------
@@ -53,7 +54,8 @@
 import Distribution.Types.Dependency
 import Distribution.Simple.PackageIndex (InstalledPackageIndex)
 import Distribution.PackageDescription
-         ( GenericPackageDescription )
+         ( GenericPackageDescription(..)
+         , PackageDescription(..), emptyPackageDescription )
 import Distribution.Simple.Compiler
          ( Compiler, PackageDBStack )
 import Distribution.Simple.Program
@@ -61,7 +63,7 @@
 import qualified Distribution.Simple.Configure as Configure
          ( getInstalledPackages, getInstalledPackagesMonitorFiles )
 import Distribution.Version
-         ( mkVersion, intersectVersionRanges )
+         ( Version, mkVersion, intersectVersionRanges, versionNumbers )
 import Distribution.Text
          ( display, simpleParse )
 import Distribution.Simple.Utils
@@ -94,6 +96,7 @@
 import qualified Data.ByteString.Lazy as BS
 import qualified Data.ByteString.Lazy.Char8 as BS.Char8
 import qualified Data.ByteString.Char8 as BSS
+import qualified Data.ByteString as BSW8
 import Data.ByteString.Lazy (ByteString)
 import Distribution.Client.GZipUtils (maybeDecompress)
 import Distribution.Client.Utils ( byteStringToFilePath
@@ -678,7 +681,7 @@
       -- Most of the time we only need the package id.
       ~(pkg, pkgtxt) <- unsafeInterleaveIO $ do
         pkgtxt <- getEntryContent blockno
-        pkg    <- readPackageDescription pkgtxt
+        pkg    <- readPackageDescription pkgid pkgtxt
         return (pkg, pkgtxt)
       case mode of
         ReadPackageIndexLazyIO -> pure ()
@@ -710,22 +713,102 @@
           -> return content
         _ -> interror "unexpected tar entry type"
 
-    readPackageDescription :: ByteString -> IO GenericPackageDescription
-    readPackageDescription content =
+    interror :: String -> IO a
+    interror msg = die' verbosity $ "internal error when reading package index: " ++ msg
+                      ++ "The package index or index cache is probably "
+                      ++ "corrupt. Running cabal update might fix it."
+
+    readPackageDescription pkgid content = do
+        case parseGenericPackageDescription' content of
+            ParseGPDOk gpd     -> return gpd
+            ParseError (Just specVer) | specVer >= mkVersion [2,0]
+                               -> return (dummyPackageDescription specVer)
+            ParseError _       -> interror "failed to parse .cabal file"
+      where
+        dummyPackageDescription :: Version -> GenericPackageDescription
+        dummyPackageDescription specVer = GenericPackageDescription
+            { packageDescription = emptyPackageDescription
+                                   { specVersionRaw = Left specVer
+                                   , package        = pkgid
+                                   , synopsis       = dummySynopsis
+                                   }
+            , genPackageFlags  = []
+            , condLibrary      = Nothing
+            , condSubLibraries = []
+            , condForeignLibs  = []
+            , condExecutables  = []
+            , condTestSuites   = []
+            , condBenchmarks   = []
+            }
+
+        dummySynopsis = "<could not be parsed due to unsupported CABAL spec-version>"
+
+-- | Result of 'parseGenericPackageDescription''
+data ParseGPDResult = ParseGPDOk GenericPackageDescription
+                      -- ^ parsing succeeded (may still have unsupported spec-version)
+                    | ParseError !(Maybe Version)
+                      -- ^ parsing failed, but we were able to recover
+                      --   a new-style spec-version declaration
+
+-- | Variant of 'parseGenericPackageDescription' which is able to
+-- extract new-style spec-version in case of parser errors
+parseGenericPackageDescription' :: ByteString -> ParseGPDResult
+parseGenericPackageDescription' content =
+    case parseGPDMaybe of
+      Just gpd -> ParseGPDOk gpd
+      Nothing  -> ParseError (scanSpecVersion content)
+  where
+    parseGPDMaybe =
 #ifdef CABAL_PARSEC
-      case parseGenericPackageDescriptionMaybe (BS.toStrict content) of
-        Just gpd -> return gpd
-        Nothing  -> interror "failed to parse .cabal file"
+      parseGenericPackageDescriptionMaybe (BS.toStrict content)
 #else
       case parseGenericPackageDescription . ignoreBOM . fromUTF8 . BS.Char8.unpack $ content of
-        ParseOk _ d -> return d
-        _           -> interror "failed to parse .cabal file"
+        ParseOk _ d -> Just d
+        _           -> Nothing
 #endif
 
-    interror :: String -> IO a
-    interror msg = die' verbosity $ "internal error when reading package index: " ++ msg
-                      ++ "The package index or index cache is probably "
-                      ++ "corrupt. Running cabal update might fix it."
+-- | Quickly scan new-style spec-version
+--
+-- A new-style spec-version declaration begins the .cabal file and
+-- follow the following case-insensitive grammar (expressed in
+-- RFC5234 ABNF):
+--
+-- newstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-pec-version *WS
+--
+-- spec-version               = NUM "." NUM [ "." NUM ]
+--
+-- NUM    = DIGIT0 / DIGITP 1*DIGIT0
+-- DIGIT0 = %x30-39
+-- DIGITP = %x31-39
+-- WS = %20
+--
+-- TODO: move into lib:Cabal
+scanSpecVersion :: ByteString -> Maybe Version
+scanSpecVersion bs = do
+    fstline':_ <- pure (BS.Char8.lines bs)
+
+    -- parse <newstyle-spec-version-decl>
+    -- normalise: remove all whitespace, convert to lower-case
+    let fstline = BSW8.map toLowerW8 $ BSW8.filter (/= 0x20) $ BS.toStrict fstline'
+    ["cabal-version",vers] <- pure (BSS.split ':' fstline)
+
+    -- parse <spec-version>
+    --
+    -- This is currently more tolerant regarding leading 0 digits.
+    --
+    ver <- simpleParse (BSS.unpack vers)
+    guard $ case versionNumbers ver of
+              [_,_]   -> True
+              [_,_,_] -> True
+              _       -> False
+
+    pure ver
+  where
+    -- | Translate ['A'..'Z'] to ['a'..'z']
+    toLowerW8 :: Word8 -> Word8
+    toLowerW8 w | 0x40 < w && w < 0x5b = w+0x20
+                | otherwise            = w
+
 
 ------------------------------------------------------------------------
 -- Index cache data structure
diff --git a/Distribution/Client/Install.hs b/Distribution/Client/Install.hs
--- a/Distribution/Client/Install.hs
+++ b/Distribution/Client/Install.hs
@@ -168,7 +168,7 @@
 import Distribution.Text
          ( display )
 import Distribution.Verbosity as Verbosity
-         ( Verbosity, normal, verbose )
+         ( Verbosity, modifyVerbosity, normal, verbose )
 import Distribution.Simple.BuildPaths ( exeExtension )
 
 --TODO:
@@ -550,8 +550,9 @@
   let breaksPkgs         = not (null newBrokenPkgs)
 
   let adaptedVerbosity
-        | containsReinstalls && not overrideReinstall = verbosity `max` verbose
-        | otherwise                                   = verbosity
+        | containsReinstalls
+        , not overrideReinstall  = modifyVerbosity (max verbose) verbosity
+        | otherwise              = verbosity
 
   -- We print the install plan if we are in a dry-run or if we are confronted
   -- with a dangerous install plan.
@@ -1149,7 +1150,7 @@
         -- If the user has specified --remote-build-reporting=detailed or
         -- --build-log, use more verbose logging.
         loggingVerbosity :: Verbosity
-        loggingVerbosity | overrideVerbosity = max Verbosity.verbose verbosity
+        loggingVerbosity | overrideVerbosity = modifyVerbosity (max verbose) verbosity
                          | otherwise         = verbosity
 
         useDefaultTemplate :: Bool
diff --git a/Distribution/Client/ProjectConfig.hs b/Distribution/Client/ProjectConfig.hs
--- a/Distribution/Client/ProjectConfig.hs
+++ b/Distribution/Client/ProjectConfig.hs
@@ -105,7 +105,7 @@
 import Distribution.Utils.NubList
          ( fromNubList )
 import Distribution.Verbosity
-         ( Verbosity, verbose )
+         ( Verbosity, modifyVerbosity, verbose )
 import Distribution.Text
 import Distribution.ParseUtils
          ( ParseResult(..), locatedErrorMsg, showPWarning )
@@ -334,7 +334,7 @@
     -- --build-log, use more verbose logging.
     --
     buildSettingLogVerbosity
-      | overrideVerbosity = max verbose verbosity
+      | overrideVerbosity = modifyVerbosity (max verbose) verbosity
       | otherwise         = verbosity
 
     overrideVerbosity
diff --git a/Distribution/Client/ProjectConfig/Legacy.hs b/Distribution/Client/ProjectConfig/Legacy.hs
--- a/Distribution/Client/ProjectConfig/Legacy.hs
+++ b/Distribution/Client/ProjectConfig/Legacy.hs
@@ -395,7 +395,8 @@
       globalLogsDir           = projectConfigLogsDir,
       globalWorldFile         = _,
       globalHttpTransport     = projectConfigHttpTransport,
-      globalIgnoreExpiry      = projectConfigIgnoreExpiry
+      globalIgnoreExpiry      = projectConfigIgnoreExpiry,
+      globalStoreDir          = projectConfigStoreDir
     } = globalFlags
 
     ConfigFlags {
@@ -475,7 +476,8 @@
       globalIgnoreSandbox     = mempty,
       globalIgnoreExpiry      = projectConfigIgnoreExpiry,
       globalHttpTransport     = projectConfigHttpTransport,
-      globalNix               = mempty
+      globalNix               = mempty,
+      globalStoreDir          = projectConfigStoreDir
     }
 
     configFlags = mempty {
@@ -800,7 +802,7 @@
       ]
   . filterFields
       [ "remote-repo-cache"
-      , "logs-dir", "ignore-expiry", "http-transport"
+      , "logs-dir", "store-dir", "ignore-expiry", "http-transport"
       ]
   . commandOptionsToFields
   ) (commandOptions (globalCommand []) ParseArgs)
@@ -809,13 +811,13 @@
       legacyConfigureShFlags
       (\flags conf -> conf { legacyConfigureShFlags = flags })
   . addFields
-      [ simpleField "allow-older"
+      [ monoidField "allow-older"
         (maybe mempty dispRelaxDeps) (fmap Just parseRelaxDeps)
         (fmap unAllowOlder . configAllowOlder)
         (\v conf -> conf { configAllowOlder = fmap AllowOlder v })
       ]
   . addFields
-      [ simpleField "allow-newer"
+      [ monoidField "allow-newer"
         (maybe mempty dispRelaxDeps) (fmap Just parseRelaxDeps)
         (fmap unAllowNewer . configAllowNewer)
         (\v conf -> conf { configAllowNewer = fmap AllowNewer v })
@@ -1255,6 +1257,15 @@
   where
     set' xs b = set (get' b ++ xs) b
     showF'    = separator . map showF
+
+-- | Parser combinator for simple fields which uses the field type's
+-- 'Monoid' instance for combining multiple occurences of the field.
+monoidField :: Monoid a => String -> (a -> Doc) -> ReadP a a
+            -> (b -> a) -> (a -> b -> b) -> FieldDescr b
+monoidField name showF readF get' set =
+  liftField get' set' $ ParseUtils.field name showF readF
+  where
+    set' xs b = set (get' b `mappend` xs) b
 
 --TODO: [code cleanup] local redefinition that should replace the version in
 -- D.ParseUtils. This version avoid parse ambiguity for list element parsers
diff --git a/Distribution/Client/ProjectConfig/Types.hs b/Distribution/Client/ProjectConfig/Types.hs
--- a/Distribution/Client/ProjectConfig/Types.hs
+++ b/Distribution/Client/ProjectConfig/Types.hs
@@ -143,7 +143,8 @@
        projectConfigHttpTransport         :: Flag String,
        projectConfigIgnoreExpiry          :: Flag Bool,
        projectConfigCacheDir              :: Flag FilePath,
-       projectConfigLogsDir               :: Flag FilePath
+       projectConfigLogsDir               :: Flag FilePath,
+       projectConfigStoreDir              :: Flag FilePath
      }
   deriving (Eq, Show, Generic)
 
diff --git a/Distribution/Client/ProjectOrchestration.hs b/Distribution/Client/ProjectOrchestration.hs
--- a/Distribution/Client/ProjectOrchestration.hs
+++ b/Distribution/Client/ProjectOrchestration.hs
@@ -164,8 +164,7 @@
     projectRoot <- either throwIO return =<<
                    findProjectRoot Nothing mprojectFile
 
-    let cabalDirLayout = defaultCabalDirLayout cabalDir
-        distDirLayout  = defaultDistDirLayout projectRoot
+    let distDirLayout  = defaultDistDirLayout projectRoot
                                               mdistDirectory
 
     (projectConfig, localPackages) <-
@@ -173,7 +172,16 @@
                            distDirLayout
                            cliConfig
 
-    let buildSettings = resolveBuildTimeSettings
+    let ProjectConfigBuildOnly {
+          projectConfigLogsDir,
+          projectConfigStoreDir
+        } = projectConfigBuildOnly projectConfig
+
+        mlogsDir = Setup.flagToMaybe projectConfigLogsDir
+        mstoreDir = Setup.flagToMaybe projectConfigStoreDir
+        cabalDirLayout = mkCabalDirLayout cabalDir mstoreDir mlogsDir
+
+        buildSettings = resolveBuildTimeSettings
                           verbosity cabalDirLayout
                           projectConfig
 
diff --git a/Distribution/Client/Setup.hs b/Distribution/Client/Setup.hs
--- a/Distribution/Client/Setup.hs
+++ b/Distribution/Client/Setup.hs
@@ -366,6 +366,11 @@
          "The location of the world file"
          globalWorldFile (\v flags -> flags { globalWorldFile = v })
          (reqArgFlag "FILE")
+
+      ,option [] ["store-dir"]
+         "The location of the nix-local-build store"
+         globalStoreDir (\v flags -> flags { globalStoreDir = v })
+         (reqArgFlag "DIR")
       ]
 
 -- ------------------------------------------------------------
diff --git a/Distribution/Client/SetupWrapper.hs b/Distribution/Client/SetupWrapper.hs
--- a/Distribution/Client/SetupWrapper.hs
+++ b/Distribution/Client/SetupWrapper.hs
@@ -708,6 +708,9 @@
   installedCabalVersion :: SetupScriptOptions -> Compiler -> ProgramDb
                         -> IO (Version, Maybe InstalledPackageId
                               ,SetupScriptOptions)
+  installedCabalVersion options' _ _ | packageName pkg == mkPackageName "Cabal"
+                                       && bt == Custom =
+    return (packageVersion pkg, Nothing, options')
   installedCabalVersion options' compiler progdb = do
     index <- maybeGetInstalledPackages options' compiler progdb
     let cabalDep   = Dependency (mkPackageName "Cabal") (useCabalVersion options')
diff --git a/Distribution/Client/Upload.hs b/Distribution/Client/Upload.hs
--- a/Distribution/Client/Upload.hs
+++ b/Distribution/Client/Upload.hs
@@ -102,6 +102,15 @@
               , "/docs"
               ]
         }
+        packageUri = targetRepoURI {
+            uriPath = rootIfEmpty (uriPath targetRepoURI)
+                      FilePath.Posix.</> concat
+              [ "package/", pkgid
+              , case isCandidate of
+                  IsCandidate -> "/candidate"
+                  IsPublished -> ""
+              ]
+        }
         (reverseSuffix, reversePkgid) = break (== '-')
                                         (reverse (takeFileName path))
         pkgid = reverse $ tail reversePkgid
@@ -122,13 +131,23 @@
       -- Hackage responds with 204 No Content when docs are uploaded
       -- successfully.
       (code,_) | code `elem` [200,204] -> do
-        notice verbosity "Ok"
+        notice verbosity $ okMessage packageUri
       (code,err)  -> do
         notice verbosity $ "Error uploading documentation "
                         ++ path ++ ": "
                         ++ "http code " ++ show code ++ "\n"
                         ++ err
         exitFailure
+  where
+    okMessage packageUri = case isCandidate of
+      IsCandidate ->
+        "Documentation successfully uploaded for package candidate. "
+        ++ "You can now preview the result at '" ++ show packageUri
+        ++ "'. To upload non-candidate documentation, use 'cabal upload --publish'."
+      IsPublished ->
+        "Package documentation successfully published. You can now view it at '"
+        ++ show packageUri ++ "'."
+
 
 promptUsername :: IO Username
 promptUsername = do
diff --git a/Distribution/Solver/Modular/IndexConversion.hs b/Distribution/Solver/Modular/IndexConversion.hs
--- a/Distribution/Solver/Modular/IndexConversion.hs
+++ b/Distribution/Solver/Modular/IndexConversion.hs
@@ -13,6 +13,7 @@
 import Distribution.InstalledPackageInfo as IPI
 import Distribution.Package                          -- from Cabal
 import Distribution.Simple.BuildToolDepends          -- from Cabal
+import Distribution.Simple.Utils (cabalVersion)      -- from Cabal
 import Distribution.Types.ExeDependency              -- from Cabal
 import Distribution.Types.PkgconfigDependency        -- from Cabal
 import Distribution.Types.ComponentName              -- from Cabal
@@ -186,8 +187,36 @@
             (L.map  (\(nm, ds) -> conv (ComponentBench nm) benchmarkBuildInfo ds) benchs)
        ++ maybe []    (convSetupBuildInfo pi)    (setupBuildInfo pkg)
 
+    -- | We infer the maximally supported spec-version from @lib:Cabal@'s version
+    --
+    -- As we cannot predict the future, we can only properly support
+    -- spec-versions predating (and including) the @lib:Cabal@ version
+    -- used by @cabal-install@.
+    --
+    -- This relies on 'cabalVersion' having always at least 3 components to avoid
+    -- comparisons like @2.0.0 > 2.0@ which would result in confusing results.
+    --
+    -- NOTE: Before we can switch to a /normalised/ spec-version
+    -- comparison (e.g. by truncating to 3 components, and removing
+    -- trailing zeroes) we'd have to make sure all other places where
+    -- the spec-version is compared against a bound do it
+    -- consistently.
+    maxSpecVer = cabalVersion
+
+    -- | Required/declared spec-version of the package
+    --
+    -- We don't truncate patch-levels, as specifying a patch-level
+    -- spec-version is discouraged and not supported anymore starting
+    -- with spec-version 2.2.
+    reqSpecVer = specVersion pkg
+
+    -- | A too-new specVersion is turned into a global 'FailReason'
+    -- which prevents the solver from selecting this release (and if
+    -- forced to, emit a meaningful solver error message).
+    fr | reqSpecVer > maxSpecVer = Just (UnsupportedSpecVer reqSpecVer)
+       | otherwise               = Nothing
   in
-    PInfo flagged_deps fds Nothing
+    PInfo flagged_deps fds fr
 
 -- | Create a flagged dependency tree from a list @fds@ of flagged
 -- dependencies, using @f@ to form the tree node (@f@ will be
diff --git a/Distribution/Solver/Modular/Message.hs b/Distribution/Solver/Modular/Message.hs
--- a/Distribution/Solver/Modular/Message.hs
+++ b/Distribution/Solver/Modular/Message.hs
@@ -144,6 +144,7 @@
 showFR _ MultipleInstances                = " (multiple instances)"
 showFR c (DependenciesNotLinked msg)      = " (dependencies not linked: " ++ msg ++ "; conflict set: " ++ showConflictSet c ++ ")"
 showFR c CyclicDependencies               = " (cyclic dependencies; conflict set: " ++ showConflictSet c ++ ")"
+showFR _ (UnsupportedSpecVer ver)         = " (unsupported spec-version " ++ display ver ++ ")"
 -- The following are internal failures. They should not occur. In the
 -- interest of not crashing unnecessarily, we still just print an error
 -- message though.
diff --git a/Distribution/Solver/Modular/Tree.hs b/Distribution/Solver/Modular/Tree.hs
--- a/Distribution/Solver/Modular/Tree.hs
+++ b/Distribution/Solver/Modular/Tree.hs
@@ -111,6 +111,7 @@
                 | MultipleInstances
                 | DependenciesNotLinked String
                 | CyclicDependencies
+                | UnsupportedSpecVer Ver
   deriving (Eq, Show)
 
 -- | Functor for the tree type. 'a' is the type of nodes' children. 'd' and 'c'
diff --git a/bootstrap.sh b/bootstrap.sh
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -233,7 +233,7 @@
                        # >= 2.0 && < 2.7
 NETWORK_URI_VER="2.6.1.0"; NETWORK_URI_VER_REGEXP="2\.6\."
                        # >= 2.6 && < 2.7
-CABAL_VER="2.0.0.2";  CABAL_VER_REGEXP="2\.0\.[0-9]"
+CABAL_VER="2.0.1.0";  CABAL_VER_REGEXP="2\.0\.[0-9]"
                        # >= 2.0 && < 2.1
 TRANS_VER="0.5.4.0";   TRANS_VER_REGEXP="0\.[45]\."
                        # >= 0.2.* && < 0.6
diff --git a/cabal-install.cabal b/cabal-install.cabal
--- a/cabal-install.cabal
+++ b/cabal-install.cabal
@@ -1,5 +1,5 @@
 Name:               cabal-install
-Version:            2.0.0.0
+Version:            2.0.0.1
 Synopsis:           The command-line interface for Cabal and Hackage.
 Description:
     The \'cabal\' command-line program simplifies the process of managing
@@ -410,8 +410,8 @@
         random,
         tagged,
         tar,
-        tasty,
-        tasty-hunit,
+        tasty >= 0.12,
+        tasty-hunit >= 0.10,
         tasty-quickcheck,
         time,
         zlib
@@ -425,7 +425,107 @@
   hs-source-dirs: tests, .
   ghc-options: -Wall -fwarn-tabs -main-is UnitTests
   other-modules:
+    Distribution.Client.BuildReports.Anonymous
+    Distribution.Client.BuildReports.Storage
+    Distribution.Client.BuildReports.Types
+    Distribution.Client.Compat.ExecutablePath
     Distribution.Client.Compat.FileLock
+    Distribution.Client.Compat.FilePerms
+    Distribution.Client.Compat.Prelude
+    Distribution.Client.Compat.Semaphore
+    Distribution.Client.Config
+    Distribution.Client.Configure
+    Distribution.Client.Dependency
+    Distribution.Client.Dependency.Types
+    Distribution.Client.DistDirLayout
+    Distribution.Client.FetchUtils
+    Distribution.Client.FileMonitor
+    Distribution.Client.GZipUtils
+    Distribution.Client.Glob
+    Distribution.Client.GlobalFlags
+    Distribution.Client.Haddock
+    Distribution.Client.HttpUtils
+    Distribution.Client.IndexUtils
+    Distribution.Client.IndexUtils.Timestamp
+    Distribution.Client.Init.Types
+    Distribution.Client.Install
+    Distribution.Client.InstallPlan
+    Distribution.Client.InstallSymlink
+    Distribution.Client.JobControl
+    Distribution.Client.PackageUtils
+    Distribution.Client.ParseUtils
+    Distribution.Client.ProjectConfig
+    Distribution.Client.ProjectConfig.Legacy
+    Distribution.Client.ProjectConfig.Types
+    Distribution.Client.RebuildMonad
+    Distribution.Client.Sandbox
+    Distribution.Client.Sandbox.Index
+    Distribution.Client.Sandbox.PackageEnvironment
+    Distribution.Client.Sandbox.Timestamp
+    Distribution.Client.Sandbox.Types
+    Distribution.Client.SavedFlags
+    Distribution.Client.Security.DNS
+    Distribution.Client.Security.HTTP
+    Distribution.Client.Setup
+    Distribution.Client.SetupWrapper
+    Distribution.Client.SolverInstallPlan
+    Distribution.Client.SrcDist
+    Distribution.Client.Store
+    Distribution.Client.Tar
+    Distribution.Client.Targets
+    Distribution.Client.Types
+    Distribution.Client.Utils
+    Distribution.Client.Utils.Assertion
+    Distribution.Client.Win32SelfUpgrade
+    Distribution.Client.World
+    Distribution.Solver.Modular
+    Distribution.Solver.Modular.Assignment
+    Distribution.Solver.Modular.Builder
+    Distribution.Solver.Modular.Configured
+    Distribution.Solver.Modular.ConfiguredConversion
+    Distribution.Solver.Modular.ConflictSet
+    Distribution.Solver.Modular.Cycles
+    Distribution.Solver.Modular.Dependency
+    Distribution.Solver.Modular.Explore
+    Distribution.Solver.Modular.Flag
+    Distribution.Solver.Modular.Index
+    Distribution.Solver.Modular.IndexConversion
+    Distribution.Solver.Modular.LabeledGraph
+    Distribution.Solver.Modular.Linking
+    Distribution.Solver.Modular.Log
+    Distribution.Solver.Modular.Message
+    Distribution.Solver.Modular.PSQ
+    Distribution.Solver.Modular.Package
+    Distribution.Solver.Modular.Preference
+    Distribution.Solver.Modular.RetryLog
+    Distribution.Solver.Modular.Solver
+    Distribution.Solver.Modular.Tree
+    Distribution.Solver.Modular.Validate
+    Distribution.Solver.Modular.Var
+    Distribution.Solver.Modular.Version
+    Distribution.Solver.Modular.WeightedPSQ
+    Distribution.Solver.Types.ComponentDeps
+    Distribution.Solver.Types.ConstraintSource
+    Distribution.Solver.Types.DependencyResolver
+    Distribution.Solver.Types.Flag
+    Distribution.Solver.Types.InstSolverPackage
+    Distribution.Solver.Types.InstalledPreference
+    Distribution.Solver.Types.LabeledPackageConstraint
+    Distribution.Solver.Types.OptionalStanza
+    Distribution.Solver.Types.PackageConstraint
+    Distribution.Solver.Types.PackageFixedDeps
+    Distribution.Solver.Types.PackageIndex
+    Distribution.Solver.Types.PackagePath
+    Distribution.Solver.Types.PackagePreferences
+    Distribution.Solver.Types.PkgConfigDb
+    Distribution.Solver.Types.Progress
+    Distribution.Solver.Types.ResolverPackage
+    Distribution.Solver.Types.Settings
+    Distribution.Solver.Types.SolverId
+    Distribution.Solver.Types.SolverPackage
+    Distribution.Solver.Types.SourcePackage
+    Distribution.Solver.Types.Variable
+    Paths_cabal_install
     UnitTests.Distribution.Client.ArbitraryInstances
     UnitTests.Distribution.Client.FileMonitor
     UnitTests.Distribution.Client.GZipUtils
@@ -470,8 +570,8 @@
         binary,
         random,
         hackage-security,
-        tasty,
-        tasty-hunit,
+        tasty >= 0.12,
+        tasty-hunit >= 0.10,
         tasty-quickcheck,
         tagged,
         QuickCheck >= 2.8.2
@@ -517,6 +617,72 @@
   hs-source-dirs: tests, .
   ghc-options: -Wall -fwarn-tabs "-with-rtsopts=-M4M -K1K" -main-is MemoryUsageTests
   other-modules:
+    Distribution.Client.Compat.Prelude
+    Distribution.Client.Dependency
+    Distribution.Client.Dependency.Types
+    Distribution.Client.FetchUtils
+    Distribution.Client.GZipUtils
+    Distribution.Client.GlobalFlags
+    Distribution.Client.HttpUtils
+    Distribution.Client.PackageUtils
+    Distribution.Client.Sandbox.Types
+    Distribution.Client.Security.DNS
+    Distribution.Client.Security.HTTP
+    Distribution.Client.SolverInstallPlan
+    Distribution.Client.Tar
+    Distribution.Client.Targets
+    Distribution.Client.Types
+    Distribution.Client.Utils
+    Distribution.Client.Utils.Assertion
+    Distribution.Client.World
+    Distribution.Solver.Modular
+    Distribution.Solver.Modular.Assignment
+    Distribution.Solver.Modular.Builder
+    Distribution.Solver.Modular.Configured
+    Distribution.Solver.Modular.ConfiguredConversion
+    Distribution.Solver.Modular.ConflictSet
+    Distribution.Solver.Modular.Cycles
+    Distribution.Solver.Modular.Dependency
+    Distribution.Solver.Modular.Explore
+    Distribution.Solver.Modular.Flag
+    Distribution.Solver.Modular.Index
+    Distribution.Solver.Modular.IndexConversion
+    Distribution.Solver.Modular.LabeledGraph
+    Distribution.Solver.Modular.Linking
+    Distribution.Solver.Modular.Log
+    Distribution.Solver.Modular.Message
+    Distribution.Solver.Modular.PSQ
+    Distribution.Solver.Modular.Package
+    Distribution.Solver.Modular.Preference
+    Distribution.Solver.Modular.RetryLog
+    Distribution.Solver.Modular.Solver
+    Distribution.Solver.Modular.Tree
+    Distribution.Solver.Modular.Validate
+    Distribution.Solver.Modular.Var
+    Distribution.Solver.Modular.Version
+    Distribution.Solver.Modular.WeightedPSQ
+    Distribution.Solver.Types.ComponentDeps
+    Distribution.Solver.Types.ConstraintSource
+    Distribution.Solver.Types.DependencyResolver
+    Distribution.Solver.Types.Flag
+    Distribution.Solver.Types.InstSolverPackage
+    Distribution.Solver.Types.InstalledPreference
+    Distribution.Solver.Types.LabeledPackageConstraint
+    Distribution.Solver.Types.OptionalStanza
+    Distribution.Solver.Types.PackageConstraint
+    Distribution.Solver.Types.PackageFixedDeps
+    Distribution.Solver.Types.PackageIndex
+    Distribution.Solver.Types.PackagePath
+    Distribution.Solver.Types.PackagePreferences
+    Distribution.Solver.Types.PkgConfigDb
+    Distribution.Solver.Types.Progress
+    Distribution.Solver.Types.ResolverPackage
+    Distribution.Solver.Types.Settings
+    Distribution.Solver.Types.SolverId
+    Distribution.Solver.Types.SolverPackage
+    Distribution.Solver.Types.SourcePackage
+    Distribution.Solver.Types.Variable
+    Paths_cabal_install
     UnitTests.Distribution.Solver.Modular.DSL
     UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils
     UnitTests.Distribution.Solver.Modular.MemoryUsage
@@ -544,8 +710,8 @@
         random,
         hackage-security,
         tagged,
-        tasty,
-        tasty-hunit
+        tasty >= 0.12,
+        tasty-hunit >= 0.10
 
   if flag(old-directory)
     build-depends: old-time
@@ -588,6 +754,76 @@
   hs-source-dirs: tests, .
   ghc-options: -Wall -fwarn-tabs -fno-ignore-asserts -main-is SolverQuickCheck
   other-modules:
+    Distribution.Client.BuildReports.Types
+    Distribution.Client.Compat.Prelude
+    Distribution.Client.Dependency
+    Distribution.Client.Dependency.Types
+    Distribution.Client.FetchUtils
+    Distribution.Client.GZipUtils
+    Distribution.Client.GlobalFlags
+    Distribution.Client.HttpUtils
+    Distribution.Client.IndexUtils.Timestamp
+    Distribution.Client.Init.Types
+    Distribution.Client.PackageUtils
+    Distribution.Client.Sandbox.Types
+    Distribution.Client.Security.DNS
+    Distribution.Client.Security.HTTP
+    Distribution.Client.Setup
+    Distribution.Client.SolverInstallPlan
+    Distribution.Client.Tar
+    Distribution.Client.Targets
+    Distribution.Client.Types
+    Distribution.Client.Utils
+    Distribution.Client.Utils.Assertion
+    Distribution.Client.World
+    Distribution.Solver.Modular
+    Distribution.Solver.Modular.Assignment
+    Distribution.Solver.Modular.Builder
+    Distribution.Solver.Modular.Configured
+    Distribution.Solver.Modular.ConfiguredConversion
+    Distribution.Solver.Modular.ConflictSet
+    Distribution.Solver.Modular.Cycles
+    Distribution.Solver.Modular.Dependency
+    Distribution.Solver.Modular.Explore
+    Distribution.Solver.Modular.Flag
+    Distribution.Solver.Modular.Index
+    Distribution.Solver.Modular.IndexConversion
+    Distribution.Solver.Modular.LabeledGraph
+    Distribution.Solver.Modular.Linking
+    Distribution.Solver.Modular.Log
+    Distribution.Solver.Modular.Message
+    Distribution.Solver.Modular.PSQ
+    Distribution.Solver.Modular.Package
+    Distribution.Solver.Modular.Preference
+    Distribution.Solver.Modular.RetryLog
+    Distribution.Solver.Modular.Solver
+    Distribution.Solver.Modular.Tree
+    Distribution.Solver.Modular.Validate
+    Distribution.Solver.Modular.Var
+    Distribution.Solver.Modular.Version
+    Distribution.Solver.Modular.WeightedPSQ
+    Distribution.Solver.Types.ComponentDeps
+    Distribution.Solver.Types.ConstraintSource
+    Distribution.Solver.Types.DependencyResolver
+    Distribution.Solver.Types.Flag
+    Distribution.Solver.Types.InstSolverPackage
+    Distribution.Solver.Types.InstalledPreference
+    Distribution.Solver.Types.LabeledPackageConstraint
+    Distribution.Solver.Types.OptionalStanza
+    Distribution.Solver.Types.PackageConstraint
+    Distribution.Solver.Types.PackageFixedDeps
+    Distribution.Solver.Types.PackageIndex
+    Distribution.Solver.Types.PackagePath
+    Distribution.Solver.Types.PackagePreferences
+    Distribution.Solver.Types.PkgConfigDb
+    Distribution.Solver.Types.Progress
+    Distribution.Solver.Types.ResolverPackage
+    Distribution.Solver.Types.Settings
+    Distribution.Solver.Types.SolverId
+    Distribution.Solver.Types.SolverPackage
+    Distribution.Solver.Types.SourcePackage
+    Distribution.Solver.Types.Variable
+    Paths_cabal_install
     UnitTests.Distribution.Solver.Modular.DSL
     UnitTests.Distribution.Solver.Modular.QuickCheck
   build-depends:
@@ -612,7 +848,7 @@
         binary,
         random,
         hackage-security,
-        tasty,
+        tasty >= 0.12,
         tasty-quickcheck,
         QuickCheck >= 2.8.2,
         pretty-show
@@ -656,7 +892,112 @@
   main-is: IntegrationTests2.hs
   hs-source-dirs: tests, .
   ghc-options: -Wall -fwarn-tabs -fno-ignore-asserts -main-is IntegrationTests2
-  other-modules: Distribution.Client.Compat.FileLock
+  other-modules:
+    Distribution.Client.BuildReports.Types
+    Distribution.Client.CmdBench
+    Distribution.Client.CmdBuild
+    Distribution.Client.CmdErrorMessages
+    Distribution.Client.CmdHaddock
+    Distribution.Client.CmdRepl
+    Distribution.Client.CmdRun
+    Distribution.Client.CmdTest
+    Distribution.Client.Compat.ExecutablePath
+    Distribution.Client.Compat.FileLock
+    Distribution.Client.Compat.Prelude
+    Distribution.Client.Compat.Semaphore
+    Distribution.Client.Config
+    Distribution.Client.Dependency
+    Distribution.Client.Dependency.Types
+    Distribution.Client.DistDirLayout
+    Distribution.Client.FetchUtils
+    Distribution.Client.FileMonitor
+    Distribution.Client.GZipUtils
+    Distribution.Client.Glob
+    Distribution.Client.GlobalFlags
+    Distribution.Client.HttpUtils
+    Distribution.Client.IndexUtils
+    Distribution.Client.IndexUtils.Timestamp
+    Distribution.Client.Init.Types
+    Distribution.Client.InstallPlan
+    Distribution.Client.JobControl
+    Distribution.Client.PackageHash
+    Distribution.Client.PackageUtils
+    Distribution.Client.ParseUtils
+    Distribution.Client.ProjectBuilding
+    Distribution.Client.ProjectBuilding.Types
+    Distribution.Client.ProjectConfig
+    Distribution.Client.ProjectConfig.Legacy
+    Distribution.Client.ProjectConfig.Types
+    Distribution.Client.ProjectOrchestration
+    Distribution.Client.ProjectPlanOutput
+    Distribution.Client.ProjectPlanning
+    Distribution.Client.ProjectPlanning.Types
+    Distribution.Client.RebuildMonad
+    Distribution.Client.Sandbox.Types
+    Distribution.Client.Security.DNS
+    Distribution.Client.Security.HTTP
+    Distribution.Client.Setup
+    Distribution.Client.SetupWrapper
+    Distribution.Client.SolverInstallPlan
+    Distribution.Client.SourceFiles
+    Distribution.Client.SrcDist
+    Distribution.Client.Store
+    Distribution.Client.Tar
+    Distribution.Client.TargetSelector
+    Distribution.Client.Targets
+    Distribution.Client.Types
+    Distribution.Client.Utils
+    Distribution.Client.Utils.Assertion
+    Distribution.Client.Utils.Json
+    Distribution.Client.World
+    Distribution.Solver.Modular
+    Distribution.Solver.Modular.Assignment
+    Distribution.Solver.Modular.Builder
+    Distribution.Solver.Modular.Configured
+    Distribution.Solver.Modular.ConfiguredConversion
+    Distribution.Solver.Modular.ConflictSet
+    Distribution.Solver.Modular.Cycles
+    Distribution.Solver.Modular.Dependency
+    Distribution.Solver.Modular.Explore
+    Distribution.Solver.Modular.Flag
+    Distribution.Solver.Modular.Index
+    Distribution.Solver.Modular.IndexConversion
+    Distribution.Solver.Modular.LabeledGraph
+    Distribution.Solver.Modular.Linking
+    Distribution.Solver.Modular.Log
+    Distribution.Solver.Modular.Message
+    Distribution.Solver.Modular.PSQ
+    Distribution.Solver.Modular.Package
+    Distribution.Solver.Modular.Preference
+    Distribution.Solver.Modular.RetryLog
+    Distribution.Solver.Modular.Solver
+    Distribution.Solver.Modular.Tree
+    Distribution.Solver.Modular.Validate
+    Distribution.Solver.Modular.Var
+    Distribution.Solver.Modular.Version
+    Distribution.Solver.Modular.WeightedPSQ
+    Distribution.Solver.Types.ComponentDeps
+    Distribution.Solver.Types.ConstraintSource
+    Distribution.Solver.Types.DependencyResolver
+    Distribution.Solver.Types.Flag
+    Distribution.Solver.Types.InstSolverPackage
+    Distribution.Solver.Types.InstalledPreference
+    Distribution.Solver.Types.LabeledPackageConstraint
+    Distribution.Solver.Types.OptionalStanza
+    Distribution.Solver.Types.PackageConstraint
+    Distribution.Solver.Types.PackageFixedDeps
+    Distribution.Solver.Types.PackageIndex
+    Distribution.Solver.Types.PackagePath
+    Distribution.Solver.Types.PackagePreferences
+    Distribution.Solver.Types.PkgConfigDb
+    Distribution.Solver.Types.Progress
+    Distribution.Solver.Types.ResolverPackage
+    Distribution.Solver.Types.Settings
+    Distribution.Solver.Types.SolverId
+    Distribution.Solver.Types.SolverPackage
+    Distribution.Solver.Types.SourcePackage
+    Distribution.Solver.Types.Variable
+    Paths_cabal_install
   build-depends:
         async,
         array,
@@ -684,8 +1025,8 @@
         tar,
         time,
         zlib,
-        tasty,
-        tasty-hunit,
+        tasty >= 0.12,
+        tasty-hunit >= 0.10,
         tagged
 
   if flag(old-bytestring)
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,6 +1,21 @@
 -*-change-log-*-
 
+2.0.0.1 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> December 2017
+	* Support for GHC's numeric -g debug levels (#4673).
+	* Demoted 'scope' field version check to a warning (#4714).
+	* Fixed verbosity flags getting removed before being passed to
+	'printPlan' (#4724).
+	* Added a '--store-dir' option that can be used to configure the
+	location of the build global build store (#4623).
+	* Turned `allow-{newer,older}` in `cabal.project` files into an
+	accumulating field to match CLI flag semantics (#4679).
+	* Improve success message when `cabal upload`ing documentation
+	(#4777).
+	* Documentation fixes.
+
 2.0.0.0 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> August 2017
+	* See http://coldwa.st/e/blog/2017-09-09-Cabal-2-0.html
+	for more detailed release notes.
 	* Removed the '--root-cmd' parameter of the 'install' command
 	(#3356).
 	* Deprecated 'cabal install --global' (#3356).
@@ -24,7 +39,7 @@
 	'.../$pkgid.log' to '.../$compiler/$libname.log' (#3807).
 	* Added a new command, 'cabal reconfigure', which re-runs 'configure'
 	with the most recently used flags (#2214).
-	* Added add the '--index-state' flag for requesting a specific
+	* Added the '--index-state' flag for requesting a specific
 	version of the package index (#3893, #4115).
 	* Support for building Backpack packages.  See
 	https://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst
@@ -32,7 +47,7 @@
 	* Support the Nix package manager (#3651).
 	* Made the 'template-haskell' package non-upgradable again (#4185).
 	* Fixed password echoing on MinTTY (#4128).
-	* Added a new solver flag, '--install-base-libraries', that allows
+	* Added a new solver flag, '--allow-boot-library-installs', that allows
 	any package to be installed or upgraded (#4209).
 	* New 'cabal-install' command: 'outdated', for listing outdated
 	version bounds in a .cabal file or a freeze file (#4207).
@@ -47,6 +62,29 @@
 	* Added a technical preview version of the 'cabal doctest' command
 	(#4480).
 
+1.24.0.2 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> December 2016
+	* Adapted to the revert of a PVP-noncompliant API change in
+	Cabal 1.24.2.0 (#4123).
+	* Bumped the directory upper bound to < 1.4 (#4158).
+
+1.24.0.1 Ryan Thomas <ryan@ryant.org> October 2016
+	* Fixed issue with passing '--enable-profiling' when invoking
+	Setup scripts built with older versions of Cabal (#3873).
+	* Fixed various behaviour differences between network transports
+	(#3429).
+	* Updated to depend on the latest hackage-security that fixes
+	various issues on Windows.
+	* Fixed 'new-build' to exit with a non-zero exit code on failure
+	(#3506).
+	* Store secure repo index data as 01-index.* (#3862).
+	* Added new hackage-security root keys for distribution with
+	cabal-install.
+	* Fix an issue where 'cabal install' sometimes had to be run twice
+	for packages with build-type: Custom and a custom-setup stanza
+	(#3723).
+	* 'cabal sdist' no longer ignores '--builddir' when the package's
+	build-type is Custom (#3794).
+
 1.24.0.0 Ryan Thomas <ryan@ryant.org> March 2016
 	* If there are multiple remote repos, 'cabal update' now updates
 	them in parallel (#2503).
@@ -107,6 +145,39 @@
 	* Tech preview of new nix-style isolated project-based builds.
 	Currently provides the commands (new-)build/repl/configure.
 
+1.22.9.0 Ryan Thomas <ryan@ryant.org> March 2016
+	* Include Cabal-1.22.8.0
+
+1.22.8.0 Ryan Thomas <ryan@ryant.org> February 2016
+	* Only Custom setup scripts should be compiled with '-i -i.'.
+	* installedCabalVersion: Don't special-case Cabal anymore.
+	* Bump the HTTP upper bound. See #3069.
+
+1.22.7.0 Ryan Thomas <ryan@ryant.org> December 2015
+	* Remove GZipUtils tests
+	* maybeDecompress: bail on all errors at the beginning of the stream with zlib < 0.6
+	* Correct maybeDecompress
+
+1.22.6.0 Ryan Thomas <ryan@ryant.org> June 2015
+	* A fix for @ezyang's fix for #2502. (Mikhail Glushenkov)
+
+1.22.5.0 Ryan Thomas <ryan@ryant.org> June 2015
+	* Reduce temporary directory name length, fixes #2502. (Edward Z. Yang)
+
+1.22.4.0 Ryan Thomas <ryan@ryant.org> May 2015
+	* Force cabal upload to always use digest auth and never basic auth.
+	* Add dependency-graph information to `printPlan` output
+	* bootstrap.sh: fixes linker matching to avoid cases where tested linker names appear unexpectedly in compiler output (fixes #2542)
+
+1.22.3.0 Ryan Thomas <ryan@ryant.org> April 2015
+	* Fix bash completion for sandbox subcommands - Fixes #2513 (Mikhail Glushenkov)
+	* filterConfigureFlags: filter more flags (Mikhail Glushenkov)
+
+1.22.2.0 Ryan Thomas <ryan@ryant.org> March 2015
+	* Don't pass '--{en,dis}able-profiling' to old setup exes.
+	* -Wall police
+	* Allow filepath 1.4
+
 1.22.0.0 Johan Tibell <johan.tibell@gmail.com> January 2015
 	* New command: user-config (#2159).
 	* Implement 'cabal repl --only' (#2016).
@@ -121,6 +192,19 @@
 	* Install profiling and shared libs by default in 'bootstrap.sh'
 	(#2009).
 
+1.20.2.0 Ryan Thomas <ryan@ryant.org> February 2016
+	* Only Custom setup scripts should be compiled with '-i -i.'.
+	* installedCabalVersion: Don't special-case Cabal anymore.
+
+1.20.1.0 Ryan Thomas <ryan@ryant.org> May 2015
+	* Force cabal upload to always use digest auth and never basic auth.
+	* bootstrap.sh: install network-uri before HTTP
+
+1.20.0.5 Johan Tibell <johan.tibell@gmail.com> December 2014
+	* Support random 1.1.
+	* Fix bootstrap script after network package split.
+	* Support network-2.6 in test suite.
+
 1.20.0.3 Johan Tibell <johan.tibell@gmail.com> June 2014
 	* Don't attempt to rename dist if it is already named correctly
 	* Treat all flags of a package as interdependent.
@@ -148,6 +232,28 @@
 	* Add experimental Cabal file format command
 	* Add haddock section to config file
 	* Add --main-is flag to init
+
+1.18.2.0 Ryan Thomas <ryan@ryant.org> February 2016
+	* Only Custom setup scripts should be compiled with '-i -i.'.
+	* installedCabalVersion: Don't special-case Cabal anymore.
+
+1.18.1.0 Ryan Thomas <ryan@ryant.org> May 2015
+	* Force cabal upload to always use digest auth and never basic auth.
+	* Merge pull request #2367 from juhp/patch-2
+	* Fix bootstrap.sh by bumping HTTP to 4000.2.16.1
+
+1.18.0.7 Johan Tibell <johan.tibell@gmail.com> December 2014
+	* Support random 1.1.
+	* Fix bootstrap script after network package split.
+	* Support network-2.6 in test suite.
+
+1.18.0.5 Johan Tibell <johan.tibell@gmail.com> July 2014
+	* Make solver flag resolution more conservative.
+
+1.18.0.4 Johan Tibell <johan.tibell@gmail.com> May 2014
+	* Increase max-backjumps to 2000.
+	* Fix solver bug which led to missed install plans.
+	* Tweak solver heuristics to avoid reinstalls.
 
 0.14.0 Andres Loeh <andres@well-typed.com> April 2012
 	* Works with ghc-7.4
diff --git a/tests/IntegrationTests2.hs b/tests/IntegrationTests2.hs
--- a/tests/IntegrationTests2.hs
+++ b/tests/IntegrationTests2.hs
@@ -1634,7 +1634,7 @@
     res <- try action
     case res of
       Left  e -> return e
-      Right _ -> throwIO $ HUnitFailure $ "expected an exception " ++ expected
+      Right _ -> throwIO $ HUnitFailure Nothing $ "expected an exception " ++ expected
 
 expectPackagePreExisting :: ElaboratedInstallPlan -> BuildOutcomes -> PackageId
                          -> IO InstalledPackageInfo
@@ -1675,7 +1675,7 @@
 unexpectedBuildResult :: String -> ElaboratedPlanPackage
                       -> Maybe (Either BuildFailure BuildResult) -> IO a
 unexpectedBuildResult expected planpkg buildResult =
-    throwIO $ HUnitFailure $
+    throwIO $ HUnitFailure Nothing $
          "expected to find " ++ display (packageId planpkg) ++ " in the "
       ++ expected ++ " state, but it is actually in the " ++ actual ++ " state."
   where
@@ -1693,10 +1693,10 @@
          | pkg <- InstallPlan.toList plan
          , packageId pkg == pkgid ] of
       [pkg] -> return pkg
-      []    -> throwIO $ HUnitFailure $
+      []    -> throwIO $ HUnitFailure Nothing $
                    "expected to find " ++ display pkgid
                 ++ " in the install plan but it's not there"
-      _     -> throwIO $ HUnitFailure $
+      _     -> throwIO $ HUnitFailure Nothing $
                    "expected to find only one instance of " ++ display pkgid
                 ++ " in the install plan but there's several"
 
diff --git a/tests/UnitTests/Distribution/Client/FileMonitor.hs b/tests/UnitTests/Distribution/Client/FileMonitor.hs
--- a/tests/UnitTests/Distribution/Client/FileMonitor.hs
+++ b/tests/UnitTests/Distribution/Client/FileMonitor.hs
@@ -818,7 +818,7 @@
   res <- checkChanged root monitor key
   case res of
     MonitorChanged reason -> return reason
-    MonitorUnchanged _ _  -> throwIO $ HUnitFailure "expected change"
+    MonitorUnchanged _ _  -> throwIO $ HUnitFailure Nothing "expected change"
 
 expectMonitorUnchanged :: (Binary a, Binary b)
                         => RootPath -> FileMonitor a b -> a
@@ -826,7 +826,7 @@
 expectMonitorUnchanged root monitor key = do
   res <- checkChanged root monitor key
   case res of
-    MonitorChanged _reason   -> throwIO $ HUnitFailure "expected no change"
+    MonitorChanged _reason   -> throwIO $ HUnitFailure Nothing "expected no change"
     MonitorUnchanged b files -> return (b, files)
 
 checkChanged :: (Binary a, Binary b)
diff --git a/tests/UnitTests/Distribution/Client/Glob.hs b/tests/UnitTests/Distribution/Client/Glob.hs
--- a/tests/UnitTests/Distribution/Client/Glob.hs
+++ b/tests/UnitTests/Distribution/Client/Glob.hs
@@ -103,12 +103,12 @@
 testparse s =
     case simpleParse s of
       Just p  -> return p
-      Nothing -> throwIO $ HUnitFailure ("expected parse of: " ++ s)
+      Nothing -> throwIO $ HUnitFailure Nothing ("expected parse of: " ++ s)
 
 parseFail :: String -> Assertion
 parseFail s =
     case simpleParse s :: Maybe FilePathGlob of
-      Just _  -> throwIO $ HUnitFailure ("expected no parse of: " ++ s)
+      Just _  -> throwIO $ HUnitFailure Nothing ("expected no parse of: " ++ s)
       Nothing -> return ()
 
 instance Arbitrary FilePathGlob where
diff --git a/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/tests/UnitTests/Distribution/Client/ProjectConfig.hs
--- a/tests/UnitTests/Distribution/Client/ProjectConfig.hs
+++ b/tests/UnitTests/Distribution/Client/ProjectConfig.hs
@@ -313,18 +313,46 @@
         <*> arbitrary
         <*> (fmap getShortToken <$> arbitrary)
         <*> (fmap getShortToken <$> arbitrary)
+        <*> (fmap getShortToken <$> arbitrary)
       where
         arbitraryNumJobs = fmap (fmap getPositive) <$> arbitrary
 
-    shrink (ProjectConfigBuildOnly
-              x00 x01 x02 x03 x04 x05 x06 x07
-              x08 x09 x10 x11 x12 x13 x14 x15
-              x16) =
-      [ ProjectConfigBuildOnly
-          x00' x01' x02' x03' x04'
-          x05' x06' x07' x08' (postShrink_NumJobs x09')
-          x10' x11' x12' x13  x14'
-          x15  x16
+    shrink ProjectConfigBuildOnly { projectConfigVerbosity = x00
+                                  , projectConfigDryRun = x01
+                                  , projectConfigOnlyDeps = x02
+                                  , projectConfigSummaryFile = x03
+                                  , projectConfigLogFile = x04
+                                  , projectConfigBuildReports = x05
+                                  , projectConfigReportPlanningFailure = x06
+                                  , projectConfigSymlinkBinDir = x07
+                                  , projectConfigOneShot = x08
+                                  , projectConfigNumJobs = x09
+                                  , projectConfigKeepGoing = x10
+                                  , projectConfigOfflineMode = x11
+                                  , projectConfigKeepTempFiles = x12
+                                  , projectConfigHttpTransport = x13
+                                  , projectConfigIgnoreExpiry = x14
+                                  , projectConfigCacheDir = x15
+                                  , projectConfigLogsDir = x16
+                                  , projectConfigStoreDir = x17 } =
+      [ ProjectConfigBuildOnly { projectConfigVerbosity = x00'
+                               , projectConfigDryRun = x01'
+                               , projectConfigOnlyDeps = x02'
+                               , projectConfigSummaryFile = x03'
+                               , projectConfigLogFile = x04'
+                               , projectConfigBuildReports = x05'
+                               , projectConfigReportPlanningFailure = x06'
+                               , projectConfigSymlinkBinDir = x07'
+                               , projectConfigOneShot = x08'
+                               , projectConfigNumJobs = postShrink_NumJobs x09'
+                               , projectConfigKeepGoing = x10'
+                               , projectConfigOfflineMode = x11'
+                               , projectConfigKeepTempFiles = x12'
+                               , projectConfigHttpTransport = x13
+                               , projectConfigIgnoreExpiry = x14'
+                               , projectConfigCacheDir = x15
+                               , projectConfigLogsDir = x16
+                               , projectConfigStoreDir = x17}
       | ((x00', x01', x02', x03', x04'),
          (x05', x06', x07', x08', x09'),
          (x10', x11', x12',       x14'))
