Ticket #447: parallel.patch

File parallel.patch, 76.5 KB (added by SamAnklesaria, 2 years ago)

partial, hypothetical implimentation lacking suppressed output and command line flags

Line 
11 patch for repository http://darcs.haskell.org/cabal-install/:
2
3Wed Mar 23 09:44:17 CDT 2011  amsay@amsay.net
4  * partial parallel building
5
6
7New patches:
8
9[partial parallel building
10amsay@amsay.net**20110323144417
11 Ignore-this: 6646fe3035f0aacff52bff0c05a2c93
12] {
13hunk ./Distribution/Client/Install.hs 25
14          ( unfoldr, find, nub, sort )
15 import Data.Maybe
16          ( isJust, fromMaybe )
17+import Control.Concurrent
18+         ( forkIO, killThread )
19+import Control.Concurrent.ParallelIO.Local
20+         ( Pool, parallel_, startPool, stopPool, extraWorkerWhileBlocked )
21+import Control.Concurrent.Chan
22+         ( Chan, newChan, writeChan, readChan )
23+import Control.Concurrent.MVar
24 import Control.Exception as Exception
25          ( handleJust )
26 #if MIN_VERSION_base(4,0,0)
27hunk ./Distribution/Client/Install.hs 64
28 import Distribution.Client.IndexUtils as IndexUtils
29          ( getAvailablePackages, getInstalledPackages )
30 import qualified Distribution.Client.InstallPlan as InstallPlan
31-import Distribution.Client.InstallPlan (InstallPlan)
32+import Distribution.Client.InstallPlan (InstallPlan, PlanPackage(..))
33 import Distribution.Client.Setup
34          ( GlobalFlags(..)
35          , ConfigFlags(..), configureCommand, filterConfigureFlags
36hunk ./Distribution/Client/Install.hs 99
37          , toFlag, fromFlag, fromFlagOrDefault, flagToMaybe )
38 import qualified Distribution.Simple.Setup as Cabal
39          ( installCommand, InstallFlags(..), emptyInstallFlags )
40+import Distribution.Simple.Command (CommandUI)
41 import Distribution.Simple.Utils
42          ( rawSystemExit, comparing )
43 import Distribution.Simple.InstallDirs as InstallDirs
44hunk ./Distribution/Client/Install.hs 117
45 import Distribution.Version
46          ( Version, anyVersion, thisVersion )
47 import Distribution.Simple.Utils as Utils
48-         ( notice, info, debug, warn, die, intercalate, withTempDirectory )
49+         ( notice, debug, warn, die, intercalate, withTempDirectory )
50 import Distribution.Client.Utils
51          ( inDir, mergeBy, MergeResult(..) )
52 import Distribution.System
53hunk ./Distribution/Client/Install.hs 125
54 import Distribution.Text
55          ( display )
56 import Distribution.Verbosity as Verbosity
57-         ( Verbosity, showForCabal, verbose )
58+         ( Verbosity, verbose, silent )
59 import Distribution.Simple.BuildPaths ( exeExtension )
60hunk ./Distribution/Client/Install.hs 127
61+import GHC.Conc ( numCapabilities )
62 
63 --TODO:
64 -- * assign flags to packages individually
65hunk ./Distribution/Client/Install.hs 182
66     printPlanMessages verbosity installed installPlan dryRun
67 
68     unless dryRun $ do
69-      installPlan' <- performInstallations verbosity
70-                        context installed installPlan
71+      installPlan' <- performInstallations verbosity context installed installPlan
72       postInstallActions verbosity context userTargets installPlan'
73 
74   where
75hunk ./Distribution/Client/Install.hs 575
76   (packageDBs, _, comp, conf,
77    globalFlags, configFlags, configExFlags, installFlags)
78   installed installPlan = do
79-
80-  executeInstallPlan installPlan $ \cpkg ->
81+  downloadChan <- newChan
82+  installChan <- newChan
83+  install_tid <- forkIO $ installThread installChan
84+  download_tid <- forkIO $ downloadThread downloadChan
85+  installPlanMV <- newMVar installPlan
86+  errorMVar <- newEmptyMVar
87+  counter <- newMVar 0
88+  pool <- startPool threads
89+  executeInstallPlan verbosity counter pool installPlanMV errorMVar $ \cpkg ->
90     installConfiguredPackage platform compid configFlags
91                              cpkg $ \configFlags' src pkg ->
92hunk ./Distribution/Client/Install.hs 586
93-      fetchAvailablePackage verbosity src $ \src' ->
94-        installLocalPackage verbosity (packageId pkg) src' $ \mpath ->
95-          installUnpackedPackage verbosity (setupScriptOptions installed)
96-                                 miscOptions configFlags' installFlags
97-                                 compid pkg mpath useLogFile
98+      onFailure DownloadFailed $ sendChan downloadChan src >>= \src' ->
99+        installLocalPackage (packageId pkg) src' $ \mpath ->
100+          installUnpackedPackage (setupScriptOptions installed)
101+                                 configFlags' installFlags
102+                                 pkg mpath useLogFile $ \result ->
103+             extraWorkerWhileBlocked pool $ sendChan installChan result
104+  stopPool pool
105+  killThread install_tid
106+  killThread download_tid
107+  takeMVar installPlanMV
108 
109   where
110     platform = InstallPlan.planPlatform installPlan
111hunk ./Distribution/Client/Install.hs 623
112       useLoggingHandle = Nothing,
113       useWorkingDir    = Nothing
114     }
115+    threads = max 1 (maybe numCapabilities id (flagToMaybe (installMaxThreads installFlags)) - 2)
116     reportingLevel = fromFlag (installBuildReports installFlags)
117     logsDir        = fromFlag (globalLogsDir globalFlags)
118     useLogFile :: Maybe (PackageIdentifier -> FilePath)
119hunk ./Distribution/Client/Install.hs 645
120                      else flagToMaybe (installRootCmd installFlags),
121       libVersion = flagToMaybe (configCabalVersion configExFlags)
122     }
123+    installThread installChan =
124+         inThread installChan $ \(configFlags', pkg, mpath, scriptOptions, installFlags', result) ->
125+              installBuiltPackage scriptOptions miscOptions configFlags' installFlags' compid pkg mpath useLogFile result
126+    downloadThread downloadChan = inThread downloadChan $ \src-> do
127+         fetched <- checkFetched src
128+         case fetched of
129+              Just src' -> return src'
130+              Nothing -> fetchPackage silent src
131 
132hunk ./Distribution/Client/Install.hs 654
133-
134-executeInstallPlan :: Monad m
135-                   => InstallPlan
136-                   -> (ConfiguredPackage -> m BuildResult)
137-                   -> m InstallPlan
138-executeInstallPlan plan installPkg = case InstallPlan.ready plan of
139-  []       -> return plan
140-  (pkg: _) -> do buildResult <- installPkg pkg
141-                 let plan' = updatePlan (packageId pkg) buildResult plan
142-                 executeInstallPlan plan' installPkg
143+installBuiltPackage :: SetupScriptOptions -> InstallMisc -> ConfigFlags -> (Version -> Cabal.InstallFlags)
144+                    -> CompilerId -> PackageDescription -> Maybe FilePath
145+                    -> Maybe (PackageIdentifier -> FilePath) -> BuildResult -> IO BuildResult
146+installBuiltPackage scriptOptions miscOptions configFlags installFlags compid pkg workingDir useLogFile buildRes
147+   = do
148+      onFailure InstallFailed $
149+        withWin32SelfUpgrade configFlags compid pkg $ do
150+          case rootCmd miscOptions of
151+            (Just cmd) -> reexec cmd
152+            Nothing    -> setup useLogFile pkg workingDir scriptOptions Cabal.installCommand installFlags
153+          return buildRes
154   where
155hunk ./Distribution/Client/Install.hs 666
156-    updatePlan pkgid (Right buildSuccess) =
157-      InstallPlan.completed pkgid buildSuccess
158+    reexec cmd = do
159+      -- look for our on executable file and re-exec ourselves using
160+      -- a helper program like sudo to elevate priviledges:
161+      bindir <- getBinDir
162+      let self = bindir </> "cabal" <.> exeExtension
163+      weExist <- doesFileExist self
164+      if weExist
165+        then inDir workingDir $
166+               rawSystemExit silent cmd
167+                 [self, "install", "--only"
168+                 ,"--verbose=0"]
169+        else die $ "Unable to find cabal executable at: " ++ self
170 
171hunk ./Distribution/Client/Install.hs 679
172-    updatePlan pkgid (Left buildFailure) =
173-      InstallPlan.failed    pkgid buildFailure depsFailure
174-      where
175-        depsFailure = DependentFailed pkgid
176-        -- So this first pkgid failed for whatever reason (buildFailure).
177-        -- All the other packages that depended on this pkgid, which we
178-        -- now cannot build, we mark as failing due to 'DependentFailed'
179-        -- which kind of means it was not their fault.
180+setup :: Maybe (PackageIdentifier -> FilePath)
181+      -> PackageDescription
182+      -> Maybe FilePath
183+      -> SetupScriptOptions
184+      -> CommandUI flags
185+      -> (Version -> flags)
186+      -> IO ()
187+setup useLogFile pkg workingDir scriptOptions cmd flags  = do
188+      logFileHandle <- case useLogFile of
189+        Nothing          -> return Nothing
190+        Just mkLogFileName -> do
191+          let logFileName = mkLogFileName (packageId pkg)
192+              logDir      = takeDirectory logFileName
193+          unless (null logDir) $ createDirectoryIfMissing True logDir
194+          logFile <- openFile logFileName AppendMode
195+          return (Just logFile)
196+      setupWrapper silent
197+        scriptOptions { useLoggingHandle = logFileHandle
198+                      , useWorkingDir    = workingDir }
199+        (Just pkg)
200+        cmd flags []
201+
202+sendChan :: Chan (MVar m, a) -> a -> IO m
203+sendChan chan a = do
204+         mv <- newEmptyMVar
205+         writeChan chan (mv, a)
206+         takeMVar mv
207+
208+inThread :: Chan (MVar a, t) -> (t -> IO a) -> IO b
209+inThread chan f = do
210+         (m,a) <- readChan chan
211+         result <- f a
212+         putMVar m result
213+         inThread chan f
214+
215+executeInstallPlan :: Verbosity -> MVar Int -> Pool
216+                   -> MVar InstallPlan
217+                   -> MVar BuildFailure
218+                   -> (ConfiguredPackage -> IO BuildResult)
219+                   -> IO ()
220+executeInstallPlan verbosity counter pool plan errors installPkg = do
221+  maybeErr <- tryTakeMVar errors
222+  case maybeErr of
223+       Nothing -> do
224+                    plan' <- readMVar plan
225+                    case InstallPlan.ready plan' of
226+                       [] -> return ()
227+                       pkgs -> do
228+                           modifyMVar_ counter (return . (+ length pkgs))
229+                           threads <- readMVar counter
230+                           let jobs = length [p | (Configured p) <- InstallPlan.toList plan']
231+                           notice verbosity (show jobs ++ " jobs remaining, " ++ show threads ++ " running")
232+                           parallel_ pool $
233+                              map (\pkg-> (nextDeps verbosity counter pool plan errors installPkg pkg) $ installPkg pkg) pkgs
234+       (Just _) -> return ()
235+
236+nextDeps :: Verbosity -> MVar Int -> Pool
237+         -> MVar InstallPlan -> MVar BuildFailure
238+         -> (ConfiguredPackage -> IO BuildResult)
239+         -> ConfiguredPackage
240+         -> IO BuildResult
241+         -> IO ()
242+nextDeps verbosity counter pool plan errors installPkg pkg buildRes
243+   = do
244+         modifyMVar_ counter (return . subtract 1)
245+         buildRes' <- buildRes
246+         modifyMVar_ plan (updatePlan (packageId pkg) buildRes')
247+         executeInstallPlan verbosity counter pool plan errors installPkg
248+     where
249+         updatePlan pkgid (Right buildSuccess) x =
250+                 return $ InstallPlan.completed pkgid buildSuccess x
251+         updatePlan pkgid (Left buildFailure) x = do
252+                 putMVar errors buildFailure
253+                 return $ InstallPlan.failed pkgid buildFailure (DependentFailed pkgid) x
254+         -- So this first pkgid failed for whatever reason (buildFailure).
255+         -- All the other packages that depended on this pkgid, which we
256+         -- now cannot build, we mark as failing due to 'DependentFailed'
257+         -- which kind of means it was not their fault.
258 
259 
260 -- | Call an installer for an 'AvailablePackage' but override the configure
261hunk ./Distribution/Client/Install.hs 783
262       Left _ -> error "finalizePackageDescription ConfiguredPackage failed"
263       Right (desc, _) -> desc
264 
265-fetchAvailablePackage
266-  :: Verbosity
267-  -> PackageLocation (Maybe FilePath)
268-  -> (PackageLocation FilePath -> IO BuildResult)
269-  -> IO BuildResult
270-fetchAvailablePackage verbosity src installPkg = do
271-  fetched <- checkFetched src
272-  case fetched of
273-    Just src' -> installPkg src'
274-    Nothing   -> onFailure DownloadFailed $
275-                   fetchPackage verbosity src >>= installPkg
276-
277-
278 installLocalPackage
279hunk ./Distribution/Client/Install.hs 784
280-  :: Verbosity -> PackageIdentifier -> PackageLocation FilePath
281+  :: PackageIdentifier -> PackageLocation FilePath
282   -> (Maybe FilePath -> IO BuildResult)
283   -> IO BuildResult
284hunk ./Distribution/Client/Install.hs 787
285-installLocalPackage verbosity pkgid location installPkg = case location of
286+installLocalPackage pkgid location installPkg = case location of
287 
288     LocalUnpackedPackage dir ->
289       installPkg (Just dir)
290hunk ./Distribution/Client/Install.hs 793
291 
292     LocalTarballPackage tarballPath ->
293-      installLocalTarballPackage verbosity pkgid tarballPath installPkg
294+      installLocalTarballPackage pkgid tarballPath installPkg
295 
296     RemoteTarballPackage _ tarballPath ->
297hunk ./Distribution/Client/Install.hs 796
298-      installLocalTarballPackage verbosity pkgid tarballPath installPkg
299+      installLocalTarballPackage pkgid tarballPath installPkg
300 
301     RepoTarballPackage _ _ tarballPath ->
302hunk ./Distribution/Client/Install.hs 799
303-      installLocalTarballPackage verbosity pkgid tarballPath installPkg
304+      installLocalTarballPackage pkgid tarballPath installPkg
305 
306 
307 installLocalTarballPackage
308hunk ./Distribution/Client/Install.hs 803
309-  :: Verbosity -> PackageIdentifier -> FilePath
310+  :: PackageIdentifier -> FilePath
311   -> (Maybe FilePath -> IO BuildResult)
312   -> IO BuildResult
313hunk ./Distribution/Client/Install.hs 806
314-installLocalTarballPackage verbosity pkgid tarballPath installPkg = do
315+installLocalTarballPackage pkgid tarballPath installPkg = do
316   tmp <- getTemporaryDirectory
317hunk ./Distribution/Client/Install.hs 808
318-  withTempDirectory verbosity tmp (display pkgid) $ \tmpDirPath ->
319+  withTempDirectory silent tmp (display pkgid) $ \tmpDirPath ->
320     onFailure UnpackFailed $ do
321hunk ./Distribution/Client/Install.hs 810
322-      info verbosity $ "Extracting " ++ tarballPath
323-                    ++ " to " ++ tmpDirPath ++ "..."
324       let relUnpackedPath = display pkgid
325           absUnpackedPath = tmpDirPath </> relUnpackedPath
326           descFilePath = absUnpackedPath
327hunk ./Distribution/Client/Install.hs 820
328         die $ "Package .cabal file not found: " ++ show descFilePath
329       installPkg (Just absUnpackedPath)
330 
331-
332-installUnpackedPackage :: Verbosity
333-                   -> SetupScriptOptions
334-                   -> InstallMisc
335+installUnpackedPackage :: SetupScriptOptions
336                    -> ConfigFlags
337                    -> InstallFlags
338hunk ./Distribution/Client/Install.hs 823
339-                   -> CompilerId
340                    -> PackageDescription
341                    -> Maybe FilePath -- ^ Directory to change to before starting the installation.
342                    -> Maybe (PackageIdentifier -> FilePath) -- ^ File to log output to (if any)
343hunk ./Distribution/Client/Install.hs 826
344+                   -> ((ConfigFlags, PackageDescription, Maybe FilePath, SetupScriptOptions,
345+                   Version -> Cabal.InstallFlags, BuildResult) -> IO BuildResult)
346                    -> IO BuildResult
347hunk ./Distribution/Client/Install.hs 829
348-installUnpackedPackage verbosity scriptOptions miscOptions
349-                       configFlags installConfigFlags
350-                       compid pkg workingDir useLogFile =
351+installUnpackedPackage scriptOptions configFlags installConfigFlags
352+                       pkg workingDir useLogFile installPackage =
353 
354   -- Configure phase
355   onFailure ConfigureFailed $ do
356hunk ./Distribution/Client/Install.hs 834
357-    setup configureCommand configureFlags
358+    setup useLogFile pkg workingDir scriptOptions configureCommand configureFlags
359 
360   -- Build phase
361     onFailure BuildFailed $ do
362hunk ./Distribution/Client/Install.hs 838
363-      setup buildCommand' buildFlags
364+      setup useLogFile pkg workingDir scriptOptions buildCommand' buildFlags
365 
366   -- Doc generation phase
367       docsResult <- if shouldHaddock
368hunk ./Distribution/Client/Install.hs 842
369-        then (do setup haddockCommand haddockFlags
370+        then (do setup useLogFile pkg workingDir scriptOptions haddockCommand haddockFlags
371                  return DocsOk)
372                `catchIO`   (\_ -> return DocsFailed)
373                `catchExit` (\_ -> return DocsFailed)
374hunk ./Distribution/Client/Install.hs 850
375 
376   -- Tests phase
377       testsResult <- return TestsNotTried  --TODO: add optional tests
378-
379+
380   -- Install phase
381hunk ./Distribution/Client/Install.hs 852
382-      onFailure InstallFailed $
383-        withWin32SelfUpgrade verbosity configFlags compid pkg $ do
384-          case rootCmd miscOptions of
385-            (Just cmd) -> reexec cmd
386-            Nothing    -> setup Cabal.installCommand installFlags
387-          return (Right (BuildOk docsResult testsResult))
388+      installPackage (configFlags, pkg, workingDir, scriptOptions, installFlags, Right (BuildOk docsResult testsResult))
389 
390   where
391     configureFlags   = filterConfigureFlags configFlags {
392hunk ./Distribution/Client/Install.hs 856
393-      configVerbosity = toFlag verbosity'
394+      configVerbosity = toFlag silent
395     }
396     buildCommand'    = buildCommand defaultProgramConfiguration
397     buildFlags   _   = emptyBuildFlags {
398hunk ./Distribution/Client/Install.hs 861
399       buildDistPref  = configDistPref configFlags,
400-      buildVerbosity = toFlag verbosity'
401+      buildVerbosity = toFlag silent
402     }
403     shouldHaddock    = fromFlag (installDocumentation installConfigFlags)
404     haddockFlags _   = emptyHaddockFlags {
405hunk ./Distribution/Client/Install.hs 866
406       haddockDistPref  = configDistPref configFlags,
407-      haddockVerbosity = toFlag verbosity'
408+      haddockVerbosity = toFlag silent
409     }
410     installFlags _   = Cabal.emptyInstallFlags {
411       Cabal.installDistPref  = configDistPref configFlags,
412hunk ./Distribution/Client/Install.hs 870
413-      Cabal.installVerbosity = toFlag verbosity'
414+      Cabal.installVerbosity = toFlag silent
415     }
416hunk ./Distribution/Client/Install.hs 872
417-    verbosity' | isJust useLogFile = max Verbosity.verbose verbosity
418-               | otherwise         = verbosity
419-    setup cmd flags  = do
420-      logFileHandle <- case useLogFile of
421-        Nothing          -> return Nothing
422-        Just mkLogFileName -> do
423-          let logFileName = mkLogFileName (packageId pkg)
424-              logDir      = takeDirectory logFileName
425-          unless (null logDir) $ createDirectoryIfMissing True logDir
426-          logFile <- openFile logFileName AppendMode
427-          return (Just logFile)
428-
429-      setupWrapper verbosity
430-        scriptOptions { useLoggingHandle = logFileHandle
431-                      , useWorkingDir    = workingDir }
432-        (Just pkg)
433-        cmd flags []
434-    reexec cmd = do
435-      -- look for our on executable file and re-exec ourselves using
436-      -- a helper program like sudo to elevate priviledges:
437-      bindir <- getBinDir
438-      let self = bindir </> "cabal" <.> exeExtension
439-      weExist <- doesFileExist self
440-      if weExist
441-        then inDir workingDir $
442-               rawSystemExit verbosity cmd
443-                 [self, "install", "--only"
444-                 ,"--verbose=" ++ showForCabal verbosity]
445-        else die $ "Unable to find cabal executable at: " ++ self
446-
447 
448 -- helper
449 onFailure :: (SomeException -> BuildFailure) -> IO BuildResult -> IO BuildResult
450hunk ./Distribution/Client/Install.hs 895
451 -- * Wierd windows hacks
452 -- ------------------------------------------------------------
453 
454-withWin32SelfUpgrade :: Verbosity
455-                     -> ConfigFlags
456+withWin32SelfUpgrade :: ConfigFlags
457                      -> CompilerId
458                      -> PackageDescription
459                      -> IO a -> IO a
460hunk ./Distribution/Client/Install.hs 899
461-withWin32SelfUpgrade _ _ _ _ action | buildOS /= Windows = action
462-withWin32SelfUpgrade verbosity configFlags compid pkg action = do
463+withWin32SelfUpgrade _ _ _ action | buildOS /= Windows = action
464+withWin32SelfUpgrade configFlags compid pkg action = do
465 
466   defaultDirs <- InstallDirs.defaultInstallDirs
467                    compFlavor
468hunk ./Distribution/Client/Install.hs 907
469                    (fromFlag (configUserInstall configFlags))
470                    (PackageDescription.hasLibs pkg)
471 
472-  Win32SelfUpgrade.possibleSelfUpgrade verbosity
473+  Win32SelfUpgrade.possibleSelfUpgrade silent
474     (exeInstallPaths defaultDirs) action
475 
476   where
477hunk ./Distribution/Client/Setup.hs 572
478     installLogFile      :: Flag PathTemplate,
479     installBuildReports :: Flag ReportLevel,
480     installSymlinkBinDir:: Flag FilePath,
481-    installOneShot      :: Flag Bool
482+    installOneShot      :: Flag Bool,
483+    installMaxThreads   :: Flag Int
484   }
485 
486 defaultInstallFlags :: InstallFlags
487hunk ./Distribution/Client/Setup.hs 590
488     installLogFile      = mempty,
489     installBuildReports = Flag NoReports,
490     installSymlinkBinDir= mempty,
491-    installOneShot      = Flag False
492+    installOneShot      = Flag False,
493+    installMaxThreads    = mempty
494   }
495   where
496     docIndexFile = toPathTemplate ("$datadir" </> "doc" </> "index.html")
497hunk ./Distribution/Client/Setup.hs 682
498           (reqArg' "TEMPLATE" (toFlag.toPathTemplate)
499                               (flagToList . fmap fromPathTemplate))
500 
501+     , option [] ["max-threads"]
502+          "Maximum threads to use when building in parallel"
503+          installMaxThreads (\v flags -> flags { installMaxThreads = v })
504+          (reqArg' "MAXTHREADS" (toFlag . read) (map show . flagToList))
505+
506       , option [] ["remote-build-reporting"]
507           "Generate build reports to send to a remote server (none, anonymous or detailed)."
508           installBuildReports (\v flags -> flags { installBuildReports = v })
509hunk ./Distribution/Client/Setup.hs 722
510     installLogFile      = mempty,
511     installBuildReports = mempty,
512     installSymlinkBinDir= mempty,
513-    installOneShot      = mempty
514+    installOneShot      = mempty,
515+    installMaxThreads   = mempty
516   }
517   mappend a b = InstallFlags {
518     installDocumentation= combine installDocumentation,
519hunk ./Distribution/Client/Setup.hs 738
520     installLogFile      = combine installLogFile,
521     installBuildReports = combine installBuildReports,
522     installSymlinkBinDir= combine installSymlinkBinDir,
523-    installOneShot      = combine installOneShot
524+    installOneShot      = combine installOneShot,
525+    installMaxThreads   = combine installMaxThreads
526   }
527     where combine field = field a `mappend` field b
528 
529hunk ./cabal-install.cabal 101
530                    network  >= 1        && < 3,
531                    HTTP     >= 4000.0.2 && < 4001,
532                    zlib     >= 0.4      && < 0.6,
533-                   time     >= 1.1      && < 1.3
534+                   time     >= 1.1      && < 1.3,
535+                   parallel-io >= 0.3   && < 0.4
536 
537     if flag(old-base)
538       build-depends: base < 3
539}
540
541Context:
542
543[Fix username prompting for cabal upload
544Duncan Coutts <duncan@community.haskell.org>**20110315224721
545 Ignore-this: df520d38a20f56da60fd8dfe921c3fbf
546 Fixes ticket #810
547]
548[Unbreak the world target
549Duncan Coutts <duncan@community.haskell.org>**20110304233956
550 Ignore-this: 63eff29f8d0896610aabc5a13ce705bd
551 I'd accidentally left out the world target from the parsing phase
552 of the new user target handling system, so cabal install world did
553 not work. Now added to the target parser.
554]
555[Fix silly bug in cabal configure. Ticket #805.
556Duncan Coutts <duncan@community.haskell.org>**20110304221307
557 Ignore-this: 6bec52c20c33624c28844849cfa2fa78
558 I made a mistake during the recent refactoring work and was using
559 the dependency planner in the wrong way. The planner was being
560 given the available source packages and duely picking them to
561 satisfy dependencies, but for configure we're supposed to assume
562 that all dependencies are installed already.
563]
564[In bootstrap script, do Cabal before other deps
565Duncan Coutts <duncan@community.haskell.org>**20110227175535
566 Ignore-this: a25054ccde26ece8e5bfc83272909593
567 So that the others can use the new Cabal for their Setup.hs
568]
569[Add source-repository this entry
570Duncan Coutts <duncan@community.haskell.org>**20110227145302
571 Ignore-this: 7bf8b3f2af6fc3067ced983a6e8b9532
572]
573[Bump version to 0.10.0
574Duncan Coutts <duncan@community.haskell.org>**20110227145245
575 Ignore-this: 850619fd840cd2c47c2f3401e5a55abe
576]
577[Require Cabal >= 1.10.1
578Duncan Coutts <duncan@community.haskell.org>**20110227175455
579 Ignore-this: 4ecf4f3ac872b8ac8b948ffe5dba454a
580 It contains an important bug fix for some platforms, notably OSX
581]
582[Update dependencies in bootstrap script
583Duncan Coutts <duncan@community.haskell.org>**20110227165812
584 Ignore-this: b0c2a17fc8aebf04a7c919fe42773a5a
585 Works with ghc-6.12 and ghc-7.0
586]
587[Minor tweaks to bootstrap script
588Duncan Coutts <duncan@community.haskell.org>**20110227165713
589 Ignore-this: abdecb3d0918a22e7f39d316a6b2c15d
590 When using curl, fail better on HTTP errors.
591 Also remove some dead code.
592]
593[Only look at global packages when doing ./bootstrap.sh --global
594Duncan Coutts <duncan@community.haskell.org>**20110227152637
595 Ignore-this: 70346000a983f60efefd541d9392931a
596 Should fix ticket #796
597]
598[Add support for BSD fetch to bootstrap script
599Duncan Coutts <duncan@community.haskell.org>**20110227152423
600 Ignore-this: 8406ef2b924cc72198773b2e29ef2b06
601 On FreeBSD fetch is installed by default, unlike wget or curl.
602]
603[Add missing module to other-modules
604Duncan Coutts <duncan@community.haskell.org>**20110227175240
605 Ignore-this: fded3fdccc046a018c0620cea9e83def
606]
607[Update versions in README
608Duncan Coutts <duncan@community.haskell.org>**20110227170553
609 Ignore-this: 7abda197c6006b1c3c1f43b4af87ada8
610]
611[Update changelog for 0.10.0 release
612Duncan Coutts <duncan@community.haskell.org>**20110227151628
613 Ignore-this: 64083adec0b77ee86a3afade031a2889
614]
615[Update copyright date
616Duncan Coutts <duncan@community.haskell.org>**20110227145222
617 Ignore-this: 66d0a4390f9027293a3998c69fe4a8d4
618]
619[Partial fix for handling multiple installed instances of same package version
620Duncan Coutts <duncan@haskell.org>**20110227125008
621 Ignore-this: de73667cc9b4165c1df797a23307acd6
622 Previously when multiple instances of the same package are installed,
623 e.g. in global and user dbs, we would often end up selecting the wrong
624 instance. Now we select the user one consistently which will solve the
625 problem in most (but not all) cases.
626]
627[Bump version to 0.9.6
628Duncan Coutts <duncan@community.haskell.org>**20110214024354
629 Ignore-this: dfbecb3839c895fac3b31f3bca190085
630]
631[Adjust the amount of output for the -v verbosity level in a few places
632Duncan Coutts <duncan@community.haskell.org>**20110213234115
633 Ignore-this: ac14de4aeb99fcec70650040179b75af
634 For several commands, including install the -v verbosity level had
635 far too much useless internall stuff in it. Reduced the amount of
636 output from configuring the compiler, getting installed package and
637 the dependency planner. The extra detail is still available via -v3.
638]
639[Remove UnresolvedDependency type
640Duncan Coutts <duncan@community.haskell.org>**20110213230016
641 Ignore-this: 3823588c1222187f1c9cbb17299cb75c
642]
643[Remove code related to the dep resolver that is now redundant
644Duncan Coutts <duncan@community.haskell.org>**20110213230002
645 Ignore-this: 782ca2a1078fa8249f8f056a1a23c634
646]
647[Remove now-unused utilities from World module
648Duncan Coutts <duncan@community.haskell.org>**20110213225041
649 Ignore-this: ad1a368f71538602e5bbe2716a466d35
650 No longer needed now that the world target is handled via UserTarget.
651]
652[Use the new modular dep resolver interface in the various commands
653Duncan Coutts <duncan@community.haskell.org>**20110213224955
654 Ignore-this: 5fc85032554b125ae2a715273e7b9de3
655 Also minor tweak to InstallPlan.remove
656]
657[Insert a separate fetch stage to the install process
658Duncan Coutts <duncan@community.haskell.org>**20110213200824
659 Ignore-this: 647cc9a52d61b5b03771e79ef2dc84e6
660 Helps to clarify things now that different kinds of packages
661 are fetched in different ways.
662]
663[Tweak implementation of fetchRepoTarball
664Duncan Coutts <duncan@community.haskell.org>**20110213200109
665 Ignore-this: d1bb9fa0414f2bc70aa72086968b60e1
666]
667[New interface to the dep resolver that allows modular policy construction
668Duncan Coutts <duncan@community.haskell.org>**20110213195009
669 Ignore-this: cf218b8e70792cd0f4506c016787784f
670 Allows shorter and clearer code for the various ways the resolver is used.
671]
672[Partial rewrite of cabal list and info commands
673Duncan Coutts <duncan@community.haskell.org>**20110213194627
674 Ignore-this: cd924d6acb75052a04ea6e4459bd4ddd
675 The new user target system requires a change in how cabal info works.
676 Instead of just giving package names and looking them up in the
677 available package index, we can now specify names with versions or
678 version constraints which means we want the info to be about that
679 version in particular. We now list many installed and available
680 versions and mark which ones are preferred or not. Also fix a bug
681 for packages that are only installed, not available.
682]
683[Add a new module for handling user targets
684Duncan Coutts <duncan@community.haskell.org>**20110213194150
685 Ignore-this: 3a4b4ccd9d52d882a3a079d715a68c
686 This will allow us to increase the range of targets that cabal
687 commands can support. The new ones are local directory targets,
688 local cabal files, local tarballs and remote tarballs by URL.
689 Also a better way of doing the special "world" target.
690]
691[Add a fetchPackage utility
692Duncan Coutts <duncan@community.haskell.org>**20110213194034
693 Ignore-this: 821d447afde378889305e1205ad3ad23
694 Works for any package identified by PackageLocation
695 rather than just for repo packages.
696]
697[Add a few more Tar Entries utilities
698Duncan Coutts <duncan@community.haskell.org>**20110213193911
699 Ignore-this: 9930ec082016efa9c3bed77d5eddbb17
700]
701[Add a local path and type param to PackageLocation
702Duncan Coutts <duncan@community.haskell.org>**20110213193218
703 Ignore-this: 91781b96f082d3311734659ddf802638
704 So we can now use PackageLocation FilePath or Maybe FilePath to
705 describe what we know about the fetch status of package tarballs.
706]
707[Separate WorldPkgInfo type from UnresolvedDependency type
708Duncan Coutts <duncan@community.haskell.org>**20110213185006
709 Ignore-this: 975965c1238b1f58a53303cb046c42bd
710 Currently just a renamed copy of UnresolvedDependency but called
711 WorldPkgInfo and defined in the World module. This is in preparation
712 to remove all other uses of the UnresolvedDependency type.
713]
714[Rename AvailablePackageSource to PackageLocation
715Duncan Coutts <duncan@community.haskell.org>**20110213183529
716 Ignore-this: 40ee6b79bf284593491ae65228489d44
717 And remove import list for Types module, just import it all
718]
719[Split out a FetchUtils module
720Duncan Coutts <duncan@community.haskell.org>**20110213183446
721 Ignore-this: 19241ca08b50fe9547d780b6b2030955
722 And rename fetchPackage function to the more accurate fetchRepoTarball
723]
724[Remove unnecessary Maybe from LocalUnpackedPackage dir filepath
725Duncan Coutts <duncan@community.haskell.org>**20110213165151
726 Ignore-this: 44594d24516ba1286542b499fe5c804c
727 We can just use "." instead of Nothing
728]
729[Change the interface of the two package index search functions
730Duncan Coutts <duncan@community.haskell.org>**20110123193706
731 Ignore-this: 1bb6d4d282bdcb029abb30409553e69b
732 Move the ambiguity checking to the only use site
733 Both normal and substring search now return [(PackageName, [pkg])]
734]
735[cabal report uses the correct URIs and authenticates with username and passwords flags
736Vo Minh Thu <noteed@gmail.com>**20101108184927
737 Ignore-this: 9e07434d1547aaeb022743a88cfa092c
738]
739[Change position of --only-dependencies in --help listing
740Duncan Coutts <duncan@community.haskell.org>**20110213171956
741 Ignore-this: 83fdf75d5d8977bb98d823d656a71335
742 Move it next to the --upgrade-dependencies flag
743]
744[Add an --only-dependencies flag to "install" (see ticket #697)
745josh.hoyt@galois.com**20100630213736
746 Ignore-this: 3c769bcd7a85ee34d1b4787807b75bfc
747 
748 This flag installs only the dependencies of the packages that were
749 explicitly mentioned on the command line. This is useful for using
750 cabal-install in development environments, where the developer needs
751 the dependencies to build the package in development, but does not yet
752 want to install the package itself.
753]
754[Change my email address
755Duncan Coutts <duncan@community.haskell.org>**20110123202100
756 Ignore-this: 924e6bbc7f659a03f6c84d4c32487bf6
757]
758[fix a comment typo of 'according'
759Jens Petersen <petersen@haskell.org>**20110122135339
760 Ignore-this: b7960675f98710b7b5caa046d136ac4d
761]
762[Preserve executable permissions on unpack
763Duncan Coutts <duncan@community.haskell.org>**20110117144900
764 Ignore-this: 5964f7b96672dd84f646bfa80dc51612
765]
766[Fix time version regexp in bootstrap script
767Duncan Coutts <duncan@haskell.org>**20101123174641
768 Ignore-this: 685b17e087526c99faee430447c4af5e
769 Sigh, having to use shell script and regexps...
770]
771[Bump upper bounds on core packages for ghc-7
772Duncan Coutts <duncan@haskell.org>**20101123174328
773 Ignore-this: e098c14caa914e3865767d7ba124e8c
774]
775[Increase default HTTP package version in bootstrap script
776Duncan Coutts <duncan@haskell.org>**20101123173124
777 Ignore-this: 73209e2ee376d55d30b453adef08d7b2
778]
779[Update dependencies in the boostrap.sh script
780Duncan Coutts <duncan@haskell.org>**20101123172516
781 Ignore-this: 29b09c71664a289e0c021df552227d6
782]
783[Bump time package dependency for ghc-7
784Duncan Coutts <duncan@haskell.org>**20101123170957
785 Ignore-this: a397e0ee880ee403dc553ee9ae6b6994
786]
787[Add an extra note about the http proxy decompression issue
788Duncan Coutts <duncan@haskell.org>**20101027095034
789 Ignore-this: d5ac6be96ae78a92f93cf56a9e7b3ccb
790]
791[Use "maybeDecompress" to handle broken proxies that transparenty decompress network streams. Closes #622, #686. Cabal update could fail in some cases, see http://trac.haskell.org/http/ticket/109283
792Dmitry Astapov <dastapov@gmail.com>**20101026212606
793 Ignore-this: 3686236834c6cb56b3a754c36a8d7305
794]
795[Added GZipUtils to handle .tar files with the same code as .tar.gz
796Dmitry Astapov <dastapov@gmail.com>**20101026202343
797 Ignore-this: bef7a20f60de2298fc60759f1ca298d9
798]
799[Update to use Cabal-1.10.x
800Duncan Coutts <duncan@haskell.org>**20101016192816
801 Ignore-this: 86d2b4bd91fe1c33e095b06438f6f972
802]
803[Add a TODO about fetch --constraint flags
804Duncan Coutts <duncan@haskell.org>**20100901210351
805 Ignore-this: 973318ae9ebc87c095935493c446a39d
806]
807[Simplify the bash command completion
808Duncan Coutts <duncan@haskell.org>**20101010204158
809 Ignore-this: 6398703acc0702c18141da4ce09d20db
810 Fixes #741. Patch contributed by Jan Braun <janbraun@gmx.net>
811]
812[Do not add lower case .hs files as modules in cabal init
813Duncan Coutts <duncan@haskell.org>**20100614213536
814 Ignore-this: 622461952f03fd6f80f0037b7336a676
815 There's still something wrong with the recursive dir traversal.
816 It fails in some large cases.
817]
818[Disable cabal upgrade and add cabal install --upgrade-dependencies
819Duncan Coutts <duncan@haskell.org>**20100531130306
820 Ignore-this: 6469bf32fad573bf3a5c2340bd384ef6
821 cabal upgrade now gives an error message telling people to use install
822 or, if they know what they're doing, install --upgrade-dependencies
823]
824[Bump version to 0.9.2
825Duncan Coutts <duncan@haskell.org>**20100531121422
826 Ignore-this: 219c5a2d27e6aaa9639ec88265f3a40f
827]
828[Minor tweaks in haddock code
829Duncan Coutts <duncan@haskell.org>**20100528200326
830 Ignore-this: 170fda28b6b709efc6c5efd171317e83
831]
832[Use new simplistic package resolver for cabal unpack
833Duncan Coutts <duncan@haskell.org>**20100528011523
834 Ignore-this: 85496633aa154e3601633ea9c6f43038
835]
836[Add cabal fetch --no-deps and --dry-run flags
837Duncan Coutts <duncan@haskell.org>**20100528003508
838 Ignore-this: adfaf937df9f81bdc489c8163651d588
839 Allows fetching one or more packages but without fetching their
840 dependencies and thus not requiring that a consistent install plan
841 can be found. On the other hand --no-deps means that there is no
842 guarantee that the fetched packages can actually be installed.
843]
844[Use the simplistic available package resolver in cabal fetch
845Duncan Coutts <duncan@haskell.org>**20100518125509
846 Ignore-this: 5a1caa0e64772c61dfd71b3567c6b218
847 Not yet connected up to the user interface.
848]
849[Add a simplistic resolver for available packages that ignores dependencies
850Duncan Coutts <duncan@haskell.org>**20100518125357
851 Ignore-this: a31605572aa4485898422a9d29aa6630
852 Suitable for cabal fetch/unpack but not for installation.
853]
854[Rearrange dependency resolver code slightly
855Duncan Coutts <duncan@haskell.org>**20100517111624
856 Ignore-this: ed0d580800ccee9b1065acb559727f3f
857]
858[In fetch code, move dep resolution into separate function
859Duncan Coutts <duncan@haskell.org>**20100517111336
860 Ignore-this: 860dfe33f51c1840afb61987e68b27d2
861]
862[Add initial internal support for more kinds of available package
863Duncan Coutts <duncan@haskell.org>**20100511030941
864 Ignore-this: 74c25c42c83819c38608aed18c5ab214
865 Previously only named packages from a remote package archive, or
866 the unpacked package in the current directory. Now also add unpacked
867 packages in particular directories, local tarballs and remote tarballs.
868 No support in the user interface or dep planning yet.
869]
870[Use non-Char8 ByteString.readFile for reading 00-index.tar.gz
871Duncan Coutts <duncan@haskell.org>**20100117113849
872 Ignore-this: b19b19959b7915c202c31337ce2084bc
873 Was showing up on windows as an error decompressing after cabal update.
874 Thanks to Tamar Christina for reporting and helping track down the bug.
875]
876[Remove redundant dry-run support from world file code
877Duncan Coutts <duncan@haskell.org>**20100510054824
878 Ignore-this: fbb943e80a9a54673cbdb1805218bd80
879]
880[Bump version to 0.9.1
881Duncan Coutts <duncan@haskell.org>**20100510034013
882 Ignore-this: 200668c3328194ea707ae61d0d64aa3c
883 New world file feature
884]
885[Workaround for 'cabal install world' problem with empty world file
886Duncan Coutts <duncan@haskell.org>**20100510033051
887 Ignore-this: e5bd44421b734dc3246d43d3ed8c17d1
888 The current dep resolver does not like an empty set of targets
889 along with a non-empty set of constraints.
890]
891[Update a coupld copyright and maintainer notes
892Duncan Coutts <duncan@haskell.org>**20100510032848
893 Ignore-this: bdcc380fc8d631e7ff0f2275bd03b81e
894]
895[A bunch of TODOs for the Install module
896Duncan Coutts <duncan@haskell.org>**20100510032756
897 Ignore-this: 41711e805de2e5052a8b647722215857
898]
899[Misc minor tweaks in Main
900Duncan Coutts <duncan@haskell.org>**20100510032736
901 Ignore-this: 83ec8d4121c0db0327d14e6058feaf6e
902]
903[Update world file entries ignoring version constraints
904Duncan Coutts <duncan@haskell.org>**20100510032457
905 Ignore-this: aa8134bb28d56a32906223a60838f8af
906 Otherwise it is easy to add impossible constraints to the world file.
907 cabal install 'foo > 1' && cabal install 'foo < 1'
908 Would give us a world file with both constraints.
909]
910[Rearrange the code for the world file feature
911Duncan Coutts <duncan@haskell.org>**20100510032121
912 Ignore-this: 8ce13765f2ef77bf562a2e1e38c777b
913 Better better organisation of concerns for it to be in the Install
914 module rather than in Main which is mostly concerned with command
915 line handling.
916]
917[Add plumbing in install code for global flags and target list
918Duncan Coutts <duncan@haskell.org>**20100510031328
919 Ignore-this: 7a559f8b13f43f724f5796c3f7c2bea3
920]
921[Make the logs dir a proper config item and pass it to the install code
922Duncan Coutts <duncan@haskell.org>**20100427011318
923 Ignore-this: 294ef784ebe8ee374035d182b10a6f5
924]
925[Rearrange installation code to make it a bit clearer
926Duncan Coutts <duncan@haskell.org>**20100426005110
927 Ignore-this: 70f9f1fdaf805eabc75d2cebe70153ed
928]
929[Updated patch for world-file support
930Peter Robinson <thaldyron@gmail.com>**20091103202927
931 Ignore-this: 9333ae1f97d44246802504f779efc279
932 Update 2: now uses writeFileAtomic from Cabal
933 This is a new patch for Ticket #199; it adds the "--one-shot" option.
934 A world file entry contains the package-name, package-version, and
935 user flags (if any).
936 For example, the file entry generated by
937 # cabal install stm-io-hooks --flags="-debug"
938 looks like this:
939 # stm-io-hooks -any --flags="-debug"
940 To rebuild/upgrade the packages in world (e.g. when updating the compiler)
941 use
942 cabal install world
943 Installing package 'foo' without adding it to the world file:
944 # cabal install foo --one-shot
945 
946]
947[Import installDirsOptions from Cabal lib
948Duncan Coutts <duncan@haskell.org>**20100401165125]
949[Cope with intra-package deps when constructing install plans
950Duncan Coutts <duncan@haskell.org>**20100320215331
951 Ignore-this: 17d34d739024686d2f3a75a01e1e1c48
952]
953[Don't generate #! lines in Setup.hs files in cabal init
954Duncan Coutts <duncan@haskell.org>**20100114033501
955 We don't want to encourage multiple ways of invoking Setup
956 The one true (cross-platform) way is: runghc Setup
957]
958[Fix the display of the license in "cabal list" output
959Duncan Coutts <duncan@haskell.org>**20100113191913]
960[Adjust to the change in the type of getInstalledPackages
961Duncan Coutts <duncan@haskell.org>**20091229212020
962 It used to return Maybe, now it always gives us a PackageIndex.
963 This depends on an API change in Cabal-1.9.x.
964]
965[Display the exception for failed downloads
966Duncan Coutts <duncan@haskell.org>**20091222132526
967 Not great but better than nothing.
968]
969[Remove now-unused compat module
970Duncan Coutts <duncan@haskell.org>**20091222130959]
971[Change the default config on Windows to per-user installs
972Duncan Coutts <duncan@haskell.org>**20091228165411
973 Ignore-this: afccc874f09efd2b8298ee01163c0462
974 Slightly experimental. We should look out for unexpected consequences.
975]
976[Move downloadURI to HttpUtils module
977Duncan Coutts <duncan@haskell.org>**20091222095152
978 Ignore-this: 6a80342e38c618ed5fe541fc7dfbec08
979 And use exceptions rather than return codes.
980]
981[Fix a couple more ghc-6.12 -Wall warnings
982Duncan Coutts <duncan@haskell.org>**20091222075821
983 Ignore-this: 429818d8b6fc528a155162e0eb67913d
984]
985[Fix cabal sdist --snapshot
986Duncan Coutts <duncan@haskell.org>**20091222080537
987 Ignore-this: a1f090e1bae653645cf5d55055deab3d
988]
989[Distribution/Client/InstallSymlink.hs: explicitely import 'catch' and friend tom System.IO
990Sergei Trofimovich <slyfox@community.haskell.org>**20091220220105
991 Ignore-this: d7a4b304976bc8ce42dfae963d58694c
992]
993[Distribution/Client/Install.hs: removed unused 'compilerTemplateEnv' from import
994Sergei Trofimovich <slyfox@community.haskell.org>**20091220215508
995 Ignore-this: e850510c11ec648f6fcec6d85ce23a82
996]
997[Distribution/Client/Unpack.hs: removed redundant import
998Sergei Trofimovich <slyfox@community.haskell.org>**20091220214545
999 Ignore-this: c1120ee8014c4c1bd3177857798e563d
1000]
1001[Distribution/Client/Setup.hs: suppress warning (unused variable)
1002Sergei Trofimovich <slyfox@community.haskell.org>**20091220214448
1003 Ignore-this: 382010da79af4baf200a406d478cc5ec
1004]
1005[Distribution/Client/Haddock.hs: removed redundant instances
1006Sergei Trofimovich <slyfox@community.haskell.org>**20091220213757
1007 Ignore-this: efffb1cd16256496f70314cce6001c6f
1008]
1009[Distribution/Client/BuildReports/Anonymous.hs: removed unused import of BuildResult
1010Sergei Trofimovich <slyfox@community.haskell.org>**20091220213350
1011 Ignore-this: 50c449c43df34ceb1b13c61788bb0758
1012]
1013[Distribution/Client/IndexUtils.hs: fixed warning on -Wall (unused result)
1014Sergei Trofimovich <slyfox@community.haskell.org>**20091220211940
1015 Ignore-this: a74aded9f99237229dbfe762fcf20478
1016]
1017[Distribution/Client/SrcDist.hs: fixed warning on -Wall (unused result)
1018Sergei Trofimovich <slyfox@community.haskell.org>**20091220211717
1019 Ignore-this: d7d4fade7b5e5464d114995efdabb216
1020]
1021[Fix fromFlag error in upgrade
1022Duncan Coutts <duncan@haskell.org>**20091221140752
1023 Ignore-this: 82eee01373bf121c1c00a7c5d27bac0f
1024 Use the missing defaultInstallFlags.
1025]
1026[Reorder commands in cabal --help output
1027Duncan Coutts <duncan@haskell.org>**20091219034451]
1028[Use the standard form of copyright statement in BSD3 license template
1029Duncan Coutts <duncan@haskell.org>**20091219031017
1030 See http://www.opensource.org/licenses/bsd-license.php
1031]
1032[Remove stability feature from cabal init
1033Duncan Coutts <duncan@haskell.org>**20091219030855
1034 The stability field in .cabal files is deprecated since it's mostly useless.
1035]
1036[Make the cabal init command line flag names follow the normal convention
1037Duncan Coutts <duncan@haskell.org>**20091219030747
1038 Using hyphens rather than upper case.
1039]
1040[Fix reporting of installed program versions in cabal list
1041Duncan Coutts <duncan@haskell.org>**20091218232501
1042 We do not know if programs are installed or not so report
1043 unknown rather than saying it is not installed.
1044]
1045[Update the README
1046Duncan Coutts <duncan@haskell.org>**20091218173459
1047 Ignore-this: adde7b8406a92837f295ed3d57037827
1048]
1049[Bump head to new dev version 0.9.x
1050Duncan Coutts <duncan@haskell.org>**20091218172245
1051 Ignore-this: 378cbb031583940fb4e301d0e640c396
1052]
1053[Update various .cabal bits
1054Duncan Coutts <duncan@haskell.org>**20091218171642
1055 Ignore-this: a54518592cf53158e6a01ff7ad8753ef
1056]
1057[Update the bootstrap script to work with ghc-6.12
1058Duncan Coutts <duncan@haskell.org>**20091218165234
1059 Ignore-this: b4aca31e814592f1cd6d53cf5a461859
1060 We can no longer expect mtl, network and parsec to be installed.
1061]
1062[Update the changelog for 0.8
1063Duncan Coutts <duncan@haskell.org>**20091218165221
1064 Ignore-this: 35f1f722b56c7eec84574e9d4be0d0f3
1065]
1066[Fix combination of --global --package-db when compiling Setup.hs scripts
1067Duncan Coutts <duncan@haskell.org>**20091218165119
1068 Ignore-this: 6a78eaf39c21dfc692458f1046d852ce
1069 The order of the package db stack is important.
1070]
1071[Allow numeric fields in tar headers that use binary format
1072Duncan Coutts <duncan@haskell.org>**20091123063734
1073 This is an old non-standard extension that some tar tools still use.
1074]
1075[Create all parent directories of extraced files
1076Duncan Coutts <duncan@haskell.org>**20091122080446
1077 Previously only created the immediate parent directory.
1078 No rely more heavily on the file security check to make
1079 sure we are not writing files outside of the target area.
1080]
1081[Ignore PAX entries when checking for tarbombs
1082Duncan Coutts <duncan@haskell.org>**20091122080255
1083 When checking for tarbombs, ignore PAX entry types 'g' and 'x'.
1084 These do not get extracted so their names do not matter.
1085]
1086[fixed 'cabal sdist'
1087Sergei Trofimovich <slyfox@community.haskell.org>**20091113165833
1088 Ignore-this: a9061231f18a00fda66bd73e0d4bac86
1089]
1090[Build with ghc-6.6
1091Duncan Coutts <duncan@haskell.org>**20091110113735
1092 Ignore-this: 939c6d822b78b7966ccc37a0739ecc81
1093]
1094[Fix base 4 exceptions in #ifdef WIN32 code section
1095Duncan Coutts <duncan@haskell.org>**20091110112415
1096 Ignore-this: 53ad5959a1964ff8eccf93c17dd1e3d7
1097]
1098[Add a couple checks to "cabal unpack" and improve the messages
1099Duncan Coutts <duncan@haskell.org>**20091104142658
1100 Ignore-this: 896cf992e5862393bb5e451a337545fa
1101]
1102[Fix bootstrap (#599)
1103Robin Green <greenrd@greenrd.org>**20091102073414
1104 Ignore-this: 67304fe1c399d679c0c7a7d0d01cff45
1105 
1106]
1107[Switch to using some Utils from the Cabal lib
1108Duncan Coutts <duncan@haskell.org>**20091102150528
1109 Ignore-this: fe55da37cc85ce495a65949506ac3e42
1110 Remove local copies. Also fixes a bug recently introduced
1111 in the writeFileAtomic function, spotted by Peter Robinson.
1112]
1113[Parly fix building with ghc-6.6
1114Duncan Coutts <duncan@haskell.org>**20091028163849
1115 Ignore-this: 75f4ae640c2c2d7d46cd4c00d835b618
1116 The new cabal init stuff needs some work.
1117]
1118[Fix building with ghc-6.12
1119Duncan Coutts <duncan@haskell.org>**20091028163719
1120 Ignore-this: eb25e32b7696174a4702394ea59e03bc
1121]
1122[Fix building with ghc-6.8
1123Duncan Coutts <duncan@haskell.org>**20091028163352
1124 Ignore-this: 9dc502c70fd2e5940729656168030953
1125]
1126[Allow building with base 4
1127Duncan Coutts <duncan@haskell.org>**20091028163148
1128 Ignore-this: 2ac8c966a4a014af94a21b7801331c19
1129]
1130[Bump version number a bit
1131Duncan Coutts <duncan@haskell.org>**20091028133527
1132 Ignore-this: e2a10bab1da090c8aeedeb6dba74cb3
1133]
1134[Update list of modules (so sdist works)
1135Duncan Coutts <duncan@haskell.org>**20091028133513
1136 Ignore-this: 91abc5688f598cf0a5ecf96855ccfe76
1137]
1138[Update new cabal init code for the recent package id changes
1139Duncan Coutts <duncan@haskell.org>**20091028132037
1140 Ignore-this: 83f7b69c2a0727dba37dd7242a4f5791
1141]
1142[Initial go at converting to the new Cabal-1.8 installed package system
1143Duncan Coutts <duncan@haskell.org>**20091022123946
1144 Ignore-this: 5e6665609e707de9dc73612b0efd25e9
1145 It works by ignoring the possibility that there could be multiple
1146 installed packages sharing the same source package Id. We just pick
1147 the "top most" one which is usually ok. We make no attempt to check
1148 that we are using consistent installed packages.
1149]
1150[Update for changes to finalizePackageDescription
1151Duncan Coutts <duncan@haskell.org>**20091018173233
1152 Ignore-this: f60d2b66f9f0e223599ab15ac78d112c
1153]
1154[add 'init' subcommand for initializing project cabalisation
1155Brent Yorgey <byorgey@cis.upenn.edu>**20091011165644
1156 Ignore-this: df51056f9e138d38d64f48c86cdf6376
1157]
1158[Collecting some heuristics for creating an initial cabal file
1159benedikt.huber@gmail.com**20090902160332
1160 Ignore-this: 50eb36690a888529d209f9da5af15078
1161]
1162[Apply suggestion for bootstrap failure message
1163Duncan Coutts <duncan@haskell.org>**20091020212319
1164 Ignore-this: 70ed13514b158db7672f5d16a9ed90ea
1165 ghc ticket #3602
1166]
1167[Fix calculation of paths in check for bindir symlink overwriting
1168Duncan Coutts <duncan@haskell.org>**20090829004959
1169 Ignore-this: d4dd8e12c03d23ce935de94cedbda257
1170 We were doing it wrong, but Linux realpath() C function was letting
1171 us get away with it. The Solaris realpath() is stricter.
1172 The new implementation is also simpler, relying on the fact that
1173 the canonicalizePath function will resolve symlinks.
1174]
1175[Require Cabal lib version 1.7.3
1176Duncan Coutts <duncan@haskell.org>**20090707095944
1177 Needs recent api changes.
1178]
1179[Make the documentation toggle determine if we make the haddock index
1180Duncan Coutts <duncan@haskell.org>**20090707013030
1181 Previously the --haddock-index=template flag controled both the
1182 template used and whether it's used at all. When no path was set
1183 then it was not used. The problem with that is that since we are
1184 not enabling this feature by default then the default is blank.
1185 That is the default config file would look like:
1186 -- haddock-index:
1187 which doesn't help anyone discover what it means or what a
1188 sensible setting would be. By having a separate toggle to     
1189 enable/disable we can have a default for the index file which
1190 makes it easy to discover in the config file:
1191 -- documentation: False
1192 -- doc-index-file: $datadir/doc/index.html
1193 All the user has to do is uncomment the first line and use True.
1194]
1195[Be less noisy about warning about packages with missing docs
1196Duncan Coutts <duncan@haskell.org>**20090707005149]
1197[Use defaultInstallFlags as the defaults
1198Duncan Coutts <duncan@haskell.org>**20090707004836]
1199[Move regenerateHaddockIndex more out-of-line in the Install module
1200Duncan Coutts <duncan@haskell.org>**20090707003722
1201 Also update the code somewhat following the changes in
1202 the Cabal API for path templates and substitutions.
1203]
1204[Use $pkgroot/package/$pkgid.tar.gz as tarball URL
1205Duncan Coutts <duncan@haskell.org>**20090704170602]
1206[#516, maintains a per-user index of haddock docs
1207Andrea Vezzosi <sanzhiyan@gmail.com>**20090607170512
1208 Ignore-this: 1114f6b944043781c4bf99620573b1cc
1209 If the haddock-index flag is set it keeps an index
1210 of the haddock documentation of the packages in
1211 the global and user databases
1212]
1213[Now supporting explicit --user or --global switches in bootstrap.sh with usage feedback for bad args
1214Dino Morelli <dino@ui3.info>**20090613150958
1215 Ignore-this: 490a4fcdd5bc1940d6f32d71b0a042a5
1216 This change was adapted from work submitted to the cabal-devel mailing list by Jason Dusek.
1217]
1218[add message to 'package not found' error advising to run 'cabal update'. (#497)
1219Brent Yorgey <byorgey@cis.upenn.edu>**20090611171233]
1220[Fix sdist
1221Duncan Coutts <duncan@haskell.org>**20090605023441
1222 Fix handling of base dir in tar file creation.
1223]
1224[Fix use of deprecated version constructors
1225Duncan Coutts <duncan@haskell.org>**20090604180500]
1226[Only report preferred new versions of cabal-install are available
1227Duncan Coutts <duncan@haskell.org>**20090604175726
1228 That is, use the "preferred-versions" mechanism when deciding
1229 whether there is a new version available. This would allow us to
1230 upload a new version without everyone immediately being told to
1231 get it and try it out.
1232]
1233[Make cabal upload/check print out the error messages reported by the server
1234Duncan Coutts <duncan@haskell.org>**20090604124836
1235 The code to do it was already there but we were checking for the
1236 mime type text/plain using just (==) when in fact the server reports 
1237   text/plain; charset="ISO-8859-1"
1238 so we have to parse the field a bit better (still a bit of a hack).
1239]
1240[Require latest Cabal lib version
1241Duncan Coutts <duncan@haskell.org>**20090603102312]
1242[Improve formatting of cabal check output
1243Duncan Coutts <duncan@haskell.org>**20090603102254]
1244[Only apply preferences to base if its version is unbounded above
1245Duncan Coutts <duncan@haskell.org>**20090603101623
1246 Fixes ticket #485. This means that for constraints like:
1247     build-depends: base >= 3 && < 5
1248 we will pick version 4. However we will continue to apply the
1249 version 3 preference for things like:
1250     build-depends: base >= 3
1251 Where there is no upper bound on the version. Note that we now
1252 also ignore preferences for base given on the command line.
1253 We should implement #483 to split prefs from shims.
1254]
1255[Improve the parse error message for package name/deps
1256Duncan Coutts <duncan@haskell.org>**20090321154623
1257 Make it clear that it's the specification of the package name that
1258 is at fault rather than the package to which the name refers.
1259]
1260[Debian in their wisdom decided to build network against parsec 3.
1261Duncan Coutts <duncan@haskell.org>**20090308142925
1262 So checking for parsec 2 fails. We don't strictly need parsec, it's
1263 just a dependency of network, so remove the check.
1264]
1265[Simplify version ranges before printing in error messages
1266Duncan Coutts <duncan@haskell.org>**20090531191346
1267 Part of ticket #369
1268]
1269[Use new top handler, should get better error messages
1270Duncan Coutts <duncan@haskell.org>**20090531190318]
1271[Fix uses of deprecated stuff
1272Duncan Coutts <duncan@haskell.org>**20090531190239]
1273[New development branch, version 0.7
1274Duncan Coutts <duncan@haskell.org>**20090531184336
1275 Update to development version of Cabal
1276]
1277[Solaris 9 /bin/sh doesn't like the ! syntax in bootstrap.sh
1278Duncan Coutts <duncan@haskell.org>**20090318091730]
1279[Clarify the instructions in the README and bootstrap.sh
1280Duncan Coutts <duncan@haskell.org>**20090315125407
1281 Addresses the complaint in ticket #523.
1282]
1283[Select Configuration file via env var CABAL_CONFIG.
1284Paolo Losi <paolo.losi@gmail.com>**20090223005251
1285 Ignore-this: 26e5ded85cb69cb3a19cd57680a8a362
1286]
1287[Update tar code based on new tar package
1288Duncan Coutts <duncan@haskell.org>**20090301174949]
1289[Actually does compile with unix-1.0 that comes with ghc-6.6
1290Duncan Coutts <duncan@haskell.org>**20090221154605
1291 ghc-6.6.1 came with unix-2.1
1292]
1293[TAG 0.6.2
1294Duncan Coutts <duncan@haskell.org>**20090219130720]
1295[Update the README
1296Duncan Coutts <duncan@haskell.org>**20090219130705]
1297[Add missing other-modules
1298Duncan Coutts <duncan@haskell.org>**20090218235206]
1299[Add extra assertion into the top down dep planner
1300Duncan Coutts <duncan@haskell.org>**20090218234650]
1301[Bump version to 0.6.2
1302Duncan Coutts <duncan@haskell.org>**20090218231016]
1303[Update changelog for 0.6.2 release
1304Duncan Coutts <duncan@haskell.org>**20090218230918]
1305[Tweaks to the bootstrap script
1306Duncan Coutts <duncan@haskell.org>**20090218223943
1307 Update Cabal lib version to 1.6.0.2
1308 Implement a couple shell script coding style recommendations.
1309]
1310[Disable the upgrade command for now.
1311Duncan Coutts <duncan@haskell.org>**20090218221752]
1312[Add warnings in the case that no remote servers have been specified
1313Duncan Coutts <duncan@haskell.org>**20090216181424
1314 It's not strictly an error but it can be rather confusing.
1315]
1316[Put an explanation of the config file format at the top in comments.
1317Duncan Coutts <duncan@haskell.org>**20090215190817]
1318[Change the field order in the initial config file.
1319Duncan Coutts <duncan@haskell.org>**20090215190727
1320 Also update the name of one excluded field.
1321]
1322[Put the default logging and reporting setting in the initial config file.
1323Duncan Coutts <duncan@haskell.org>**20090215190524]
1324[Complete the implementation of --build-summary=TEMPLATE
1325Duncan Coutts <duncan@haskell.org>**20090215190254
1326 Actually respect the new flag. It's actually a list of template files
1327 and all specified files get written to. This allows us to specify
1328 a default build log file and also have the user write to extra ones.
1329 The summary file template can contain $pkgid $compiler etc.
1330]
1331[Rearrange user interface for build logging
1332Duncan Coutts <duncan@haskell.org>**20090215185800
1333 The new options (as described in ticket #501) are:
1334   --build-summary=TEMPLATE
1335   --build-log=TEMPLATE
1336   --remote-build-reporting=LEVEL
1337   where LELVEL `elem` [none,anonymous,detailed]
1338]
1339[always check environment variables for HTTP proxy first
1340Ganesh Sittampalam <ganesh.sittampalam@credit-suisse.com>**20090210230736]
1341[Improve the cabal update notice
1342Duncan Coutts <duncan@haskell.org>**20090209211844]
1343[Don't report that packages are cached at the default verbosity level
1344Duncan Coutts <duncan@haskell.org>**20090209201228
1345 It's just not that useful. Report it at -v verobisty level, and
1346 change the text and formatting.
1347]
1348[Fix #490, unpack now gives a proper error message.
1349Andrea Vezzosi <sanzhiyan@gmail.com>**20090208165240
1350 Ignore-this: 358dd291624f8858a52ae2ff27a7e0c2
1351]
1352[Use the new withTempDirectory function
1353Duncan Coutts <duncan@haskell.org>**20090202012255
1354 In particular it means that install will unpack packages into
1355 different temp dirs on each invocation which means that running
1356 install on the same package for different compilers at the same
1357 time should not clash. This is quite useful for testing.
1358]
1359[Add compat withTempDirectory function
1360Duncan Coutts <duncan@haskell.org>**20090202011917
1361 This is already in Cabal HEAD but we cannot use that yet
1362]
1363[Add homepage and bug-reports fields to .cabal file
1364Duncan Coutts <duncan@haskell.org>**20090201225021]
1365[Remove the prefernece and cabal lib version flags from the InstallFlags
1366Duncan Coutts <duncan@haskell.org>**20090126012412
1367 They are now in the ConfigExFlags instead.
1368]
1369[Change the install and configure modules to use the extended config flags
1370Duncan Coutts <duncan@haskell.org>**20090126011942]
1371[Add ConfigExFlags into the configure, install and upgrade commands
1372Duncan Coutts <duncan@haskell.org>**20090126010918
1373 Not yet passed all the way through.
1374]
1375[Add ConfigExFlags and related command
1376Duncan Coutts <duncan@haskell.org>**20090126010132
1377 This is for configure flags that we use in the configure command in the
1378 cabal command line tool that are not present in runghc Setup configure
1379 command line interface. These are flags that we are moving from the
1380 install command, so that we can also use them for the configure command.
1381 Initially it's just the flags for specifying package version preferences
1382 and  the cabal library version. We'll add constraints later.
1383]
1384[Remove unnecessary qualified use of ConfigFlags
1385Duncan Coutts <duncan@haskell.org>**20090126003951]
1386[Make configure use the dependency resolver
1387Duncan Coutts <duncan@haskell.org>**20090125170951
1388 This means it makes smarter decisions and also decions that are more
1389 consistent with those taken by the install command.
1390]
1391[Update HTTP dep in the bootstrap script
1392Duncan Coutts <duncan@haskell.org>**20090123160700]
1393[Improve error message when ghc or ghc-pkg are mismatched or not found
1394Duncan Coutts <duncan@haskell.org>**20090123160550]
1395[Don't use grep -e, solaris does not like it
1396Duncan Coutts <duncan@haskell.org>**20090123160443]
1397[Fix some FIXMEs and do some TODOs in the list command
1398Duncan Coutts <duncan@haskell.org>**20090123004810
1399 Now properly prints if the haddock docs are installed and if the
1400 tarball is cached. It did print them before but it was lying.
1401]
1402[Add initial implementation of cabal info
1403Duncan Coutts <duncan@haskell.org>**20090119025202
1404 It provides more detailed information on a particular package.
1405 Still a few TODOs. Fixes #361, #449 and #456.
1406]
1407[Only print the config file location for the global --help
1408Duncan Coutts <duncan@haskell.org>**20090116175900]
1409[Update to using HTTP-4000.x
1410Duncan Coutts <duncan@haskell.org>**20090116135646
1411 This should fix a long-standing bug with http proxies (ticket #352)
1412 It should also make downloads faster, or at least use less memory.
1413]
1414[Parse compiler field from old config files correctly
1415Duncan Coutts <duncan@haskell.org>**20090116002851
1416 Really old versions of cabal-install generated a default config
1417 containing "compiler: GHC". Sadly the new way we generate the
1418 config file parser from the command line parser means we end up
1419 with a case-sensitive parser as it only matches the exact
1420 command line flags. So we hack it and add in a traditional
1421 parser for that field only. Really the command line and config
1422 file infrastructure needs rewriting again. Sigh.
1423]
1424[Improve the printing of config file field parse error messages
1425Duncan Coutts <duncan@haskell.org>**20090116001421]
1426[Read install dirs correctly from old-style .cabal/config files
1427Duncan Coutts <duncan@haskell.org>**20090116001321
1428 Should fix ticket #365
1429]
1430[Note in the README that zlib needs the zlib C lib package
1431Duncan Coutts <duncan@haskell.org>**20090116000541]
1432[Traditional /bin/sh portability fixes for bootstrap.sh
1433Duncan Coutts <duncan@haskell.org>**20090115113227]
1434[More improvments to the bootstrap.sh script
1435Duncan Coutts <duncan@haskell.org>**20090115110612]
1436[Rewrite the bootstrap.sh script
1437Duncan Coutts <duncan@haskell.org>**20090115102210
1438 Hopefully more useful and more robust. In particular it does not
1439 download and install packages where suitable versions are already
1440 installed. It also checks for deps.
1441]
1442[Don't add installed constraints system packages that are not installed
1443Duncan Coutts <duncan@haskell.org>**20090114143540
1444 In particular fixes a problem (ticket #439) where we required the
1445 installed version of ghc-prim with compilers that do not have that
1446 package such as ghc-6.8 and older, hugs, nhc, lhc etc.
1447]
1448[cabal update now reports if a newer version of cabal-install is available
1449Duncan Coutts <duncan@haskell.org>**20090114133220]
1450[Warn if a package index from a remote repo is 15 days or older
1451Duncan Coutts <duncan@haskell.org>**20090114124827
1452 For example it will print:
1453 Warning: The package list for 'hackage.haskell.org' is 16 days old.
1454 Run 'cabal update' to get the latest list of available packages.
1455]
1456[Don't display the category in cabal list output
1457Duncan Coutts <duncan@haskell.org>**20090114003549
1458 It is probably not sufficiently useful to justify the space it takes.
1459]
1460[In cabal list, always display available and installed versions
1461Duncan Coutts <duncan@haskell.org>**20090114003329
1462 Previously we omitted the line if it was not installed, or was
1463 not available. However that confused people because it was not
1464 obvious that it would list both. Now it shows something like:
1465  * foo
1466        Latest version available: 1.0
1467        Latest version installed: [ Not installed ]
1468]
1469[Print the location of the config file in the global --help
1470Duncan Coutts <duncan@haskell.org>**20090113192215
1471 Ticket #413
1472]
1473[Improve the cabal --help output
1474Duncan Coutts <duncan@haskell.org>**20090113192058
1475 Put the general info message at the top and make the explanation of
1476 installing a hackage package somewhat clearer.
1477]
1478[Display examples in cabal install --help
1479Duncan Coutts <duncan@haskell.org>**20090113161426
1480 Examples:
1481   cabal install                     Package in the current directory
1482   cabal install foo                 Package from the hackage server
1483   cabal install foo-1.0             Specific version of a package
1484   cabal install 'foo < 2'           Constrained package version
1485]
1486[Print a newline after entering upload password
1487Duncan Coutts <duncan@haskell.org>**20090113142604
1488 So we end up with:
1489   Hackage password:
1490   Uploading test.tar.gz...
1491 rather than:
1492   Hackage password: Uploading test.tar.gz...
1493]
1494[Respect the --package-db flag when compiling Setup.hs
1495Duncan Coutts <duncan@haskell.org>**20081221184755
1496 Fixes ticket #394.
1497]
1498[Use a more precise package substitution test in improvePlan
1499Duncan Coutts <duncan@haskell.org>**20081219215922
1500 This is where we take a valid plan and we "improve" it by swapping
1501 installed packages for available packages wherever possible. This
1502 change is to the condition we use in deciding if it is safe to use
1503 the installed package in place of a reinstall. Previously we checked
1504 that the dependencies of the installed version were exactly the same
1505 as the dependencies we were planning to reinstall with. That was
1506 valid but rather conservative. It caused problems in some situations
1507 where the installed package did not exactly match the available
1508 package (eg when using development versions of a package or of ghc).
1509 What we do now is test if the extra constraints implied by selecting
1510 the installed version are consistent with the existing set of
1511 constraints. This involves threading the constraint set around. In
1512 theory this should even cope with adding additional packages to the
1513 plan as a result of selecting an installed package.
1514]
1515[Use installed constraints instead of hiding versions of the base package
1516Duncan Coutts <duncan@haskell.org>**20081219193740
1517 We want to stop cabal-install from accidentally trying to upgrade
1518 the base package since this doesn't work in most cases. We used to
1519 achieve that by deleting the base package from the available package
1520 index. We now do it by leaving the package index as is and instead
1521 adding a constraint that we pick only an installed version of base.
1522 This is a nicer hack and has the potential to give better error
1523 messages.
1524]
1525[Extend the invariant on the Constraints ADT
1526Duncan Coutts <duncan@haskell.org>**20081219192309
1527 It now carries around the original version of the database
1528 purely so that it can do a much more extensive consistency
1529 check. Packages are never gained or lost, just transfered
1530 between pots in various slightly tricky ways.
1531]
1532[Fix constraint set handling for installed constraints
1533Duncan Coutts <duncan@haskell.org>**20081219182328
1534 A rather subtle bug. The code was actually correct but the transitionsTo
1535 assertion was not accounting for a transition between the case where
1536 a package's available version had been excluded and then the whole thing
1537 got excluded by a version constraint. It counted one side as a loss
1538 without a corresponding gain on the other side.
1539]
1540[Add a install/upgrade --preference='foo < 2' flag
1541Duncan Coutts <duncan@haskell.org>**20081218213849
1542 This behaves just like the preferred-versions file in the hackage index
1543 but it can be specified on the command line or in a config file.
1544]
1545[Generalise the way preferences are specified to the resolver
1546Duncan Coutts <duncan@haskell.org>**20081218204917
1547 We still provide a default global policy, but now we give a
1548 list of per-package preferences which can be on the version
1549 or installed state. Later preferences override earlier ones.
1550]
1551[Workaround for a url parsing bug that breaks http proxies that need auth
1552Duncan Coutts <duncan@haskell.org>**20081218165541
1553 Diagnosis and patch from Valery V. Vorotyntsev.
1554]
1555[Implement cabal install --constraint=
1556Duncan Coutts <duncan@haskell.org>**20081216235032
1557 Connect up the existing user interface with the new dep resolver api.
1558]
1559[Have the dep resolver take constraints and targets separately
1560Duncan Coutts <duncan@haskell.org>**20081216233446]
1561[Add PackageInstalledConstraint to the PackageConstraint type
1562Duncan Coutts <duncan@haskell.org>**20081215224538
1563 This should be useful for things like preventing upgrading
1564 the base package for ghc.
1565]
1566[A bit more renaming in the top down resolver
1567Duncan Coutts <duncan@haskell.org>**20081215224324]
1568[Take preferences into account in the bogus resolver
1569Duncan Coutts <duncan@haskell.org>**20081215221728]
1570[Mostly renaming and trivial refactoring
1571Duncan Coutts <duncan@haskell.org>**20081215221034]
1572[Change the dep resolver interface to pass constraints separately from targets
1573Duncan Coutts <duncan@haskell.org>**20081215215634
1574 This lets us specify constraints for packages that are not targets.
1575]
1576[Rename and rearrange the PackagePreferences type
1577Duncan Coutts <duncan@haskell.org>**20081215204836]
1578[Don't re-export PackageName from Distribution.Client.Dependency
1579Duncan Coutts <duncan@haskell.org>**20081215203617
1580 It used to be a type alias.
1581]
1582[Use the Platform type rather than passing around the OS and Arch separately
1583Duncan Coutts <duncan@haskell.org>**20081215202856]
1584[Bump version to 0.6.1
1585Duncan Coutts <duncan@haskell.org>**20081210224713]
1586[Tidy up the unpack code
1587Duncan Coutts <duncan@haskell.org>**20081210223633
1588 Also fix a bug for tar files that contain entries for files
1589 without preceding entries for the directories they are in.
1590]
1591[Clean up the code in Main
1592Duncan Coutts <duncan@haskell.org>**20081210223242
1593 Make the names more regular and set up the various flags
1594 in a more regular way.
1595]
1596[Use (\_ -> []) instead of mempty to avoid funky Monoid instance
1597Duncan Coutts <duncan@haskell.org>**20081210223106
1598 This would let us build with ghc-6.4 or nhc if it were not for other issues.
1599]
1600[Fix warning aobut -fffi in OPTIONS pragma
1601Duncan Coutts <duncan@haskell.org>**20081203005449]
1602[Mention where files get downloaded to at verbosity level verbose
1603Duncan Coutts <duncan@haskell.org>**20081203004427]
1604[Implement 'cabal unpack' command as in #390
1605Andrea Vezzosi <sanzhiyan@gmail.com>**20081113185923]
1606[Remove use of tabs
1607Duncan Coutts <duncan@haskell.org>**20081122163527]
1608[Put explicit lower bound on version of base
1609Duncan Coutts <duncan@haskell.org>**20081122163151
1610 It does not build with ghc-6.4.2, missing Functor instance for Either.
1611]
1612[Use a more general fix for "cabal install base"
1613Duncan Coutts <duncan@haskell.org>**20081122163026
1614 It's not specific to LHC. Normally we prevent upgrading of base
1615 since it's unlikely to work and would normally be accidental.
1616 However when the user explicitly asks to upgrade base then we
1617 let them do that and they can keep the pieces when it breaks.
1618]
1619[Warn about use of tabs
1620Duncan Coutts <duncan@haskell.org>**20081122154309]
1621[Only send the base file name when uploading tarballs
1622Duncan Coutts <duncan@haskell.org>**20080903230334
1623 The server should ignore the dir part anyway but there's no
1624 need to send it in the first place.
1625]
1626[Slightly better lhc support.
1627Lemmih <lemmih@gmail.com>**20081121034338
1628 Ignore-this: 9f51f465aa87d1c6677ca492f877ecd6
1629]
1630[TAG 0.6.0
1631Duncan Coutts <duncan@haskell.org>**20081011195420]
1632[Bump version to 0.6.0
1633Duncan Coutts <duncan@haskell.org>**20081011195314]
1634[Improve the README, better install instructions
1635Duncan Coutts <duncan@haskell.org>**20081011185919
1636 And slightly better intro guide to the main commands.
1637]
1638[Bump versions of deps in the bootstrap script
1639Duncan Coutts <duncan@haskell.org>**20081011184937]
1640[Add Eq for a couple types in the anon build reports
1641Duncan Coutts <duncan@haskell.org>**20081011184825]
1642[Drop silly export
1643Duncan Coutts <duncan@haskell.org>**20081011184805]
1644[Apparnetly builds with unix-2.0 which is what came with ghc-6.6
1645Duncan Coutts <duncan@haskell.org>**20081010234836]
1646[Fix the -i dir for compiling Setup.hs when it's the current dir
1647Duncan Coutts <duncan@haskell.org>**20081010234558
1648 map "" to "."
1649]
1650[Tidy up the preferred-versions file parser
1651Duncan Coutts <duncan@haskell.org>**20081010070105]
1652[Bump version number and dependencies
1653Duncan Coutts <duncan@haskell.org>**20081010065854]
1654[Relax deps to build with ghc-6.10
1655Duncan Coutts <duncan@haskell.org>**20081007230701]
1656[Handle build reports with missing logs better
1657Duncan Coutts <duncan@haskell.org>**20081007230635]
1658[Add DownloadFailed as a possible failure for installation
1659Duncan Coutts <duncan@haskell.org>**20081007230418
1660 Should now be caught during installing a bunch of packages
1661 and not cause immediate overall failure. It should instead
1662 be treated like any other package build failure and be
1663 reported at the end and only affect other dependent builds.
1664]
1665[Fix search paths for compiling Setup.hs scrips
1666Duncan Coutts <duncan@haskell.org>**20081007213630
1667 and in particular for bootstrapping the Cabal lib.
1668]
1669[Fix selecting paired packages
1670Duncan Coutts <duncan@haskell.org>**20081007062930
1671 Previously when we selected base 4 (and as a consequence
1672 slected base 3 too) we didn't properly trace the dependencies
1673 of base 3 so if nothing actually required base 3 then we ended
1674 up with base 3 in the solution but not with syb which it
1675 depends on. Consequently the solution was invalid.
1676 Now we select the paired package properly (hopefully).
1677]
1678[Take preferred versions into account in dependency planning
1679Duncan Coutts <duncan@haskell.org>**20081006055129
1680 This means we can now globally prefer base 3 rather than 4.
1681 However we need to be slightly careful or we end up deciding
1682 to do silly things like rebuild haskell98 against base 3.
1683 That would happen because the h98 package doesn't constrain
1684 the choice to one or the other and we would prefer base 3.
1685 So we have to add that we really prefer whatever it uses
1686 currently (if any).
1687]
1688[Pass the package suggested version constraints through to the resolver
1689Duncan Coutts <duncan@haskell.org>**20081006042758
1690 Not used yet.
1691]
1692[Fix selection of paired packages
1693Duncan Coutts <duncan@haskell.org>**20081006040616]
1694[Read preferred versions from the package index
1695Duncan Coutts <duncan@haskell.org>**20081006030259
1696 From a file named 'preferred-versions' in the 00-index.tar.gz
1697 If there are several they are combined. Contents is like:
1698 base < 4
1699 one suggested version constraint per line.
1700]
1701[Refactor and update the hackage index reading code
1702Duncan Coutts <duncan@haskell.org>**20081005202747]
1703[Print more details about what is to be installed with -v
1704Duncan Coutts <duncan@haskell.org>**20081005075556
1705 Reports if installs are new or reinstalls and for reinstalls
1706 prints what dependencies have changed.
1707]
1708[When finalising paired packages, cope with there being multiple choices
1709Duncan Coutts <duncan@haskell.org>**20081005053821
1710 For ordinary packages we selected a single version which means
1711  we added an equality constraint. As a consequence we used to
1712 assume there was only one version left when finalising. For
1713 paired packages there may be two versions left if the package
1714 did not directly constrain the choice to just one. If there is
1715 more than one version remaining then we have to pick between
1716 them. At the moment we still pick the highest version, but
1717 later we can take a global preference or polciy into account.
1718]
1719[When selecting paired packages, select both.
1720Duncan Coutts <duncan@haskell.org>**20081005053804]
1721[Handle constraints on paired packages
1722Duncan Coutts <duncan@haskell.org>**20081005051919
1723 The trick is that when applying constraints to paired
1724 packages, the constraint has to exclude both packages at
1725 once. We exclude the pair together or not at all. If it
1726 would only exclude one then we discard the constraint.
1727]
1728[Add the notion of paired packages to the Constraints ADT
1729Duncan Coutts <duncan@haskell.org>**20081005013141
1730 Packages like base-3 and base-4 are paired. This means they are
1731 supposed to be treated equivalently in some contexts. Paired
1732 packages are installed packages with the same name where one
1733 version depends on the other.
1734]
1735[Make InstalledPackage an instance of PackageFixedDeps
1736Duncan Coutts <duncan@haskell.org>**20081005012741]
1737[Add the glue code to actully report excluded packages
1738Duncan Coutts <duncan@haskell.org>**20081005001400
1739 Now displayed in the output of install --dry-run -v
1740]
1741[Have Constraints.constrain report the excluded packages
1742Duncan Coutts <duncan@haskell.org>**20081004235006
1743 Each time we apply a constraint we can end up excluding some
1744 extra package. Report that list of packages because it is
1745 quite interesting information to get insight into what the
1746 resolver is actually doing.
1747]
1748[Separate the construction of the exclusion list from its use
1749Duncan Coutts <duncan@haskell.org>**20081004234421
1750 Previously directly inserted packages into the excluded package
1751 list. Now we generate a list of them and then add them. We want
1752 the list of newly excluded packages separately because it is
1753 interesting information to report to the user when -v is on.
1754]
1755[Generalise the logging of selected and discarded packages
1756Duncan Coutts <duncan@haskell.org>**20081004232555
1757 Allow for selecting several packages in one go.
1758 Currently when we select a package we only list the over versions
1759 of the same package that that excludes, and not the other packages
1760 we exclude by applying the dependency constraints of the selected
1761 package. In future we would like to do that so we now report the
1762 package name of discards not just the version. Though we do group
1763 by the package name to avoid too much repition.
1764]
1765[Fix infinite loop in the TopDown dependency resolver
1766Andrea Vezzosi <sanzhiyan@gmail.com>**20080925181441
1767 The loop occurred only if a package depended on another one
1768 with the same name, e.g. base-3.0.3.0 <- base-4.0.0.0
1769]
1770[small improvements to bootstrap
1771Duncan Coutts <duncan@haskell.org>**20080926214828
1772 patch sent in by brian0, ticket #357
1773]
1774[Update to the development version of the Cabal lib
1775Duncan Coutts <duncan@haskell.org>**20080831225243
1776 The branch of cabal-install that tracks Cabal-1.4 now lives at
1777 http://darcs.haskell.org/cabal-branches/cabal-install-0.5/
1778]
1779[Allow use of curl in bootstrap.sh
1780Duncan Coutts <duncan@haskell.org>**20080826233400
1781 Patch from jsnx. Fixes ticket #343. Also, use "cd blah; cd .."
1782 instead of "pushd blah; popd" as some shells lack pushd/popd
1783]
1784[Relax version constraint on unix package
1785Duncan Coutts <duncan@haskell.org>**20080826232851
1786 Allows building with ghc-6.6.1
1787]
1788[Use mplus not mappend for combining tar filename checks
1789Duncan Coutts <duncan@haskell.org>**20080826232606
1790 mappend would join the error messages in the case that both
1791 checks failed. Also the monoid instance was new in base 3.
1792]
1793[TAG 0.5.2
1794Duncan Coutts <duncan@haskell.org>**20080826214238]
1795Patch bundle hash:
17965a2e3c84d5a1144fd9fd4098bdb5a14aeab3922c