promote forum request to todo item so it is not lost
This commit is contained in:
parent
7b52315d35
commit
cedca095b9
2 changed files with 32 additions and 10 deletions
|
@ -32,17 +32,28 @@ import Git.Sha
|
|||
|
||||
import Numeric
|
||||
import System.Posix.Types
|
||||
import Data.Char
|
||||
|
||||
{- Somewhat unexpectedly, git-ls-files does its own wildcard expansion
|
||||
- of files passed to it. To avoid that, and only get back exactly the
|
||||
- files we asked for, slash-escape punctuation in the filename. -}
|
||||
mkFile :: FilePath -> CommandParam
|
||||
mkFile = File . concatMap go
|
||||
where
|
||||
go c
|
||||
| c == '*' = ['\\', c]
|
||||
| otherwise = [c]
|
||||
|
||||
{- Scans for files that are checked into git at the specified locations. -}
|
||||
inRepo :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
inRepo l = pipeNullSplit $ Params "ls-files --cached -z --" : map File l
|
||||
inRepo l = pipeNullSplit $ Params "ls-files --cached -z --" : map mkFile l
|
||||
|
||||
{- Scans for files at the specified locations that are not checked into git. -}
|
||||
notInRepo :: Bool -> [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
notInRepo include_ignored l repo = pipeNullSplit params repo
|
||||
where
|
||||
params = [Params "ls-files --others"] ++ exclude ++
|
||||
[Params "-z --"] ++ map File l
|
||||
[Params "-z --"] ++ map mkFile l
|
||||
exclude
|
||||
| include_ignored = []
|
||||
| otherwise = [Param "--exclude-standard"]
|
||||
|
@ -50,28 +61,28 @@ notInRepo include_ignored l repo = pipeNullSplit params repo
|
|||
{- Finds all files in the specified locations, whether checked into git or
|
||||
- not. -}
|
||||
allFiles :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
allFiles l = pipeNullSplit $ Params "ls-files --cached --others -z --" : map File l
|
||||
allFiles l = pipeNullSplit $ Params "ls-files --cached --others -z --" : map mkFile l
|
||||
|
||||
{- Returns a list of files in the specified locations that have been
|
||||
- deleted. -}
|
||||
deleted :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
deleted l repo = pipeNullSplit params repo
|
||||
where
|
||||
params = [Params "ls-files --deleted -z --"] ++ map File l
|
||||
params = [Params "ls-files --deleted -z --"] ++ map mkFile l
|
||||
|
||||
{- Returns a list of files in the specified locations that have been
|
||||
- modified. -}
|
||||
modified :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
modified l repo = pipeNullSplit params repo
|
||||
where
|
||||
params = [Params "ls-files --modified -z --"] ++ map File l
|
||||
params = [Params "ls-files --modified -z --"] ++ map mkFile l
|
||||
|
||||
{- Files that have been modified or are not checked into git (and are not
|
||||
- ignored). -}
|
||||
modifiedOthers :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
modifiedOthers l repo = pipeNullSplit params repo
|
||||
where
|
||||
params = [Params "ls-files --modified --others --exclude-standard -z --"] ++ map File l
|
||||
params = [Params "ls-files --modified --others --exclude-standard -z --"] ++ map mkFile l
|
||||
|
||||
{- Returns a list of all files that are staged for commit. -}
|
||||
staged :: [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
||||
|
@ -86,7 +97,7 @@ staged' :: [CommandParam] -> [FilePath] -> Repo -> IO ([FilePath], IO Bool)
|
|||
staged' ps l = pipeNullSplit $ prefix ++ ps ++ suffix
|
||||
where
|
||||
prefix = [Params "diff --cached --name-only -z"]
|
||||
suffix = Param "--" : map File l
|
||||
suffix = Param "--" : map mkFile l
|
||||
|
||||
type StagedDetails = (FilePath, Maybe Sha, Maybe FileMode)
|
||||
|
||||
|
@ -107,7 +118,7 @@ stagedDetails' ps l repo = do
|
|||
return (map parse ls, cleanup)
|
||||
where
|
||||
params = Params "ls-files --stage -z" : ps ++
|
||||
Param "--" : map File l
|
||||
Param "--" : map mkFile l
|
||||
parse s
|
||||
| null file = (s, Nothing, Nothing)
|
||||
| otherwise = (file, extractSha $ take shaSize rest, readmode mode)
|
||||
|
@ -136,7 +147,7 @@ typeChanged' ps l repo = do
|
|||
return (map (\f -> relPathDirToFileAbs currdir $ top </> f) fs, cleanup)
|
||||
where
|
||||
prefix = [Params "diff --name-only --diff-filter=T -z"]
|
||||
suffix = Param "--" : (if null l then [File "."] else map File l)
|
||||
suffix = Param "--" : (if null l then [File "."] else map mkFile l)
|
||||
|
||||
{- A item in conflict has two possible values.
|
||||
- Either can be Nothing, when that side deleted the file. -}
|
||||
|
@ -166,7 +177,7 @@ unmerged l repo = do
|
|||
(fs, cleanup) <- pipeNullSplit params repo
|
||||
return (reduceUnmerged [] $ catMaybes $ map parseUnmerged fs, cleanup)
|
||||
where
|
||||
params = Params "ls-files --unmerged -z --" : map File l
|
||||
params = Params "ls-files --unmerged -z --" : map mkFile l
|
||||
|
||||
data InternalUnmerged = InternalUnmerged
|
||||
{ isus :: Bool
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
Someone in the forum noticed that `git annex wanted`
|
||||
handles preferred content settings, but there is no analagous `git annex
|
||||
required`.
|
||||
|
||||
Probably worth adding that, although required content is not an often
|
||||
used feature, and vicfg can already configure it.
|
||||
|
||||
(I don't much like the `git annex required` name. Nor the `git annex wanted`
|
||||
one when it comes to that. Oh well.)
|
||||
|
||||
--[[Joey]]
|
Loading…
Add table
Reference in a new issue