add uuid
This commit is contained in:
parent
31b24348d2
commit
ea5d7fe07a
3 changed files with 21 additions and 4 deletions
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.git-annex/*.log merge=union
|
15
Annex.hs
15
Annex.hs
|
@ -10,6 +10,8 @@ module Annex (
|
|||
|
||||
import System.Posix.Files
|
||||
import System.Directory
|
||||
import System.Cmd.Utils
|
||||
import System.IO
|
||||
import GitRepo
|
||||
import Utility
|
||||
import Locations
|
||||
|
@ -84,6 +86,13 @@ unannexFile state file = do
|
|||
{- Sets up a git repo for git-annex. May be called repeatedly. -}
|
||||
gitPrep :: GitRepo -> IO ()
|
||||
gitPrep repo = do
|
||||
-- Make sure that the repo has an annex.uuid setting.
|
||||
if ("" == gitConfig repo "annex.uuid" "")
|
||||
then do
|
||||
uuid <- genUUID
|
||||
gitRun repo ["config", "annex.uuid", uuid]
|
||||
else return ()
|
||||
|
||||
-- configure git to use union merge driver on state files
|
||||
let attrLine = stateLoc ++ "/*.log merge=union"
|
||||
let attributes = gitAttributes repo
|
||||
|
@ -99,3 +108,9 @@ gitPrep repo = do
|
|||
appendFile attributes $ attrLine ++ "\n"
|
||||
gitAdd repo attributes
|
||||
else return ()
|
||||
|
||||
{- Generates a UUID. There is a library for this, but it's not packaged,
|
||||
- so use the command line tool. -}
|
||||
genUUID :: IO String
|
||||
genUUID = do
|
||||
pOpen ReadFromPipe "uuid" ["-m"] $ \h -> hGetLine h
|
||||
|
|
|
@ -16,6 +16,7 @@ module GitRepo (
|
|||
gitConfig,
|
||||
gitAdd,
|
||||
gitRm,
|
||||
gitRun,
|
||||
gitAttributes
|
||||
) where
|
||||
|
||||
|
@ -128,11 +129,11 @@ gitRelative repo file = drop (length absrepo) absfile
|
|||
|
||||
{- Stages a changed/new file in git's index. -}
|
||||
gitAdd :: GitRepo -> FilePath -> IO ()
|
||||
gitAdd repo file = runGit repo ["add", file]
|
||||
gitAdd repo file = gitRun repo ["add", file]
|
||||
|
||||
{- Removes a file. -}
|
||||
gitRm :: GitRepo -> FilePath -> IO ()
|
||||
gitRm repo file = runGit repo ["rm", file]
|
||||
gitRm repo file = gitRun repo ["rm", file]
|
||||
|
||||
{- Constructs a git command line operating on the specified repo. -}
|
||||
gitCommandLine :: GitRepo -> [String] -> [String]
|
||||
|
@ -141,8 +142,8 @@ gitCommandLine repo params = assertlocal repo $
|
|||
["--git-dir="++(gitDir repo), "--work-tree="++(top repo)] ++ params
|
||||
|
||||
{- Runs git in the specified repo. -}
|
||||
runGit :: GitRepo -> [String] -> IO ()
|
||||
runGit repo params = assertlocal repo $ do
|
||||
gitRun :: GitRepo -> [String] -> IO ()
|
||||
gitRun repo params = assertlocal repo $ do
|
||||
r <- executeFile "git" True (gitCommandLine repo params) Nothing
|
||||
return ()
|
||||
|
||||
|
|
Loading…
Reference in a new issue