fork a process to feed git hash-object
This is another workaround for bug #624389. I hope it will fix http://git-annex.branchable.com/bugs/problem_with_upgrade_v2_-__62___v3/
This commit is contained in:
parent
bddbb66ea4
commit
44e973dd09
1 changed files with 12 additions and 3 deletions
15
Branch.hs
15
Branch.hs
|
@ -27,6 +27,8 @@ import Data.Maybe
|
||||||
import Data.List
|
import Data.List
|
||||||
import System.IO
|
import System.IO
|
||||||
import System.IO.Binary
|
import System.IO.Binary
|
||||||
|
import System.Posix.Process
|
||||||
|
import System.Exit
|
||||||
import qualified Data.ByteString.Char8 as B
|
import qualified Data.ByteString.Char8 as B
|
||||||
|
|
||||||
import Types.BranchState
|
import Types.BranchState
|
||||||
|
@ -329,12 +331,19 @@ stageJournalFiles = do
|
||||||
let paths = map (dir </>) fs
|
let paths = map (dir </>) fs
|
||||||
-- inject all the journal files directly into git
|
-- inject all the journal files directly into git
|
||||||
-- in one quick command
|
-- in one quick command
|
||||||
(h, s) <- Git.pipeWriteRead g [Param "hash-object",
|
(pid, fromh, toh) <- hPipeBoth "git" $ toCommand $
|
||||||
Param "-w", Param "--stdin-paths"] $ unlines paths
|
Git.gitCommandLine g [Param "hash-object", Param "-w", Param "--stdin-paths"]
|
||||||
|
_ <- forkProcess $ do
|
||||||
|
hPutStr toh $ unlines paths
|
||||||
|
hClose toh
|
||||||
|
exitSuccess
|
||||||
|
hClose toh
|
||||||
|
s <- hGetContents fromh
|
||||||
-- update the index, also in just one command
|
-- update the index, also in just one command
|
||||||
Git.UnionMerge.update_index g $
|
Git.UnionMerge.update_index g $
|
||||||
index_lines (lines s) $ map fileJournal fs
|
index_lines (lines s) $ map fileJournal fs
|
||||||
forceSuccess h
|
hClose fromh
|
||||||
|
forceSuccess pid
|
||||||
mapM_ removeFile paths
|
mapM_ removeFile paths
|
||||||
index_lines shas fs = map genline $ zip shas fs
|
index_lines shas fs = map genline $ zip shas fs
|
||||||
genline (sha, file) = Git.UnionMerge.update_index_line sha file
|
genline (sha, file) = Git.UnionMerge.update_index_line sha file
|
||||||
|
|
Loading…
Reference in a new issue