summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-16 19:57:56 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-16 19:57:56 -0400
commitc69e747d383d308d0cf65d88dc1c3be139d056a9 (patch)
treef035189a3438fcc7e8826cab31f0c4c48aa205a5
parentbe5b1defeb2f3b5499fd3c002fcdba5b5e9d15f5 (diff)
refactor
-rw-r--r--Commands.hs20
-rw-r--r--Core.hs21
2 files changed, 23 insertions, 18 deletions
diff --git a/Commands.hs b/Commands.hs
index 63ca6b5e4..f33be5393 100644
--- a/Commands.hs
+++ b/Commands.hs
@@ -114,13 +114,7 @@ addCmd file = inBackend file err $ do
liftIO $ createDirectoryIfMissing True (parentDir dest)
liftIO $ renameFile file dest
liftIO $ createSymbolicLink (link ++ reldest) file
- nocommit <- Annex.flagIsSet NoCommit
- if (not nocommit)
- then do
- liftIO $ Git.run g ["add", file]
- liftIO $ Git.run g ["commit", "-m",
- ("git-annex annexed " ++ file), file]
- else return ()
+ gitAdd file $ Just $ "git-annex annexed " ++ file
{- Inverse of addCmd. -}
unannexCmd :: FilePath -> Annex ()
@@ -201,11 +195,7 @@ describeCmd description = do
u <- getUUID g
describeUUID u description
log <- uuidLog
- nocommit <- Annex.flagIsSet NoCommit
- if (not nocommit)
- then liftIO $ Git.run g ["add", log]
- else return ()
- Annex.flagChange NeedCommit True
+ gitAdd log Nothing -- all logs are committed at end
liftIO $ putStrLn "description set"
{- Updates the LocationLog when a key's presence changes. -}
@@ -214,11 +204,7 @@ logStatus key status = do
g <- Annex.gitRepo
u <- getUUID g
f <- liftIO $ logChange g key u status
- nocommit <- Annex.flagIsSet NoCommit
- if (not nocommit)
- then liftIO $ Git.run g ["add", f]
- else return ()
- Annex.flagChange NeedCommit True
+ gitAdd f Nothing -- all logs are committed at end
inBackend file yes no = do
r <- liftIO $ Backend.lookupFile file
diff --git a/Core.hs b/Core.hs
index 6e48068f9..5f5cba295 100644
--- a/Core.hs
+++ b/Core.hs
@@ -2,6 +2,7 @@
module Core where
+import Maybe
import System.IO
import System.Directory
import Control.Monad.State (liftIO)
@@ -61,4 +62,22 @@ inAnnex key = do
g <- Annex.gitRepo
liftIO $ doesFileExist $ annexLocation g key
-{- -}
+{- Adds, optionally also commits a file to git.
+ -
+ - All changes to the git repository should go through this function.
+ -
+ - This is careful to not rely on the index. It may have staged changes,
+ - so only use operations that avoid committing such changes.
+ -}
+gitAdd :: FilePath -> Maybe String -> Annex ()
+gitAdd file commitmessage = do
+ nocommit <- Annex.flagIsSet NoCommit
+ if (nocommit)
+ then Annex.flagChange NeedCommit True
+ else do
+ g <- Annex.gitRepo
+ liftIO $ Git.run g ["add", file]
+ if (isJust commitmessage)
+ then liftIO $ Git.run g ["commit", "-m",
+ (fromJust commitmessage), file]
+ else return ()