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:
parent
c4e6730042
commit
a4ef0e4da4
2 changed files with 24 additions and 19 deletions
20
Branch.hs
20
Branch.hs
|
@ -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
|
||||
|
|
23
GitRepo.hs
23
GitRepo.hs
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue