From 6bffe509d7f1ec60168522585925a43dbfffbd36 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 22 Dec 2011 13:53:06 -0400 Subject: [PATCH] Add --include, which is the same as --not --exclude. --- Git/Index.hs | 2 -- GitAnnex.hs | 2 ++ Limit.hs | 10 ++++++++-- debian/changelog | 1 + doc/git-annex.mdwn | 22 ++++++++++++++++------ test.hs | 1 + 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/Git/Index.hs b/Git/Index.hs index e58f1edd67..aaf54e032e 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 a5b9609b6d..40ebed0d69 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 c68c3bdd8b..26e5d689c9 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 564e144038..13bca33260 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 Mon, 12 Dec 2011 01:57:49 -0400 diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index b3d671bb89..f4eef5c4c7 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 645da588e8..b4823fda8d 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]