Add --include, which is the same as --not --exclude.

This commit is contained in:
Joey Hess 2011-12-22 13:53:06 -04:00
parent 30cf6ce81c
commit 6bffe509d7
6 changed files with 28 additions and 10 deletions

View file

@ -9,8 +9,6 @@ module Git.Index where
import System.Posix.Env (setEnv, unsetEnv, getEnv)
import Common
{- Forces git to use the specified index file.
-
- Returns an action that will reset back to the default

View file

@ -112,6 +112,8 @@ options = commonOptions ++
"terminate filename with null"
, Option ['x'] ["exclude"] (ReqArg Limit.addExclude paramGlob)
"skip files matching the glob pattern"
, Option ['I'] ["include"] (ReqArg Limit.addInclude paramGlob)
"don't skip files matching the glob pattern"
, Option ['i'] ["in"] (ReqArg Limit.addIn paramRemote)
"skip files not present in a remote"
, Option ['C'] ["copies"] (ReqArg Limit.addCopies paramNumber)

View file

@ -55,10 +55,16 @@ addLimit :: (FilePath -> Annex Bool) -> Annex ()
addLimit = add . Utility.Matcher.Operation
{- Add a limit to skip files that do not match the glob. -}
addInclude :: String -> Annex ()
addInclude glob = addLimit $ return . matchglob glob
{- Add a limit to skip files that match the glob. -}
addExclude :: String -> Annex ()
addExclude glob = addLimit $ return . notExcluded
addExclude glob = addLimit $ return . not . matchglob glob
matchglob :: String -> FilePath -> Bool
matchglob glob f = isJust $ match cregex f []
where
notExcluded f = isNothing $ match cregex f []
cregex = compile regex []
regex = '^':wildToRegex glob

1
debian/changelog vendored
View file

@ -7,6 +7,7 @@ git-annex (3.20111212) UNRELEASED; urgency=low
* map: --fast disables use of dot to display map
* Test suite improvements. Current top-level test coverage: 75%
* Improve deletion of files from rsync special remotes. Closes: #652849
* Add --include, which is the same as --not --exclude.
-- Joey Hess <joeyh@debian.org> Mon, 12 Dec 2011 01:57:49 -0400

View file

@ -241,12 +241,13 @@ subdirectories).
* find [path ...]
Outputs a list of annexed files whose content is currently present.
Or, if a file matching option is specified, outputs a list of all
matching files, whether or not their content is currently present.
Outputs a list of annexed files in the specified path. With no path,
finds files in the current directory and its subdirectories.
With no parameters, defaults to finding all files in the current directory
and its subdirectories.
By default, only lists annexed files whose content is currently present.
This can be changed by specifying file matching options. To list all
annexed files, present or not, specify --include "*". To list all
annexed files whose content is not present, specify --not --in "."
To output filenames terminated with nulls, for use with xargs -0,
specify --print0.
@ -447,7 +448,16 @@ file contents are present at either of two repositories.
* --exclude=glob
Skips files matching the glob pattern. The glob is matched relative to
the current directory. For example: --exclude='*.mp3' --exclude='subdir/*'
the current directory. For example:
--exclude='*.mp3' --exclude='subdir/*'
* --include=glob
Skips files not matching the glob pattern. (Same as --not --exclude.)
For example, to include only mp3 and ogg files:
--include='*.mp3' --or --include='*.ogg'
* --in=repository

View file

@ -524,6 +524,7 @@ test_find = "git-annex find" ~: intmpclonerepo $ do
annexed_notpresent sha1annexedfile
git_annex_expectoutput "find" [] [annexedfile]
git_annex_expectoutput "find" ["--exclude", annexedfile, "--and", "--exclude", sha1annexedfile] []
git_annex_expectoutput "find" ["--include", annexedfile] [annexedfile]
git_annex_expectoutput "find" ["--not", "--in", "origin"] []
git_annex_expectoutput "find" ["--copies", "1", "--and", "--not", "--copies", "2"] [sha1annexedfile]
git_annex_expectoutput "find" ["--inbackend", "SHA1"] [sha1annexedfile]