packages feed

cabal-debian 3.0.3 → 3.0.4

raw patch · 9 files changed

+73/−588 lines, 9 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Debian.Debianize.Debianize: runDebianize' :: FilePath -> [String] -> IO Bool
- Debian.Debianize.Debianize: validateDebianization :: Atoms -> Atoms -> Either String ()
+ Debian.Debianize.Debianize: validateDebianization :: Atoms -> Atoms -> ()

Files

cabal-debian.cabal view
@@ -1,5 +1,5 @@ Name:           cabal-debian-Version:        3.0.3+Version:        3.0.4 License:        BSD3 License-File:   debian/copyright Author:         David Fox <dsf@seereason.com>@@ -9,9 +9,6 @@ Build-Type:     Simple Synopsis:       Create a debianization for a cabal package Cabal-Version: >= 1.8-Extra-Source-Files:-  debian/changelog,-  debian/Debianize.hs Description:  Tool for creating debianizations of Haskell packages based on the .cabal  file.  If apt-file is installed it will use it to discover what is the
− debian/Debianize.hs
@@ -1,49 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-import Debian.Debianize-import Data.Lens.Lazy-import Debian.Changes (ChangeLog(..), ChangeLogEntry(..))-import Debian.Relation (BinPkgName(BinPkgName), Relation(Rel), VersionReq(SLT))-import Debian.Version (parseDebianVersion)-import Data.Map as Map (insertWith)-import Data.Maybe (fromMaybe)-import Data.Set as Set (insert, union, singleton)-import Data.Text as Text (intercalate)--main :: IO ()-main =-    do new <- debianization "."-               (modL control (\ y -> y {homepage = Just "http://src.seereason.com/cabal-debian"}) $-                setL changelog (Just log) $-                setL compat (Just 7) $-                setL standards (Just (StandardsVersion 3 9 3 Nothing)) $-                setL sourceFormat (Just Native3) $-                setL utilsPackageName (Just (BinPkgName "cabal-debian")) $-                modL depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "apt-file") Nothing Nothing))) $-                modL conflicts (Map.insertWith union (BinPkgName "cabal-debian")-                                      (singleton (Rel (BinPkgName "haskell-debian-utils") (Just (SLT (parseDebianVersion ("3.59" :: String)))) Nothing))) $-                modL description (Map.insertWith (error "test7") (BinPkgName "cabal-debian")-                                        (Text.intercalate "\n"-                                         [ "Create a debianization for a cabal package"-                                         , " Tool for creating debianizations of Haskell packages based on the .cabal"-                                         , " file.  If apt-file is installed it will use it to discover what is the"-                                         , " debian package name of a C library."-                                         , " ."-                                         , "  Author: David Fox <dsf@seereason.com>"-                                         , "  Upstream-Maintainer: David Fox <dsf@seereason.com>" ])) $-                defaultAtoms)-       inputDebianization "." defaultAtoms >>= \ old -> case compareDebianization old (copyFirstLogEntry old new) of-                                                          "" -> return ()-                                                          s -> error $ "Debianization mismatch:\n" ++ s-       -- This would overwrite the existing debianization rather than-       -- just make sure it matches:-       -- writeDebianization "." new---- | This copies the first log entry of deb1 into deb2.  Because the--- debianization process updates that log entry, we need to undo that--- update in order to get a clean comparison.-copyFirstLogEntry :: Atoms -> Atoms -> Atoms-copyFirstLogEntry deb1 deb2 =-    modL changelog (const (Just (ChangeLog (hd1 : tl2)))) deb2-    where-      ChangeLog (hd1 : _) = fromMaybe (error "Missing debian/changelog") (getL changelog deb1)-      ChangeLog (_ : tl2) = fromMaybe (error "Missing debian/changelog") (getL changelog deb2)
− debian/changelog
@@ -1,477 +0,0 @@-haskell-cabal-debian (3.0.3) unstable; urgency=low--  * Due to a typo, the noDocumentationLibrary lens was turning off-    profiling rather than documentation.-- -- David Fox <dsf@seereason.com>  Fri, 08 Feb 2013 17:14:09 -0800--haskell-cabal-debian (3.0.2) unstable; urgency=low--  * Fix argument and exception handling in cabal-debian-  * Make Standards-Version field non-mandatory-  * Make sure every binary deb paragraph has a non-empty description-- -- David Fox <dsf@seereason.com>  Thu, 07 Feb 2013 10:03:25 -0800--haskell-cabal-debian (3.0.1) unstable; urgency=low--  * Don't build Debian version numbers with revision (Just "").-  * Output the descriptions of the binary packages.-- -- David Fox <dsf@seereason.com>  Tue, 05 Feb 2013 14:48:33 -0800--haskell-cabal-debian (3.0) unstable; urgency=low--  * Moved the Distribution.Debian modules to Debian.Cabal and-    Debian.Debianize.-  * Refactored the debianize function for easier testing-  * Added test cases.-  * Add a Debianization type that intends to fully describe a debian-    package, with functions to read, build, modify, and write a-    Debianization.-- -- David Fox <dsf@seereason.com>  Wed, 26 Dec 2012 05:45:35 -0800--haskell-cabal-debian (2.6.3) unstable; urgency=low--  * Fix pretty printing of Relations (i.e. dependency lists.)  There-    is an instance for printing lists in ansi-wl-pprint which prevents-    us from writing customized Pretty instances for type aliases like-    Relations, AndRelation, and OrRelation.-- -- David Fox <dsf@seereason.com>  Fri, 04 Jan 2013 09:30:48 -0800--haskell-cabal-debian (2.6.2) unstable; urgency=low--  * Fix a bug constructing the destination pathnames that was dropping-    files that were supposed to be installed into packages.-- -- David Fox <dsf@seereason.com>  Thu, 20 Dec 2012 06:49:25 -0800--haskell-cabal-debian (2.6.1) unstable; urgency=low--  * Remove the modifyAtoms field from the Flags record, we want to-    be able to create instances like Read and Show for this type.-    The modifyAtoms function is now passed separately to debianize.-  * The flags field of Server was renamed serverFlags because the-    newly exported Config record has a flags field.-- -- David Fox <dsf@seereason.com>  Wed, 19 Dec 2012 09:45:22 -0800--haskell-cabal-debian (2.5.10) unstable; urgency=low--  * Filter cabal self dependencies out before generating-    Build-Depends-Indep, just as we added code to filter them out-    of Build-Depends in version 2.5.7.-- -- David Fox <dsf@seereason.com>  Tue, 18 Dec 2012 13:23:39 -0800--haskell-cabal-debian (2.5.9) unstable; urgency=low--  * Always add +RTS -IO -RTS to server flags.-- -- David Fox <dsf@seereason.com>  Sun, 16 Dec 2012 10:40:52 -0800--haskell-cabal-debian (2.5.8) unstable; urgency=low--  * Add a builtin list for ghc-7.6.1.-- -- David Fox <dsf@seereason.com>  Sat, 15 Dec 2012 07:04:49 -0800--haskell-cabal-debian (2.5.7) unstable; urgency=low--  * Filter out cabal self-dependencies before building the debian-    dependencies.  In cabal a self dependency means you need the library-    to build an executable, while in debian it means you need an older-    version installed to build the current version.-- -- David Fox <dsf@seereason.com>  Thu, 29 Nov 2012 08:42:30 -0800--haskell-cabal-debian (2.5.6) unstable; urgency=low--  * Don't add --base-uri and --http-port arguments automatically, they can be-    computed by calling the oldClckwrksFlags function and adding the value to-    the flags field.  Clckwrks-0.3 no longer needs the --base-uri argument.-- -- David Fox <dsf@seereason.com>  Tue, 27 Nov 2012 13:34:31 -0800--haskell-cabal-debian (2.5.5) unstable; urgency=low--  * Have the debianize function return False if there is no debian/Debianize.hs file,-    but throw an exception if running it failed, so we notice bad debianization code.-- -- David Fox <dsf@seereason.com>  Tue, 27 Nov 2012 07:34:51 -0800--haskell-cabal-debian (2.5.4) unstable; urgency=low--  * Insert "SetEnv proxy-sendcl 1" line into Apache config.-- -- David Fox <dsf@seereason.com>  Tue, 20 Nov 2012 13:43:54 -0800--haskell-cabal-debian (2.5.3) unstable; urgency=low--  * Remove extra copy of binary from the executable debs-  * Add a sourcePackageName field to Flags, and a --source-package-name-    command line option.-- -- David Fox <dsf@seereason.com>  Sat, 17 Nov 2012 00:16:21 -0800--haskell-cabal-debian (2.5.2) unstable; urgency=low--  * Fix the path to where the DHInstallTo and DHInstallCabalExecTo-    DebAtoms put their files.-- -- David Fox <dsf@seereason.com>  Fri, 16 Nov 2012 18:11:45 -0800--haskell-cabal-debian (2.5.1) unstable; urgency=low--  * Add a destName field to Executable so we can give installed-    executables a different name than they had in the build.-- -- David Fox <dsf@seereason.com>  Fri, 16 Nov 2012 15:37:16 -0800--haskell-cabal-debian (2.5) unstable; urgency=low--  * Add a debName field to the Executable record, before the deb-    package name had to equal the executable name.-- -- David Fox <dsf@seereason.com>  Fri, 16 Nov 2012 12:32:39 -0800--haskell-cabal-debian (2.4.2) unstable; urgency=low--  * Move location of cabal install files from dist/build/install to-    debian/cabalInstall, the dist directory was getting wiped at bad-    moments.-  * Split the autobuilder function autobuilderDebianize into two-    new functions in cabal-debian: runDebianize and callDebianize.-  * Custom debianization code now goes in debian/Debianize.hs rather than-    in setup, so we can distinguish it failing from it not existing more-    easily.-- -- David Fox <dsf@seereason.com>  Thu, 15 Nov 2012 11:00:08 -0800--haskell-cabal-debian (2.4.1) unstable; urgency=low--  * We need to verify that debian/compat was created after running the-    debianize function, because ghc still exits with ExitSuccess-- -- David Fox <dsf@seereason.com>  Thu, 15 Nov 2012 06:34:02 -0800--haskell-cabal-debian (2.4.0) unstable; urgency=low--  * You can run a function in Setup.hs other than main using ghc -e, so we-    will use this trick to run the debianize function directly rather than-    running main.-  * Eliminate the autobuilderDebianize function.-- -- David Fox <dsf@seereason.com>  Thu, 15 Nov 2012 04:05:49 -0800--haskell-cabal-debian (2.3.4) unstable; urgency=low--  * Fix the builddir used when running the cabal-debian standalone-    executable - it was dist-cabal/build, so the resulting debianization-    had files in places where cabal didn't expect them.-- -- David Fox <dsf@seereason.com>  Tue, 13 Nov 2012 06:20:51 -0800--haskell-cabal-debian (2.3.3) unstable; urgency=low--  * Eliminate class MonadBuild and the BuildT monad.-- -- David Fox <dsf@seereason.com>  Sun, 11 Nov 2012 17:46:31 -0800--haskell-cabal-debian (2.3.2) unstable; urgency=low--  * Fix exception that was keeping changelogs from being preserved.-- -- David Fox <dsf@seereason.com>  Sat, 10 Nov 2012 10:07:50 -0800--haskell-cabal-debian (2.3.1) unstable; urgency=low--  * Fix the extension of the debhelper links files-  * Add a general mechanism for installing a file into a deb when-    we have the file's text in a String (rather than in a file.)-- -- David Fox <dsf@seereason.com>  Sat, 10 Nov 2012 07:35:09 -0800--haskell-cabal-debian (2.3) unstable; urgency=low--  * Add MonadBuild.-- -- David Fox <dsf@seereason.com>  Fri, 09 Nov 2012 12:21:14 -0800--haskell-cabal-debian (2.2.1) unstable; urgency=low--  * Add a modifyAtoms function to Flags that is applied to final list of-    DebAtom before writing the debianization.-  * Add DHApacheSite and DHInstallCabalExec atoms so atoms don't depend on-    the build directory-  * Add #DEBHELPER# and exit 0 to default web server postinst.-- -- David Fox <dsf@seereason.com>  Fri, 09 Nov 2012 10:25:32 -0800--haskell-cabal-debian (2.2.0) unstable; urgency=low--  * Append a trailing slash to the --base-uri argument passed to the-    server.  This is required by Web.Routes.Site.runSite.-- -- David Fox <dsf@seereason.com>  Thu, 08 Nov 2012 04:40:08 -0800--haskell-cabal-debian (2.1.4) unstable; urgency=low--  * Merge the Executable and Script constructors of the Executable type-  * Add a destDir field to Executable to specify the destination.-- -- David Fox <dsf@seereason.com>  Tue, 06 Nov 2012 13:24:25 -0800--haskell-cabal-debian (2.1.3) unstable; urgency=low--  * Don't append a slash to the base-uri.-  * Construct the name of the data directory in /usr/share from the cabal-    package name rather than the debian source package name.-  * Add a --self-depend flag to include a build dependency on this library-    in all generated debianizations.-- -- David Fox <dsf@seereason.com>  Tue, 06 Nov 2012 07:07:57 -0800--haskell-cabal-debian (2.1.2) unstable; urgency=low--  * Output the server support files.-- -- David Fox <dsf@seereason.com>  Tue, 06 Nov 2012 06:37:18 -0800--haskell-cabal-debian (2.1.1) unstable; urgency=low--  * Restore code that checks for version number match when validating-    a debianization.  The autobuilder can now pass the version number-    to cabal-debian, so it should match.-- -- David Fox <dsf@seereason.com>  Mon, 05 Nov 2012 17:42:32 -0800--haskell-cabal-debian (2.1.0) unstable; urgency=low--  * Enable processing of Script, Server and WebSite executables.-- -- David Fox <dsf@seereason.com>  Mon, 05 Nov 2012 12:45:42 -0800--haskell-cabal-debian (2.0.9) unstable; urgency=low--  * Add a Library section, export all the modules.-- -- David Fox <dsf@seereason.com>  Mon, 05 Nov 2012 06:41:25 -0800--haskell-cabal-debian (2.0.8) unstable; urgency=low--  * Bypass abandoned versions.-- -- David Fox <dsf@seereason.com>  Sat, 03 Nov 2012 06:13:27 -0700--haskell-cabal-debian (1.26) unstable; urgency=low--  * Don't try to update the existing debianization, except for the-    changelog where we retain entries that look older than the one-    we generate.-  * Use .install files instead of adding rules to debian/rules-  * Add --depends and --conflicts options-- -- David Fox <dsf@seereason.com>  Thu, 25 Oct 2012 12:03:49 -0700--haskell-cabal-debian (1.25) unstable; urgency=low--  * If the --disable-haddock flag is given omit the doc package from the-    control file.-  * The tarball that was uploaded to Hackage as version 1.24 had a (buggy)-    change which was not pushed to darcs.  This resolves that confusion.-- -- David Fox <dsf@seereason.com>  Sat, 16 Jun 2012 14:42:12 -0700--haskell-cabal-debian (1.24) unstable; urgency=low--  * No wonder it doesn't build on hackage - none of the source-    modules were shipped.-- -- David Fox <dsf@seereason.com>  Thu, 14 Jun 2012 08:19:19 -0700--haskell-cabal-debian (1.23) unstable; urgency=low--  * Add a --quilt option to switch from native to quilt format.-    Without this option the file debian/source/format will contain-    '3.0 (native)', with it '3.0 (quilt)'.-- -- David Fox <dsf@seereason.com>  Fri, 01 Jun 2012 05:53:36 -0700--haskell-cabal-debian (1.22) unstable; urgency=low--  * Bump version to make sure all changes are uploaded.-- -- David Fox <dsf@seereason.com>  Wed, 23 May 2012 19:54:17 -0700--haskell-cabal-debian (1.21) unstable; urgency=low--  * fix conversion of wildcards into intersected ranges-- -- David Fox <dsf@seereason.com>  Wed, 23 May 2012 19:51:34 -0700--haskell-cabal-debian (1.20) unstable; urgency=low--  * Fix generation of debian library dependencies from the Extra-Libraries-    field of the cabal file.-- -- David Fox <dsf@seereason.com>  Wed, 23 May 2012 19:50:39 -0700--haskell-cabal-debian (1.19) unstable; urgency=low--  * Handle cabal equals dependencies.-- -- David Fox <dsf@seereason.com>  Tue, 20 Mar 2012 14:34:58 -0700--haskell-cabal-debian (1.18) unstable; urgency=low--  * High level of confidence this time.  Interesting new Interspersed-    class, and an implementation of invertVersionRanges which should be-    forwarded to the Cabal folks.-  * Removes dependency on logic-classes-- -- David Fox <dsf@seereason.com>  Tue, 20 Mar 2012 08:17:25 -0700--haskell-cabal-debian (1.17) unstable; urgency=low--  * Restore code to downcase cabal package name before using it as the-    base of the debian package name.-- -- David Fox <dsf@seereason.com>  Sun, 18 Mar 2012 15:32:04 -0700--haskell-cabal-debian (1.16) unstable; urgency=low--  * Remove code that implements a special case for the debian name of the-    haskell-src-exts package.-- -- David Fox <dsf@seereason.com>  Sun, 18 Mar 2012 14:11:21 -0700--haskell-cabal-debian (1.15) unstable; urgency=low--  * Yet another stab at fixing the code for converting cabal dependencies-    to debian dependencies, with support for splitting version ranges of-    cabal files among different debian packages.-- -- David Fox <dsf@seereason.com>  Fri, 16 Mar 2012 17:59:28 -0700--haskell-cabal-debian (1.14) unstable; urgency=low--  * Don't try to strip data files-  * Use permissions 644 for data files, not 755.-- -- David Fox <dsf@seereason.com>  Wed, 07 Mar 2012 14:46:04 -0800--haskell-cabal-debian (1.13) unstable; urgency=low--  * Append the version number when constructing the directory for data-    files.-- -- David Fox <dsf@seereason.com>  Wed, 07 Mar 2012 08:56:39 -0800--haskell-cabal-debian (1.12) unstable; urgency=low--  * Include any files listed in the Data-Files field of the cabal file-    in the utils package.-- -- David Fox <dsf@seereason.com>  Tue, 06 Mar 2012 11:31:47 -0800--haskell-cabal-debian (1.11) unstable; urgency=low--  * Replace --epoch flag with --epoch-map, so we can specify epoch numbers-    for both the package being built and for dependency packages.-- -- David Fox <dsf@seereason.com>  Thu, 09 Feb 2012 07:01:19 -0800--haskell-cabal-debian (1.10) unstable; urgency=low--  * Add bundled package list for ghc 7.4.1.-- -- David Fox <dsf@seereason.com>  Sat, 04 Feb 2012 14:44:33 -0800--haskell-cabal-debian (1.9) unstable; urgency=low--  * Add --dep-map flag to allow mapping of cabal package names to the base-    of a debian package name.  This modifies the name to which the prefix-    "lib" and the suffix "-dev" are added.-  * Fix dependency generation bug introduced in 1.8.-- -- David Fox <dsf@seereason.com>  Mon, 23 Jan 2012 14:13:05 -0800--haskell-cabal-debian (1.8) unstable; urgency=low--  * Add a --dev-dep flag to make one or more packages install dependencies-    of the dev package.-- -- David Fox <dsf@seereason.com>  Mon, 23 Jan 2012 05:00:46 -0800--haskell-cabal-debian (1.7) unstable; urgency=low--  * Add info about ghc 7.4.0 pre-release.-- -- David Fox <dsf@seereason.com>  Wed, 11 Jan 2012 09:57:45 -0800--haskell-cabal-debian (1.6) unstable; urgency=low--  * Don't omit dependencies built into ghc, they should be satisfied by-    the Provides in the compiler if they are not available in the-    repository.  However, we do need to make ghc an alterantive to any-    versioned dependencies that are bundled with the compiler, since the-    built in dependencies are virtual packages and thus unversioned.-- -- David Fox <dsf@seereason.com>  Wed, 07 Dec 2011 06:10:17 -0800--haskell-cabal-debian (1.5) unstable; urgency=low--  * Fix the generation of build dependency version ranges by using an-    intermediate version range type.-  * If the version range for the cabal file touches two different debian-    package, don't try to write build dependencies that allow either one,-    it can't really be done.  Just give the allowable versions of the-    newer package (e.g. libghc-parsec3-dev rather than libghc-parsec2-dev.)-- -- David Fox <dsf@seereason.com>  Sun, 04 Dec 2011 05:59:25 -0800--haskell-cabal-debian (1.4) unstable; urgency=low--  * Add a --revision <suffix> flag which appends a (perhaps empty) string-    cabal version number to get the debian version number.  Without this-    flag the string "-1~hackage1" is appended.-  * Make it an error to specify a debian version via --deb-version that is-    older than the current cabal version.-- -- David Fox <dsf@seereason.com>  Sun, 20 Nov 2011 06:45:33 -0800--haskell-cabal-debian (1.3) unstable; urgency=low--  * Fix error message when compiler version is not in bundled package list.-  * Add bundled package list for compiler 7.0.4 (same as 7.0.3.)-- -- David Fox <dsf@seereason.com>  Sat, 08 Oct 2011 07:58:19 -0700--haskell-cabal-debian (1.2) unstable; urgency=low--  * When computing the debian name from a package's cabal name, if we-    have no particular version number we are comparing to, use the name-    from the version split that corresponds to newer version numbers.-  * Add code to make the cabal package haskell-src-exts map to the debian-    packages libghc-src-exts-dev etc.  Normally it would map to-    libghc-haskell-src-exts-dev.-- -- David Fox <dsf@seereason.com>  Thu, 06 Oct 2011 09:27:02 -0700--haskell-cabal-debian (1.1) unstable; urgency=low--  * Use propositional logic package to compute normal form for dependencies-  * Make sure to correct format of cabal package synopsis before using as debian-    package description.-- -- David Fox <dsf@seereason.com>  Fri, 30 Sep 2011 06:16:34 -0700--haskell-cabal-debian (1.0) unstable; urgency=low--  * Debianization generated by cabal-debian-- -- David Fox <dsf@seereason.com>  Sun, 18 Sep 2011 06:40:21 -0700-
src/Debian/Debianize.hs view
@@ -1,5 +1,6 @@--- | QUICK START: You can either run the cabal-debian executable, or--- for more power and flexibility you can construct a+-- | QUICK START: You can either run the @cabal-debian --debianize@, or+-- for more power and flexibility you can put a @Debianize.hs@ script in+-- the package's @debian@ subdirectory. -- 'Debian.Debianize.Atoms' value and pass it to the -- 'Debian.Debianize.debianize' function.  The -- 'Debian.Debianize.callDebianize' function retrieves extra arguments@@ -24,14 +25,24 @@ -- At this point you may need to modify Cabal.defaultFlags to achieve -- specific packaging goals.  Create a module for this in debian/Debianize.hs: -- --- > import Distribution.Debian (Flags(..), defaultFlags)--- > main = debianize (defaultFlags { extraDevDeps = "haskell-hsx-utils" : extraDevDeps defaultFlags})+-- > import Data.Lens.Lazy+-- > import Data.Map as Map (insertWith)+-- > import Data.Set as Set (union, singleton)+-- > import Debian.Relation (BinPkgName(BinPkgName), Relation(Rel))+-- > import Debian.Debianize (defaultAtoms, depends, debianization, writeDebianization)+-- > main = debianization "." defaultAtoms >>=+-- >        return . modL depends (insertWith union (BinPkgName "cabal-debian") (singleton (Rel (BinPkgName "debian-policy") Nothing Nothing))) >>=+-- >        writeDebianization "." --  -- Then to test it, --  -- > % CABALDEBIAN='["-n"]' runhaskell debian/Debianize.hs -- --- and to run it+-- or equivalently+-- +-- > % ghc -e 'Debian.Debianize.runDebianize ["-n"]'+-- +-- and to run it for real: --  -- > % runhaskell debian/Debianize.hs module Debian.Debianize
src/Debian/Debianize/Atoms.hs view
@@ -470,7 +470,7 @@     where       g atoms = foldAtoms from Map.empty atoms           where-            from (Binary b) (DHExecutable f) x = Map.insertWith (error "executable") b f x+            from (Binary b) (DHExecutable f) x = Map.insertWith (\ a b -> error $ "executable: " ++ show (a, b)) b f x             from _ _ x = x       s x atoms = Map.foldWithKey (\ b y atoms'-> insertAtom (Binary b) (DHExecutable y) atoms') (deleteAtoms p atoms) x           where
src/Debian/Debianize/Debianize.hs view
@@ -8,6 +8,7 @@     ( cabalDebian     , callDebianize     , runDebianize+    , runDebianize'     , debianize     , debianization     , writeDebianization@@ -17,7 +18,7 @@     ) where  import Control.Applicative ((<$>), (<*>), pure)-import Control.Exception (catch)+import Control.Exception (catch, throw) import Data.Algorithm.Diff.Context (contextDiff) import Data.Algorithm.Diff.Pretty (prettyDiff) import Data.Lens.Lazy (getL, setL, modL)@@ -61,34 +62,35 @@ import Text.ParserCombinators.Parsec.Rfc2822 (NameAddr) import Text.PrettyPrint.ANSI.Leijen (Pretty(pretty)) -{--import Debian.Debianize.ControlFile as Debian (SourceDebDescription(source, binaryPackages), BinaryDebDescription(package))-import Debian.Debianize.Files (toFileMap)-import Debian.Debianize.Goodies (defaultAtoms)-import Debian.Debianize.Input (inputDebianization)-import Debian.Debianize.Utility (withCurrentDirectory)-import System.Directory (Permissions(executable), getPermissions, setPermissions, createDirectoryIfMissing)-import Text.PrettyPrint.ANSI.Leijen (pretty)--}- -- | The main function for the cabal-debian executable. cabalDebian :: IO () cabalDebian =-    compileAllArgs defaultAtoms >>= \ atoms ->+    compileEnvironmentArgs defaultAtoms >>=+    compileCommandlineArgs >>= \ atoms ->       case getL debAction atoms of         SubstVar debType -> substvars atoms debType-        Debianize ->  debianize "." atoms+        Debianize -> debianize "." atoms         Usage -> do           progName <- getProgName           let info = "Usage: " ++ progName ++ " [FLAGS]\n"           putStrLn (usageInfo info options) +compileEnvironmentArgs :: Atoms -> IO Atoms+compileEnvironmentArgs atoms0 =+    (compileArgs <$> (read <$> getEnv "CABALDEBIAN") <*> pure atoms0) `catchIOError` const (return atoms0)++compileCommandlineArgs :: Atoms -> IO Atoms+compileCommandlineArgs atoms0 = compileArgs <$> getArgs <*> pure atoms0+ -- | Compile the given arguments into an Atoms value and run the -- debianize function.  This is basically equivalent to @cabal-debian -- --debianize@, except that the command line arguments come from the -- function parameter. callDebianize :: [String] -> IO ()-callDebianize args = compileEnvironmentArgs defaultAtoms >>= debianize "." . compileArgs args+callDebianize args =+    compileEnvironmentArgs defaultAtoms >>=+    return . compileArgs args >>=+    debianize "."  -- | Put an argument list into the @CABALDEBIAN@ environment variable -- and then run the script in debian/Debianize.hs.  If this exists and@@ -109,16 +111,25 @@             (code, out, err) ->               error ("runDebianize failed with " ++ show code ++ ":\n stdout: " ++ show out ++"\n stderr: " ++ show err) --- | Generate a debianization, and then either validate, describe, or--- write it out dependeing on the command line arguments.+-- | Insert a value for CABALDEBIAN into the environment that the+-- withEnvironment* functions above will find and use.  E.g.+-- putEnvironmentFlags ["--dry-run", "--validate"] (debianize defaultFlags)+putEnvironmentArgs :: [String] -> IO ()+putEnvironmentArgs fs = setEnv "CABALDEBIAN" (show fs) True++-- | Call runDebianize with the given working directory.+runDebianize' :: FilePath -> [String] -> IO Bool+runDebianize' top args = withCurrentDirectory top $ runDebianize args++-- | Depending on the options in @atoms@, either validate, describe,+-- or write the generated debianization. debianize :: FilePath -> Atoms -> IO () debianize top atoms =     debianization top atoms >>= \ atoms' ->     if getL validate atoms'-    then inputDebianization top >>= \ old -> either error return (validateDebianization old atoms')+    then inputDebianization top >>= \ old -> return (validateDebianization old atoms')     else if getL dryRun atoms'-         then inputDebianization top >>= \ old ->-              putStr . ("Debianization (dry run):\n" ++) $ compareDebianization old atoms'+         then inputDebianization top >>= \ old -> putStr ("Debianization (dry run):\n" ++ compareDebianization old atoms')          else writeDebianization top atoms'  -- | Given an Atoms value, get any additional configuration@@ -239,21 +250,6 @@ anyrel' :: BinPkgName -> [Relation] anyrel' x = [Rel x Nothing Nothing] -compileAllArgs :: Atoms -> IO Atoms-compileAllArgs atoms0 = compileEnvironmentArgs atoms0 >>= compileCommandlineArgs--compileEnvironmentArgs :: Atoms -> IO Atoms-compileEnvironmentArgs atoms0 = (compileArgs <$> (read <$> getEnv "CABALDEBIAN") <*> pure atoms0) `catchIOError` const (return atoms0)--compileCommandlineArgs :: Atoms -> IO Atoms-compileCommandlineArgs atoms0 = compileArgs <$> getArgs <*> pure atoms0---- | Insert a value for CABALDEBIAN into the environment that the--- withEnvironment* functions above will find and use.  E.g.--- putEnvironmentFlags ["--dry-run", "--validate"] (debianize defaultFlags)-putEnvironmentArgs :: [String] -> IO ()-putEnvironmentArgs fs = setEnv "CABALDEBIAN" (show fs) True- -- | Write the files of the debianization @d@ to the directory @top@. writeDebianization :: FilePath -> Atoms -> IO () writeDebianization top d =@@ -286,13 +282,13 @@ -- | Don't change anything, just make sure the new debianization -- matches the existing debianization in several particulars - -- specifically, version number, and source and binary package names.-validateDebianization :: Atoms -> Atoms -> Either String ()+validateDebianization :: Atoms -> Atoms -> () validateDebianization old new =     case () of-      _ | oldVersion /= newVersion -> Left ("Version mismatch, expected " ++ show (pretty oldVersion) ++ ", found " ++ show (pretty newVersion))-        | oldSource /= newSource -> Left ("Source mismatch, expected " ++ show (pretty oldSource) ++ ", found " ++ show (pretty newSource))-        | oldPackages /= newPackages -> Left ("Package mismatch, expected " ++ show (pretty oldPackages) ++ ", found " ++ show (pretty newPackages))-        | True -> Right ()+      _ | oldVersion /= newVersion -> throw (userError ("Version mismatch, expected " ++ show (pretty oldVersion) ++ ", found " ++ show (pretty newVersion)))+        | oldSource /= newSource -> throw (userError ("Source mismatch, expected " ++ show (pretty oldSource) ++ ", found " ++ show (pretty newSource)))+        | oldPackages /= newPackages -> throw (userError ("Package mismatch, expected " ++ show (pretty oldPackages) ++ ", found " ++ show (pretty newPackages)))+        | True -> ()     where       oldVersion = logVersion (head (unChangeLog (fromMaybe (error "Missing changelog") (getL changelog old))))       newVersion = logVersion (head (unChangeLog (fromMaybe (error "Missing changelog") (getL changelog new))))
src/Debian/Debianize/Goodies.hs view
@@ -103,15 +103,15 @@  -- | Add a debian binary package to the debianization containing a cabal executable file. doExecutable :: BinPkgName -> InstallFile -> Atoms -> Atoms-doExecutable bin x deb = modL executable (Map.insertWith (error "executable") bin x) deb+doExecutable bin x deb = modL executable (Map.insertWith (\ a b -> error $ "doExecutable: " ++ show (a, b)) bin x) deb  -- | Add a debian binary package to the debianization containing a cabal executable file set up to be a server. doServer :: BinPkgName -> Server -> Atoms -> Atoms-doServer bin x deb = modL serverInfo (Map.insertWith (error "serverInfo") bin x) deb+doServer bin x deb = modL serverInfo (Map.insertWith (\ a b -> error $ "doServer: " ++ show (a, b)) bin x) deb  -- | Add a debian binary package to the debianization containing a cabal executable file set up to be a web site. doWebsite :: BinPkgName -> Site -> Atoms -> Atoms-doWebsite bin x deb = modL website (Map.insertWith (error "website") bin x) deb+doWebsite bin x deb = modL website (Map.insertWith (\ a b -> error $ "doWebsite: " ++ show (a, b)) bin x) deb  -- | Add a debian binary package to the debianization containing a cabal executable file set up to be a backup script. doBackups :: BinPkgName -> String -> Atoms -> Atoms
src/Debian/Debianize/Input.hs view
@@ -11,7 +11,7 @@  import Debug.Trace (trace) -import Control.Exception (SomeException, catch, bracket)+import Control.Exception (bracket) import Control.Monad (when, foldM, filterM) import Control.Monad.Trans (MonadIO, liftIO) import Data.Char (isSpace)@@ -58,9 +58,8 @@  inputDebianization :: FilePath -> IO Atoms inputDebianization top =-    do (ctl, _) <- inputSourceDebDescription debian `catchIOError` (\ e -> error ("Failure parsing SourceDebDescription: " ++ show e))-       -- Different from snd of above?-       atoms <- inputAtomsFromDirectory debian mempty `catch` (\ (e :: SomeException) -> error ("Failure parsing atoms: " ++ show e))+    do (ctl, _) <- inputSourceDebDescription debian+       atoms <- inputAtomsFromDirectory debian mempty        return $ modL control (const ctl) atoms     where       debian = top </> "debian"@@ -152,7 +151,7 @@ -- | Look for a field and apply a function to its value findMap :: String -> (String -> a) -> [Field] -> a findMap field f fields =-    fromMaybe (error $ "Missing field: " ++ field) (foldr findMap' Nothing fields)+    fromMaybe (error $ "Missing " ++ show field ++ " field in " ++ show fields) (foldr findMap' Nothing fields)     where       findMap' (Field (fld, val)) x = if fld == field then Just (f val) else x       findMap' _ x = x
src/Debian/Debianize/Tests.hs view
@@ -18,11 +18,11 @@ import Debian.Changes (ChangeLog(..), ChangeLogEntry(..), parseEntry) import Debian.Debianize.Debianize (debianization) import Debian.Debianize.Atoms as Atoms-    (Atoms, rulesHead, compat, sourceFormat, changelog, sourcePackageName, control, missingDependencies, revision,-     binaryArchitectures, copyright, debVersion, execMap, buildDeps, buildDepsIndep, utilsPackageName, description,-     depends, conflicts, install, installData)+    (Atoms, rulesHead, compat, sourceFormat, changelog, control, missingDependencies, revision,+     binaryArchitectures, copyright, debVersion, execMap, buildDeps, utilsPackageName, description,+     depends, conflicts, installData {-, sourcePackageName, install, buildDepsIndep-}) import Debian.Debianize.ControlFile as Deb (SourceDebDescription(..), BinaryDebDescription(..), PackageRelations(..), VersionControlSpec(..))-import Debian.Debianize.Debianize (writeDebianization)+-- import Debian.Debianize.Debianize (writeDebianization) import Debian.Debianize.Dependencies (getRulesHead) import Debian.Debianize.Files (toFileMap) import Debian.Debianize.Finalize (finalizeDebianization)@@ -37,7 +37,9 @@ import Debian.Version (buildDebianVersion, parseDebianVersion) import Distribution.License (License(BSD3)) import Prelude hiding (log)+import System.Exit (ExitCode(ExitSuccess)) import System.FilePath ((</>))+import System.Process (readProcessWithExitCode) import Test.HUnit import Text.ParserCombinators.Parsec.Rfc2822 (NameAddr(..)) import Text.PrettyPrint.ANSI.Leijen (Pretty, pretty, text)@@ -403,6 +405,9 @@ test6 :: Test test6 =     TestLabel "test6" $+    TestCase (do result <- readProcessWithExitCode "runhaskell" ["-isrc", "test-data/artvaluereport2/input/debian/Debianize.hs"] ""+                 assertEqual "test6" (ExitSuccess, "", "") result)+{-     TestCase ( do old <- inputDebianization "test-data/artvaluereport2/output"                   new <- debianization "test-data/artvaluereport2/input"                             (modL control (\ y -> y {homepage = Just "http://appraisalreportonline.com"}) $@@ -490,6 +495,7 @@             "artvaluereport2-staging"     -> 9031             "artvaluereport2-development" -> 9032             _ -> error $ "Unexpected package name: " ++ deb+-}  test7 :: Test test7 =@@ -500,6 +506,8 @@                             setL sourceFormat (Just Native3) $                             setL utilsPackageName (Just (BinPkgName "cabal-debian")) $                             modL Atoms.depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (anyrel (BinPkgName "apt-file")))) $+                            modL Atoms.depends (Map.insertWith union (BinPkgName "cabal-debian") (singleton (anyrel (BinPkgName "debian-policy")))) $+                            modL Atoms.depends (Map.insertWith union (BinPkgName "libghc-cabal-debian-dev") (singleton (anyrel (BinPkgName "debian-policy")))) $                             modL Atoms.conflicts (Map.insertWith union (BinPkgName "cabal-debian")                                     (singleton (Rel (BinPkgName "haskell-debian-utils") (Just (SLT (parseDebianVersion ("3.59" :: String)))) Nothing))) $                             modL Atoms.description (Map.insertWith (error "test7") (BinPkgName "cabal-debian")@@ -539,7 +547,7 @@                             setL debVersion (Just (parseDebianVersion ("3.0.2-1~hackage1" :: String))) $                             setL sourceFormat (Just Native3) $                             modL control (\ y -> y {homepage = Just "http://www.haskell.org/alex/"}) $-                            (\ atoms -> foldr (\ name atoms -> modL installData (Map.insertWith union (BinPkgName "alex") (singleton (name, name))) atoms)+                            (\ atoms -> foldr (\ name atoms' -> modL installData (Map.insertWith union (BinPkgName "alex") (singleton (name, name))) atoms')                                               atoms                                               [ "AlexTemplate"                                               , "AlexTemplate-debug"