summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-07 16:15:30 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-07 16:15:30 -0400
commit032ee546c9cda12b4b85c05001220d47e8bbba4d (patch)
tree3e6957962b84167fdffa3ff5adf4c8bef1c337dd
parentf3d2bf2cda1462dcb1a5bbc81505823dd5c057ec (diff)
add: Stage symlinks the same as git add would, even if they are not a link to annexed content.
-rw-r--r--Command/Add.hs19
-rw-r--r--debian/changelog2
-rw-r--r--doc/git-annex-add.mdwn3
-rw-r--r--doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn2
-rw-r--r--doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_3_0039faa19e35eada1ff17eac6fbcab29._comment15
5 files changed, 34 insertions, 7 deletions
diff --git a/Command/Add.hs b/Command/Add.hs
index d53ba91ad..5f6f06cdb 100644
--- a/Command/Add.hs
+++ b/Command/Add.hs
@@ -66,10 +66,13 @@ startSmall :: FilePath -> CommandStart
startSmall file = do
showStart "add" file
showNote "non-large file; adding content to git repository"
- next $ do
- params <- forceParams
- Annex.Queue.addCommand "add" (params++[Param "--"]) [file]
- next $ return True
+ next $ performAdd file
+
+performAdd :: FilePath -> CommandPerform
+performAdd file = 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
@@ -81,11 +84,13 @@ start file = ifAnnexed file addpresent add
ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
case ms of
Nothing -> stop
- Just s
- | isSymbolicLink s || not (isRegularFile s) -> stop
+ Just s
+ | not (isRegularFile s) && not (isSymbolicLink s) -> stop
| otherwise -> do
showStart "add" file
- next $ perform file
+ next $ if isSymbolicLink s
+ then performAdd file
+ else perform file
addpresent key = ifM isDirect
( do
ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
diff --git a/debian/changelog b/debian/changelog
index 45619ea2a..d6db9d106 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -23,6 +23,8 @@ git-annex (5.20150618) UNRELEASED; urgency=medium
shared libraries including libyaml.
* import: Fix failure of cross-device import on Windows.
* merge: Avoid creating the synced/master branch.
+ * add: Stage symlinks the same as git add would, even if they are not a
+ link to annexed content.
-- Joey Hess <id@joeyh.name> Thu, 02 Jul 2015 12:31:14 -0400
diff --git a/doc/git-annex-add.mdwn b/doc/git-annex-add.mdwn
index 303b656b8..ee5f499d9 100644
--- a/doc/git-annex-add.mdwn
+++ b/doc/git-annex-add.mdwn
@@ -18,6 +18,9 @@ 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.
+This command can also be used to add symbolic links, both symlinks to
+annexed content, and other symlinks.
+
# OPTIONS
* `--include-dotfiles`
diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn
index 196b8f420..751ee1942 100644
--- a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn
+++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn
@@ -6,3 +6,5 @@ Is there already a good way of adding symlinks in direct mode? If not, I would f
Best regards,
T.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_3_0039faa19e35eada1ff17eac6fbcab29._comment b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_3_0039faa19e35eada1ff17eac6fbcab29._comment
new file mode 100644
index 000000000..d9b2d2b77
--- /dev/null
+++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_3_0039faa19e35eada1ff17eac6fbcab29._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-07-07T20:02:02Z"
+ content="""
+Recently, `git annex add` started adding files
+to git, if annex.largefiles didn't match them.
+
+So, it's possible to use that to add eg, source files. But it currently
+skips symlinks (unless they're git-annex symlinks).
+
+What I think makes sense to do is make it also process
+symlinks, and always check them into git as-is. So, git-annex add becomes
+like git-add except smart about adding large files to the annex.
+"""]]