summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-12-22 13:53:06 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-12-22 14:00:17 -0400
commit6bffe509d7f1ec60168522585925a43dbfffbd36 (patch)
treea7fead7d1e5539139894f10c45f6d6c3d8d5cdc9
parent30cf6ce81ca8ff99f5284c5b991e546eb1da72ae (diff)
Add --include, which is the same as --not --exclude.
-rw-r--r--Git/Index.hs2
-rw-r--r--GitAnnex.hs2
-rw-r--r--Limit.hs10
-rw-r--r--debian/changelog1
-rw-r--r--doc/git-annex.mdwn22
-rw-r--r--test.hs1
6 files changed, 28 insertions, 10 deletions
diff --git a/Git/Index.hs b/Git/Index.hs
index e58f1edd6..aaf54e032 100644
--- a/Git/Index.hs
+++ b/Git/Index.hs
@@ -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
diff --git a/GitAnnex.hs b/GitAnnex.hs
index a5b9609b6..40ebed0d6 100644
--- a/GitAnnex.hs
+++ b/GitAnnex.hs
@@ -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)
diff --git a/Limit.hs b/Limit.hs
index c68c3bdd8..26e5d689c 100644
--- a/Limit.hs
+++ b/Limit.hs
@@ -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
diff --git a/debian/changelog b/debian/changelog
index 564e14403..13bca3326 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index b3d671bb8..f4eef5c4c 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -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
diff --git a/test.hs b/test.hs
index 645da588e..b4823fda8 100644
--- a/test.hs
+++ b/test.hs
@@ -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]