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 +1/−4
- debian/Debianize.hs +0/−49
- debian/changelog +0/−477
- src/Debian/Debianize.hs +16/−5
- src/Debian/Debianize/Atoms.hs +1/−1
- src/Debian/Debianize/Debianize.hs +35/−39
- src/Debian/Debianize/Goodies.hs +3/−3
- src/Debian/Debianize/Input.hs +4/−5
- src/Debian/Debianize/Tests.hs +13/−5
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"