diff --git a/Command/Add.hs b/Command/Add.hs index 7faa7c80d3..eb0dc22d85 100644 --- a/Command/Add.hs +++ b/Command/Add.hs @@ -52,7 +52,7 @@ seek ps = do matcher <- largeFilesMatcher let go a = flip a ps $ \file -> ifM (checkFileMatcher matcher file <||> Annex.getState Annex.force) ( start file - , stop + , startSmall file ) skipdotfiles <- not <$> Annex.getFlag (optionName includeDotFilesOption) go $ withFilesNotInGit skipdotfiles @@ -61,6 +61,16 @@ seek ps = do , go withFilesUnlocked ) +{- Pass file off to git-add. -} +startSmall :: FilePath -> CommandStart +startSmall file = do + showStart "add" file + showNote "non-large file; adding to git directly" + next $ do + params <- forceParams + Annex.Queue.addCommand "add" (params++[Param "--"]) [file] + next $ return True + {- The add subcommand annexes a file, generating a key for it using a - backend, and then moving it into the annex directory and setting up - the symlink pointing to its content. -} @@ -260,16 +270,19 @@ addLink :: FilePath -> Key -> Maybe InodeCache -> Annex () addLink file key mcache = ifM (coreSymlinks <$> Annex.getGitConfig) ( do _ <- link file key mcache - params <- ifM (Annex.getState Annex.force) - ( return [Param "-f"] - , return [] - ) + params <- forceParams Annex.Queue.addCommand "add" (params++[Param "--"]) [file] , do l <- link file key mcache addAnnexLink l file ) +forceParams :: Annex [CommandParam] +forceParams = ifM (Annex.getState Annex.force) + ( return [Param "-f"] + , return [] + ) + cleanup :: FilePath -> Key -> Maybe InodeCache -> Bool -> CommandCleanup cleanup file key mcache hascontent = do ifM (isDirect <&&> pure hascontent) diff --git a/debian/changelog b/debian/changelog index 624b8a413a..519628d1d9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,10 @@ git-annex (5.20150406.2) UNRELEASED; urgency=medium (Second time's the charm..) * fromkey, registerurl: When reading from stdin, allow the filename and url, respectively, to contain whitespace. + * add: If annex.largefiles is set and does not match a file that's being + added, the file will be checked into git rather than being added to the + annex. Previously, git annex add skipped over such files; this new + behavior is more useful in direct mode. -- Joey Hess Mon, 06 Apr 2015 20:14:20 -0400 diff --git a/doc/git-annex-add.mdwn b/doc/git-annex-add.mdwn index 4ae0d1ce1a..20033412b7 100644 --- a/doc/git-annex-add.mdwn +++ b/doc/git-annex-add.mdwn @@ -14,6 +14,10 @@ files from the current directory and below. Normally, files that are already checked into git, or that git has been configured to ignore will be silently skipped. +If annex.largefiles is configured, and does not match a file that is being +added, `git annex add` will behave the same as `git add` and add the +non-large file directly to the git repository, instead of to the annex. + # OPTIONS * `--include-dotfiles`