code:
From 606c5f4f4b2d476d274907eb2bb8c12b60fc451f Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
Date: Wed, 21 May 2014 04:43:30 +0000
Subject: [PATCH] remove TH

---
 Yesod/EmbeddedStatic/Generators.hs |  3 +--
 Yesod/Static.hs                    | 29 ++++++++++++++++++-----------
 yesod-static.cabal                 |  9 ---------
 3 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/Yesod/EmbeddedStatic/Generators.hs b/Yesod/EmbeddedStatic/Generators.hs
index 08febb9..e3a6d51 100644
--- a/Yesod/EmbeddedStatic/Generators.hs
+++ b/Yesod/EmbeddedStatic/Generators.hs
@@ -42,7 +42,6 @@ import Language.Haskell.TH
 import Network.Mime (defaultMimeLookup)
 import System.Directory (doesDirectoryExist, getDirectoryContents, findExecutable)
 import System.FilePath ((</>))
-import Text.Jasmine (minifym)
 import qualified Data.ByteString.Lazy as BL
 import qualified Data.Conduit.List as C
 import Data.Conduit.Binary (sourceHandle)
@@ -162,7 +161,7 @@ concatFilesWith loc process files = do

 -- | Convienient rexport of 'minifym' with a type signature to work with 'concatFilesWith'.
 jasmine :: BL.ByteString -> IO BL.ByteString
