summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-01-11 16:00:40 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-01-11 16:00:40 -0400
commita8ce30401dd69d1d203cfc33b791c1b4d175666e (patch)
tree4d8107d878934d8b8a8606365b3d4367dbe4d239
parent3a844b1f3c5eb85d4571857ac10aa8183996513a (diff)
add checks that location log files are committed
currently failing for move --to
-rw-r--r--GitRepo.hs6
-rw-r--r--LocationLog.hs1
-rw-r--r--test.hs12
3 files changed, 19 insertions, 0 deletions
diff --git a/GitRepo.hs b/GitRepo.hs
index 533038fc8..ec363fe73 100644
--- a/GitRepo.hs
+++ b/GitRepo.hs
@@ -38,6 +38,7 @@ module GitRepo (
inRepo,
notInRepo,
stagedFiles,
+ changedUnstagedFiles,
checkAttr,
decodeGitFile,
encodeGitFile,
@@ -249,6 +250,11 @@ stagedFiles repo l = pipeNullSplit repo $
["diff", "--cached", "--name-only", "--diff-filter=ACMRT", "-z",
"--"] ++ l
+{- Returns a list of files that have unstaged changes. -}
+changedUnstagedFiles :: Repo -> [FilePath] -> IO [FilePath]
+changedUnstagedFiles repo l = pipeNullSplit repo $
+ ["diff", "--name-only", "-z", "--"] ++ l
+
{- Returns a list of the files in the specified locations that are staged
- for commit, and whose type has changed. -}
typeChangedStagedFiles :: Repo -> [FilePath] -> IO [FilePath]
diff --git a/LocationLog.hs b/LocationLog.hs
index e4dad03f5..926939051 100644
--- a/LocationLog.hs
+++ b/LocationLog.hs
@@ -23,6 +23,7 @@
module LocationLog (
LogStatus(..),
logChange,
+ logFile,
keyLocations
) where
diff --git a/test.hs b/test.hs
index 20e8bc28a..0a5a365d9 100644
--- a/test.hs
+++ b/test.hs
@@ -375,6 +375,18 @@ checklocationlog f expected = do
uuids <- LocationLog.keyLocations g' k
assertEqual ("location log for " ++ f ++ " " ++ (show k) ++ " " ++ thisuuid)
expected (elem thisuuid uuids)
+
+ -- Location log files should always be checked
+ -- into git, and any modifications staged for
+ -- commit. This is a regression test, as some
+ -- commands forgot to.
+ let lf = LocationLog.logFile g' k
+ fs <- Git.inRepo g' [lf]
+ when (null fs) $
+ assertFailure $ f ++ " logfile not added to git repo"
+ ufs <- Git.changedUnstagedFiles g' [lf]
+ when (not $ null ufs) $
+ assertFailure $ f ++ " logfile changes not staged"
_ -> assertFailure $ f ++ " failed to look up key"
inlocationlog :: FilePath -> Assertion