summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-04-08 16:14:23 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-04-08 16:14:23 -0400
commit723246afab6fb3a9f2b4a0847111c2ed3f586fd2 (patch)
treec4e2c8b48a66add512b3b71954c5dc16fcc0bfa5
parentd8394ede7b16d9aafcc19885f31d7935250a9bb6 (diff)
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.
-rw-r--r--Command/Add.hs23
-rw-r--r--debian/changelog4
-rw-r--r--doc/git-annex-add.mdwn4
3 files changed, 26 insertions, 5 deletions
diff --git a/Command/Add.hs b/Command/Add.hs
index 7faa7c80d..eb0dc22d8 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 624b8a413..519628d1d 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 <id@joeyh.name> Mon, 06 Apr 2015 20:14:20 -0400
diff --git a/doc/git-annex-add.mdwn b/doc/git-annex-add.mdwn
index 4ae0d1ce1..20033412b 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`