bugfix: restore index file env var

This fixes precommit, since in that hook, git sets the env var to write
to the lock file, which avoids git add failing due to the presence of the
lock file. (Took me a good hour and a half of confusion to figure this out.)

Test suite now passes 100%! Only the upgrade code still remains to be
written.
This commit is contained in:
Joey Hess 2011-06-22 22:56:27 -04:00
parent c4e6730042
commit a4ef0e4da4
2 changed files with 24 additions and 19 deletions

View file

@ -68,16 +68,19 @@ genIndex g = do
{- Runs an action using the branch's index file. -}
withIndex :: Annex a -> Annex a
withIndex a = do
withIndex = withIndex' False
withIndex' :: Bool -> Annex a -> Annex a
withIndex' bootstrapping a = do
g <- Annex.gitRepo
let f = index g
liftIO $ Git.useIndex f
reset <- liftIO $ Git.useIndex f
e <- liftIO $ doesFileExist f
unless e $ liftIO $ genIndex g
unless bootstrapping $ do
e <- liftIO $ doesFileExist f
unless e $ liftIO $ genIndex g
r <- a
liftIO $ Git.useDefaultIndex
liftIO reset
return r
withIndexUpdate :: Annex a -> Annex a
@ -121,11 +124,8 @@ create = do
inorigin <- refexists origin
if inorigin
then liftIO $ Git.run g "branch" [Param name, Param origin]
else liftIO $ do
let f = index g
liftIO $ Git.useIndex f
GitUnionMerge.commit g "branch created" fullname []
liftIO $ Git.useDefaultIndex
else withIndex' True $
liftIO $ GitUnionMerge.commit g "branch created" fullname []
where
origin = "origin/" ++ name
refexists ref = do

View file

@ -60,7 +60,6 @@ module GitRepo (
repoAbsPath,
reap,
useIndex,
useDefaultIndex,
hashObject,
getSha,
shaSize,
@ -79,6 +78,7 @@ import System.Cmd.Utils
import IO (bracket_)
import Data.String.Utils
import System.IO
import IO (try)
import qualified Data.Map as Map hiding (map, split)
import Network.URI
import Data.Maybe
@ -88,7 +88,7 @@ import Codec.Binary.UTF8.String (encode)
import Text.Printf
import Data.List (isInfixOf, isPrefixOf, isSuffixOf)
import System.Exit
import System.Posix.Env (setEnv, unsetEnv)
import System.Posix.Env (setEnv, unsetEnv, getEnv)
import Utility
@ -391,13 +391,18 @@ reap = do
r <- catch (getAnyProcessStatus False True) (\_ -> return Nothing)
maybe (return ()) (const reap) r
{- Forces git to use the specified index file. -}
useIndex :: FilePath -> IO ()
useIndex index = setEnv "GIT_INDEX_FILE" index True
{- Undoes useIndex -}
useDefaultIndex :: IO ()
useDefaultIndex = unsetEnv "GIT_INDEX_FILE"
{- Forces git to use the specified index file.
- Returns an action that will reset back to the default
- index file. -}
useIndex :: FilePath -> IO (IO ())
useIndex index = do
res <- try $ getEnv var
setEnv var index True
return $ reset res
where
var = "GIT_INDEX_FILE"
reset (Right (Just v)) = setEnv var v True
reset _ = unsetEnv var
{- Injects some content into git, returning its hash. -}
hashObject :: Repo -> String -> IO String