vcs-revision (empty) → 0.0.1
raw patch · 7 files changed
+122/−0 lines, 7 filesdep +basedep +processsetup-changed
Dependencies added: base, process
Files
- Distribution/VcsRevision.hs +16/−0
- Distribution/VcsRevision/Git.hs +14/−0
- Distribution/VcsRevision/Mercurial.hs +13/−0
- Distribution/VcsRevision/Svn.hs +17/−0
- LICENSE +23/−0
- Setup.hs +2/−0
- vcs-revision.cabal +37/−0
+ Distribution/VcsRevision.hs view
@@ -0,0 +1,16 @@+-- | Example usage in a program that wants to access its own git version:+-- +-- > {-# LANGUAGE TemplateHaskell #-}+-- > import Distribution.VcsRevision.Git+-- > import Language.Haskell.TH.Syntax+-- >+-- > showMyGitVersion :: String+-- > showMyGitVersion = $(do+-- > v <- qRunIO getRevision+-- > lift $ case v of+-- > Nothing -> "<none>"+-- > Just (hash,True) -> hash ++ " (with local modifications)"+-- > Just (hash,False) -> hash)+-- +module Distribution.VcsRevision () where+
+ Distribution/VcsRevision/Git.hs view
@@ -0,0 +1,14 @@+module Distribution.VcsRevision.Git ( getRevision ) where++import System.Process+import System.Exit++-- | Nothing if we're not in a git repo, Just (hash,modified) if we're in a repo.+getRevision :: IO (Maybe (String, Bool))+getRevision = do+ (exit,commit,_) <- readProcessWithExitCode "git" ["log", "--format=%h", "-n", "1"] ""+ case exit of+ ExitSuccess -> do+ (exit',_,_) <- readProcessWithExitCode "git" ["diff", "--quiet"] ""+ return $ Just (init commit, exit' /= ExitSuccess)+ _ -> return Nothing
+ Distribution/VcsRevision/Mercurial.hs view
@@ -0,0 +1,13 @@+module Distribution.VcsRevision.Mercurial ( getRevision ) where++import System.Process+import System.Exit++-- | Nothing if we're not in a mercurial repo, Just (hash,modified) if we're in a repo.+getRevision :: IO (Maybe (String, Bool))+getRevision = do+ (exit,out,_) <- readProcessWithExitCode "hg" ["identify", "-i"] ""+ case (exit,init out,last (init out)) of+ (ExitSuccess,hash,'+') -> return $ Just (init hash, True)+ (ExitSuccess,hash,_) -> return $ Just (hash, False)+ (ExitFailure _,_,_) -> return Nothing
+ Distribution/VcsRevision/Svn.hs view
@@ -0,0 +1,17 @@+module Distribution.VcsRevision.Svn ( getRevision ) where++import System.Process+import System.Exit+import Data.List++-- | Nothing if we're not in a svn repo, Just (revision,modified) if we're in a repo.+getRevision :: IO (Maybe (String, Bool))+getRevision = do+ (exit,info,_) <- readProcessWithExitCode "svn" ["info"] ""+ case exit of+ ExitSuccess -> do+ let prefix = "Last Changed Rev: "+ let rev = drop (length prefix) $ head $ filter (prefix `isPrefixOf`) (lines info)+ (_,out,_) <- readProcessWithExitCode "svn" ["st", "-q"] ""+ return $ Just (rev, out /= "")+ _ -> return Nothing
+ LICENSE view
@@ -0,0 +1,23 @@+Copyright (c) 2009, Eugene Kirpichov+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice,+ this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ vcs-revision.cabal view
@@ -0,0 +1,37 @@+Name: vcs-revision+Category: System, Data, Parsing+Version: 0.0.1+Cabal-version: >= 1.2+Build-type: Simple+Copyright: Eugene Kirpichov+Maintainer: ekirpichov@gmail.com +Author: Eugene Kirpichov+License: BSD3+License-File: LICENSE+Synopsis: + Facilities for accessing the version control revision of the current directory.+Description:+ Facilities for accessing the version control revision of the current directory.+ Useful e.g. to make your program output its revision using Template Haskell.+Cabal-Version: >= 1.6++Source-repository head+ type: git+ location: git://github.com/jkff/vcs-revision++Flag split-base++Library+ if flag(split-base)+ Build-depends: base >= 3.0 && < 5.0+ else+ Build-depends: base < 3.0+ Build-Depends: process+ Exposed-modules: + Distribution.VcsRevision+ Distribution.VcsRevision.Git+ Distribution.VcsRevision.Mercurial+ Distribution.VcsRevision.Svn+-- Distribution.VcsRevision.Cvs+-- Distribution.VcsRevision.Darcs+