-jasmine ct = return $ either (const ct) id $ minifym ct
+jasmine ct = return ct

 -- | Use <https://github.com/mishoo/UglifyJS2 UglifyJS2> to compress javascript.
 -- Assumes @uglifyjs@ is located in the path and uses options @[\"-m\", \"-c\"]@
diff --git a/Yesod/Static.hs b/Yesod/Static.hs
index 725ebf4..33eaffd 100644
--- a/Yesod/Static.hs
+++ b/Yesod/Static.hs
@@ -37,8 +37,8 @@ module Yesod.Static
     , staticDevel
       -- * Combining CSS/JS
       -- $combining
-    , combineStylesheets'
-    , combineScripts'
+    --, combineStylesheets'
+    --, combineScripts'
       -- ** Settings
     , CombineSettings
     , csStaticDir
@@ -48,13 +48,13 @@ module Yesod.Static
     , csJsPreProcess
     , csCombinedFolder
       -- * Template Haskell helpers
-    , staticFiles
-    , staticFilesList
-    , publicFiles
+    --, staticFiles
+    --, staticFilesList
+    --, publicFiles
       -- * Hashing
     , base64md5
       -- * Embed
-    , embed
+    --, embed
 #ifdef TEST_EXPORT
     , getFileListPieces
 #endif
@@ -64,7 +64,7 @@ import Prelude hiding (FilePath)
 import qualified Prelude
 import System.Directory
 import Control.Monad
-import Data.FileEmbed (embedDir)
+import Data.FileEmbed

 import Control.Monad.Trans.Resource (runResourceT)
 import Yesod.Core
@@ -136,6 +136,7 @@ staticDevel dir = do
     hashLookup <- cachedETagLookupDevel dir
     return $ Static $ webAppSettingsWithLookup (F.decodeString dir) hashLookup

+{-
 -- | Produce a 'Static' based on embedding all of the static files' contents in the
 -- executable at compile time.
 --
@@ -150,6 +151,7 @@ staticDevel dir = do
 -- This will cause yesod to embed those assets into the generated HTML file itself.
 embed :: Prelude.FilePath -> Q Exp
 embed fp = [|Static (embeddedSettings $(embedDir fp))|]
+-}

 instance RenderRoute Static where
     -- | A route on the static subsite (see also 'staticFiles').
@@ -215,6 +217,7 @@ getFileListPieces = flip evalStateT M.empty . flip go id
                 put $ M.insert s s m
                 return s

+{-
 -- | Template Haskell function that automatically creates routes
 -- for all of your static files.
 --
@@ -267,7 +270,7 @@ staticFilesList dir fs =
 -- see if their copy is up-to-date.
 publicFiles :: Prelude.FilePath -> Q [Dec]
 publicFiles dir = mkStaticFiles' dir "StaticRoute" False
-
+-}

 mkHashMap :: Prelude.FilePath -> IO (M.Map F.FilePath S8.ByteString)
 mkHashMap dir = do
@@ -310,6 +313,7 @@ cachedETagLookup dir = do
     etags <- mkHashMap dir
     return $ (\f -> return $ M.lookup f etags)

+{-
 mkStaticFiles :: Prelude.FilePath -> Q [Dec]
 mkStaticFiles fp = mkStaticFiles' fp "StaticRoute" True

@@ -357,6 +361,7 @@ mkStaticFilesList fp fs routeConName makeHash = do
                 [ Clause [] (NormalB $ (ConE route) `AppE` f' `AppE` qs) []
                 ]
             ]
+-}

 base64md5File :: Prelude.FilePath -> IO String
 base64md5File = fmap (base64 . encode) . hashFile
@@ -395,7 +400,7 @@ base64 = map tr
 -- single static file at compile time.

 data CombineType = JS | CSS
-
+{-
 combineStatics' :: CombineType
                 -> CombineSettings
                 -> [Route Static] -- ^ files to combine
@@ -429,7 +434,7 @@ combineStatics' combineType CombineSettings {..} routes = do
         case combineType of
             JS -> "js"
             CSS -> "css"
-
+-}
 -- | Data type for holding all settings for combining files.
 --
 -- This data type is a settings type. For more information, see:
@@ -505,6 +510,7 @@ instance Default CombineSettings where
 errorIntro :: [FilePath] -> [Char] -> [Char]
 errorIntro fps s = "Error minifying " ++ show fps ++ ": " ++ s

+{-
 liftRoutes :: [Route Static] -> Q Exp
 liftRoutes =
     fmap ListE . mapM go
@@ -551,4 +557,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining
                 -> Q Exp
 combineScripts' development cs con routes
     | development = [| mapM_ (addScript . $(return $ ConE con)) $(liftRoutes routes) |]
-    | otherwise = [| addScript $ $(return $ ConE con) $(combineStatics' JS cs routes) |]
+    | otherwise = [| addScript $ $(return $ ConE con) $(combineStatics' JS cs routes) |]a
+-}
diff --git a/yesod-static.cabal b/yesod-static.cabal
index 2582a95..5df03b3 100644
--- a/yesod-static.cabal
+++ b/yesod-static.cabal
@@ -49,7 +49,6 @@ library
                    , data-default
                    , shakespeare-css       >= 1.0.3
                    , mime-types            >= 0.1
-                   , hjsmin
                    , filepath              >= 1.3
                    , resourcet             >= 0.4
                    , unordered-containers  >= 0.2
@@ -62,13 +61,6 @@ library
                    , hashable              >= 1.1

     exposed-modules: Yesod.Static
-                     Yesod.EmbeddedStatic
-                     Yesod.EmbeddedStatic.Generators
-                     Yesod.EmbeddedStatic.Types
-                     Yesod.EmbeddedStatic.Css.AbsoluteUrl
-
-    other-modules:   Yesod.EmbeddedStatic.Internal
-                     Yesod.EmbeddedStatic.Css.Util

     ghc-options:     -Wall
     extensions: TemplateHaskell
@@ -108,7 +100,6 @@ test-suite tests
                    , data-default
                    , shakespeare-css
                    , mime-types
-                   , hjsmin
                    , filepath
                    , resourcet
                    , unordered-containers
--
2.0.0.rc2


code:
From da032b804c0a35c2831664e28c9211f4fe712593 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
Date: Tue, 10 Jun 2014 20:39:42 +0000
Subject: [PATCH] avoid TH

---
 Yesod.hs              | 19 ++++++++++++--
 Yesod/Default/Main.hs | 32 +-----------------------
 Yesod/Default/Util.hs | 69 ++-------------------------------------------------
 3 files changed, 20 insertions(+), 100 deletions(-)

diff --git a/Yesod.hs b/Yesod.hs
index b367144..fbe309c 100644
--- a/Yesod.hs
+++ b/Yesod.hs
@@ -5,9 +5,24 @@ module Yesod
     ( -- * Re-exports from yesod-core
       module Yesod.Core
     , module Yesod.Form
-    , module Yesod.Persist
+    , insertBy
+    , replace
+    , deleteBy
+    , delete
+    , insert
+    , Key
     ) where

 import Yesod.Core
 import Yesod.Form
-import Yesod.Persist
+
+-- These symbols are usually imported from persistent,
+-- But it is not built on Android. Still export them
+-- just so that hiding them will work.
+data Key = DummyKey
+insertBy = undefined
+replace = undefined
+deleteBy = undefined
+delete = undefined
+insert = undefined
+
diff --git a/Yesod/Default/Main.hs b/Yesod/Default/Main.hs
index 565ed35..41c2df0 100644
--- a/Yesod/Default/Main.hs
+++ b/Yesod/Default/Main.hs
@@ -1,10 +1,8 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE TemplateHaskell    #-}
 module Yesod.Default.Main
     ( defaultMain
-    , defaultMainLog
     , defaultRunner
     , defaultDevelApp
     , LogFunc
@@ -23,7 +21,7 @@ import Control.Monad (when)
 import System.Environment (getEnvironment)
 import Data.Maybe (fromMaybe)
 import Safe (readMay)
-import Control.Monad.Logger (Loc, LogSource, LogLevel (LevelError), liftLoc)
+import Control.Monad.Logger (Loc, LogSource, LogLevel (LevelError))
 import System.Log.FastLogger (LogStr, toLogStr)
 import Language.Haskell.TH.Syntax (qLocation)

@@ -55,34 +53,6 @@ defaultMain load getApp = do

 type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()

--- | Same as @defaultMain@, but gets a logging function back as well as an
--- @Application@ to install Warp exception handlers.
---
--- Since 1.2.5
-defaultMainLog :: (Show env, Read env)
-               => IO (AppConfig env extra)
-               -> (AppConfig env extra -> IO (Application, LogFunc))
-               -> IO ()
-defaultMainLog load getApp = do
-    config <- load
-    (app, logFunc) <- getApp config
-    runSettings defaultSettings
-        { settingsPort = appPort config
-        , settingsHost = appHost config
-        , settingsOnException = const $ \e -> when (shouldLog' e) $ logFunc
-            $(qLocation >>= liftLoc)
-            "yesod"
-            LevelError
-            (toLogStr $ "Exception from Warp: " ++ show e)
-        } app
-  where
-    shouldLog' =
-#if MIN_VERSION_warp(2,1,3)
-        Warp.defaultShouldDisplayException
-#else
-        const True
-#endif
-
 -- | Run your application continously, listening for SIGINT and exiting
 --   when received
 --
diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs
index a10358e..0547424 100644
--- a/Yesod/Default/Util.hs
+++ b/Yesod/Default/Util.hs
@@ -5,10 +5,9 @@
 module Yesod.Default.Util
     ( addStaticContentExternal
     , globFile
-    , widgetFileNoReload
-    , widgetFileReload
+    --, widgetFileNoReload
+    --, widgetFileReload
     , TemplateLanguage (..)
-    , defaultTemplateLanguages
     , WidgetFileSettings
     , wfsLanguages
     , wfsHamletSettings
@@ -20,9 +19,6 @@ import Yesod.Core -- purposely using complete import so that Haddock will see ad
 import Control.Monad (when, unless)
 import System.Directory (doesFileExist, createDirectoryIfMissing)
 import Language.Haskell.TH.Syntax
-import Text.Lucius (luciusFile, luciusFileReload)
-import Text.Julius (juliusFile, juliusFileReload)
-import Text.Cassius (cassiusFile, cassiusFileReload)
 import Text.Hamlet (HamletSettings, defaultHamletSettings)
 import Data.Maybe (catMaybes)
 import Data.Default (Default (def))
@@ -69,68 +65,7 @@ data TemplateLanguage = TemplateLanguage
     , tlReload :: FilePath -> Q Exp
     }

-defaultTemplateLanguages :: HamletSettings -> [TemplateLanguage]
-defaultTemplateLanguages hset =
-    [ TemplateLanguage False "hamlet"  whamletFile' whamletFile'
-    , TemplateLanguage True  "cassius" cassiusFile  cassiusFileReload
-    , TemplateLanguage True  "julius"  juliusFile   juliusFileReload
-    , TemplateLanguage True  "lucius"  luciusFile   luciusFileReload
-    ]
-  where
-    whamletFile' = whamletFileWithSettings hset
-
 data WidgetFileSettings = WidgetFileSettings
     { wfsLanguages :: HamletSettings -> [TemplateLanguage]
     , wfsHamletSettings :: HamletSettings
     }
-
-instance Default WidgetFileSettings where
-    def = WidgetFileSettings defaultTemplateLanguages defaultHamletSettings
-
-widgetFileNoReload :: WidgetFileSettings -> FilePath -> Q Exp
-widgetFileNoReload wfs x = combine "widgetFileNoReload" x False $ wfsLanguages wfs $ wfsHamletSettings wfs
-
-widgetFileReload :: WidgetFileSettings -> FilePath -> Q Exp
-widgetFileReload wfs x = combine "widgetFileReload" x True $ wfsLanguages wfs $ wfsHamletSettings wfs
-
-combine :: String -> String -> Bool -> [TemplateLanguage] -> Q Exp
-combine func file isReload tls = do
-    mexps <- qmexps
-    case catMaybes mexps of
-        [] -> error $ concat
-            [ "Called "
-            , func
-            , " on "
-            , show file
-            , ", but no template were found."
-            ]
-        exps -> return $ DoE $ map NoBindS exps
-  where
-    qmexps :: Q [Maybe Exp]
-    qmexps = mapM go tls
-
-    go :: TemplateLanguage -> Q (Maybe Exp)
-    go tl = whenExists file (tlRequiresToWidget tl) (tlExtension tl) ((if isReload then tlReload else tlNoReload) tl)
-
-whenExists :: String
-           -> Bool -- ^ requires toWidget wrap
-           -> String -> (FilePath -> Q Exp) -> Q (Maybe Exp)
-whenExists = warnUnlessExists False
-
-warnUnlessExists :: Bool
-                 -> String
-                 -> Bool -- ^ requires toWidget wrap
-                 -> String -> (FilePath -> Q Exp) -> Q (Maybe Exp)
-warnUnlessExists shouldWarn x wrap glob f = do
-    let fn = globFile glob x
-    e <- qRunIO $ doesFileExist fn
-    when (shouldWarn && not e) $ qRunIO $ putStrLn $ "widget file not found: " ++ fn
-    if e
-        then do
-            ex <- f fn
-            if wrap
-                then do
-                    tw <- [|toWidget|]
-                    return $ Just $ tw `AppE` ex
-                else return $ Just ex
-        else return Nothing
--
2.0.0

repo_name: kakafarm/git

license: unknown


code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>English</string>
	<key>CFBundleExecutable</key>
	<string>git-annex-webapp</string>
	<key>NSHumanReadableCopyright</key>
	<string>GPL 3</string>
	<key>CFBundleGetInfoString</key>
	<string>0.0.1</string>
	<key>CFBundleIconFile</key>
	<string>git-annex</string>
	<key>CFBundleIdentifier</key>
	<string>com.branchable.git-annex</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>GIT-ANNEX</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>0.0.1</string>
	<key>CFBundleSignature</key>
	<string>git-annex</string>
	<key>CFBundleVersion</key>
	<string>0.0.1</string>
	<key>LSMinimumSystemVersion</key>
	<string>10.5</string>
	<key>CFBundleDisplayName</key>
	<string>Start git-annex webapp</string>
	<key>LSMinimumSystemVersionByArchitecture</key>
	<dict>
		<key>i386</key>
		<string>10.5.0</string>
		<key>x86_64</key>
		<string>10.6.0</string>
	</dict>
</dict>
</plist>


code:
This is a app bundle for git-annex. Most users are going to want to
just click on the icon to start up the git-annex webapp.

To use git-annex at the command line, you can put the directory containing
this README into your PATH.

Or, you can use the runshell script in this directory to start a shell
that is configured to use git-annex and the other utilities included in
this bundle, including git, gpg, rsync, ssh, etc.


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git "$@"


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git-annex "$@"


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git-annex-shell "$@"


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

# OSX wants this to run in the background.
exec "$base/runshell" git-annex webapp "$@" &


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git-receive-pack "$@"


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git-shell "$@"


code:
#!/bin/sh
link="$(readlink "$0")" || true
if [ -n "$link" ]; then
	base="$(dirname "$link")"
else
	base="$(dirname "$0")"
fi

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi
if [ ! -e "$base/runshell" ]; then
	echo "** cannot find $base/runshell" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# If this is a standalone app, set a variable that git-annex can use to
# install itself.
if [ -e "$base/git-annex" ]; then
	GIT_ANNEX_APP_BASE="$base"
	export GIT_ANNEX_APP_BASE
fi

exec "$base/runshell" git-upload-pack "$@"


code:
#!/bin/sh
# Runs a shell command (or interactive shell) using the binaries
# bundled with this app.

set -e

base="$(dirname "$0")"

if [ ! -d "$base" ]; then
	echo "** cannot find base directory (I seem to be $0)" >&2
	exit 1
fi

bundle="$base/bundle"

if [ ! -e "$bundle/git-annex" ]; then
	echo "** bundle directory $bundle does not contain git-annex" >&2
	exit 1
fi
if [ ! -e "$bundle/git" ]; then
	echo "** bundle directory $bundle does not contain git" >&2
	exit 1
fi

# Get absolute path to base, to avoid breakage when things change directories.
orig="$(pwd)"
cd "$base"
base="$(pwd)"
cd "$orig"

# Install shim that's used to run git-annex-shell from ssh authorized_keys.
# The assistant also does this when run, but the user may not be using the
# assistant.
if [ ! -e "$HOME/.ssh/git-annex-shell" ]; then
	mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
	(
		echo "#!/bin/sh"
		echo "set -e"
		echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
		echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
		echo "else"
		echo "exec $base/runshell git-annex-shell -c \"\$@\""
		echo "fi"
	) > "$HOME/.ssh/git-annex-shell"
	chmod +x "$HOME/.ssh/git-annex-shell"
fi

# And this shim is used by the webapp when adding a remote ssh server.
if [ ! -e "$HOME/.ssh/git-annex-wrapper" ]; then
	mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
	(
		echo "#!/bin/sh"
		echo "set -e"
		echo "exec $base/runshell \"\$@\""
	) > "$HOME/.ssh/git-annex-wrapper"
	chmod +x "$HOME/.ssh/git-annex-wrapper"
fi

# Put our binaries first, to avoid issues with out of date or incompatable
# system binaries.
ORIG_PATH="$PATH"
export ORIG_PATH
PATH=$bundle:$PATH
export PATH

ORIG_GIT_EXEC_PATH="$GIT_EXEC_PATH"
export ORIG_GIT_EXEC_PATH
GIT_EXEC_PATH=$bundle
export GIT_EXEC_PATH

ORIG_GIT_TEMPLATE_DIR="$GIT_TEMPLATE_DIR"
export ORIG_GIT_TEMPLATE_DIR
GIT_TEMPLATE_DIR="$bundle/templates"
export GIT_TEMPLATE_DIR

# Indicate which variables were exported above.
GIT_ANNEX_STANDLONE_ENV="PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR"
export GIT_ANNEX_STANDLONE_ENV

if [ "$1" ]; then
	cmd="$1"
	shift 1
	exec "$cmd" "$@"
else
	$SHELL
fi


code:
#!/bin/sh
# Script to build git-annex on windows. Run by build.bat
# Does not currently build the NSIS installer. See build.sh for how to do
# that.

set -e
set -x

# Path to the Haskell Platform.
HP="/c/Program Files/Haskell Platform/2013.2.0.0"

PATH="$HP/bin:$HP/lib/extralibs/bin:$PATH"

# Run a command with the cygwin environment available.
# However, programs not from cygwin are preferred.
withcyg () {
	PATH="$PATH:/c/cygwin/bin" "$@"
}
withcygpreferred () {
	PATH="/c/cygwin/bin:$PATH" "$@"
}

# Install haskell dependencies.
# cabal install is not run in cygwin, because we don't want configure scripts
# for haskell libraries to link them with the cygwin library.
cabal install --only-dependencies || true

# Build git-annex
if [ ! -e "dist/setup-config" ]; then
	withcyg cabal configure
fi
if ! withcyg cabal build; then
	ghc --make Build/EvilLinker
	withcyg Build/EvilLinker
fi

# Build the installer
cabal install nsis
ghc --make Build/NullSoftInstaller.hs
PATH="$PATH:/cygdrive/c/Program Files/NSIS"
# Want to include cygwin programs in bundle, not others, since
# it includes the cygwin libs that go with them.
withcygpreferred Build/NullSoftInstaller.exe


code:
#!/bin/sh
#
# This script is run by the jenkins autobuilder, in a mingw environment,
# to build git-annex for Windows.

set -x
set -e

# Path to the Haskell Platform.
HP="/c/Program Files (x86)/Haskell Platform/2013.2.0.0"

PATH="$HP/bin:$HP/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/c/msysgit/cmd:/c/msysgit/bin:$PATH"

# Run a command with the cygwin environment available.
# However, programs not from cygwin are preferred.
withcyg () {
	PATH="$PATH:/c/cygwin/bin" "$@"
}
withcygpreferred () {
	PATH="/c/cygwin/bin:$PATH" "$@"
}

# This tells git-annex where to upgrade itself from.
UPGRADE_LOCATION=http://downloads.kitenet.net/git-annex/windows/current/git-annex-installer.exe

# Uncomment to get rid of cabal installed libraries.
#rm -rf /c/Users/jenkins/AppData/Roaming/cabal /c/Users/jenkins/AppData/Roaming/ghc

# Don't allow build artifact from a past successful build to be extracted
# if we fail.
rm -f git-annex-installer.exe

# Install haskell dependencies.
# cabal install is not run in cygwin, because we don't want configure scripts
# for haskell libraries to link them with the cygwin library.
cabal update || true

cabal install --only-dependencies || true

# Detect when the last build was an incremental build and failed,
# and try a full build. Done this way because this shell seems a bit
# broken.
if [ -e last-incremental-failed ]; then
	cabal clean || true
	# windows breakage..
	rm -rf dist dist.old || mv -v dist dist.old
fi
touch last-incremental-failed

# Build git-annex
withcyg cabal configure
if ! withcyg cabal build; then
	rm -f Build/EvilLinker.exe
	ghc --make Build/EvilLinker
	Build/EvilLinker
fi

# Build the installer
cabal install nsis
ghc --make Build/NullSoftInstaller.hs
# Want to include cygwin programs in bundle, not others, since
# it includes the cygwin libs that go with them.
withcygpreferred Build/NullSoftInstaller.exe

rm -f last-incremental-failed

# Test git-annex
# (doesn't currently work well on autobuilder, reason unknown)
rm -rf .t
withcyg dist/build/git-annex/git-annex.exe test || true

rm -f dist/build-version
ghc --make Build/BuildVersion.hs
Build/BuildVersion > dist/build-version


code:
/*!
 * Bootstrap v3.1.1 (http://getbootstrap.com)
 * Copyright 2011-2014 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */

.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn:active,
.btn.active {
  background-image: none;
}
.btn-default {
  text-shadow: 0 1px 0 #fff;
  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #dbdbdb;
  border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
  background-color: #e0e0e0;
  background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
  background-color: #e0e0e0;
  border-color: #dbdbdb;
}
.btn-primary {
  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #2b669a;
}
.btn-primary:hover,
.btn-primary:focus {
  background-color: #2d6ca2;
  background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
  background-color: #2d6ca2;
  border-color: #2b669a;
}
.btn-success {
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
  background-color: #419641;
  background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
  background-color: #419641;
  border-color: #3e8f3e;
}
.btn-info {
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
  background-color: #2aabd2;
  background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
  background-color: #2aabd2;
  border-color: #28a4c9;
}
.btn-warning {
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
  background-color: #eb9316;
  background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
  background-color: #eb9316;
  border-color: #e38d13;
}
.btn-danger {
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
  background-color: #c12e2a;
  background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
  background-color: #c12e2a;
  border-color: #b92c28;
}
.thumbnail,
.img-thumbnail {
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  background-color: #e8e8e8;
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
  background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  background-color: #357ebd;
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
  background-repeat: repeat-x;
}
.navbar-default {
  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .active > a {
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
  background-repeat: repeat-x;
  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  background-repeat: repeat-x;
}
.navbar-inverse .navbar-nav > .active > a {
  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
  background-repeat: repeat-x;
  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
  border-radius: 0;
}
.alert {
  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
  background-repeat: repeat-x;
  border-color: #b2dba1;
}
.alert-info {
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
  background-repeat: repeat-x;
  border-color: #9acfea;
}
.alert-warning {
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
  background-repeat: repeat-x;
  border-color: #f5e79e;
}
.alert-danger {
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
  background-repeat: repeat-x;
  border-color: #dca7a7;
}
.progress {
  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar {
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-success {
  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-info {
  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-warning {
  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
  background-repeat: repeat-x;
}
.progress-bar-danger {
  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
  background-repeat: repeat-x;
}
.list-group {
  border-radius: 4px;
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  text-shadow: 0 -1px 0 #3071a9;
  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
  background-repeat: repeat-x;
  border-color: #3278b3;
}
.panel {
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
  background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
  background-repeat: repeat-x;
}
.panel-success > .panel-heading {
  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
  background-repeat: repeat-x;
}
.panel-info > .panel-heading {
  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
  background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
  background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
  background-repeat: repeat-x;
}
.well {
  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
  background-repeat: repeat-x;
  border-color: #dcdcdc;
  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */